use crate::config::Config;
use chrono::{Days, NaiveDate};
use serde::Deserialize;
pub struct Period {
pub start: NaiveDate,
pub end: NaiveDate,
}
pub struct Bill {
pub number: String,
pub currency: String,
pub vat_percent: f32,
pub issue_date: NaiveDate,
pub due_date: NaiveDate,
pub period: Option<Period>,
}
#[derive(Deserialize)]
pub struct InvoiceHoursElement {
pub name: String,
pub quantity: f32,
pub hourly_rate: f32,
pub date: Option<String>,
}
impl Bill {
pub fn new(
number: String,
issue_date: NaiveDate,
period: Option<Period>,
config: &Config,
) -> Self {
Bill {
number,
currency: config.currency.clone(),
vat_percent: config.vat_percent,
issue_date: issue_date,
due_date: (issue_date + Days::new(config.buyer.due_after_days as u64)),
period,
}
}
}