use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Order {
#[serde(rename = "AmazonOrderId")]
pub amazon_order_id: String,
#[serde(rename = "SellerOrderId", skip_serializing_if = "Option::is_none")]
pub seller_order_id: Option<String>,
#[serde(rename = "PurchaseDate")]
pub purchase_date: String,
#[serde(rename = "LastUpdateDate")]
pub last_update_date: String,
#[serde(rename = "OrderStatus")]
pub order_status: OrderStatus,
#[serde(rename = "FulfillmentChannel", skip_serializing_if = "Option::is_none")]
pub fulfillment_channel: Option<FulfillmentChannel>,
#[serde(rename = "SalesChannel", skip_serializing_if = "Option::is_none")]
pub sales_channel: Option<String>,
#[serde(rename = "OrderChannel", skip_serializing_if = "Option::is_none")]
pub order_channel: Option<String>,
#[serde(rename = "ShipServiceLevel", skip_serializing_if = "Option::is_none")]
pub ship_service_level: Option<String>,
#[serde(rename = "OrderTotal", skip_serializing_if = "Option::is_none")]
pub order_total: Option<Box<models::orders_v0::Money>>,
#[serde(rename = "NumberOfItemsShipped", skip_serializing_if = "Option::is_none")]
pub number_of_items_shipped: Option<i32>,
#[serde(rename = "NumberOfItemsUnshipped", skip_serializing_if = "Option::is_none")]
pub number_of_items_unshipped: Option<i32>,
#[serde(rename = "PaymentExecutionDetail", skip_serializing_if = "Option::is_none")]
pub payment_execution_detail: Option<Vec<models::orders_v0::PaymentExecutionDetailItem>>,
#[serde(rename = "PaymentMethod", skip_serializing_if = "Option::is_none")]
pub payment_method: Option<PaymentMethod>,
#[serde(rename = "PaymentMethodDetails", skip_serializing_if = "Option::is_none")]
pub payment_method_details: Option<Vec<String>>,
#[serde(rename = "MarketplaceId", skip_serializing_if = "Option::is_none")]
pub marketplace_id: Option<String>,
#[serde(rename = "ShipmentServiceLevelCategory", skip_serializing_if = "Option::is_none")]
pub shipment_service_level_category: Option<String>,
#[serde(rename = "EasyShipShipmentStatus", skip_serializing_if = "Option::is_none")]
pub easy_ship_shipment_status: Option<models::orders_v0::EasyShipShipmentStatus>,
#[serde(rename = "CbaDisplayableShippingLabel", skip_serializing_if = "Option::is_none")]
pub cba_displayable_shipping_label: Option<String>,
#[serde(rename = "OrderType", skip_serializing_if = "Option::is_none")]
pub order_type: Option<OrderType>,
#[serde(rename = "EarliestShipDate", skip_serializing_if = "Option::is_none")]
pub earliest_ship_date: Option<String>,
#[serde(rename = "LatestShipDate", skip_serializing_if = "Option::is_none")]
pub latest_ship_date: Option<String>,
#[serde(rename = "EarliestDeliveryDate", skip_serializing_if = "Option::is_none")]
pub earliest_delivery_date: Option<String>,
#[serde(rename = "LatestDeliveryDate", skip_serializing_if = "Option::is_none")]
pub latest_delivery_date: Option<String>,
#[serde(rename = "IsBusinessOrder", skip_serializing_if = "Option::is_none")]
pub is_business_order: Option<bool>,
#[serde(rename = "IsPrime", skip_serializing_if = "Option::is_none")]
pub is_prime: Option<bool>,
#[serde(rename = "IsPremiumOrder", skip_serializing_if = "Option::is_none")]
pub is_premium_order: Option<bool>,
#[serde(rename = "IsGlobalExpressEnabled", skip_serializing_if = "Option::is_none")]
pub is_global_express_enabled: Option<bool>,
#[serde(rename = "ReplacedOrderId", skip_serializing_if = "Option::is_none")]
pub replaced_order_id: Option<String>,
#[serde(rename = "IsReplacementOrder", skip_serializing_if = "Option::is_none")]
pub is_replacement_order: Option<bool>,
#[serde(rename = "PromiseResponseDueDate", skip_serializing_if = "Option::is_none")]
pub promise_response_due_date: Option<String>,
#[serde(rename = "IsEstimatedShipDateSet", skip_serializing_if = "Option::is_none")]
pub is_estimated_ship_date_set: Option<bool>,
#[serde(rename = "IsSoldByAB", skip_serializing_if = "Option::is_none")]
pub is_sold_by_ab: Option<bool>,
#[serde(rename = "IsIBA", skip_serializing_if = "Option::is_none")]
pub is_iba: Option<bool>,
#[serde(rename = "DefaultShipFromLocationAddress", skip_serializing_if = "Option::is_none")]
pub default_ship_from_location_address: Option<Box<models::orders_v0::Address>>,
#[serde(rename = "BuyerInvoicePreference", skip_serializing_if = "Option::is_none")]
pub buyer_invoice_preference: Option<BuyerInvoicePreference>,
#[serde(rename = "BuyerTaxInformation", skip_serializing_if = "Option::is_none")]
pub buyer_tax_information: Option<Box<models::orders_v0::BuyerTaxInformation>>,
#[serde(rename = "FulfillmentInstruction", skip_serializing_if = "Option::is_none")]
pub fulfillment_instruction: Option<Box<models::orders_v0::FulfillmentInstruction>>,
#[serde(rename = "IsISPU", skip_serializing_if = "Option::is_none")]
pub is_ispu: Option<bool>,
#[serde(rename = "IsAccessPointOrder", skip_serializing_if = "Option::is_none")]
pub is_access_point_order: Option<bool>,
#[serde(rename = "MarketplaceTaxInfo", skip_serializing_if = "Option::is_none")]
pub marketplace_tax_info: Option<Box<models::orders_v0::MarketplaceTaxInfo>>,
#[serde(rename = "SellerDisplayName", skip_serializing_if = "Option::is_none")]
pub seller_display_name: Option<String>,
#[serde(rename = "ShippingAddress", skip_serializing_if = "Option::is_none")]
pub shipping_address: Option<Box<models::orders_v0::Address>>,
#[serde(rename = "BuyerInfo", skip_serializing_if = "Option::is_none")]
pub buyer_info: Option<Box<models::orders_v0::BuyerInfo>>,
#[serde(rename = "AutomatedShippingSettings", skip_serializing_if = "Option::is_none")]
pub automated_shipping_settings: Option<Box<models::orders_v0::AutomatedShippingSettings>>,
#[serde(rename = "HasRegulatedItems", skip_serializing_if = "Option::is_none")]
pub has_regulated_items: Option<bool>,
#[serde(rename = "ElectronicInvoiceStatus", skip_serializing_if = "Option::is_none")]
pub electronic_invoice_status: Option<models::orders_v0::ElectronicInvoiceStatus>,
}
impl Order {
pub fn new(amazon_order_id: String, purchase_date: String, last_update_date: String, order_status: OrderStatus) -> Order {
Order {
amazon_order_id,
seller_order_id: None,
purchase_date,
last_update_date,
order_status,
fulfillment_channel: None,
sales_channel: None,
order_channel: None,
ship_service_level: None,
order_total: None,
number_of_items_shipped: None,
number_of_items_unshipped: None,
payment_execution_detail: None,
payment_method: None,
payment_method_details: None,
marketplace_id: None,
shipment_service_level_category: None,
easy_ship_shipment_status: None,
cba_displayable_shipping_label: None,
order_type: None,
earliest_ship_date: None,
latest_ship_date: None,
earliest_delivery_date: None,
latest_delivery_date: None,
is_business_order: None,
is_prime: None,
is_premium_order: None,
is_global_express_enabled: None,
replaced_order_id: None,
is_replacement_order: None,
promise_response_due_date: None,
is_estimated_ship_date_set: None,
is_sold_by_ab: None,
is_iba: None,
default_ship_from_location_address: None,
buyer_invoice_preference: None,
buyer_tax_information: None,
fulfillment_instruction: None,
is_ispu: None,
is_access_point_order: None,
marketplace_tax_info: None,
seller_display_name: None,
shipping_address: None,
buyer_info: None,
automated_shipping_settings: None,
has_regulated_items: None,
electronic_invoice_status: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum OrderStatus {
#[serde(rename = "Pending")]
Pending,
#[serde(rename = "Unshipped")]
Unshipped,
#[serde(rename = "PartiallyShipped")]
PartiallyShipped,
#[serde(rename = "Shipped")]
Shipped,
#[serde(rename = "Canceled")]
Canceled,
#[serde(rename = "Unfulfillable")]
Unfulfillable,
#[serde(rename = "InvoiceUnconfirmed")]
InvoiceUnconfirmed,
#[serde(rename = "PendingAvailability")]
PendingAvailability,
}
impl Default for OrderStatus {
fn default() -> OrderStatus {
Self::Pending
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum FulfillmentChannel {
#[serde(rename = "MFN")]
Mfn,
#[serde(rename = "AFN")]
Afn,
}
impl Default for FulfillmentChannel {
fn default() -> FulfillmentChannel {
Self::Mfn
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum PaymentMethod {
#[serde(rename = "COD")]
Cod,
#[serde(rename = "CVS")]
Cvs,
#[serde(rename = "Other")]
Other,
}
impl Default for PaymentMethod {
fn default() -> PaymentMethod {
Self::Cod
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum OrderType {
#[serde(rename = "StandardOrder")]
StandardOrder,
#[serde(rename = "LongLeadTimeOrder")]
LongLeadTimeOrder,
#[serde(rename = "Preorder")]
Preorder,
#[serde(rename = "BackOrder")]
BackOrder,
#[serde(rename = "SourcingOnDemandOrder")]
SourcingOnDemandOrder,
}
impl Default for OrderType {
fn default() -> OrderType {
Self::StandardOrder
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum BuyerInvoicePreference {
#[serde(rename = "INDIVIDUAL")]
Individual,
#[serde(rename = "BUSINESS")]
Business,
}
impl Default for BuyerInvoicePreference {
fn default() -> BuyerInvoicePreference {
Self::Individual
}
}