odoo-addon-account-credit-control 17.0.2.1.0__py3-none-any.whl → 17.0.2.2.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.
Files changed (93) hide show
  1. odoo/addons/account_credit_control/README.rst +1 -1
  2. odoo/addons/account_credit_control/__manifest__.py +1 -1
  3. odoo/addons/account_credit_control/i18n/account_credit_control.pot +22 -13
  4. odoo/addons/account_credit_control/i18n/am.po +1 -0
  5. odoo/addons/account_credit_control/i18n/ar.po +1 -0
  6. odoo/addons/account_credit_control/i18n/bg.po +1 -0
  7. odoo/addons/account_credit_control/i18n/bs.po +1 -0
  8. odoo/addons/account_credit_control/i18n/ca.po +1 -0
  9. odoo/addons/account_credit_control/i18n/ca_ES.po +1 -0
  10. odoo/addons/account_credit_control/i18n/cs.po +1 -0
  11. odoo/addons/account_credit_control/i18n/da.po +1 -0
  12. odoo/addons/account_credit_control/i18n/da_DK.po +1 -0
  13. odoo/addons/account_credit_control/i18n/de.po +1 -0
  14. odoo/addons/account_credit_control/i18n/el_GR.po +1 -0
  15. odoo/addons/account_credit_control/i18n/en_AU.po +1 -0
  16. odoo/addons/account_credit_control/i18n/en_GB.po +1 -0
  17. odoo/addons/account_credit_control/i18n/es.po +1 -0
  18. odoo/addons/account_credit_control/i18n/es_AR.po +1 -0
  19. odoo/addons/account_credit_control/i18n/es_CL.po +1 -0
  20. odoo/addons/account_credit_control/i18n/es_CO.po +1 -0
  21. odoo/addons/account_credit_control/i18n/es_CR.po +1 -0
  22. odoo/addons/account_credit_control/i18n/es_DO.po +1 -0
  23. odoo/addons/account_credit_control/i18n/es_EC.po +1 -0
  24. odoo/addons/account_credit_control/i18n/es_ES.po +1 -0
  25. odoo/addons/account_credit_control/i18n/es_MX.po +1 -0
  26. odoo/addons/account_credit_control/i18n/es_PE.po +1 -0
  27. odoo/addons/account_credit_control/i18n/es_PY.po +1 -0
  28. odoo/addons/account_credit_control/i18n/es_VE.po +1 -0
  29. odoo/addons/account_credit_control/i18n/et.po +1 -0
  30. odoo/addons/account_credit_control/i18n/eu.po +1 -0
  31. odoo/addons/account_credit_control/i18n/fa.po +1 -0
  32. odoo/addons/account_credit_control/i18n/fi.po +1 -0
  33. odoo/addons/account_credit_control/i18n/fr.po +1 -0
  34. odoo/addons/account_credit_control/i18n/fr_CA.po +1 -0
  35. odoo/addons/account_credit_control/i18n/fr_CH.po +1 -0
  36. odoo/addons/account_credit_control/i18n/fr_FR.po +1 -0
  37. odoo/addons/account_credit_control/i18n/gl.po +1 -0
  38. odoo/addons/account_credit_control/i18n/gl_ES.po +1 -0
  39. odoo/addons/account_credit_control/i18n/gu.po +1 -0
  40. odoo/addons/account_credit_control/i18n/he.po +1 -0
  41. odoo/addons/account_credit_control/i18n/hi.po +1 -0
  42. odoo/addons/account_credit_control/i18n/hr.po +1 -0
  43. odoo/addons/account_credit_control/i18n/hr_HR.po +1 -0
  44. odoo/addons/account_credit_control/i18n/hu.po +1 -0
  45. odoo/addons/account_credit_control/i18n/id.po +1 -0
  46. odoo/addons/account_credit_control/i18n/it.po +1 -0
  47. odoo/addons/account_credit_control/i18n/ja.po +1 -0
  48. odoo/addons/account_credit_control/i18n/ko.po +1 -0
  49. odoo/addons/account_credit_control/i18n/lo.po +1 -0
  50. odoo/addons/account_credit_control/i18n/lt.po +1 -0
  51. odoo/addons/account_credit_control/i18n/lt_LT.po +1 -0
  52. odoo/addons/account_credit_control/i18n/lv.po +1 -0
  53. odoo/addons/account_credit_control/i18n/mk.po +1 -0
  54. odoo/addons/account_credit_control/i18n/mn.po +1 -0
  55. odoo/addons/account_credit_control/i18n/nb.po +1 -0
  56. odoo/addons/account_credit_control/i18n/nb_NO.po +1 -0
  57. odoo/addons/account_credit_control/i18n/nl.po +1 -0
  58. odoo/addons/account_credit_control/i18n/nl_BE.po +1 -0
  59. odoo/addons/account_credit_control/i18n/nl_NL.po +1 -0
  60. odoo/addons/account_credit_control/i18n/pl.po +1 -0
  61. odoo/addons/account_credit_control/i18n/pt.po +1 -0
  62. odoo/addons/account_credit_control/i18n/pt_BR.po +1 -0
  63. odoo/addons/account_credit_control/i18n/pt_PT.po +1 -0
  64. odoo/addons/account_credit_control/i18n/ro.po +1 -0
  65. odoo/addons/account_credit_control/i18n/ru.po +1 -0
  66. odoo/addons/account_credit_control/i18n/sk.po +1 -0
  67. odoo/addons/account_credit_control/i18n/sk_SK.po +1 -0
  68. odoo/addons/account_credit_control/i18n/sl.po +1 -0
  69. odoo/addons/account_credit_control/i18n/sr.po +1 -0
  70. odoo/addons/account_credit_control/i18n/sr@latin.po +1 -0
  71. odoo/addons/account_credit_control/i18n/sv.po +1 -0
  72. odoo/addons/account_credit_control/i18n/th.po +1 -0
  73. odoo/addons/account_credit_control/i18n/tr.po +1 -0
  74. odoo/addons/account_credit_control/i18n/tr_TR.po +1 -0
  75. odoo/addons/account_credit_control/i18n/uk.po +1 -0
  76. odoo/addons/account_credit_control/i18n/vi.po +1 -0
  77. odoo/addons/account_credit_control/i18n/vi_VN.po +1 -0
  78. odoo/addons/account_credit_control/i18n/zh_CN.po +1 -0
  79. odoo/addons/account_credit_control/i18n/zh_TW.po +1 -0
  80. odoo/addons/account_credit_control/models/credit_control_line.py +0 -24
  81. odoo/addons/account_credit_control/models/credit_control_policy.py +55 -9
  82. odoo/addons/account_credit_control/models/res_config_settings.py +6 -0
  83. odoo/addons/account_credit_control/static/description/index.html +1 -1
  84. odoo/addons/account_credit_control/tests/test_credit_control_run.py +35 -0
  85. odoo/addons/account_credit_control/views/credit_control_line.xml +13 -24
  86. odoo/addons/account_credit_control/views/credit_control_policy.xml +79 -62
  87. odoo/addons/account_credit_control/views/res_config_settings_view.xml +8 -0
  88. odoo/addons/account_credit_control/views/res_partner.xml +1 -4
  89. {odoo_addon_account_credit_control-17.0.2.1.0.dist-info → odoo_addon_account_credit_control-17.0.2.2.0.dist-info}/METADATA +2 -2
  90. odoo_addon_account_credit_control-17.0.2.2.0.dist-info/RECORD +134 -0
  91. odoo_addon_account_credit_control-17.0.2.1.0.dist-info/RECORD +0 -134
  92. {odoo_addon_account_credit_control-17.0.2.1.0.dist-info → odoo_addon_account_credit_control-17.0.2.2.0.dist-info}/WHEEL +0 -0
  93. {odoo_addon_account_credit_control-17.0.2.1.0.dist-info → odoo_addon_account_credit_control-17.0.2.2.0.dist-info}/top_level.txt +0 -0
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -516,6 +516,7 @@ msgid "Credit Tolerance Limit"
516
516
  msgstr ""
