Skip to content

Commit a66b056

Browse files
authored
Merge pull request #279 from SebastianRzk/dev
v4.2.7
2 parents 708f07e + 4faaab3 commit a66b056

File tree

60 files changed

+1060
-797
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1060
-797
lines changed

PKGBUILD

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Maintainer: Sebastian Ruziczka <[email protected]>
22
pkgname=budgetbutlerweb-desktop
33
_pkgnameshort=budgetbutlerweb
4-
pkgver=4.2.6
4+
pkgver=4.2.7
55
pkgrel=1
66
pkgdesc="Simple and fast household book with offline and online functionality in German."
77
arch=("x86_64")

application-wrapper/BudgetButlerWeb/package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

application-wrapper/BudgetButlerWeb/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "budgetbutlerweb",
33
"productName": "budgetbutlerweb",
4-
"version": "4.2.6",
4+
"version": "4.2.7",
55
"description": "My Electron application description",
66
"main": ".webpack/main",
77
"scripts": {

butler_offline/Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

butler_offline/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "budgetbutlerweboffline"
3-
version = "4.2.6"
3+
version = "4.2.7"
44
edition = "2021"
55

66
[dependencies]

butler_offline/src/budgetbutler/database/abrechnen/gemeinsam_abrechnen/gemeinsame_abrechnung_generator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_text_generator::generiere_einfuehrungs_text;
12
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::{generiere_text, HeaderInsertModus, Metadaten, Ziel};
23
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::einzel_buchungen_text_generator::einzelbuchungen_as_import_text;
3-
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_text_generator::generiere_einfuehrungs_text;
44
use crate::io::disk::diskrepresentation::line::Line;
55
use crate::model::database::einzelbuchung::Einzelbuchung;
66
use crate::model::database::gemeinsame_buchung::GemeinsameBuchung;

butler_offline/src/budgetbutler/database/abrechnen/gemeinsam_abrechnen/gemeinsame_abrechnung_text_generator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::EinfuehrungsText;
21
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::AbrechnungsWerte;
2+
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::EinfuehrungsText;
33
use crate::io::disk::diskrepresentation::line::Line;
44
use crate::model::database::gemeinsame_buchung::GemeinsameBuchung;
55
use crate::model::indiziert::Indiziert;

butler_offline/src/budgetbutler/database/abrechnen/persoenliche_buchungen_abrechnen/abrechnung_text_generator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnungs_file::{BUCHUNGEN_END, BUCHUNGEN_START, METADATEN_ABRECHNENDE_PERSON_KEY, METADATEN_ABRECHNUNGSDATUM_KEY, METADATEN_AUSFUEHRUNGSDATUM_KEY, METADATEN_END, METADATEN_START, METADATEN_TITEL_KEY, METADATEN_ZIEL_KEY, ZIEL_ABRECHNUNG_PARTNER, ZIEL_ABRECHNUNG_SELBST, ZIEL_IMPORT_EINZELBUCHUNGEN, ZIEL_IMPORT_GEMEINSAME_BUCHUNGEN_AUS_APP};
21
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
2+
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnungs_file::{BUCHUNGEN_END, BUCHUNGEN_START, METADATEN_ABRECHNENDE_PERSON_KEY, METADATEN_ABRECHNUNGSDATUM_KEY, METADATEN_AUSFUEHRUNGSDATUM_KEY, METADATEN_END, METADATEN_START, METADATEN_TITEL_KEY, METADATEN_ZIEL_KEY, ZIEL_ABRECHNUNG_PARTNER, ZIEL_ABRECHNUNG_SELBST, ZIEL_IMPORT_EINZELBUCHUNGEN, ZIEL_IMPORT_GEMEINSAME_BUCHUNGEN_AUS_APP};
33
use crate::io::disk::diskrepresentation::line::Line;
44
use crate::model::primitives::datum::Datum;
55
use crate::model::primitives::person::Person;

butler_offline/src/budgetbutler/database/abrechnen/persoenliche_buchungen_abrechnen/history.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ fn generate_abrechnungs_title_from_metadaten(metadaten: Metadaten) -> String {
5555
}
5656
#[cfg(test)]
5757
mod tests {
58+
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
5859
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::{Metadaten, Ziel};
5960
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::history::generate_abrechnungs_title_from_metadaten;
60-
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
6161
use crate::io::disk::diskrepresentation::line::Line;
6262
use crate::model::primitives::datum::Datum;
6363
use crate::model::primitives::person::builder::person;

butler_offline/src/budgetbutler/database/abrechnen/persoenliche_buchungen_abrechnen/import/metadaten_parser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
12
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::{ziel_from_str, Metadaten};
23
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnungs_file::{SortedAbrechnungsFile, METADATEN_ABRECHNENDE_PERSON_KEY, METADATEN_ABRECHNUNGSDATUM_KEY, METADATEN_AUSFUEHRUNGSDATUM_KEY, METADATEN_TITEL_KEY, METADATEN_ZIEL_KEY};
3-
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
44
use crate::model::primitives::datum::Datum;
55
use crate::model::primitives::person::Person;
66

@@ -40,10 +40,10 @@ pub fn parse_metadaten(abrechnung: &SortedAbrechnungsFile) -> Metadaten {
4040

4141
#[cfg(test)]
4242
mod tests {
43+
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
4344
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::{Metadaten, Ziel};
4445
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnungs_file::SortedAbrechnungsFile;
4546
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::import::metadaten_parser::parse_metadaten;
46-
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Titel;
4747
use crate::io::disk::diskrepresentation::line::builder::line;
4848
use crate::model::primitives::datum::Datum;
4949
use crate::model::primitives::person::builder::person;

butler_offline/src/budgetbutler/database/abrechnen/persoenliche_buchungen_abrechnen/importer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Abrechnung;
12
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::abrechnung_text_generator::{generiere_text, BuchungenText, EinfuehrungsText, HeaderInsertModus, Metadaten};
23
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::einzel_buchungen_text_generator::{einzelbuchungen_as_import_text, gemeinsame_buchungen_as_import_text};
34
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::import::abrechnungen_sorter::{sort_abrechnungs_file, HeaderModus};
45
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::import::einzelbuchungen_parser::read_einzelbuchungen;
56
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::import::gemeinsame_buchungen_parser::read_gemeinsame_buchungen;
67
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::import::metadaten_parser::parse_metadaten;
7-
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Abrechnung;
88
use crate::io::disk::diskrepresentation::line::as_string;
99
use crate::model::primitives::datum::Datum;
1010
use crate::model::primitives::kategorie::Kategorie;
@@ -179,8 +179,8 @@ pub fn update_abrechnung_for_import(abrechnung: Abrechnung, heute: Datum) -> Abr
179179

180180
#[cfg(test)]
181181
mod tests {
182-
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::update_abrechnung_for_import;
183182
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::builder::abrechnung_from_str;
183+
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::update_abrechnung_for_import;
184184
use crate::io::disk::diskrepresentation::line::builder::as_string;
185185
use crate::model::primitives::datum::Datum;
186186
use crate::model::primitives::kategorie::kategorie;

butler_offline/src/budgetbutler/pages/shared/import.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::{import_abrechnung, update_abrechnung_for_import};
21
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Abrechnung;
2+
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::{import_abrechnung, update_abrechnung_for_import};
33
use crate::io::disk::diskrepresentation::line::Line;
44
use crate::model::primitives::datum::Datum;
55
use crate::model::state::persistent_application_state::Database;

butler_offline/src/budgetbutler/view/menu.rs

+33-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::budgetbutler::view::icons::{Icon, COGS, DASHBOARD, LINE_CHART, LIST, PLUS, RELOAD};
2+
use crate::budgetbutler::view::request_handler::ActivePage;
23
use crate::budgetbutler::view::routes::{
34
CORE_CONFIGURATION, CORE_IMPORT, CORE_RELOAD_DATABASE, EINZELBUCHUNGEN_AUSGABE_ADD,
45
EINZELBUCHUNGEN_DAUERAUFTRAG_ADD, EINZELBUCHUNGEN_DAUERAUFTRAG_UEBERSICHT,
@@ -211,22 +212,22 @@ pub struct MenuEntry {
211212
pub icon: Icon,
212213
}
213214

214-
pub fn resolve_active_group_from_url(url: &str) -> String {
215+
pub fn resolve_active_group_from_url(active_page: &ActivePage) -> String {
215216
let mut found: Option<String> = None;
216217
for entry in sparen_menu().sub_menu {
217-
if entry.url == url {
218+
if entry.url == active_page.active_page_url {
218219
found = Some(SPAREN.to_string());
219220
}
220221
}
221222

222223
for entry in gemeinsame_buchungen_menu().sub_menu {
223-
if entry.url == url {
224+
if entry.url == active_page.active_page_url {
224225
found = Some(GEMEINSAME_FINANZEN.to_string());
225226
}
226227
}
227228

228229
for entry in einstellungen_menu().sub_menu {
229-
if entry.url == url {
230+
if entry.url == active_page.active_page_url {
230231
found = Some(EINSTELLUNGEN.to_string());
231232
}
232233
}
@@ -239,23 +240,45 @@ mod tests {
239240
use super::*;
240241

241242
#[test]
242-
fn test_resolve_active_group_from_url() {
243+
fn test_resolve_active_group_from_url_should_resolve_einzelbuchungen() {
243244
assert_eq!(
244-
resolve_active_group_from_url(EINZELBUCHUNGEN_JAHRESUEBERSICHT),
245+
resolve_active_group_from_url(&ActivePage::construct_from_url(
246+
EINZELBUCHUNGEN_JAHRESUEBERSICHT
247+
)),
245248
PERSOENLICHE_FINANZEN
246249
);
247-
assert_eq!(resolve_active_group_from_url(SPAREN_UEBERSICHT), SPAREN);
250+
}
251+
252+
#[test]
253+
fn test_resolve_active_group_from_url_should_resolve_spagen() {
248254
assert_eq!(
249-
resolve_active_group_from_url(GEMEINSAME_BUCHUNGEN_UEBERSICHT),
255+
resolve_active_group_from_url(&ActivePage::construct_from_url(SPAREN_UEBERSICHT)),
256+
SPAREN
257+
);
258+
}
259+
260+
#[test]
261+
fn test_resolve_active_group_from_url_should_resolve_gemeinsame_finanzen() {
262+
assert_eq!(
263+
resolve_active_group_from_url(&ActivePage::construct_from_url(
264+
GEMEINSAME_BUCHUNGEN_UEBERSICHT
265+
)),
250266
GEMEINSAME_FINANZEN
251267
);
268+
}
269+
270+
#[test]
271+
fn test_resolve_active_group_from_url_should_resolve_einstellungen() {
252272
assert_eq!(
253-
resolve_active_group_from_url(CORE_CONFIGURATION),
273+
resolve_active_group_from_url(&ActivePage::construct_from_url(CORE_CONFIGURATION)),
254274
EINSTELLUNGEN
255275
);
276+
}
256277

278+
#[test]
279+
fn test_resolve_active_group_from_url_default_to_persoenlich_when_unknown() {
257280
assert_eq!(
258-
resolve_active_group_from_url("asdfg"),
281+
resolve_active_group_from_url(&ActivePage::construct_from_url("asdfg")),
259282
PERSOENLICHE_FINANZEN
260283
);
261284
}

butler_offline/src/budgetbutler/view/request_handler.rs

+28-17
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::io::html::views::core::error_optimistic_locking::render_error_optimis
99
use crate::io::html::views::core::zurueck_zu::{
1010
render_success_message_template, SuccessZurueckZuViewResult,
1111
};
12-
use crate::io::html::views::index::render_index_template;
12+
use crate::io::html::views::index::{render_index_template, PageTitle};
1313
use crate::model::state::config::DatabaseConfiguration;
1414
use crate::model::state::non_persistent_application_state::UserApplicationDirectory;
1515
use crate::model::state::persistent_application_state::Database;
@@ -18,20 +18,16 @@ use crate::model::state::persistent_state::database_version::{
1818
};
1919
use std::sync::Mutex;
2020

21-
pub fn handle_render_display_view<CONTEXT, ViewResult>(
22-
page_name: &str,
23-
page_url: &str,
24-
context: CONTEXT,
25-
display_function: impl Fn(CONTEXT) -> ViewResult,
26-
render_function: impl Fn(ViewResult) -> String,
21+
pub fn handle_render_display_view(
22+
page_name: PageTitle,
23+
active_page: ActivePage,
2724
database_name: String,
25+
render_view: String,
2826
) -> String {
29-
let view_result = display_function(context);
30-
let render_view = render_function(view_result);
3127
render_index_template(
32-
resolve_active_group_from_url(page_url),
33-
page_url.to_string(),
34-
page_name.to_string(),
28+
resolve_active_group_from_url(&active_page),
29+
active_page,
30+
page_name,
3531
render_view,
3632
None,
3733
database_name,
@@ -166,8 +162,8 @@ pub struct ManualRenderResult {
166162
}
167163

168164
pub fn handle_render_success_display_message(
169-
page_name: &str,
170-
page_url: &str,
165+
page_name: &'static str,
166+
active_page: ActivePage,
171167
database_name: String,
172168
context: DisplaySuccessMessage,
173169
) -> String {
@@ -176,9 +172,9 @@ pub fn handle_render_success_display_message(
176172
link: context.link_url,
177173
});
178174
render_index_template(
179-
resolve_active_group_from_url(page_url),
180-
page_url.to_string(),
181-
page_name.to_string(),
175+
resolve_active_group_from_url(&active_page),
176+
active_page,
177+
PageTitle::new(page_name),
182178
render_view,
183179
Some(SuccessMessage {
184180
message: context.message,
@@ -192,3 +188,18 @@ pub struct DisplaySuccessMessage {
192188
pub link_name: String,
193189
pub link_url: String,
194190
}
191+
192+
pub struct ActivePage {
193+
pub active_page_url: &'static str,
194+
}
195+
196+
impl ActivePage {
197+
pub fn construct_from_url(url: &'static str) -> ActivePage {
198+
ActivePage {
199+
active_page_url: url,
200+
}
201+
}
202+
}
203+
204+
#[cfg(test)]
205+
mod tests {}

butler_offline/src/budgetbutler/view/routes.rs

+2
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ pub const SPAREN_UEBERSICHT_ETFS: &str = "/uebersicht_etfs/";
3030
pub const CORE_CONFIGURATION: &str = "/configuration/";
3131
pub const CORE_RELOAD_DATABASE: &str = "/reload_database/";
3232
pub const CORE_IMPORT: &str = "/import/";
33+
34+
pub const UNKNOWN: &str = "/unknown/";

butler_offline/src/io/html/views/index.rs

+18-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::budgetbutler::view::menu::{
22
einstellungen_menu, einzelbuchungen_menu, gemeinsame_buchungen_menu, sparen_menu, RootMenu,
33
};
4-
use crate::budgetbutler::view::request_handler::SuccessMessage;
4+
use crate::budgetbutler::view::request_handler::{ActivePage, SuccessMessage};
55
use askama::Template;
66

77
#[derive(Template)]
@@ -46,18 +46,18 @@ pub struct VorgeschlageneProblembehebung {
4646

4747
pub fn map_to_template(
4848
active_menu_group: String,
49-
active_page_url: String,
50-
element_titel: String,
49+
active_page: ActivePage,
50+
page_title: PageTitle,
5151
content: String,
5252
menu: Vec<RootMenu>,
5353
success_message: Option<SuccessMessage>,
5454
name: String,
5555
) -> IndexTemplate {
5656
IndexTemplate {
5757
nutzername: name,
58-
active_page_url,
58+
active_page_url: active_page.active_page_url.to_string(),
5959
active: active_menu_group,
60-
element_titel,
60+
element_titel: page_title.title.to_string(),
6161
content,
6262
menu: map_menu_to_template(menu),
6363
info_messages: vec![],
@@ -88,15 +88,15 @@ fn map_menu_to_template(menu: Vec<RootMenu>) -> Vec<RootMenuTemplate> {
8888

8989
pub fn render_index_template(
9090
active_menu_group: String,
91-
active_page_url: String,
92-
page_title: String,
91+
active_page: ActivePage,
92+
page_title: PageTitle,
9393
content: String,
9494
success_message: Option<SuccessMessage>,
9595
name: String,
9696
) -> String {
9797
let as_template: IndexTemplate = map_to_template(
9898
active_menu_group,
99-
active_page_url,
99+
active_page,
100100
page_title,
101101
content,
102102
vec![
@@ -110,3 +110,13 @@ pub fn render_index_template(
110110
);
111111
as_template.render().unwrap()
112112
}
113+
114+
pub struct PageTitle {
115+
pub title: &'static str,
116+
}
117+
118+
impl PageTitle {
119+
pub fn new(title: &'static str) -> PageTitle {
120+
PageTitle { title }
121+
}
122+
}

butler_offline/src/io/html/views/shared/import_mapping.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::KategorieMitBeispiel;
21
use crate::budgetbutler::database::abrechnen::gemeinsam_abrechnen::gemeinsame_abrechnung_generator::Abrechnung;
2+
use crate::budgetbutler::database::abrechnen::persoenliche_buchungen_abrechnen::importer::KategorieMitBeispiel;
33
use crate::io::disk::diskrepresentation::line::as_string;
4+
use crate::io::html::input::select::Select;
45
use crate::model::primitives::kategorie::Kategorie;
56
use crate::model::state::persistent_state::database_version::DatabaseVersion;
67
pub use askama::Template;
7-
use crate::io::html::input::select::Select;
88

99
pub const ALS_NEUE_KATEGORIE_IMPORTIEREN_TEXT: &str = "Als neue Kategorie importieren";
1010

0 commit comments

Comments
 (0)