1
0

orders_local.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. from rest_framework import serializers
  2. from webservice_running.models import OrdersLocal
  3. # from dbsynce.serializer import OrdersSerializer
  4. class OrderNotDefined(Exception):
  5. """
  6. If order_synced field is not defined throw exception
  7. """
  8. def __init__(self, message="order_synced is not defined"):
  9. self.message = message
  10. super().__init__(self.message)
  11. class OrdersLocalSerializer(serializers.ModelSerializer):
  12. service = serializers.IntegerField(
  13. source="order_synced.service.pk",
  14. allow_null=True
  15. )
  16. service_category = serializers.IntegerField(
  17. source="order_synced.service_category.pk",
  18. allow_null=True
  19. )
  20. state = serializers.CharField(
  21. source="order_synced.state",
  22. allow_null=True
  23. )
  24. id_metaservice = serializers.IntegerField(
  25. source="order_synced.id_metaservice",
  26. allow_null=True
  27. )
  28. provider = serializers.IntegerField(
  29. source="order_synced.provider.pk",
  30. allow_null=True
  31. )
  32. provider_screen_name = serializers.CharField(
  33. source="order_synced.provider.user.full_name",
  34. allow_null=True
  35. )
  36. receiver = serializers.IntegerField(
  37. source="order_synced.receiver.pk",
  38. allow_null=True
  39. )
  40. receiver_screen_name = serializers.CharField(
  41. source="order_synced.receiver.full_name",
  42. allow_null=True
  43. )
  44. client = serializers.CharField(
  45. source="order_synced.client.pk",
  46. allow_null=True
  47. )
  48. client_screen_name = serializers.CharField(
  49. source="order_synced.client.user.full_name",
  50. allow_null=True
  51. )
  52. # time_created = serializers.DateTimeField(
  53. # source="order_synced.time_created",
  54. # allow_null=True
  55. # )
  56. time_placed = serializers.DateTimeField(
  57. source="order_synced.time_placed",
  58. allow_null=True
  59. )
  60. time_start = serializers.DateTimeField(
  61. source="order_synced.time_start",
  62. allow_null=True
  63. )
  64. time_start_real = serializers.DateTimeField(
  65. source="order_synced.time_start_real",
  66. allow_null=True
  67. )
  68. time_start_predicted = serializers.DateTimeField(
  69. source="order_synced.time_start_predicted",
  70. allow_null=True
  71. )
  72. time_finish_predicted = serializers.DateTimeField(
  73. source="order_synced.time_finish_predicted",
  74. allow_null=True
  75. )
  76. time_finish_real = serializers.DateTimeField(
  77. source="order_synced.time_finish_real",
  78. allow_null=True
  79. )
  80. predicted_price = serializers.FloatField(
  81. source="order_synced.predicted_price",
  82. allow_null=True
  83. )
  84. real_price = serializers.FloatField(
  85. source="order_synced.real_price",
  86. allow_null=True
  87. )
  88. is_global = serializers.BooleanField(
  89. source="order_synced.is_global",
  90. allow_null=True
  91. )
  92. is_visible = serializers.BooleanField(
  93. source="order_synced.is_visible",
  94. allow_null=True
  95. )
  96. ticket = serializers.IntegerField(
  97. source="order_synced.ticket.pk",
  98. allow_null=True
  99. )
  100. status = serializers.IntegerField(
  101. source="order_synced.ticket.stauts",
  102. allow_null=True
  103. )
  104. priority = serializers.IntegerField(
  105. source="order_synced.ticket.priority",
  106. allow_null=True
  107. )
  108. title = serializers.CharField(
  109. source="order_synced.ticket.title",
  110. allow_null=True
  111. )
  112. note = serializers.CharField(
  113. source="order_synced.ticket.note",
  114. allow_null=True
  115. )
  116. due_date = serializers.DateField(
  117. source="order_synced.ticket.due_date",
  118. allow_null=True
  119. )
  120. status_changed_date = serializers.DateTimeField(
  121. source="order_synced.ticket.status_changed_date",
  122. allow_null=True
  123. )
  124. # order_synced = OrdersSerializer(read_only=True)
  125. class Meta:
  126. model = OrdersLocal
  127. fields = "__all__"
  128. # fields = [
  129. # "order",
  130. # "order_synced"
  131. # ]
  132. # depth = 2
  133. def update(self, instance, validated_data):
  134. """
  135. Normally order_synced is not null, but in testing it is null=True, so it can produce exceptions
  136. """
  137. order_instance = instance.order_synced
  138. if not order_instance:
  139. raise OrderNotDefined()
  140. ticket_instance = instance.order_synced.ticket
  141. for attr, value in validated_data.items():
  142. if attr == "order_synced":
  143. for order_synced_attr, order_synced_value in value.items():
  144. if order_synced_attr == "ticket":
  145. for ticket_attr, ticket_value in order_synced_value.items():
  146. setattr(ticket_instance, ticket_attr, ticket_value)
  147. continue
  148. else:
  149. setattr(order_instance, order_synced_attr, order_synced_value)
  150. else:
  151. setattr(instance, attr, value)
  152. instance.save()
  153. ticket_instance.save()
  154. order_instance.save()
  155. return instance