更新了软删除

This commit is contained in:
27942
2025-12-31 11:42:28 +08:00
parent a5b25fe699
commit 2af30a5e33
9 changed files with 310 additions and 68 deletions

View File

@@ -0,0 +1,28 @@
# Generated migration for soft delete support
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('User', '0012_remove_user_department_remove_user_role_and_more'),
]
operations = [
migrations.AddField(
model_name='department',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='user',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='approval',
name='is_deleted',
field=models.BooleanField(default=False),
),
]

View File

@@ -4,6 +4,7 @@ from business.models import role
# Create your models here.
class Department(models.Model):
username = models.CharField(max_length=100) # 部门名称
is_deleted = models.BooleanField(default=False) # 软删除标记
class User(models.Model):
role = models.ManyToManyField(role)
department =models.ManyToManyField(Department) # 归属部门
@@ -26,6 +27,7 @@ class User(models.Model):
salary = models.CharField(max_length=100,null=True, blank=True, default=None) # 工资
state = models.CharField(max_length=100) # 状态
token = models.TextField()
is_deleted = models.BooleanField(default=False) # 软删除标记
class Approval(models.Model):
title = models.CharField(max_length=100)
@@ -39,5 +41,6 @@ class Approval(models.Model):
state = models.CharField(max_length=100) # 状态
type = models.CharField(max_length=100) # 类别
user_id = models.CharField(max_length=100) # 事件id
is_deleted = models.BooleanField(default=False) # 软删除标记

View File

