factory/apps/opm/serializers.py

130 lines
4.4 KiB
Python

from apps.hrm.models import Certificate
from apps.opm.models import GasCheck, Operation, Opl, OplCate, OplCert, OplWorker
from apps.system.serializers import DictSerializer, DictSimpleSerializer
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
exclude = EXCLUDE_FIELDS
class OplCateSerializer(CustomModelSerializer):
class Meta:
model = OplCate
fields = '__all__'
class OplCateDetailSerializer(CustomModelSerializer):
measure_options_ = DictSimpleSerializer(source='measure_options', read_only=True, many=True)
risk_options_ = DictSimpleSerializer(source='risk_options', read_only=True, many=True)
close_options_ = DictSimpleSerializer(source='close_options', read_only=True, many=True)
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, queryset=Certificate.objects.all())
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, queryset=Certificate.objects.all())
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']