serializers.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # coding=utf-8
  2. from django.conf import settings
  3. from rest_framework import serializers
  4. from apps.account.models import User
  5. from apps.tenant.building.serializer import BuildingDetailSerializer
  6. from apps.tenant.repair_order.models import RepairOrder, RepairOrderRecord, RepairOrderComment
  7. from apps.upload.serializers import UploadSerializer
  8. from utils.serializersfield import DelayTimeCharField
  9. class RepairOrderDetailSerializer(serializers.ModelSerializer):
  10. status_text = serializers.CharField(source='get_status_display', read_only=True)
  11. user_id = serializers.CharField(source='user.id', read_only=True)
  12. building_text = serializers.SerializerMethodField()
  13. images = serializers.SerializerMethodField()
  14. repair_type_name = serializers.CharField(source='repair_type.name', read_only=True)
  15. create_at = DelayTimeCharField(source='create_time', read_only=True)
  16. def get_images(self, obj):
  17. return UploadSerializer(obj.images, many=True).data
  18. def get_building_text(self, obj):
  19. return BuildingDetailSerializer(obj.building).data
  20. class Meta:
  21. model = RepairOrder
  22. fields = (
  23. 'id', 'status_text', 'status', 'no', 'fault_des', 'tel', 'name', 'create_at', 'building_text',
  24. 'repair_type_name', 'images', 'user_id')
  25. class RepairOrderListSerializer(serializers.ModelSerializer):
  26. status_text = serializers.CharField(source='get_status_display', read_only=True)
  27. building_text = serializers.SerializerMethodField()
  28. images = serializers.SerializerMethodField()
  29. user_id = serializers.CharField(source='user.id', read_only=True)
  30. repair_type_name = serializers.CharField(source='repair_type.name', read_only=True)
  31. create_at = DelayTimeCharField(source='create_time', read_only=True)
  32. start = serializers.SerializerMethodField()
  33. def get_start(self, obj):
  34. if obj.status == settings.APPRAISE:
  35. repair_order_comment = RepairOrderComment.objects.filter(repair_order=obj).first()
  36. if repair_order_comment:
  37. return repair_order_comment.start
  38. return 0
  39. def get_images(self, obj):
  40. return UploadSerializer(obj.images, many=True).data
  41. def get_building_text(self, obj):
  42. return BuildingDetailSerializer(obj.building).data
  43. class Meta:
  44. model = RepairOrder
  45. fields = (
  46. 'id', 'status_text', 'no', 'fault_des', 'create_at', 'building_text', 'repair_type_name', 'name',
  47. 'images', 'status', 'start', 'user_id')
  48. class RepairOrderSerializer(serializers.ModelSerializer):
  49. class Meta:
  50. model = RepairOrder
  51. fields = ('id', 'fault_des', 'tel', 'name', 'repair_type','device_name','device_address',)
  52. def create(self, validated_data):
  53. if 'images' in self.initial_data:
  54. validated_data['images'] = self.initial_data['images'].split(',')
  55. validated_data['user'] = self.context['request'].user
  56. validated_data['tenant'] = self.context['request'].user.employee.tenant
  57. instance = super(RepairOrderSerializer, self).create(validated_data)
  58. instance.no = instance.get_no()
  59. instance.save()
  60. RepairOrderRecord.objects.create(repair_order=instance, status=settings.NOT_CHECKED,
  61. user=self.context['request'].user, notes='报修下单')
  62. return instance
  63. class RepairOrderCommentSerializer(serializers.ModelSerializer):
  64. class Meta:
  65. model = RepairOrderComment
  66. fields = ('content', 'start', 'create_time')