1use crate::core::*;
2use chrono::{DateTime, NaiveDate, Utc};
3use currency_4217::Money;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
10pub struct OrderRequest {
11 pub header: OrderRequestHeader,
16 pub items: Vec<ItemOut>,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
24pub struct OrderRequestHeader {
25 pub order_id: String,
27 pub order_date: DateTime<Utc>,
29 pub order_type: OrderType,
31 pub total: Money,
33 pub ship_to: Address,
35 pub bill_to: Address,
37 pub shipping: Option<Money>,
39 pub tax: Option<Money>,
41 pub comments: Option<String>,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
47pub struct ItemOut {
48 pub line_number: u32,
50 pub quantity: u32,
52 pub requested_delivery_date: Option<NaiveDate>,
54 pub item: Item,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
60pub struct Item {
61 pub item_id: ItemID,
63 pub detail: ItemDetail,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
69pub struct ItemID {
70 pub buyer_part_id: Option<String>,
74 pub supplier_part_id: String,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
80pub struct ItemDetail {
81 pub unit_price: Option<Money>,
83
84 pub description: String,
86
87 pub unit_of_measure: Option<String>,
90
91 pub classification: Option<Classification>,
92 pub manufacturer: Option<ManufacturerInfo>,
93 pub extrinsic: Option<HashMap<String, String>>,
94
95 pub unit_rate: Option<UnitRate>,
97
98 pub spend_detail: Option<SpendDetail>,
100}
101
102#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
104pub struct ManufacturerInfo {
105 pub part_id: String,
106 pub name: String,
107}
108
109#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
111pub struct Classification {
112 pub domain: ClassificationDomain,
113 pub code: String,
114}
115
116#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
117pub enum ClassificationDomain {
118 UNSPSC,
119 ECLASS,
120 Custom(String),
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
125pub enum OrderType {
126 New,
127 Update,
128 Delete,
129}