quickbooks_types/models/
account.rs1use serde::{Deserialize, Serialize};
2use serde_with::skip_serializing_none;
3
4use super::common::{MetaData, NtRef};
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)]
17
18pub struct Account {
26 pub id: Option<String>,
28 pub sync_token: Option<String>,
30 #[serde(skip_serializing)]
32 pub meta_data: Option<MetaData>,
33 pub name: Option<String>,
35 pub acct_num: Option<String>,
37 pub currency_ref: Option<NtRef>,
39 pub parent_ref: Option<NtRef>,
41 pub descripton: Option<String>,
43 pub active: Option<bool>,
45 pub sub_account: Option<bool>,
47 pub classification: Option<String>,
49 pub fully_qualified_name: Option<String>,
51 pub txn_location_type: Option<String>,
53 pub account_type: Option<AccountType>,
55 pub current_balance_with_sub_accounts: Option<f64>,
57 pub account_alias: Option<String>,
59 pub tax_code_ref: Option<NtRef>,
61 pub account_sub_type: Option<String>,
63 pub current_balance: Option<f64>,
65}
66
67#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
72#[serde(rename_all = "PascalCase")]
73pub enum AccountType {
74 #[default]
75 TODO, }
77
78impl QBCreatable for Account {
79 fn can_create(&self) -> bool {
80 self.name.is_some() && (self.account_type.is_some() || self.account_sub_type.is_some())
81 }
82}
83
84impl QBFullUpdatable for Account {
85 fn can_full_update(&self) -> bool {
86 self.name.is_some() && self.has_read()
87 }
88}