cal-core 0.2.158

Callable core lib
Documentation
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(""),
        }
    }
}