quickbooks_types/models/
bill.rs1use chrono::NaiveDate;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5use super::common::{LinkedTxn, MetaData, NtRef};
6#[cfg(feature = "builder")]
7use crate::error::QBTypeError;
8use crate::{LineField, QBCreatable, QBDeletable, QBFullUpdatable, QBItem};
9
10#[skip_serializing_none]
11#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
12#[serde(rename_all = "PascalCase", default)]
13#[cfg_attr(
14 feature = "builder",
15 derive(Builder),
16 builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
17)]
18
19pub struct Bill {
27 pub id: Option<String>,
29 pub sync_token: Option<String>,
31 #[serde(skip_serializing)]
33 pub meta_data: Option<MetaData>,
34 pub domain: Option<String>,
36 #[serde(rename = "APAccountRef")]
38 pub ap_account_ref: Option<NtRef>,
39 pub vendor_ref: Option<NtRef>,
41 pub txn_date: Option<NaiveDate>,
43 pub total_amt: Option<f64>,
45 pub currency_ref: Option<NtRef>,
47 pub linked_txn: Option<Vec<LinkedTxn>>,
49 pub sales_term_ref: Option<NtRef>,
51 pub due_date: Option<NaiveDate>,
53 pub sparse: Option<bool>,
55 pub line: Option<LineField>,
57 pub balance: Option<f64>,
59 pub doc_number: Option<String>,
61 pub private_note: Option<String>,
63 pub exchange_rate: Option<f64>,
65 pub department_ref: Option<NtRef>,
67 pub home_balance: Option<f64>,
69 pub recur_data_ref: Option<NtRef>,
71}
72
73impl QBCreatable for Bill {
74 fn can_create(&self) -> bool {
75 self.vendor_ref.is_some() && self.line.is_some()
76 }
77}
78
79impl QBDeletable for Bill {}
80impl QBFullUpdatable for Bill {
81 fn can_full_update(&self) -> bool {
82 self.has_read() && self.vendor_ref.is_some() && self.line.is_some()
83 }
84}