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
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.price_list_response import PriceListResponse
11
+ from ..models.price_rule_response import PriceRuleResponse
12
+
13
+
14
+ T = TypeVar("T", bound="PriceListEntryResponse")
15
+
16
+
17
+ @_attrs_define
18
+ class PriceListEntryResponse:
19
+ """
20
+ Attributes:
21
+ rule (PriceRuleResponse):
22
+ price_list (PriceListResponse):
23
+ """
24
+
25
+ rule: PriceRuleResponse
26
+ price_list: PriceListResponse
27
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
28
+
29
+ def to_dict(self) -> dict[str, Any]:
30
+ rule = self.rule.to_dict()
31
+
32
+ price_list = self.price_list.to_dict()
33
+
34
+ field_dict: dict[str, Any] = {}
35
+ field_dict.update(self.additional_properties)
36
+ field_dict.update(
37
+ {
38
+ "rule": rule,
39
+ "price_list": price_list,
40
+ }
41
+ )
42
+
43
+ return field_dict
44
+
45
+ @classmethod
46
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
47
+ from ..models.price_list_response import PriceListResponse
48
+ from ..models.price_rule_response import PriceRuleResponse
49
+
50
+ d = dict(src_dict)
51
+ rule = PriceRuleResponse.from_dict(d.pop("rule"))
52
+
53
+ price_list = PriceListResponse.from_dict(d.pop("price_list"))
54
+
55
+ price_list_entry_response = cls(
56
+ rule=rule,
57
+ price_list=price_list,
58
+ )
59
+
60
+ price_list_entry_response.additional_properties = d
61
+ return price_list_entry_response
62
+
63
+ @property
64
+ def additional_keys(self) -> list[str]:
65
+ return list(self.additional_properties.keys())
66
+
67
+ def __getitem__(self, key: str) -> Any:
68
+ return self.additional_properties[key]
69
+
70
+ def __setitem__(self, key: str, value: Any) -> None:
71
+ self.additional_properties[key] = value
72
+
73
+ def __delitem__(self, key: str) -> None:
74
+ del self.additional_properties[key]
75
+
76
+ def __contains__(self, key: str) -> bool:
77
+ return key in self.additional_properties
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class PriceSourceType(str, Enum):
5
+ MANUAL = "MANUAL"
6
+ RESOLVED = "RESOLVED"
7
+
8
+ def __str__(self) -> str:
9
+ return str(self.value)
@@ -43,6 +43,7 @@ if TYPE_CHECKING:
43
43
  from ..models.inventory_item_category import InventoryItemCategory
44
44
  from ..models.inventory_item_classification import InventoryItemClassification
45
45
  from ..models.inventory_item_kpi import InventoryItemKpi
46
+ from ..models.inventory_item_location import InventoryItemLocation
46
47
  from ..models.inventory_kpi_snapshot import InventoryKpiSnapshot
47
48
  from ..models.inventory_replenishment_policy import InventoryReplenishmentPolicy
48
49
  from ..models.issue import Issue
@@ -129,6 +130,7 @@ class Project:
129
130
  import_jobs (list[ImportJob] | None | Unset):
130
131
  item_templates (list[ItemTemplate] | None | Unset):
131
132
  inventory_items (list[InventoryItem] | None | Unset):
133
+ inventory_item_locations (list[InventoryItemLocation] | None | Unset):
132
134
  item_categories (list[ItemCategory] | None | Unset):
133
135
  item_template_categories (list[ItemTemplateCategory] | None | Unset):
134
136
  inventory_item_categories (list[InventoryItemCategory] | None | Unset):
@@ -228,6 +230,7 @@ class Project:
228
230
  import_jobs: list[ImportJob] | None | Unset = UNSET
229
231
  item_templates: list[ItemTemplate] | None | Unset = UNSET
230
232
  inventory_items: list[InventoryItem] | None | Unset = UNSET
233
+ inventory_item_locations: list[InventoryItemLocation] | None | Unset = UNSET
231
234
  item_categories: list[ItemCategory] | None | Unset = UNSET
232
235
  item_template_categories: list[ItemTemplateCategory] | None | Unset = UNSET
233
236
  inventory_item_categories: list[InventoryItemCategory] | None | Unset = UNSET
@@ -487,6 +490,18 @@ class Project:
487
490
  else:
488
491
  inventory_items = self.inventory_items
