diff --git a/data/accounts/C/acctchrt_business.gnucash-xea b/data/accounts/C/acctchrt_business.gnucash-xea index d770547dea..b21e191f68 100644 --- a/data/accounts/C/acctchrt_business.gnucash-xea +++ b/data/accounts/C/acctchrt_business.gnucash-xea @@ -1422,6 +1422,12 @@ 100 Opening Balances 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Retained Earnings diff --git a/data/accounts/C/acctchrt_checkbook.gnucash-xea b/data/accounts/C/acctchrt_checkbook.gnucash-xea index f3c2792192..569543223d 100644 --- a/data/accounts/C/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/C/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 Opening Balances b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/C/acctchrt_common.gnucash-xea b/data/accounts/C/acctchrt_common.gnucash-xea index 883f0cf71f..0cfb6360fb 100644 --- a/data/accounts/C/acctchrt_common.gnucash-xea +++ b/data/accounts/C/acctchrt_common.gnucash-xea @@ -783,6 +783,12 @@ Opening Balances 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/C/acctchrt_full.gnucash-xea b/data/accounts/C/acctchrt_full.gnucash-xea index acc2a8bac8..7ffe7e09d7 100644 --- a/data/accounts/C/acctchrt_full.gnucash-xea +++ b/data/accounts/C/acctchrt_full.gnucash-xea @@ -1396,6 +1396,12 @@ Opening Balances 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/da/acctchrt_common.gnucash-xea b/data/accounts/da/acctchrt_common.gnucash-xea index 05c98d6f94..efcdd580da 100644 --- a/data/accounts/da/acctchrt_common.gnucash-xea +++ b/data/accounts/da/acctchrt_common.gnucash-xea @@ -684,5 +684,11 @@ Åbningssaldi 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/de_AT/acctchrt_business.gnucash-xea b/data/accounts/de_AT/acctchrt_business.gnucash-xea index c8b7afa186..3ce69178cc 100644 --- a/data/accounts/de_AT/acctchrt_business.gnucash-xea +++ b/data/accounts/de_AT/acctchrt_business.gnucash-xea @@ -964,5 +964,11 @@ 100 Anfangsbestand 1972cce2e2364f95b2b0bc014502661d + + + equity-type + opening-balance + + diff --git a/data/accounts/de_AT/acctchrt_common.gnucash-xea b/data/accounts/de_AT/acctchrt_common.gnucash-xea index 2a361f4e11..b364ccd262 100644 --- a/data/accounts/de_AT/acctchrt_common.gnucash-xea +++ b/data/accounts/de_AT/acctchrt_common.gnucash-xea @@ -964,5 +964,11 @@ 100 Anfangsbestand 1972cce2e2364f95b2b0bc014502661d + + + equity-type + opening-balance + + diff --git a/data/accounts/de_CH/acctchrt_common.gnucash-xea b/data/accounts/de_CH/acctchrt_common.gnucash-xea index 005489c239..42bb958cca 100644 --- a/data/accounts/de_CH/acctchrt_common.gnucash-xea +++ b/data/accounts/de_CH/acctchrt_common.gnucash-xea @@ -739,5 +739,11 @@ Anfangsbestand 1972cce2e2364f95b2b0bc014502661d + + + equity-type + opening-balance + + diff --git a/data/accounts/de_DE/acctchrt_common.gnucash-xea b/data/accounts/de_DE/acctchrt_common.gnucash-xea index 461249d9ac..9db3399e98 100644 --- a/data/accounts/de_DE/acctchrt_common.gnucash-xea +++ b/data/accounts/de_DE/acctchrt_common.gnucash-xea @@ -843,6 +843,12 @@ Anfangsbestand 1972cce2e2364f95b2b0bc014502661d + + + equity-type + opening-balance + + diff --git a/data/accounts/de_DE/acctchrt_full.gnucash-xea b/data/accounts/de_DE/acctchrt_full.gnucash-xea index dde38e39d0..8b80d3d597 100644 --- a/data/accounts/de_DE/acctchrt_full.gnucash-xea +++ b/data/accounts/de_DE/acctchrt_full.gnucash-xea @@ -1192,6 +1192,12 @@ Anfangsbestand 320d3cf62b418db6281c3cd8ec2e95c7 + + + equity-type + opening-balance + + diff --git a/data/accounts/de_DE/acctchrt_skr03.gnucash-xea b/data/accounts/de_DE/acctchrt_skr03.gnucash-xea index f774dbd932..3107b1301b 100644 --- a/data/accounts/de_DE/acctchrt_skr03.gnucash-xea +++ b/data/accounts/de_DE/acctchrt_skr03.gnucash-xea @@ -1269,6 +1269,12 @@ 100 9000 26c3f10c1c7621661c1b813d6141280d + + + equity-type + opening-balance + + 9008 Saldenvorträge Debitoren diff --git a/data/accounts/de_DE/acctchrt_skr04.gnucash-xea b/data/accounts/de_DE/acctchrt_skr04.gnucash-xea index 8c78b57fdc..17beccb937 100644 --- a/data/accounts/de_DE/acctchrt_skr04.gnucash-xea +++ b/data/accounts/de_DE/acctchrt_skr04.gnucash-xea @@ -15678,6 +15678,12 @@ 100 9000 e57d948c9a884e179bd090118b9212f8 + + + equity-type + opening-balance + + Saldenvorträge Debitoren diff --git a/data/accounts/de_DE/acctchrt_skr49.gnucash-xea b/data/accounts/de_DE/acctchrt_skr49.gnucash-xea index 6351998b78..7f976f9fa2 100644 --- a/data/accounts/de_DE/acctchrt_skr49.gnucash-xea +++ b/data/accounts/de_DE/acctchrt_skr49.gnucash-xea @@ -14305,6 +14305,12 @@ Den Bereich habe ich mit „9999“ bezeichet, damit er unterhalb der regulären ffca2686cb9963bea1089b796763dda0 + + + equity-type + opening-balance + + 9001-9007 Saldenvorträge, Sachkonten diff --git a/data/accounts/el_GR/acctchrt_common.gnucash-xea b/data/accounts/el_GR/acctchrt_common.gnucash-xea index 80a881f5f5..be832eab32 100644 --- a/data/accounts/el_GR/acctchrt_common.gnucash-xea +++ b/data/accounts/el_GR/acctchrt_common.gnucash-xea @@ -786,5 +786,11 @@ Αρχικά υπόλοιπα 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/en_GB/acctchrt_business.gnucash-xea b/data/accounts/en_GB/acctchrt_business.gnucash-xea index 436b1bb7f8..2504a208ff 100644 --- a/data/accounts/en_GB/acctchrt_business.gnucash-xea +++ b/data/accounts/en_GB/acctchrt_business.gnucash-xea @@ -1420,6 +1420,12 @@ 100 Opening Balances 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Retained Earnings diff --git a/data/accounts/en_GB/acctchrt_checkbook.gnucash-xea b/data/accounts/en_GB/acctchrt_checkbook.gnucash-xea index 91167f3305..9d8227f3f8 100644 --- a/data/accounts/en_GB/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/en_GB/acctchrt_checkbook.gnucash-xea @@ -149,6 +149,12 @@ 100 Opening Balances b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/en_GB/acctchrt_common.gnucash-xea b/data/accounts/en_GB/acctchrt_common.gnucash-xea index c679f09497..dc0557988e 100644 --- a/data/accounts/en_GB/acctchrt_common.gnucash-xea +++ b/data/accounts/en_GB/acctchrt_common.gnucash-xea @@ -781,5 +781,11 @@ Opening Balances 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/en_GB/acctchrt_full.gnucash-xea b/data/accounts/en_GB/acctchrt_full.gnucash-xea index 4f6dd11a1f..c422a5426e 100644 --- a/data/accounts/en_GB/acctchrt_full.gnucash-xea +++ b/data/accounts/en_GB/acctchrt_full.gnucash-xea @@ -1393,5 +1393,11 @@ Opening Balances 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/en_GB/uk-vat.gnucash-xea b/data/accounts/en_GB/uk-vat.gnucash-xea index 8222baa89d..1cfe3a6f19 100644 --- a/data/accounts/en_GB/uk-vat.gnucash-xea +++ b/data/accounts/en_GB/uk-vat.gnucash-xea @@ -398,6 +398,12 @@ 100 c0b1160d2dd6b3059acc5083348b282f + + + equity-type + opening-balance + + Grants diff --git a/data/accounts/en_IN/acctchrt_gstindia.gnucash-xea b/data/accounts/en_IN/acctchrt_gstindia.gnucash-xea index 8530719db4..8ec978f4e8 100644 --- a/data/accounts/en_IN/acctchrt_gstindia.gnucash-xea +++ b/data/accounts/en_IN/acctchrt_gstindia.gnucash-xea @@ -1137,6 +1137,12 @@ 100 Opening Balances 599b08659324698f0177ce3dbb513e5f + + + equity-type + opening-balance + + Reserves and Surplus diff --git a/data/accounts/es_ES/acctchrt_common.gnucash-xea b/data/accounts/es_ES/acctchrt_common.gnucash-xea index 7eac72d745..64c40c516c 100644 --- a/data/accounts/es_ES/acctchrt_common.gnucash-xea +++ b/data/accounts/es_ES/acctchrt_common.gnucash-xea @@ -753,5 +753,11 @@ Balances de apertura 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/es_MX/acctchrt_common.gnucash-xea b/data/accounts/es_MX/acctchrt_common.gnucash-xea index 862ce6a937..86e61a49d6 100644 --- a/data/accounts/es_MX/acctchrt_common.gnucash-xea +++ b/data/accounts/es_MX/acctchrt_common.gnucash-xea @@ -830,5 +830,11 @@ Balances de apertura 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/fi_FI/acctchrt_ry.gnucash-xea b/data/accounts/fi_FI/acctchrt_ry.gnucash-xea index 2e906c66a1..e33ae8d99e 100644 --- a/data/accounts/fi_FI/acctchrt_ry.gnucash-xea +++ b/data/accounts/fi_FI/acctchrt_ry.gnucash-xea @@ -397,6 +397,12 @@ 100 Opening Balances 7081f24a5685d4dfcb8f143f0b7ee31d + + + equity-type + opening-balance + + diff --git a/data/accounts/fr_BE/acctchrt_business.gnucash-xea b/data/accounts/fr_BE/acctchrt_business.gnucash-xea index d851309239..8878ee26ac 100644 --- a/data/accounts/fr_BE/acctchrt_business.gnucash-xea +++ b/data/accounts/fr_BE/acctchrt_business.gnucash-xea @@ -1378,6 +1378,12 @@ Les utilisateurs gérant une entreprise sélectionneront ceci au lieu des autres 100 Soldes initiaux 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Gains enregistrés diff --git a/data/accounts/fr_BE/acctchrt_common.gnucash-xea b/data/accounts/fr_BE/acctchrt_common.gnucash-xea index 3d49f4c914..a14410017d 100644 --- a/data/accounts/fr_BE/acctchrt_common.gnucash-xea +++ b/data/accounts/fr_BE/acctchrt_common.gnucash-xea @@ -750,5 +750,11 @@ Soldes initiaux 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/fr_CH/acctchrt_business.gnucash-xea b/data/accounts/fr_CH/acctchrt_business.gnucash-xea index 9dfa99cf45..001bb3c8a4 100644 --- a/data/accounts/fr_CH/acctchrt_business.gnucash-xea +++ b/data/accounts/fr_CH/acctchrt_business.gnucash-xea @@ -1378,6 +1378,12 @@ Les utilisateurs gérant une entreprise sélectionneront ceci au lieu des autres 100 Soldes initiaux 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Gains enregistrés diff --git a/data/accounts/fr_CH/acctchrt_common.gnucash-xea b/data/accounts/fr_CH/acctchrt_common.gnucash-xea index b245735fbf..acfd3481e5 100644 --- a/data/accounts/fr_CH/acctchrt_common.gnucash-xea +++ b/data/accounts/fr_CH/acctchrt_common.gnucash-xea @@ -750,5 +750,11 @@ Soldes initiaux 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/fr_FR/acctchrt_business.gnucash-xea b/data/accounts/fr_FR/acctchrt_business.gnucash-xea index 70f02996f5..294fbfc1f8 100644 --- a/data/accounts/fr_FR/acctchrt_business.gnucash-xea +++ b/data/accounts/fr_FR/acctchrt_business.gnucash-xea @@ -1378,6 +1378,12 @@ Les utilisateurs gérant une entreprise sélectionneront ceci au lieu des autres 100 Soldes initiaux 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Gains enregistrés diff --git a/data/accounts/fr_FR/acctchrt_common.gnucash-xea b/data/accounts/fr_FR/acctchrt_common.gnucash-xea index 7909575342..cdaaaeccfb 100644 --- a/data/accounts/fr_FR/acctchrt_common.gnucash-xea +++ b/data/accounts/fr_FR/acctchrt_common.gnucash-xea @@ -750,5 +750,11 @@ Soldes initiaux 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/he/acctchrt_checkbook.gnucash-xea b/data/accounts/he/acctchrt_checkbook.gnucash-xea index ea74c81880..975c29daba 100644 --- a/data/accounts/he/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/he/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 יתרת פתיחה b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/hr/acctchrt_checkbook.gnucash-xea b/data/accounts/hr/acctchrt_checkbook.gnucash-xea index 6cd485e4c5..c55c6ee50f 100644 --- a/data/accounts/hr/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/hr/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 Početni saldo b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/hr/acctchrt_common.gnucash-xea b/data/accounts/hr/acctchrt_common.gnucash-xea index 9d52bb6d57..cce4ac53f8 100644 --- a/data/accounts/hr/acctchrt_common.gnucash-xea +++ b/data/accounts/hr/acctchrt_common.gnucash-xea @@ -800,6 +800,12 @@ Početni saldo 73f3a388cebe42a3bc40ab8db179d32d + + + equity-type + opening-balance + + diff --git a/data/accounts/hu/acctchrt_business.gnucash-xea b/data/accounts/hu/acctchrt_business.gnucash-xea index 0e190fbb66..6bc09f3047 100644 --- a/data/accounts/hu/acctchrt_business.gnucash-xea +++ b/data/accounts/hu/acctchrt_business.gnucash-xea @@ -1378,6 +1378,12 @@ 100 Nyitóegyenlegek 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Céltartalékok diff --git a/data/accounts/hu/acctchrt_checkbook.gnucash-xea b/data/accounts/hu/acctchrt_checkbook.gnucash-xea index c9ce827845..8b86cd68df 100644 --- a/data/accounts/hu/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/hu/acctchrt_checkbook.gnucash-xea @@ -139,5 +139,11 @@ 100 Nyitóegyenlegek b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/hu/acctchrt_common.gnucash-xea b/data/accounts/hu/acctchrt_common.gnucash-xea index 6728e1d1a2..f9335cd5c0 100644 --- a/data/accounts/hu/acctchrt_common.gnucash-xea +++ b/data/accounts/hu/acctchrt_common.gnucash-xea @@ -728,5 +728,11 @@ Nyitóegyenlegek 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/it/acctchrt_checkbook.gnucash-xea b/data/accounts/it/acctchrt_checkbook.gnucash-xea index 10d3ec31bd..a55cb3b15f 100644 --- a/data/accounts/it/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/it/acctchrt_checkbook.gnucash-xea @@ -144,5 +144,11 @@ 100 Bilanci d'apertura b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/it/acctchrt_common.gnucash-xea b/data/accounts/it/acctchrt_common.gnucash-xea index 075415a617..1e5b683264 100644 --- a/data/accounts/it/acctchrt_common.gnucash-xea +++ b/data/accounts/it/acctchrt_common.gnucash-xea @@ -747,5 +747,11 @@ Bilanci d'apertura 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/ja/acctchrt_business.gnucash-xea b/data/accounts/ja/acctchrt_business.gnucash-xea index d346a792b5..3ad89b710e 100644 --- a/data/accounts/ja/acctchrt_business.gnucash-xea +++ b/data/accounts/ja/acctchrt_business.gnucash-xea @@ -1414,6 +1414,12 @@ 100 開始残高 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + 内部留保 diff --git a/data/accounts/ja/acctchrt_checkbook.gnucash-xea b/data/accounts/ja/acctchrt_checkbook.gnucash-xea index 02b63dc1e4..f203a3c490 100644 --- a/data/accounts/ja/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/ja/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 開始残高 b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/ja/acctchrt_common.gnucash-xea b/data/accounts/ja/acctchrt_common.gnucash-xea index 8a5974b91d..8bee4af8d3 100644 --- a/data/accounts/ja/acctchrt_common.gnucash-xea +++ b/data/accounts/ja/acctchrt_common.gnucash-xea @@ -775,5 +775,11 @@ 開始残高 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/ja/acctchrt_full.gnucash-xea b/data/accounts/ja/acctchrt_full.gnucash-xea index 535271b506..299076812e 100644 --- a/data/accounts/ja/acctchrt_full.gnucash-xea +++ b/data/accounts/ja/acctchrt_full.gnucash-xea @@ -1390,5 +1390,11 @@ 開始残高 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/lv/acctchrt_checkbook.gnucash-xea b/data/accounts/lv/acctchrt_checkbook.gnucash-xea index 1887b72812..f0abacc0ce 100644 --- a/data/accounts/lv/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/lv/acctchrt_checkbook.gnucash-xea @@ -129,5 +129,11 @@ 100 Sākuma bilance b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/lv/acctchrt_common.gnucash-xea b/data/accounts/lv/acctchrt_common.gnucash-xea index fcfe56ac8d..6e739371fe 100644 --- a/data/accounts/lv/acctchrt_common.gnucash-xea +++ b/data/accounts/lv/acctchrt_common.gnucash-xea @@ -736,5 +736,11 @@ Kontu sākuma bilances 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/lv/acctchrt_full.gnucash-xea b/data/accounts/lv/acctchrt_full.gnucash-xea index a92df3bb80..d8afe8ee7d 100644 --- a/data/accounts/lv/acctchrt_full.gnucash-xea +++ b/data/accounts/lv/acctchrt_full.gnucash-xea @@ -1354,5 +1354,11 @@ Sākuma bilances 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/nb/acctchrt_common.gnucash-xea b/data/accounts/nb/acctchrt_common.gnucash-xea index 9b62c73059..862e086f47 100644 --- a/data/accounts/nb/acctchrt_common.gnucash-xea +++ b/data/accounts/nb/acctchrt_common.gnucash-xea @@ -739,5 +739,11 @@ Opening Balances 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/nb/acctchrt_full.gnucash-xea b/data/accounts/nb/acctchrt_full.gnucash-xea index ac1654a340..bdc03878ec 100644 --- a/data/accounts/nb/acctchrt_full.gnucash-xea +++ b/data/accounts/nb/acctchrt_full.gnucash-xea @@ -1319,5 +1319,11 @@ Opening Balances 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/nl/acctchrt_checkbook.gnucash-xea b/data/accounts/nl/acctchrt_checkbook.gnucash-xea index 0928229d69..bcfddcc291 100644 --- a/data/accounts/nl/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/nl/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 Beginsaldi b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/nl/acctchrt_full.gnucash-xea b/data/accounts/nl/acctchrt_full.gnucash-xea index 7a0ee89ca8..46f6761bee 100644 --- a/data/accounts/nl/acctchrt_full.gnucash-xea +++ b/data/accounts/nl/acctchrt_full.gnucash-xea @@ -1387,5 +1387,11 @@ Openingsbalans 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/pl/acctchrt_business.gnucash-xea b/data/accounts/pl/acctchrt_business.gnucash-xea index ac6d9dd34b..adc08f40eb 100644 --- a/data/accounts/pl/acctchrt_business.gnucash-xea +++ b/data/accounts/pl/acctchrt_business.gnucash-xea @@ -1414,6 +1414,12 @@ 100 Bilanse otwarcia 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + Zyski zatrzymane diff --git a/data/accounts/pl/acctchrt_checkbook.gnucash-xea b/data/accounts/pl/acctchrt_checkbook.gnucash-xea index 0133c929ae..2a6c201305 100644 --- a/data/accounts/pl/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/pl/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 Bilanse otwarcia b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/pl/acctchrt_common.gnucash-xea b/data/accounts/pl/acctchrt_common.gnucash-xea index 8d8a35d8f7..4c9bb65456 100644 --- a/data/accounts/pl/acctchrt_common.gnucash-xea +++ b/data/accounts/pl/acctchrt_common.gnucash-xea @@ -775,5 +775,11 @@ Bilanse otwarcia 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/pl/acctchrt_full.gnucash-xea b/data/accounts/pl/acctchrt_full.gnucash-xea index 14b62f9c31..2098358a1d 100644 --- a/data/accounts/pl/acctchrt_full.gnucash-xea +++ b/data/accounts/pl/acctchrt_full.gnucash-xea @@ -1387,5 +1387,11 @@ Bilanse otwarcia 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/data/accounts/pt_BR/acctchrt_common.gnucash-xea b/data/accounts/pt_BR/acctchrt_common.gnucash-xea index 971518a0cd..1b9df1d4be 100644 --- a/data/accounts/pt_BR/acctchrt_common.gnucash-xea +++ b/data/accounts/pt_BR/acctchrt_common.gnucash-xea @@ -728,5 +728,11 @@ Saldos Iniciais 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/pt_PT/acctchrt_common.gnucash-xea b/data/accounts/pt_PT/acctchrt_common.gnucash-xea index e3e48ae122..97a3f45b6b 100644 --- a/data/accounts/pt_PT/acctchrt_common.gnucash-xea +++ b/data/accounts/pt_PT/acctchrt_common.gnucash-xea @@ -746,5 +746,11 @@ Saldos iniciais 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/ru/acctchrt_common.gnucash-xea b/data/accounts/ru/acctchrt_common.gnucash-xea index 9108c22da9..0029599c5c 100644 --- a/data/accounts/ru/acctchrt_common.gnucash-xea +++ b/data/accounts/ru/acctchrt_common.gnucash-xea @@ -843,6 +843,12 @@ Остаток средств на начало периода 1972cce2e2364f95b2b0bc014502661d + + + equity-type + opening-balance + + diff --git a/data/accounts/tr_TR/acctchrt_TEKDUZ.gnucash-xea b/data/accounts/tr_TR/acctchrt_TEKDUZ.gnucash-xea index c539e57194..b0a76ba421 100644 --- a/data/accounts/tr_TR/acctchrt_TEKDUZ.gnucash-xea +++ b/data/accounts/tr_TR/acctchrt_TEKDUZ.gnucash-xea @@ -3835,6 +3835,12 @@ cfd3ff3dffa577973d3c1c5def43e568 + + + equity-type + opening-balance + + Ödenmemiş Sermaye(-) @@ -3871,6 +3877,12 @@ cfd3ff3dffa577973d3c1c5def43e568 + + + equity-type + opening-balance + + Sermaye Düzeltmesi Olumsuz Farkları(-) diff --git a/data/accounts/zh_CN/acctchrt_business.gnucash-xea b/data/accounts/zh_CN/acctchrt_business.gnucash-xea index 2e28e8ff7f..20696beb18 100644 --- a/data/accounts/zh_CN/acctchrt_business.gnucash-xea +++ b/data/accounts/zh_CN/acctchrt_business.gnucash-xea @@ -1414,6 +1414,12 @@ 100 期初余额 87e02e757b32b3059652cfe09fe9ae00 + + + equity-type + opening-balance + + 留存收益 diff --git a/data/accounts/zh_CN/acctchrt_checkbook.gnucash-xea b/data/accounts/zh_CN/acctchrt_checkbook.gnucash-xea index c8b04a6bc7..8624a4f0f1 100644 --- a/data/accounts/zh_CN/acctchrt_checkbook.gnucash-xea +++ b/data/accounts/zh_CN/acctchrt_checkbook.gnucash-xea @@ -147,5 +147,11 @@ 100 期初余额 b8b72887da1adf889f171923d23efbdd + + + equity-type + opening-balance + + diff --git a/data/accounts/zh_CN/acctchrt_common.gnucash-xea b/data/accounts/zh_CN/acctchrt_common.gnucash-xea index 1547f7d061..a7d21c8295 100644 --- a/data/accounts/zh_CN/acctchrt_common.gnucash-xea +++ b/data/accounts/zh_CN/acctchrt_common.gnucash-xea @@ -775,5 +775,11 @@ 期初余额 3ab6a6d97b216c11333e48aa2b749a91 + + + equity-type + opening-balance + + diff --git a/data/accounts/zh_CN/acctchrt_full.gnucash-xea b/data/accounts/zh_CN/acctchrt_full.gnucash-xea index 72306e0d46..c8e003703b 100644 --- a/data/accounts/zh_CN/acctchrt_full.gnucash-xea +++ b/data/accounts/zh_CN/acctchrt_full.gnucash-xea @@ -1387,5 +1387,11 @@ 期初余额 68d4074f91295062c0b773b4ae8de6bd + + + equity-type + opening-balance + + diff --git a/gnucash/gnome-utils/dialog-account.c b/gnucash/gnome-utils/dialog-account.c index f72debba11..3b69abdedf 100644 --- a/gnucash/gnome-utils/dialog-account.c +++ b/gnucash/gnome-utils/dialog-account.c @@ -106,6 +106,7 @@ typedef struct _AccountWindow GtkTreeView * parent_tree; GtkWidget * parent_scroll; + GtkWidget * opening_balance_button; GtkWidget * opening_balance_edit; GtkWidget * opening_balance_date_edit; GtkWidget * opening_balance_page; @@ -205,6 +206,37 @@ gnc_account_commodity_from_type (AccountWindow * aw, gboolean update) aw->commodity_mode = new_mode; } +static void +gnc_account_opening_balance_button_update (AccountWindow *aw, gnc_commodity *commodity) +{ + Account *account = aw_get_account (aw); + Account *ob_account = gnc_account_lookup_by_opening_balance (gnc_book_get_root_account (aw->book), commodity); + gboolean has_splits = xaccAccountCountSplits (account, FALSE) > 0; + + if (xaccAccountGetType (account) != ACCT_TYPE_EQUITY) + { + gtk_widget_set_sensitive (aw->opening_balance_button, FALSE); + return; + } + + /* The opening balance flag can be edited, if the associated feature is enabled and + * there is no opening balance account or we are editing the only opening balance account + * and it has no splits assigned. + */ + if (!gnc_using_equity_type_opening_balance_account (gnc_get_current_book())) + return; + + switch(aw->dialog_type) + { + case EDIT_ACCOUNT: + gtk_widget_set_sensitive (aw->opening_balance_button, (ob_account == NULL || ob_account == account) && has_splits == 0); + break; + case NEW_ACCOUNT: + gtk_widget_set_sensitive (aw->opening_balance_button, ob_account == NULL); + break; + } +} + /* Copy the account values to the GUI widgets */ static void gnc_account_to_ui(AccountWindow *aw) @@ -268,6 +300,12 @@ gnc_account_to_ui(AccountWindow *aw) gtk_text_buffer_set_text (aw->notes_text_buffer, string, strlen(string)); + gnc_account_opening_balance_button_update (aw, commodity); + + flag = xaccAccountGetIsOpeningBalance (account); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aw->opening_balance_button), + flag); + flag = xaccAccountGetTaxRelated (account); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (aw->tax_related_button), flag); @@ -434,6 +472,11 @@ gnc_ui_to_account(AccountWindow *aw) if (null_strcmp (string, old_string) != 0) xaccAccountSetNotes (account, string); + flag = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (aw->opening_balance_button)); + if (xaccAccountGetIsOpeningBalance (account) != flag) + xaccAccountSetIsOpeningBalance (account, flag); + flag = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (aw->tax_related_button)); if (xaccAccountGetTaxRelated (account) != flag) @@ -856,6 +899,9 @@ gnc_common_ok (AccountWindow *aw) return FALSE; } + /* update opening balance account */ + gnc_find_or_create_equity_account (root, EQUITY_OPENING_BALANCE, commodity); + LEAVE("passed"); return TRUE; } @@ -1271,11 +1317,33 @@ commodity_changed_cb (GNCGeneralSelect *gsl, gpointer data) AccountWindow *aw = data; gnc_commodity *currency; GtkTreeSelection *selection; + Account *account = aw_get_account (aw); currency = (gnc_commodity *) gnc_general_select_get_selected (gsl); if (!currency) return; + if (xaccAccountGetIsOpeningBalance (account)) + { + Account *ob_account = gnc_account_lookup_by_opening_balance (gnc_book_get_root_account (aw->book), currency); + if (ob_account != account) + { + gchar *dialog_msg = _("An account with opening balance already exists for the desired currency."); + gchar *dialog_title = _("Cannot change currency"); + GtkWidget *dialog = gtk_message_dialog_new (gnc_ui_get_main_window (NULL), + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "%s", dialog_title); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog), + "%s", dialog_msg); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + gnc_general_select_set_selected (gsl, xaccAccountGetCommodity (account)); + return; + } + } + gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (aw->opening_balance_edit), gnc_commodity_get_fraction (currency)); gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (aw->opening_balance_edit), @@ -1283,6 +1351,7 @@ commodity_changed_cb (GNCGeneralSelect *gsl, gpointer data) selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (aw->transfer_tree)); gtk_tree_selection_unselect_all (selection); + gnc_account_opening_balance_button_update (aw, currency); } static gboolean @@ -1420,6 +1489,7 @@ gnc_account_window_create(GtkWindow *parent, AccountWindow *aw) g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (gnc_account_parent_changed_cb), aw); + aw->opening_balance_button = GTK_WIDGET(gtk_builder_get_object (builder, "opening_balance_button")); aw->tax_related_button = GTK_WIDGET(gtk_builder_get_object (builder, "tax_related_button")); aw->placeholder_button = GTK_WIDGET(gtk_builder_get_object (builder, "placeholder_button")); aw->hidden_button = GTK_WIDGET(gtk_builder_get_object (builder, "hidden_button")); diff --git a/gnucash/gnome-utils/gnc-tree-model-account.c b/gnucash/gnome-utils/gnc-tree-model-account.c index 0a93faf4da..5c3160e5ac 100644 --- a/gnucash/gnome-utils/gnc-tree-model-account.c +++ b/gnucash/gnome-utils/gnc-tree-model-account.c @@ -420,6 +420,7 @@ gnc_tree_model_account_get_column_type (GtkTreeModel *tree_model, int index) case GNC_TREE_MODEL_ACCOUNT_COL_HIDDEN: case GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER: + case GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE: return G_TYPE_BOOLEAN; default: @@ -956,6 +957,11 @@ gnc_tree_model_account_get_value (GtkTreeModel *tree_model, g_value_set_boolean (value, xaccAccountGetPlaceholder (account)); break; + case GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE: + g_value_init (value, G_TYPE_BOOLEAN); + g_value_set_boolean (value, xaccAccountGetIsOpeningBalance (account)); + break; + default: g_assert_not_reached (); break; diff --git a/gnucash/gnome-utils/gnc-tree-model-account.h b/gnucash/gnome-utils/gnc-tree-model-account.h index 17fd76d53f..177587305e 100644 --- a/gnucash/gnome-utils/gnc-tree-model-account.h +++ b/gnucash/gnome-utils/gnc-tree-model-account.h @@ -81,8 +81,9 @@ typedef enum GNC_TREE_MODEL_ACCOUNT_COL_TAX_INFO_SUB_ACCT, GNC_TREE_MODEL_ACCOUNT_COL_HIDDEN, GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER, + GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE, - GNC_TREE_MODEL_ACCOUNT_COL_LAST_VISIBLE = GNC_TREE_MODEL_ACCOUNT_COL_PLACEHOLDER, + GNC_TREE_MODEL_ACCOUNT_COL_LAST_VISIBLE = GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE, /* internal hidden columns */ GNC_TREE_MODEL_ACCOUNT_COL_COLOR_PRESENT, diff --git a/gnucash/gnome-utils/gnc-tree-view-account.c b/gnucash/gnome-utils/gnc-tree-view-account.c index f4abff1872..0da39e1171 100644 --- a/gnucash/gnome-utils/gnc-tree-view-account.c +++ b/gnucash/gnome-utils/gnc-tree-view-account.c @@ -494,6 +494,29 @@ sort_by_placeholder (GtkTreeModel *f_model, return xaccAccountOrder(account_a, account_b); } +static gint +sort_by_opening_balance (GtkTreeModel *f_model, + GtkTreeIter *f_iter_a, + GtkTreeIter *f_iter_b, + gpointer user_data) +{ + const Account *account_a, *account_b; + gboolean flag_a, flag_b; + + /* Find the accounts */ + sort_cb_setup (f_model, f_iter_a, f_iter_b, &account_a, &account_b); + + /* Get the opening balance flags. */ + flag_a = xaccAccountGetIsOpeningBalance (account_a); + flag_b = xaccAccountGetIsOpeningBalance (account_b); + + if (flag_a > flag_b) + return -1; + else if (flag_a < flag_b) + return 1; + return xaccAccountOrder(account_a, account_b); +} + static gint sort_by_xxx_period_value (GtkTreeModel *f_model, GtkTreeIter *f_iter_a, @@ -970,6 +993,14 @@ gnc_tree_view_account_new_with_root (Account *root, gboolean show_root) sort_by_placeholder, gnc_tree_view_account_placeholder_toggled); + gnc_tree_view_add_toggle_column(view, _("Opening Balance"), + C_("Column header for 'Opening Balance'", "O"), + "opening-balance", + GNC_TREE_MODEL_ACCOUNT_COL_OPENING_BALANCE, + GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS, + sort_by_opening_balance, + NULL); + /* Add function to each column that optionally sets a background color for accounts */ col_list = gtk_tree_view_get_columns(GTK_TREE_VIEW(view)); for (node = col_list; node; node = node->next) diff --git a/gnucash/gnome/assistant-hierarchy.c b/gnucash/gnome/assistant-hierarchy.c index 40160221df..761ce56370 100644 --- a/gnucash/gnome/assistant-hierarchy.c +++ b/gnucash/gnome/assistant-hierarchy.c @@ -1423,13 +1423,6 @@ on_finish (GtkAssistant *gtkassistant, ENTER (" "); com = gnc_currency_edit_get_currency (GNC_CURRENCY_EDIT(data->currency_selector)); - if (data->our_account_tree) - { - gnc_account_foreach_descendant (data->our_account_tree, - (AccountCb)starting_balance_helper, - data); - } - // delete before we suspend GUI events, and then muck with the model, // because the model doesn't seem to handle this correctly. if (data->initial_category) @@ -1452,6 +1445,13 @@ on_finish (GtkAssistant *gtkassistant, gnc_resume_gui_refresh (); + if (data->our_account_tree) + { + gnc_account_foreach_descendant (data->our_account_tree, + (AccountCb)starting_balance_helper, + data); + } + if (when_completed) { (*when_completed)(); diff --git a/gnucash/gnome/gnc-plugin-page-account-tree.c b/gnucash/gnome/gnc-plugin-page-account-tree.c index 07654d1b76..fb2154dc4d 100644 --- a/gnucash/gnome/gnc-plugin-page-account-tree.c +++ b/gnucash/gnome/gnc-plugin-page-account-tree.c @@ -1669,6 +1669,11 @@ gnc_plugin_page_account_tree_cmd_delete_account (GtkAction *action, GncPluginPag gnc_account_n_children (account))) { do_delete_account (account, NULL, NULL, NULL); + + /* update opening balance account */ + gnc_find_or_create_equity_account (gnc_account_get_root(account), + EQUITY_OPENING_BALANCE, + xaccAccountGetCommodity (account)); return; } @@ -1703,8 +1708,15 @@ gnc_plugin_page_account_tree_cmd_delete_account (GtkAction *action, GncPluginPag adopt.subtrans.new_account, adopt.subacct.new_account, adopt.delete_res) == GTK_RESPONSE_ACCEPT) + { do_delete_account (account, adopt.subacct.new_account, adopt.subtrans.new_account, adopt.trans.new_account); + + /* update opening balance account */ + gnc_find_or_create_equity_account (gnc_account_get_root(account), + EQUITY_OPENING_BALANCE, + xaccAccountGetCommodity (account)); + } } static int diff --git a/gnucash/gtkbuilder/dialog-account.glade b/gnucash/gtkbuilder/dialog-account.glade index 18f5d9d70a..dd63585fdb 100644 --- a/gnucash/gtkbuilder/dialog-account.glade +++ b/gnucash/gtkbuilder/dialog-account.glade @@ -1504,6 +1504,23 @@ 7 + + + Opening balance + True + True + False + This account holds opening balance transactions. Only one account per commodity can hold opening balance transactions. + True + + + 1 + 11 + + + + + diff --git a/libgnucash/app-utils/gnc-ui-util.c b/libgnucash/app-utils/gnc-ui-util.c index 02f487f5b8..81aa506825 100644 --- a/libgnucash/app-utils/gnc-ui-util.c +++ b/libgnucash/app-utils/gnc-ui-util.c @@ -195,6 +195,15 @@ gnc_reverse_budget_balance (const Account *account, gboolean unreversed) return FALSE; } +gboolean gnc_using_equity_type_opening_balance_account (QofBook* book) +{ + return gnc_features_check_used (book, GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE); +} + +void gnc_set_use_equity_type_opening_balance_account (QofBook* book) +{ + gnc_features_set_used (book, GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE); +} gchar * gnc_get_default_directory (const gchar *section) @@ -955,17 +964,27 @@ gnc_find_or_create_equity_account (Account *root, gnc_commodity *currency) { Account *parent; - Account *account; + Account *account = NULL; gboolean name_exists; gboolean base_name_exists; const char *base_name; char *name; + gboolean use_eq_op_feature; g_return_val_if_fail (equity_type >= 0, NULL); g_return_val_if_fail (equity_type < NUM_EQUITY_TYPES, NULL); g_return_val_if_fail (currency != NULL, NULL); g_return_val_if_fail (root != NULL, NULL); + use_eq_op_feature = equity_type == EQUITY_OPENING_BALANCE && gnc_using_equity_type_opening_balance_account (gnc_get_current_book ()); + + if (use_eq_op_feature) + { + account = gnc_account_lookup_by_opening_balance (root, currency); + if (account) + return account; + } + base_name = equity_base_name (equity_type); account = gnc_account_lookup_by_name(root, base_name); @@ -985,7 +1004,11 @@ gnc_find_or_create_equity_account (Account *root, if (account && gnc_commodity_equiv (currency, xaccAccountGetCommodity (account))) + { + if (use_eq_op_feature) + xaccAccountSetIsOpeningBalance (account, TRUE); return account; + } name = g_strconcat (base_name, " - ", gnc_commodity_get_mnemonic (currency), NULL); @@ -997,7 +1020,11 @@ gnc_find_or_create_equity_account (Account *root, if (account && gnc_commodity_equiv (currency, xaccAccountGetCommodity (account))) + { + if (use_eq_op_feature) + xaccAccountSetIsOpeningBalance (account, TRUE); return account; + } /* Couldn't find one, so create it */ if (name_exists && base_name_exists) @@ -1027,6 +1054,9 @@ gnc_find_or_create_equity_account (Account *root, xaccAccountSetType (account, ACCT_TYPE_EQUITY); xaccAccountSetCommodity (account, currency); + if (use_eq_op_feature) + xaccAccountSetIsOpeningBalance (account, TRUE); + xaccAccountBeginEdit (parent); gnc_account_append_child (parent, account); xaccAccountCommitEdit (parent); diff --git a/libgnucash/app-utils/gnc-ui-util.h b/libgnucash/app-utils/gnc-ui-util.h index 881dd6a897..fa9839a302 100644 --- a/libgnucash/app-utils/gnc-ui-util.h +++ b/libgnucash/app-utils/gnc-ui-util.h @@ -56,6 +56,11 @@ gboolean gnc_using_unreversed_budgets (QofBook* book); * don't match, return FALSE. */ gboolean gnc_reverse_budget_balance (const Account *account, gboolean unreversed); +/* Backward compatibility ******************************************* + * Return that book's support opening balance accounts by equity type slot */ +void gnc_set_use_equity_type_opening_balance_account (QofBook* book); +gboolean gnc_using_equity_type_opening_balance_account (QofBook* book); + /* Default directory sections ***************************************/ #define GNC_PREFS_GROUP_OPEN_SAVE "dialogs.open-save" #define GNC_PREFS_GROUP_EXPORT "dialogs.export-accounts" diff --git a/libgnucash/engine/Account.cpp b/libgnucash/engine/Account.cpp index cdba3c20f0..5bcfe1a6c3 100644 --- a/libgnucash/engine/Account.cpp +++ b/libgnucash/engine/Account.cpp @@ -116,6 +116,7 @@ enum PROP_LOT_NEXT_ID, /* KVP */ PROP_ONLINE_ACCOUNT, /* KVP */ + PROP_IS_OPENING_BALANCE, /* KVP */ PROP_OFX_INCOME_ACCOUNT, /* KVP */ PROP_AB_ACCOUNT_ID, /* KVP */ PROP_AB_ACCOUNT_UID, /* KVP */ @@ -467,6 +468,9 @@ gnc_account_get_property (GObject *object, case PROP_AUTO_INTEREST: g_value_set_boolean (value, xaccAccountGetAutoInterest (account)); break; + case PROP_IS_OPENING_BALANCE: + g_value_set_boolean(value, xaccAccountGetIsOpeningBalance(account)); + break; case PROP_PLACEHOLDER: g_value_set_boolean(value, xaccAccountGetPlaceholder(account)); break; @@ -595,6 +599,9 @@ gnc_account_set_property (GObject *object, case PROP_AUTO_INTEREST: xaccAccountSetAutoInterest (account, g_value_get_boolean (value)); break; + case PROP_IS_OPENING_BALANCE: + xaccAccountSetIsOpeningBalance (account, g_value_get_boolean (value)); + break; case PROP_PLACEHOLDER: xaccAccountSetPlaceholder(account, g_value_get_boolean(value)); break; @@ -940,6 +947,15 @@ gnc_account_class_init (AccountClass *klass) FALSE, static_cast(G_PARAM_READWRITE))); + g_object_class_install_property + (gobject_class, + PROP_IS_OPENING_BALANCE, + g_param_spec_boolean ("opening-balance", + "Opening Balance", + "Whether the account holds opening balances", + FALSE, + static_cast(G_PARAM_READWRITE))); + g_object_class_install_property (gobject_class, PROP_TAX_CODE, @@ -3018,6 +3034,21 @@ gnc_account_lookup_by_code (const Account *parent, const char * code) return NULL; } +static gpointer +is_opening_balance_account (Account* account, gpointer data) +{ + gnc_commodity* commodity = GNC_COMMODITY(data); + if (xaccAccountGetIsOpeningBalance(account) && gnc_commodity_equiv(commodity, xaccAccountGetCommodity(account))) + return account; + return nullptr; +} + +Account* +gnc_account_lookup_by_opening_balance (Account* account, gnc_commodity* commodity) +{ + return (Account *)gnc_account_foreach_descendant_until (account, is_opening_balance_account, commodity); +} + /********************************************************************\ * Fetch an account, given its full name * \********************************************************************/ @@ -4128,6 +4159,22 @@ xaccAccountSetPlaceholder (Account *acc, gboolean val) set_boolean_key(acc, {"placeholder"}, val); } +gboolean +xaccAccountGetIsOpeningBalance (const Account *acc) +{ + if (GET_PRIVATE(acc)->type != ACCT_TYPE_EQUITY) + return false; + return g_strcmp0(get_kvp_string_tag(acc, "equity-type"), "opening-balance") == 0; +} + +void +xaccAccountSetIsOpeningBalance (Account *acc, gboolean val) +{ + if (GET_PRIVATE(acc)->type != ACCT_TYPE_EQUITY) + return; + set_kvp_string_tag(acc, "equity-type", val ? "opening-balance" : ""); +} + GNCPlaceholderType xaccAccountGetDescendantPlaceholder (const Account *acc) { @@ -6034,6 +6081,11 @@ gboolean xaccAccountRegister (void) (QofAccessFunc) xaccAccountGetTaxRelated, (QofSetterFunc) xaccAccountSetTaxRelated }, + { + ACCOUNT_OPENING_BALANCE_, QOF_TYPE_BOOLEAN, + (QofAccessFunc) xaccAccountGetIsOpeningBalance, + (QofSetterFunc) xaccAccountSetIsOpeningBalance + }, { ACCOUNT_SCU, QOF_TYPE_INT32, (QofAccessFunc) xaccAccountGetCommoditySCU, diff --git a/libgnucash/engine/Account.h b/libgnucash/engine/Account.h index 2afe184d9b..cb93c64a5b 100644 --- a/libgnucash/engine/Account.h +++ b/libgnucash/engine/Account.h @@ -930,6 +930,14 @@ Account *gnc_account_lookup_by_full_name (const Account *any_account, Account *gnc_account_lookup_by_code (const Account *parent, const char *code); +/** Find the opening balance account for the currency. + * + * @param account The account of which the sought-for account is a descendant. + * @param commodity The commodity in which the account should be denominated + * @return The descendant account of EQUITY_TYPE_OPENING_BALANCE or NULL if one doesn't exist. + */ +Account *gnc_account_lookup_by_opening_balance (Account *account, gnc_commodity *commodity); + /** @} */ /* ------------------ */ @@ -1191,6 +1199,22 @@ gboolean xaccAccountGetPlaceholder (const Account *account); * @param val The new state for the account's "placeholder" flag. */ void xaccAccountSetPlaceholder (Account *account, gboolean val); +/** Get the "opening-balance" flag for an account. If this flag is set + * then the account is used for opening balance transactions. + * + * @param account The account whose flag should be retrieved. + * + * @return The current state of the account's "opening-balance" flag. */ +gboolean xaccAccountGetIsOpeningBalance (const Account *account); + +/** Set the "opening-balance" flag for an account. If this flag is set + * then the account is used for opening balance transactions. + * + * @param account The account whose flag should be set. + * + * @param val The new state for the account's "opening-balance" flag. */ +void xaccAccountSetIsOpeningBalance (Account *account, gboolean val); + /** Returns PLACEHOLDER_NONE if account is NULL or neither account nor * any descendant of account is a placeholder. If account is a * placeholder, returns PLACEHOLDER_THIS. Otherwise, if any @@ -1568,6 +1592,7 @@ const char * dxaccAccountGetQuoteTZ (const Account *account); #define ACCOUNT_NOTES_ "notes" #define ACCOUNT_BALANCE_ "balance" #define ACCOUNT_NOCLOSING_ "noclosing" +#define ACCOUNT_OPENING_BALANCE_ "opening-balance" #define ACCOUNT_CLEARED_ "cleared" #define ACCOUNT_RECONCILED_ "reconciled" #define ACCOUNT_PRESENT_ "present" diff --git a/libgnucash/engine/gnc-features.c b/libgnucash/engine/gnc-features.c index 163bd36f50..10ea1009cd 100644 --- a/libgnucash/engine/gnc-features.c +++ b/libgnucash/engine/gnc-features.c @@ -51,6 +51,7 @@ static gncFeature known_features[] = { GNC_FEATURE_REG_SORT_FILTER, "Store the register sort and filter settings in .gcm metadata file (requires at least GnuCash 3.3)"}, { GNC_FEATURE_BUDGET_UNREVERSED, "Store budget amounts unreversed (i.e. natural) signs (requires at least Gnucash 3.8)"}, { GNC_FEATURE_BUDGET_SHOW_EXTRA_ACCOUNT_COLS, "Show extra account columns in the Budget View (requires at least Gnucash 3.8)"}, + { GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE, GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE " (requires at least Gnucash 4.3)" }, { NULL }, }; diff --git a/libgnucash/engine/gnc-features.h b/libgnucash/engine/gnc-features.h index 0ceeee3eb3..030c02531e 100644 --- a/libgnucash/engine/gnc-features.h +++ b/libgnucash/engine/gnc-features.h @@ -55,6 +55,7 @@ extern "C" { #define GNC_FEATURE_REG_SORT_FILTER "Register sort and filter settings stored in .gcm file" #define GNC_FEATURE_BUDGET_UNREVERSED "Use natural signs in budget amounts" #define GNC_FEATURE_BUDGET_SHOW_EXTRA_ACCOUNT_COLS "Show extra account columns in the Budget View" +#define GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE "Use a dedicated opening balance account identified by an 'equity-type' slot" /** @} */ diff --git a/libgnucash/engine/test/utest-Account.cpp b/libgnucash/engine/test/utest-Account.cpp index 7c146153d7..eab36c3253 100644 --- a/libgnucash/engine/test/utest-Account.cpp +++ b/libgnucash/engine/test/utest-Account.cpp @@ -546,7 +546,7 @@ test_gnc_account_create_and_destroy (void) GNCAccountType type; gnc_commodity *commo; gint commo_scu, mark; - gboolean non_std_scu, sort_dirty, bal_dirty, tax_rel, hide, hold; + gboolean non_std_scu, sort_dirty, bal_dirty, opening_balance, tax_rel, hide, hold; gint64 copy_num; gnc_numeric *start_bal, *start_clr_bal, *start_rec_bal; gnc_numeric *end_bal, *end_clr_bal, *end_rec_bal; @@ -571,6 +571,7 @@ test_gnc_account_create_and_destroy (void) "end-balance", &end_bal, "end-cleared-balance", &end_clr_bal, "end-reconciled-balance", &end_rec_bal, + "opening-balance", &opening_balance, "policy", &pol, "acct-mark", &mark, "tax-related", &tax_rel, @@ -599,6 +600,7 @@ test_gnc_account_create_and_destroy (void) g_assert (gnc_numeric_zero_p (*start_bal)); g_assert (gnc_numeric_zero_p (*start_clr_bal)); g_assert (gnc_numeric_zero_p (*start_rec_bal)); + g_assert (!opening_balance); g_assert (pol == xaccGetFIFOPolicy ()); g_assert (!mark); g_assert (!tax_rel); diff --git a/util/add-opening-balances b/util/add-opening-balances new file mode 100755 index 0000000000..692a0d1902 --- /dev/null +++ b/util/add-opening-balances @@ -0,0 +1,118 @@ +#!/bin/sh +# +# Find opening balance accounts by translations and add slot with key 'opening-balance' to make them translation independent +# +# @author Ralf Habacker +# +r=$(realpath $0) +r=$(dirname $r) +r=$(dirname $r) + +# debug +#grep -rn -A1 '"Opening Balances"' $r/po | grep msgstr > translation-of-opening-balance-with-files.txt +#grep -rnf translation-of-opening-balance.txt $r/data/accounts > all-opening-balances-accounts.txt + +if test -z "$1" || test "$1" == "--collect"; then + # collect all translations for 'Opening Balances' + grep -rn -A1 '"Opening Balances"' $r/po | grep msgstr | gawk '{ $1=""; print $0}' | sed 's,^ ,,g;s,",,g' | grep -v "^$" | sed 's,^,,g;s,$,.*,g' > translation-of-opening-balance.txt + + # collect all translations for 'Opening Balances' with optional last character + grep -rn -A1 '"Opening Balances"' $r/po | grep msgstr | gawk '{ $1=""; print $0}' | sed 's,^ ,,g;s,",,g' | grep -v "^$" | sed 's,^,,g;s,$,*,g' >> translation-of-opening-balance.txt + + # add custom strings + cat << EOF >> translation-of-opening-balance.txt +Openingsbalans +9000 Saldenvortrag Sachkonten +9000 Saldenvorträge Sachkonten +Saldenvorträge Sachkonten +EOF + +fi + +# collect all files that contains a translation for 'Opening Balances' +for i in $(grep -rnf translation-of-opening-balance.txt $r/data/accounts | sed 's,:[ ]*,:,g;s, ,#,g'); do + #echo $i + file=$(echo $i | sed 's,:.*$,,g') + pattern=$(echo $i | sed 's,^.*:<,<,g;s,#, ,g') + #echo "searching for $pattern in $file" + # add equity-type slot + gawk ' +BEGIN { + found = 0; + slotadded = 0; + slotpresent = 0; + patternfound = 0; +} + +# search for account name +$0 ~ PATTERN { + slotadded = 0 + slotpresent = 0 + patternfound = 1 + replace = 1 + #print "" +} + +# opening-balance slot is already available +replace && $1 == "equity-type" { + slotkeypresent = 1 +} + +slotkeypresent && $1 == "opening-balance" { + replace = 0 + slotpresent = 1 +} + +#exclude parent named like opening balance account +replace && $1 == "placeholder" { + replace = 0 +} + +# add new slots tag +replace && $1 == "" { + if (slotkeypresent) { + print FILE ": slot equity-type already present with different value, could not tag '" PATTERN "' as opening balance account" > /dev/stderr + } else { + print " " + print " " + print " equity-type" + print " opening-balance" + print " " + print " " + slotadded = 1 + replace = 0 + } +} + +{ + print $0; +} + +END { + if (!patternfound) + print FILE ": opening balance account not found with pattern " PATTERN > /dev/stderr + #if (!slotpresent && !slotadded) + #print FILE " opening balance account not found with pattern " PATTERN > /dev/stderr +} + ' "PATTERN=$pattern" $file > $file.new + mv $file.new $file +done + +oba="" +nooba="" +for i in $(find $r/data/accounts -name '*.gnucash-xea'); do + o=$(grep -Hn "opening-balance" $i) + if test -z "$o"; then + nooba="$nooba\n$i" + else + oba="$oba\n$i" + fi +done + +echo "------------------------------------------------------------" +echo -e "The following files do not have an account with slot key 'opening-balance'" +echo -e $nooba +echo +echo "------------------------------------------------------------" +echo -e "The following files have an account with slot key 'opening-balance'" +echo -e $oba