use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{
common::{MetaData, NtRef},
QBQueryable, QBReadable,
};
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
#[serde(rename_all = "PascalCase", default)]
#[cfg_attr(
feature = "builder",
derive(Builder),
builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
)]
pub struct TaxCode {
pub id: Option<String>,
pub sync_token: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub active: Option<bool>,
pub sales_tax_code: Option<bool>,
pub purchase_tax_rate_list: Option<Vec<TaxRateDetail>>,
pub sales_tax_rate_list: Option<Vec<TaxRateDetail>>,
pub tax_group: Option<bool>,
pub taxable: Option<bool>,
pub hidden: Option<bool>,
pub meta_data: Option<MetaData>,
pub tax_code_config_type: Option<TaxCodeConfigType>,
}
#[skip_serializing_none]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct TaxRateDetail {
pub tax_rate_ref: NtRef,
pub tax_type_applicable: Option<TaxTypeApplicable>,
pub tax_order: Option<i32>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[serde(rename_all = "PascalCase")]
pub enum TaxTypeApplicable {
TaxOnAmount,
TaxOnTax,
TaxOnAmountPlusTax,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum TaxCodeConfigType {
UserDefined,
SystemGenerated,
}