factory/apps/opm/serializers.py

119 lines
3.9 KiB
Python

from apps.hrm.models import Certificate
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplCert, OplWorker
from apps.utils.serializers import CustomModelSerializer
from apps.utils.constants import EXCLUDE_FIELDS
from rest_framework import serializers
from django.db import transaction
from rest_framework.exceptions import ParseError
class OplCateCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = OplCate
fields = ['code', 'name', 'template_export', 'workflow']
class OplCateSerializer(CustomModelSerializer):
class Meta:
model = OplCate
fields = '__all__'
class OperationCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = Operation
exclude = EXCLUDE_FIELDS + ['number']
class OperationSerializer(CustomModelSerializer):
class Meta:
model = Operation
fields = "__all__"
class OplWorkerCreateSerializer(CustomModelSerializer):
certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True)
class Meta:
model = OplWorker
fields = ['worker', 'duty', 'certificates', 'opl']
def create(self, validated_data):
certificates = validated_data.pop('certificates')
if OplWorker.objects.filter(worker=validated_data['worker'], opl=validated_data['opl']).exists():
raise ParseError('该成员已加入')
with transaction.atomic():
oplw = super().create(validated_data)
for x in certificates:
oplc, _ = OplCert.objects.get_or_create(opl_worker=oplw, certificate=x,
defaults={'opl_worker': oplw, 'certificate': x})
for f in Certificate._meta.fields:
if f.name not in ['id']:
setattr(oplc, f.name, getattr(x, f.name, None))
oplc.save()
return oplw
class OplWorkerUpdateSerializer(CustomModelSerializer):
certificates = serializers.PrimaryKeyRelatedField(label='证书ID', many=True)
class Meta:
model = OplWorker
fields = ['duty', 'certificates']
def update(self, instance, validated_data):
certificates = validated_data.pop('certificates')
with transaction.atomic():
oplw = super().update(instance, validated_data)
for x in certificates:
oplc, _ = OplCert.objects.get_or_create(opl_worker=oplw, certificate=x,
defaults={'opl_worker': oplw, 'certificate': x})
for f in Certificate._meta.fields:
if f.name not in ['id']:
setattr(oplc, f.name, getattr(x, f.name, None))
oplc.save()
return oplw
class OplWorkerSerializer():
class Meta:
model = OplWorker
fields = '__all__'
class GasCheckCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = GasCheck
exclude = EXCLUDE_FIELDS
class GasCheckSerializer(CustomModelSerializer):
class Meta:
model = GasCheck
fields = '__all__'
class OplCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = Opl
fields = ['operation', 'level', 'cate', 'start_time', 'end_time',
'dept_do', 'charger', 'monitor', 'work_time', 'work_type',
'accept_time', 'power', 'power_to', 'power_from',
'power_end_time', 'power_start_time', 'power_days',
'other_risk', 'other_emr', 'escape_route',
'risks_checked', 'measures_checked', 'create_imgs']
class OplSerializer(CustomModelSerializer):
class Meta:
model = Opl
fields = '__all__'
class OplCloseSerializer(CustomModelSerializer):
class Meta:
model = Opl
fields = ['close_imgs', 'close_note', 'close_dos', 'close_desc']