489
492
 
493
+ inventory_item_locations: list[dict[str, Any]] | None | Unset
494
+ if isinstance(self.inventory_item_locations, Unset):
495
+ inventory_item_locations = UNSET
496
+ elif isinstance(self.inventory_item_locations, list):
497
+ inventory_item_locations = []
498
+ for inventory_item_locations_type_0_item_data in self.inventory_item_locations:
499
+ inventory_item_locations_type_0_item = inventory_item_locations_type_0_item_data.to_dict()
500
+ inventory_item_locations.append(inventory_item_locations_type_0_item)
501
+
502
+ else:
503
+ inventory_item_locations = self.inventory_item_locations
504
+
490
505
  item_categories: list[dict[str, Any]] | None | Unset
491
506
  if isinstance(self.item_categories, Unset):
492
507
  item_categories = UNSET
@@ -1423,6 +1438,8 @@ class Project:
1423
1438
  field_dict["item_templates"] = item_templates
1424
1439
  if inventory_items is not UNSET:
1425
1440
  field_dict["inventory_items"] = inventory_items
1441
+ if inventory_item_locations is not UNSET:
1442
+ field_dict["inventory_item_locations"] = inventory_item_locations
1426
1443
  if item_categories is not UNSET:
1427
1444
  field_dict["item_categories"] = item_categories
1428
1445
  if item_template_categories is not UNSET:
@@ -1611,6 +1628,7 @@ class Project:
1611
1628
  from ..models.inventory_item_category import InventoryItemCategory
1612
1629
  from ..models.inventory_item_classification import InventoryItemClassification
1613
1630
  from ..models.inventory_item_kpi import InventoryItemKpi
1631
+ from ..models.inventory_item_location import InventoryItemLocation
1614
1632
  from ..models.inventory_kpi_snapshot import InventoryKpiSnapshot
1615
1633
  from ..models.inventory_replenishment_policy import InventoryReplenishmentPolicy
1616
1634
  from ..models.issue import Issue
@@ -1974,6 +1992,30 @@ class Project:
1974
1992
 
1975
1993
  inventory_items = _parse_inventory_items(d.pop("inventory_items", UNSET))
1976
1994
 
1995
+ def _parse_inventory_item_locations(data: object) -> list[InventoryItemLocation] | None | Unset:
1996
+ if data is None:
1997
+ return data
1998
+ if isinstance(data, Unset):
1999
+ return data
2000
+ try:
2001
+ if not isinstance(data, list):
2002
+ raise TypeError()
2003
+ inventory_item_locations_type_0 = []
2004
+ _inventory_item_locations_type_0 = data
2005
+ for inventory_item_locations_type_0_item_data in _inventory_item_locations_type_0:
2006
+ inventory_item_locations_type_0_item = InventoryItemLocation.from_dict(
2007
+ inventory_item_locations_type_0_item_data
2008
+ )
2009
+
2010
+ inventory_item_locations_type_0.append(inventory_item_locations_type_0_item)
2011
+
2012
+ return inventory_item_locations_type_0
2013
+ except (TypeError, ValueError, AttributeError, KeyError):
2014
+ pass
2015
+ return cast(list[InventoryItemLocation] | None | Unset, data)
2016
+
2017
+ inventory_item_locations = _parse_inventory_item_locations(d.pop("inventory_item_locations", UNSET))
2018
+
1977
2019
  def _parse_item_categories(data: object) -> list[ItemCategory] | None | Unset:
1978
2020
  if data is None:
1979
2021
  return data
@@ -3698,6 +3740,7 @@ class Project:
3698
3740
  import_jobs=import_jobs,
3699
3741
  item_templates=item_templates,
3700
3742
  inventory_items=inventory_items,
3743
+ inventory_item_locations=inventory_item_locations,
3701
3744
  item_categories=item_categories,
3702
3745
  item_template_categories=item_template_categories,
3703
3746
  inventory_item_categories=inventory_item_categories,
@@ -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.cost_source_type import CostSourceType
10
11
  from ..types import UNSET, Unset
11
12
 
12
13
  if TYPE_CHECKING:
@@ -37,6 +38,10 @@ class PurchaseOrderLine:
37
38
  inventory_item_id (None | str | Unset):
38
39
  uom_id (None | str | Unset):
39
40
  stock_quantity (float | None | Unset):
