use crate::core::*;
use chrono::{DateTime, NaiveDate, Utc};
use currency_4217::Money;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct OrderRequest {
pub header: OrderRequestHeader,
pub items: Vec<ItemOut>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct OrderRequestHeader {
pub order_id: String,
pub order_date: DateTime<Utc>,
pub order_type: OrderType,
pub total: Money,
pub ship_to: Address,
pub bill_to: Address,
pub shipping: Option<Money>,
pub tax: Option<Money>,
pub comments: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ItemOut {
pub line_number: u32,
pub quantity: u32,
pub requested_delivery_date: Option<NaiveDate>,
pub item: Item,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct Item {
pub item_id: ItemID,
pub detail: ItemDetail,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ItemID {
pub buyer_part_id: Option<String>,
pub supplier_part_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ItemDetail {
pub unit_price: Option<Money>,
pub description: String,
pub unit_of_measure: Option<String>,
pub classification: Option<Classification>,
pub manufacturer: Option<ManufacturerInfo>,
pub extrinsic: Option<HashMap<String, String>>,
pub unit_rate: Option<UnitRate>,
pub spend_detail: Option<SpendDetail>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ManufacturerInfo {
pub part_id: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct Classification {
pub domain: ClassificationDomain,
pub code: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum ClassificationDomain {
UNSPSC,
ECLASS,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum OrderType {
New,
Update,
Delete,
}