From cd23f8ef198db53a544bfa9ae019c91d38a2b3be Mon Sep 17 00:00:00 2001 From: Christoph Beckmann Date: Fri, 21 Mar 2025 19:48:45 +0100 Subject: [PATCH] fix billing log --- src/main.rs | 5 ++- src/utils/logs.rs | 8 ++--- src/utils/logs/billing.rs | 75 ++++++++++++++++++++++++--------------- 3 files changed, 55 insertions(+), 33 deletions(-) diff --git a/src/main.rs b/src/main.rs index c88482e..b62df38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,7 +51,10 @@ fn print_config() { let slaves_by_master: &HashMap<_, _> = &SLAVES_BY_MASTER; let slave_properties: &HashMap<_, _> = &SLAVE_PROPERTIES; let machine_ids: &HashMap<_, _> = &MACHINE_IDS; - dark_grey_ln!("{slaves_by_master:#?}{slave_properties:#?}{machine_ids:#?}"); + + let data_machine: &HashMap<_, _> = &utils::logs::billing::DATA_MACHINES; + let data_user: &HashMap<_, _> = &utils::logs::billing::DATA_USER; + dark_grey_ln!("{slaves_by_master:#?}{slave_properties:#?}{machine_ids:#?}{data_machine:#?}{data_user:#?}"); } async fn create_client() -> (AsyncClient, EventLoop) { diff --git a/src/utils/logs.rs b/src/utils/logs.rs index 53d0b29..ec15fea 100644 --- a/src/utils/logs.rs +++ b/src/utils/logs.rs @@ -11,7 +11,7 @@ use crate::utils::booking::Booking; use self::billing::billinglog; -mod billing; +pub mod billing; #[derive(Debug, Serialize)] struct Record<'s> { @@ -40,7 +40,7 @@ pub fn machinelog(machine: &str, booking: &Booking) -> io::Result<()> { let file_writer = File::options() .create(true) .append(true) - .open("/root/machinelog.csv")?; + .open("machinelog.csv")?; WriterBuilder::new() .has_headers(false) @@ -56,7 +56,7 @@ pub fn log_start() -> io::Result<()> { File::options() .create(true) .append(true) - .open("/root/machinelog_debug.csv")? + .open("machinelog_debug.csv")? .write_all(format!("\n\n===== startup {} =====\n\n", Local::now()).as_bytes()) } @@ -80,6 +80,6 @@ result: {result}", File::options() .append(true) - .open("/root/machinelog_debug.csv")? + .open("machinelog_debug.csv")? .write_all(record.as_bytes()) } \ No newline at end of file diff --git a/src/utils/logs/billing.rs b/src/utils/logs/billing.rs index dd5bd37..a4143a0 100644 --- a/src/utils/logs/billing.rs +++ b/src/utils/logs/billing.rs @@ -11,29 +11,38 @@ use serde::Serialize; use crate::utils::booking::Booking; -struct MachineData { - id: i32, +#[derive(Debug, Clone)] +pub struct UserData { + id: Option, + to_be_used: bool +} + +#[derive(Debug, Clone)] +pub struct MachineData { + id: Option, to_be_used: bool, power_sense: bool, divider: i32 } lazy_static! { - static ref DATA_USER: HashMap = fs::read_to_string("DataUser.csv") + pub static ref DATA_USER: HashMap = fs::read_to_string("DataUser.csv") .expect("failed to open DataUser.csv") .lines() .map(|line| { - let (name, id) = line - .split_once(',') - .unwrap(); + let mut splits = line.split(','); - ( - name.to_string(), - id.to_string() - ) + let name = splits.next().unwrap().to_string(); + + let ud = UserData { + id : splits.next().unwrap().parse ().ok(), + to_be_used: splits.next().unwrap().parse::().unwrap_or(1) == 1, + }; + + (name, ud) }) .collect(); - static ref DATA_MACHINES: HashMap = fs::read_to_string("DataMachines.csv") + pub static ref DATA_MACHINES: HashMap = fs::read_to_string("DataMachines.csv") .expect("failed to open DataMachines.csv") .lines() .map(|line| { @@ -41,9 +50,9 @@ lazy_static! { let name = splits.next().unwrap().to_string(); let md = MachineData { - id : splits.next().unwrap().parse ().unwrap(), - to_be_used : splits.next().unwrap().parse::().unwrap() == 1, - power_sense: splits.next().unwrap().parse::().unwrap() == 1, + id : splits.next().unwrap().parse ().ok(), + to_be_used : splits.next().unwrap().parse::().unwrap_or(1) == 1, + power_sense: splits.next().unwrap().parse::().unwrap() == 1, divider : splits.next().unwrap().parse ().unwrap() }; @@ -64,23 +73,33 @@ struct BillingRecord { } pub fn billinglog(machine: &str, booking: &Booking) -> io::Result<()> { - let machine_data = &DATA_MACHINES - .get(&machine.to_string()); - - if !machine_data.is_some_and(|md| !md.to_be_used) { - return Ok(()); - } + let user_id = + if let Some(user_data) = &DATA_USER.get(&booking.user.to_string()) { + if !user_data.to_be_used { return Ok(()); } + user_data + .id + .map(|i| i.to_string()) + .unwrap_or(booking.user.to_string()) + } else { + booking.user.to_string() + }; + + let artikel_id = + if let Some(machine_data) = &DATA_MACHINES.get(&machine.to_string()) { + if !machine_data.to_be_used { return Ok(()); } + machine_data + .id + .map(|i| i.to_string()) + .unwrap_or(machine.to_string()) + } else { + machine.to_string() + }; let bill = BillingRecord { - user_id: DATA_USER - .get(&booking.user) - .unwrap_or(&booking.user) - .clone(), + user_id, quelle: "allgemeiner Beleg", brutto_netto: 2, - artikel_id: machine_data - .map(|md| md.id.to_string()) - .unwrap_or(machine.to_string()), + artikel_id, positionsdetails: Local::now() .format("%Y-%m-%d") .to_string(), @@ -96,7 +115,7 @@ pub fn billinglog(machine: &str, booking: &Booking) -> io::Result<()> { let file_writer = File::options() .create(true) .append(true) - .open("/root/billinglog.csv")?; + .open("billinglog.csv")?; WriterBuilder::new() .has_headers(false)