41
+ source_cost_list_id (None | str | Unset):
42
+ source_cost_rule_id (None | str | Unset):
43
+ cost_resolved_at (datetime.datetime | None | Unset):
44
+ cost_source_type (CostSourceType | None | Unset):
40
45
  expected_receipt_date (datetime.datetime | None | Unset):
41
46
  so_reference (None | str | Unset):
42
47
  ext_data (None | str | Unset):
@@ -59,6 +64,10 @@ class PurchaseOrderLine:
59
64
  inventory_item_id: None | str | Unset = UNSET
60
65
  uom_id: None | str | Unset = UNSET
61
66
  stock_quantity: float | None | Unset = UNSET
67
+ source_cost_list_id: None | str | Unset = UNSET
68
+ source_cost_rule_id: None | str | Unset = UNSET
69
+ cost_resolved_at: datetime.datetime | None | Unset = UNSET
70
+ cost_source_type: CostSourceType | None | Unset = UNSET
62
71
  expected_receipt_date: datetime.datetime | None | Unset = UNSET
63
72
  so_reference: None | str | Unset = UNSET
64
73
  ext_data: None | str | Unset = UNSET
@@ -113,6 +122,34 @@ class PurchaseOrderLine:
113
122
  else:
114
123
  stock_quantity = self.stock_quantity
115
124
 
125
+ source_cost_list_id: None | str | Unset
126
+ if isinstance(self.source_cost_list_id, Unset):
127
+ source_cost_list_id = UNSET
128
+ else:
129
+ source_cost_list_id = self.source_cost_list_id
130
+
131
+ source_cost_rule_id: None | str | Unset
132
+ if isinstance(self.source_cost_rule_id, Unset):
133
+ source_cost_rule_id = UNSET
134
+ else:
135
+ source_cost_rule_id = self.source_cost_rule_id
136
+
137
+ cost_resolved_at: None | str | Unset
138
+ if isinstance(self.cost_resolved_at, Unset):
139
+ cost_resolved_at = UNSET
140
+ elif isinstance(self.cost_resolved_at, datetime.datetime):
141
+ cost_resolved_at = self.cost_resolved_at.isoformat()
142
+ else:
143
+ cost_resolved_at = self.cost_resolved_at
144
+
145
+ cost_source_type: None | str | Unset
146
+ if isinstance(self.cost_source_type, Unset):
147
+ cost_source_type = UNSET
148
+ elif isinstance(self.cost_source_type, CostSourceType):
149
+ cost_source_type = self.cost_source_type.value
150
+ else:
151
+ cost_source_type = self.cost_source_type
152
+
116
153
  expected_receipt_date: None | str | Unset
117
154
  if isinstance(self.expected_receipt_date, Unset):
118
155
  expected_receipt_date = UNSET
@@ -200,6 +237,14 @@ class PurchaseOrderLine:
200
237
  field_dict["uom_id"] = uom_id
201
238
  if stock_quantity is not UNSET:
202
239
  field_dict["stock_quantity"] = stock_quantity
240
+ if source_cost_list_id is not UNSET:
241
+ field_dict["source_cost_list_id"] = source_cost_list_id
242
+ if source_cost_rule_id is not UNSET:
243
+ field_dict["source_cost_rule_id"] = source_cost_rule_id
244
+ if cost_resolved_at is not UNSET:
245
+ field_dict["cost_resolved_at"] = cost_resolved_at
246
+ if cost_source_type is not UNSET:
247
+ field_dict["cost_source_type"] = cost_source_type
203
248
  if expected_receipt_date is not UNSET:
204
249
  field_dict["expected_receipt_date"] = expected_receipt_date
205
250
  if so_reference is not UNSET:
@@ -279,6 +324,58 @@ class PurchaseOrderLine:
279
324
 
280
325
  stock_quantity = _parse_stock_quantity(d.pop("stock_quantity", UNSET))
281
326
 