517
517
 
518
518
  #. module: account_credit_control
519
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
519
520
  #: model:mail.message.subtype,name:account_credit_control.mt_request
520
521
  msgid "Credit control"
521
522
  msgstr ""
@@ -514,6 +514,7 @@ msgid "Credit Tolerance Limit"
514
514
  msgstr ""
515
515
 
516
516
  #. module: account_credit_control
517
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
517
518
  #: model:mail.message.subtype,name:account_credit_control.mt_request
518
519
  msgid "Credit control"
519
520
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -519,6 +519,7 @@ msgid "Credit Tolerance Limit"
519
519
  msgstr ""
520
520
 
521
521
  #. module: account_credit_control
522
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
522
523
  #: model:mail.message.subtype,name:account_credit_control.mt_request
523
524
  msgid "Credit control"
524
525
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -516,6 +516,7 @@ msgid "Credit Tolerance Limit"
516
516
  msgstr ""
517
517
 
518
518
  #. module: account_credit_control
519
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
519
520
  #: model:mail.message.subtype,name:account_credit_control.mt_request
520
521
  msgid "Credit control"
521
522
  msgstr ""
@@ -514,6 +514,7 @@ msgid "Credit Tolerance Limit"
514
514
  msgstr ""
515
515
 
516
516
  #. module: account_credit_control
