convexity-api-client 0.21.0.dev332__py3-none-any.whl → 0.21.0.dev336__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. convexity_api_client/api/v1/crm_create_sales_rep.py +186 -0
  2. convexity_api_client/api/v1/crm_delete_sales_rep.py +182 -0
  3. convexity_api_client/api/v1/crm_get_sales_rep.py +182 -0
  4. convexity_api_client/api/v1/crm_list_sales_reps.py +236 -0
  5. convexity_api_client/api/v1/crm_update_sales_rep.py +202 -0
  6. convexity_api_client/api/v1/inventory_assign_item_warehouse_location.py +206 -0
  7. convexity_api_client/api/v1/inventory_create_cost_list_vendor_assignment.py +202 -0
  8. convexity_api_client/api/v1/inventory_create_price_list_channel_assignment.py +202 -0
  9. convexity_api_client/api/v1/inventory_create_price_list_customer_assignment.py +202 -0
  10. convexity_api_client/api/v1/inventory_delete_cost_list_vendor_assignment.py +196 -0
  11. convexity_api_client/api/v1/inventory_delete_price_list_channel_assignment.py +196 -0
  12. convexity_api_client/api/v1/inventory_delete_price_list_customer_assignment.py +196 -0
  13. convexity_api_client/api/v1/inventory_list_cost_list_vendor_assignments.py +202 -0
  14. convexity_api_client/api/v1/inventory_list_item_cost_list_entries.py +182 -0
  15. convexity_api_client/api/v1/inventory_list_item_price_list_entries.py +182 -0
  16. convexity_api_client/api/v1/inventory_list_item_warehouse_locations.py +212 -0
  17. convexity_api_client/api/v1/inventory_list_price_list_channel_assignments.py +202 -0
  18. convexity_api_client/api/v1/inventory_list_price_list_customer_assignments.py +202 -0
  19. convexity_api_client/api/v1/inventory_list_warehouse_location_items.py +226 -0
  20. convexity_api_client/api/v1/inventory_update_cost_list_vendor_assignment.py +216 -0
  21. convexity_api_client/api/v1/inventory_update_price_list_channel_assignment.py +216 -0
  22. convexity_api_client/api/v1/inventory_update_price_list_customer_assignment.py +216 -0
  23. convexity_api_client/api/v1/purchasing_create_item_sourcing.py +190 -0
  24. convexity_api_client/api/v1/purchasing_deactivate_item_sourcing.py +182 -0
  25. convexity_api_client/api/v1/purchasing_get_item_sourcing_options.py +166 -0
  26. convexity_api_client/api/v1/purchasing_list_item_sourcing.py +382 -0
  27. convexity_api_client/api/v1/purchasing_update_item_sourcing.py +202 -0
  28. convexity_api_client/api/v1/purchasing_upsert_item_sourcing_cost.py +206 -0
  29. convexity_api_client/api/v1/sales_list_orders.py +20 -0
  30. convexity_api_client/api/v1/warehouse_workflow_cancel_pick_pack_ship.py +182 -0
  31. convexity_api_client/api/v1/warehouse_workflow_complete_pick_pack_ship_pack.py +202 -0
  32. convexity_api_client/api/v1/warehouse_workflow_complete_pick_pack_ship_pick.py +202 -0
  33. convexity_api_client/api/v1/warehouse_workflow_create_pick_pack_ship.py +186 -0
  34. convexity_api_client/api/v1/warehouse_workflow_generate_pick_pack_ship_pdf.py +188 -0
  35. convexity_api_client/api/v1/warehouse_workflow_get_pick_pack_ship.py +182 -0
  36. convexity_api_client/api/v1/warehouse_workflow_mark_pick_pack_ship_shipped.py +202 -0
  37. convexity_api_client/api/v1/warehouse_workflow_save_pick_pack_ship_shipment.py +202 -0
  38. convexity_api_client/models/__init__.py +134 -0
  39. convexity_api_client/models/adjust_stock_request.py +20 -8
  40. convexity_api_client/models/assign_inventory_item_location_request.py +108 -0
  41. convexity_api_client/models/assign_inventory_item_location_request_ext_data_type_0.py +47 -0
  42. convexity_api_client/models/bulk_upsert_customer_payload.py +20 -0
  43. convexity_api_client/models/bulk_upsert_sales_order_payload.py +40 -0
  44. convexity_api_client/models/complete_pick_pack_ship_pack_request.py +75 -0
  45. convexity_api_client/models/complete_pick_pack_ship_request.py +97 -0
  46. convexity_api_client/models/cost_list_entry_response.py +77 -0
  47. convexity_api_client/models/cost_list_vendor_assignment_response.py +149 -0
  48. convexity_api_client/models/cost_list_vendor_assignment_response_ext_data_type_0.py +47 -0
  49. convexity_api_client/models/cost_rule.py +53 -0
  50. convexity_api_client/models/cost_rule_response.py +22 -0
  51. convexity_api_client/models/cost_source_type.py +9 -0
  52. convexity_api_client/models/create_cost_list_request.py +4 -5
  53. convexity_api_client/models/create_cost_list_vendor_assignment_request.py +116 -0
  54. convexity_api_client/models/create_cost_list_vendor_assignment_request_ext_data_type_0.py +47 -0
  55. convexity_api_client/models/create_customer_request.py +20 -0
  56. convexity_api_client/models/create_item_sourcing_request.py +256 -0
  57. convexity_api_client/models/create_item_sourcing_request_ext_data_type_0.py +47 -0
  58. convexity_api_client/models/create_pick_pack_ship_request.py +153 -0
  59. convexity_api_client/models/create_price_list_channel_assignment_request.py +116 -0
  60. convexity_api_client/models/create_price_list_channel_assignment_request_ext_data_type_0.py +47 -0
  61. convexity_api_client/models/create_price_list_customer_assignment_request.py +116 -0
  62. convexity_api_client/models/create_price_list_customer_assignment_request_ext_data_type_0.py +47 -0
  63. convexity_api_client/models/create_price_list_request.py +4 -5
  64. convexity_api_client/models/create_sales_order_line_request.py +40 -8
  65. convexity_api_client/models/create_sales_order_request.py +40 -0
  66. convexity_api_client/models/create_sales_rep_request.py +181 -0
  67. convexity_api_client/models/create_sales_rep_request_ext_data_type_0.py +47 -0
  68. convexity_api_client/models/customer.py +53 -0
  69. convexity_api_client/models/customer_response.py +14 -0
  70. convexity_api_client/models/inventory_config.py +53 -0
  71. convexity_api_client/models/inventory_config_response.py +28 -0
  72. convexity_api_client/models/inventory_item.py +43 -0
  73. convexity_api_client/models/inventory_item_location.py +237 -0
  74. convexity_api_client/models/inventory_item_location_assignment_response.py +150 -0
  75. convexity_api_client/models/inventory_item_location_assignment_response_ext_data_type_0.py +47 -0
  76. convexity_api_client/models/inventory_item_type.py +0 -1
  77. convexity_api_client/models/item_sourcing.py +41 -0
  78. convexity_api_client/models/item_sourcing_item_option.py +107 -0
  79. convexity_api_client/models/item_sourcing_options_response.py +120 -0
  80. convexity_api_client/models/item_sourcing_response.py +360 -0
  81. convexity_api_client/models/item_sourcing_response_ext_data_type_0.py +47 -0
  82. convexity_api_client/models/item_sourcing_uom_option.py +77 -0
  83. convexity_api_client/models/item_sourcing_vendor_option.py +77 -0
  84. convexity_api_client/models/item_warehouse_location_response.py +248 -0
  85. convexity_api_client/models/list_cost_list_entries_response.py +83 -0
  86. convexity_api_client/models/list_cost_list_vendor_assignments_response.py +83 -0
  87. convexity_api_client/models/list_item_sourcing_response.py +83 -0
  88. convexity_api_client/models/list_item_warehouse_locations_response.py +83 -0
  89. convexity_api_client/models/list_price_list_channel_assignments_response.py +83 -0
  90. convexity_api_client/models/list_price_list_customer_assignments_response.py +83 -0
  91. convexity_api_client/models/list_price_list_entries_response.py +83 -0
  92. convexity_api_client/models/list_sales_reps_response.py +83 -0
  93. convexity_api_client/models/list_warehouse_location_items_response.py +83 -0
  94. convexity_api_client/models/mark_pick_pack_ship_shipped_request.py +84 -0
  95. convexity_api_client/models/pick_pack_ship_line_request.py +100 -0
  96. convexity_api_client/models/pick_pack_ship_packed_line_request.py +111 -0
  97. convexity_api_client/models/pick_pack_ship_picked_line_request.py +91 -0
  98. convexity_api_client/models/pick_pack_ship_response.py +111 -0
  99. convexity_api_client/models/price_list.py +41 -0
  100. convexity_api_client/models/price_list_channel_assignment_response.py +149 -0
  101. convexity_api_client/models/price_list_channel_assignment_response_ext_data_type_0.py +47 -0
  102. convexity_api_client/models/price_list_customer_assignment_response.py +149 -0
  103. convexity_api_client/models/price_list_customer_assignment_response_ext_data_type_0.py +47 -0
  104. convexity_api_client/models/price_list_entry_response.py +77 -0
  105. convexity_api_client/models/price_source_type.py +9 -0
  106. convexity_api_client/models/project.py +43 -0
  107. convexity_api_client/models/purchase_order_line.py +101 -0
  108. convexity_api_client/models/purchase_order_line_request.py +20 -8
  109. convexity_api_client/models/purchase_order_line_response.py +103 -0
  110. convexity_api_client/models/purchasing_list_item_sourcing_filter_operator_type_0.py +19 -0
  111. convexity_api_client/models/purchasing_list_item_sourcing_sort_direction_type_0.py +9 -0
  112. convexity_api_client/models/resolve_cost_response.py +22 -0
  113. convexity_api_client/models/resolve_price_response.py +20 -0
  114. convexity_api_client/models/sales_invoice_line.py +121 -0
  115. convexity_api_client/models/sales_invoice_line_request.py +40 -8
  116. convexity_api_client/models/sales_invoice_line_response.py +121 -0
  117. convexity_api_client/models/sales_order.py +73 -0
  118. convexity_api_client/models/sales_order_line.py +121 -0
  119. convexity_api_client/models/sales_order_line_response.py +123 -0
  120. convexity_api_client/models/sales_order_response.py +28 -0
  121. convexity_api_client/models/sales_rep.py +279 -0
  122. convexity_api_client/models/sales_rep_response.py +185 -0
  123. convexity_api_client/models/sales_rep_response_ext_data_type_0.py +47 -0
  124. convexity_api_client/models/save_pick_pack_ship_shipment_request.py +163 -0
  125. convexity_api_client/models/stock_balance.py +20 -8
  126. convexity_api_client/models/update_customer_request.py +20 -0
  127. convexity_api_client/models/update_item_sourcing_request.py +312 -0
  128. convexity_api_client/models/update_item_sourcing_request_ext_data_type_0.py +47 -0
  129. convexity_api_client/models/update_list_assignment_request.py +111 -0
  130. convexity_api_client/models/update_list_assignment_request_ext_data_type_0.py +47 -0
  131. convexity_api_client/models/update_sales_order_request.py +40 -0
  132. convexity_api_client/models/update_sales_rep_request.py +211 -0
  133. convexity_api_client/models/update_sales_rep_request_ext_data_type_0.py +47 -0
  134. convexity_api_client/models/upsert_inventory_config_request.py +40 -0
  135. convexity_api_client/models/upsert_item_sourcing_cost_request.py +62 -0
  136. convexity_api_client/models/warehouse_location.py +43 -0
  137. convexity_api_client/models/warehouse_location_item_response.py +160 -0
  138. {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/METADATA +1 -1
  139. {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/RECORD +140 -41
  140. {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/WHEEL +1 -1
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast
7
7
  from attrs import define as _attrs_define
8
8
  from attrs import field as _attrs_field
9
9
 
10
+ from ..models.price_source_type import PriceSourceType
10
11
  from ..types import UNSET, Unset
11
12
 
12
13
  if TYPE_CHECKING:
@@ -39,8 +40,13 @@ class SalesOrderLine:
39
40
  updated_at (datetime.datetime):
40
41
  inventory_item_id (None | str | Unset):
41
42
  sku (None | str | Unset):
43
+ notes (None | str | Unset):
42
44
  uom_id (None | str | Unset):
43
45
  stock_quantity (float | None | Unset):
46
+ source_price_list_id (None | str | Unset):
47
+ source_price_rule_id (None | str | Unset):
48
+ price_resolved_at (datetime.datetime | None | Unset):
49
+ price_source_type (None | PriceSourceType | Unset):
44
50
  ext_data (None | str | Unset):
45
51
  order (None | SalesOrder | Unset):
46
52
  allocations (list[SalesOrderAllocation] | None | Unset):
@@ -63,8 +69,13 @@ class SalesOrderLine:
63
69
  updated_at: datetime.datetime
64
70
  inventory_item_id: None | str | Unset = UNSET
65
71
  sku: None | str | Unset = UNSET
72
+ notes: None | str | Unset = UNSET
66
73
  uom_id: None | str | Unset = UNSET
67
74
  stock_quantity: float | None | Unset = UNSET
75
+ source_price_list_id: None | str | Unset = UNSET
76
+ source_price_rule_id: None | str | Unset = UNSET
77
+ price_resolved_at: datetime.datetime | None | Unset = UNSET
78
+ price_source_type: None | PriceSourceType | Unset = UNSET
68
79
  ext_data: None | str | Unset = UNSET
69
80
  order: None | SalesOrder | Unset = UNSET
70
81
  allocations: list[SalesOrderAllocation] | None | Unset = UNSET
@@ -110,6 +121,12 @@ class SalesOrderLine:
110
121
  else:
111
122
  sku = self.sku
112
123
 
124
+ notes: None | str | Unset
125
+ if isinstance(self.notes, Unset):
126
+ notes = UNSET
127
+ else:
128
+ notes = self.notes
129
+
113
130
  uom_id: None | str | Unset
114
131
  if isinstance(self.uom_id, Unset):
115
132
  uom_id = UNSET
@@ -122,6 +139,34 @@ class SalesOrderLine:
122
139
  else:
123
140
  stock_quantity = self.stock_quantity
124
141
 
142
+ source_price_list_id: None | str | Unset
143
+ if isinstance(self.source_price_list_id, Unset):
144
+ source_price_list_id = UNSET
145
+ else:
146
+ source_price_list_id = self.source_price_list_id
147
+
148
+ source_price_rule_id: None | str | Unset
149
+ if isinstance(self.source_price_rule_id, Unset):
150
+ source_price_rule_id = UNSET
151
+ else:
152
+ source_price_rule_id = self.source_price_rule_id
153
+
154
+ price_resolved_at: None | str | Unset
155
+ if isinstance(self.price_resolved_at, Unset):
156
+ price_resolved_at = UNSET
157
+ elif isinstance(self.price_resolved_at, datetime.datetime):
158
+ price_resolved_at = self.price_resolved_at.isoformat()
159
+ else:
160
+ price_resolved_at = self.price_resolved_at
161
+
162
+ price_source_type: None | str | Unset
163
+ if isinstance(self.price_source_type, Unset):
164
+ price_source_type = UNSET
165
+ elif isinstance(self.price_source_type, PriceSourceType):
166
+ price_source_type = self.price_source_type.value
167
+ else:
168
+ price_source_type = self.price_source_type
169
+
125
170
  ext_data: None | str | Unset
126
171
  if isinstance(self.ext_data, Unset):
127
172
  ext_data = UNSET
@@ -228,10 +273,20 @@ class SalesOrderLine:
228
273
  field_dict["inventory_item_id"] = inventory_item_id
229
274
  if sku is not UNSET:
230
275
  field_dict["sku"] = sku
276
+ if notes is not UNSET:
277
+ field_dict["notes"] = notes
231
278
  if uom_id is not UNSET:
232
279
  field_dict["uom_id"] = uom_id
233
280
  if stock_quantity is not UNSET:
234
281
  field_dict["stock_quantity"] = stock_quantity
282
+ if source_price_list_id is not UNSET:
283
+ field_dict["source_price_list_id"] = source_price_list_id
284
+ if source_price_rule_id is not UNSET:
285
+ field_dict["source_price_rule_id"] = source_price_rule_id
286
+ if price_resolved_at is not UNSET:
287
+ field_dict["price_resolved_at"] = price_resolved_at
288
+ if price_source_type is not UNSET:
289
+ field_dict["price_source_type"] = price_source_type
235
290
  if ext_data is not UNSET:
236
291
  field_dict["ext_data"] = ext_data
237
292
  if order is not UNSET:
@@ -300,6 +355,15 @@ class SalesOrderLine:
300
355
 
301
356
  sku = _parse_sku(d.pop("sku", UNSET))
302
357
 
358
+ def _parse_notes(data: object) -> None | str | Unset:
359
+ if data is None:
360
+ return data
361
+ if isinstance(data, Unset):
362
+ return data
363
+ return cast(None | str | Unset, data)
364
+
365
+ notes = _parse_notes(d.pop("notes", UNSET))
366
+
303
367
  def _parse_uom_id(data: object) -> None | str | Unset:
304
368
  if data is None:
305
369
  return data
@@ -318,6 +382,58 @@ class SalesOrderLine:
318
382
 
319
383
  stock_quantity = _parse_stock_quantity(d.pop("stock_quantity", UNSET))
320
384
 
385
+ def _parse_source_price_list_id(data: object) -> None | str | Unset:
386
+ if data is None:
387
+ return data
388
+ if isinstance(data, Unset):
389
+ return data
390
+ return cast(None | str | Unset, data)
391
+
392
+ source_price_list_id = _parse_source_price_list_id(d.pop("source_price_list_id", UNSET))
393
+
394
+ def _parse_source_price_rule_id(data: object) -> None | str | Unset:
395
+ if data is None:
396
+ return data
397
+ if isinstance(data, Unset):
398
+ return data
399
+ return cast(None | str | Unset, data)
400
+
401
+ source_price_rule_id = _parse_source_price_rule_id(d.pop("source_price_rule_id", UNSET))
402
+
403
+ def _parse_price_resolved_at(data: object) -> datetime.datetime | None | Unset:
404
+ if data is None:
405
+ return data
406
+ if isinstance(data, Unset):
407
+ return data
408
+ try:
409
+ if not isinstance(data, str):
410
+ raise TypeError()
411
+ price_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
412
+
413
+ return price_resolved_at_type_0
414
+ except (TypeError, ValueError, AttributeError, KeyError):
415
+ pass
416
+ return cast(datetime.datetime | None | Unset, data)
417
+
418
+ price_resolved_at = _parse_price_resolved_at(d.pop("price_resolved_at", UNSET))
419
+
420
+ def _parse_price_source_type(data: object) -> None | PriceSourceType | Unset:
421
+ if data is None:
422
+ return data
423
+ if isinstance(data, Unset):
424
+ return data
425
+ try:
426
+ if not isinstance(data, str):
427
+ raise TypeError()
428
+ price_source_type_type_0 = PriceSourceType(data)
429
+
430
+ return price_source_type_type_0
431
+ except (TypeError, ValueError, AttributeError, KeyError):
432
+ pass
433
+ return cast(None | PriceSourceType | Unset, data)
434
+
435
+ price_source_type = _parse_price_source_type(d.pop("price_source_type", UNSET))
436
+
321
437
  def _parse_ext_data(data: object) -> None | str | Unset:
322
438
  if data is None:
323
439
  return data
@@ -489,8 +605,13 @@ class SalesOrderLine:
489
605
  updated_at=updated_at,
490
606
  inventory_item_id=inventory_item_id,
491
607
  sku=sku,
608
+ notes=notes,
492
609
  uom_id=uom_id,
493
610
  stock_quantity=stock_quantity,
611
+ source_price_list_id=source_price_list_id,
612
+ source_price_rule_id=source_price_rule_id,
613
+ price_resolved_at=price_resolved_at,
614
+ price_source_type=price_source_type,
494
615
  ext_data=ext_data,
495
616
  order=order,
496
617
  allocations=allocations,
@@ -7,6 +7,9 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast
7
7
  from attrs import define as _attrs_define
8
8
  from attrs import field as _attrs_field
9
9
 
10
+ from ..models.price_source_type import PriceSourceType
11
+ from ..types import UNSET, Unset
12
+
10
13
  if TYPE_CHECKING:
11
14
  from ..models.sales_order_line_response_ext_data_type_0 import SalesOrderLineResponseExtDataType0
12
15
 
@@ -31,6 +34,11 @@ class SalesOrderLineResponse:
31
34
  ext_data (None | SalesOrderLineResponseExtDataType0):
32
35
  created_at (datetime.datetime):
33
36
  updated_at (datetime.datetime):
37
+ notes (None | str | Unset):
38
+ source_price_list_id (None | str | Unset):
39
+ source_price_rule_id (None | str | Unset):
40
+ price_resolved_at (datetime.datetime | None | Unset):
41
+ price_source_type (None | PriceSourceType | Unset):
34
42
  """
35
43
 
36
44
  id: str
@@ -46,6 +54,11 @@ class SalesOrderLineResponse:
46
54
  ext_data: None | SalesOrderLineResponseExtDataType0
47
55
  created_at: datetime.datetime
48
56
  updated_at: datetime.datetime
57
+ notes: None | str | Unset = UNSET
58
+ source_price_list_id: None | str | Unset = UNSET
59
+ source_price_rule_id: None | str | Unset = UNSET
60
+ price_resolved_at: datetime.datetime | None | Unset = UNSET
61
+ price_source_type: None | PriceSourceType | Unset = UNSET
49
62
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
50
63
 
51
64
  def to_dict(self) -> dict[str, Any]:
@@ -83,6 +96,40 @@ class SalesOrderLineResponse:
83
96
 
84
97
  updated_at = self.updated_at.isoformat()
85
98
 
99
+ notes: None | str | Unset
100
+ if isinstance(self.notes, Unset):
101
+ notes = UNSET
102
+ else:
103
+ notes = self.notes
104
+
105
+ source_price_list_id: None | str | Unset
106
+ if isinstance(self.source_price_list_id, Unset):
107
+ source_price_list_id = UNSET
108
+ else:
109
+ source_price_list_id = self.source_price_list_id
110
+
111
+ source_price_rule_id: None | str | Unset
112
+ if isinstance(self.source_price_rule_id, Unset):
113
+ source_price_rule_id = UNSET
114
+ else:
115
+ source_price_rule_id = self.source_price_rule_id
116
+
117
+ price_resolved_at: None | str | Unset
118
+ if isinstance(self.price_resolved_at, Unset):
119
+ price_resolved_at = UNSET
120
+ elif isinstance(self.price_resolved_at, datetime.datetime):
121
+ price_resolved_at = self.price_resolved_at.isoformat()
122
+ else:
123
+ price_resolved_at = self.price_resolved_at
124
+
125
+ price_source_type: None | str | Unset
126
+ if isinstance(self.price_source_type, Unset):
127
+ price_source_type = UNSET
128
+ elif isinstance(self.price_source_type, PriceSourceType):
129
+ price_source_type = self.price_source_type.value
130
+ else:
131
+ price_source_type = self.price_source_type
132
+
86
133
  field_dict: dict[str, Any] = {}
87
134
  field_dict.update(self.additional_properties)
88
135
  field_dict.update(
@@ -102,6 +149,16 @@ class SalesOrderLineResponse:
102
149
  "updated_at": updated_at,
103
150
  }
104
151
  )
152
+ if notes is not UNSET:
153
+ field_dict["notes"] = notes
154
+ if source_price_list_id is not UNSET:
155
+ field_dict["source_price_list_id"] = source_price_list_id
156
+ if source_price_rule_id is not UNSET:
157
+ field_dict["source_price_rule_id"] = source_price_rule_id
158
+ if price_resolved_at is not UNSET:
159
+ field_dict["price_resolved_at"] = price_resolved_at
160
+ if price_source_type is not UNSET:
161
+ field_dict["price_source_type"] = price_source_type
105
162
 
106
163
  return field_dict
107
164
 
@@ -159,6 +216,67 @@ class SalesOrderLineResponse:
159
216
 
160
217
  updated_at = datetime.datetime.fromisoformat(d.pop("updated_at"))
161
218
 
219
+ def _parse_notes(data: object) -> None | str | Unset:
220
+ if data is None:
221
+ return data
222
+ if isinstance(data, Unset):
223
+ return data
224
+ return cast(None | str | Unset, data)
225
+
226
+ notes = _parse_notes(d.pop("notes", UNSET))
227
+
228
+ def _parse_source_price_list_id(data: object) -> None | str | Unset:
229
+ if data is None:
230
+ return data
231
+ if isinstance(data, Unset):
232
+ return data
233
+ return cast(None | str | Unset, data)
234
+
235
+ source_price_list_id = _parse_source_price_list_id(d.pop("source_price_list_id", UNSET))
236
+
237
+ def _parse_source_price_rule_id(data: object) -> None | str | Unset:
238
+ if data is None:
239
+ return data
240
+ if isinstance(data, Unset):
241
+ return data
242
+ return cast(None | str | Unset, data)
243
+
244
+ source_price_rule_id = _parse_source_price_rule_id(d.pop("source_price_rule_id", UNSET))
245
+
246
+ def _parse_price_resolved_at(data: object) -> datetime.datetime | None | Unset:
247
+ if data is None:
248
+ return data
249
+ if isinstance(data, Unset):
250
+ return data
251
+ try:
252
+ if not isinstance(data, str):
253
+ raise TypeError()
254
+ price_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
255
+
256
+ return price_resolved_at_type_0
257
+ except (TypeError, ValueError, AttributeError, KeyError):
258
+ pass
259
+ return cast(datetime.datetime | None | Unset, data)
260
+
261
+ price_resolved_at = _parse_price_resolved_at(d.pop("price_resolved_at", UNSET))
262
+
263
+ def _parse_price_source_type(data: object) -> None | PriceSourceType | Unset:
264
+ if data is None:
265
+ return data
266
+ if isinstance(data, Unset):
267
+ return data
268
+ try:
269
+ if not isinstance(data, str):
270
+ raise TypeError()
271
+ price_source_type_type_0 = PriceSourceType(data)
272
+
273
+ return price_source_type_type_0
274
+ except (TypeError, ValueError, AttributeError, KeyError):
275
+ pass
276
+ return cast(None | PriceSourceType | Unset, data)
277
+
278
+ price_source_type = _parse_price_source_type(d.pop("price_source_type", UNSET))
279
+
162
280
  sales_order_line_response = cls(
163
281
  id=id,
164
282
  project_id=project_id,
@@ -173,6 +291,11 @@ class SalesOrderLineResponse:
173
291
  ext_data=ext_data,
174
292
  created_at=created_at,
175
293
  updated_at=updated_at,
294
+ notes=notes,
295
+ source_price_list_id=source_price_list_id,
296
+ source_price_rule_id=source_price_rule_id,
297
+ price_resolved_at=price_resolved_at,
298
+ price_source_type=price_source_type,
176
299
  )
177
300
 
178
301
  sales_order_line_response.additional_properties = d
@@ -30,6 +30,8 @@ class SalesOrderResponse:
30
30
  project_id (str):
31
31
  so_number (str):
32
32
  customer_id (None | str):
33
+ sales_rep_id (None | str):
34
+ commission_rate_snapshot (float | None | str):
33
35
  channel_id (None | str):
34
36
  external_id (None | str):
35
37
  lifecycle_status (CanonicalStatus):
@@ -57,6 +59,8 @@ class SalesOrderResponse:
57
59
  project_id: str
58
60
  so_number: str
59
61
  customer_id: None | str
62
+ sales_rep_id: None | str
63
+ commission_rate_snapshot: float | None | str
60
64
  channel_id: None | str
61
65
  external_id: None | str
62
66
  lifecycle_status: CanonicalStatus
@@ -92,6 +96,12 @@ class SalesOrderResponse:
92
96
  customer_id: None | str
93
97
  customer_id = self.customer_id
94
98
 
99
+ sales_rep_id: None | str
100
+ sales_rep_id = self.sales_rep_id
101
+
102
+ commission_rate_snapshot: float | None | str
103
+ commission_rate_snapshot = self.commission_rate_snapshot
104
+
95
105
  channel_id: None | str
96
106
  channel_id = self.channel_id
97
107
 
@@ -194,6 +204,8 @@ class SalesOrderResponse:
194
204
  "project_id": project_id,
195
205
  "so_number": so_number,
196
206
  "customer_id": customer_id,
207
+ "sales_rep_id": sales_rep_id,
208
+ "commission_rate_snapshot": commission_rate_snapshot,
197
209
  "channel_id": channel_id,
198
210
  "external_id": external_id,
199
211
  "lifecycle_status": lifecycle_status,
@@ -245,6 +257,20 @@ class SalesOrderResponse:
245
257
 
246
258
  customer_id = _parse_customer_id(d.pop("customer_id"))
247
259
 
260
+ def _parse_sales_rep_id(data: object) -> None | str:
261
+ if data is None:
262
+ return data
263
+ return cast(None | str, data)
264
+
265
+ sales_rep_id = _parse_sales_rep_id(d.pop("sales_rep_id"))
266
+
267
+ def _parse_commission_rate_snapshot(data: object) -> float | None | str:
268
+ if data is None:
269
+ return data
270
+ return cast(float | None | str, data)
271
+
272
+ commission_rate_snapshot = _parse_commission_rate_snapshot(d.pop("commission_rate_snapshot"))
273
+
248
274
  def _parse_channel_id(data: object) -> None | str:
249
275
  if data is None:
250
276
  return data
@@ -425,6 +451,8 @@ class SalesOrderResponse:
425
451
  project_id=project_id,
426
452
  so_number=so_number,
427
453
  customer_id=customer_id,
454
+ sales_rep_id=sales_rep_id,
455
+ commission_rate_snapshot=commission_rate_snapshot,
428
456
  channel_id=channel_id,
429
457
  external_id=external_id,
430
458
  lifecycle_status=lifecycle_status,
@@ -0,0 +1,279 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from collections.abc import Mapping
5
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+
10
+ from ..types import UNSET, Unset
11
+
12
+ if TYPE_CHECKING:
13
+ from ..models.customer import Customer
14
+ from ..models.sales_order import SalesOrder
15
+
16
+
17
+ T = TypeVar("T", bound="SalesRep")
18
+
19
+
20
+ @_attrs_define
21
+ class SalesRep:
22
+ """Represents a SalesRep record
23
+
24
+ Attributes:
25
+ id (str):
26
+ project_id (str):
27
+ code (str):
28
+ name (str):
29
+ is_active (bool):
30
+ created_at (datetime.datetime):
31
+ updated_at (datetime.datetime):
32
+ user_id (None | str | Unset):
33
+ email (None | str | Unset):
34
+ default_commission_rate (float | None | str | Unset):
35
+ ext_data (None | str | Unset):
36
+ customers (list[Customer] | None | Unset):
37
+ sales_orders (list[SalesOrder] | None | Unset):
38
+ """
39
+
40
+ id: str
41
+ project_id: str
42
+ code: str
43
+ name: str
44
+ is_active: bool
45
+ created_at: datetime.datetime
46
+ updated_at: datetime.datetime
47
+ user_id: None | str | Unset = UNSET
48
+ email: None | str | Unset = UNSET
49
+ default_commission_rate: float | None | str | Unset = UNSET
50
+ ext_data: None | str | Unset = UNSET
51
+ customers: list[Customer] | None | Unset = UNSET
52
+ sales_orders: list[SalesOrder] | None | Unset = UNSET
53
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
54
+
55
+ def to_dict(self) -> dict[str, Any]:
56
+ id = self.id
57
+
58
+ project_id = self.project_id
59
+
60
+ code = self.code
61
+
62
+ name = self.name
63
+
64
+ is_active = self.is_active
65
+
66
+ created_at = self.created_at.isoformat()
67
+
68
+ updated_at = self.updated_at.isoformat()
69
+
70
+ user_id: None | str | Unset
71
+ if isinstance(self.user_id, Unset):
72
+ user_id = UNSET
73
+ else:
74
+ user_id = self.user_id
75
+
76
+ email: None | str | Unset
77
+ if isinstance(self.email, Unset):
78
+ email = UNSET
79
+ else:
80
+ email = self.email
81
+
82
+ default_commission_rate: float | None | str | Unset
83
+ if isinstance(self.default_commission_rate, Unset):
84
+ default_commission_rate = UNSET
85
+ else:
86
+ default_commission_rate = self.default_commission_rate
87
+
88
+ ext_data: None | str | Unset
89
+ if isinstance(self.ext_data, Unset):
90
+ ext_data = UNSET
91
+ else:
92
+ ext_data = self.ext_data
93
+
94
+ customers: list[dict[str, Any]] | None | Unset
95
+ if isinstance(self.customers, Unset):
96
+ customers = UNSET
97
+ elif isinstance(self.customers, list):
98
+ customers = []
99
+ for customers_type_0_item_data in self.customers:
100
+ customers_type_0_item = customers_type_0_item_data.to_dict()
101
+ customers.append(customers_type_0_item)
102
+
103
+ else:
104
+ customers = self.customers
105
+
106
+ sales_orders: list[dict[str, Any]] | None | Unset
107
+ if isinstance(self.sales_orders, Unset):
108
+ sales_orders = UNSET
109
+ elif isinstance(self.sales_orders, list):
110
+ sales_orders = []
111
+ for sales_orders_type_0_item_data in self.sales_orders:
112
+ sales_orders_type_0_item = sales_orders_type_0_item_data.to_dict()
113
+ sales_orders.append(sales_orders_type_0_item)
114
+
115
+ else:
116
+ sales_orders = self.sales_orders
117
+
118
+ field_dict: dict[str, Any] = {}
119
+ field_dict.update(self.additional_properties)
120
+ field_dict.update(
121
+ {
122
+ "id": id,
123
+ "project_id": project_id,
124
+ "code": code,
125
+ "name": name,
126
+ "is_active": is_active,
127
+ "created_at": created_at,
128
+ "updated_at": updated_at,
129
+ }
130
+ )
131
+ if user_id is not UNSET:
132
+ field_dict["user_id"] = user_id
133
+ if email is not UNSET:
134
+ field_dict["email"] = email
135
+ if default_commission_rate is not UNSET:
136
+ field_dict["default_commission_rate"] = default_commission_rate
137
+ if ext_data is not UNSET:
138
+ field_dict["ext_data"] = ext_data
139
+ if customers is not UNSET:
140
+ field_dict["customers"] = customers
141
+ if sales_orders is not UNSET:
142
+ field_dict["sales_orders"] = sales_orders
143
+
144
+ return field_dict
145
+
146
+ @classmethod
147
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
148
+ from ..models.customer import Customer
149
+ from ..models.sales_order import SalesOrder
150
+
151
+ d = dict(src_dict)
152
+ id = d.pop("id")
153
+
154
+ project_id = d.pop("project_id")
155
+
156
+ code = d.pop("code")
157
+
158
+ name = d.pop("name")
159
+
160
+ is_active = d.pop("is_active")
161
+
162
+ created_at = datetime.datetime.fromisoformat(d.pop("created_at"))
163
+
164
+ updated_at = datetime.datetime.fromisoformat(d.pop("updated_at"))
165
+
166
+ def _parse_user_id(data: object) -> None | str | Unset:
167
+ if data is None:
168
+ return data
169
+ if isinstance(data, Unset):
170
+ return data
171
+ return cast(None | str | Unset, data)
172
+
173
+ user_id = _parse_user_id(d.pop("user_id", UNSET))
174
+
175
+ def _parse_email(data: object) -> None | str | Unset:
176
+ if data is None:
177
+ return data
178
+ if isinstance(data, Unset):
179
+ return data
180
+ return cast(None | str | Unset, data)
181
+
182
+ email = _parse_email(d.pop("email", UNSET))
183
+
184
+ def _parse_default_commission_rate(data: object) -> float | None | str | Unset:
185
+ if data is None:
186
+ return data
187
+ if isinstance(data, Unset):
188
+ return data
189
+ return cast(float | None | str | Unset, data)
190
+
191
+ default_commission_rate = _parse_default_commission_rate(d.pop("default_commission_rate", UNSET))
192
+
193
+ def _parse_ext_data(data: object) -> None | str | Unset:
194
+ if data is None:
195
+ return data
196
+ if isinstance(data, Unset):
197
+ return data
198
+ return cast(None | str | Unset, data)
199
+
200
+ ext_data = _parse_ext_data(d.pop("ext_data", UNSET))
201
+
202
+ def _parse_customers(data: object) -> list[Customer] | None | Unset:
203
+ if data is None:
204
+ return data
205
+ if isinstance(data, Unset):
206
+ return data
207
+ try:
208
+ if not isinstance(data, list):
209
+ raise TypeError()
210
+ customers_type_0 = []
211
+ _customers_type_0 = data
212
+ for customers_type_0_item_data in _customers_type_0:
213
+ customers_type_0_item = Customer.from_dict(customers_type_0_item_data)
214
+
215
+ customers_type_0.append(customers_type_0_item)
216
+
217
+ return customers_type_0
218
+ except (TypeError, ValueError, AttributeError, KeyError):
219
+ pass
220
+ return cast(list[Customer] | None | Unset, data)
221
+
222
+ customers = _parse_customers(d.pop("customers", UNSET))
223
+
224
+ def _parse_sales_orders(data: object) -> list[SalesOrder] | None | Unset:
225
+ if data is None:
226
+ return data
227
+ if isinstance(data, Unset):
228
+ return data
229
+ try:
230
+ if not isinstance(data, list):
231
+ raise TypeError()
232
+ sales_orders_type_0 = []
233
+ _sales_orders_type_0 = data
234
+ for sales_orders_type_0_item_data in _sales_orders_type_0:
235
+ sales_orders_type_0_item = SalesOrder.from_dict(sales_orders_type_0_item_data)
236
+
237
+ sales_orders_type_0.append(sales_orders_type_0_item)
238
+
239
+ return sales_orders_type_0
240
+ except (TypeError, ValueError, AttributeError, KeyError):
241
+ pass
242
+ return cast(list[SalesOrder] | None | Unset, data)
243
+
244
+ sales_orders = _parse_sales_orders(d.pop("sales_orders", UNSET))
245
+
246
+ sales_rep = cls(
247
+ id=id,
248
+ project_id=project_id,
249
+ code=code,
250
+ name=name,
251
+ is_active=is_active,
252
+ created_at=created_at,
253
+ updated_at=updated_at,
254
+ user_id=user_id,
255
+ email=email,
256
+ default_commission_rate=default_commission_rate,
257
+ ext_data=ext_data,
258
+ customers=customers,
259
+ sales_orders=sales_orders,
260
+ )
261
+
262
+ sales_rep.additional_properties = d
263
+ return sales_rep
264
+
265
+ @property
266
+ def additional_keys(self) -> list[str]:
267
+ return list(self.additional_properties.keys())
268
+
269
+ def __getitem__(self, key: str) -> Any:
270
+ return self.additional_properties[key]
271
+
272
+ def __setitem__(self, key: str, value: Any) -> None:
273
+ self.additional_properties[key] = value
274
+
275
+ def __delitem__(self, key: str) -> None:
276
+ del self.additional_properties[key]
277
+
278
+ def __contains__(self, key: str) -> bool:
279
+ return key in self.additional_properties