FIX: format all money entries in CSV correctly FEA: allow multiple personnel billing emails

This commit is contained in:
Keanu D?lle 2022-04-21 21:15:28 +02:00
parent 187ccde762
commit ff6fa999e4
4 changed files with 18 additions and 7 deletions

View File

@ -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 #If set true members don't need billing related permissions if they are member_responsible for specific event
member_responsible_overwrites_permissions = true member_responsible_overwrites_permissions = true
send_personnel_billing_to_email = true send_personnel_billing_to_email = true
personnel_billing_email = "receiver@localhost" personnel_billing_emails = "receiver@localhost,receiver2@localhost"

View File

@ -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 #If set true members don't need billing related permissions if they are member_responsible for specific event
member_responsible_overwrites_permissions = true member_responsible_overwrites_permissions = true
send_personnel_billing_to_email = true send_personnel_billing_to_email = true
personnel_billing_email = "receiver@localhost" personnel_billing_emails = "receiver@localhost,receiver2@localhost"

View File

@ -269,11 +269,22 @@ pub async fn approve(
debug!("Generated CSV: {}", csv); debug!("Generated CSV: {}", csv);
if settings.billing.send_personnel_billing_to_email { if settings.billing.send_personnel_billing_to_email {
let attachement = Attachment::new(String::from("Einsatzabrechnung.txt")).body(csv, ContentType::parse("text/csv").unwrap()); 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()) .from(settings.mail.from.clone().parse().unwrap())
.reply_to(settings.mail.reply_to.clone().parse().unwrap()) .reply_to(settings.mail.reply_to.clone().parse().unwrap());
.to(settings.billing.personnel_billing_email.parse().unwrap()) for receiver in settings.billing.personnel_billing_emails.split(","){
.subject("Einsatzabrechnung") 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(); .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); mq.add_mail(msg);
} }

View File

@ -128,7 +128,7 @@ pub fn generate_billing_csv(settings: &State<Settings>, event_id: uuid::Uuid) ->
None => return Err(CSVGeneratorError::Generator(CSVGeneratorErrorKind::MissingTimes)) 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 => { None => {
return Err(CSVGeneratorError::Generator(CSVGeneratorErrorKind::MissingMember)); return Err(CSVGeneratorError::Generator(CSVGeneratorErrorKind::MissingMember));