517
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
517
518
  #: model:mail.message.subtype,name:account_credit_control.mt_request
518
519
  msgid "Credit control"
519
520
  msgstr ""
@@ -514,6 +514,7 @@ msgid "Credit Tolerance Limit"
514
514
  msgstr ""
515
515
 
516
516
  #. module: account_credit_control
517
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
517
518
  #: model:mail.message.subtype,name:account_credit_control.mt_request
518
519
  msgid "Credit control"
519
520
  msgstr ""
@@ -514,6 +514,7 @@ msgid "Credit Tolerance Limit"
514
514
  msgstr ""
515
515
 
516
516
  #. module: account_credit_control
517
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
517
518
  #: model:mail.message.subtype,name:account_credit_control.mt_request
518
519
  msgid "Credit control"
519
520
  msgstr ""
@@ -516,6 +516,7 @@ msgid "Credit Tolerance Limit"
516
516
  msgstr ""
517
517
 
518
518
  #. module: account_credit_control
519
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
519
520
  #: model:mail.message.subtype,name:account_credit_control.mt_request
520
521
  msgid "Credit control"
521
522
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -514,6 +514,7 @@ msgid "Credit Tolerance Limit"
514
514
  msgstr ""
515
515
 
516
516
  #. module: account_credit_control
517
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
517
518
  #: model:mail.message.subtype,name:account_credit_control.mt_request
518
519
  msgid "Credit control"
519
520
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -515,6 +515,7 @@ msgid "Credit Tolerance Limit"
515
515
  msgstr ""
516
516
 
517
517
  #. module: account_credit_control
518
+ #: model:mail.message.subtype,name:account_credit_control.mt_credit_control_new
518
519
  #: model:mail.message.subtype,name:account_credit_control.mt_request
519
520
  msgid "Credit control"
520
521
  msgstr ""
@@ -289,27 +289,3 @@ class CreditControlLine(models.Model):
289
289
  if "manual_followup" in values:
290
290
  self.partner_id.write({"manual_followup": values.get("manual_followup")})
291
291
  return res
292
-
293
- def button_schedule_activity(self):
294
- ctx = self.env.context.copy()
295
- ctx.update({"default_res_id": self.ids[0], "default_res_model": self._name})
296
- return {
297
- "type": "ir.actions.act_window",
298
- "name": _("Schedule activity"),
299
- "res_model": "mail.activity",
300
- "binding_view_types": "form",
301
- "view_mode": "form",
302
- "res_id": self.activity_ids and self.activity_ids.ids[0] or False,
303
- "views": [[False, "form"]],
304
- "context": ctx,
305
- "target": "new",
306
- }
307
-
308
- def button_credit_control_line_form(self):
309
- self.ensure_one()
310
- action = self.env.ref("account_credit_control.credit_control_line_action")
311
- form = self.env.ref("account_credit_control.credit_control_line_form")
312
- action = action.read()[0]
313
- action["views"] = [(form.id, "form")]
314
- action["res_id"] = self.id
315
- return action
@@ -2,6 +2,8 @@
2
2
  # Copyright 2017 Okia SPRL (https://okia.be)
