bb-integrations-library 3.0.11__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 (217) hide show
  1. bb_integrations_lib/__init__.py +0 -0
  2. bb_integrations_lib/converters/__init__.py +0 -0
  3. bb_integrations_lib/gravitate/__init__.py +0 -0
  4. bb_integrations_lib/gravitate/base_api.py +20 -0
  5. bb_integrations_lib/gravitate/model.py +29 -0
  6. bb_integrations_lib/gravitate/pe_api.py +122 -0
  7. bb_integrations_lib/gravitate/rita_api.py +552 -0
  8. bb_integrations_lib/gravitate/sd_api.py +572 -0
  9. bb_integrations_lib/gravitate/testing/TTE/sd/models.py +1398 -0
  10. bb_integrations_lib/gravitate/testing/TTE/sd/tests/test_models.py +2987 -0
  11. bb_integrations_lib/gravitate/testing/__init__.py +0 -0
  12. bb_integrations_lib/gravitate/testing/builder.py +55 -0
  13. bb_integrations_lib/gravitate/testing/openapi.py +70 -0
  14. bb_integrations_lib/gravitate/testing/util.py +274 -0
  15. bb_integrations_lib/mappers/__init__.py +0 -0
  16. bb_integrations_lib/mappers/prices/__init__.py +0 -0
  17. bb_integrations_lib/mappers/prices/model.py +106 -0
  18. bb_integrations_lib/mappers/prices/price_mapper.py +127 -0
  19. bb_integrations_lib/mappers/prices/protocol.py +20 -0
  20. bb_integrations_lib/mappers/prices/util.py +61 -0
  21. bb_integrations_lib/mappers/rita_mapper.py +523 -0
  22. bb_integrations_lib/models/__init__.py +0 -0
  23. bb_integrations_lib/models/dtn_supplier_invoice.py +487 -0
  24. bb_integrations_lib/models/enums.py +28 -0
  25. bb_integrations_lib/models/pipeline_structs.py +76 -0
  26. bb_integrations_lib/models/probe/probe_event.py +20 -0
  27. bb_integrations_lib/models/probe/request_data.py +431 -0
  28. bb_integrations_lib/models/probe/resume_token.py +7 -0
  29. bb_integrations_lib/models/rita/audit.py +113 -0
  30. bb_integrations_lib/models/rita/auth.py +30 -0
  31. bb_integrations_lib/models/rita/bucket.py +17 -0
  32. bb_integrations_lib/models/rita/config.py +188 -0
  33. bb_integrations_lib/models/rita/constants.py +19 -0
  34. bb_integrations_lib/models/rita/crossroads_entities.py +293 -0
  35. bb_integrations_lib/models/rita/crossroads_mapping.py +428 -0
  36. bb_integrations_lib/models/rita/crossroads_monitoring.py +78 -0
  37. bb_integrations_lib/models/rita/crossroads_network.py +41 -0
  38. bb_integrations_lib/models/rita/crossroads_rules.py +80 -0
  39. bb_integrations_lib/models/rita/email.py +39 -0
  40. bb_integrations_lib/models/rita/issue.py +63 -0
  41. bb_integrations_lib/models/rita/mapping.py +227 -0
  42. bb_integrations_lib/models/rita/probe.py +58 -0
  43. bb_integrations_lib/models/rita/reference_data.py +110 -0
  44. bb_integrations_lib/models/rita/source_system.py +9 -0
  45. bb_integrations_lib/models/rita/workers.py +76 -0
  46. bb_integrations_lib/models/sd/bols_and_drops.py +241 -0
  47. bb_integrations_lib/models/sd/get_order.py +301 -0
  48. bb_integrations_lib/models/sd/orders.py +18 -0
  49. bb_integrations_lib/models/sd_api.py +115 -0
  50. bb_integrations_lib/pipelines/__init__.py +0 -0
  51. bb_integrations_lib/pipelines/parsers/__init__.py +0 -0
  52. bb_integrations_lib/pipelines/parsers/distribution_report/__init__.py +0 -0
  53. bb_integrations_lib/pipelines/parsers/distribution_report/order_by_site_product_parser.py +50 -0
  54. bb_integrations_lib/pipelines/parsers/distribution_report/tank_configs_parser.py +47 -0
  55. bb_integrations_lib/pipelines/parsers/dtn/__init__.py +0 -0
  56. bb_integrations_lib/pipelines/parsers/dtn/dtn_price_parser.py +102 -0
  57. bb_integrations_lib/pipelines/parsers/dtn/model.py +79 -0
  58. bb_integrations_lib/pipelines/parsers/price_engine/__init__.py +0 -0
  59. bb_integrations_lib/pipelines/parsers/price_engine/parse_accessorials_prices_parser.py +67 -0
  60. bb_integrations_lib/pipelines/parsers/price_engine/price_file_upload/__init__.py +0 -0
  61. bb_integrations_lib/pipelines/parsers/price_engine/price_file_upload/price_merge_parser.py +111 -0
  62. bb_integrations_lib/pipelines/parsers/price_engine/price_file_upload/price_sync_parser.py +107 -0
  63. bb_integrations_lib/pipelines/parsers/price_engine/price_file_upload/shared.py +81 -0
  64. bb_integrations_lib/pipelines/parsers/tank_reading_parser.py +155 -0
  65. bb_integrations_lib/pipelines/parsers/tank_sales_parser.py +144 -0
  66. bb_integrations_lib/pipelines/shared/__init__.py +0 -0
  67. bb_integrations_lib/pipelines/shared/allocation_matching.py +227 -0
  68. bb_integrations_lib/pipelines/shared/bol_allocation.py +2793 -0
  69. bb_integrations_lib/pipelines/steps/__init__.py +0 -0
  70. bb_integrations_lib/pipelines/steps/create_accessorials_step.py +80 -0
  71. bb_integrations_lib/pipelines/steps/distribution_report/__init__.py +0 -0
  72. bb_integrations_lib/pipelines/steps/distribution_report/distribution_report_datafram_to_raw_data.py +33 -0
  73. bb_integrations_lib/pipelines/steps/distribution_report/get_model_history_step.py +50 -0
  74. bb_integrations_lib/pipelines/steps/distribution_report/get_order_by_site_product_step.py +62 -0
  75. bb_integrations_lib/pipelines/steps/distribution_report/get_tank_configs_step.py +40 -0
  76. bb_integrations_lib/pipelines/steps/distribution_report/join_distribution_order_dos_step.py +85 -0
  77. bb_integrations_lib/pipelines/steps/distribution_report/upload_distribution_report_datafram_to_big_query.py +47 -0
  78. bb_integrations_lib/pipelines/steps/echo_step.py +14 -0
  79. bb_integrations_lib/pipelines/steps/export_dataframe_to_rawdata_step.py +28 -0
  80. bb_integrations_lib/pipelines/steps/exporting/__init__.py +0 -0
  81. bb_integrations_lib/pipelines/steps/exporting/bbd_export_payroll_file_step.py +107 -0
  82. bb_integrations_lib/pipelines/steps/exporting/bbd_export_readings_step.py +236 -0
  83. bb_integrations_lib/pipelines/steps/exporting/cargas_wholesale_bundle_upload_step.py +33 -0
  84. bb_integrations_lib/pipelines/steps/exporting/dataframe_flat_file_export.py +29 -0
  85. bb_integrations_lib/pipelines/steps/exporting/gcs_bucket_export_file_step.py +34 -0
  86. bb_integrations_lib/pipelines/steps/exporting/keyvu_export_step.py +356 -0
  87. bb_integrations_lib/pipelines/steps/exporting/pe_price_export_step.py +238 -0
  88. bb_integrations_lib/pipelines/steps/exporting/platform_science_order_sync_step.py +500 -0
  89. bb_integrations_lib/pipelines/steps/exporting/save_rawdata_to_disk.py +15 -0
  90. bb_integrations_lib/pipelines/steps/exporting/sftp_export_file_step.py +60 -0
  91. bb_integrations_lib/pipelines/steps/exporting/sftp_export_many_files_step.py +23 -0
  92. bb_integrations_lib/pipelines/steps/exporting/update_exported_orders_table_step.py +64 -0
  93. bb_integrations_lib/pipelines/steps/filter_step.py +22 -0
  94. bb_integrations_lib/pipelines/steps/get_latest_sync_date.py +34 -0
  95. bb_integrations_lib/pipelines/steps/importing/bbd_import_payroll_step.py +30 -0
  96. bb_integrations_lib/pipelines/steps/importing/get_order_numbers_to_export_step.py +138 -0
  97. bb_integrations_lib/pipelines/steps/importing/load_file_to_dataframe_step.py +46 -0
  98. bb_integrations_lib/pipelines/steps/importing/load_imap_attachment_step.py +172 -0
  99. bb_integrations_lib/pipelines/steps/importing/pe_bulk_sync_price_structure_step.py +68 -0
  100. bb_integrations_lib/pipelines/steps/importing/pe_price_merge_step.py +86 -0
  101. bb_integrations_lib/pipelines/steps/importing/sftp_file_config_step.py +124 -0
  102. bb_integrations_lib/pipelines/steps/importing/test_exact_file_match.py +57 -0
  103. bb_integrations_lib/pipelines/steps/null_step.py +15 -0
  104. bb_integrations_lib/pipelines/steps/pe_integration_job_step.py +32 -0
  105. bb_integrations_lib/pipelines/steps/processing/__init__.py +0 -0
  106. bb_integrations_lib/pipelines/steps/processing/archive_gcs_step.py +76 -0
  107. bb_integrations_lib/pipelines/steps/processing/archive_sftp_step.py +48 -0
  108. bb_integrations_lib/pipelines/steps/processing/bbd_format_tank_readings_step.py +492 -0
  109. bb_integrations_lib/pipelines/steps/processing/bbd_upload_prices_step.py +54 -0
  110. bb_integrations_lib/pipelines/steps/processing/bbd_upload_tank_sales_step.py +124 -0
  111. bb_integrations_lib/pipelines/steps/processing/bbd_upload_tankreading_step.py +80 -0
  112. bb_integrations_lib/pipelines/steps/processing/convert_bbd_order_to_cargas_step.py +226 -0
  113. bb_integrations_lib/pipelines/steps/processing/delete_sftp_step.py +33 -0
  114. bb_integrations_lib/pipelines/steps/processing/dtn/__init__.py +2 -0
  115. bb_integrations_lib/pipelines/steps/processing/dtn/convert_dtn_invoice_to_sd_model.py +145 -0
  116. bb_integrations_lib/pipelines/steps/processing/dtn/parse_dtn_invoice_step.py +38 -0
  117. bb_integrations_lib/pipelines/steps/processing/file_config_parser_step.py +720 -0
  118. bb_integrations_lib/pipelines/steps/processing/file_config_parser_step_v2.py +418 -0
  119. bb_integrations_lib/pipelines/steps/processing/get_sd_price_price_request.py +105 -0
  120. bb_integrations_lib/pipelines/steps/processing/keyvu_upload_deliveryplan_step.py +39 -0
  121. bb_integrations_lib/pipelines/steps/processing/mark_orders_exported_in_bbd_step.py +185 -0
  122. bb_integrations_lib/pipelines/steps/processing/pe_price_rows_processing_step.py +174 -0
  123. bb_integrations_lib/pipelines/steps/processing/send_process_report_step.py +47 -0
  124. bb_integrations_lib/pipelines/steps/processing/sftp_renamer_step.py +61 -0
  125. bb_integrations_lib/pipelines/steps/processing/tank_reading_touchup_steps.py +75 -0
  126. bb_integrations_lib/pipelines/steps/processing/upload_supplier_invoice_step.py +16 -0
  127. bb_integrations_lib/pipelines/steps/send_attached_in_rita_email_step.py +44 -0
  128. bb_integrations_lib/pipelines/steps/send_rita_email_step.py +34 -0
  129. bb_integrations_lib/pipelines/steps/sleep_step.py +24 -0
  130. bb_integrations_lib/pipelines/wrappers/__init__.py +0 -0
  131. bb_integrations_lib/pipelines/wrappers/accessorials_transformation.py +104 -0
  132. bb_integrations_lib/pipelines/wrappers/distribution_report.py +191 -0
  133. bb_integrations_lib/pipelines/wrappers/export_tank_readings.py +237 -0
  134. bb_integrations_lib/pipelines/wrappers/import_tank_readings.py +192 -0
  135. bb_integrations_lib/pipelines/wrappers/wrapper.py +81 -0
  136. bb_integrations_lib/protocols/__init__.py +0 -0
  137. bb_integrations_lib/protocols/flat_file.py +210 -0
  138. bb_integrations_lib/protocols/gravitate_client.py +104 -0
  139. bb_integrations_lib/protocols/pipelines.py +697 -0
  140. bb_integrations_lib/provider/__init__.py +0 -0
  141. bb_integrations_lib/provider/api/__init__.py +0 -0
  142. bb_integrations_lib/provider/api/cargas/__init__.py +0 -0
  143. bb_integrations_lib/provider/api/cargas/client.py +43 -0
  144. bb_integrations_lib/provider/api/cargas/model.py +49 -0
  145. bb_integrations_lib/provider/api/cargas/protocol.py +23 -0
  146. bb_integrations_lib/provider/api/dtn/__init__.py +0 -0
  147. bb_integrations_lib/provider/api/dtn/client.py +128 -0
  148. bb_integrations_lib/provider/api/dtn/protocol.py +9 -0
  149. bb_integrations_lib/provider/api/keyvu/__init__.py +0 -0
  150. bb_integrations_lib/provider/api/keyvu/client.py +30 -0
  151. bb_integrations_lib/provider/api/keyvu/model.py +149 -0
  152. bb_integrations_lib/provider/api/macropoint/__init__.py +0 -0
  153. bb_integrations_lib/provider/api/macropoint/client.py +28 -0
  154. bb_integrations_lib/provider/api/macropoint/model.py +40 -0
  155. bb_integrations_lib/provider/api/pc_miler/__init__.py +0 -0
  156. bb_integrations_lib/provider/api/pc_miler/client.py +130 -0
  157. bb_integrations_lib/provider/api/pc_miler/model.py +6 -0
  158. bb_integrations_lib/provider/api/pc_miler/web_services_apis.py +131 -0
  159. bb_integrations_lib/provider/api/platform_science/__init__.py +0 -0
  160. bb_integrations_lib/provider/api/platform_science/client.py +147 -0
  161. bb_integrations_lib/provider/api/platform_science/model.py +82 -0
  162. bb_integrations_lib/provider/api/quicktrip/__init__.py +0 -0
  163. bb_integrations_lib/provider/api/quicktrip/client.py +52 -0
  164. bb_integrations_lib/provider/api/telapoint/__init__.py +0 -0
  165. bb_integrations_lib/provider/api/telapoint/client.py +68 -0
  166. bb_integrations_lib/provider/api/telapoint/model.py +178 -0
  167. bb_integrations_lib/provider/api/warren_rogers/__init__.py +0 -0
  168. bb_integrations_lib/provider/api/warren_rogers/client.py +207 -0
  169. bb_integrations_lib/provider/aws/__init__.py +0 -0
  170. bb_integrations_lib/provider/aws/s3/__init__.py +0 -0
  171. bb_integrations_lib/provider/aws/s3/client.py +126 -0
  172. bb_integrations_lib/provider/ftp/__init__.py +0 -0
  173. bb_integrations_lib/provider/ftp/client.py +140 -0
  174. bb_integrations_lib/provider/ftp/interface.py +273 -0
  175. bb_integrations_lib/provider/ftp/model.py +76 -0
  176. bb_integrations_lib/provider/imap/__init__.py +0 -0
  177. bb_integrations_lib/provider/imap/client.py +228 -0
  178. bb_integrations_lib/provider/imap/model.py +3 -0
  179. bb_integrations_lib/provider/sqlserver/__init__.py +0 -0
  180. bb_integrations_lib/provider/sqlserver/client.py +106 -0
  181. bb_integrations_lib/secrets/__init__.py +4 -0
  182. bb_integrations_lib/secrets/adapters.py +98 -0
  183. bb_integrations_lib/secrets/credential_models.py +222 -0
  184. bb_integrations_lib/secrets/factory.py +85 -0
  185. bb_integrations_lib/secrets/providers.py +160 -0
  186. bb_integrations_lib/shared/__init__.py +0 -0
  187. bb_integrations_lib/shared/exceptions.py +25 -0
  188. bb_integrations_lib/shared/model.py +1039 -0
  189. bb_integrations_lib/shared/shared_enums.py +510 -0
  190. bb_integrations_lib/storage/README.md +236 -0
  191. bb_integrations_lib/storage/__init__.py +0 -0
  192. bb_integrations_lib/storage/aws/__init__.py +0 -0
  193. bb_integrations_lib/storage/aws/s3.py +8 -0
  194. bb_integrations_lib/storage/defaults.py +72 -0
  195. bb_integrations_lib/storage/gcs/__init__.py +0 -0
  196. bb_integrations_lib/storage/gcs/client.py +8 -0
  197. bb_integrations_lib/storage/gcsmanager/__init__.py +0 -0
  198. bb_integrations_lib/storage/gcsmanager/client.py +8 -0
  199. bb_integrations_lib/storage/setup.py +29 -0
  200. bb_integrations_lib/util/__init__.py +0 -0
  201. bb_integrations_lib/util/cache/__init__.py +0 -0
  202. bb_integrations_lib/util/cache/custom_ttl_cache.py +75 -0
  203. bb_integrations_lib/util/cache/protocol.py +9 -0
  204. bb_integrations_lib/util/config/__init__.py +0 -0
  205. bb_integrations_lib/util/config/manager.py +391 -0
  206. bb_integrations_lib/util/config/model.py +41 -0
  207. bb_integrations_lib/util/exception_logger/__init__.py +0 -0
  208. bb_integrations_lib/util/exception_logger/exception_logger.py +146 -0
  209. bb_integrations_lib/util/exception_logger/test.py +114 -0
  210. bb_integrations_lib/util/utils.py +364 -0
  211. bb_integrations_lib/workers/__init__.py +0 -0
  212. bb_integrations_lib/workers/groups.py +13 -0
  213. bb_integrations_lib/workers/rpc_worker.py +50 -0
  214. bb_integrations_lib/workers/topics.py +20 -0
  215. bb_integrations_library-3.0.11.dist-info/METADATA +59 -0
  216. bb_integrations_library-3.0.11.dist-info/RECORD +217 -0
  217. bb_integrations_library-3.0.11.dist-info/WHEEL +4 -0
