FIX: billing csv generation

This commit is contained in:
Keanu D?lle 2022-05-04 13:32:17 +02:00
parent d4fbc1f791
commit f9b28752fa
6 changed files with 6 additions and 101 deletions

View File

@ -1 +1 @@
v0.2-96-g136781c
v0.2-133-gd4fbc1f

View File

@ -1,4 +1,4 @@
use diesel::{debug_query, ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, sql_query};
use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, sql_query};
use diesel::pg::types::sql_types::Uuid;
use rocket::State;

View File

@ -12,7 +12,7 @@ use rocket::State;
use crate::database::controller::connector::establish_connection;
use crate::helper::settings::Settings;
use crate::logger::{add_entry, LogActions};
use crate::logger::entries::{InsertableLogEntry, LogEntry};
use crate::logger::entries::InsertableLogEntry;
use crate::schema::password_resets::dsl::password_resets;
use crate::schema::users::dsl::users;

View File

@ -1,97 +1,4 @@
use std::borrow::BorrowMut;
use bigdecimal::BigDecimal;
use num_bigint::Sign;
pub fn convert_old(val: BigDecimal, decimal_places: u8, separator: char, thousands_separator: Option<char>) -> String{
let mut res = String::new();
let (base, exponent) = val.as_bigint_and_exponent();
let mut base = base.to_str_radix(10);
let mut base= base.chars();
let mut exp = exponent;
let mut res_base : Vec<char> = Vec::new();
let mut res_decimal_places: Vec<char> = Vec::new();
let mut thousands_counter = 0;
if exponent > 0{
let mut iter = base.rev().peekable();
//-10^exponent
loop{
match iter.next(){
Some(num) => {
println!("num: {}", num);
if exp > 0{
//There are decimal places left
exp = exp-1;
res_decimal_places.push(num);
}else{
if let Some(thsep) = thousands_separator{
if thousands_counter == 3 && iter.peek().is_some(){ //Add thousands separator if there are chars left
res_base.push(thsep);
thousands_counter = 0;
}
thousands_counter = thousands_counter +1;
}
res_base.push(num);
}
},
None => {
if exp > 0{
exp = exp-1;
res_decimal_places.push('0');
}else{
break;
}
}
}
}
//First add all non decimal places:
res.push_str(&res_base.iter().rev().collect::<String>());
if decimal_places > 0{
//There are decimal places, add saperator and add decimal places
res.push(separator);
let mut decimal_places_used = 0;
let res_decimal_places = res_decimal_places.iter().rev();
for place in res_decimal_places{
if decimal_places_used < decimal_places {
res.push(*place)
}else{
break;
}
}
}else{
if res.is_empty(){
res = "0".to_string();
}
}
}else if exponent < 0{
//10^exponent
res = String::from("test123");
}else{
let mut iter = base.rev().peekable();
while let Some(num) = iter.next(){
if let Some(thsep) = thousands_separator{
if thousands_counter == 3 && iter.peek().is_some(){ //Add thousands separator if there are chars left
res_base.push(thsep);
thousands_counter = 0;
}
thousands_counter = thousands_counter +1;
}
res_base.push(num);
}
res.push_str(&res_base.into_iter().rev().collect::<String>());
}
res
}
pub fn convert(val: BigDecimal, decimal_places: u8, seperator: char, thousands_seperator: Option<char>) -> String{
let (base, mut exponent) = val.as_bigint_and_exponent();

View File

@ -13,6 +13,7 @@ use crate::database::controller::members::check_access_to_resource;
use crate::database::model::events::Event;
use crate::helper::session_cookies::model::SessionCookie;
use crate::helper::settings::Settings;
use crate::helper::time::get_timezone;
use crate::helper::translate_diesel_error::translate_diesel;
use crate::logger::{add_entry, LogActions};
use crate::logger::entries::{EventBillingStateApproveLogEntry, InsertableLogEntry, LogEntry};
@ -284,7 +285,7 @@ pub async fn approve(
}
let event = get_event(settings, event_id).unwrap();
let msg = msg.subject(format!("Einsatzabrechnung: {}", event.name))
let msg = msg.subject(format!("Einsatzabrechnung: {} - {}", event.name, event.start.format("%d.%m.%Y").to_string()))
.multipart(MultiPart::mixed().singlepart(attachement).singlepart(SinglePart::plain(String::from("Es wurde eine Einsatzabrechnung freigegeben. Sie befindet sich im Anhang dieser E-Mail.")))).unwrap();
mq.add_mail(msg);
}

View File

@ -148,10 +148,7 @@ pub fn generate_billing_csv(settings: &State<Settings>, event_id: uuid::Uuid) ->
}
sum_total = sum_lump_sum.clone()+sum_money_for_time.clone();
res.push('\n');
res.push_str("SUMME:\n");
res.push_str(&format!("{},{},Gesamt\n", settings.billing.lump_sum_name, settings.billing.money_for_time_name));
res.push_str(&format!("{},{},{}\n", convert(sum_lump_sum.clone(), 2, ',', Some('.')), convert(sum_money_for_time.clone(), 2, ',', Some('.')), convert(sum_total, 2, ',', Some('.'))));
res.push('\n');
res.push_str(&format!(",,,,,SUMME,{},{},{}\n", sanitize(convert(sum_lump_sum.clone(), 2, ',', Some('.'))), sanitize(convert(sum_money_for_time.clone(), 2, ',', Some('.'))), sanitize(convert(sum_total, 2, ',', Some('.')))));
let billing_states = get_billing_states(settings)?;
res.push_str("Freigaben:\n");