use crate::RecordReference;
use bson::{DateTime, Uuid};
use serde::{Deserialize, Serialize};
pub mod rating;
pub mod product;
pub mod code_deck;
#[derive(Serialize, Deserialize, Clone)]
pub struct ServiceCharge {
#[serde(deserialize_with = "crate::shared::object_id_as_string", rename = "_id")]
pub id: String,
#[serde(rename = "customer")]
pub account: RecordReference,
pub reference: String,
pub name: String,
pub category: String,
pub description: String,
pub unit: f32,
pub price: f32,
pub qty: u16,
pub total: u16,
pub start: DateTime,
pub target: ServiceChargeTarget,
}
#[derive(Serialize, Deserialize, Clone)]
pub enum ServiceChargeTarget {
Reseller,
Direct,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(tag = "_id")]
pub enum VatType {
#[serde(rename = "uk_drc")]
UkDrc,
#[serde(rename = "uk_vat")]
UkVat,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct VatTypeStruct {
pub title: String,
pub enable: bool,
pub reverse: bool,
pub value: f32,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Finance {
pub address: Address,
pub name: String,
pub currency: String,
pub email_recipients: Vec<String>,
pub vat_number: Option<String>,
pub profile: String,
pub vat_amount: u16,
pub payment_terms: u16,
pub enable: bool,
pub email: bool,
pub drc: bool,
pub vat_type: VatType,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InvoiceGroup {
#[serde(deserialize_with = "crate::shared::object_id_as_string", rename = "_id")]
pub id: String,
pub group: String,
pub line1: String,
pub line2: String,
pub level1: String,
pub level2: String,
pub postal_code: String,
pub country: String,
pub name: String,
pub account_code: u16,
pub currency: String,
pub vat_number: String,
pub vat_amount: u8,
pub payment_terms: u8,
pub enable: bool,
pub email: bool,
pub drc: bool,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Address {
#[serde(default = "crate::shared::build_id")]
pub id: String,
#[serde(default)]
pub line1: String,
#[serde(default)]
pub line2: String,
#[serde(default)]
pub level1: String,
#[serde(default)]
pub level2: String,
#[serde(default)]
pub postal_code: String,
#[serde(default)]
pub country: String,
}
impl Default for Address {
fn default() -> Self {
Self {
id: Uuid::new().to_string(),
line1: String::from(""),
line2: String::from(""),
level1: String::from(""),
level2: String::from(""),
postal_code: String::from(""),
country: String::from(""),
}
}
}