diff --git a/src/main.rs b/src/main.rs index cee01f6..7f2b518 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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::(); + 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() }