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.

@@ -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:7f869673606bd886f0471d788a9eab41f171057b2bbb6268d9240660bff2baa8
10
+ !! source digest: sha256:496f9a74d723710fa89431853e8e4bf5ca3ea5676a7e325ae5ae2d0056a9764b
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -6,7 +6,7 @@
6
6
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
7
7
  {
8
8
  "name": "Account Financial Reports",
9
- "version": "15.0.2.10.5",
9
+ "version": "15.0.2.11.0",
10
10
  "category": "Reporting",
11
11
  "summary": "OCA Financial Reports",
12
12
  "author": "Camptocamp,"
@@ -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 el Socio"
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
- partners_ids = set()
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
- if move_line["partner_id"]:
123
- prt_id = move_line["partner_id"][0]
124
- prt_name = move_line["partner_id"][1]
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
- prt_id = 0
127
- prt_name = _("Missing Partner")
128
- if prt_id not in partners_ids:
129
- partners_data.update({prt_id: {"id": prt_id, "name": prt_name}})
130
- partners_ids.add(prt_id)
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
- if not float_is_zero(move_line["debit"], precision_digits=2):
140
+ else:
138
141
  original = move_line["debit"]
139
142
 
140
143
  if move_line["ref"] == move_line["name"]:
141
- if move_line["ref"]:
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": prt_id,
159
- "partner_name": prt_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] = {prt_id: [move_line]}
175
+ open_items_move_lines_data[acc_id] = {group_id: [move_line]}
176
176
  else:
177
- if prt_id not in open_items_move_lines_data[acc_id].keys():
178
- open_items_move_lines_data[acc_id][prt_id] = [move_line]
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][prt_id].append(move_line)
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(move_lines, key=lambda k: (k["date"]))
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 _generate_report_content(self, workbook, report, data, report_data):
105
- res_data = self.env[
106
- "report.account_financial_report.open_items"
107
- ]._get_report_values(report, data)
108
- # For each account
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
- # Display ending balance line for account
184
- type_object = "account"
185
- self.write_ending_balance_from_dict(
186
- accounts_data[account_id],
187
- type_object,
188
- total_amount,
189
- report_data,
190
- account_id=account_id,
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
- # 2 lines break
194
- report_data["row_pos"] += 2
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
- <!-- Display filters -->
32
- <t t-call="account_financial_report.report_open_items_filters" />
33
- <t t-foreach="Open_Items.keys()" t-as="account_id">
34
- <!-- Display account header -->
35
- <div class="act_as_table list_table" style="margin-top: 10px;" />
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
- </t>
54
- <t t-if="show_partner_details">
55
- <div class="page_break">
56
- <!-- Display account partners -->
57
- <t t-foreach="Open_Items[account_id]" t-as="partner_id">
58
- <div class="act_as_caption account_title">
59
- <span t-esc="partners_data[partner_id]['name']" />
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
- <div class="act_as_table data_table" style="width: 100%;">
62
- <!-- Display partner header -->
63
- <t
64
- t-call="account_financial_report.report_open_items_lines_header"
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
- <!-- Display partner move lines -->
67
- <t
68
- t-foreach="Open_Items[account_id][partner_id]"
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
- t-call="account_financial_report.report_open_items_lines"
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
- </div>
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
- <t
116
+ <t
80
117
  t-set="account_or_partner_id"
81
118
  t-value="partners_data[partner_id]"
82
119
  />
83
- <t
120
+ <t
84
121
  t-set="currency_id"
85
122
  t-value="accounts_data[account_id]['currency_name']"
86
123
  />
87
- <t t-set="type" t-value='"partner_type"' />
88
- </t>
124
+ <t t-set="type" t-value='"partner_type"' />
89
125
  </t>
90
- </div>
91
- </t>
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 8954 2022-01-20 10:10:25Z milde $
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: grey; } /* line numbers */
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:7f869673606bd886f0471d788a9eab41f171057b2bbb6268d9240660bff2baa8
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&amp;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"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
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):
@@ -21,6 +21,7 @@
21
21
  <group name="other_filters">
22
22
  <field name="target_move" widget="radio" />
23
23
  <field name="show_partner_details" />
24
+ <field name="grouped_by" />
24
25
  <field name="hide_account_at_0" />
25
26
  <field name="foreign_currency" />
26
27
  </group>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-account_financial_report
3
- Version: 15.0.2.10.5.3
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:7f869673606bd886f0471d788a9eab41f171057b2bbb6268d9240660bff2baa8
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=J2dbt1eaVJlKJRJ9lZL1GNBRMyGqwzOFf_JaBnzvCkw,6889
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=1QV0rk-sLgoCTlDtMOqaAiqj49UUUJGFkvqarTIqCuc,2308
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=bi-xts4i-PpSzOAaYfLoczpcUvrfZ7owqZXQIulB3OY,82548
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=ZOlWXtohF2vU9P3-I6cVju9_gHscJ-Vtb4G0zGdRq8c,88068
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=7ODuL5W36FR7-0aQEhM2luoaHM7dx_dYlvMs4yHKIJ8,11920
48
- odoo/addons/account_financial_report/report/open_items_xlsx.py,sha256=ALSPBYyWcON7VduRmsh9rZuaac77EOytU7MO8ATn6O8,8395
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=EwPQBhqSQoh4RDkmo4QAUZ9-L4GcqwZEj4BcLiw51VE,14834
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=02o2DO5zpUYiAOBjMwp2Coe6iRRkpX9gC1SXo_2iVe4,19665
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=vUzopSaDuZBSMP0DxTwd54hPkO2pMTCklrfwUCPrsRs,2776
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=3UI8dwgq-rN7MV2rz7FiytIAv2H8cZuhtzHAbW9tLvA,6527
96
- odoo/addons/account_financial_report/wizard/open_items_wizard_view.xml,sha256=zLl1eq0LSSnS2S_1lzu3Lwzn2jN1iiyEcbAvjiKqcuw,4689
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.10.5.3.dist-info/METADATA,sha256=hH8gXvFZeMrBdh8Kx-GVxMvFid9WlKC2GMJDU3RAVoM,7571
102
- odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
103
- odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
104
- odoo_addon_account_financial_report-15.0.2.10.5.3.dist-info/RECORD,,
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,,