wave_api/models/
invoice.rs1use chrono::{DateTime, NaiveDate, Utc};
2use rust_decimal::Decimal;
3use serde::Deserialize;
4
5use super::account::Account;
6use super::common::{Currency, Money};
7use super::customer::Customer;
8use super::product::Product;
9use super::sales_tax::SalesTax;
10use crate::enums::{InvoiceSendMethod, InvoiceStatus};
11
12#[derive(Debug, Clone, Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct Invoice {
16 pub id: String,
17 pub created_at: DateTime<Utc>,
18 pub modified_at: DateTime<Utc>,
19 pub pdf_url: String,
20 pub view_url: String,
21 pub status: InvoiceStatus,
22 pub title: String,
23 pub subhead: Option<String>,
24 pub invoice_number: String,
25 pub po_number: Option<String>,
26 pub invoice_date: NaiveDate,
27 pub due_date: NaiveDate,
28 pub amount_due: Money,
29 pub amount_paid: Money,
30 pub tax_total: Money,
31 pub total: Money,
32 pub subtotal: Option<Money>,
33 pub discount_total: Option<Money>,
34 pub currency: Currency,
35 pub exchange_rate: Decimal,
36 pub items: Option<Vec<InvoiceItem>>,
37 pub memo: Option<String>,
38 pub footer: Option<String>,
39 pub disable_credit_card_payments: bool,
40 pub disable_bank_payments: bool,
41 pub disable_amex_payments: Option<bool>,
42 pub item_title: String,
43 pub unit_title: String,
44 pub price_title: String,
45 pub amount_title: String,
46 pub hide_name: bool,
47 pub hide_description: bool,
48 pub hide_unit: bool,
49 pub hide_price: bool,
50 pub hide_amount: bool,
51 pub last_sent_at: Option<DateTime<Utc>>,
52 pub last_sent_via: Option<InvoiceSendMethod>,
53 pub last_viewed_at: Option<DateTime<Utc>>,
54 pub customer: Option<Customer>,
55}
56
57#[derive(Debug, Clone, Deserialize)]
59#[serde(rename_all = "camelCase")]
60pub struct InvoiceItem {
61 pub product: Product,
62 pub account: Option<Account>,
63 pub description: Option<String>,
64 pub quantity: Decimal,
65 pub unit_price: Decimal,
66 pub subtotal: Money,
67 pub total: Money,
68 pub taxes: Vec<InvoiceItemTax>,
69}
70
71#[derive(Debug, Clone, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct InvoiceItemTax {
75 pub sales_tax: SalesTax,
76 pub amount: Option<Money>,
77}