119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			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
 | 
						|
        exclude = EXCLUDE_FIELDS
 | 
						|
 | 
						|
 | 
						|
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, 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']
 |