@@ -75,7 +75,7 @@ class CreateUserView(APIView):
}, status=status.HTTP_400_BAD_REQUEST)
# 检查用户名是否已存在username字段有唯一性约束
if User.objects.filter(username=username).exists():
if User.objects.filter(username=username, is_deleted=False).exists():
return Response({'status': 'error', 'message': '用户名已存在,不能重复', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
@@ -201,10 +201,10 @@ class EditorialStaffView(APIView):
if not all([username, account, password, IdCard, department, position, nation, mobilePhone, team, Dateofjoining,
academic]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
user = User.objects.get(id=id)
user = User.objects.get(id=id, is_deleted=False)
# 检查用户名是否已被其他用户使用(排除当前用户)
if username and User.objects.filter(username=username).exclude(id=id).exists():
if username and User.objects.filter(username=username, is_deleted=False).exclude(id=id).exists():
return Response({'status': 'error', 'message': '用户名已存在,不能重复', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
@@ -292,7 +292,7 @@ class LoginView(APIView):
if not all([username, password]):
return Response({'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(account=username)
user = User.objects.get(account=username, is_deleted=False)
# 只有"在职"状态的用户才能登录,新创建的用户需要完成财务登记审批流程
if user.state != '在职':
@@ -405,7 +405,7 @@ class DepartmentView(APIView):
Q_obj = Q()
if name:
Q_obj &= Q(username__icontains=name)
deps = Department.objects.filter(Q_obj)
deps = Department.objects.filter(Q_obj, is_deleted=False)
data = []
for dep in deps:
data.append({
@@ -481,7 +481,7 @@ class AddDepartment(APIView):
name = request.data.get('name')
if not all([name]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
dep = Department.objects.filter(username=name).first()
dep = Department.objects.filter(username=name, is_deleted=False).first()
if dep:
return Response({'message': '添加失败,部门存在', 'code': 0}, status=status.HTTP_400_BAD_REQUEST)
@@ -496,16 +496,18 @@ class DeleteDepartment(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
dep = Department.objects.get(id=id)
dep = Department.objects.get(id=id, is_deleted=False)
except Department.DoesNotExist:
return Response({'status': 'error', 'message': '部门不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
department = User.objects.filter(department=dep)
department = User.objects.filter(department=dep, is_deleted=False)
if department.exists():
return Response({'status': 'error', 'message': '删除失败,该部门还存在人员,请及时转移', 'code': 1},
status=status.HTTP_400_BAD_REQUEST)
dep.delete()
# 软删除:更新 is_deleted 字段
dep.is_deleted = True
dep.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -515,7 +517,7 @@ class Personlist(APIView):
"""
def post(self, request, *args, **kwargs):
users = Department.objects.all().order_by('id')
users = Department.objects.filter(is_deleted=False).order_by('id')
page = request.data.get('page')
per_page = request.data.get('per_page')
total = len(users)
@@ -583,7 +585,7 @@ class roxyExhibition(APIView):
# 如果用户没有部门,只匹配审批员(兼容旧数据)
query &= person_query
approvals = Approval.objects.filter(query).order_by('-id')
approvals = Approval.objects.filter(query, is_deleted=False).order_by('-id')
# 调试信息(生产环境可以注释掉)
# print(f"用户: {user.username}, 部门IDs: {user_department_ids_str}")
@@ -773,7 +775,7 @@ class personneldisplay(APIView):
:param kwargs:
:return:
"""
users = User.objects.all()
users = User.objects.filter(is_deleted=False)
data = []
for user in users:
itme = {
@@ -799,9 +801,11 @@ class DeleteUser(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(id=id)
user = User.objects.get(id=id, is_deleted=False)
except User.DoesNotExist:
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
user.delete()
# 软删除:更新 is_deleted 字段
user.is_deleted = True
user.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)

View File

@@ -0,0 +1,83 @@
# Generated migration for soft delete support
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('business', '0024_role_remark'),
]
operations = [
migrations.AddField(
model_name='prefiling',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='projectregistration',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='bid',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='case',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='invoice',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='caselog',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='sealapplication',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='warehousing',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='registerplatform',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='announcement',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='lawyerflie',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='schedule',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='role',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='permission',
name='is_deleted',
field=models.BooleanField(default=False),
),
]

View File

@@ -8,6 +8,7 @@ class PreFiling(models.Model):
description = models.TextField() # 描述
Undertaker = models.CharField(max_length=100) # 承办人员
submit = models.CharField(max_length=100) # 谁提交的
is_deleted = models.BooleanField(default=False) # 软删除标记
class ProjectRegistration(models.Model):
@@ -19,6 +20,7 @@ class ProjectRegistration(models.Model):
charge = models.CharField(max_length=100) # 收费情况
contract = models.TextField() # 合同
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Bid(models.Model):
@@ -28,6 +30,7 @@ class Bid(models.Model):
times = models.CharField(max_length=100) # 申请日期
BiddingAnnouncement = models.TextField() # 上传招标公告
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Case(models.Model):
@@ -39,11 +42,13 @@ class Case(models.Model):
ChangeRequest = models.CharField(max_length=100) # 变更申请
paymentcollection = models.CharField(max_length=100) # 已收款
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Invoice(models.Model):
user = models.ForeignKey(PreFiling, on_delete=models.CASCADE)
amount = models.CharField(max_length=100) # 金额
file = models.TextField() # 发票图片或PDF
is_deleted = models.BooleanField(default=False) # 软删除标记
class Caselog(models.Model):
user = models.ForeignKey(PreFiling, on_delete=models.CASCADE)
@@ -51,6 +56,7 @@ class Caselog(models.Model):
times = models.CharField(max_length=100) # 时间
username = models.CharField(max_length=100) # 提交人
file = models.TextField() # 文件
is_deleted = models.BooleanField(default=False) # 软删除标记
class SealApplication(models.Model):
Printingpurpose = models.CharField(max_length=100) # 用印用途
@@ -62,6 +68,7 @@ class SealApplication(models.Model):
times = models.CharField(max_length=100) # 日期
state = models.CharField(max_length=100) # 状态
username = models.CharField(max_length=100) # 提交人
is_deleted = models.BooleanField(default=False) # 软删除标记
class Warehousing(models.Model):
@@ -71,12 +78,14 @@ class Warehousing(models.Model):
deadline = models.CharField(max_length=100) # 入库期限
contract = models.TextField() # 入库合同
times = models.CharField(max_length=100) # 日期
is_deleted = models.BooleanField(default=False) # 软删除标记
class RegisterPlatform(models.Model):
platform = models.CharField(max_length=100) # 注册平台
number = models.CharField(max_length=100) # 注册号码
password = models.CharField(max_length=100) # 密码
username = models.CharField(max_length=100) # 注册人员
is_deleted = models.BooleanField(default=False) # 软删除标记
class Announcement(models.Model):
title = models.CharField(max_length=100) # 标题
@@ -85,6 +94,7 @@ class Announcement(models.Model):
file = models.TextField() # 文件
username = models.CharField(max_length=100) # 提交人
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class LawyerFlie(models.Model):
@@ -92,6 +102,7 @@ class LawyerFlie(models.Model):
remark = models.CharField(max_length=200)
file = models.TextField() # 文件
times = models.CharField(max_length=100)
is_deleted = models.BooleanField(default=False) # 软删除标记
class Schedule(models.Model):
@@ -100,6 +111,7 @@ class Schedule(models.Model):
end_time = models.CharField(max_length=100)
remark = models.CharField(max_length=200) # 备注
state = models.CharField(max_length=100)
is_deleted = models.BooleanField(default=False) # 软删除标记
@@ -107,9 +119,11 @@ class role(models.Model):
RoleName = models.CharField(max_length=100) # 角色名称
permissionId = models.CharField(max_length=1000) # 权限
remark = models.CharField(max_length=200) # 备注
is_deleted = models.BooleanField(default=False) # 软删除标记
class permission(models.Model):
permission_name = models.CharField(max_length=100) # 权限名称
permission_logo = models.CharField(max_length=100) # 权限标识
parent = models.CharField(max_length=100) # 父级
is_deleted = models.BooleanField(default=False) # 软删除标记

View File

@@ -90,7 +90,7 @@ class registrationDetail(APIView):
if Undertaker:
Q_obj &= Q(Undertaker__icontains=Undertaker)
pre = PreFiling.objects.filter(Q_obj).order_by('-id')
pre = PreFiling.objects.filter(Q_obj, is_deleted=False).order_by('-id')
total = len(pre)
paginator = Paginator(pre, per_page)
@@ -276,7 +276,7 @@ class ProjectDetail(APIView):
pre_id = pre.values_list('id', flat=True)
Q_obj &= Q(user_id__in=pre_id)
pre = ProjectRegistration.objects.filter(Q_obj).order_by('-id')
pre = ProjectRegistration.objects.filter(Q_obj, is_deleted=False).order_by('-id')
total = len(pre)
paginator = Paginator(pre, per_page)
@@ -419,17 +419,19 @@ class DeleteProject(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
pro = ProjectRegistration.objects.get(id=id)
pro = ProjectRegistration.objects.get(id=id, is_deleted=False)
except ProjectRegistration.DoesNotExist:
return Response({'status': 'error', 'message': '立项登记不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
# 检查是否已经被案件管理关联
case_exists = Case.objects.filter(user_id=pro.user_id).exists()
case_exists = Case.objects.filter(user_id=pro.user_id, is_deleted=False).exists()
if case_exists:
return Response({'status': 'error', 'message': '该立项已被案件管理关联,无法删除', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
pro.delete()
# 软删除:更新 is_deleted 字段
pro.is_deleted = True
pro.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -505,7 +507,7 @@ class BidDetail(APIView):
pre_id = pre.values_list('id', flat=True)
Q_obj &= Q(user_id__in=pre_id)
pre = Bid.objects.filter(Q_obj).order_by('-id')
pre = Bid.objects.filter(Q_obj, is_deleted=False).order_by('-id')
total = len(pre)
paginator = Paginator(pre, per_page)
@@ -602,11 +604,13 @@ class DeleteBid(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
bid = Bid.objects.get(id=id)
bid = Bid.objects.get(id=id, is_deleted=False)
except Bid.DoesNotExist:
return Response({'status': 'error', 'message': '投标登记不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
bid.delete()
# 软删除:更新 is_deleted 字段
bid.is_deleted = True
bid.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -710,7 +714,7 @@ class caseManagementDetail(APIView):
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if type:
por_id = ProjectRegistration.objects.filter(type=type).values_list('user_id', flat=True)
por_id = ProjectRegistration.objects.filter(type=type, is_deleted=False).values_list('user_id', flat=True)
Q_obj &= Q(user_id__in=por_id)
# if client_username:
@@ -722,7 +726,7 @@ class caseManagementDetail(APIView):
# pre_id = pre.values_list('id', flat=True)
# Q_obj &= Q(user_id__in=pre_id)
pre = Case.objects.filter(Q_obj).order_by('-id')
pre = Case.objects.filter(Q_obj, is_deleted=False).order_by('-id')
total = len(pre)
paginator = Paginator(pre, per_page)
@@ -858,11 +862,13 @@ class DeleteCase(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
case = Case.objects.get(id=id)
case = Case.objects.get(id=id, is_deleted=False)
except Case.DoesNotExist:
return Response({'status': 'error', 'message': '案件管理不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
case.delete()
# 软删除:更新 is_deleted 字段
case.is_deleted = True
case.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -946,7 +952,7 @@ class LogDetail(APIView):
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
pre = Caselog.objects.all()
pre = Caselog.objects.filter(is_deleted=False)
total = len(pre)
paginator = Paginator(pre, per_page)
@@ -1001,7 +1007,7 @@ class preFilingLinkedCases(APIView):
:param kwargs:
:return:
"""
proa = ProjectRegistration.objects.all()
proa = ProjectRegistration.objects.filter(is_deleted=False)
data = []
for prefiling in proa:
pre = PreFiling.objects.get(id=prefiling.user_id)
@@ -1187,11 +1193,13 @@ class DeleteApplication(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
app = SealApplication.objects.get(id=id)
app = SealApplication.objects.get(id=id, is_deleted=False)
except SealApplication.DoesNotExist:
return Response({'status': 'error', 'message': '申请用印不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
app.delete()
# 软删除:更新 is_deleted 字段
app.is_deleted = True
app.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -1331,11 +1339,13 @@ class DeleteWarehousing(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
ware = Warehousing.objects.get(id=id)
ware = Warehousing.objects.get(id=id, is_deleted=False)
except Warehousing.DoesNotExist:
return Response({'status': 'error', 'message': '入库登记不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
ware.delete()
# 软删除:更新 is_deleted 字段
ware.is_deleted = True
ware.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -1375,7 +1385,7 @@ class PlatformDetail(APIView):
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
seas = RegisterPlatform.objects.all().order_by('-id')
seas = RegisterPlatform.objects.filter(is_deleted=False).order_by('-id')
total = len(seas)
paginator = Paginator(seas, per_page)
@@ -1435,8 +1445,14 @@ class DeletePlatformDetail(APIView):
:return:
"""
ID = request.data.get('id')
RegisterPlatform.objects.get(id=ID).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
platform = RegisterPlatform.objects.get(id=ID, is_deleted=False)
# 软删除:更新 is_deleted 字段
platform.is_deleted = True
platform.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except RegisterPlatform.DoesNotExist:
return Response({'status': 'error', 'message': '注册平台登记不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class bulletin(APIView):
@@ -1485,7 +1501,7 @@ class BulletinDetail(APIView):
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
seas = Announcement.objects.all().order_by('-state', '-times')
seas = Announcement.objects.filter(is_deleted=False).order_by('-state', '-times')
total = len(seas)
paginator = Paginator(seas, per_page)
@@ -1576,8 +1592,14 @@ class EditBulletin(APIView):
class deleteBulletin(APIView):
def post(self, request, *args, **kwargs):
ID = request.data.get('id')
Announcement.objects.get(id=ID).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
announcement = Announcement.objects.get(id=ID, is_deleted=False)
# 软删除:更新 is_deleted 字段
announcement.is_deleted = True
announcement.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except Announcement.DoesNotExist:
return Response({'status': 'error', 'message': '公告不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class Lawyersdocuments(APIView):
@@ -1601,7 +1623,7 @@ class Lawyersdocuments(APIView):
class LawyersdocumentsDetail(APIView):
def post(self, request, *args, **kwargs):
law = LawyerFlie.objects.all().order_by('-times')
law = LawyerFlie.objects.filter(is_deleted=False).order_by('-times')
total = law.count()
data = []
for info in law:
@@ -1619,8 +1641,14 @@ class LawyersdocumentsDetail(APIView):
class LwaDetail(APIView):
def post(self, request, *args, **kwargs):
id = request.data.get('id')
LawyerFlie.objects.get(id=id).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
lawyer_file = LawyerFlie.objects.get(id=id, is_deleted=False)
# 软删除:更新 is_deleted 字段
lawyer_file.is_deleted = True
lawyer_file.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except LawyerFlie.DoesNotExist:
return Response({'status': 'error', 'message': '律师文件不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class EditLawyerFlie(APIView):
@@ -1694,8 +1722,14 @@ class DeleteSchedule(APIView):
:return:
"""
id = request.data.get('id')
Schedule.objects.get(id=id).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
schedule = Schedule.objects.get(id=id, is_deleted=False)
# 软删除:更新 is_deleted 字段
schedule.is_deleted = True
schedule.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except Schedule.DoesNotExist:
return Response({'status': 'error', 'message': '日程不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class ScheduleDetail(APIView):
@@ -1808,7 +1842,7 @@ class DisplayRermission(APIView):
"""
权限列表展示
"""
permissions = permission.objects.all()
permissions = permission.objects.filter(is_deleted=False)
# 先将数据转换为字典格式
data = []
@@ -1852,8 +1886,14 @@ class DeleteRermission(APIView):
删除权限
"""
ID = request.data.get('id')
permission.objects.get(id=ID).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
perm = permission.objects.get(id=ID, is_deleted=False)
# 软删除:更新 is_deleted 字段
perm.is_deleted = True
perm.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except permission.DoesNotExist:
return Response({'status': 'error', 'message': '权限不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class EditRermission(APIView):
@@ -1896,8 +1936,14 @@ class addRole(APIView):
class DeleteRole(APIView):
def post(self, request, *args, **kwargs):
id = request.data.get('id')
role.objects.get(id=id).delete()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
try:
r = role.objects.get(id=id, is_deleted=False)
# 软删除:更新 is_deleted 字段
r.is_deleted = True
r.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except role.DoesNotExist:
return Response({'status': 'error', 'message': '角色不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
class EditRole(APIView):
@@ -2014,12 +2060,12 @@ class DeleteRegistration(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
pre = PreFiling.objects.get(id=id)
pre = PreFiling.objects.get(id=id, is_deleted=False)
# 检查是否已经被立项登记关联
project_exists = ProjectRegistration.objects.filter(user_id=id).exists()
project_exists = ProjectRegistration.objects.filter(user_id=id, is_deleted=False).exists()
# 检查是否已经被投标登记关联
bid_exists = Bid.objects.filter(user_id=id).exists()
bid_exists = Bid.objects.filter(user_id=id, is_deleted=False).exists()
if project_exists:
return Response({'status': 'error', 'message': '该预立案已被立项登记,无法删除', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
@@ -2027,7 +2073,9 @@ class DeleteRegistration(APIView):
if bid_exists:
return Response({'status': 'error', 'message': '该预立案已被投标登记,无法删除', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
pre.delete()
# 软删除:更新 is_deleted 字段
pre.is_deleted = True
pre.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
except PreFiling.DoesNotExist:
return Response({'status': 'error', 'message': '预立案登记不存在', 'code': 1},

View File

@@ -0,0 +1,43 @@
# Generated migration for soft delete support
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0009_bonuschange_state'),
]
operations = [
migrations.AddField(
model_name='invoice',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='income',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='accounts',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='payment',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='reimbursement',
name='is_deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='bonuschange',
name='is_deleted',
field=models.BooleanField(default=False),
),
]

View File

@@ -13,6 +13,7 @@ class Invoice(models.Model):
state = models.CharField(max_length=100) # 状态
username = models.CharField(max_length=100) # 谁提交的
times = models.TextField() # 提交时间
is_deleted = models.BooleanField(default=False) # 软删除标记
class Income(models.Model):
@@ -24,6 +25,7 @@ class Income(models.Model):
submit = models.CharField(max_length=100) # 谁提交的
submit_tiem = models.CharField(max_length=100) # 提交时间
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Accounts(models.Model):
@@ -35,6 +37,7 @@ class Accounts(models.Model):
submit = models.CharField(max_length=100) # 谁提交的
submit_tiem = models.CharField(max_length=100) # 提交时间
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Payment(models.Model):
@@ -47,6 +50,7 @@ class Payment(models.Model):
applicant = models.CharField(max_length=100) # 申请人
submit_tiem = models.CharField(max_length=100) # 提交时间
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class Reimbursement(models.Model):
person = models.CharField(max_length=100) # 报销人
@@ -56,6 +60,7 @@ class Reimbursement(models.Model):
FeeDescription = models.TextField() # 费用说明
submit_tiem = models.CharField(max_length=100) # 提交时间
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记
class BonusChange(models.Model):
username = models.CharField(max_length=100)
@@ -63,3 +68,4 @@ class BonusChange(models.Model):
Instructions = models.TextField() # 调整说明
times = models.CharField(max_length=100) # 时间
state = models.CharField(max_length=100) # 状态
is_deleted = models.BooleanField(default=False) # 软删除标记

View File

@@ -243,11 +243,13 @@ class DeleteInvoice(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
invoice = Invoice.objects.get(id=id)
invoice = Invoice.objects.get(id=id, is_deleted=False)
except Invoice.DoesNotExist:
return Response({'status': 'error', 'message': '开票申请不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
invoice.delete()
# 软删除:更新 is_deleted 字段
invoice.is_deleted = True
invoice.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -436,11 +438,13 @@ class DeleteIncome(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
income = Income.objects.get(id=id)
income = Income.objects.get(id=id, is_deleted=False)
except Income.DoesNotExist:
return Response({'status': 'error', 'message': '收入确认不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
income.delete()
# 软删除:更新 is_deleted 字段
income.is_deleted = True
income.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -592,11 +596,13 @@ class DeleteAccounts(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
account = Accounts.objects.get(id=id)
account = Accounts.objects.get(id=id, is_deleted=False)
except Accounts.DoesNotExist:
return Response({'status': 'error', 'message': '调账申请不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
account.delete()
# 软删除:更新 is_deleted 字段
account.is_deleted = True
account.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -759,11 +765,13 @@ class DeletePayment(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
payment = Payment.objects.get(id=id)
payment = Payment.objects.get(id=id, is_deleted=False)
except Payment.DoesNotExist:
return Response({'status': 'error', 'message': '付款申请不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
payment.delete()
# 软删除:更新 is_deleted 字段
payment.is_deleted = True
payment.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -908,11 +916,13 @@ class DeleteReimbursement(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
reimbursement = Reimbursement.objects.get(id=id)
reimbursement = Reimbursement.objects.get(id=id, is_deleted=False)
except Reimbursement.DoesNotExist:
return Response({'status': 'error', 'message': '报销申请不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
reimbursement.delete()
# 软删除:更新 is_deleted 字段
reimbursement.is_deleted = True
reimbursement.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -1044,11 +1054,13 @@ class DeleteBonusChange(APIView):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
bonus = BonusChange.objects.get(id=id)
bonus = BonusChange.objects.get(id=id, is_deleted=False)
except BonusChange.DoesNotExist:
return Response({'status': 'error', 'message': '工资/奖金变更不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
bonus.delete()
# 软删除:更新 is_deleted 字段
bonus.is_deleted = True
bonus.save()
return Response({'message': '删除成功', 'code': 0}, status=status.HTTP_200_OK)
@@ -1307,13 +1319,13 @@ class DeleteUserDeparture(APIView):
return Response({'status': 'error', 'message': '缺少参数id', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
try:
approval = Approval.objects.get(id=id, type="离职财务登记")
approval = Approval.objects.get(id=id, type="离职财务登记", is_deleted=False)
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))
user = User.objects.get(id=int(approval.user_id), is_deleted=False)
except (User.DoesNotExist, ValueError):
return Response({'status': 'error', 'message': '用户不存在', 'code': 1}, status=status.HTTP_404_NOT_FOUND)
@@ -1322,8 +1334,9 @@ class DeleteUserDeparture(APIView):
user.Dateofdeparture = None
user.save(update_fields=['state', 'Dateofdeparture'])
# 删除审批记录
approval.delete()
# 删除:更新 is_deleted 字段
approval.is_deleted = True
approval.save()
return Response({'message': '删除成功,用户状态已恢复为"在职"', 'code': 0}, status=status.HTTP_200_OK)