Нема описа

serializers.py 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. from __future__ import annotations
  2. from rest_framework import serializers
  3. from django.contrib.auth import get_user_model
  4. from orgs.models import Organization, UserProfile
  5. from .models import (
  6. MaterialCategory,
  7. Material,
  8. PriceList,
  9. PriceListItem,
  10. Customer,
  11. CustomerSite,
  12. ServiceAgreement,
  13. PickupOrder,
  14. PickupItem,
  15. WeighTicket,
  16. WeighLine,
  17. Invoice,
  18. InvoiceLine,
  19. Payment,
  20. Payout,
  21. ScrapListing,
  22. ScrapListingItem,
  23. ScrapBid,
  24. ScrapAward,
  25. ScrapListingInvite,
  26. Document,
  27. AuditLog,
  28. )
  29. User = get_user_model()
  30. class OrganizationSerializer(serializers.ModelSerializer):
  31. class Meta:
  32. model = Organization
  33. fields = ["id", "name", "code", "timezone", "currency_code", "created_at", "updated_at"]
  34. class UserSerializer(serializers.ModelSerializer):
  35. class Meta:
  36. model = User
  37. fields = ["id", "username", "email", "first_name", "last_name"]
  38. class UserProfileSerializer(serializers.ModelSerializer):
  39. user = UserSerializer(read_only=True)
  40. class Meta:
  41. model = UserProfile
  42. fields = ["id", "user", "organization", "role", "created_at", "updated_at"]
  43. class MaterialCategorySerializer(serializers.ModelSerializer):
  44. class Meta:
  45. model = MaterialCategory
  46. fields = ["id", "organization", "name", "created_at", "updated_at"]
  47. class MaterialSerializer(serializers.ModelSerializer):
  48. class Meta:
  49. model = Material
  50. fields = [
  51. "id",
  52. "organization",
  53. "category",
  54. "name",
  55. "code",
  56. "default_unit",
  57. "created_at",
  58. "updated_at",
  59. ]
  60. class PriceListItemSerializer(serializers.ModelSerializer):
  61. class Meta:
  62. model = PriceListItem
  63. fields = ["id", "price_list", "material", "unit", "unit_price", "direction", "created_at", "updated_at"]
  64. class PriceListSerializer(serializers.ModelSerializer):
  65. items = PriceListItemSerializer(many=True, read_only=True)
  66. class Meta:
  67. model = PriceList
  68. fields = [
  69. "id",
  70. "organization",
  71. "name",
  72. "currency_code",
  73. "effective_from",
  74. "effective_to",
  75. "items",
  76. "created_at",
  77. "updated_at",
  78. ]
  79. class CustomerSerializer(serializers.ModelSerializer):
  80. class Meta:
  81. model = Customer
  82. fields = [
  83. "id",
  84. "organization",
  85. "name",
  86. "email",
  87. "phone",
  88. "billing_address",
  89. "price_list",
  90. "created_at",
  91. "updated_at",
  92. ]
  93. class CustomerSiteSerializer(serializers.ModelSerializer):
  94. class Meta:
  95. model = CustomerSite
  96. fields = [
  97. "id",
  98. "customer",
  99. "name",
  100. "address",
  101. "contact_name",
  102. "contact_phone",
  103. "contact_email",
  104. "created_at",
  105. "updated_at",
  106. ]
  107. class ServiceAgreementSerializer(serializers.ModelSerializer):
  108. class Meta:
  109. model = ServiceAgreement
  110. fields = ["id", "customer", "site", "price_list", "valid_from", "valid_to", "created_at", "updated_at"]
  111. class PickupItemSerializer(serializers.ModelSerializer):
  112. class Meta:
  113. model = PickupItem
  114. fields = ["id", "pickup", "material", "estimated_qty", "unit", "created_at", "updated_at"]
  115. class PickupOrderSerializer(serializers.ModelSerializer):
  116. items = PickupItemSerializer(many=True, read_only=True)
  117. class Meta:
  118. model = PickupOrder
  119. fields = [
  120. "id",
  121. "organization",
  122. "customer",
  123. "site",
  124. "status",
  125. "scheduled_at",
  126. "assigned_driver",
  127. "created_by",
  128. "completed_at",
  129. "notes",
  130. "items",
  131. "created_at",
  132. "updated_at",
  133. ]
  134. class WeighLineSerializer(serializers.ModelSerializer):
  135. class Meta:
  136. model = WeighLine
  137. fields = ["id", "ticket", "material", "quantity", "unit", "created_at", "updated_at"]
  138. class WeighTicketSerializer(serializers.ModelSerializer):
  139. lines = WeighLineSerializer(many=True, read_only=True)
  140. class Meta:
  141. model = WeighTicket
  142. fields = [
  143. "id",
  144. "pickup",
  145. "ticket_number",
  146. "gross_weight",
  147. "tare_weight",
  148. "net_weight",
  149. "unit",
  150. "recorded_by",
  151. "recorded_at",
  152. "lines",
  153. "created_at",
  154. "updated_at",
  155. ]
  156. class InvoiceLineSerializer(serializers.ModelSerializer):
  157. class Meta:
  158. model = InvoiceLine
  159. fields = [
  160. "id",
  161. "invoice",
  162. "description",
  163. "material",
  164. "quantity",
  165. "unit",
  166. "unit_price",
  167. "line_total",
  168. "created_at",
  169. "updated_at",
  170. ]
  171. class InvoiceSerializer(serializers.ModelSerializer):
  172. lines = InvoiceLineSerializer(many=True, read_only=True)
  173. class Meta:
  174. model = Invoice
  175. fields = [
  176. "id",
  177. "organization",
  178. "customer",
  179. "pickup",
  180. "currency_code",
  181. "total_amount",
  182. "status",
  183. "issued_at",
  184. "due_at",
  185. "lines",
  186. "created_at",
  187. "updated_at",
  188. ]
  189. class PaymentSerializer(serializers.ModelSerializer):
  190. class Meta:
  191. model = Payment
  192. fields = ["id", "invoice", "amount", "currency_code", "received_at", "reference", "created_at", "updated_at"]
  193. class PayoutSerializer(serializers.ModelSerializer):
  194. class Meta:
  195. model = Payout
  196. fields = ["id", "organization", "customer", "pickup", "amount", "currency_code", "paid_at", "reference", "created_at", "updated_at"]
  197. class ScrapListingItemSerializer(serializers.ModelSerializer):
  198. class Meta:
  199. model = ScrapListingItem
  200. fields = ["id", "listing", "material", "quantity_estimate", "unit", "created_at", "updated_at"]
  201. class ScrapListingSerializer(serializers.ModelSerializer):
  202. items = ScrapListingItemSerializer(many=True, read_only=True)
  203. class Meta:
  204. model = ScrapListing
  205. fields = [
  206. "id",
  207. "organization",
  208. "customer",
  209. "site",
  210. "title",
  211. "description",
  212. "auction_type",
  213. "currency_code",
  214. "reserve_price",
  215. "min_increment",
  216. "starts_at",
  217. "ends_at",
  218. "status",
  219. "is_public",
  220. "created_by",
  221. "items",
  222. "created_at",
  223. "updated_at",
  224. ]
  225. class ScrapBidSerializer(serializers.ModelSerializer):
  226. class Meta:
  227. model = ScrapBid
  228. fields = [
  229. "id",
  230. "listing",
  231. "bidder_org",
  232. "bidder_user",
  233. "price_total",
  234. "message",
  235. "status",
  236. "created_at",
  237. "updated_at",
  238. ]
  239. class ScrapAwardSerializer(serializers.ModelSerializer):
  240. class Meta:
  241. model = ScrapAward
  242. fields = ["id", "listing", "winning_bid", "pickup", "notes", "created_at", "updated_at"]
  243. class ScrapListingInviteSerializer(serializers.ModelSerializer):
  244. class Meta:
  245. model = ScrapListingInvite
  246. fields = ["id", "listing", "invited_org", "invited_user", "created_at", "updated_at"]
  247. class DocumentSerializer(serializers.ModelSerializer):
  248. class Meta:
  249. model = Document
  250. fields = [
  251. "id",
  252. "organization",
  253. "file",
  254. "kind",
  255. "content_type",
  256. "object_id",
  257. "uploaded_by",
  258. "created_at",
  259. "updated_at",
  260. ]
  261. class AuditLogSerializer(serializers.ModelSerializer):
  262. class Meta:
  263. model = AuditLog
  264. fields = [
  265. "id",
  266. "organization",
  267. "user",
  268. "action",
  269. "content_type",
  270. "object_id",
  271. "metadata",
  272. "created_at",
  273. "updated_at",
  274. ]