quickbooks_types/models/
invoice.rs1use chrono::NaiveDate;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5use super::common::{
6 Addr, CustomField, DeliveryInfo, Email, EmailStatus, LinkedTxn, MetaData, NtRef, PrintStatus,
7 TxnTaxDetail,
8};
9#[cfg(feature = "builder")]
10use crate::error::QBTypeError;
11use crate::{
12 LineField, QBCreatable, QBDeletable, QBFullUpdatable, QBItem, QBPDFable, QBSendable,
13 QBSparseUpdateable, QBVoidable,
14};
15
16#[skip_serializing_none]
17#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
18#[serde(rename_all = "PascalCase", default)]
19#[cfg_attr(
20 feature = "builder",
21 derive(Builder),
22 builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
23)]
24pub struct Invoice {
35 pub id: Option<String>,
37 pub sync_token: Option<String>,
39 #[serde(skip_serializing)]
41 pub meta_data: Option<MetaData>,
42 pub ship_from_addr: Option<Addr>,
44 pub ship_date: Option<NaiveDate>,
46 pub tracking_num: Option<String>,
48 pub class_ref: Option<NtRef>,
50 pub txn_source: Option<String>,
52 pub deposit_to_account_ref: Option<NtRef>,
54 #[serde(rename = "AllowOnlineACHPayment")]
56 pub allow_online_ach_payment: Option<bool>,
57 pub line: Option<LineField>,
59 pub private_note: Option<String>,
61 pub delivery_info: Option<DeliveryInfo>,
63 pub bill_email_cc: Option<Email>,
65 pub bill_email_bcc: Option<Email>,
67 pub ship_method_reef: Option<NtRef>,
69 pub apply_tax_after_discount: Option<bool>,
71 pub customer_memo: Option<NtRef>,
73 pub customer_ref: Option<NtRef>,
75 pub txn_date: Option<NaiveDate>,
77 pub domain: Option<String>,
79 pub print_status: Option<PrintStatus>,
81 pub sales_term_ref: Option<NtRef>,
83 pub exchange_rate: Option<f64>,
85 pub deposit: Option<f64>,
87 pub allow_online_credit_card_payment: Option<bool>,
89 pub department_ref: Option<NtRef>,
91 pub email_status: Option<EmailStatus>,
93 pub due_date: Option<NaiveDate>,
95 pub home_balance: Option<f64>,
97 pub total_amt: Option<f64>,
99 pub invoice_link: Option<String>,
101 pub recur_data_ref: Option<NtRef>,
103 pub tax_exemption_ref: Option<NtRef>,
105 pub balance: Option<f64>,
107 pub home_total_amt: Option<f64>,
109 pub free_form_address: Option<bool>,
111 #[serde(rename = "sparse")]
113 pub sparse: Option<bool>,
114 pub doc_number: Option<String>,
116 pub txn_tax_detail: Option<TxnTaxDetail>,
118 pub linked_txn: Option<Vec<LinkedTxn>>,
120 pub bill_email: Option<Email>,
122 pub ship_addr: Option<Addr>,
124 pub bill_addr: Option<Addr>,
126 pub custom_field: Option<Vec<CustomField>>,
128}
129
130impl QBCreatable for Invoice {
131 fn can_create(&self) -> bool {
132 self.customer_ref.is_some() && self.line.can_create()
133 }
134}
135
136impl QBDeletable for Invoice {}
137impl QBVoidable for Invoice {}
138
139impl QBFullUpdatable for Invoice {
140 fn can_full_update(&self) -> bool {
141 self.has_read() && self.can_create()
142 }
143}
144
145impl QBSparseUpdateable for Invoice {
146 fn can_sparse_update(&self) -> bool {
147 self.can_full_update()
148 }
149}
150
151impl QBSendable for Invoice {}
152impl QBPDFable for Invoice {}