3
3
  # Copyright 2020 Manuel Calero - Tecnativa
4
4
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
5
+ from collections import defaultdict
6
+
5
7
  from odoo import _, api, fields, models
6
8
  from odoo.exceptions import UserError, ValidationError
7
9
 
@@ -19,6 +21,7 @@ class CreditControlPolicy(models.Model):
19
21
  comodel_name="credit.control.policy.level",
20
22
  inverse_name="policy_id",
21
23
  string="Policy Levels",
24
+ copy=True,
22
25
  )
23
26
  do_nothing = fields.Boolean(
24
27
  help="For policies which should not generate lines or are obsolete"
@@ -32,6 +35,11 @@ class CreditControlPolicy(models.Model):
32
35
  help="This policy will be active only for the selected accounts",
33
36
  )
34
37
  active = fields.Boolean(default=True)
38
+ apply_max_policy_level = fields.Boolean(
39
+ string="Apply max policy level",
40
+ help="Apply max policy lavel for one partner in a credit control run execution "
41
+ "to have all credit control lines on same communication level",
42
+ )
35
43
 
36
44
  def _move_lines_domain(self, credit_control_run):
37
45
  """Build the default domain for searching move lines"""
@@ -185,7 +193,6 @@ class CreditControlPolicy(models.Model):
185
193
 
186
194
  def _generate_credit_lines(self, credit_control_run, default_lines_vals=None):
187
195
  self.ensure_one()
188
- controlling_date = credit_control_run.date
189
196
  credit_line_model = self.env["credit.control.line"]
190
197
  lines = self._get_move_lines_to_process(credit_control_run)
191
198
  manual_lines = self._lines_different_policy(lines)
@@ -195,15 +202,28 @@ class CreditControlPolicy(models.Model):
195
202
  # policy levels are sorted by level
196
203
  # so iteration is in the correct order
197
204
  create = policy_lines_generated.create_or_update_from_mv_lines
205
+ partner_level_dic = {}
198
206
  for level in reversed(self.level_ids):
199
- level_lines = level.get_level_lines(controlling_date, lines)
200
- policy_lines_generated += create(
201
- level_lines,
202
- level,
203
- controlling_date,
204
- credit_control_run.company_id,
205
- default_lines_vals=default_lines_vals,
206
- )
207
+ level_lines = level.get_level_lines(credit_control_run.date, lines)
208
+ if self.apply_max_policy_level:
209
+ policy_lines_generated += (
210
+ self._generate_policy_lines_with_max_level(
211
+ credit_control_run,
212
+ policy_lines_generated,
213
+ partner_level_dic,
214
+ level_lines,
215
+ level,
216
+ default_lines_vals,
217
+ )
218
+ )
219
+ else:
220
+ policy_lines_generated += create(
221
+ level_lines,
222
+ level,
223
+ credit_control_run.date,
224
+ credit_control_run.company_id,
225
+ default_lines_vals=default_lines_vals,
226
+ )
207
227
  if policy_lines_generated:
208
228
  report = _(
209
229
  'Policy "<b>%(name)s</b>" has generated <b>'
@@ -223,6 +243,32 @@ class CreditControlPolicy(models.Model):
223
243
  )
224
244
  return (manual_lines, policy_lines_generated, report)
225
245
 
246
+ def _generate_policy_lines_with_max_level(
247
+ self,
248
+ credit_control_run,
249
+ policy_lines_generated,
250
+ partner_level_dic,
251
+ level_lines,
252
+ level,
253
+ default_lines_vals,
254
+ ):
255
+ AccountMoveLine = self.env["account.move.line"]
256
+ create = policy_lines_generated.create_or_update_from_mv_lines
257
+ level_dic = defaultdict(list)
258
+ for level_line in level_lines:
259
+ if level_line.partner_id.id not in partner_level_dic:
260
+ partner_level_dic[level_line.partner_id.id] = level
261
+ level_dic[partner_level_dic[level_line.partner_id.id]].append(level_line.id)
262
+ for level, line_ids in level_dic.items():
263
+ policy_lines_generated += create(
264
+ AccountMoveLine.browse(line_ids),
265
+ level,
266
+ credit_control_run.date,
267
+ credit_control_run.company_id,
268
+ default_lines_vals=default_lines_vals,
269
+ )
270
+ return policy_lines_generated
271
+
226
272
  @api.model
