1use crate::controllers::orders::{CreateOrderBuilder, UpdateOrderBuilder};
2
3use super::{
4 customers::{Billing, Shipping},
5 data::CurrencyISO,
6 MetaData,
7};
8use crate::controllers::Entity;
9use crate::TaxStatus;
10use chrono::NaiveDateTime;
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct Order {
15 pub id: i32,
17 pub parent_id: Option<i32>,
19 pub number: String,
21 pub order_key: String,
23 pub created_via: String,
25 pub version: String,
27 pub status: OrderStatus,
29 pub currency: CurrencyISO,
31 pub date_created: Option<NaiveDateTime>,
33 pub date_created_gmt: Option<NaiveDateTime>,
35 pub date_modified: Option<NaiveDateTime>,
37 pub date_modified_gmt: Option<NaiveDateTime>,
39 pub discount_total: String,
41 pub discount_tax: String,
43 pub shipping_total: String,
45 pub shipping_tax: String,
47 pub cart_tax: String,
49 pub total: String,
51 pub total_tax: String,
53 pub prices_include_tax: bool,
55 pub customer_id: i32,
57 pub customer_ip_address: String,
59 pub customer_user_agent: String,
61 pub customer_note: String,
63 pub billing: Billing,
65 pub shipping: Shipping,
67 pub payment_method: String,
69 pub payment_method_title: String,
71 pub transaction_id: String,
73 pub date_paid: Option<NaiveDateTime>,
75 pub date_paid_gmt: Option<NaiveDateTime>,
77 pub date_completed: Option<NaiveDateTime>,
79 pub date_completed_gmt: Option<NaiveDateTime>,
81 pub cart_hash: String,
83 pub meta_data: Vec<MetaData>,
85 pub line_items: Vec<OrderLineItemProperties>,
87 pub tax_lines: Vec<OrderTaxLineProperties>,
89 pub shipping_lines: Vec<ShippingLineProperties>,
91 pub fee_lines: Vec<OrderFeeLineProperties>,
93 pub coupon_lines: Vec<OrderCouponLineProperties>,
95 pub refunds: Vec<OrderRefundProperties>,
97 }
100impl Order {
101 pub fn create() -> CreateOrderBuilder {
102 CreateOrderBuilder::default()
103 }
104 pub fn update() -> UpdateOrderBuilder {
105 UpdateOrderBuilder::default()
106 }
107}
108impl Entity for Order {
109 fn endpoint() -> String {
110 String::from("orders/")
111 }
112 fn child_endpoint(parent_id: i32) -> String {
113 let _ = parent_id;
114 String::new()
115 }
116}
117#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
118#[serde(rename_all = "kebab-case")]
119pub enum OrderStatus {
120 #[default]
121 Pending,
122 Processing,
123 OnHold,
124 Completed,
125 Cancelled,
126 Refunded,
127 Failed,
128 Trash,
129 Draft,
130}
131#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct OrderLineItemProperties {
133 pub id: i32,
135 pub name: String,
137 pub product_id: i32,
139 pub variation_id: Option<i32>,
141 pub quantity: i32,
143 pub tax_class: String,
145 pub subtotal: String,
147 pub subtotal_tax: String,
149 pub total: String,
151 pub total_tax: String,
153 pub taxes: Vec<OrderTax>,
155 pub meta_data: Vec<MetaData>,
157 pub sku: Option<String>,
159 pub price: f64,
161}
162#[derive(Debug, Clone, Serialize, Deserialize)]
163pub struct OrderTaxLineProperties {
164 pub id: i32,
166 pub rate_code: String,
168 pub rate_id: String,
170 pub label: String,
172 pub compound: bool,
174 pub tax_total: String,
176 pub shipping_tax_total: String,
178 pub meta_data: Vec<MetaData>,
180}
181#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct ShippingLineProperties {
183 pub id: i32,
185 pub method_title: String,
187 pub method_id: String,
189 pub total: String,
191 pub total_tax: String,
193 pub taxes: Vec<OrderTax>,
195 pub meta_data: Vec<MetaData>,
197}
198#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct OrderFeeLineProperties {
200 pub id: i32,
202 pub name: String,
204 pub tax_class: String,
206 pub tax_status: TaxStatus,
208 pub total: String,
210 pub total_tax: String,
212 pub taxes: Vec<OrderTax>,
214 pub meta_data: Vec<MetaData>,
216}
217
218#[derive(Debug, Clone, Serialize, Deserialize)]
219pub struct OrderCouponLineProperties {
220 pub id: i32,
222 pub code: String,
224 pub discount: String,
226 pub discount_tax: String,
228 pub meta_data: Vec<MetaData>,
230}
231#[derive(Debug, Clone, Serialize, Deserialize)]
232pub struct OrderRefundProperties {
233 pub id: i32,
235 pub reason: String,
237 pub total: String,
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct OrderTax {
243 pub id: i32,
245 pub rate_code: String,
247 pub rate_id: String,
249 pub label: String,
251 pub compound: bool,
253 pub tax_total: String,
255 pub shipping_tax_total: String,
257 pub meta_data: Vec<MetaData>,
259}