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
+
+
+
+ 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