227
273
  def _name_search(self, name, domain=None, operator="ilike", limit=None, order=None):
228
274
  """Alternative implementation for domain on account, equivalent to
@@ -22,3 +22,9 @@ class ResConfigSettings(models.TransientModel):
22
22
  "This setting can be overridden"
23
23
  " on partners or invoices.",
24
24
  )
25
+ default_apply_max_policy_level = fields.Boolean(
26
+ string="Apply max policy level",
27
+ default_model="credit.control.policy",
28
+ help="Apply max policy lavel for one partner in a credit control run execution "
29
+ "to have all credit control lines on same communication level",
30
+ )
@@ -367,7 +367,7 @@ ul.auto-toc {
367
367
  !! This file is generated by oca-gen-addon-readme !!
368
368
  !! changes will be overwritten. !!
369
369
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:2635413f841e91a777bf205d12ca8a06898ae17261db40ee6851e056f69764c3
370
+ !! source digest: sha256:8d227f945da4773a09a1870bf1a39d6b943f789c4e1dc9cd3c396f12b481d985
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
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/credit-control/tree/17.0/account_credit_control"><img alt="OCA/credit-control" src="https://img.shields.io/badge/github-OCA%2Fcredit--control-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/credit-control-17-0/credit-control-17-0-account_credit_control"><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/credit-control&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
373
  <p>Account Credit Control module is a part of Financial Tools used in
@@ -136,6 +136,41 @@ class TestCreditControlRun(AccountTestInvoicingCommon):
136
136
  regex_result = re.match(report_regex, control_run.report)
137
137
  self.assertIsNotNone(regex_result)
138
138
 
139
+ def test_generate_credit_lines_with_max_level(self):
140
+ """
141
+ Test the method generate_credit_lines with max level group.
142
+ For more than one invoice with date different due we need various credit control
143
+ runs.
144
+ """
145
+ self.policy.apply_max_policy_level = True
146
+
147
+ invoice1 = self.invoice.copy()
148
+ invoice1.invoice_date = "2024-12-01"
149
+ invoice1.invoice_date_due = "2024-12-01"
150
+ invoice1.action_post()
151
+
152
+ invoice2 = self.invoice.copy()
153
+ invoice2.invoice_date = "2025-01-01"
154
+ invoice2.invoice_date_due = "2025-01-01"
155
+ invoice2.action_post()
156
+
157
+ control_run = self.env["credit.control.run"].create(
158
+ {"date": "2024-12-30", "policy_ids": [(6, 0, [self.policy.id])]}
159
+ )
160
+ control_run.with_context(lang="en_US").generate_credit_lines()
161
+ control_run.set_to_ready_lines()
162
+ # This module uses SQL queries to search records so we have to
163
+ # store previous control lines
164
+ self.env.cr.flush()
165
+
166
+ control_run = self.env["credit.control.run"].create(
167
+ {"date": "2025-01-30", "policy_ids": [(6, 0, [self.policy.id])]}
168
+ )
169
+ control_run.with_context(lang="en_US").generate_credit_lines()
170
+ self.assertEqual(len(control_run.line_ids.mapped("level")), 3)
171
+ # All control lines have the level 2
172
+ self.assertEqual(set(control_run.line_ids.mapped("level")), {2})
173
+
139
174
  def test_multi_credit_control_run(self):
140
175
  """
141
176
  Generate several control run
@@ -210,23 +210,16 @@
210
210
  decoration-danger="state in ('error', 'email_error')"
211
211
  decoration-muted="state == 'ignored'"
212
212
  decoration-success="state == 'sent'"
213
+ open_form_view="True"
213
214
  >
214
- <button
215
- name="button_credit_control_line_form"
216
- aria-label="Control Credit Line Form"
217
- title="Control Credit Line Form"
218
- type="object"
219
- icon="fa-external-link"
220
- class="oe_stat_button"
221
- />
222
- <field name="date" />
223
- <field name="date_due" />
215
+ <field name="date" readonly="state != 'draft'" />
216
+ <field name="date_due" readonly="state != 'draft'" />
224
217
  <field name="level" />
