use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ListInvoicesParams {
pub location_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contact_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_mode: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InvoiceItem {
pub name: String,
pub description: Option<String>,
pub price: f64,
pub quantity: u32,
pub taxes: Option<Vec<serde_json::Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Invoice {
pub id: String,
pub location_id: String,
pub contact_id: Option<String>,
pub status: Option<String>,
pub items: Option<Vec<InvoiceItem>>,
pub amount: Option<f64>,
pub currency: Option<String>,
pub issue_date: Option<String>,
pub due_date: Option<String>,
pub title: Option<String>,
pub invoice_number: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetInvoicesResponse {
pub invoices: Vec<Invoice>,
pub total: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetInvoiceResponse {
pub invoice: Invoice,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateInvoiceParams {
pub location_id: String,
pub contact_id: String,
pub items: Vec<InvoiceItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issue_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub due_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub discount: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SendInvoiceParams {
pub action: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordPaymentParams {
pub mode: String,
pub notes: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenerateInvoiceNumberResponse {
#[serde(rename = "invoiceNumber")]
pub invoice_number: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InvoiceSchedule {
pub id: String,
pub invoice_id: String,
pub amount: f64,
pub due_date: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListSchedulesResponse {
pub schedules: Vec<InvoiceSchedule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetScheduleResponse {
pub schedule: InvoiceSchedule,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateScheduleParams {
pub amount: f64,
pub due_date: String,
}