quickbooks_types/models/
vendor.rs1use serde::{Deserialize, Serialize};
2use serde_with::skip_serializing_none;
3
4use super::common::{Addr, Email, MetaData, NtRef, PhoneNumber, WebAddr};
5#[cfg(feature = "builder")]
6use crate::error::QBTypeError;
7use crate::{QBCreatable, QBFullUpdatable, QBItem};
8
9#[skip_serializing_none]
10#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
11#[serde(rename_all = "PascalCase", default)]
12#[cfg_attr(
13 feature = "builder",
14 derive(Builder),
15 builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
16)]
17pub struct Vendor {
24 pub id: Option<String>,
26 pub sync_token: Option<String>,
28 #[serde(skip_serializing)]
30 pub meta_data: Option<MetaData>,
31 pub title: Option<String>,
33 pub given_name: Option<String>,
35 pub middle_name: Option<String>,
37 pub suffix: Option<String>,
39 pub family_name: Option<String>,
41 pub primary_email_addr: Option<Email>,
43 pub display_name: Option<String>,
45 pub other_contact_info: Option<ContactInfo>,
47 #[serde(rename = "APAccountRef")]
49 pub ap_account_ref: Option<NtRef>,
50 pub term_ref: Option<NtRef>,
52 pub source: Option<String>,
56 #[serde(rename = "GSTIN")]
58 pub gstin: Option<String>,
59 #[serde(rename = "T4AEligible")]
61 pub t4a_eligible: Option<bool>,
62 pub fax: Option<PhoneNumber>,
64 pub business_number: Option<String>,
66 pub currency_ref: Option<NtRef>,
68 #[serde(rename = "HasTPAR")]
70 pub has_tpar: Option<bool>,
71 pub tax_reporting_basis: Option<String>,
73 pub mobile: Option<PhoneNumber>,
75 pub primary_phone: Option<PhoneNumber>,
77 pub active: Option<bool>,
79 pub alternate_phone: Option<PhoneNumber>,
81 pub vendor_1099: Option<bool>,
83 pub cost_rate: Option<f64>,
85 pub bill_rate: Option<f64>,
87 pub web_addr: Option<WebAddr>,
89 pub t5018_eligible: Option<bool>,
91 pub company_name: Option<String>,
93 pub vendor_payment_bank_detail: Option<VendorPaymentBankDetail>,
95 pub tax_identifier: Option<String>,
97 pub acct_num: Option<String>,
99 #[serde(rename = "GSTRegistrationType")]
101 pub gst_registration_type: Option<String>,
102 pub print_check_on_name: Option<String>,
104 pub bill_addr: Option<Addr>,
106 pub balance: Option<f64>,
108}
109
110#[skip_serializing_none]
114#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
115#[serde(rename_all = "PascalCase", default)]
116pub struct ContactInfo {
117 #[serde(rename = "Type")]
118 contact_type: Option<String>,
119 telephone: Option<PhoneNumber>,
120}
121
122#[skip_serializing_none]
126#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
127#[serde(rename_all = "PascalCase", default)]
128pub struct VendorPaymentBankDetail {
129 bank_account_name: Option<String>,
130 bank_branch_identifier: Option<String>,
131 bank_account_number: Option<String>,
132 statement_text: Option<String>,
133}
134
135impl QBCreatable for Vendor {
136 fn can_create(&self) -> bool {
137 self.display_name.is_some()
138 || self.suffix.is_some()
139 || self.title.is_some()
140 || self.middle_name.is_some()
141 || self.family_name.is_some()
142 || self.given_name.is_some()
143 }
144}
145
146impl QBFullUpdatable for Vendor {
147 fn can_full_update(&self) -> bool {
148 self.has_read() && self.can_create()
149 }
150}