Нема описа

serializers.py 8.1KB

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