Skip to main content

wave_api/inputs/
sales_tax.rs

1use chrono::NaiveDate;
2use rust_decimal::Decimal;
3use serde::Serialize;
4
5/// Input for creating a sales tax.
6#[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/// Input for patching a sales tax.
56#[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/// A rate input for sales tax patch.
94#[derive(Debug, Clone, Serialize)]
95#[serde(rename_all = "camelCase")]
96pub struct SalesTaxRateInput {
97    pub effective: NaiveDate,
98    pub rate: Decimal,
99}
100
101/// Input for archiving a sales tax.
102#[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}