327
+ def _parse_source_cost_list_id(data: object) -> None | str | Unset:
328
+ if data is None:
329
+ return data
330
+ if isinstance(data, Unset):
331
+ return data
332
+ return cast(None | str | Unset, data)
333
+
334
+ source_cost_list_id = _parse_source_cost_list_id(d.pop("source_cost_list_id", UNSET))
335
+
336
+ def _parse_source_cost_rule_id(data: object) -> None | str | Unset:
337
+ if data is None:
338
+ return data
339
+ if isinstance(data, Unset):
340
+ return data
341
+ return cast(None | str | Unset, data)
342
+
343
+ source_cost_rule_id = _parse_source_cost_rule_id(d.pop("source_cost_rule_id", UNSET))
344
+
345
+ def _parse_cost_resolved_at(data: object) -> datetime.datetime | None | Unset:
346
+ if data is None:
347
+ return data
348
+ if isinstance(data, Unset):
349
+ return data
350
+ try:
351
+ if not isinstance(data, str):
352
+ raise TypeError()
353
+ cost_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
354
+
355
+ return cost_resolved_at_type_0
356
+ except (TypeError, ValueError, AttributeError, KeyError):
357
+ pass
358
+ return cast(datetime.datetime | None | Unset, data)
359
+
360
+ cost_resolved_at = _parse_cost_resolved_at(d.pop("cost_resolved_at", UNSET))
361
+
362
+ def _parse_cost_source_type(data: object) -> CostSourceType | None | Unset:
363
+ if data is None:
364
+ return data
365
+ if isinstance(data, Unset):
366
+ return data
367
+ try:
368
+ if not isinstance(data, str):
369
+ raise TypeError()
370
+ cost_source_type_type_0 = CostSourceType(data)
371
+
372
+ return cost_source_type_type_0
373
+ except (TypeError, ValueError, AttributeError, KeyError):
374
+ pass
375
+ return cast(CostSourceType | None | Unset, data)
376
+
377
+ cost_source_type = _parse_cost_source_type(d.pop("cost_source_type", UNSET))
378
+
282
379
  def _parse_expected_receipt_date(data: object) -> datetime.datetime | None | Unset:
283
380
  if data is None:
284
381
  return data
@@ -413,6 +510,10 @@ class PurchaseOrderLine:
413
510
  inventory_item_id=inventory_item_id,
414
511
  uom_id=uom_id,
415
512
  stock_quantity=stock_quantity,
513
+ source_cost_list_id=source_cost_list_id,
514
+ source_cost_rule_id=source_cost_rule_id,
515
+ cost_resolved_at=cost_resolved_at,
516
+ cost_source_type=cost_source_type,
416
517
  expected_receipt_date=expected_receipt_date,
417
518
  so_reference=so_reference,
418
519
  ext_data=ext_data,
@@ -22,11 +22,11 @@ class PurchaseOrderLineRequest:
22
22
  Attributes:
23
23
  description (str):
24
24
  quantity (float):
25
- unit_cost (float):
26
25
  sku (None | str | Unset):
27
26
  inventory_item_id (None | str | Unset):
28
27
  uom_id (None | str | Unset):
29
28
  stock_quantity (float | None | Unset):
29
+ unit_cost (float | None | Unset):
30
30
  quantity_received (float | Unset): Default: 0.0.
31
31
  expected_receipt_date (datetime.datetime | None | Unset):
32
32
  so_reference (None | str | Unset):
@@ -35,11 +35,11 @@ class PurchaseOrderLineRequest:
35
35
 
36
36
  description: str
37
37
  quantity: float
38
- unit_cost: float
39
38
  sku: None | str | Unset = UNSET
40
39
  inventory_item_id: None | str | Unset = UNSET
41
40
  uom_id: None | str | Unset = UNSET
42
41
  stock_quantity: float | None | Unset = UNSET
42
+ unit_cost: float | None | Unset = UNSET
43
43
  quantity_received: float | Unset = 0.0
44
44
  expected_receipt_date: datetime.datetime | None | Unset = UNSET
45
45
  so_reference: None | str | Unset = UNSET
@@ -53,8 +53,6 @@ class PurchaseOrderLineRequest:
53
53
 
54
54
  quantity = self.quantity
55
55
 
56
- unit_cost = self.unit_cost
57
-
58
56
  sku: None | str | Unset
59
57
  if isinstance(self.sku, Unset):
60
58
  sku = UNSET
@@ -79,6 +77,12 @@ class PurchaseOrderLineRequest:
79
77
  else:
80
78
  stock_quantity = self.stock_quantity
81
79
 
80
+ unit_cost: float | None | Unset
81
+ if isinstance(self.unit_cost, Unset):
82
+ unit_cost = UNSET
83
+ else:
84
+ unit_cost = self.unit_cost
85
+
82
86
  quantity_received = self.quantity_received
