新增离职登记接口
This commit is contained in:
73
API接口文档.md
73
API接口文档.md
@@ -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 创建开票申请
|
||||
|
||||
@@ -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/"),
|
||||
|
||||
178
finance/views.py
178
finance/views.py
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user