use serde::{Deserialize, Serialize};
use super::common::{ListEnvelope, Money};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct InvoiceLineItemRequest {
pub description: String,
pub vat: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub ledger_account_id: Option<String>,
pub units: i64,
pub amount_per_unit: Money,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CreateInvoiceRequest {
pub customer_id: String,
pub invoice_date: String,
pub delivery_period: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_term: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub net_amounts: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub introduction: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remarks: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_method: Option<String>,
pub line_items: Vec<InvoiceLineItemRequest>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Invoice {
pub id: String,
#[serde(default)]
pub customer_id: Option<String>,
#[serde(default)]
pub invoice_number: Option<String>,
#[serde(default)]
pub invoice_status: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct ListInvoicesQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub query: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invoice_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<u32>,
}
pub type ListInvoicesResponse = ListEnvelope<Invoice>;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct InvoiceDownload {
pub download_location: String,
}