serializers.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # coding=utf-8
  2. from django.conf import settings
  3. from rest_framework import serializers
  4. from apps.tenant.building.serializer import BuildingDetailSerializer
  5. from apps.tenant.inspection_order.models import InspectionOrder
  6. from apps.tenant.repair_order.models import RepairOrder
  7. from apps.upload.serializers import UploadSerializer
  8. from utils.serializersfield import DelayTimeCharField
  9. from utils.exceptions import CustomError
  10. class InspectionOrderDetailSerializer(serializers.ModelSerializer):
  11. status_text = serializers.CharField(source='get_status_display', read_only=True)
  12. user_name = serializers.CharField(source='user.employee.name', read_only=True)
  13. user_tel = serializers.CharField(source='user.employee.tel', read_only=True)
  14. building_text = serializers.SerializerMethodField()
  15. images = serializers.SerializerMethodField()
  16. repair_type_text = serializers.CharField(source='repair_type.name', read_only=True)
  17. create_at = DelayTimeCharField(source='create_time', read_only=True)
  18. def get_images(self, obj):
  19. return UploadSerializer(obj.images, many=True).data
  20. def get_building_text(self, obj):
  21. return BuildingDetailSerializer(obj.building).data
  22. class Meta:
  23. model = InspectionOrder
  24. fields = '__all__'
  25. class InspectionOrderListSerializer(serializers.ModelSerializer):
  26. status_text = serializers.CharField(source='get_status_display', read_only=True)
  27. building_text = serializers.SerializerMethodField()
  28. images = serializers.SerializerMethodField()
  29. repair_type_text = serializers.CharField(source='repair_type.name', read_only=True)
  30. create_at = DelayTimeCharField(source='create_time', read_only=True)
  31. def get_images(self, obj):
  32. return UploadSerializer(obj.images, many=True).data
  33. def get_building_text(self, obj):
  34. return BuildingDetailSerializer(obj.building).data
  35. class Meta:
  36. model = InspectionOrder
  37. fields = '__all__'
  38. class InspectionOrderSerializer(serializers.ModelSerializer):
  39. class Meta:
  40. model = InspectionOrder
  41. fields = ('id', 'building', 'problem', 'repair_type')
  42. def create(self, validated_data):
  43. # 巡检结果
  44. inspection_result = str(self.initial_data['inspection_result'])
  45. if inspection_result == '0':
  46. # 巡检状态如果为正常,判断当前教室是否还存有未完成保修的工单
  47. repair_orders = RepairOrder.objects.filter(building=self.validated_data['building'],
  48. status__in=[settings.NOT_CHECKED, settings.CHECKED,
  49. settings.DISPATCH, settings.HANG_UP])
  50. if repair_orders:
  51. raise CustomError('该地区还存在未完成的报修!')
  52. # 状态保存为正常
  53. validated_data['status'] = InspectionOrder.NOT_REPAIR
  54. if 'images' in self.initial_data:
  55. validated_data['images'] = self.initial_data['images'].split(',')
  56. user = self.context['request'].user
  57. validated_data['user'] = user
  58. validated_data['tenant'] = user.employee.tenant
  59. instance = super(InspectionOrderSerializer, self).create(validated_data)
  60. instance.no = instance.get_no()
  61. instance.save()
  62. # 点维修 转到报销里面,并自动派单给当前人,报销单状态直接是已派单,
  63. if inspection_result == '1':
  64. # 转报修
  65. repair_order = instance.turn_repair(user)
  66. # 自动派单
  67. repair_order.dispatch_repair_order(user, user.id)
  68. return instance