225
- <field name="manually_overridden" />
218
+ <field name="manually_overridden" readonly="state != 'draft'" />
226
219
  <field name="state" />
227
- <field name="channel" />
220
+ <field name="channel" readonly="state != 'draft'" />
228
221
  <field name="invoice_id" />
229
- <field name="partner_id" />
222
+ <field name="partner_id" readonly="True" />
230
223
  <field name="manual_followup" />
231
224
  <field name="amount_due" widget="monetary" optional="hide" />
232
225
  <field name="balance_due" widget="monetary" />
@@ -237,17 +230,13 @@
237
230
  />
238
231
  <field name="move_line_id" optional="hide" />
239
232
  <field name="account_id" optional="hide" />
240
- <field name="policy_level_id" />
241
- <field name="policy_id" />
242
- <field name="activity_date_deadline" />
243
- <button
244
- name="button_schedule_activity"
245
- type="object"
246
- aria-label="Schedule activity"
247
- title="Schedule activity"
248
- icon="fa-clock-o"
233
+ <field
234
+ name="policy_level_id"
235
+ readonly="state != 'draft'"
236
+ domain="[('policy_id', '=', policy_id)]"
249
237
  />
250
- <field name="activity_summary" />
238
+ <field name="policy_id" readonly="state != 'draft'" />
239
+ <field name="activity_ids" widget="list_activity" optional="show" />
251
240
  </tree>
252
241
  </field>
253
242
  </record>
@@ -264,7 +253,7 @@
264
253
  <field name="res_model">credit.control.line</field>
265
254
  <field name="domain" />
266
255
  <field name="binding_view_types">form</field>
267
- <field name="view_mode">tree,form</field>
256
+ <field name="view_mode">tree,form,activity</field>
268
257
  <field name="view_id" ref="credit_control_line_tree" />
269
258
  <field name="context">{'search_default_filter_draft': 1,
270
259
  'search_default_filter_to_be_sent': 1}
@@ -5,73 +5,90 @@
5
5
  <field name="model">credit.control.policy</field>
6
6
  <field name="arch" type="xml">
7
7
  <form string="Credit control policy">
8
- <div class="oe_button_box" name="button_box">
8
+ <sheet>
9
+ <div class="oe_button_box" name="button_box" />
9
10
  <widget
10
11
  name="web_ribbon"
11
12
  title="Archived"
12
- bg_color="bg-danger"
13
+ bg_color="text-bg-danger"
13
14
  invisible="active"
14
15
  />