83
87
 
84
88
  expected_receipt_date: None | str | Unset
@@ -109,7 +113,6 @@ class PurchaseOrderLineRequest:
109
113
  {
110
114
  "description": description,
111
115
  "quantity": quantity,
112
- "unit_cost": unit_cost,
113
116
  }
114
117
  )
115
118
  if sku is not UNSET:
@@ -120,6 +123,8 @@ class PurchaseOrderLineRequest:
120
123
  field_dict["uom_id"] = uom_id
121
124
  if stock_quantity is not UNSET:
122
125
  field_dict["stock_quantity"] = stock_quantity
126
+ if unit_cost is not UNSET:
127
+ field_dict["unit_cost"] = unit_cost
123
128
  if quantity_received is not UNSET:
124
129
  field_dict["quantity_received"] = quantity_received
125
130
  if expected_receipt_date is not UNSET:
@@ -140,8 +145,6 @@ class PurchaseOrderLineRequest:
140
145
 
141
146
  quantity = d.pop("quantity")
142
147
 
143
- unit_cost = d.pop("unit_cost")
144
-
145
148
  def _parse_sku(data: object) -> None | str | Unset:
146
149
  if data is None:
147
150
  return data
@@ -178,6 +181,15 @@ class PurchaseOrderLineRequest:
178
181
 
179
182
  stock_quantity = _parse_stock_quantity(d.pop("stock_quantity", UNSET))
180
183
 
184
+ def _parse_unit_cost(data: object) -> float | None | Unset:
185
+ if data is None:
186
+ return data
187
+ if isinstance(data, Unset):
188
+ return data
189
+ return cast(float | None | Unset, data)
190
+
191
+ unit_cost = _parse_unit_cost(d.pop("unit_cost", UNSET))
192
+
181
193
  quantity_received = d.pop("quantity_received", UNSET)
182
194
 
183
195
  def _parse_expected_receipt_date(data: object) -> datetime.datetime | None | Unset:
