Merge branch 'v2'

This commit is contained in:
caoqianming 2023-03-29 16:36:03 +08:00
commit 0766cba363
5 changed files with 23 additions and 13 deletions

View File

@ -249,9 +249,9 @@ class ClockRecordViewSet(ListModelMixin, CustomGenericViewSet):
i['employee_']['id_number'], i['employee_']['id_number'],
i['employee_'].get('belong_dept_name', ''), i['employee_'].get('belong_dept_name', ''),
i['detail'].get('deviceName', None), i['detail'].get('deviceName', None),
i['create_time']], i['create_time'],
crOptions[i['type']], crOptions[i['type']],
crEoptions[i['exception_type']] crEoptions[i['exception_type']] if i['exception_type'] else '']
) )
return Response({'path': export_excel(field_data, data, '打卡记录')}) return Response({'path': export_excel(field_data, data, '打卡记录')})

View File

@ -16,6 +16,7 @@ from apps.utils.tools import check_id_number_e, check_phone_e
from apps.wf.serializers import TicketSimpleSerializer from apps.wf.serializers import TicketSimpleSerializer
from apps.rpm.services import rpj_member_come, rpj_certificate_in from apps.rpm.services import rpj_member_come, rpj_certificate_in
from apps.rpm.models import RpjLog from apps.rpm.models import RpjLog
from django.conf import settings
class RpartyCreateUpdateSerializer(CustomModelSerializer): class RpartyCreateUpdateSerializer(CustomModelSerializer):
@ -145,7 +146,8 @@ class RemployeeCreateSerializer(CustomModelSerializer):
if Remployee.objects.filter(id_number=validated_data['id_number'], rparty=validated_data['rparty']).exists(): if Remployee.objects.filter(id_number=validated_data['id_number'], rparty=validated_data['rparty']).exists():
raise ValidationError('该成员已存在') raise ValidationError('该成员已存在')
with transaction.atomic(): with transaction.atomic():
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) if settings.DAHUA_ENABLED:
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().create(validated_data) return super().create(validated_data)
@ -157,7 +159,8 @@ class RemployeeUpdateSerializer(CustomModelSerializer):
def update(self, instance, validated_data): def update(self, instance, validated_data):
with transaction.atomic(): with transaction.atomic():
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) if settings.DAHUA_ENABLED:
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().update(instance, validated_data) return super().update(instance, validated_data)
class RemployeeSimpleSerializer(CustomModelSerializer): class RemployeeSimpleSerializer(CustomModelSerializer):
@ -219,7 +222,7 @@ class RpjmemberCreateSerializer(CustomModelSerializer):
def create(self, validated_data): def create(self, validated_data):
rpj = validated_data['rpj'] rpj = validated_data['rpj']
if rpj.state in [Rpj.RPJ_DONE, Rpj.RPJ_CLOSE]: if rpj.state in [Rpj.RPJ_DONE, Rpj.RPJ_CLOSE]:
raise ParseError('成员该项目状态不可新增') raise ParseError('该项目状态成员不可新增')
rcertificates = validated_data.pop('rcertificates') rcertificates = validated_data.pop('rcertificates')
remployee = validated_data['remployee'] remployee = validated_data['remployee']
if remployee.phone and remployee.photo and remployee.id_number: if remployee.phone and remployee.photo and remployee.id_number:
@ -265,7 +268,7 @@ class RpjmemberUpdateSerializer(CustomModelSerializer):
def update(self, instance, validated_data): def update(self, instance, validated_data):
rpj = validated_data['rpj'] rpj = validated_data['rpj']
if rpj.state in [Rpj.RPJ_DONE, Rpj.RPJ_CLOSE]: if rpj.state in [Rpj.RPJ_DONE, Rpj.RPJ_CLOSE]:
raise ParseError('成员该项目状态不可修改') raise ParseError('该项目状态成员不可修改')
rcertificates = validated_data.pop('rcertificates') rcertificates = validated_data.pop('rcertificates')
with transaction.atomic(): with transaction.atomic():
ins = super().update(instance, validated_data) ins = super().update(instance, validated_data)

