use chrono::NaiveDate;
use rust_decimal::Decimal;
use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxCreateInput {
pub business_id: String,
pub name: String,
pub abbreviation: String,
pub rate: Decimal,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tax_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_tax_number_on_invoices: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_compound: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_recoverable: Option<bool>,
}
impl SalesTaxCreateInput {
pub fn new(
business_id: impl Into<String>,
name: impl Into<String>,
abbreviation: impl Into<String>,
rate: Decimal,
) -> Self {
Self {
business_id: business_id.into(),
name: name.into(),
abbreviation: abbreviation.into(),
rate,
description: None,
tax_number: None,
show_tax_number_on_invoices: None,
is_compound: None,
is_recoverable: None,
}
}
pub fn description(mut self, v: impl Into<String>) -> Self {
self.description = Some(v.into());
self
}
pub fn tax_number(mut self, v: impl Into<String>) -> Self {
self.tax_number = Some(v.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxPatchInput {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub abbreviation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tax_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_tax_number_on_invoices: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rates: Option<Vec<SalesTaxRateInput>>,
}
impl SalesTaxPatchInput {
pub fn new(id: impl Into<String>) -> Self {
Self {
id: id.into(),
name: None,
abbreviation: None,
description: None,
tax_number: None,
show_tax_number_on_invoices: None,
rates: None,
}
}
pub fn name(mut self, v: impl Into<String>) -> Self {
self.name = Some(v.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxRateInput {
pub effective: NaiveDate,
pub rate: Decimal,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxArchiveInput {
pub id: String,
}
impl SalesTaxArchiveInput {
pub fn new(id: impl Into<String>) -> Self {
Self { id: id.into() }
}
}