15
- </div>
16
- <group>
17
- <field name="name" />
18
- <field name="do_nothing" />
19
- <field name="company_id" groups="base.group_multi_company" />
20
- <field name="active" />
21
- </group>
22
- <notebook colspan="4">
23
- <page string="Policy levels">
24
- <field name="level_ids" nolabel="1" colspan="4">
25
- <tree>
26
- <field name="name" />
27
- <field name="level" />
28
- <field name="channel" />
29
- <field name="delay_days" />
30
- <field name="computation_mode" />
31
- <field name="email_template_id" />
32
- </tree>
33
- <form string="Policy level">
34
- <field name="name" />
35
- <notebook>
36
- <page string="Delay Setting">
37
- <group>
38
- <field name="level" />
39
- <field name="channel" />
40
- <field name="delay_days" />
41
- <field name="computation_mode" />
42
- </group>
43
- </page>
44
- <page string="Mail and reporting">
45
- <group colspan="2">
46
- <field
47
- name="email_template_id"
48
- context="{'default_model': 'credit.control.communication'}"
49
- colspan="2"
50
- />
51
- <field name="custom_text" colspan="2" />
52
- <field
53
- name="custom_text_after_details"
54
- colspan="2"
55
- />
56
- <field
57
- name="mail_show_invoice_detail"
58
- invisible="channel != 'email'"
59
- colspan="2"
60
- />
61
- <field
62
- name="custom_mail_text"
63
- colspan="2"
64
- />
65
- </group>
66
- </page>
67
- </notebook>
68
- </form>
69
- </field>
70
- </page>
71
- <page string="Accounts">
72
- <field name="account_ids" nolabel="1" />
73
- </page>
74
- </notebook>
16
+ <group>
17
+ <group>
18
+ <field name="name" />
19
+ <field name="do_nothing" />
20
+ <field name="active" invisible="1" />
21
+ </group>
22
+ <group>
23
+ <field name="apply_max_policy_level" />
24
+ <field
25
+ name="company_id"
26
+ groups="base.group_multi_company"
27
+ />
28
+ </group>
29
+ </group>
30
+ <notebook colspan="4">
31
+ <page string="Policy levels">
32
+ <field name="level_ids" nolabel="1" colspan="4">
33
+ <tree>
34
+ <field name="name" />
35
+ <field name="level" />
36
+ <field name="channel" />
37
+ <field name="delay_days" />
38
+ <field name="computation_mode" />
39
+ <field name="email_template_id" />
40
+ </tree>
41
+ <form string="Policy level">
42
+ <field name="name" />
43
+ <notebook>
44
+ <page string="Delay Setting">
45
+ <group>
46
+ <field name="level" />
47
+ <field name="channel" />
48
+ <field name="delay_days" />
49
+ <field name="computation_mode" />
50
+ </group>
51
+ </page>
52
+ <page string="Mail and reporting">
53
+ <group colspan="2">
54
+ <field
55
+ name="email_template_id"
56
+ context="{'default_model': 'credit.control.communication'}"
57
+ colspan="2"
58
+ />
59
+ <field name="custom_text" colspan="2" />
60
+ <field
61
+ name="custom_text_after_details"
62
+ colspan="2"
63
+ />
64
+ <field
65
+ name="mail_show_invoice_detail"
66
+ invisible="channel != 'email'"
67
+ colspan="2"
68
+ />
69
+ <field
70
+ name="custom_mail_text"
71
+ colspan="2"
72
+ />
73
+ </group>
74
+ </page>
75
+ </notebook>
76
+ </form>
77
+ </field>
78
+ </page>
79
+ <page string="Accounts">
80
+ <field name="account_ids" nolabel="1">
81
+ <tree>
82
+ <field name="code" />
83
+ <field name="name" />
84
+ <field name="account_type" />
85
+ <field name="currency_id" />
86
+ <field name="tag_ids" widget="many2many_tags" />
87
+ </tree>
88
+ </field>
89
+ </page>
90
+ </notebook>
91
+ </sheet>
75
92
  </form>
76
93
  </field>
77
94
  </record>
@@ -38,6 +38,14 @@
38
38
  </div>
39
39
  </div>
40
40
  </setting>
41
+ <setting
42
+ id="default_apply_max_policy_level"
43
+ help="Apply max policy level for one partner in a credit
44
+ control run execution to have all credit control lines on
45
+ same communication level"
46
+ >
47
+ <field name="default_apply_max_policy_level" />
48
+ </setting>
41
49
  </block>
42
50
  </t>
43
51
  </xpath>
@@ -12,10 +12,7 @@
12
12
  name="context"
13
13
  >{'search_default_partner_id': active_id, 'default_partner_id': active_id}</field>
14
14
  <field name="res_model">credit.control.line</field>
15
- <field name="binding_model_id" ref="base.model_res_partner" />
16
- <field name="binding_view_types">form</field>
17
- <field name="target">new</field>
18
- <field name="view_mode">form</field>
15
+ <field name="view_mode">tree,form,activity</field>
19
16
  </record>
20
17
 
21
18
  <record id="partner_view_buttons" model="ir.ui.view">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-account_credit_control
3
- Version: 17.0.2.1.0
3
+ Version: 17.0.2.2.0
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo>=17.0a,<17.1dev
6
6
  Summary: Account Credit Control
@@ -22,7 +22,7 @@ Account Credit Control
22
22
  !! This file is generated by oca-gen-addon-readme !!
23
23
  !! changes will be overwritten. !!
24
24
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25
- !! source digest: sha256:2635413f841e91a777bf205d12ca8a06898ae17261db40ee6851e056f69764c3
25
+ !! source digest: sha256:8d227f945da4773a09a1870bf1a39d6b943f789c4e1dc9cd3c396f12b481d985
26
26
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
27
 
28
28
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png