View File

@ -112,7 +112,9 @@ def rpj_member_come(i: Rpjmember):
# 给相关方人员创建账户 # 给相关方人员创建账户
user_e = ep.user user_e = ep.user
if user_e: # 如果该人员有账户 if user_e: # 如果该人员有账户
pass user_e.is_active = True
user_e.is_deleted = False
user_e.save()
else: else:
user_e = User.objects.get_queryset(all=True).filter(phone=rep.phone).first() # 看看有没有存在的账户 user_e = User.objects.get_queryset(all=True).filter(phone=rep.phone).first() # 看看有没有存在的账户
if user_e: if user_e:

View File

@ -205,7 +205,7 @@ class RpjViewSet(CustomModelViewSet):
if obj.state in [Rpj.RPJ_ENTER, Rpj.RPJ_DONE]: if obj.state in [Rpj.RPJ_ENTER, Rpj.RPJ_DONE]:
raise ParseError('该项目不可删除') raise ParseError('该项目不可删除')
elif obj.state == Rpj.RPJ_WORKING and Remployee.objects.filter(rpj=obj).exists(): elif obj.state == Rpj.RPJ_WORKING and Remployee.objects.filter(rpj=obj).exists():
raise ParseError('该项目员在厂不可删除') raise ParseError('该项目下有成员在厂不可删除')
if obj.ticket: if obj.ticket:
obj.ticket.delete() obj.ticket.delete()
obj.delete() obj.delete()
@ -224,13 +224,11 @@ class RpjmemberViewSet(CustomModelViewSet):
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
obj = self.get_object() obj = self.get_object()
if obj.rpj.state in [Rpj.RPJ_DONE, Rpj.RPJ_CLOSE]: if obj.rpj.state != Rpj.RPJ_CREATE:
raise ParseError('成员在该状态不可删除') raise ParseError('成员在该状态不可删除')
else:
pass
return super().destroy(request, *args, **kwargs) return super().destroy(request, *args, **kwargs)
@action(methods=['post'], detail=True, perms_map={'post': 'rpj.update'}) @action(methods=['put'], detail=True, perms_map={'put': 'rpj.update'})
@transaction.atomic @transaction.atomic
def leave(self, request, pk=None): def leave(self, request, pk=None):
"""提前离厂 """提前离厂
@ -238,6 +236,13 @@ class RpjmemberViewSet(CustomModelViewSet):
提前离厂 提前离厂
""" """
obj = self.get_object() obj = self.get_object()
rpj = obj.rpj
if rpj.state not in [Rpj.RPJ_WORKING, Rpj.RPJ_ENTER]:
raise ParseError('该项目状态成员不可离厂')
if RpjLog.objects.filter(rpj=rpj, remployee=obj.remployee, operation='member_leave').exists():
raise ParseError('该项目成员已做离厂操作')
obj.note = '提前离厂'
obj.save()
rpj_member_leave(obj) rpj_member_leave(obj)
RpjLog.objects.create(rpj=obj.rpj, operation='member_leave', remployee=obj.remployee, create_by=request.user, reason=request.data.get('reason', '')) RpjLog.objects.create(rpj=obj.rpj, operation='member_leave', remployee=obj.remployee, create_by=request.user, reason=request.data.get('reason', ''))
return Response() return Response()

View File

@ -32,7 +32,7 @@ def idempotent(seconds=4):
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
rdata = args[1].data rdata = args[1].data
rdata['request_userid'] = getattr(args[1], 'user').id rdata['request_userid'] = getattr(args[1], 'user').id
print(getattr(args[1], 'user'), rdata) rdata['request_path'] = getattr(args[1], 'path')
hash_k = hash(json.dumps(rdata)) hash_k = hash(json.dumps(rdata))
hash_v_e = cache.get(hash_k, None) hash_v_e = cache.get(hash_k, None)
if hash_v_e is None: if hash_v_e is None: