From ff6fa999e41d6776c663e511b7359ea105ee05c9 Mon Sep 17 00:00:00 2001 From: Keanu D?lle Date: Thu, 21 Apr 2022 21:15:28 +0200 Subject: [PATCH] FIX: format all money entries in CSV correctly FEA: allow multiple personnel billing emails --- config/default.toml | 2 +- config/development.toml | 2 +- src/modules/api/events/update.rs | 19 +++++++++++++++---- .../event_billing/generate_billing_csv.rs | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/config/default.toml b/config/default.toml index d9e602b..e14f25a 100644 --- a/config/default.toml +++ b/config/default.toml @@ -36,4 +36,4 @@ default_pagination_limit = 20 #If set true members don't need billing related permissions if they are member_responsible for specific event member_responsible_overwrites_permissions = true send_personnel_billing_to_email = true -personnel_billing_email = "receiver@localhost" \ No newline at end of file +personnel_billing_emails = "receiver@localhost,receiver2@localhost" \ No newline at end of file diff --git a/config/development.toml b/config/development.toml index db269b2..a74366e 100644 --- a/config/development.toml +++ b/config/development.toml @@ -37,4 +37,4 @@ default_pagination_limit = 20 #If set true members don't need billing related permissions if they are member_responsible for specific event member_responsible_overwrites_permissions = true send_personnel_billing_to_email = true -personnel_billing_email = "receiver@localhost" \ No newline at end of file +personnel_billing_emails = "receiver@localhost,receiver2@localhost" \ No newline at end of file diff --git a/src/modules/api/events/update.rs b/src/modules/api/events/update.rs index 1076a09..6845d20 100644 --- a/src/modules/api/events/update.rs +++ b/src/modules/api/events/update.rs @@ -269,11 +269,22 @@ pub async fn approve( debug!("Generated CSV: {}", csv); if settings.billing.send_personnel_billing_to_email { let attachement = Attachment::new(String::from("Einsatzabrechnung.txt")).body(csv, ContentType::parse("text/csv").unwrap()); - let msg = Message::builder() + let mut msg = Message::builder() .from(settings.mail.from.clone().parse().unwrap()) - .reply_to(settings.mail.reply_to.clone().parse().unwrap()) - .to(settings.billing.personnel_billing_email.parse().unwrap()) - .subject("Einsatzabrechnung") + .reply_to(settings.mail.reply_to.clone().parse().unwrap()); + for receiver in settings.billing.personnel_billing_emails.split(","){ + match receiver.parse(){ + Ok(receiver) => { + msg = msg.to(receiver) + }, + Err(e) => { + error!("Couldn't parse settings.billing.personnel_billing_emails email {}: {}", receiver, e); + } + } + } + + let event = get_event(settings, event_id).unwrap(); + let msg = msg.subject(format!("Einsatzabrechnung: {}", event.name)) .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); } diff --git a/src/modules/event_billing/generate_billing_csv.rs b/src/modules/event_billing/generate_billing_csv.rs index ab7260c..1d23be0 100644 --- a/src/modules/event_billing/generate_billing_csv.rs +++ b/src/modules/event_billing/generate_billing_csv.rs @@ -128,7 +128,7 @@ pub fn generate_billing_csv(settings: &State, event_id: uuid::Uuid) -> None => return Err(CSVGeneratorError::Generator(CSVGeneratorErrorKind::MissingTimes)) }; - res.push_str(&format!("{},{},{},{},{},{},{},{},{}\n", sanitize(member.personnel_number.unwrap_or(0).to_string()), sanitize(member.firstname), sanitize(member.lastname), sanitize(begin), sanitize(end), sanitize(personnel.fulfilled_time.to_string()), sanitize(personnel.money_from_lump_sum.to_string()), sanitize(convert(personnel.money_for_time.clone(), 2, ',', Some('.'))), sanitize(convert(personnel.money_from_lump_sum+personnel.money_for_time, 2, ',', Some('.'))))); + res.push_str(&format!("{},{},{},{},{},{},{},{},{}\n", sanitize(member.personnel_number.unwrap_or(0).to_string()), sanitize(member.firstname), sanitize(member.lastname), sanitize(begin), sanitize(end), sanitize(personnel.fulfilled_time.to_string()), sanitize(convert(personnel.money_from_lump_sum.clone(), 2, ',', Some('.'))), sanitize(convert(personnel.money_for_time.clone(), 2, ',', Some('.'))), sanitize(convert(personnel.money_from_lump_sum+personnel.money_for_time, 2, ',', Some('.'))))); } None => { return Err(CSVGeneratorError::Generator(CSVGeneratorErrorKind::MissingMember));