@@ -0,0 +1,1398 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: temp_openapi.json
3
+ # timestamp: 2025-07-09T01:08:11+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import datetime
8
+ from enum import Enum
9
+ from typing import Any, Dict, List, Optional, Union
10
+
11
+ from pydantic import BaseModel, ConfigDict, EmailStr, Field, RootModel, conint, constr
12
+
13
+
14
+ class BolImagesRequest(BaseModel):
15
+ order_ids: Optional[List[str]] = Field([], title='Order Ids')
16
+ order_numbers: Optional[List[str]] = Field([], title='Order Numbers')
17
+
18
+
19
+ class DeliveryTicketById(BaseModel):
20
+ order_id: str = Field(..., title='Order Id')
21
+ store_id: str = Field(..., title='Store Id')
22
+
23
+
24
+ class DeliveryTicketByNumber(BaseModel):
25
+ order_number: int = Field(..., title='Order Number')
26
+ store_number: str = Field(..., title='Store Number')
27
+
28
+
29
+ class DriverCredentialUpsertRequest(BaseModel):
30
+ driver_id: str = Field(..., title='Driver Id')
31
+ credential_id: str = Field(..., title='Credential Id')
32
+ certification_date: Optional[datetime] = Field(None, title='Certification Date')
33
+ expiration_date: Optional[datetime] = Field(None, title='Expiration Date')
34
+
35
+
36
+ class Type(Enum):
37
+ regular = 'regular'
38
+ order_request = 'order_request'
39
+ backhaul = 'backhaul'
40
+
41
+
42
+ class IntegrationFormResponseOverviewReq(BaseModel):
43
+ form_name: Optional[str] = Field(None, title='Form Name')
44
+ from_date: datetime = Field(..., title='From Date')
45
+ to_date: datetime = Field(..., title='To Date')
46
+ market: Optional[str] = Field(None, title='Market')
47
+
48
+
49
+ class OptimalSupplyReportRequest(BaseModel):
50
+ order_numbers: Optional[List[int]] = Field(None, title='Order Numbers')
51
+ order_ids: Optional[List[str]] = Field(None, title='Order Ids')
52
+ order_date_start: Optional[datetime] = Field(None, title='Order Date Start')
53
+ order_date_end: Optional[datetime] = Field(None, title='Order Date End')
54
+ movement_updated_start: Optional[datetime] = Field(
55
+ None, title='Movement Updated Start'
56
+ )
57
+ movement_updated_end: Optional[datetime] = Field(None, title='Movement Updated End')
58
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
59
+
60
+
61
+ class OptimalSupplyReportRow(BaseModel):
62
+ order_number: int = Field(..., title='Order Number')
63
+ order_id: str = Field(..., title='Order Id')
64
+ site_number: str = Field(..., title='Site Number')
65
+ actual_component_product: str = Field(..., title='Actual Component Product')
66
+ actual_component_product_id: str = Field(..., title='Actual Component Product Id')
67
+ optimal_component_product: str = Field(..., title='Optimal Component Product')
68
+ optimal_component_product_id: str = Field(..., title='Optimal Component Product Id')
69
+ actual_terminal: str = Field(..., title='Actual Terminal')
70
+ actual_terminal_id: str = Field(..., title='Actual Terminal Id')
71
+ optimal_terminal: str = Field(..., title='Optimal Terminal')
72
+ optimal_terminal_id: str = Field(..., title='Optimal Terminal Id')
73
+ actual_supplier: str = Field(..., title='Actual Supplier')
74
+ actual_supplier_id: str = Field(..., title='Actual Supplier Id')
75
+ optimal_supplier: str = Field(..., title='Optimal Supplier')
76
+ optimal_supplier_id: str = Field(..., title='Optimal Supplier Id')
77
+ actual_price_type: str = Field(..., title='Actual Price Type')
78
+ optimal_price_type: str = Field(..., title='Optimal Price Type')
79
+ actual_contract: Optional[str] = Field(None, title='Actual Contract')
80
+ optimal_contract: Optional[str] = Field(None, title='Optimal Contract')
81
+ actual_curve_id: str = Field(..., title='Actual Curve Id')
82
+ optimal_curve_id: str = Field(..., title='Optimal Curve Id')
83
+ actual_price_id: str = Field(..., title='Actual Price Id')
84
+ optimal_price_id: str = Field(..., title='Optimal Price Id')
85
+ actual_loaded_miles: float = Field(..., title='Actual Loaded Miles')
86
+ optimal_loaded_miles: float = Field(..., title='Optimal Loaded Miles')
87
+ actual_product_price: float = Field(..., title='Actual Product Price')
88
+ optimal_product_price: float = Field(..., title='Optimal Product Price')
89
+ actual_freight_rate: float = Field(..., title='Actual Freight Rate')
90
+ optimal_freight_rate: float = Field(..., title='Optimal Freight Rate')
91
+ actual_total_price: float = Field(..., title='Actual Total Price')
92
+ optimal_total_price: float = Field(..., title='Optimal Total Price')
93
+ total_price_delta: float = Field(..., title='Total Price Delta')
94
+ actual_volume: float = Field(..., title='Actual Volume')
95
+ optimal_volume: float = Field(..., title='Optimal Volume')
96
+ last_change_date: datetime = Field(..., title='Last Change Date')
97
+ last_updated_date: datetime = Field(..., title='Last Updated Date')
98
+ reason_code: Optional[str] = Field(None, title='Reason Code')
99
+
100
+
101
+ class PydanticObjectId(
102
+ RootModel[constr(pattern=r'^[0-9a-f]{24}$', min_length=24, max_length=24)]
103
+ ):
104
+ root: constr(pattern=r'^[0-9a-f]{24}$', min_length=24, max_length=24) = Field(
105
+ ..., examples=['5eb7cf5a86d9755df3a6c593']
106
+ )
107
+
108
+
109
+ class RouteUpsertReq(BaseModel):
110
+ origin_name: str = Field(..., title='Origin Name')
111
+ destination_name: str = Field(..., title='Destination Name')
112
+ api_distance_miles: Optional[float] = Field(None, title='Api Distance Miles')
113
+ api_travel_time_seconds: Optional[float] = Field(
114
+ None, title='Api Travel Time Seconds'
115
+ )
116
+ override_travel_time_seconds: Optional[int] = Field(
117
+ None, title='Override Travel Time Seconds'
118
+ )
119
+ override_distance_miles: Optional[float] = Field(
120
+ None, title='Override Distance Miles'
121
+ )
122
+ override_payroll_miles: Optional[int] = Field(None, title='Override Payroll Miles')
123
+
124
+
125
+ class SalesAdjustedDeliveryUpsertReq(BaseModel):
126
+ source: str = Field(..., title='Source')
127
+ store_id: str = Field(..., title='Store Id')
128
+ tank_id: str = Field(..., title='Tank Id')
129
+ product_id: str = Field(..., title='Product Id')
130
+ volume: float = Field(..., title='Volume')
131
+ date: datetime = Field(..., title='Date')
132
+
133
+
134
+ class SurchargeUpdateReq(BaseModel):
135
+ id: PydanticObjectId
136
+ effective_from: datetime = Field(..., title='Effective From')
137
+ effective_to: Optional[datetime] = Field(None, title='Effective To')
138
+ surcharge: Optional[float] = Field(None, title='Surcharge')
139
+
140
+
141
+ class TractorView(BaseModel):
142
+ id: str = Field(..., title='Id')
143
+ tractor_number: str = Field(..., title='Tractor Number')
144
+ depot: Optional[str] = Field(None, title='Depot')
145
+ vin: Optional[str] = Field(None, title='Vin')
146
+ model: Optional[str] = Field(None, title='Model')
147
+ make: Optional[str] = Field(None, title='Make')
148
+ year: Optional[int] = Field(None, title='Year')
149
+ weight: Optional[int] = Field(None, title='Weight')
150
+ next_maintenance: Optional[datetime] = Field(None, title='Next Maintenance')
151
+ next_tractor_maintenance_required: Optional[bool] = Field(
152
+ None, title='Next Tractor Maintenance Required'
153
+ )
154
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
155
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
156
+
157
+
158
+ class TrailerConfigMatrixView(BaseModel):
159
+ id: str = Field(..., title='Id')
160
+ importance: int = Field(..., title='Importance')
161
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
162
+ code: Optional[str] = Field(None, title='Code')
163
+ values: Optional[List[float]] = Field([], title='Values')
164
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
165
+
166
+
167
+ class TrailerView(BaseModel):
168
+ id: str = Field(..., title='Id')
169
+ trailer_number: str = Field(..., title='Trailer Number')
170
+ configuration: Optional[str] = Field(None, title='Configuration')
171
+ depot: Optional[str] = Field(None, title='Depot')
172
+ make: Optional[str] = Field(None, title='Make')
173
+ model: Optional[str] = Field(None, title='Model')
174
+ weight: Optional[float] = Field(None, title='Weight')
175
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
176
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
177
+
178
+
179
+ class UpsertTractorReq(BaseModel):
180
+ id: Optional[str] = Field(None, title='Id')
181
+ tractor_number: Optional[str] = Field(None, title='Tractor Number')
182
+ depot: Optional[str] = Field(None, title='Depot')
183
+ vin: Optional[str] = Field(None, title='Vin')
184
+ make: Optional[str] = Field(None, title='Make')
185
+ model: Optional[str] = Field(None, title='Model')
186
+ year: Optional[int] = Field(None, title='Year')
187
+ weight: Optional[int] = Field(None, title='Weight')
188
+ next_maintenance: Optional[datetime] = Field(None, title='Next Maintenance')
189
+ next_tractor_maintenance_required: Optional[bool] = Field(
190
+ None, title='Next Tractor Maintenance Required'
191
+ )
192
+ source_id: Optional[str] = Field(None, title='Source Id')
193
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
194
+
195
+
196
+ class UpsertTractorResp(BaseModel):
197
+ created: Optional[int] = Field(0, title='Created')
198
+ updated: Optional[int] = Field(0, title='Updated')
199
+ errors: List[str] = Field(..., title='Errors')
200
+
201
+
202
+ class UpsertTrailerReq(BaseModel):
203
+ id: Optional[str] = Field(None, title='Id')
204
+ trailer_number: Optional[str] = Field(None, title='Trailer Number')
205
+ configuration: Optional[str] = Field(None, title='Configuration')
206
+ depot: Optional[str] = Field(None, title='Depot')
207
+ make: Optional[str] = Field(None, title='Make')
208
+ model: Optional[str] = Field(None, title='Model')
209
+ weight: Optional[float] = Field(None, title='Weight')
210
+ source_id: Optional[str] = Field(None, title='Source Id')
211
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
212
+
213
+
214
+ class UpsertTrailerResp(BaseModel):
215
+ created: Optional[int] = Field(0, title='Created')
216
+ updated: Optional[int] = Field(0, title='Updated')
217
+ errors: List[str] = Field(..., title='Errors')
218
+
219
+
220
+ class AllocatedBolResponse(RootModel[Any]):
221
+ root: Any
222
+
223
+
224
+ class BillableDateType(RootModel[Any]):
225
+ root: Any
226
+
227
+
228
+ class BillableVolumeType(RootModel[Any]):
229
+ root: Any
230
+
231
+
232
+ class BlendView(RootModel[Any]):
233
+ root: Any
234
+
235
+
236
+ class BolImageResponse(RootModel[Any]):
237
+ root: Any
238
+
239
+
240
+ class Card(RootModel[Any]):
241
+ root: Any
242
+
243
+
244
+ class ContractVolumeRequest(RootModel[Any]):
245
+ root: Any
246
+
247
+
248
+ class Coordinate(RootModel[Any]):
249
+ root: Any
250
+
251
+
252
+ class Counterparty(RootModel[Any]):
253
+ root: Any
254
+
255
+
256
+ class DateWindow(RootModel[Any]):
257
+ root: Any
258
+
259
+
260
+ class DaysOfWeek(RootModel[Any]):
261
+ root: Any
262
+
263
+
264
+ class DeliveryRequestStatus(RootModel[Any]):
265
+ root: Any
266
+
267
+
268
+ class DeliveryWindow(RootModel[Any]):
269
+ root: Any
270
+
271
+
272
+ class DeliveryWindowDefault(RootModel[Any]):
273
+ root: Any
274
+
275
+
276
+ class DriverCredentialView(RootModel[Any]):
277
+ root: Any
278
+
279
+
280
+ class DriverTerminalCardView(RootModel[Any]):
281
+ root: Any
282
+
283
+
284
+ class DropCreateRequest(RootModel[Any]):
285
+ root: Any
286
+
287
+
288
+ class DropWorkflow(RootModel[Any]):
289
+ root: Any
290
+
291
+
292
+ class Dwell(RootModel[Any]):
293
+ root: Any
294
+
295
+
296
+ class EBolDetailRequest(RootModel[Any]):
297
+ root: Any
298
+
299
+
300
+ class ExternalBOLDetailRequest(RootModel[Any]):
301
+ root: Any
302
+
303
+
304
+ class FormFieldResponse(RootModel[Any]):
305
+ root: Any
306
+
307
+
308
+ class FreightCost(RootModel[Any]):
309
+ root: Any
310
+
311
+
312
+ class FreightItem(RootModel[Any]):
313
+ root: Any
314
+
315
+
316
+ class FreightTransactionOutput(RootModel[Any]):
317
+ root: Any
318
+
319
+
320
+ class FreightTransactionDetailOutput(RootModel[Any]):
321
+ root: Any
322
+
323
+
324
+ class FreightTransactionRowOutput(RootModel[Any]):
325
+ root: Any
326
+
327
+
328
+ class InCabSupplyOptionMode(RootModel[Any]):
329
+ root: Any
330
+
331
+
332
+ class InCabTripMode(RootModel[Any]):
333
+ root: Any
334
+
335
+
336
+ class InNetworkSupplyZone(RootModel[Any]):
337
+ root: Any
338
+
339
+
340
+ class InNetworkTerminal(RootModel[Any]):
341
+ root: Any
342
+
343
+
344
+ class InvoiceDynamicStatus(RootModel[Any]):
345
+ root: Any
346
+
347
+
348
+ class InvoiceStaticStatus(RootModel[Any]):
349
+ root: Any
350
+
351
+
352
+ class InvoiceType(RootModel[Any]):
353
+ root: Any
354
+
355
+
356
+ class Key(RootModel[Any]):
357
+ root: Any
358
+
359
+
360
+ class LocationResponse(RootModel[Any]):
361
+ root: Any
362
+
363
+
364
+ class MonitoringStrategy(RootModel[Any]):
365
+ root: Any
366
+
367
+
368
+ class NOSupplyOptionResponse(RootModel[Any]):
369
+ root: Any
370
+
371
+
372
+ class OrderCreateStatus(RootModel[Any]):
373
+ root: Any
374
+
375
+
376
+ class OrderDriver(RootModel[Any]):
377
+ root: Any
378
+
379
+
380
+ class OrderReqNotificationStates(RootModel[Any]):
381
+ root: Any
382
+
383
+
384
+ class OrderResponse(RootModel[Any]):
385
+ root: Any
386
+
387
+
388
+ class OrderState(RootModel[Any]):
389
+ root: Any
390
+
391
+
392
+ class OrderType(RootModel[Any]):
393
+ root: Any
394
+
395
+
396
+ class PayrollExportDetailModel(RootModel[Any]):
397
+ root: Any
398
+
399
+
400
+ class PriceType(RootModel[Any]):
401
+ root: Any
402
+
403
+
404
+ class ProductGroups(RootModel[Any]):
405
+ root: Any
406
+
407
+
408
+ class ProductIDName(RootModel[Any]):
409
+ root: Any
410
+
411
+
412
+ class RateBookType(RootModel[Any]):
413
+ root: Any
414
+
415
+
416
+ class SaveDropDetail(RootModel[Any]):
417
+ root: Any
418
+
419
+
420
+ class SaveDropMode(RootModel[Any]):
421
+ root: Any
422
+
423
+
424
+ class Shift(RootModel[Any]):
425
+ root: Any
426
+
427
+
428
+ class SourceMap(RootModel[Any]):
429
+ root: Any
430
+
431
+
432
+ class SourcingStrategy(RootModel[Any]):
433
+ root: Any
434
+
435
+
436
+ class StatusUpdate(RootModel[Any]):
437
+ root: Any
438
+
439
+
440
+ class StoreStatus(RootModel[Any]):
441
+ root: Any
442
+
443
+
444
+ class StoreTank(RootModel[Any]):
445
+ root: Any
446
+
447
+
448
+ class SupplyPriceUpdateResponse(RootModel[Any]):
449
+ root: Any
450
+
451
+
452
+ class SurchargeType(RootModel[Any]):
453
+ root: Any
454
+
455
+
456
+ class TankLidEnum(RootModel[Any]):
457
+ root: Any
458
+
459
+
460
+ class TerminalType(RootModel[Any]):
461
+ root: Any
462
+
463
+
464
+ class TimezoneEnum(RootModel[Any]):
465
+ root: Any
466
+
467
+
468
+ class UnavailableHours(RootModel[Any]):
469
+ root: Any
470
+
471
+
472
+ class UnavailableHoursRequest(RootModel[Any]):
473
+ root: Any
474
+
475
+
476
+ class ValidationError(RootModel[Any]):
477
+ root: Any
478
+
479
+
480
+ class VolumeDistributionRequest(RootModel[Any]):
481
+ root: Any
482
+
483
+
484
+ class WaterReadingRequirement(RootModel[Any]):
485
+ root: Any
486
+
487
+
488
+ class ForecastApiCreateRequest(RootModel[Any]):
489
+ root: Any
490
+
491
+
492
+ class MarketSchemaSectorView(RootModel[Any]):
493
+ root: Any
494
+
495
+
496
+ class OrderSchemaBolResponse(RootModel[Any]):
497
+ root: Any
498
+
499
+
500
+ class OrderSchemaDropResponse(RootModel[Any]):
501
+ root: Any
502
+
503
+
504
+ class BolAndDropResponse(BaseModel):
505
+ order_number: Optional[str] = Field(None, title='Order Number')
506
+ order_id: Optional[str] = Field(None, title='Order Id')
507
+ po: Optional[str] = Field(None, title='Po')
508
+ carrier_id: Optional[str] = Field(None, title='Carrier Id')
509
+ last_movement_update: Optional[datetime] = Field(None, title='Last Movement Update')
510
+ order_date: Optional[datetime] = Field(None, title='Order Date')
511
+ status: Optional[str] = Field(None, title='Status')
512
+ type: Optional[str] = Field(None, title='Type')
513
+ drops: Optional[List[OrderSchemaDropResponse]] = Field(None, title='Drops')
514
+ bols: Optional[List[OrderSchemaBolResponse]] = Field(None, title='Bols')
515
+ costs: Optional[List[FreightCost]] = Field(None, title='Costs')
516
+ validation_bypass_on: Optional[datetime] = Field(None, title='Validation Bypass On')
517
+ has_additives: Optional[bool] = Field(False, title='Has Additives')
518
+ estimated_freight: Optional[FreightTransactionOutput] = None
519
+ actual_freight: Optional[FreightTransactionOutput] = None
520
+ allocated_bol_error: Optional[str] = Field(None, title='Allocated Bol Error')
521
+ allocated_bol_issue: Optional[str] = Field(None, title='Allocated Bol Issue')
522
+ allocated_bols: Optional[List[AllocatedBolResponse]] = Field(
523
+ None, title='Allocated Bols'
524
+ )
525
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
526
+ reference_order_number: Optional[str] = Field(None, title='Reference Order Number')
527
+
528
+
529
+ class BolImagesResponse(BaseModel):
530
+ order_id: Optional[str] = Field(None, title='Order Id')
531
+ bol_id: Optional[str] = Field(None, title='Bol Id')
532
+ bol_number: Optional[str] = Field(None, title='Bol Number')
533
+ photos: Optional[List[BolImageResponse]] = Field(None, title='Photos')
534
+
535
+
536
+ class BolsAndDropsRequest(BaseModel):
537
+ order_date_start: Optional[datetime] = Field(None, title='Order Date Start')
538
+ order_date_end: Optional[datetime] = Field(None, title='Order Date End')
539
+ movement_updated_start: Optional[datetime] = Field(
540
+ None, title='Movement Updated Start'
541
+ )
542
+ movement_updated_end: Optional[datetime] = Field(None, title='Movement Updated End')
543
+ order_ids: Optional[List[str]] = Field([], title='Order Ids')
544
+ order_numbers: Optional[List[int]] = Field([], title='Order Numbers')
545
+ order_states: Optional[List[OrderState]] = Field([], title='Order States')
546
+ order_types: Optional[List[OrderType]] = Field([], title='Order Types')
547
+ include_invalid: Optional[bool] = Field(False, title='Include Invalid')
548
+ include_bol_allocation: Optional[bool] = Field(
549
+ False, title='Include Bol Allocation'
550
+ )
551
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
552
+ reference_order_numbers: Optional[List[str]] = Field(
553
+ [], title='Reference Order Numbers'
554
+ )
555
+
556
+
557
+ class CounterpartyView(BaseModel):
558
+ id: str = Field(..., title='Id')
559
+ name: str = Field(..., title='Name')
560
+ goid: Optional[str] = Field(None, title='Goid')
561
+ scac: Optional[str] = Field(None, title='Scac')
562
+ types: Optional[List[str]] = Field(None, title='Types')
563
+ carrier_type: Optional[str] = Field(None, title='Carrier Type')
564
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
565
+ source_id: Optional[str] = Field(None, title='Source Id')
566
+ source_system: Optional[str] = Field(None, title='Source System')
567
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
568
+ emails: Optional[List[str]] = Field(None, title='Emails')
569
+ sourcing_strategy: Optional[SourcingStrategy] = None
570
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
571
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
572
+ allow_short_loads: Optional[bool] = Field(False, title='Allow Short Loads')
573
+ order_notification_preferences: Optional[List[OrderReqNotificationStates]] = Field(
574
+ [], title='Order Notification Preferences'
575
+ )
576
+ supply_map: Optional[List[SourceMap]] = Field([], title='Supply Map')
577
+
578
+
579
+ class CreateGroupRequest(BaseModel):
580
+ source_id: Optional[str] = Field(None, title='Source Id')
581
+ name: str = Field(..., title='Name')
582
+ keys: List[Key] = Field(..., title='Keys')
583
+ as_of: datetime = Field(..., title='As Of')
584
+ min: Optional[float] = Field(None, title='Min')
585
+ max: Optional[float] = Field(None, title='Max')
586
+ start_hour: Optional[int] = Field(None, title='Start Hour')
587
+ volume_distributions: Optional[List[VolumeDistributionRequest]] = Field(
588
+ [], title='Volume Distributions'
589
+ )
590
+ contract_volumes: Optional[List[ContractVolumeRequest]] = Field(
591
+ [], title='Contract Volumes'
592
+ )
593
+ daily_percent: Optional[float] = Field(None, title='Daily Percent')
594
+ weekly_percent: Optional[float] = Field(None, title='Weekly Percent')
595
+ monthly_percent: Optional[float] = Field(None, title='Monthly Percent')
596
+ contract_start: Optional[datetime] = Field(None, title='Contract Start')
597
+ contract_end: Optional[datetime] = Field(None, title='Contract End')
598
+ week_start_day: Optional[DaysOfWeek] = 'monday'
599
+
600
+
601
+ class DriverView(BaseModel):
602
+ id: str = Field(..., title='Id')
603
+ name: Optional[str] = Field('', title='Name')
604
+ username: Optional[str] = Field('', title='Username')
605
+ depot_id: Optional[str] = Field(None, title='Depot Id')
606
+ depot_name: Optional[str] = Field(None, title='Depot Name')
607
+ in_cab_trip_mode: Optional[InCabTripMode] = Field(
608
+ default_factory=lambda: InCabTripMode.model_validate('all')
609
+ )
610
+ in_cab_supply_option_mode: Optional[InCabSupplyOptionMode] = Field(
611
+ default_factory=lambda: InCabSupplyOptionMode.model_validate('disabled')
612
+ )
613
+ trailer_number: Optional[str] = Field(None, title='Trailer Number')
614
+ tractor_number: Optional[str] = Field(None, title='Tractor Number')
615
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
616
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
617
+ cards: Optional[List[DriverTerminalCardView]] = Field([], title='Cards')
618
+ credentials: Optional[List[DriverCredentialView]] = Field([], title='Credentials')
619
+
620
+
621
+ class EBolRequest(BaseModel):
622
+ source_system: str = Field(..., title='Source System')
623
+ bol_number: str = Field(..., title='Bol Number')
624
+ date: datetime = Field(..., title='Date')
625
+ terminal_id: str = Field(..., title='Terminal Id')
626
+ supplier_id: str = Field(..., title='Supplier Id')
627
+ details: List[EBolDetailRequest] = Field(..., title='Details')
628
+
629
+
630
+ class ExternalBOLRequest(BaseModel):
631
+ order_id: str = Field(..., title='Order Id')
632
+ bol_number: str = Field(..., title='Bol Number')
633
+ terminal_id: str = Field(..., title='Terminal Id')
634
+ bol_date: datetime = Field(..., title='Bol Date')
635
+ details: List[ExternalBOLDetailRequest] = Field(..., title='Details')
636
+
637
+
638
+ class FormResponseRow(BaseModel):
639
+ id: PydanticObjectId
640
+ name: str = Field(..., title='Name')
641
+ description: Optional[str] = Field(None, title='Description')
642
+ order_number: int = Field(..., title='Order Number')
643
+ driver_name: str = Field(..., title='Driver Name')
644
+ date: datetime = Field(..., title='Date')
645
+ shift: str = Field(..., title='Shift')
646
+ location_name: Optional[str] = Field(None, title='Location Name')
647
+ address: Optional[str] = Field(None, title='Address')
648
+ latitude: Optional[float] = Field(None, title='Latitude')
649
+ longitude: Optional[float] = Field(None, title='Longitude')
650
+ market: Optional[str] = Field(None, title='Market')
651
+ sector: Optional[str] = Field(None, title='Sector')
652
+ supply_zones: Optional[List[str]] = Field([], title='Supply Zones')
653
+ tractor: Optional[str] = Field(None, title='Tractor')
654
+ trailer_number: Optional[str] = Field(None, title='Trailer Number')
655
+ required: Optional[bool] = Field(False, title='Required')
656
+ response: List[FormFieldResponse] = Field(..., title='Response')
657
+
658
+
659
+ class FreightIntegrationReq(BaseModel):
660
+ order_numbers: Optional[List[int]] = Field(None, title='Order Numbers')
661
+ order_ids: Optional[List[PydanticObjectId]] = Field(None, title='Order Ids')
662
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
663
+
664
+
665
+ class GetOrderRequestResponse(BaseModel):
666
+ type: Optional[str] = Field(None, title='Type')
667
+ number: int = Field(..., title='Number')
668
+ order_id: Optional[str] = Field(None, title='Order Id')
669
+ order_number: Optional[int] = Field(None, title='Order Number')
670
+ order_date: Optional[datetime] = Field(None, title='Order Date')
671
+ order_state: Optional[Union[DeliveryRequestStatus, str]] = Field(
672
+ None, title='Order State'
673
+ )
674
+ reference_order_number: Optional[str] = Field(None, title='Reference Order Number')
675
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
676
+ site_name: Optional[str] = Field(None, title='Site Name')
677
+ site_id: Optional[str] = Field(None, title='Site Id')
678
+ customer_id: Optional[str] = Field(None, title='Customer Id')
679
+ customer_name: Optional[str] = Field(None, title='Customer Name')
680
+ delivery_window_start: datetime = Field(..., title='Delivery Window Start')
681
+ delivery_window_end: datetime = Field(..., title='Delivery Window End')
682
+ products: List[ProductIDName] = Field(..., title='Products')
683
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
684
+ status: str = Field(..., title='Status')
685
+
686
+
687
+ class GetOrderResponse(BaseModel):
688
+ type: Optional[Type] = Field('regular', title='Type')
689
+ order_id: Optional[str] = Field(None, title='Order Id')
690
+ drivers: Optional[List[OrderDriver]] = Field([], title='Drivers')
691
+ order_number: Optional[int] = Field(None, title='Order Number')
692
+ order_date: Optional[datetime] = Field(None, title='Order Date')
693
+ order_state: Optional[str] = Field(None, title='Order State')
694
+ carrier_window_start: Optional[datetime] = Field(None, title='Carrier Window Start')
695
+ carrier_window_end: Optional[datetime] = Field(None, title='Carrier Window End')
696
+ carrier_notify_state: Optional[str] = Field(None, title='Carrier Notify State')
697
+ load_window_start: Optional[datetime] = Field(None, title='Load Window Start')
698
+ load_window_end: Optional[datetime] = Field(None, title='Load Window End')
699
+ dispatch_window_start: Optional[datetime] = Field(
700
+ None, title='Dispatch Window Start'
701
+ )
702
+ dispatch_window_end: Optional[datetime] = Field(None, title='Dispatch Window End')
703
+ hauler_counterparty_id: Optional[str] = Field(None, title='Hauler Counterparty Id')
704
+ hauler_counterparty_name: Optional[str] = Field(
705
+ None, title='Hauler Counterparty Name'
706
+ )
707
+ hauler_counterparty_source_id: Optional[str] = Field(
708
+ None, title='Hauler Counterparty Source Id'
709
+ )
710
+ hauler_counterparty_source_system: Optional[str] = Field(
711
+ None, title='Hauler Counterparty Source System'
712
+ )
713
+ hauled_by_updated_by: Optional[str] = Field(None, title='Hauled By Updated By')
714
+ hauled_by_updated: Optional[datetime] = Field(None, title='Hauled By Updated')
715
+ loads: Optional[List[LocationResponse]] = Field([], title='Loads')
716
+ drops: Optional[List[LocationResponse]] = Field([], title='Drops')
717
+ trip_status: Optional[str] = Field(None, title='Trip Status')
718
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
719
+ market: Optional[str] = Field(None, title='Market')
720
+ supply_option: Optional[NOSupplyOptionResponse] = None
721
+ created_by: Optional[str] = Field(None, title='Created By')
722
+ note: Optional[str] = Field(None, title='Note')
723
+ estimated_load_minutes: Optional[int] = Field(None, title='Estimated Load Minutes')
724
+ total_miles: Optional[float] = Field(None, title='Total Miles')
725
+ loaded_miles: Optional[float] = Field(None, title='Loaded Miles')
726
+ unloaded_miles: Optional[float] = Field(None, title='Unloaded Miles')
727
+ reference_order_number: Optional[str] = Field(None, title='Reference Order Number')
728
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
729
+
730
+
731
+ class GetOrdersRequest(BaseModel):
732
+ order_id: Optional[str] = Field(None, title='Order Id')
733
+ order_number: Optional[int] = Field(None, title='Order Number')
734
+ type: Optional[str] = Field(None, title='Type')
735
+ state: Optional[Union[OrderState, str]] = Field(None, title='State')
736
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
737
+ order_date_start: Optional[datetime] = Field(None, title='Order Date Start')
738
+ order_date_end: Optional[datetime] = Field(None, title='Order Date End')
739
+ reference_order_number: Optional[str] = Field(None, title='Reference Order Number')
740
+ order_date: Optional[datetime] = Field(None, title='Order Date')
741
+
742
+
743
+ class HTTPValidationError(BaseModel):
744
+ detail: Optional[List[ValidationError]] = Field(None, title='Detail')
745
+
746
+
747
+ class ImportRequest(BaseModel):
748
+ reqs: List[ForecastApiCreateRequest] = Field(..., max_length=5000, title='Reqs')
749
+
750
+
751
+ class InvoiceAllReq(BaseModel):
752
+ order_numbers: Optional[List[int]] = Field(None, title='Order Numbers')
753
+ order_ids: Optional[List[str]] = Field(None, title='Order Ids')
754
+ invoice_numbers: Optional[List[str]] = Field(None, title='Invoice Numbers')
755
+ status: Optional[InvoiceStaticStatus] = 'sent'
756
+ counterparty_name: Optional[str] = Field(None, title='Counterparty Name')
757
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
758
+ book_type: Optional[RateBookType] = Field(
759
+ default_factory=lambda: RateBookType.model_validate('Revenue')
760
+ )
761
+ as_of: Optional[datetime] = Field(None, title='As Of')
762
+ between: Optional[DateWindow] = None
763
+
764
+
765
+ class InvoiceRow(BaseModel):
766
+ model_config = ConfigDict(
767
+ extra='allow',
768
+ )
769
+ invoice_number: str = Field(..., title='Invoice Number')
770
+ sent_date: Optional[datetime] = Field(None, title='Sent Date')
771
+ when_to_send_date: Optional[datetime] = Field(None, title='When To Send Date')
772
+ created_on: Optional[datetime] = Field(None, title='Created On')
773
+ type: InvoiceType
774
+ status: Optional[Union[InvoiceStaticStatus, InvoiceDynamicStatus]] = Field(
775
+ None, title='Status'
776
+ )
777
+ transactions: List[FreightTransactionRowOutput] = Field(..., title='Transactions')
778
+ note: Optional[str] = Field(None, title='Note')
779
+ base_amount: float = Field(..., title='Base Amount')
780
+ base_distance: float = Field(..., title='Base Distance')
781
+ distance_uom: str = Field(..., title='Distance Uom')
782
+ accessorial_amount: float = Field(..., title='Accessorial Amount')
783
+ surcharge_amount: float = Field(..., title='Surcharge Amount')
784
+ total_amount: float = Field(..., title='Total Amount')
785
+
786
+
787
+ class LocationView(BaseModel):
788
+ model_config = ConfigDict(
789
+ extra='allow',
790
+ )
791
+ id: str = Field(..., title='Id')
792
+ name: str = Field(..., title='Name')
793
+ short_name: Optional[str] = Field(None, title='Short Name')
794
+ market: Optional[str] = Field(None, title='Market')
795
+ market_id: Optional[str] = Field(None, title='Market Id')
796
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
797
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
798
+ type: Optional[str] = Field(None, title='Type')
799
+ lat: Optional[float] = Field(None, title='Lat')
800
+ lon: Optional[float] = Field(None, title='Lon')
801
+ address: Optional[str] = Field(None, title='Address')
802
+ phone: Optional[str] = Field(None, title='Phone')
803
+ city: Optional[str] = Field(None, title='City')
804
+ state: Optional[str] = Field(None, title='State')
805
+ active: Optional[bool] = Field(None, title='Active')
806
+ postal_code: Optional[str] = Field(None, title='Postal Code')
807
+ source_id: Optional[str] = Field(None, title='Source Id')
808
+ source_system: Optional[str] = Field(None, title='Source System')
809
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
810
+ timezone: Optional[str] = Field(None, title='Timezone')
811
+ supply_zones: Optional[List[str]] = Field([], title='Supply Zones')
812
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
813
+ cards: Optional[List[Card]] = Field([], title='Cards')
814
+ dwells: Optional[List[Dwell]] = Field([], title='Dwells')
815
+ requires_card: Optional[bool] = Field(None, title='Requires Card')
816
+ geofence: Optional[List[Coordinate]] = Field(None, title='Geofence')
817
+ supply_map: Optional[List[SourceMap]] = Field([], title='Supply Map')
818
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
819
+
820
+
821
+ class MarketView(BaseModel):
822
+ id: str = Field(..., title='Id')
823
+ name: str = Field(..., title='Name')
824
+ network_radius: Optional[int] = Field(250, title='Network Radius')
825
+ active: Optional[bool] = Field(True, title='Active')
826
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
827
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
828
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
829
+ sectors: Optional[List[MarketSchemaSectorView]] = Field([], title='Sectors')
830
+ delivery_window_default: Optional[DeliveryWindowDefault] = {
831
+ 'name': 'default',
832
+ 'cutoffs': [
833
+ {
834
+ 'cutoff_time': 16,
835
+ 'earliest_request_hours': 6,
836
+ 'earliest_request_offset_days': 1,
837
+ }
838
+ ],
839
+ }
840
+
841
+
842
+ class OrderCreateRequest(BaseModel):
843
+ model_config = ConfigDict(
844
+ extra='allow',
845
+ )
846
+ reference_order_number: Optional[str] = Field(..., title='Reference Order Number')
847
+ supply_owner: Optional[Counterparty] = None
848
+ sourcing_strategy: Optional[SourcingStrategy] = None
849
+ manual_supply_fallback: Optional[bool] = Field(True, title='Manual Supply Fallback')
850
+ allow_alternate_products: Optional[bool] = Field(
851
+ False, title='Allow Alternate Products'
852
+ )
853
+ delivery_window: DeliveryWindow
854
+ fit_to_trailer: Optional[bool] = Field(False, title='Fit To Trailer')
855
+ note: Optional[str] = Field(None, title='Note')
856
+ drops: List[DropCreateRequest] = Field(..., title='Drops')
857
+ accept_by: Optional[datetime] = Field(None, title='Accept By')
858
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
859
+
860
+
861
+ class OrderCreateResponse(BaseModel):
862
+ status: OrderCreateStatus
863
+ order_number: Optional[int] = Field(None, title='Order Number')
864
+ order: Optional[OrderResponse] = None
865
+ errors: Optional[List[str]] = Field([], title='Errors')
866
+ accept_by: Optional[datetime] = Field(None, title='Accept By')
867
+ reference_order_number: Optional[str] = Field(None, title='Reference Order Number')
868
+ extra_data: Optional[Dict[str, str]] = Field(None, title='Extra Data')
869
+
870
+
871
+ class OrderFreightResp(BaseModel):
872
+ number: int = Field(..., title='Number')
873
+ po: Optional[str] = Field(None, title='Po')
874
+ freight_rate: float = Field(..., title='Freight Rate')
875
+ freight_total: float = Field(..., title='Freight Total')
876
+ freight_items: List[FreightItem] = Field(..., title='Freight Items')
877
+
878
+
879
+ class OrderFreightRespV2(BaseModel):
880
+ number: int = Field(..., title='Number')
881
+ po: Optional[str] = Field(None, title='Po')
882
+ freight_rate: float = Field(..., title='Freight Rate')
883
+ freight_total: float = Field(..., title='Freight Total')
884
+ freight_items: List[FreightTransactionDetailOutput] = Field(
885
+ ..., title='Freight Items'
886
+ )
887
+
888
+
889
+ class OrderStatusUpdateRequest(BaseModel):
890
+ order_id: str = Field(..., title='Order Id')
891
+ order_number: Optional[str] = Field(None, title='Order Number')
892
+ status: StatusUpdate
893
+ location_id: Optional[str] = Field(None, title='Location Id')
894
+ eta: Optional[datetime] = Field(None, title='Eta')
895
+ actual: Optional[datetime] = Field(None, title='Actual')
896
+
897
+
898
+ class PayrollExportDetailResponse(BaseModel):
899
+ driver_name: str = Field(..., title='Driver Name')
900
+ driver_source_id: Optional[str] = Field(None, title='Driver Source Id')
901
+ driver_source_system: str = Field(..., title='Driver Source System')
902
+ end_date: datetime = Field(..., title='End Date')
903
+ hours_worked: float = Field(..., title='Hours Worked')
904
+ pay_earned: float = Field(..., title='Pay Earned')
905
+ payroll_config: Optional[str] = Field(None, title='Payroll Config')
906
+ start_date: datetime = Field(..., title='Start Date')
907
+ status: str = Field(..., title='Status')
908
+ updated: datetime = Field(..., title='Updated')
909
+ detail: Optional[List[PayrollExportDetailModel]] = Field([], title='Detail')
910
+
911
+
912
+ class PriceAllRequest(BaseModel):
913
+ as_of: Optional[datetime] = Field(None, title='As Of')
914
+ last_change_date: Optional[datetime] = Field(None, title='Last Change Date')
915
+ terminals: Optional[List[str]] = Field(None, title='Terminals')
916
+ suppliers: Optional[List[str]] = Field(None, title='Suppliers')
917
+ products: Optional[List[str]] = Field(None, title='Products')
918
+ price_types: Optional[List[PriceType]] = Field(None, title='Price Types')
919
+ product_groups: Optional[List[ProductGroups]] = Field(None, title='Product Groups')
920
+
921
+
922
+ class PriceResponse(BaseModel):
923
+ curve_id: str = Field(..., title='Curve Id')
924
+ price_id: str = Field(..., title='Price Id')
925
+ city: Optional[str] = Field(None, title='City')
926
+ contract: Optional[str] = Field(None, title='Contract')
927
+ product: Optional[str] = Field(None, title='Product')
928
+ product_id: str = Field(..., title='Product Id')
929
+ supplier: Optional[str] = Field(None, title='Supplier')
930
+ supplier_id: str = Field(..., title='Supplier Id')
931
+ counterparty: Optional[str] = Field(None, title='Counterparty')
932
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
933
+ terminal: Optional[str] = Field(None, title='Terminal')
934
+ terminal_id: str = Field(..., title='Terminal Id')
935
+ store_number: Optional[str] = Field(None, title='Store Number')
936
+ store_id: Optional[str] = Field(None, title='Store Id')
937
+ price_type: str = Field(..., title='Price Type')
938
+ product_group: Optional[str] = Field(None, title='Product Group')
939
+ price: float = Field(..., title='Price')
940
+ effective_from: datetime = Field(..., title='Effective From')
941
+ effective_to: datetime = Field(..., title='Effective To')
942
+ expire: Optional[datetime] = Field(None, title='Expire')
943
+ disabled: bool = Field(..., title='Disabled')
944
+ disabled_by: Optional[str] = Field(None, title='Disabled By')
945
+ disabled_until: Optional[datetime] = Field(None, title='Disabled Until')
946
+ disabled_reason: Optional[str] = Field(None, title='Disabled Reason')
947
+ updated_by: Optional[str] = Field(None, title='Updated By')
948
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
949
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
950
+ group_id: Optional[str] = Field(None, title='Group Id')
951
+ group_effective_cutover: Optional[datetime] = Field(
952
+ None, title='Group Effective Cutover'
953
+ )
954
+ group_effective_cutover_timezone: Optional[str] = Field(
955
+ None, title='Group Effective Cutover Timezone'
956
+ )
957
+ group_identifier: Optional[str] = Field(None, title='Group Identifier')
958
+ group_name: Optional[str] = Field(None, title='Group Name')
959
+ min_constraint: Optional[float] = Field(None, title='Min Constraint')
960
+ max_constraint: Optional[float] = Field(None, title='Max Constraint')
961
+ created_on: Optional[datetime] = Field(None, title='Created On')
962
+ net_or_gross_type: Optional[BillableVolumeType] = None
963
+ contract_lifting_valuation_method: Optional[BillableDateType] = None
964
+
965
+
966
+ class ProductView(BaseModel):
967
+ id: str = Field(..., title='Id')
968
+ name: str = Field(..., title='Name')
969
+ short_name: Optional[str] = Field(None, title='Short Name')
970
+ group: str = Field(..., title='Group')
971
+ weight_group: str = Field(..., title='Weight Group')
972
+ icon: str = Field(..., title='Icon')
973
+ source_id: Optional[str] = Field(None, title='Source Id')
974
+ source_system: Optional[str] = Field(None, title='Source System')
975
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
976
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
977
+ blends: Optional[List[BlendView]] = Field([], title='Blends')
978
+ alternate_products: Optional[List[str]] = Field([], title='Alternate Products')
979
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
980
+ tank_lid_code_id: Optional[str] = Field(None, title='Tank Lid Code Id')
981
+ supply_map: Optional[List[SourceMap]] = Field([], title='Supply Map')
982
+
983
+
984
+ class SaveDropReq(BaseModel):
985
+ mode: Optional[SaveDropMode] = Field(
986
+ default_factory=lambda: SaveDropMode.model_validate('append')
987
+ )
988
+ order_id: str = Field(..., title='Order Id')
989
+ location_id: str = Field(..., title='Location Id')
990
+ details: List[SaveDropDetail] = Field(..., title='Details')
991
+
992
+
993
+ class StoreV2(BaseModel):
994
+ model_config = ConfigDict(
995
+ extra='allow',
996
+ )
997
+ field_id: Optional[PydanticObjectId] = Field(
998
+ None, alias='_id', description='MongoDB document ObjectID'
999
+ )
1000
+ store_number: Optional[str] = Field(None, title='Store Number')
1001
+ name: Optional[str] = Field(None, title='Name')
1002
+ market: Optional[str] = Field(None, title='Market')
1003
+ market_id: Optional[str] = Field(None, title='Market Id')
1004
+ sector: Optional[str] = Field(None, title='Sector')
1005
+ sector_id: Optional[str] = Field(None, title='Sector Id')
1006
+ tanks: Optional[List[StoreTank]] = Field([], title='Tanks')
1007
+ lat: Optional[float] = Field(None, title='Lat')
1008
+ lon: Optional[float] = Field(None, title='Lon')
1009
+ address: Optional[str] = Field(None, title='Address')
1010
+ city: Optional[str] = Field(None, title='City')
1011
+ state: Optional[str] = Field(None, title='State')
1012
+ postal_code: Optional[str] = Field(None, title='Postal Code')
1013
+ contact_name: Optional[str] = Field(None, title='Contact Name')
1014
+ phone_number: Optional[str] = Field(None, title='Phone Number')
1015
+ emails: Optional[List[str]] = Field([], title='Emails')
1016
+ hours: Optional[str] = Field('', title='Hours')
1017
+ timezone: Optional[str] = Field('US/Central', title='Timezone')
1018
+ status: Optional[StoreStatus] = Field(
1019
+ default_factory=lambda: StoreStatus.model_validate('open')
1020
+ )
1021
+ drop_workflow: Optional[DropWorkflow] = Field(
1022
+ default_factory=lambda: DropWorkflow.model_validate('Sticking')
1023
+ )
1024
+ open_date: Optional[datetime] = Field(None, title='Open Date')
1025
+ close_date: Optional[datetime] = Field(None, title='Close Date')
1026
+ unavailable_hours: Optional[List[UnavailableHours]] = Field(
1027
+ [], title='Unavailable Hours'
1028
+ )
1029
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
1030
+ counterparty_name: Optional[str] = Field(None, title='Counterparty Name')
1031
+ in_network_terminals: Optional[List[InNetworkTerminal]] = Field(
1032
+ [], title='In Network Terminals'
1033
+ )
1034
+ in_network_supply_zones: Optional[List[InNetworkSupplyZone]] = Field(
1035
+ [], title='In Network Supply Zones'
1036
+ )
1037
+ supply_owner_id: Optional[str] = Field(None, title='Supply Owner Id')
1038
+ supply_owner_name: Optional[str] = Field(None, title='Supply Owner Name')
1039
+ freight_customer_id: Optional[str] = Field(None, title='Freight Customer Id')
1040
+ freight_customer_name: Optional[str] = Field(None, title='Freight Customer Name')
1041
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
1042
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
1043
+ layout_file: Optional[str] = Field(None, title='Layout File')
1044
+ layout_file_uploaded: Optional[datetime] = Field(None, title='Layout File Uploaded')
1045
+ auto_order_disabled: Optional[bool] = Field(False, title='Auto Order Disabled')
1046
+ updated_id: Optional[PydanticObjectId] = None
1047
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
1048
+ monitoring_strategy: Optional[MonitoringStrategy] = Field(
1049
+ default_factory=lambda: MonitoringStrategy.model_validate('Unmonitored')
1050
+ )
1051
+ estick_monitor_override: Optional[str] = Field(
1052
+ None, title='Estick Monitor Override'
1053
+ )
1054
+ notes: Optional[str] = Field(None, title='Notes')
1055
+ updated_on: Optional[datetime] = Field(None, title='Updated On')
1056
+ updated_by: Optional[str] = Field(None, title='Updated By')
1057
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
1058
+ credit_hold: Optional[bool] = Field(None, title='Credit Hold')
1059
+ compliance_hold_date: Optional[datetime] = Field(None, title='Compliance Hold Date')
1060
+ delivery_window_default_name: Optional[str] = Field(
1061
+ None, title='Delivery Window Default Name'
1062
+ )
1063
+ delivery_window_default_id: Optional[str] = Field(
1064
+ None, title='Delivery Window Default Id'
1065
+ )
1066
+ allow_by_product_request: Optional[bool] = Field(
1067
+ False, title='Allow By Product Request'
1068
+ )
1069
+ geofence: Optional[List[Coordinate]] = Field(None, title='Geofence')
1070
+
1071
+
1072
+ class SupplyPriceUpdateManyRequest(BaseModel):
1073
+ id: Optional[str] = Field(None, title='Id')
1074
+ source_id: Optional[str] = Field(None, title='Source Id')
1075
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1076
+ contract: Optional[str] = Field(None, title='Contract')
1077
+ timezone: Optional[TimezoneEnum] = Field(
1078
+ default_factory=lambda: TimezoneEnum.model_validate('UTC')
1079
+ )
1080
+ effective_from: datetime = Field(..., title='Effective From')
1081
+ effective_to: datetime = Field(..., title='Effective To')
1082
+ price: float = Field(..., title='Price')
1083
+ price_type: PriceType
1084
+ terminal_id: Optional[constr(min_length=24, max_length=24)] = Field(
1085
+ None, title='Terminal Id'
1086
+ )
1087
+ terminal_source_id: Optional[str] = Field(None, title='Terminal Source Id')
1088
+ terminal_source_system_id: Optional[str] = Field(
1089
+ None, title='Terminal Source System Id'
1090
+ )
1091
+ terminal: Optional[str] = Field(None, title='Terminal')
1092
+ product_id: Optional[constr(min_length=24, max_length=24)] = Field(
1093
+ None, title='Product Id'
1094
+ )
1095
+ product_source_id: Optional[str] = Field(None, title='Product Source Id')
1096
+ product_source_system_id: Optional[str] = Field(
1097
+ None, title='Product Source System Id'
1098
+ )
1099
+ product: Optional[str] = Field(None, title='Product')
1100
+ supplier_id: Optional[constr(min_length=24, max_length=24)] = Field(
1101
+ None, title='Supplier Id'
1102
+ )
1103
+ supplier_source_id: Optional[str] = Field(None, title='Supplier Source Id')
1104
+ supplier_source_system_id: Optional[str] = Field(
1105
+ None, title='Supplier Source System Id'
1106
+ )
1107
+ supplier: Optional[str] = Field(None, title='Supplier')
1108
+ counterparty_id: Optional[constr(min_length=24, max_length=24)] = Field(
1109
+ None, title='Counterparty Id'
1110
+ )
1111
+ counterparty_source_id: Optional[str] = Field(None, title='Counterparty Source Id')
1112
+ counterparty_source_system_id: Optional[str] = Field(
1113
+ None, title='Counterparty Source System Id'
1114
+ )
1115
+ counterparty: Optional[str] = Field(None, title='Counterparty')
1116
+ store_id: Optional[constr(min_length=24, max_length=24)] = Field(
1117
+ None, title='Store Id'
1118
+ )
1119
+ store_source_id: Optional[str] = Field(None, title='Store Source Id')
1120
+ store_source_system_id: Optional[str] = Field(None, title='Store Source System Id')
1121
+ store_number: Optional[str] = Field(None, title='Store Number')
1122
+ enabled: Optional[bool] = Field(True, title='Enabled')
1123
+ disabled_until: Optional[datetime] = Field(None, title='Disabled Until')
1124
+ expire: Optional[datetime] = Field(None, title='Expire')
1125
+ min_quantity: Optional[int] = Field(None, title='Min Quantity')
1126
+ max_quantity: Optional[int] = Field(None, title='Max Quantity')
1127
+ curve_id: Optional[str] = Field(None, title='Curve Id')
1128
+ error: Optional[str] = Field(None, title='Error')
1129
+ row: Optional[int] = Field(None, title='Row')
1130
+ net_or_gross_type: Optional[BillableVolumeType] = None
1131
+ contract_lifting_valuation_method: Optional[BillableDateType] = None
1132
+
1133
+
1134
+ class SurchargeAllReq(BaseModel):
1135
+ counterparty_name: Optional[str] = Field(None, title='Counterparty Name')
1136
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
1137
+ book_type: Optional[RateBookType] = None
1138
+ as_of: Optional[datetime] = Field(None, title='As Of')
1139
+ product_group: Optional[ProductGroups] = None
1140
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
1141
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
1142
+
1143
+
1144
+ class SurchargeAllResp(BaseModel):
1145
+ id: PydanticObjectId
1146
+ counterparty: str = Field(..., title='Counterparty')
1147
+ counterparty_id: str = Field(..., title='Counterparty Id')
1148
+ product_group: Optional[ProductGroups] = None
1149
+ book_type: RateBookType
1150
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
1151
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
1152
+ type: SurchargeType
1153
+ effective_from: Optional[datetime] = Field(None, title='Effective From')
1154
+ effective_to: Optional[datetime] = Field(None, title='Effective To')
1155
+ surcharge: Optional[float] = Field(None, title='Surcharge')
1156
+ created_on: datetime = Field(..., title='Created On')
1157
+ created_by: Optional[str] = Field(None, title='Created By')
1158
+
1159
+
1160
+ class SurchargeCreateReq(BaseModel):
1161
+ counterparty_name: Optional[str] = Field(None, title='Counterparty Name')
1162
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
1163
+ product_group: Optional[ProductGroups] = None
1164
+ book_type: RateBookType
1165
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
1166
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
1167
+ type: SurchargeType
1168
+ effective_from: datetime = Field(..., title='Effective From')
1169
+ effective_to: Optional[datetime] = Field(None, title='Effective To')
1170
+ surcharge: Optional[float] = Field(None, title='Surcharge')
1171
+
1172
+
1173
+ class UpdateResponse(BaseModel):
1174
+ created: Optional[int] = Field(0, title='Created')
1175
+ end_dated: Optional[int] = Field(0, title='End Dated')
1176
+ bad_data: List[SupplyPriceUpdateResponse] = Field(..., title='Bad Data')
1177
+ duplicates: List[SupplyPriceUpdateResponse] = Field(..., title='Duplicates')
1178
+ exact_match: List[SupplyPriceUpdateResponse] = Field(..., title='Exact Match')
1179
+
1180
+
1181
+ class UploadIMSRequest(BaseModel):
1182
+ store: str = Field(..., title='Store')
1183
+ tank: Union[str, int] = Field(..., title='Tank')
1184
+ timezone: Optional[TimezoneEnum] = None
1185
+ date: datetime = Field(..., title='Date')
1186
+ inches: Optional[int] = Field(None, title='Inches')
1187
+ volume: Optional[float] = Field(None, title='Volume')
1188
+ payload: Optional[Dict[str, Any]] = Field(None, title='Payload')
1189
+
1190
+
1191
+ class UpsertLocationRequest(BaseModel):
1192
+ id: Optional[constr(min_length=24, max_length=24)] = Field(None, title='Id')
1193
+ source_id: Optional[str] = Field(None, title='Source Id')
1194
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1195
+ name: str = Field(..., title='Name')
1196
+ short_name: str = Field(..., title='Short Name')
1197
+ address: Optional[str] = Field(None, title='Address')
1198
+ type: TerminalType
1199
+ city: Optional[str] = Field(None, title='City')
1200
+ state: Optional[str] = Field(None, title='State')
1201
+ postal_code: Optional[str] = Field(None, title='Postal Code')
1202
+ market_id: Optional[str] = Field(None, title='Market Id')
1203
+ market: str = Field(..., title='Market')
1204
+ lat: float = Field(..., title='Lat')
1205
+ lon: float = Field(..., title='Lon')
1206
+ hours: Optional[str] = Field(None, title='Hours')
1207
+ contact: Optional[str] = Field(None, title='Contact')
1208
+ contact_phone: Optional[str] = Field(None, title='Contact Phone')
1209
+ active: Optional[bool] = Field(True, title='Active')
1210
+ include_in_backhaul: Optional[bool] = Field(False, title='Include In Backhaul')
1211
+ start_time: Optional[datetime] = Field(None, title='Start Time')
1212
+ end_time: Optional[datetime] = Field(None, title='End Time')
1213
+ requires_card: Optional[bool] = Field(False, title='Requires Card')
1214
+ splash_blending: Optional[bool] = Field(True, title='Splash Blending')
1215
+ split_load_terminals: Optional[List[str]] = Field([], title='Split Load Terminals')
1216
+ authorized_carriers: Optional[List[str]] = Field([], title='Authorized Carriers')
1217
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
1218
+ geofence: Optional[List[Union[Coordinate, List, str]]] = Field(
1219
+ None, title='Geofence'
1220
+ )
1221
+ supply_zones: Optional[List[str]] = Field([], title='Supply Zones')
1222
+ supply_map: Optional[List[SourceMap]] = Field(None, title='Supply Map')
1223
+
1224
+
1225
+ class UpsertManyCounterpartyRequest(BaseModel):
1226
+ id: Optional[constr(min_length=24, max_length=24)] = Field(None, title='Id')
1227
+ source_id: Optional[str] = Field(None, title='Source Id')
1228
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1229
+ name: str = Field(..., title='Name')
1230
+ types: List[str] = Field(..., title='Types')
1231
+ carrier_type: Optional[str] = Field(None, title='Carrier Type')
1232
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
1233
+ emails: Optional[List[EmailStr]] = Field([], title='Emails')
1234
+ sourcing_strategy: Optional[SourcingStrategy] = None
1235
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
1236
+ goid: Optional[str] = Field(None, title='Goid')
1237
+ allow_short_loads: Optional[bool] = Field(False, title='Allow Short Loads')
1238
+ order_notification_preferences: Optional[List[OrderReqNotificationStates]] = Field(
1239
+ [], title='Order Notification Preferences'
1240
+ )
1241
+ supply_map: Optional[List[SourceMap]] = Field(None, title='Supply Map')
1242
+ available_credit: Optional[float] = Field(None, title='Available Credit')
1243
+ hold: Optional[bool] = Field(False, title='Hold')
1244
+
1245
+
1246
+ class UpsertManyDriverRequest(BaseModel):
1247
+ model_config = ConfigDict(
1248
+ extra='allow',
1249
+ )
1250
+ id: Optional[constr(min_length=24, max_length=24)] = Field(None, title='Id')
1251
+ source_id: Optional[str] = Field(None, title='Source Id')
1252
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1253
+ name: str = Field(..., title='Name')
1254
+ username: str = Field(..., title='Username')
1255
+ email: Optional[EmailStr] = Field(None, title='Email')
1256
+ title: Optional[str] = Field(None, title='Title')
1257
+ hire_date: datetime = Field(..., title='Hire Date')
1258
+ termination_date: Optional[datetime] = Field(None, title='Termination Date')
1259
+ depot: Optional[str] = Field(None, title='Depot')
1260
+ depot_id: Optional[str] = Field(None, title='Depot Id')
1261
+ in_cab_trip_mode: Optional[InCabTripMode] = None
1262
+ in_cab_supply_option_mode: Optional[InCabSupplyOptionMode] = None
1263
+ preferred_template: Optional[str] = Field(None, title='Preferred Template')
1264
+ shift_preference: Shift
1265
+ shift_length_hours: Optional[float] = Field(None, title='Shift Length Hours')
1266
+ tractor_number: Optional[str] = Field(None, title='Tractor Number')
1267
+ tractor_id: Optional[str] = Field(None, title='Tractor Id')
1268
+ trailer_number: Optional[str] = Field(None, title='Trailer Number')
1269
+ trailer_id: Optional[str] = Field(None, title='Trailer Id')
1270
+ carded_terminals: Optional[List[str]] = Field(None, title='Carded Terminals')
1271
+ supervisor: Optional[str] = Field(None, title='Supervisor')
1272
+ active: Optional[bool] = Field(True, title='Active')
1273
+
1274
+
1275
+ class UpsertManyStoreRequest(BaseModel):
1276
+ id: Optional[constr(min_length=24, max_length=24)] = Field(None, title='Id')
1277
+ store_number: str = Field(..., title='Store Number')
1278
+ name: Optional[str] = Field(None, title='Name')
1279
+ address: Optional[str] = Field(None, title='Address')
1280
+ city: Optional[str] = Field(None, title='City')
1281
+ state: Optional[str] = Field(None, title='State')
1282
+ postal_code: Optional[str] = Field(None, title='Postal Code')
1283
+ phone_number: Optional[str] = Field(None, title='Phone Number')
1284
+ emails: Optional[List[str]] = Field(None, title='Emails')
1285
+ hours: Optional[str] = Field(None, title='Hours')
1286
+ market: Optional[str] = Field(None, title='Market')
1287
+ market_id: Optional[str] = Field(None, title='Market Id')
1288
+ sector: Optional[str] = Field(None, title='Sector')
1289
+ sector_id: Optional[str] = Field(None, title='Sector Id')
1290
+ trailer_config: Optional[str] = Field(None, title='Trailer Config')
1291
+ lat: float = Field(..., title='Lat')
1292
+ lon: float = Field(..., title='Lon')
1293
+ timezone: Optional[TimezoneEnum] = Field(
1294
+ default_factory=lambda: TimezoneEnum.model_validate('America/Chicago')
1295
+ )
1296
+ status: Optional[StoreStatus] = Field(
1297
+ default_factory=lambda: StoreStatus.model_validate('open')
1298
+ )
1299
+ contact_name: Optional[str] = Field(None, title='Contact Name')
1300
+ open_date: Optional[datetime] = Field(None, title='Open Date')
1301
+ close_date: Optional[datetime] = Field(None, title='Close Date')
1302
+ unavailable_hours: Optional[List[UnavailableHoursRequest]] = Field(
1303
+ [], title='Unavailable Hours'
1304
+ )
1305
+ counterparty_id: Optional[str] = Field(None, title='Counterparty Id')
1306
+ counterparty_name: Optional[str] = Field(None, title='Counterparty Name')
1307
+ supply_owner_id: Optional[str] = Field(None, title='Supply Owner Id')
1308
+ supply_owner_name: Optional[str] = Field(None, title='Supply Owner Name')
1309
+ freight_customer_id: Optional[str] = Field(None, title='Freight Customer Id')
1310
+ freight_customer_name: Optional[str] = Field(None, title='Freight Customer Name')
1311
+ freight_region_name: Optional[str] = Field(None, title='Freight Region Name')
1312
+ freight_region_id: Optional[str] = Field(None, title='Freight Region Id')
1313
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
1314
+ monitoring_strategy: MonitoringStrategy
1315
+ estick_monitor_override: Optional[str] = Field(
1316
+ None, title='Estick Monitor Override'
1317
+ )
1318
+ drop_workflow: Optional[DropWorkflow] = Field(
1319
+ default_factory=lambda: DropWorkflow.model_validate('Sticking')
1320
+ )
1321
+ credit_hold: Optional[bool] = Field(None, title='Credit Hold')
1322
+ compliance_hold_date: Optional[datetime] = Field(None, title='Compliance Hold Date')
1323
+ allow_by_product_request: Optional[bool] = Field(
1324
+ None, title='Allow By Product Request'
1325
+ )
1326
+ in_network_terminals: Optional[List[str]] = Field(
1327
+ None, title='In Network Terminals'
1328
+ )
1329
+ delivery_window_default_name: Optional[str] = Field(
1330
+ None, title='Delivery Window Default Name'
1331
+ )
1332
+ delivery_window_default_id: Optional[str] = Field(
1333
+ None, title='Delivery Window Default Id'
1334
+ )
1335
+ geofence: Optional[List[Union[Coordinate, List, str]]] = Field(
1336
+ None, title='Geofence'
1337
+ )
1338
+
1339
+
1340
+ class UpsertProductRequest(BaseModel):
1341
+ group: str = Field(..., title='Group')
1342
+ weight_group: Optional[str] = Field(None, title='Weight Group')
1343
+ extra_data: Optional[Dict[str, Any]] = Field(None, title='Extra Data')
1344
+ id: Optional[constr(min_length=24, max_length=24)] = Field(None, title='Id')
1345
+ source_id: Optional[str] = Field(None, title='Source Id')
1346
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1347
+ name: str = Field(..., title='Name')
1348
+ alias: Optional[str] = Field(None, title='Alias')
1349
+ enabled: Optional[bool] = Field(None, title='Enabled')
1350
+ specific_gravity: Optional[float] = Field(None, title='Specific Gravity')
1351
+ short_name: Optional[constr(max_length=10)] = Field(None, title='Short Name')
1352
+ icon: Optional[TankLidEnum] = None
1353
+ tank_lid_code_id: Optional[str] = Field(None, title='Tank Lid Code Id')
1354
+ supply_map: Optional[List[SourceMap]] = Field(None, title='Supply Map')
1355
+
1356
+
1357
+ class UpsertTankRequest(BaseModel):
1358
+ id: Optional[str] = Field(None, title='Id')
1359
+ source_id: Optional[str] = Field(None, title='Source Id')
1360
+ source_system_id: Optional[str] = Field(None, title='Source System Id')
1361
+ store_id: Optional[constr(min_length=24, max_length=24)] = Field(
1362
+ None, title='Store Id'
1363
+ )
1364
+ tank_id: conint(gt=-1) = Field(..., title='Tank Id')
1365
+ island: Optional[str] = Field(None, title='Island')
1366
+ icon: Optional[TankLidEnum] = None
1367
+ product_id: Optional[str] = Field(None, title='Product Id')
1368
+ product: str = Field(..., title='Product')
1369
+ description: Optional[constr(max_length=1000)] = Field(None, title='Description')
1370
+ tank_chart: Optional[str] = Field(None, title='Tank Chart')
1371
+ storage_max: Optional[float] = Field(None, title='Storage Max')
1372
+ tank_size: Optional[float] = Field(None, title='Tank Size')
1373
+ fuel_bottom: Optional[float] = Field(None, title='Fuel Bottom')
1374
+ manufacturer: Optional[str] = Field(None, title='Manufacturer')
1375
+ dimensions: Optional[str] = Field(None, title='Dimensions')
1376
+ tank_color: Optional[str] = Field(None, title='Tank Color')
1377
+ minimum_load_size: Optional[int] = Field(None, title='Minimum Load Size')
1378
+ maximum_load_size: Optional[int] = Field(None, title='Maximum Load Size')
1379
+ strapping_table: Optional[str] = Field(None, title='Strapping Table')
1380
+ target_min: Optional[float] = Field(None, title='Target Min')
1381
+ target_max: Optional[float] = Field(None, title='Target Max')
1382
+ inventory_strategy: Optional[str] = Field(None, title='Inventory Strategy')
1383
+ load_tags: Optional[List[str]] = Field([], title='Load Tags')
1384
+ filter_tags: Optional[List[str]] = Field([], title='Filter Tags')
1385
+ split_me: Optional[bool] = Field(None, title='Split Me')
1386
+ water_reading_requirement: Optional[WaterReadingRequirement] = None
1387
+ requires_pump: Optional[bool] = Field(None, title='Requires Pump')
1388
+ carrier_id: Optional[str] = Field(None, title='Carrier Id')
1389
+ carrier: Optional[str] = Field(None, title='Carrier')
1390
+ extra_data: Optional[Dict[str, Any]] = Field({}, title='Extra Data')
1391
+ active: Optional[bool] = Field(True, title='Active')
1392
+ manifold_id: Optional[str] = Field(None, title='Manifold Id')
1393
+ apportion_percentage: Optional[float] = Field(None, title='Apportion Percentage')
1394
+ compliance_hold: Optional[bool] = Field(None, title='Compliance Hold')
1395
+ demand_model_tank_profile: Optional[str] = Field(
1396
+ None, title='Demand Model Tank Profile'
1397
+ )
1398
+ store_number: Optional[str] = Field(None, title='Store Number')