order_economics.rs (6398B)
1 #![forbid(unsafe_code)] 2 3 #[cfg(not(feature = "std"))] 4 use alloc::{string::String, vec::Vec}; 5 6 use radroots_core::{Currency, Decimal, Money, Unit}; 7 8 use crate::id::{InventoryBinId, OrderQuoteId}; 9 10 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 11 #[cfg_attr(all(test, feature = "std"), dto(export))] 12 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderItem")))] 13 #[cfg_attr( 14 any(feature = "serde", test), 15 derive(serde::Serialize, serde::Deserialize) 16 )] 17 #[derive(Clone, Debug, PartialEq, Eq)] 18 pub struct OrderItem { 19 pub bin_id: InventoryBinId, 20 pub bin_count: u32, 21 } 22 23 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 24 #[cfg_attr(all(test, feature = "std"), dto(export))] 25 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderPricingBasis")))] 26 #[cfg_attr( 27 any(feature = "serde", test), 28 derive(serde::Serialize, serde::Deserialize) 29 )] 30 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))] 31 #[derive(Clone, Copy, Debug, PartialEq, Eq)] 32 pub enum OrderPricingBasis { 33 #[cfg_attr(any(feature = "serde", test), serde(rename = "listing_event"))] 34 ListingEvent, 35 } 36 37 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 38 #[cfg_attr(all(test, feature = "std"), dto(export))] 39 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicLineKind")))] 40 #[cfg_attr( 41 any(feature = "serde", test), 42 derive(serde::Serialize, serde::Deserialize) 43 )] 44 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))] 45 #[derive(Clone, Copy, Debug, PartialEq, Eq)] 46 pub enum OrderEconomicLineKind { 47 #[cfg_attr(any(feature = "serde", test), serde(rename = "listing_discount"))] 48 ListingDiscount, 49 #[cfg_attr(any(feature = "serde", test), serde(rename = "basket_adjustment"))] 50 BasketAdjustment, 51 #[cfg_attr(any(feature = "serde", test), serde(rename = "revision_adjustment"))] 52 RevisionAdjustment, 53 } 54 55 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 56 #[cfg_attr(all(test, feature = "std"), dto(export))] 57 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicActor")))] 58 #[cfg_attr( 59 any(feature = "serde", test), 60 derive(serde::Serialize, serde::Deserialize) 61 )] 62 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))] 63 #[derive(Clone, Copy, Debug, PartialEq, Eq)] 64 pub enum OrderEconomicActor { 65 #[cfg_attr(any(feature = "serde", test), serde(rename = "buyer"))] 66 Buyer, 67 #[cfg_attr(any(feature = "serde", test), serde(rename = "seller"))] 68 Seller, 69 } 70 71 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 72 #[cfg_attr(all(test, feature = "std"), dto(export))] 73 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicEffect")))] 74 #[cfg_attr( 75 any(feature = "serde", test), 76 derive(serde::Serialize, serde::Deserialize) 77 )] 78 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))] 79 #[derive(Clone, Copy, Debug, PartialEq, Eq)] 80 pub enum OrderEconomicEffect { 81 #[cfg_attr(any(feature = "serde", test), serde(rename = "increase"))] 82 Increase, 83 #[cfg_attr(any(feature = "serde", test), serde(rename = "decrease"))] 84 Decrease, 85 } 86 87 #[cfg_attr( 88 any(feature = "serde", test), 89 derive(serde::Serialize, serde::Deserialize) 90 )] 91 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 92 #[cfg_attr(all(test, feature = "std"), dto(export))] 93 #[derive(Clone, Debug, PartialEq, Eq)] 94 pub struct OrderEconomicItem { 95 pub bin_id: InventoryBinId, 96 pub bin_count: u32, 97 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Decimal")))] 98 pub quantity_amount: Decimal, 99 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Unit")))] 100 pub quantity_unit: Unit, 101 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Decimal")))] 102 pub unit_price_amount: Decimal, 103 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Currency")))] 104 pub unit_price_currency: Currency, 105 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 106 pub line_subtotal: Money, 107 } 108 109 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 110 #[cfg_attr(all(test, feature = "std"), dto(export))] 111 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicLine")))] 112 #[cfg_attr( 113 any(feature = "serde", test), 114 derive(serde::Serialize, serde::Deserialize) 115 )] 116 #[derive(Clone, Debug, PartialEq, Eq)] 117 pub struct OrderEconomicLine { 118 pub id: String, 119 pub kind: OrderEconomicLineKind, 120 pub actor: OrderEconomicActor, 121 pub effect: OrderEconomicEffect, 122 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 123 pub amount: Money, 124 pub reason: String, 125 } 126 127 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 128 #[cfg_attr(all(test, feature = "std"), dto(export))] 129 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicTotals")))] 130 #[cfg_attr( 131 any(feature = "serde", test), 132 derive(serde::Serialize, serde::Deserialize) 133 )] 134 #[derive(Clone, Debug, PartialEq, Eq)] 135 pub struct OrderEconomicTotals { 136 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 137 pub subtotal: Money, 138 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 139 pub discount_total: Money, 140 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 141 pub adjustment_total: Money, 142 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 143 pub total: Money, 144 } 145 146 #[cfg_attr( 147 any(feature = "serde", test), 148 derive(serde::Serialize, serde::Deserialize) 149 )] 150 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 151 #[cfg_attr(all(test, feature = "std"), dto(export))] 152 #[derive(Clone, Debug, PartialEq, Eq)] 153 pub struct OrderEconomics { 154 pub quote_id: OrderQuoteId, 155 pub quote_version: u32, 156 pub pricing_basis: OrderPricingBasis, 157 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Currency")))] 158 pub currency: Currency, 159 pub items: Vec<OrderEconomicItem>, 160 pub discounts: Vec<OrderEconomicLine>, 161 pub adjustments: Vec<OrderEconomicLine>, 162 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 163 pub subtotal: Money, 164 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 165 pub discount_total: Money, 166 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 167 pub adjustment_total: Money, 168 #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))] 169 pub total: Money, 170 }