quickbooks_types/models/
term.rs1use serde::{Deserialize, Serialize};
2use serde_with::skip_serializing_none;
3
4use crate::{common::MetaData, QBCreatable, QBFullUpdatable, QBItem};
5
6#[skip_serializing_none]
7#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
8#[serde(rename_all = "PascalCase", default)]
9#[cfg_attr(
10 feature = "builder",
11 derive(Builder),
12 builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
13)]
14pub struct Term {
21 pub id: Option<String>,
23 pub sync_token: Option<String>,
25 pub name: Option<String>,
27 pub discount_percent: Option<u16>,
29 pub discount_days: Option<u16>,
33 pub active: Option<bool>,
35 #[serde(rename = "type")]
37 pub term_type: Option<TermType>,
38 pub meta_data: Option<MetaData>,
40 pub day_of_month_due: Option<u16>,
44 pub discount_day_of_month: Option<u16>,
48 pub due_next_month_days: Option<u16>,
50 pub due_days: Option<u16>,
52}
53
54#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
55#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
56pub enum TermType {
57 Standard,
58 DateDriven,
59}
60
61impl QBCreatable for Term {
62 fn can_create(&self) -> bool {
63 self.name.is_some() && (self.day_of_month_due.is_some() || self.due_days.is_some())
64 }
65}
66
67impl QBFullUpdatable for Term {
68 fn can_full_update(&self) -> bool {
69 self.has_read() && self.can_create()
70 }
71}