odoo-addon-account-financial-report 15.0.2.10.5.3__py3-none-any.whl → 15.0.2.11.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of odoo-addon-account-financial-report might be problematic. Click here for more details.
- odoo/addons/account_financial_report/README.rst +1 -1
- odoo/addons/account_financial_report/__manifest__.py +1 -1
- odoo/addons/account_financial_report/i18n/account_financial_report.pot +15 -0
- odoo/addons/account_financial_report/i18n/es.po +14 -1
- odoo/addons/account_financial_report/report/open_items.py +29 -25
- odoo/addons/account_financial_report/report/open_items_xlsx.py +150 -17
- odoo/addons/account_financial_report/report/templates/open_items.xml +183 -56
- odoo/addons/account_financial_report/static/description/index.html +8 -5
- odoo/addons/account_financial_report/tests/test_open_items.py +22 -0
- odoo/addons/account_financial_report/wizard/open_items_wizard.py +18 -0
- odoo/addons/account_financial_report/wizard/open_items_wizard_view.xml +1 -0
- {odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info → odoo_addon_account_financial_report-15.0.2.11.0.dist-info}/METADATA +2 -2
- {odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info → odoo_addon_account_financial_report-15.0.2.11.0.dist-info}/RECORD +15 -15
- {odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info → odoo_addon_account_financial_report-15.0.2.11.0.dist-info}/WHEEL +0 -0
- {odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info → odoo_addon_account_financial_report-15.0.2.11.0.dist-info}/top_level.txt +0 -0
|
@@ -7,7 +7,7 @@ Account Financial Reports
|
|
|
7
7
|
!! This file is generated by oca-gen-addon-readme !!
|
|
8
8
|
!! changes will be overwritten. !!
|
|
9
9
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
10
|
-
!! source digest: sha256:
|
|
10
|
+
!! source digest: sha256:496f9a74d723710fa89431853e8e4bf5ca3ea5676a7e325ae5ae2d0056a9764b
|
|
11
11
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
12
12
|
|
|
13
13
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
@@ -700,6 +700,7 @@ msgstr ""
|
|
|
700
700
|
#. module: account_financial_report
|
|
701
701
|
#: code:addons/account_financial_report/report/general_ledger_xlsx.py:0
|
|
702
702
|
#: code:addons/account_financial_report/report/open_items_xlsx.py:0
|
|
703
|
+
#: code:addons/account_financial_report/report/open_items_xlsx.py:0
|
|
703
704
|
#: code:addons/account_financial_report/report/trial_balance_xlsx.py:0
|
|
704
705
|
#: code:addons/account_financial_report/report/trial_balance_xlsx.py:0
|
|
705
706
|
#: code:addons/account_financial_report/report/trial_balance_xlsx.py:0
|
|
@@ -902,6 +903,7 @@ msgstr ""
|
|
|
902
903
|
|
|
903
904
|
#. module: account_financial_report
|
|
904
905
|
#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__grouped_by
|
|
906
|
+
#: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard__grouped_by
|
|
905
907
|
msgid "Grouped By"
|
|
906
908
|
msgstr ""
|
|
907
909
|
|
|
@@ -1129,12 +1131,19 @@ msgstr ""
|
|
|
1129
1131
|
#: code:addons/account_financial_report/report/general_ledger.py:0
|
|
1130
1132
|
#: code:addons/account_financial_report/report/general_ledger.py:0
|
|
1131
1133
|
#: code:addons/account_financial_report/report/open_items.py:0
|
|
1134
|
+
#: code:addons/account_financial_report/report/open_items_xlsx.py:0
|
|
1132
1135
|
#: code:addons/account_financial_report/report/trial_balance.py:0
|
|
1133
1136
|
#: code:addons/account_financial_report/report/trial_balance.py:0
|
|
1134
1137
|
#, python-format
|
|
1135
1138
|
msgid "Missing Partner"
|
|
1136
1139
|
msgstr ""
|
|
1137
1140
|
|
|
1141
|
+
#. module: account_financial_report
|
|
1142
|
+
#: code:addons/account_financial_report/report/open_items.py:0
|
|
1143
|
+
#, python-format
|
|
1144
|
+
msgid "Missing Salesperson"
|
|
1145
|
+
msgstr ""
|
|
1146
|
+
|
|
1138
1147
|
#. module: account_financial_report
|
|
1139
1148
|
#: model:ir.model,name:account_financial_report.model_account_age_report_configuration_line
|
|
1140
1149
|
msgid "Model to set interval lines for Age partner balance report"
|
|
@@ -1333,6 +1342,11 @@ msgstr ""
|
|
|
1333
1342
|
msgid "Partner Initial balance"
|
|
1334
1343
|
msgstr ""
|
|
1335
1344
|
|
|
1345
|
+
#. module: account_financial_report
|
|
1346
|
+
#: model:ir.model.fields.selection,name:account_financial_report.selection__open_items_report_wizard__grouped_by__salesperson
|
|
1347
|
+
msgid "Partner Salesperson"
|
|
1348
|
+
msgstr ""
|
|
1349
|
+
|
|
1336
1350
|
#. module: account_financial_report
|
|
1337
1351
|
#: code:addons/account_financial_report/report/aged_partner_balance_xlsx.py:0
|
|
1338
1352
|
#, python-format
|
|
@@ -1355,6 +1369,7 @@ msgstr ""
|
|
|
1355
1369
|
|
|
1356
1370
|
#. module: account_financial_report
|
|
1357
1371
|
#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__partners
|
|
1372
|
+
#: model:ir.model.fields.selection,name:account_financial_report.selection__open_items_report_wizard__grouped_by__partners
|
|
1358
1373
|
msgid "Partners"
|
|
1359
1374
|
msgstr ""
|
|
1360
1375
|
|
|
@@ -917,6 +917,7 @@ msgstr "Agrupar por"
|
|
|
917
917
|
|
|
918
918
|
#. module: account_financial_report
|
|
919
919
|
#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__grouped_by
|
|
920
|
+
#: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard__grouped_by
|
|
920
921
|
msgid "Grouped By"
|
|
921
922
|
msgstr "Agrupado por"
|
|
922
923
|
|
|
@@ -1151,7 +1152,13 @@ msgstr "Línea"
|
|
|
1151
1152
|
#: code:addons/account_financial_report/report/trial_balance.py:0
|
|
1152
1153
|
#, python-format
|
|
1153
1154
|
msgid "Missing Partner"
|
|
1154
|
-
msgstr "Falta
|
|
1155
|
+
msgstr "Falta la empresa"
|
|
1156
|
+
|
|
1157
|
+
#. module: account_financial_report
|
|
1158
|
+
#: code:addons/account_financial_report/report/open_items.py:0
|
|
1159
|
+
#, python-format
|
|
1160
|
+
msgid "Missing Salesperson"
|
|
1161
|
+
msgstr "Sin comercial"
|
|
1155
1162
|
|
|
1156
1163
|
#. module: account_financial_report
|
|
1157
1164
|
#: model:ir.model,name:account_financial_report.model_account_age_report_configuration_line
|
|
@@ -1353,6 +1360,11 @@ msgstr ""
|
|
|
1353
1360
|
msgid "Partner Initial balance"
|
|
1354
1361
|
msgstr "Saldo Inicial de empresa"
|
|
1355
1362
|
|
|
1363
|
+
#. module: account_financial_report
|
|
1364
|
+
#: model:ir.model.fields.selection,name:account_financial_report.selection__open_items_report_wizard__grouped_by__salesperson
|
|
1365
|
+
msgid "Partner Salesperson"
|
|
1366
|
+
msgstr "Comercial de la empresa"
|
|
1367
|
+
|
|
1356
1368
|
#. module: account_financial_report
|
|
1357
1369
|
#: code:addons/account_financial_report/report/aged_partner_balance_xlsx.py:0
|
|
1358
1370
|
#, python-format
|
|
@@ -1375,6 +1387,7 @@ msgstr "Saldo inicial de empresa"
|
|
|
1375
1387
|
|
|
1376
1388
|
#. module: account_financial_report
|
|
1377
1389
|
#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__partners
|
|
1390
|
+
#: model:ir.model.fields.selection,name:account_financial_report.selection__open_items_report_wizard__grouped_by__partners
|
|
1378
1391
|
msgid "Partners"
|
|
1379
1392
|
msgstr "Empresas"
|
|
1380
1393
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# © 2016 Julien Coux (Camptocamp)
|
|
2
2
|
# Copyright 2020 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
3
|
+
# Copyright 2024 Tecnativa - Carolina Fernandez
|
|
3
4
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
4
5
|
|
|
5
6
|
import operator
|
|
@@ -66,6 +67,7 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
66
67
|
only_posted_moves,
|
|
67
68
|
company_id,
|
|
68
69
|
date_from,
|
|
70
|
+
grouped_by,
|
|
69
71
|
):
|
|
70
72
|
domain = self._get_move_lines_domain_not_reconciled(
|
|
71
73
|
company_id, account_ids, partner_ids, only_posted_moves, date_from
|
|
@@ -75,7 +77,7 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
75
77
|
domain=domain, fields=ml_fields
|
|
76
78
|
)
|
|
77
79
|
journals_ids = set()
|
|
78
|
-
|
|
80
|
+
group_ids = set()
|
|
79
81
|
partners_data = {}
|
|
80
82
|
if date_at_object < date.today():
|
|
81
83
|
(
|
|
@@ -119,29 +121,27 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
119
121
|
journals_ids.add(move_line["journal_id"][0])
|
|
120
122
|
acc_id = move_line["account_id"][0]
|
|
121
123
|
# Partners data
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
partner = self.env["res.partner"]
|
|
125
|
+
if move_line.get("partner_id"):
|
|
126
|
+
partner = self.env["res.partner"].browse(move_line["partner_id"][0])
|
|
127
|
+
if grouped_by == "salesperson":
|
|
128
|
+
user = partner.user_id
|
|
129
|
+
group_id = user.id or 0
|
|
130
|
+
group_name = user.name or _("Missing Salesperson")
|
|
125
131
|
else:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if
|
|
129
|
-
partners_data.update({
|
|
130
|
-
|
|
131
|
-
|
|
132
|
+
group_id = partner.id or 0
|
|
133
|
+
group_name = partner.name or _("Missing Partner")
|
|
134
|
+
if group_id not in group_ids:
|
|
135
|
+
partners_data.update({group_id: {"id": group_id, "name": group_name}})
|
|
136
|
+
group_ids.add(group_id)
|
|
132
137
|
# Move line update
|
|
133
|
-
original = 0
|
|
134
|
-
|
|
135
138
|
if not float_is_zero(move_line["credit"], precision_digits=2):
|
|
136
139
|
original = move_line["credit"] * (-1)
|
|
137
|
-
|
|
140
|
+
else:
|
|
138
141
|
original = move_line["debit"]
|
|
139
142
|
|
|
140
143
|
if move_line["ref"] == move_line["name"]:
|
|
141
|
-
|
|
142
|
-
ref_label = move_line["ref"]
|
|
143
|
-
else:
|
|
144
|
-
ref_label = ""
|
|
144
|
+
ref_label = move_line["ref"] or ""
|
|
145
145
|
elif not move_line["ref"]:
|
|
146
146
|
ref_label = move_line["name"]
|
|
147
147
|
elif not move_line["name"]:
|
|
@@ -155,8 +155,8 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
155
155
|
"date_maturity": move_line["date_maturity"]
|
|
156
156
|
and move_line["date_maturity"].strftime("%d/%m/%Y"),
|
|
157
157
|
"original": original,
|
|
158
|
-
"partner_id":
|
|
159
|
-
"partner_name":
|
|
158
|
+
"partner_id": partner.id or 0,
|
|
159
|
+
"partner_name": partner.name or "",
|
|
160
160
|
"ref_label": ref_label,
|
|
161
161
|
"journal_id": move_line["journal_id"][0],
|
|
162
162
|
"move_name": move_line["move_id"][1],
|
|
@@ -172,12 +172,12 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
172
172
|
|
|
173
173
|
# Open Items Move Lines Data
|
|
174
174
|
if acc_id not in open_items_move_lines_data.keys():
|
|
175
|
-
open_items_move_lines_data[acc_id] = {
|
|
175
|
+
open_items_move_lines_data[acc_id] = {group_id: [move_line]}
|
|
176
176
|
else:
|
|
177
|
-
if
|
|
178
|
-
open_items_move_lines_data[acc_id][
|
|
177
|
+
if group_id not in open_items_move_lines_data[acc_id].keys():
|
|
178
|
+
open_items_move_lines_data[acc_id][group_id] = [move_line]
|
|
179
179
|
else:
|
|
180
|
-
open_items_move_lines_data[acc_id][
|
|
180
|
+
open_items_move_lines_data[acc_id][group_id].append(move_line)
|
|
181
181
|
journals_data = self._get_journals_data(list(journals_ids))
|
|
182
182
|
accounts_data = self._get_accounts_data(open_items_move_lines_data.keys())
|
|
183
183
|
return (
|
|
@@ -229,7 +229,9 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
229
229
|
move_lines = []
|
|
230
230
|
for move_line in open_items_move_lines_data[acc_id][prt_id]:
|
|
231
231
|
move_lines += [move_line]
|
|
232
|
-
move_lines = sorted(
|
|
232
|
+
move_lines = sorted(
|
|
233
|
+
move_lines, key=lambda k: (k["date"], k["partner_id"])
|
|
234
|
+
)
|
|
233
235
|
new_open_items[acc_id][prt_id] = move_lines
|
|
234
236
|
return new_open_items
|
|
235
237
|
|
|
@@ -244,7 +246,7 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
244
246
|
date_from = data["date_from"]
|
|
245
247
|
only_posted_moves = data["only_posted_moves"]
|
|
246
248
|
show_partner_details = data["show_partner_details"]
|
|
247
|
-
|
|
249
|
+
grouped_by = data["grouped_by"]
|
|
248
250
|
(
|
|
249
251
|
move_lines_data,
|
|
250
252
|
partners_data,
|
|
@@ -258,6 +260,7 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
258
260
|
only_posted_moves,
|
|
259
261
|
company_id,
|
|
260
262
|
date_from,
|
|
263
|
+
grouped_by,
|
|
261
264
|
)
|
|
262
265
|
|
|
263
266
|
total_amount = self._calculate_amounts(open_items_move_lines_data)
|
|
@@ -280,6 +283,7 @@ class OpenItemsReport(models.AbstractModel):
|
|
|
280
283
|
"accounts_data": accounts_data,
|
|
281
284
|
"total_amount": total_amount,
|
|
282
285
|
"Open_Items": open_items_move_lines_data,
|
|
286
|
+
"grouped_by": grouped_by,
|
|
283
287
|
}
|
|
284
288
|
|
|
285
289
|
def _get_ml_fields(self):
|
|
@@ -101,11 +101,126 @@ class OpenItemsXslx(models.AbstractModel):
|
|
|
101
101
|
def _get_col_pos_final_balance_label(self):
|
|
102
102
|
return 5
|
|
103
103
|
|
|
104
|
-
def
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
def _calculate_amounts_by_partner(self, account_id, open_items_move_lines_data):
|
|
105
|
+
total_amount = {}
|
|
106
|
+
for line in open_items_move_lines_data:
|
|
107
|
+
partner_id_key = line["partner_id"]
|
|
108
|
+
if account_id not in total_amount:
|
|
109
|
+
total_amount[account_id] = {}
|
|
110
|
+
if partner_id_key not in total_amount[account_id]:
|
|
111
|
+
total_amount[account_id][partner_id_key] = {"residual": 0.0}
|
|
112
|
+
total_amount[account_id][partner_id_key]["residual"] += line[
|
|
113
|
+
"amount_residual"
|
|
114
|
+
]
|
|
115
|
+
return total_amount
|
|
116
|
+
|
|
117
|
+
def _generate_report_content_by_salesperson(
|
|
118
|
+
self, workbook, report, data, report_data, res_data
|
|
119
|
+
):
|
|
120
|
+
Open_items = res_data["Open_Items"]
|
|
121
|
+
accounts_data = res_data["accounts_data"]
|
|
122
|
+
partners_data = res_data["partners_data"]
|
|
123
|
+
journals_data = res_data["journals_data"]
|
|
124
|
+
total_amount = res_data["total_amount"]
|
|
125
|
+
|
|
126
|
+
for partner_id in partners_data.keys():
|
|
127
|
+
# Create a new sheet for each partner
|
|
128
|
+
partner_totals = {}
|
|
129
|
+
partner_name = partners_data[partner_id]["name"]
|
|
130
|
+
new_sheet = workbook.add_worksheet(partner_name[:31])
|
|
131
|
+
report_data["sheet"] = new_sheet
|
|
132
|
+
report_data["row_pos"] = 0
|
|
133
|
+
|
|
134
|
+
for account_id in Open_items.keys():
|
|
135
|
+
if partner_id in Open_items[account_id]:
|
|
136
|
+
self.write_array_title(
|
|
137
|
+
accounts_data[account_id]["code"]
|
|
138
|
+
+ " - "
|
|
139
|
+
+ accounts_data[account_id]["name"],
|
|
140
|
+
report_data,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
# For each partner
|
|
144
|
+
if Open_items[account_id]:
|
|
145
|
+
type_object = "partner"
|
|
146
|
+
# Write partner title
|
|
147
|
+
self.write_array_title(
|
|
148
|
+
partners_data[partner_id]["name"], report_data
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# Calculate totals by partner_id
|
|
152
|
+
partner_totals = self._calculate_amounts_by_partner(
|
|
153
|
+
account_id, Open_items[account_id][partner_id]
|
|
154
|
+
)
|
|
155
|
+
# Display array header for move lines
|
|
156
|
+
self.write_array_header(report_data)
|
|
157
|
+
# Display account move lines
|
|
158
|
+
has_lines = False
|
|
159
|
+
for partner_id_key, total_amount_dict in partner_totals.get(
|
|
160
|
+
account_id, {}
|
|
161
|
+
).items():
|
|
162
|
+
for line in Open_items[account_id][partner_id]:
|
|
163
|
+
if line["partner_id"] == partner_id_key:
|
|
164
|
+
line.update(
|
|
165
|
+
{
|
|
166
|
+
"account": accounts_data[account_id][
|
|
167
|
+
"code"
|
|
168
|
+
],
|
|
169
|
+
"journal": journals_data[
|
|
170
|
+
line["journal_id"]
|
|
171
|
+
]["code"],
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
self.write_line_from_dict(line, report_data)
|
|
175
|
+
has_lines = True
|
|
176
|
+
if has_lines:
|
|
177
|
+
partner = self.env["res.partner"].browse(partner_id_key)
|
|
178
|
+
# Display ending balance line for partner
|
|
179
|
+
partner_data = {
|
|
180
|
+
"id": partner_id_key,
|
|
181
|
+
"name": partner.name
|
|
182
|
+
if partner
|
|
183
|
+
else _("Missing Partner"),
|
|
184
|
+
"currency_id": accounts_data[account_id][
|
|
185
|
+
"currency_id"
|
|
186
|
+
],
|
|
187
|
+
"currency_name": accounts_data[account_id][
|
|
188
|
+
"currency_name"
|
|
189
|
+
],
|
|
190
|
+
"residual": total_amount_dict,
|
|
191
|
+
}
|
|
192
|
+
self.write_ending_balance_from_dict(
|
|
193
|
+
partner_data,
|
|
194
|
+
"partner_subtotal",
|
|
195
|
+
partner_totals,
|
|
196
|
+
report_data,
|
|
197
|
+
account_id=account_id,
|
|
198
|
+
partner_id=partner_id_key,
|
|
199
|
+
)
|
|
200
|
+
has_lines = False
|
|
201
|
+
# Display ending balance line for salesperson
|
|
202
|
+
partners_data[partner_id].update(
|
|
203
|
+
{
|
|
204
|
+
"currency_id": accounts_data[account_id]["currency_id"],
|
|
205
|
+
"currency_name": accounts_data[account_id][
|
|
206
|
+
"currency_name"
|
|
207
|
+
],
|
|
208
|
+
}
|
|
209
|
+
)
|
|
210
|
+
self.write_ending_balance_from_dict(
|
|
211
|
+
partners_data[partner_id],
|
|
212
|
+
type_object,
|
|
213
|
+
total_amount,
|
|
214
|
+
report_data,
|
|
215
|
+
account_id=account_id,
|
|
216
|
+
partner_id=partner_id,
|
|
217
|
+
)
|
|
218
|
+
# Line break
|
|
219
|
+
report_data["row_pos"] += 1
|
|
220
|
+
|
|
221
|
+
def _generate_report_content_by_partner(
|
|
222
|
+
self, workbook, report, data, report_data, res_data
|
|
223
|
+
):
|
|
109
224
|
Open_items = res_data["Open_Items"]
|
|
110
225
|
accounts_data = res_data["accounts_data"]
|
|
111
226
|
partners_data = res_data["partners_data"]
|
|
@@ -120,7 +235,6 @@ class OpenItemsXslx(models.AbstractModel):
|
|
|
120
235
|
+ accounts_data[account_id]["name"],
|
|
121
236
|
report_data,
|
|
122
237
|
)
|
|
123
|
-
|
|
124
238
|
# For each partner
|
|
125
239
|
if Open_items[account_id]:
|
|
126
240
|
if show_partner_details:
|
|
@@ -180,18 +294,33 @@ class OpenItemsXslx(models.AbstractModel):
|
|
|
180
294
|
)
|
|
181
295
|
self.write_line_from_dict(line, report_data)
|
|
182
296
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
297
|
+
# Display ending balance line for account
|
|
298
|
+
type_object = "account"
|
|
299
|
+
self.write_ending_balance_from_dict(
|
|
300
|
+
accounts_data[account_id],
|
|
301
|
+
type_object,
|
|
302
|
+
total_amount,
|
|
303
|
+
report_data,
|
|
304
|
+
account_id=account_id,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
# 2 lines break
|
|
308
|
+
report_data["row_pos"] += 2
|
|
192
309
|
|
|
193
|
-
|
|
194
|
-
|
|
310
|
+
def _generate_report_content(self, workbook, report, data, report_data):
|
|
311
|
+
res_data = self.env[
|
|
312
|
+
"report.account_financial_report.open_items"
|
|
313
|
+
]._get_report_values(report, data)
|
|
314
|
+
show_partner_details = res_data["show_partner_details"]
|
|
315
|
+
grouped_by = res_data["grouped_by"]
|
|
316
|
+
if grouped_by == "salesperson" and show_partner_details:
|
|
317
|
+
return self._generate_report_content_by_salesperson(
|
|
318
|
+
workbook, report, data, report_data, res_data
|
|
319
|
+
)
|
|
320
|
+
else:
|
|
321
|
+
return self._generate_report_content_by_partner(
|
|
322
|
+
workbook, report, data, report_data, res_data
|
|
323
|
+
)
|
|
195
324
|
|
|
196
325
|
def write_ending_balance_from_dict(
|
|
197
326
|
self,
|
|
@@ -211,6 +340,10 @@ class OpenItemsXslx(models.AbstractModel):
|
|
|
211
340
|
name = my_object["code"] + " - " + my_object["name"]
|
|
212
341
|
my_object["residual"] = total_amount[account_id]["residual"]
|
|
213
342
|
label = _("Ending balance")
|
|
343
|
+
elif type_object == "partner_subtotal":
|
|
344
|
+
name = my_object["name"]
|
|
345
|
+
my_object["residual"] = total_amount[account_id][partner_id]["residual"]
|
|
346
|
+
label = _("Ending balance")
|
|
214
347
|
return super(OpenItemsXslx, self).write_ending_balance_from_dict(
|
|
215
348
|
my_object, name, label, report_data
|
|
216
349
|
)
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
</t>
|
|
10
10
|
</t>
|
|
11
11
|
</template>
|
|
12
|
+
|
|
12
13
|
<template id="account_financial_report.report_open_items_base">
|
|
13
14
|
<!-- Saved flag fields into variables, used to define columns display -->
|
|
14
15
|
<t t-set="foreign_currency" t-value="foreign_currency" />
|
|
@@ -28,82 +29,188 @@
|
|
|
28
29
|
style="text-align: center;"
|
|
29
30
|
/>
|
|
30
31
|
</div>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<div class="account_title" style="width: 100%;">
|
|
37
|
-
<span t-esc="accounts_data[account_id]['code']" />
|
|
38
|
-
-
|
|
39
|
-
<span t-esc="accounts_data[account_id]['name']" />
|
|
40
|
-
</div>
|
|
41
|
-
<t t-if="not show_partner_details">
|
|
42
|
-
<div class="act_as_table data_table" style="width: 100%;">
|
|
43
|
-
<t
|
|
44
|
-
t-call="account_financial_report.report_open_items_lines_header"
|
|
45
|
-
/>
|
|
46
|
-
<!-- Display account move lines -->
|
|
47
|
-
<t t-foreach="Open_Items[account_id]" t-as="line">
|
|
48
|
-
<t
|
|
49
|
-
t-call="account_financial_report.report_open_items_lines"
|
|
50
|
-
/>
|
|
51
|
-
</t>
|
|
32
|
+
<t t-if="grouped_by == 'salesperson' and show_partner_details">
|
|
33
|
+
<t t-foreach="partners_data.keys()" t-as="partner_id">
|
|
34
|
+
<t t-call="account_financial_report.report_open_items_filters" />
|
|
35
|
+
<div class="act_as_caption account_title">
|
|
36
|
+
<span t-esc="partners_data[partner_id]['name']" />
|
|
52
37
|
</div>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
38
|
+
<t t-foreach="Open_Items.keys()" t-as="account_id">
|
|
39
|
+
<t t-if="partner_id in Open_Items[account_id]">
|
|
40
|
+
<div
|
|
41
|
+
class="act_as_table list_table"
|
|
42
|
+
style="margin-top: 10px;"
|
|
43
|
+
/>
|
|
44
|
+
<div class="account_title" style="width: 100%;">
|
|
45
|
+
<span t-esc="accounts_data[account_id]['code']" />
|
|
46
|
+
-
|
|
47
|
+
<span t-esc="accounts_data[account_id]['name']" />
|
|
60
48
|
</div>
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
t-
|
|
49
|
+
|
|
50
|
+
<t t-if="Open_Items[account_id]">
|
|
51
|
+
<t
|
|
52
|
+
t-set="partner_totals"
|
|
53
|
+
t-value="o._calculate_amounts_by_partner(account_id,Open_Items[account_id][partner_id])"
|
|
65
54
|
/>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
t-
|
|
69
|
-
t-as="line"
|
|
55
|
+
<t
|
|
56
|
+
t-foreach="partner_totals.get(account_id, {})"
|
|
57
|
+
t-as="partner_id_key"
|
|
70
58
|
>
|
|
59
|
+
<t t-set="has_lines" t-value="False" />
|
|
60
|
+
<div
|
|
61
|
+
class="act_as_table data_table"
|
|
62
|
+
style="width: 100%;"
|
|
63
|
+
>
|
|
64
|
+
|
|
71
65
|
<t
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
t-foreach="Open_Items[account_id][partner_id]"
|
|
67
|
+
t-as="line"
|
|
68
|
+
>
|
|
69
|
+
<t t-if="line['partner_id'] == partner_id_key">
|
|
70
|
+
<t t-set="has_lines" t-value="True" />
|
|
71
|
+
</t>
|
|
72
|
+
|
|
74
73
|
</t>
|
|
75
|
-
|
|
74
|
+
<t t-if="has_lines">
|
|
75
|
+
<!-- Display partner header -->
|
|
76
|
+
<t
|
|
77
|
+
t-call="account_financial_report.report_open_items_lines_header"
|
|
78
|
+
/>
|
|
79
|
+
</t>
|
|
80
|
+
<t
|
|
81
|
+
t-foreach="Open_Items[account_id][partner_id]"
|
|
82
|
+
t-as="line"
|
|
83
|
+
>
|
|
84
|
+
<t t-if="line['partner_id'] == partner_id_key">
|
|
85
|
+
<!-- Display partner move lines -->
|
|
86
|
+
<t
|
|
87
|
+
t-call="account_financial_report.report_open_items_lines"
|
|
88
|
+
/>
|
|
89
|
+
</t>
|
|
90
|
+
|
|
91
|
+
</t>
|
|
92
|
+
</div>
|
|
93
|
+
<!-- Check if there were any lines displayed for the partner -->
|
|
94
|
+
<t t-if="has_lines">
|
|
95
|
+
<!-- Calculate and display subtotal for current partner_id -->
|
|
96
|
+
<t
|
|
97
|
+
t-call="account_financial_report.report_open_items_ending_cumul"
|
|
98
|
+
>
|
|
99
|
+
<t
|
|
100
|
+
t-set="currency_id"
|
|
101
|
+
t-value="accounts_data[account_id]['currency_name']"
|
|
102
|
+
/>
|
|
103
|
+
<t
|
|
104
|
+
t-set="type"
|
|
105
|
+
t-value="'partner_subtotal_type'"
|
|
106
|
+
/>
|
|
107
|
+
</t>
|
|
108
|
+
</t>
|
|
109
|
+
</t>
|
|
110
|
+
|
|
111
|
+
</t>
|
|
112
|
+
<!-- Display account footer -->
|
|
76
113
|
<t
|
|
77
114
|
t-call="account_financial_report.report_open_items_ending_cumul"
|
|
78
115
|
>
|
|
79
|
-
|
|
116
|
+
<t
|
|
80
117
|
t-set="account_or_partner_id"
|
|
81
118
|
t-value="partners_data[partner_id]"
|
|
82
119
|
/>
|
|
83
|
-
|
|
120
|
+
<t
|
|
84
121
|
t-set="currency_id"
|
|
85
122
|
t-value="accounts_data[account_id]['currency_name']"
|
|
86
123
|
/>
|
|
87
|
-
|
|
88
|
-
</t>
|
|
124
|
+
<t t-set="type" t-value='"partner_type"' />
|
|
89
125
|
</t>
|
|
90
|
-
</
|
|
91
|
-
|
|
92
|
-
<!-- Display account footer -->
|
|
93
|
-
<t t-call="account_financial_report.report_open_items_ending_cumul">
|
|
94
|
-
<t
|
|
95
|
-
t-set="account_or_partner_id"
|
|
96
|
-
t-value="accounts_data[account_id]"
|
|
97
|
-
/>
|
|
98
|
-
<t
|
|
99
|
-
t-set="currency_id"
|
|
100
|
-
t-value="accounts_data[account_id]['currency_name']"
|
|
101
|
-
/>
|
|
102
|
-
<t t-set="type" t-value='"account_type"' />
|
|
126
|
+
</t>
|
|
127
|
+
|
|
103
128
|
</t>
|
|
129
|
+
<div style="page-break-after: always;" />
|
|
130
|
+
</t>
|
|
131
|
+
</t>
|
|
132
|
+
<t t-else="">
|
|
133
|
+
<!-- Display filters -->
|
|
134
|
+
<t t-call="account_financial_report.report_open_items_filters" />
|
|
135
|
+
<t t-foreach="Open_Items.keys()" t-as="account_id">
|
|
136
|
+
<!-- Display account header -->
|
|
137
|
+
<div class="act_as_table list_table" style="margin-top: 10px;" />
|
|
138
|
+
<div class="account_title" style="width: 100%;">
|
|
139
|
+
<span t-esc="accounts_data[account_id]['code']" />
|
|
140
|
+
-
|
|
141
|
+
<span t-esc="accounts_data[account_id]['name']" />
|
|
142
|
+
</div>
|
|
143
|
+
<t t-if="not show_partner_details">
|
|
144
|
+
<div class="act_as_table data_table" style="width: 100%;">
|
|
145
|
+
<t
|
|
146
|
+
t-call="account_financial_report.report_open_items_lines_header"
|
|
147
|
+
/>
|
|
148
|
+
<!-- Display account move lines -->
|
|
149
|
+
<t t-foreach="Open_Items[account_id]" t-as="line">
|
|
150
|
+
<t
|
|
151
|
+
t-call="account_financial_report.report_open_items_lines"
|
|
152
|
+
/>
|
|
153
|
+
</t>
|
|
154
|
+
</div>
|
|
155
|
+
</t>
|
|
156
|
+
<t t-if="show_partner_details">
|
|
157
|
+
<div class="page_break">
|
|
158
|
+
<!-- Display account partners -->
|
|
159
|
+
<t t-foreach="Open_Items[account_id]" t-as="partner_id">
|
|
160
|
+
<div class="act_as_caption account_title">
|
|
161
|
+
<span t-esc="partners_data[partner_id]['name']" />
|
|
162
|
+
</div>
|
|
163
|
+
<div
|
|
164
|
+
class="act_as_table data_table"
|
|
165
|
+
style="width: 100%;"
|
|
166
|
+
>
|
|
167
|
+
<!-- Display partner header -->
|
|
168
|
+
<t
|
|
169
|
+
t-call="account_financial_report.report_open_items_lines_header"
|
|
170
|
+
/>
|
|
171
|
+
<!-- Display partner move lines -->
|
|
172
|
+
<t
|
|
173
|
+
t-foreach="Open_Items[account_id][partner_id]"
|
|
174
|
+
t-as="line"
|
|
175
|
+
>
|
|
176
|
+
<t
|
|
177
|
+
t-call="account_financial_report.report_open_items_lines"
|
|
178
|
+
/>
|
|
179
|
+
</t>
|
|
180
|
+
</div>
|
|
181
|
+
<t
|
|
182
|
+
t-call="account_financial_report.report_open_items_ending_cumul"
|
|
183
|
+
>
|
|
184
|
+
<t
|
|
185
|
+
t-set="account_or_partner_id"
|
|
186
|
+
t-value="partners_data[partner_id]"
|
|
187
|
+
/>
|
|
188
|
+
<t
|
|
189
|
+
t-set="currency_id"
|
|
190
|
+
t-value="accounts_data[account_id]['currency_name']"
|
|
191
|
+
/>
|
|
192
|
+
<t t-set="type" t-value='"partner_type"' />
|
|
193
|
+
</t>
|
|
194
|
+
</t>
|
|
195
|
+
</div>
|
|
196
|
+
</t>
|
|
197
|
+
<!-- Display account footer -->
|
|
198
|
+
<t t-call="account_financial_report.report_open_items_ending_cumul">
|
|
199
|
+
<t
|
|
200
|
+
t-set="account_or_partner_id"
|
|
201
|
+
t-value="accounts_data[account_id]"
|
|
202
|
+
/>
|
|
203
|
+
<t
|
|
204
|
+
t-set="currency_id"
|
|
205
|
+
t-value="accounts_data[account_id]['currency_name']"
|
|
206
|
+
/>
|
|
207
|
+
<t t-set="type" t-value='"account_type"' />
|
|
208
|
+
</t>
|
|
209
|
+
</t>
|
|
104
210
|
</t>
|
|
105
211
|
</div>
|
|
106
212
|
</template>
|
|
213
|
+
|
|
107
214
|
<template id="account_financial_report.report_open_items_filters">
|
|
108
215
|
<div class="act_as_table data_table" style="width: 100%;">
|
|
109
216
|
<div class="act_as_row labels">
|
|
@@ -294,6 +401,20 @@
|
|
|
294
401
|
Partner ending balance
|
|
295
402
|
</div>
|
|
296
403
|
</t>
|
|
404
|
+
<t t-if='type == "partner_subtotal_type"'>
|
|
405
|
+
<div class="act_as_cell first_column" style="width: 36.34%;" />
|
|
406
|
+
<t
|
|
407
|
+
t-set="partner"
|
|
408
|
+
t-value="env['res.partner'].browse(partner_id_key)"
|
|
409
|
+
/>
|
|
410
|
+
<t t-if="partner">
|
|
411
|
+
<span t-esc="partner.name" />
|
|
412
|
+
</t>
|
|
413
|
+
<div class="act_as_cell right" style="width: 28.66%;">
|
|
414
|
+
Ending
|
|
415
|
+
balance
|
|
416
|
+
</div>
|
|
417
|
+
</t>
|
|
297
418
|
<!--## date_due-->
|
|
298
419
|
<div class="act_as_cell" style="width: 6.47%;" />
|
|
299
420
|
<!--## amount_total_due-->
|
|
@@ -312,6 +433,12 @@
|
|
|
312
433
|
t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"
|
|
313
434
|
/>
|
|
314
435
|
</t>
|
|
436
|
+
<t t-if='type == "partner_subtotal_type"'>
|
|
437
|
+
<span
|
|
438
|
+
t-esc="partner_totals[account_id][partner_id_key]['residual']"
|
|
439
|
+
t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"
|
|
440
|
+
/>
|
|
441
|
+
</t>
|
|
315
442
|
</div>
|
|
316
443
|
<!--## amount_total_due_currency + amount_residual_currency -->
|
|
317
444
|
<t t-if="foreign_currency">
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
/*
|
|
10
10
|
:Author: David Goodger (goodger@python.org)
|
|
11
|
-
:Id: $Id: html4css1.css
|
|
11
|
+
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
|
12
12
|
:Copyright: This stylesheet has been placed in the public domain.
|
|
13
13
|
|
|
14
14
|
Default cascading style sheet for the HTML output of Docutils.
|
|
15
|
+
Despite the name, some widely supported CSS2 features are used.
|
|
15
16
|
|
|
16
17
|
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
|
17
18
|
customize this style sheet.
|
|
@@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|
|
274
275
|
margin-left: 2em ;
|
|
275
276
|
margin-right: 2em }
|
|
276
277
|
|
|
277
|
-
pre.code .ln { color:
|
|
278
|
+
pre.code .ln { color: gray; } /* line numbers */
|
|
278
279
|
pre.code, code { background-color: #eeeeee }
|
|
279
280
|
pre.code .comment, code .comment { color: #5C6576 }
|
|
280
281
|
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
|
@@ -300,7 +301,7 @@ span.option {
|
|
|
300
301
|
span.pre {
|
|
301
302
|
white-space: pre }
|
|
302
303
|
|
|
303
|
-
span.problematic {
|
|
304
|
+
span.problematic, pre.problematic {
|
|
304
305
|
color: red }
|
|
305
306
|
|
|
306
307
|
span.section-subtitle {
|
|
@@ -366,7 +367,7 @@ ul.auto-toc {
|
|
|
366
367
|
!! This file is generated by oca-gen-addon-readme !!
|
|
367
368
|
!! changes will be overwritten. !!
|
|
368
369
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
369
|
-
!! source digest: sha256:
|
|
370
|
+
!! source digest: sha256:496f9a74d723710fa89431853e8e4bf5ca3ea5676a7e325ae5ae2d0056a9764b
|
|
370
371
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
371
372
|
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-financial-reporting/tree/15.0/account_financial_report"><img alt="OCA/account-financial-reporting" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--reporting-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-financial-reporting-15-0/account-financial-reporting-15-0-account_financial_report"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-financial-reporting&target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
372
373
|
<p>This module adds a set of financial reports. They are accessible under
|
|
@@ -528,7 +529,9 @@ April 2016.</p>
|
|
|
528
529
|
<div class="section" id="maintainers">
|
|
529
530
|
<h2><a class="toc-backref" href="#toc-entry-11">Maintainers</a></h2>
|
|
530
531
|
<p>This module is maintained by the OCA.</p>
|
|
531
|
-
<a class="reference external image-reference" href="https://odoo-community.org"
|
|
532
|
+
<a class="reference external image-reference" href="https://odoo-community.org">
|
|
533
|
+
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
|
534
|
+
</a>
|
|
532
535
|
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|
533
536
|
mission is to support the collaborative development of Odoo features and
|
|
534
537
|
promote its widespread use.</p>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# Author: Julien Coux
|
|
2
2
|
# Copyright 2016 Camptocamp SA
|
|
3
|
+
# Copyright 2024 Tecnativa - Carolina Fernandez
|
|
3
4
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
4
5
|
|
|
6
|
+
from odoo.fields import Date
|
|
5
7
|
from odoo.tests import tagged
|
|
6
8
|
|
|
7
9
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
@@ -71,3 +73,23 @@ class TestOpenItems(AccountTestInvoicingCommon):
|
|
|
71
73
|
[open_items_code_set.add(account.code) for account in open_items.account_ids]
|
|
72
74
|
self.assertEqual(len(open_items_code_set), len(all_accounts_code_set))
|
|
73
75
|
self.assertTrue(open_items_code_set == all_accounts_code_set)
|
|
76
|
+
|
|
77
|
+
def test_open_items_grouped_by(self):
|
|
78
|
+
open_item_wizard = self.env["open.items.report.wizard"]
|
|
79
|
+
all_accounts = self.env["account.account"].search(
|
|
80
|
+
[
|
|
81
|
+
("reconcile", "=", True),
|
|
82
|
+
],
|
|
83
|
+
order="code",
|
|
84
|
+
)
|
|
85
|
+
wizard = open_item_wizard.create(
|
|
86
|
+
{
|
|
87
|
+
"date_at": Date.today(),
|
|
88
|
+
"account_code_from": self.account001.id,
|
|
89
|
+
"account_code_to": all_accounts[-1].id,
|
|
90
|
+
"grouped_by": "salesperson",
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
wizard.on_change_account_range()
|
|
94
|
+
res = wizard._prepare_report_open_items()
|
|
95
|
+
self.assertEqual(res["grouped_by"], wizard.grouped_by)
|
|
@@ -59,6 +59,10 @@ class OpenItemsReportWizard(models.TransientModel):
|
|
|
59
59
|
comodel_name="account.account",
|
|
60
60
|
help="Ending account in a range",
|
|
61
61
|
)
|
|
62
|
+
grouped_by = fields.Selection(
|
|
63
|
+
selection=[("partners", "Partners"), ("salesperson", "Partner Salesperson")],
|
|
64
|
+
default="partners",
|
|
65
|
+
)
|
|
62
66
|
|
|
63
67
|
@api.onchange("account_code_from", "account_code_to")
|
|
64
68
|
def on_change_account_range(self):
|
|
@@ -132,6 +136,19 @@ class OpenItemsReportWizard(models.TransientModel):
|
|
|
132
136
|
else:
|
|
133
137
|
self.account_ids = None
|
|
134
138
|
|
|
139
|
+
def _calculate_amounts_by_partner(self, account_id, open_items_move_lines_data):
|
|
140
|
+
total_amount = {}
|
|
141
|
+
for line in open_items_move_lines_data:
|
|
142
|
+
partner_id_key = line["partner_id"]
|
|
143
|
+
if account_id not in total_amount:
|
|
144
|
+
total_amount[account_id] = {}
|
|
145
|
+
if partner_id_key not in total_amount[account_id]:
|
|
146
|
+
total_amount[account_id][partner_id_key] = {"residual": 0.0}
|
|
147
|
+
total_amount[account_id][partner_id_key]["residual"] += line[
|
|
148
|
+
"amount_residual"
|
|
149
|
+
]
|
|
150
|
+
return total_amount
|
|
151
|
+
|
|
135
152
|
def _print_report(self, report_type):
|
|
136
153
|
self.ensure_one()
|
|
137
154
|
data = self._prepare_report_open_items()
|
|
@@ -163,6 +180,7 @@ class OpenItemsReportWizard(models.TransientModel):
|
|
|
163
180
|
"account_ids": self.account_ids.ids,
|
|
164
181
|
"partner_ids": self.partner_ids.ids or [],
|
|
165
182
|
"account_financial_report_lang": self.env.lang,
|
|
183
|
+
"grouped_by": self.grouped_by,
|
|
166
184
|
}
|
|
167
185
|
|
|
168
186
|
def _export(self, report_type):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: odoo-addon-account_financial_report
|
|
3
|
-
Version: 15.0.2.
|
|
3
|
+
Version: 15.0.2.11.0
|
|
4
4
|
Summary: OCA Financial Reports
|
|
5
5
|
Home-page: https://github.com/OCA/account-financial-reporting
|
|
6
6
|
Author: Camptocamp,initOS GmbH,redCOR AG,ForgeFlow,Odoo Community Association (OCA)
|
|
@@ -24,7 +24,7 @@ Account Financial Reports
|
|
|
24
24
|
!! This file is generated by oca-gen-addon-readme !!
|
|
25
25
|
!! changes will be overwritten. !!
|
|
26
26
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
27
|
-
!! source digest: sha256:
|
|
27
|
+
!! source digest: sha256:496f9a74d723710fa89431853e8e4bf5ca3ea5676a7e325ae5ae2d0056a9764b
|
|
28
28
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
29
29
|
|
|
30
30
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
odoo/addons/account_financial_report/README.rst,sha256=
|
|
1
|
+
odoo/addons/account_financial_report/README.rst,sha256=qVVr_ib0KHTEBTbyv_aA0UMvTYz1bLM68YzdRj4_t9I,6889
|
|
2
2
|
odoo/addons/account_financial_report/__init__.py,sha256=YoL8hk5QxSifbFJL7gPzpOSk-3zB1OSHJBXyZK25G6Q,187
|
|
3
|
-
odoo/addons/account_financial_report/__manifest__.py,sha256=
|
|
3
|
+
odoo/addons/account_financial_report/__manifest__.py,sha256=DfOS_TNpB_khNTGVhde3AJwvhrxpQCJ6lC2kGAxBik0,2308
|
|
4
4
|
odoo/addons/account_financial_report/menuitems.xml,sha256=k20N6cNRlDsnPhc378MVs7jwzJhbbJQ2k-P3WdsmF_M,1206
|
|
5
5
|
odoo/addons/account_financial_report/reports.xml,sha256=c2KamS250rNzHUInjNwC0G2dhwiIqtYgbked51PtmVw,9254
|
|
6
|
-
odoo/addons/account_financial_report/i18n/account_financial_report.pot,sha256=
|
|
6
|
+
odoo/addons/account_financial_report/i18n/account_financial_report.pot,sha256=KkSFpL4-aSmP7EkgcSxh9Wyyw7PCplmFtr_tJ3WU1Vw,83274
|
|
7
7
|
odoo/addons/account_financial_report/i18n/ar.po,sha256=NPSOZDqHiuFAnmLDvtPns6J5Ikyas669zq0NsrUj-Rg,90335
|
|
8
8
|
odoo/addons/account_financial_report/i18n/ca.po,sha256=H-HEgOjg0D_9D5bqCQQkrHDC94LnDPSiyIq_03dZGT4,87169
|
|
9
9
|
odoo/addons/account_financial_report/i18n/da.po,sha256=jWHbVGKBSMRyDbSenLhvb9yCxpd7wHDZEvVikmoCDF4,86401
|
|
10
10
|
odoo/addons/account_financial_report/i18n/de.po,sha256=ESxlcczvJzAvFigVy19nM3z7gyzdOwBup6lqGNfAtZc,92961
|
|
11
|
-
odoo/addons/account_financial_report/i18n/es.po,sha256=
|
|
11
|
+
odoo/addons/account_financial_report/i18n/es.po,sha256=gfPdTUpHloYHjI_c7qbKrhhLxS4W4n8wcUNY0Wk7x4E,88696
|
|
12
12
|
odoo/addons/account_financial_report/i18n/es_AR.po,sha256=9iMZelPabckOtrCZSCMP2Dq4Stc2wwt2AuO0qpnjLfw,90804
|
|
13
13
|
odoo/addons/account_financial_report/i18n/es_MX.po,sha256=MmeKBxvD0AhRHK1Awd-Yh0dzt6qDlJW80qT_yn0bP1Y,81014
|
|
14
14
|
odoo/addons/account_financial_report/i18n/fr.po,sha256=ln1zh0O-z021z5qvJkOHJMCVCt3Zppbw-j3QAPUoaHI,93714
|
|
@@ -44,8 +44,8 @@ odoo/addons/account_financial_report/report/general_ledger.py,sha256=wRXeQsrMlaZ
|
|
|
44
44
|
odoo/addons/account_financial_report/report/general_ledger_xlsx.py,sha256=EHkkVgdt2_Vpw01KjqVb6RKZBfEKWBqdsXvMBu3iRPY,15599
|
|
45
45
|
odoo/addons/account_financial_report/report/journal_ledger.py,sha256=j83-QCAONs7AAh1C3C7_3_nByKk43B7o3Atx42OhdOc,15362
|
|
46
46
|
odoo/addons/account_financial_report/report/journal_ledger_xlsx.py,sha256=Pp7iDkBjSk0BqZkSPAiKI2hBHNcjKYjZoBxuL_ENz5E,10126
|
|
47
|
-
odoo/addons/account_financial_report/report/open_items.py,sha256=
|
|
48
|
-
odoo/addons/account_financial_report/report/open_items_xlsx.py,sha256=
|
|
47
|
+
odoo/addons/account_financial_report/report/open_items.py,sha256=JND4C0oixuL7cc45kVj5tc4ysivHQJguEPcX_ebviWI,12258
|
|
48
|
+
odoo/addons/account_financial_report/report/open_items_xlsx.py,sha256=iv32561UaRppS5XyclMnYwLHJ2icYUA1hNeUOkcl8ng,14960
|
|
49
49
|
odoo/addons/account_financial_report/report/trial_balance.py,sha256=ERrdWkQugXtRX_4lURibQCdPsW_52ggbyLOrMDSSTrg,30737
|
|
50
50
|
odoo/addons/account_financial_report/report/trial_balance_xlsx.py,sha256=phPDqy4pXbd94oFmwjPNe_XKoMCgcTXPE6HOkGJJDko,12060
|
|
51
51
|
odoo/addons/account_financial_report/report/vat_report.py,sha256=mRr8zk3sTVvz7CFHQAzDL4Eexqzt7X6JVOEPD2axumM,10163
|
|
@@ -54,13 +54,13 @@ odoo/addons/account_financial_report/report/templates/aged_partner_balance.xml,s
|
|
|
54
54
|
odoo/addons/account_financial_report/report/templates/general_ledger.xml,sha256=BTJ8k7_pX2StHGP3BgRaqktx3NYeqdV1tTJ0KqmHjeo,38690
|
|
55
55
|
odoo/addons/account_financial_report/report/templates/journal_ledger.xml,sha256=qPupJ-t85k2_H-o12pwOyvpYCpROBkVpSsGaib3mGkI,21619
|
|
56
56
|
odoo/addons/account_financial_report/report/templates/layouts.xml,sha256=gCejPAn8GLrySSve8pGcs0fY5nr48C3mmyuoEJVZkJ4,1526
|
|
57
|
-
odoo/addons/account_financial_report/report/templates/open_items.xml,sha256=
|
|
57
|
+
odoo/addons/account_financial_report/report/templates/open_items.xml,sha256=sETrMPg6GJmYXjzKiP35mnZMFK1FSRQlmUyPvEaVjXY,21559
|
|
58
58
|
odoo/addons/account_financial_report/report/templates/trial_balance.xml,sha256=q-ShNar7AifnJpSzhkv5OYmc-ydkF9ub_VlsLnOVKPI,47168
|
|
59
59
|
odoo/addons/account_financial_report/report/templates/vat_report.xml,sha256=F5hQzdM8NTuLW04mT6SMjbdush5r7C81_RXa7NByfAY,8128
|
|
60
60
|
odoo/addons/account_financial_report/security/ir.model.access.csv,sha256=S1VQLLwLeaOeAMYGqtoOqHUaZVrvDUVE4Z-0-SRjSGQ,1134
|
|
61
61
|
odoo/addons/account_financial_report/security/security.xml,sha256=gpNJnzruXfeYskn26FqY9U04FiuTf8vgLCKEGY8PADM,422
|
|
62
62
|
odoo/addons/account_financial_report/static/description/icon.png,sha256=WW-eOIjW5-jo7tgBieNv6K2DUKMoHFSVctnp0htstHI,15230
|
|
63
|
-
odoo/addons/account_financial_report/static/description/index.html,sha256=
|
|
63
|
+
odoo/addons/account_financial_report/static/description/index.html,sha256=s-zwCUG12HuZX83uuAMkmUen7BOjfRwyMRAASCQWUGI,19748
|
|
64
64
|
odoo/addons/account_financial_report/static/src/css/report.css,sha256=y0CysZUK3afkYSHgBaMi_qmh8da3XXEZwJDjRBg6HqQ,2335
|
|
65
65
|
odoo/addons/account_financial_report/static/src/css/report_html.css,sha256=I1kX1RsThtjGNLOaNJEWCvMnB9iAFW6nGkcyFYZzJoA,135
|
|
66
66
|
odoo/addons/account_financial_report/static/src/js/action_manager_report.js,sha256=g8aZkSRMgNcFzQ4f_3mmeKl7oNnoap_cDUxuyGxMT4M,1608
|
|
@@ -72,7 +72,7 @@ odoo/addons/account_financial_report/tests/test_age_report_configuration.py,sha2
|
|
|
72
72
|
odoo/addons/account_financial_report/tests/test_aged_partner_balance.py,sha256=C_X7bLkWOK-5BVW5JhFG2poz4yfx3YYOvgkfhM5REnQ,5999
|
|
73
73
|
odoo/addons/account_financial_report/tests/test_general_ledger.py,sha256=srPkrw2tLXVtzh9519_e_5EcMe-tcK45n6ZJ0b0nfoI,30599
|
|
74
74
|
odoo/addons/account_financial_report/tests/test_journal_ledger.py,sha256=Nm7_JbaR69QqdGmEpttfmXNWGOg58bUliMPCTAU3__g,11154
|
|
75
|
-
odoo/addons/account_financial_report/tests/test_open_items.py,sha256=
|
|
75
|
+
odoo/addons/account_financial_report/tests/test_open_items.py,sha256=WQ8MEyI-6lVcDbTaVCAHTUtWulCV7ZYMb_UvXMM72w0,3559
|
|
76
76
|
odoo/addons/account_financial_report/tests/test_trial_balance.py,sha256=u6aIXSI86mmUcTFh2JC7hNsQpPt8A6Gn25orAw6RsEk,28163
|
|
77
77
|
odoo/addons/account_financial_report/tests/test_vat_report.py,sha256=jgO2_4LjK9GpYVBkBAkCd-0xjvCCWAXDrSn2k5Vf6vk,14788
|
|
78
78
|
odoo/addons/account_financial_report/view/account_age_report_configuration_views.xml,sha256=T-BtevIo1gxvr7usSzpXISIqDAl7b2rd2LFCkB3TVQE,1767
|
|
@@ -92,13 +92,13 @@ odoo/addons/account_financial_report/wizard/general_ledger_wizard.py,sha256=ZilX
|
|
|
92
92
|
odoo/addons/account_financial_report/wizard/general_ledger_wizard_view.xml,sha256=P_0_TvjXIlyCI7zdAJhNi8RTWd6h5tGtElDoEg-339U,8356
|
|
93
93
|
odoo/addons/account_financial_report/wizard/journal_ledger_wizard.py,sha256=CA44N2yVdZbAttw3JUK6hueMOQc__wY5Abc2hDW49_0,5546
|
|
94
94
|
odoo/addons/account_financial_report/wizard/journal_ledger_wizard_view.xml,sha256=s3go3x-VSCcr1xNAE3Lzj1FnymyS76hxzazuWtNc91k,2957
|
|
95
|
-
odoo/addons/account_financial_report/wizard/open_items_wizard.py,sha256=
|
|
96
|
-
odoo/addons/account_financial_report/wizard/open_items_wizard_view.xml,sha256=
|
|
95
|
+
odoo/addons/account_financial_report/wizard/open_items_wizard.py,sha256=M1qGW3MjCQTXHPXZLmXT33uV4WWmvbDeSYYHa8Xp5Ro,7316
|
|
96
|
+
odoo/addons/account_financial_report/wizard/open_items_wizard_view.xml,sha256=8dMmYxRm0u8jkhSZ8NVq8_SG6Ll_HPDGjhaql5_JgoU,4741
|
|
97
97
|
odoo/addons/account_financial_report/wizard/trial_balance_wizard.py,sha256=hFaHYfWsbJiKZczJJyUhcyuDuvLx69KEePV1zOvVLcE,10652
|
|
98
98
|
odoo/addons/account_financial_report/wizard/trial_balance_wizard_view.xml,sha256=7oNGPs3s8DVw3movVGe2ryRUNl1MtN7O76UH8zaFFtI,7048
|
|
99
99
|
odoo/addons/account_financial_report/wizard/vat_report_wizard.py,sha256=pJATDNWLcEWvctby5e5yvv4Kz7YDfCTi7YZP7slA8a4,3424
|
|
100
100
|
odoo/addons/account_financial_report/wizard/vat_report_wizard_view.xml,sha256=T3P81O4csDGP7Jmf7eAtmbIIldja3IoXbBmweMMt8vA,2330
|
|
101
|
-
odoo_addon_account_financial_report-15.0.2.
|
|
102
|
-
odoo_addon_account_financial_report-15.0.2.
|
|
103
|
-
odoo_addon_account_financial_report-15.0.2.
|
|
104
|
-
odoo_addon_account_financial_report-15.0.2.
|
|
101
|
+
odoo_addon_account_financial_report-15.0.2.11.0.dist-info/METADATA,sha256=_365IEsRpwdEpCOsmLeNmCKprOIBqo-lDXv6T-0aFqE,7569
|
|
102
|
+
odoo_addon_account_financial_report-15.0.2.11.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
103
|
+
odoo_addon_account_financial_report-15.0.2.11.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
|
104
|
+
odoo_addon_account_financial_report-15.0.2.11.0.dist-info/RECORD,,
|
|
File without changes
|