新增离职登记接口

This commit is contained in:
27942
2025-12-29 16:35:49 +08:00
parent b0210cc462
commit 719f91bfe3
3 changed files with 255 additions and 1 deletions

View File

@@ -1300,6 +1300,8 @@
```
#### 3.1.2 离职财务登记
##### 3.1.2.1 创建离职登记
- **URL**: `/finance/user-departure`
- **方法**: `POST`
- **功能**: 离职财务登记。如果用户有案件(作为承办人员),需要先转移案件才能完成离职登记
@@ -1340,6 +1342,77 @@
}
```
##### 3.1.2.2 离职登记列表查询
- **URL**: `/finance/user-departure-detail`
- **方法**: `POST`
- **功能**: 查询离职登记列表,支持分页和筛选
- **请求参数**:
- `page` (integer, 必填): 页码
- `per_page` (integer, 必填): 每页数量
- `username` (string, 可选): 用户名(模糊搜索)
- `times` (string, 可选): 开始时间格式YYYY-MM-DD
- `end_time` (string, 可选): 结束时间格式YYYY-MM-DD
- `state` (string, 可选): 审批状态("审核中"、"已通过"、"未通过"
- **响应示例**:
```json
{
"message": "查询成功",
"total": 50,
"data": [
{
"id": 1,
"title": "张三离职财务登记",
"content": "张三在2025-01-01办理离职登记",
"times": "2025-01-01",
"completeTiem": null,
"personincharge": "李四",
"state": "审核中",
"type": "离职财务登记",
"user_id": "1",
"user_info": {
"id": 1,
"username": "张三",
"account": "zhangsan",
"position": "律师",
"Dateofdeparture": "2025-01-01",
"state": "已离职"
}
}
],
"code": 0
}
```
##### 3.1.2.3 编辑离职登记
- **URL**: `/finance/editUserDeparture`
- **方法**: `POST`
- **功能**: 编辑离职登记信息
- **请求参数**:
- `id` (integer, 必填): 审批记录ID
- `Dateofdeparture` (string, 可选): 离职时间格式YYYY-MM-DD
- `personincharge` (string, 可选): 负责人
- **响应示例**:
```json
{
"message": "编辑成功",
"code": 0
}
```
##### 3.1.2.4 删除离职登记
- **URL**: `/finance/deleteUserDeparture`
- **方法**: `POST`
- **功能**: 删除离职登记记录,并恢复用户状态为"在职",清空离职时间
- **请求参数**:
- `id` (integer, 必填): 审批记录ID
- **响应示例**:
```json
{
"message": "删除成功,用户状态已恢复为\"在职\"",
"code": 0
}
```
### 3.2 开票管理
#### 3.2.1 创建开票申请

View File

@@ -1,9 +1,12 @@
from .views import UserRegister,UserDeparture,issueAnInvoice,issueAnInvoiceDetail,confirm,loan,PaymentRequest,reimbursement,confirmdisplay,loandisplay,PaymentDisplay,reimbursementdetail,Change,ChangeDetail,EditInvoice,DeleteInvoice,EditIncome,DeleteIncome,EditAccounts,DeleteAccounts,EditPayment,DeletePayment,EditReimbursement,DeleteReimbursement,EditBonusChange,DeleteBonusChange
from .views import UserRegister,UserDeparture,UserDepartureDetail,EditUserDeparture,DeleteUserDeparture,issueAnInvoice,issueAnInvoiceDetail,confirm,loan,PaymentRequest,reimbursement,confirmdisplay,loandisplay,PaymentDisplay,reimbursementdetail,Change,ChangeDetail,EditInvoice,DeleteInvoice,EditIncome,DeleteIncome,EditAccounts,DeleteAccounts,EditPayment,DeletePayment,EditReimbursement,DeleteReimbursement,EditBonusChange,DeleteBonusChange
from django.urls import path
urlpatterns = [
path("user-register", UserRegister.as_view(), name="user-register/"),
path("user-departure", UserDeparture.as_view(), name="user-departure/"),
path("user-departure-detail", UserDepartureDetail.as_view(), name="user-departure-detail/"),
path("editUserDeparture", EditUserDeparture.as_view(), name="editUserDeparture/"),
path("deleteUserDeparture", DeleteUserDeparture.as_view(), name="deleteUserDeparture/"),
path("issue-invoice", issueAnInvoice.as_view(), name="issue-invoice/"),
path('issue-Detail', issueAnInvoiceDetail.as_view(), name="issue-Detail/"),
path('editInvoice', EditInvoice.as_view(), name="editInvoice/"),

View File

@@ -1117,3 +1117,181 @@ class UserDeparture(APIView):
}
}, status=status.HTTP_200_OK)
class UserDepartureDetail(APIView):
def post(self, request, *args, **kwargs):
"""
离职登记列表查询
:param request:
:param args:
:param kwargs:
:return:
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
username = request.data.get('username') # 用户名搜索
times = request.data.get('times') # 开始时间
end_time = request.data.get('end_time') # 结束时间
state = request.data.get('state') # 审批状态
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数:页码和每页数量不能为空', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
# 查询离职财务登记的审批记录
Q_obj = Q(type="离职财务登记")
if username:
Q_obj &= Q(title__icontains=username) | Q(content__icontains=username)
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if state:
Q_obj &= Q(state=state)
approvals = Approval.objects.filter(Q_obj).order_by('-id')
total = len(approvals)
paginator = Paginator(approvals, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for approval in user_agents_page.object_list:
# 获取用户信息
try:
user = User.objects.get(id=int(approval.user_id))
user_info = {
'id': user.id,
'username': user.username,
'account': user.account,
'position': user.position,
'Dateofdeparture': user.Dateofdeparture.strftime("%Y-%m-%d") if user.Dateofdeparture else None,
'state': user.state
}
except (User.DoesNotExist, ValueError):
user_info = {
'id': None,
'username': '用户不存在',
'account': '',
'position': '',
'Dateofdeparture': None,
'state': ''
}
item = {
'id': approval.id,
'title': approval.title,
'content': approval.content,
'times': approval.times.strftime("%Y-%m-%d") if approval.times else None,
'completeTiem': approval.completeTiem.strftime("%Y-%m-%d") if approval.completeTiem else None,
'personincharge': approval.personincharge,
'state': approval.state,
'type': approval.type,
'user_id': approval.user_id,
'user_info': user_info
}
data.append(item)
return Response({
'message': '查询成功',
'total': total,
'data': data,
'code': 0
}, status=status.HTTP_200_OK)
class EditUserDeparture(APIView):
def post(self, request, *args, **kwargs):
"""
编辑离职登记
:param request:
:param args:
:param kwargs:
:return:
"""
id = request.data.get('id') # 审批记录ID
Dateofdeparture = request.data.get('Dateofdeparture') # 离职时间
personincharge = request.data.get('personincharge') # 负责人
if not id:
return Response({'status': 'error', 'message': '缺少参数id', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
approval = Approval.objects.get(id=id, type="离职财务登记")
except Approval.DoesNotExist:
return Response({'status': 'error', 'message': '离职登记记录不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 获取用户信息
try:
user = User.objects.get(id=int(approval.user_id))
except (User.DoesNotExist, ValueError):
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
update_fields_list = []
approval_update_fields = []
# 更新离职时间
if Dateofdeparture:
try:
Dateofdepartures = datetime.datetime.strptime(Dateofdeparture, "%Y-%m-%d")
user.Dateofdeparture = Dateofdepartures
update_fields_list.append('Dateofdeparture')
# 更新审批记录内容
approval.content = user.username + "" + Dateofdeparture + "办理离职登记"
approval_update_fields.append('content')
except ValueError:
return Response({'status': 'error', 'message': '离职时间格式错误请使用YYYY-MM-DD格式', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
# 更新负责人
if personincharge:
approval.personincharge = personincharge
approval_update_fields.append('personincharge')
# 保存更新
if update_fields_list:
user.save(update_fields=update_fields_list)
if approval_update_fields:
approval.save(update_fields=approval_update_fields)
return Response({'message': '编辑成功', 'code': 0}, status=status.HTTP_200_OK)
class DeleteUserDeparture(APIView):
def post(self, request, *args, **kwargs):
"""
删除离职登记
删除离职登记记录,并恢复用户状态为"在职",清空离职时间
:param request:
:param args:
:param kwargs:
:return:
"""
id = request.data.get('id') # 审批记录ID
if not id:
return Response({'status': 'error', 'message': '缺少参数id', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
approval = Approval.objects.get(id=id, type="离职财务登记")
except Approval.DoesNotExist:
return Response({'status': 'error', 'message': '离职登记记录不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 获取用户信息
try:
user = User.objects.get(id=int(approval.user_id))
except (User.DoesNotExist, ValueError):
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 恢复用户状态
user.state = "在职"
user.Dateofdeparture = None
user.save(update_fields=['state', 'Dateofdeparture'])
# 删除审批记录
approval.delete()
return Response({'message': '删除成功,用户状态已恢复为"在职"', 'code': 0}, status=status.HTTP_200_OK)