部分信息非必填项

This commit is contained in:
曹前明 2022-07-11 16:25:03 +08:00
parent 2c993ce910
commit b4a5bb2373
7 changed files with 46 additions and 9 deletions

View File

@ -31,12 +31,12 @@ class AreaViewSet(CustomModelViewSet):
third_info = obj.third_info
if 'xx_rail' in third_info:
data['id'] = third_info['xx_rail']['id']
_, res = xxClient.request(**xxapis['rail_update'], json=data)
_, res = xxClient.request(**xxapis['rail_update'], json={'rail': data})
third_info['xx_rail']['detail'] = data
obj.third_info = third_info
obj.save()
else:
_, res = xxClient.request(**xxapis['rail_create'], json=data)
_, res = xxClient.request(**xxapis['rail_create'], json={'rail': data})
rail_info = {'id': res, 'detail': data}
third_info['xx_rail'] = rail_info
obj.third_info = third_info

View File

@ -0,0 +1,28 @@
# Generated by Django 3.2.12 on 2022-07-11 08:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('vm', '0003_visit_ticket'),
]
operations = [
migrations.AlterField(
model_name='visitor',
name='id_number',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号'),
),
migrations.AlterField(
model_name='visitor',
name='phone',
field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'),
),
migrations.AlterField(
model_name='visitor',
name='photo',
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照'),
),
]

View File

@ -54,9 +54,9 @@ class Visitor(CommonAModel):
"""
employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField('姓名', max_length=20)
phone = models.CharField('手机号', max_length=11)
photo = models.CharField('证件照', max_length=1000)
id_number = models.CharField('身份证号', max_length=100)
phone = models.CharField('手机号', max_length=11, null=True, blank=True)
photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
id_number = models.CharField('身份证号', max_length=100, null=True, blank=True)
visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.CASCADE,
null=True, blank=True)

View File

@ -35,7 +35,8 @@ class VisitorCreateSerializer(CustomModelSerializer):
def create(self, validated_data):
with transaction.atomic():
# 校验上传的证件照
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
if validated_data['photo']:
dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo'])
return super().create(validated_data)
@ -53,6 +54,12 @@ class VpeopleCreateSerializer(CustomModelSerializer):
def create(self, validated_data):
if validated_data['visit'].state != Visit.V_CREATE:
raise ParseError('项目非创建状态不可新增成员')
if validated_data['visit'].level == 10:
visitor = validated_data['visitor']
if visitor.id_number and visitor.photo:
pass
else:
raise ParseError('访客信息不全,请完善后再试')
ins = super().create(validated_data)
if ins.is_main:
Vpeople.objects.filter(visit=validated_data['visit']).exclude(id=ins.id).update(is_main=False)

View File

@ -338,7 +338,7 @@ class WfService(object):
ticket.act_state = Ticket.TICKET_ACT_STATE_BACK
# 只更新必填和可选的字段
if not created:
if not created and transition.field_require_check:
for key, value in source_state.state_fields.items():
if value in (State.STATE_FIELD_REQUIRED, State.STATE_FIELD_OPTIONAL):
if key in new_ticket_data:
@ -387,7 +387,7 @@ class WfService(object):
f = getattr(m, func)
f(ticket=ticket) # 同步执行
else:
# wf默认发送通知
# wf默认发送通知
last_log = TicketFlow.objects.filter(ticket=ticket).order_by('-create_time').first()
if (last_log.state != state or
last_log.intervene_type == Transition.TRANSITION_INTERVENE_TYPE_DELIVER or

View File

@ -181,6 +181,8 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
save_ticket_data[key] = ticket_data[key]
elif int(value) == State.STATE_FIELD_OPTIONAL:
save_ticket_data[key] = ticket_data[key]
else:
save_ticket_data = ticket_data
with transaction.atomic():
ticket = serializer.save(state=start_state,
create_by=request.user,

View File

@ -1,7 +1,7 @@
celery==5.2.3
Django==3.2.12
django-celery-beat==2.2.1
django-celery-results==2.3.1
django-celery-results==2.4.0
django-cors-headers==3.11.0
django-filter==21.1
djangorestframework==3.13.1