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.
- odoo/addons/account_credit_control/README.rst +1 -1
- odoo/addons/account_credit_control/__manifest__.py +1 -1
- odoo/addons/account_credit_control/i18n/account_credit_control.pot +22 -13
- odoo/addons/account_credit_control/i18n/am.po +1 -0
- odoo/addons/account_credit_control/i18n/ar.po +1 -0
- odoo/addons/account_credit_control/i18n/bg.po +1 -0
- odoo/addons/account_credit_control/i18n/bs.po +1 -0
- odoo/addons/account_credit_control/i18n/ca.po +1 -0
- odoo/addons/account_credit_control/i18n/ca_ES.po +1 -0
- odoo/addons/account_credit_control/i18n/cs.po +1 -0
- odoo/addons/account_credit_control/i18n/da.po +1 -0
- odoo/addons/account_credit_control/i18n/da_DK.po +1 -0
- odoo/addons/account_credit_control/i18n/de.po +1 -0
- odoo/addons/account_credit_control/i18n/el_GR.po +1 -0
- odoo/addons/account_credit_control/i18n/en_AU.po +1 -0
- odoo/addons/account_credit_control/i18n/en_GB.po +1 -0
- odoo/addons/account_credit_control/i18n/es.po +1 -0
- odoo/addons/account_credit_control/i18n/es_AR.po +1 -0
- odoo/addons/account_credit_control/i18n/es_CL.po +1 -0
- odoo/addons/account_credit_control/i18n/es_CO.po +1 -0
- odoo/addons/account_credit_control/i18n/es_CR.po +1 -0
- odoo/addons/account_credit_control/i18n/es_DO.po +1 -0
- odoo/addons/account_credit_control/i18n/es_EC.po +1 -0
- odoo/addons/account_credit_control/i18n/es_ES.po +1 -0
- odoo/addons/account_credit_control/i18n/es_MX.po +1 -0
- odoo/addons/account_credit_control/i18n/es_PE.po +1 -0
- odoo/addons/account_credit_control/i18n/es_PY.po +1 -0
- odoo/addons/account_credit_control/i18n/es_VE.po +1 -0
- odoo/addons/account_credit_control/i18n/et.po +1 -0
- odoo/addons/account_credit_control/i18n/eu.po +1 -0
- odoo/addons/account_credit_control/i18n/fa.po +1 -0
- odoo/addons/account_credit_control/i18n/fi.po +1 -0
- odoo/addons/account_credit_control/i18n/fr.po +1 -0
- odoo/addons/account_credit_control/i18n/fr_CA.po +1 -0
- odoo/addons/account_credit_control/i18n/fr_CH.po +1 -0
- odoo/addons/account_credit_control/i18n/fr_FR.po +1 -0
- odoo/addons/account_credit_control/i18n/gl.po +1 -0
- odoo/addons/account_credit_control/i18n/gl_ES.po +1 -0
- odoo/addons/account_credit_control/i18n/gu.po +1 -0
- odoo/addons/account_credit_control/i18n/he.po +1 -0
- odoo/addons/account_credit_control/i18n/hi.po +1 -0
- odoo/addons/account_credit_control/i18n/hr.po +1 -0
- odoo/addons/account_credit_control/i18n/hr_HR.po +1 -0
- odoo/addons/account_credit_control/i18n/hu.po +1 -0
- odoo/addons/account_credit_control/i18n/id.po +1 -0
- odoo/addons/account_credit_control/i18n/it.po +1 -0
- odoo/addons/account_credit_control/i18n/ja.po +1 -0
- odoo/addons/account_credit_control/i18n/ko.po +1 -0
- odoo/addons/account_credit_control/i18n/lo.po +1 -0
- odoo/addons/account_credit_control/i18n/lt.po +1 -0
- odoo/addons/account_credit_control/i18n/lt_LT.po +1 -0
- odoo/addons/account_credit_control/i18n/lv.po +1 -0
- odoo/addons/account_credit_control/i18n/mk.po +1 -0
- odoo/addons/account_credit_control/i18n/mn.po +1 -0
- odoo/addons/account_credit_control/i18n/nb.po +1 -0
- odoo/addons/account_credit_control/i18n/nb_NO.po +1 -0
- odoo/addons/account_credit_control/i18n/nl.po +1 -0
- odoo/addons/account_credit_control/i18n/nl_BE.po +1 -0
- odoo/addons/account_credit_control/i18n/nl_NL.po +1 -0
- odoo/addons/account_credit_control/i18n/pl.po +1 -0
- odoo/addons/account_credit_control/i18n/pt.po +1 -0
- odoo/addons/account_credit_control/i18n/pt_BR.po +1 -0
- odoo/addons/account_credit_control/i18n/pt_PT.po +1 -0
- odoo/addons/account_credit_control/i18n/ro.po +1 -0
- odoo/addons/account_credit_control/i18n/ru.po +1 -0
- odoo/addons/account_credit_control/i18n/sk.po +1 -0
- odoo/addons/account_credit_control/i18n/sk_SK.po +1 -0
- odoo/addons/account_credit_control/i18n/sl.po +1 -0
- odoo/addons/account_credit_control/i18n/sr.po +1 -0
- odoo/addons/account_credit_control/i18n/sr@latin.po +1 -0
- odoo/addons/account_credit_control/i18n/sv.po +1 -0
- odoo/addons/account_credit_control/i18n/th.po +1 -0
- odoo/addons/account_credit_control/i18n/tr.po +1 -0
- odoo/addons/account_credit_control/i18n/tr_TR.po +1 -0
- odoo/addons/account_credit_control/i18n/uk.po +1 -0
- odoo/addons/account_credit_control/i18n/vi.po +1 -0
- odoo/addons/account_credit_control/i18n/vi_VN.po +1 -0
- odoo/addons/account_credit_control/i18n/zh_CN.po +1 -0
- odoo/addons/account_credit_control/i18n/zh_TW.po +1 -0
- odoo/addons/account_credit_control/models/credit_control_line.py +0 -24
- odoo/addons/account_credit_control/models/credit_control_policy.py +55 -9
- odoo/addons/account_credit_control/models/res_config_settings.py +6 -0
- odoo/addons/account_credit_control/static/description/index.html +1 -1
- odoo/addons/account_credit_control/tests/test_credit_control_run.py +35 -0
- odoo/addons/account_credit_control/views/credit_control_line.xml +13 -24
- odoo/addons/account_credit_control/views/credit_control_policy.xml +79 -62
- odoo/addons/account_credit_control/views/res_config_settings_view.xml +8 -0
- odoo/addons/account_credit_control/views/res_partner.xml +1 -4
- {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
- odoo_addon_account_credit_control-17.0.2.2.0.dist-info/RECORD +134 -0
- odoo_addon_account_credit_control-17.0.2.1.0.dist-info/RECORD +0 -134
- {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
- {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(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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:
|
|
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&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
|
-
<
|
|
215
|
-
|
|
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
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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="
|
|
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
|
-
<
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
name="
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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="
|
|
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.
|
|
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:
|
|
25
|
+
!! source digest: sha256:8d227f945da4773a09a1870bf1a39d6b943f789c4e1dc9cd3c396f12b481d985
|
|
26
26
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
27
27
|
|
|
28
28
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|