use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
type Extra = Map<String, Value>;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Contact {
pub id: String,
pub first_name: String,
pub last_name: String,
pub email: String,
pub phone: String,
pub is_primary: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Client {
pub id: String,
pub name: String,
pub display_name: String,
pub number: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub balance: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub paid_to_date: f64,
pub phone: String,
pub website: String,
pub vat_number: String,
pub public_notes: String,
pub private_notes: String,
pub contacts: Vec<Contact>,
pub is_deleted: bool,
#[serde(deserialize_with = "crate::models::de::i64_opt_flexible")]
pub created_at: Option<i64>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct InvoiceItem {
pub product_key: String,
pub notes: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub cost: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub quantity: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub line_total: f64,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Invoice {
pub id: String,
pub number: String,
pub client_id: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub amount: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub balance: f64,
pub status_id: String,
pub date: String,
pub due_date: String,
pub po_number: String,
pub public_notes: String,
pub private_notes: String,
pub terms: String,
pub footer: String,
pub line_items: Vec<InvoiceItem>,
pub is_deleted: bool,
#[serde(deserialize_with = "crate::models::de::i64_opt_flexible")]
pub created_at: Option<i64>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Payment {
pub id: String,
pub number: String,
pub client_id: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub amount: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub applied: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub refunded: f64,
pub status_id: String,
pub date: String,
pub transaction_reference: String,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Product {
pub id: String,
pub product_key: String,
pub notes: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub price: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub cost: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub quantity: f64,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Quote {
pub id: String,
pub number: String,
pub client_id: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub amount: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub balance: f64,
pub status_id: String,
pub date: String,
pub due_date: String,
pub po_number: String,
pub line_items: Vec<InvoiceItem>,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Credit {
pub id: String,
pub number: String,
pub client_id: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub amount: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub balance: f64,
pub status_id: String,
pub date: String,
pub line_items: Vec<InvoiceItem>,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Expense {
pub id: String,
pub number: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub amount: f64,
pub date: String,
pub vendor_id: String,
pub client_id: String,
pub category_id: String,
pub public_notes: String,
pub private_notes: String,
pub should_be_invoiced: bool,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Vendor {
pub id: String,
pub name: String,
pub number: String,
pub vat_number: String,
pub phone: String,
pub website: String,
pub contacts: Vec<Contact>,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Project {
pub id: String,
pub name: String,
pub number: String,
pub client_id: String,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub task_rate: f64,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub budgeted_hours: f64,
pub due_date: String,
pub public_notes: String,
pub private_notes: String,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct Task {
pub id: String,
pub number: String,
pub description: String,
pub client_id: String,
pub project_id: String,
pub time_log: String,
pub is_running: bool,
#[serde(deserialize_with = "crate::models::de::f64_flexible")]
pub rate: f64,
pub is_deleted: bool,
#[serde(flatten)]
pub extra: Extra,
}