@@ -226,11 +238,11 @@ class PurchaseOrderLineRequest:
226
238
  purchase_order_line_request = cls(
227
239
  description=description,
228
240
  quantity=quantity,
229
- unit_cost=unit_cost,
230
241
  sku=sku,
231
242
  inventory_item_id=inventory_item_id,
232
243
  uom_id=uom_id,
233
244
  stock_quantity=stock_quantity,
245
+ unit_cost=unit_cost,
234
246
  quantity_received=quantity_received,
235
247
  expected_receipt_date=expected_receipt_date,
236
248
  so_reference=so_reference,
@@ -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.cost_source_type import CostSourceType
11
+ from ..types import UNSET, Unset
12
+
10
13
  if TYPE_CHECKING:
11
14
  from ..models.alsco_purchase_order_line_ext_data import AlscoPurchaseOrderLineExtData
12
15
 
@@ -34,6 +37,10 @@ class PurchaseOrderLineResponse:
34
37
  ext_data (AlscoPurchaseOrderLineExtData | None):
35
38
  created_at (datetime.datetime):
36
39
  updated_at (datetime.datetime):
40
+ source_cost_list_id (None | str | Unset):
41
+ source_cost_rule_id (None | str | Unset):
42
+ cost_resolved_at (datetime.datetime | None | Unset):
43
+ cost_source_type (CostSourceType | None | Unset):
37
44
  """
38
45
 
39
46
  id: str
@@ -52,6 +59,10 @@ class PurchaseOrderLineResponse:
52
59
  ext_data: AlscoPurchaseOrderLineExtData | None
53
60
  created_at: datetime.datetime
54
61
  updated_at: datetime.datetime
62
+ source_cost_list_id: None | str | Unset = UNSET
63
+ source_cost_rule_id: None | str | Unset = UNSET
64
+ cost_resolved_at: datetime.datetime | None | Unset = UNSET
65
+ cost_source_type: CostSourceType | None | Unset = UNSET
55
66
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
56
67
 
57
68
  def to_dict(self) -> dict[str, Any]:
@@ -102,6 +113,34 @@ class PurchaseOrderLineResponse:
102
113
 
103
114
  updated_at = self.updated_at.isoformat()
104
115
 
116
+ source_cost_list_id: None | str | Unset
117
+ if isinstance(self.source_cost_list_id, Unset):
118
+ source_cost_list_id = UNSET
119
+ else:
120
+ source_cost_list_id = self.source_cost_list_id
121
+
122
+ source_cost_rule_id: None | str | Unset
123
+ if isinstance(self.source_cost_rule_id, Unset):
124
+ source_cost_rule_id = UNSET
125
+ else:
126
+ source_cost_rule_id = self.source_cost_rule_id
127
+
128
+ cost_resolved_at: None | str | Unset
129
+ if isinstance(self.cost_resolved_at, Unset):
130
+ cost_resolved_at = UNSET
131
+ elif isinstance(self.cost_resolved_at, datetime.datetime):
132
+ cost_resolved_at = self.cost_resolved_at.isoformat()
133
+ else:
134
+ cost_resolved_at = self.cost_resolved_at
135
+
136
+ cost_source_type: None | str | Unset
137
+ if isinstance(self.cost_source_type, Unset):
138
+ cost_source_type = UNSET
139
+ elif isinstance(self.cost_source_type, CostSourceType):
140
+ cost_source_type = self.cost_source_type.value
141
+ else:
142
+ cost_source_type = self.cost_source_type
143
+
105
144
  field_dict: dict[str, Any] = {}
106
145
  field_dict.update(self.additional_properties)
107
146
  field_dict.update(
@@ -124,6 +163,14 @@ class PurchaseOrderLineResponse:
124
163
  "updated_at": updated_at,
125
164
  }
126
165
  )
166
+ if source_cost_list_id is not UNSET:
167
+ field_dict["source_cost_list_id"] = source_cost_list_id
168
+ if source_cost_rule_id is not UNSET:
169
+ field_dict["source_cost_rule_id"] = source_cost_rule_id
170
+ if cost_resolved_at is not UNSET:
171
+ field_dict["cost_resolved_at"] = cost_resolved_at
172
+ if cost_source_type is not UNSET:
173
+ field_dict["cost_source_type"] = cost_source_type
127
174
 
128
175
  return field_dict
129
176
 
@@ -215,6 +262,58 @@ class PurchaseOrderLineResponse:
215
262
 
216
263
  updated_at = datetime.datetime.fromisoformat(d.pop("updated_at"))
217
264
 
265
+ def _parse_source_cost_list_id(data: object) -> None | str | Unset:
266
+ if data is None:
267
+ return data
268
+ if isinstance(data, Unset):
269
+ return data
270
+ return cast(None | str | Unset, data)
271
+
272
+ source_cost_list_id = _parse_source_cost_list_id(d.pop("source_cost_list_id", UNSET))
273
+
274
+ def _parse_source_cost_rule_id(data: object) -> None | str | Unset:
275
+ if data is None:
276
+ return data
277
+ if isinstance(data, Unset):
278
+ return data
279
+ return cast(None | str | Unset, data)
280
+
281
+ source_cost_rule_id = _parse_source_cost_rule_id(d.pop("source_cost_rule_id", UNSET))
282
+
283
+ def _parse_cost_resolved_at(data: object) -> datetime.datetime | None | Unset:
284
+ if data is None:
285
+ return data
286
+ if isinstance(data, Unset):
287
+ return data
288
+ try:
289
+ if not isinstance(data, str):
290
+ raise TypeError()
291
+ cost_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
292
+
293
+ return cost_resolved_at_type_0
294
+ except (TypeError, ValueError, AttributeError, KeyError):
295
+ pass
296
+ return cast(datetime.datetime | None | Unset, data)
297
+
298
+ cost_resolved_at = _parse_cost_resolved_at(d.pop("cost_resolved_at", UNSET))
299
+
300
+ def _parse_cost_source_type(data: object) -> CostSourceType | None | Unset:
301
+ if data is None:
302
+ return data
303
+ if isinstance(data, Unset):
304
+ return data
305
+ try:
306
+ if not isinstance(data, str):
307
+ raise TypeError()
308
+ cost_source_type_type_0 = CostSourceType(data)
309
+
310
+ return cost_source_type_type_0
311
+ except (TypeError, ValueError, AttributeError, KeyError):
312
+ pass
313
+ return cast(CostSourceType | None | Unset, data)
314
+
315
+ cost_source_type = _parse_cost_source_type(d.pop("cost_source_type", UNSET))
316
+
218
317
  purchase_order_line_response = cls(
219
318
  id=id,
220
319
  project_id=project_id,
@@ -232,6 +331,10 @@ class PurchaseOrderLineResponse:
232
331
  ext_data=ext_data,
233
332
  created_at=created_at,
234
333
  updated_at=updated_at,
334
+ source_cost_list_id=source_cost_list_id,
335
+ source_cost_rule_id=source_cost_rule_id,
336
+ cost_resolved_at=cost_resolved_at,
337
+ cost_source_type=cost_source_type,
235
338
  )
236
339
 
237
340
  purchase_order_line_response.additional_properties = d
@@ -0,0 +1,19 @@
1
+ from enum import Enum
2
+
3
+
4
+ class PurchasingListItemSourcingFilterOperatorType0(str, Enum):
5
+ CONTAINS = "contains"
6
+ ENDS_WITH = "ends_with"
7
+ EQUALS = "equals"
8
+ GREATER_THAN = "greater_than"
9
+ GREATER_THAN_OR_EQUAL = "greater_than_or_equal"
10
+ IS_EMPTY = "is_empty"
11
+ IS_NOT_EMPTY = "is_not_empty"
12
+ LESS_THAN = "less_than"
13
+ LESS_THAN_OR_EQUAL = "less_than_or_equal"
14
+ NOT_CONTAINS = "not_contains"
15
+ NOT_EQUALS = "not_equals"
16
+ STARTS_WITH = "starts_with"
17
+
18
+ def __str__(self) -> str:
19
+ return str(self.value)
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class PurchasingListItemSourcingSortDirectionType0(str, Enum):
5
+ ASC = "asc"
6
+ DESC = "desc"
7
+
8
+ def __str__(self) -> str:
9
+ return str(self.value)
@@ -6,6 +6,8 @@ from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast
6
6
  from attrs import define as _attrs_define
7
7
  from attrs import field as _attrs_field
8
8
 
9
+ from ..types import UNSET, Unset
10
+
9
11
  if TYPE_CHECKING:
10
12
  from ..models.cost_resolution_source import CostResolutionSource
11
13
 
@@ -21,12 +23,14 @@ class ResolveCostResponse:
21
23
  currency (str):
22
24
  lead_time_days (int | None):
23
25
  source (CostResolutionSource | Literal['no_match']):
26
+ selected_cost_list_id (None | str | Unset):
24
27
  """
25
28
 
26
29
  unit_cost: float | None
27
30
  currency: str
28
31
  lead_time_days: int | None
29
32
  source: CostResolutionSource | Literal["no_match"]
33
+ selected_cost_list_id: None | str | Unset = UNSET
30
34
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
31
35
 
32
36
  def to_dict(self) -> dict[str, Any]:
@@ -46,6 +50,12 @@ class ResolveCostResponse:
46
50
  else:
47
51
  source = self.source
48
52
 
53
+ selected_cost_list_id: None | str | Unset
54
+ if isinstance(self.selected_cost_list_id, Unset):
55
+ selected_cost_list_id = UNSET
56
+ else:
57
+ selected_cost_list_id = self.selected_cost_list_id
58
+
49
59
  field_dict: dict[str, Any] = {}
50
60
  field_dict.update(self.additional_properties)
51
61
  field_dict.update(
@@ -56,6 +66,8 @@ class ResolveCostResponse:
56
66
  "source": source,
57
67
  }
58
68
  )
69
+ if selected_cost_list_id is not UNSET:
70
+ field_dict["selected_cost_list_id"] = selected_cost_list_id
59
71
 
60
72
  return field_dict
61
73
 
@@ -97,11 +109,21 @@ class ResolveCostResponse:
97
109
 
98
110
  source = _parse_source(d.pop("source"))
99
111
 
112
+ def _parse_selected_cost_list_id(data: object) -> None | str | Unset:
113
+ if data is None:
114
+ return data
115
+ if isinstance(data, Unset):
116
+ return data
117
+ return cast(None | str | Unset, data)
118
+
119
+ selected_cost_list_id = _parse_selected_cost_list_id(d.pop("selected_cost_list_id", UNSET))
120
+
100
121
  resolve_cost_response = cls(
101
122
  unit_cost=unit_cost,
102
123
  currency=currency,
103
124
  lead_time_days=lead_time_days,
104
125
  source=source,
126
+ selected_cost_list_id=selected_cost_list_id,
105
127
  )
106
128
 
107
129
  resolve_cost_response.additional_properties = d