Calculate remaning amounts

This commit is contained in:
Quentin Boyer 2023-11-12 21:15:24 +01:00
parent 1f24117e96
commit d0fcedee2a

View file

@ -13,7 +13,7 @@ use iced::{
button, column, component, horizontal_rule, horizontal_space, row, rule, scrollable, text,
text_input,
},
window, Application, Command, Event, Length, Renderer, Settings, Theme,
window, Alignment, Application, Command, Event, Length, Renderer, Settings, Theme,
};
use iced_aw::{card, modal};
use itertools::Itertools;
@ -667,6 +667,103 @@ impl Application for Glaurung {
.values()
.chain(self.variable.values().flat_map(|(_, f)| f))
.sum::<f64>();
let total_earnings = self.earnings_1 + self.earnings_2;
let main_account = total_spendings;
let main_factor = main_account / total_earnings;
let mut remaining_1 = self.earnings_1;
let mut remaining_2 = self.earnings_2;
let mut same_percent = column![
text("Same percent").size(TEXT_H2),
text("Main account").size(TEXT_EMPH2),
text(format!(
"{}: {:.2} €",
self.config.person_1,
self.earnings_1 * main_factor
)),
text(format!(
"{}: {:.2} €",
self.config.person_2,
self.earnings_2 * main_factor
)),
];
remaining_1 -= self.earnings_1 * main_factor;
remaining_2 -= self.earnings_2 * main_factor;
let mut total_depositing = main_account;
for (account, amount) in &self.savings {
let factor = amount / total_earnings;
same_percent = same_percent
.push(text(account).size(TEXT_EMPH2))
.push(text(format!(
"{}: {:.2} €",
self.config.person_1,
self.earnings_1 * factor
)))
.push(text(format!(
"{}: {:.2} €",
self.config.person_2,
self.earnings_2 * factor
)));
remaining_1 -= self.earnings_1 * factor;
remaining_2 -= self.earnings_2 * factor;
total_depositing += amount;
}
let remaining_per_person = (total_earnings - total_depositing) / 2.;
let mut same_remaining = column![
text("Same remaining").size(TEXT_H2),
text("Main account").size(TEXT_EMPH2),
text(format!(
"{}: {:.2} €",
self.config.person_1,
self.earnings_1 - remaining_per_person
)),
text(format!(
"{}: {:.2} €",
self.config.person_2,
self.earnings_2 - remaining_per_person
)),
];
for (account, amount) in &self.savings {
same_remaining = same_remaining
.push(text(account).size(TEXT_EMPH2))
.push(text(format!(
"{}: {:.2} €",
self.config.person_1,
amount / 2.,
)))
.push(text(format!(
"{}: {:.2} €",
self.config.person_2,
amount / 2.,
)));
}
let per_person = row![
same_percent
.push(text("Remaining").size(TEXT_EMPH2))
.push(text(format!(
"{}: {remaining_1:.2} €",
self.config.person_1,
)))
.push(text(format!(
"{}: {remaining_2:.2} €",
self.config.person_2,
)),),
horizontal_space(Length::Fill),
same_remaining
.push(text("Remaining").size(TEXT_EMPH2))
.push(text(format!("{remaining_per_person:.2} € per person"))),
]
.align_items(Alignment::Start);
scrollable(
column![
@ -710,21 +807,18 @@ impl Application for Glaurung {
})
]
.align_items(iced::Alignment::Center),
text(&format!(
"Total earnings: {} €",
self.earnings_1 + self.earnings_2,
))
.size(TEXT_EMPH2),
text(&format!("Total earnings: {total_earnings}",)).size(TEXT_EMPH2),
text("Outputs").size(TEXT_H1),
text(&format!("Main account: {total_spendings}")).size(TEXT_EMPH2),
text(&format!("Main account: {main_account}")).size(TEXT_EMPH2),
component(FixedAmounts {
items: &self.savings,
title: "Savings",
add_label: "Add a saving output",
on_add: Message::AddSaving,
}),
per_person,
]
.padding(5),
.padding(15),
)
.into()
}