wave_api/inputs/
sales_tax.rs1use chrono::NaiveDate;
2use rust_decimal::Decimal;
3use serde::Serialize;
4
5#[derive(Debug, Clone, Serialize)]
7#[serde(rename_all = "camelCase")]
8pub struct SalesTaxCreateInput {
9 pub business_id: String,
10 pub name: String,
11 pub abbreviation: String,
12 pub rate: Decimal,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub description: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub tax_number: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub show_tax_number_on_invoices: Option<bool>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub is_compound: Option<bool>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub is_recoverable: Option<bool>,
23}
24
25impl SalesTaxCreateInput {
26 pub fn new(
27 business_id: impl Into<String>,
28 name: impl Into<String>,
29 abbreviation: impl Into<String>,
30 rate: Decimal,
31 ) -> Self {
32 Self {
33 business_id: business_id.into(),
34 name: name.into(),
35 abbreviation: abbreviation.into(),
36 rate,
37 description: None,
38 tax_number: None,
39 show_tax_number_on_invoices: None,
40 is_compound: None,
41 is_recoverable: None,
42 }
43 }
44
45 pub fn description(mut self, v: impl Into<String>) -> Self {
46 self.description = Some(v.into());
47 self
48 }
49 pub fn tax_number(mut self, v: impl Into<String>) -> Self {
50 self.tax_number = Some(v.into());
51 self
52 }
53}
54
55#[derive(Debug, Clone, Serialize)]
57#[serde(rename_all = "camelCase")]
58pub struct SalesTaxPatchInput {
59 pub id: String,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub name: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub abbreviation: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub description: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub tax_number: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub show_tax_number_on_invoices: Option<bool>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub rates: Option<Vec<SalesTaxRateInput>>,
72}
73
74impl SalesTaxPatchInput {
75 pub fn new(id: impl Into<String>) -> Self {
76 Self {
77 id: id.into(),
78 name: None,
79 abbreviation: None,
80 description: None,
81 tax_number: None,
82 show_tax_number_on_invoices: None,
83 rates: None,
84 }
85 }
86
87 pub fn name(mut self, v: impl Into<String>) -> Self {
88 self.name = Some(v.into());
89 self
90 }
91}
92
93#[derive(Debug, Clone, Serialize)]
95#[serde(rename_all = "camelCase")]
96pub struct SalesTaxRateInput {
97 pub effective: NaiveDate,
98 pub rate: Decimal,
99}
100
101#[derive(Debug, Clone, Serialize)]
103#[serde(rename_all = "camelCase")]
104pub struct SalesTaxArchiveInput {
105 pub id: String,
106}
107
108impl SalesTaxArchiveInput {
109 pub fn new(id: impl Into<String>) -> Self {
110 Self { id: id.into() }
111 }
112}