odoo-addon-base-tier-validation 17.0.2.1.3__py3-none-any.whl → 17.0.2.2.1__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.
@@ -7,7 +7,7 @@ Base Tier Validation
7
7
  !! This file is generated by oca-gen-addon-readme !!
8
8
  !! changes will be overwritten. !!
9
9
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
10
+ !! source digest: sha256:1d286dc389232f0cc60fd6012ae72c5eaf918284c9e7ef73da914cd6691cf822
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -44,6 +44,12 @@ See
44
44
  `purchase_tier_validation <https://github.com/OCA/purchase-workflow>`__
45
45
  as an example of implementation.
46
46
 
47
+ Additionally, if your state field is a (stored) computed field, you need
48
+ to set ``_tier_validation_state_field_is_computed`` to ``True`` in your
49
+ model Python file, and you will want to add the dependent fields of the
50
+ compute method in ``_get_after_validation_exceptions`` and
51
+ ``_get_under_validation_exceptions``.
52
+
47
53
  **Table of contents**
48
54
 
49
55
  .. contents::
@@ -241,7 +247,6 @@ Credits
241
247
  Authors
242
248
  -------
243
249
 
244
- * brain-tec AG
245
250
  * ForgeFlow
246
251
 
247
252
  Contributors
@@ -264,6 +269,8 @@ Contributors
264
269
 
265
270
  - Houzéfa Abbasbhay
266
271
 
272
+ - Stefan Rijnhart <stefan@opener.amsterdam>
273
+
267
274
  Maintainers
268
275
  -----------
269
276
 
@@ -1,14 +1,14 @@
1
- # Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
1
+ # Copyright 2017-24 ForgeFlow S.L. (https://www.forgeflow.com)
2
2
  # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
3
  {
4
4
  "name": "Base Tier Validation",
5
5
  "summary": "Implement a validation process based on tiers.",
6
- "version": "17.0.2.1.3",
6
+ "version": "17.0.2.2.1",
7
7
  "development_status": "Mature",
8
8
  "maintainers": ["LoisRForgeFlow"],
9
9
  "category": "Tools",
10
10
  "website": "https://github.com/OCA/server-ux",
11
- "author": "brain-tec AG, ForgeFlow, Odoo Community Association (OCA)",
11
+ "author": "ForgeFlow, Odoo Community Association (OCA)",
12
12
  "license": "AGPL-3",
13
13
  "application": False,
14
14
  "installable": True,
@@ -5,6 +5,7 @@
5
5
  from ast import literal_eval
6
6
 
7
7
  from lxml import etree
8
+ from psycopg2.extensions import AsIs
8
9
 
9
10
  from odoo import _, api, fields, models
10
11
  from odoo.exceptions import ValidationError
@@ -19,6 +20,7 @@ class TierValidation(models.AbstractModel):
19
20
 
20
21
  _tier_validation_buttons_xpath = "/form/header/button[last()]"
21
22
  _tier_validation_manual_config = True
23
+ _tier_validation_state_field_is_computed = False
22
24
 
23
25
  _state_field = "state"
24
26
  _state_from = ["draft"]
@@ -340,6 +342,39 @@ class TierValidation(models.AbstractModel):
340
342
  return allowed_field_names, not_allowed_field_names
341
343
 
342
344
  def write(self, vals):
345
+ self._tier_validation_check_state_on_write(vals)
346
+ self._tier_validation_check_write_allowed(vals)
347
+ self._tier_validation_check_write_remove_reviews(vals)
348
+ return super().write(vals)
349
+
350
+ def _write(self, vals):
351
+ if self._tier_validation_state_field_is_computed:
352
+ self._tier_validation_check_state_on_write(vals)
353
+ self._tier_validation_check_write_remove_reviews(vals)
354
+ return super()._write(vals)
355
+
356
+ def _tier_validation_get_current_state_value(self):
357
+ """Get the current value from the cache or the database.
358
+
359
+ If the field is set in a computed method, the value in the cache will
360
+ already be the updated value, so we need to revert to the raw data.
361
+ """
362
+ self.ensure_one()
363
+ if self._tier_validation_state_field_is_computed and isinstance(self.id, int):
364
+ self.env.cr.execute(
365
+ "select %(field)s from %(table)s where id = %(res_id)s",
366
+ {
367
+ "field": AsIs(self._state_field),
368
+ "table": AsIs(self._table),
369
+ "res_id": self.id,
370
+ },
371
+ )
372
+ rows = self.env.cr.fetchall()
373
+ if rows:
374
+ return rows[0][0]
375
+ return self[self._state_field]
376
+
377
+ def _tier_validation_check_state_on_write(self, vals):
343
378
  for rec in self:
344
379
  if rec._check_state_conditions(vals):
345
380
  if rec.need_validation:
@@ -360,6 +395,9 @@ class TierValidation(models.AbstractModel):
360
395
  "one record."
361
396
  )
362
397
  )
398
+
399
+ def _tier_validation_check_write_allowed(self, vals):
400
+ for rec in self:
363
401
  # Write under validation
364
402
  if (
365
403
  rec.review_ids
@@ -391,7 +429,7 @@ class TierValidation(models.AbstractModel):
391
429
  if (
392
430
  rec._get_validation_exceptions(add_base_exceptions=False)
393
431
  and rec.validation_status == "validated"
394
- and getattr(rec, self._state_field)
432
+ and rec._tier_validation_get_current_state_value()
395
433
  in (self._state_to + [self._cancel_state])
396
434
  and not rec._check_allow_write_after_validation(vals)
397
435
  and not rec._context.get("skip_validation_check")
@@ -413,9 +451,11 @@ class TierValidation(models.AbstractModel):
413
451
  "allowed_fields": "\n- ".join(allowed_fields),
414
452
  }
415
453
  )
454
+
455
+ def _tier_validation_check_write_remove_reviews(self, vals):
456
+ for rec in self:
416
457
  if rec._allow_to_remove_reviews(vals):
417
458
  rec.mapped("review_ids").unlink()
418
- return super().write(vals)
419
459
 
420
460
  def _allow_to_remove_reviews(self, values):
421
461
  """Method for deciding whether the elimination of revisions is necessary."""
@@ -423,7 +463,7 @@ class TierValidation(models.AbstractModel):
423
463
  state_to = values.get(self._state_field)
424
464
  if not state_to:
425
465
  return False
426
- state_from = self[self._state_field]
466
+ state_from = self._tier_validation_get_current_state_value()
427
467
  # If you change to _cancel_state
428
468
  if state_to in (self._cancel_state):
429
469
  return True
@@ -435,7 +475,7 @@ class TierValidation(models.AbstractModel):
435
475
  def _check_state_from_condition(self):
436
476
  return self.env.context.get("skip_check_state_condition") or (
437
477
  self._state_field in self._fields
438
- and getattr(self, self._state_field) in self._state_from
478
+ and self._tier_validation_get_current_state_value() in self._state_from
439
479
  )
440
480
 
441
481
  def _check_state_conditions(self, vals):
@@ -13,3 +13,4 @@
13
13
  - Eduardo de Miguel \<<edu@moduon.team>\>
14
14
  - [XCG Consulting](https://xcg-consulting.fr):
15
15
  - Houzéfa Abbasbhay
16
+ - Stefan Rijnhart \<<stefan@opener.amsterdam>\>
@@ -12,3 +12,8 @@ some development.
12
12
 
13
13
  See [purchase_tier_validation](https://github.com/OCA/purchase-workflow)
14
14
  as an example of implementation.
15
+
16
+ Additionally, if your state field is a (stored) computed field, you need to
17
+ set `_tier_validation_state_field_is_computed` to `True` in your model Python
18
+ file, and you will want to add the dependent fields of the compute method
19
+ in `_get_after_validation_exceptions` and `_get_under_validation_exceptions`.
@@ -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:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
370
+ !! source digest: sha256:1d286dc389232f0cc60fd6012ae72c5eaf918284c9e7ef73da914cd6691cf822
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
372
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Mature" src="https://img.shields.io/badge/maturity-Mature-brightgreen.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/server-ux/tree/17.0/base_tier_validation"><img alt="OCA/server-ux" src="https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-ux-17-0/server-ux-17-0-base_tier_validation"><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/server-ux&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>Validating some operations is a common need across different areas in a
@@ -382,6 +382,11 @@ some development.</p>
382
382
  <p>See
383
383
  <a class="reference external" href="https://github.com/OCA/purchase-workflow">purchase_tier_validation</a>
384
384
  as an example of implementation.</p>
385
+ <p>Additionally, if your state field is a (stored) computed field, you need
386
+ to set <tt class="docutils literal">_tier_validation_state_field_is_computed</tt> to <tt class="docutils literal">True</tt> in your
387
+ model Python file, and you will want to add the dependent fields of the
388
+ compute method in <tt class="docutils literal">_get_after_validation_exceptions</tt> and
389
+ <tt class="docutils literal">_get_under_validation_exceptions</tt>.</p>
385
390
  <p><strong>Table of contents</strong></p>
386
391
  <div class="contents local topic" id="contents">
387
392
  <ul class="simple">
@@ -594,7 +599,6 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
594
599
  <div class="section" id="authors">
595
600
  <h2><a class="toc-backref" href="#toc-entry-21">Authors</a></h2>
596
601
  <ul class="simple">
597
- <li>brain-tec AG</li>
598
602
  <li>ForgeFlow</li>
599
603
  </ul>
600
604
  </div>
@@ -618,6 +622,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
618
622
  <li>Houzéfa Abbasbhay</li>
619
623
  </ul>
620
624
  </li>
625
+ <li>Stefan Rijnhart &lt;<a class="reference external" href="mailto:stefan&#64;opener.amsterdam">stefan&#64;opener.amsterdam</a>&gt;</li>
621
626
  </ul>
622
627
  </div>
623
628
  <div class="section" id="maintainers">
@@ -19,14 +19,21 @@ class CommonTierValidation(common.TransactionCase):
19
19
  TierDefinition,
20
20
  TierValidationTester,
21
21
  TierValidationTester2,
22
+ TierValidationTesterComputed,
22
23
  )
23
24
 
24
25
  cls.loader.update_registry(
25
- (TierValidationTester, TierValidationTester2, TierDefinition)
26
+ (
27
+ TierValidationTester,
28
+ TierValidationTester2,
29
+ TierValidationTesterComputed,
30
+ TierDefinition,
31
+ )
26
32
  )
27
33
 
28
34
  cls.test_model = cls.env[TierValidationTester._name]
29
35
  cls.test_model_2 = cls.env[TierValidationTester2._name]
36
+ cls.test_model_computed = cls.env[TierValidationTesterComputed._name]
30
37
 
31
38
  cls.tester_model = cls.env["ir.model"].search(
32
39
  [("model", "=", "tier.validation.tester")]
@@ -34,34 +41,32 @@ class CommonTierValidation(common.TransactionCase):
34
41
  cls.tester_model_2 = cls.env["ir.model"].search(
35
42
  [("model", "=", "tier.validation.tester2")]
36
43
  )
37
-
38
- # Access record:
39
- cls.env["ir.model.access"].create(
40
- {
41
- "name": "access.tester",
42
- "model_id": cls.tester_model.id,
43
- "perm_read": 1,
44
- "perm_write": 1,
45
- "perm_create": 1,
46
- "perm_unlink": 1,
47
- }
44
+ cls.tester_model_computed = cls.env["ir.model"].search(
45
+ [("model", "=", "tier.validation.tester.computed")]
48
46
  )
49
- cls.env["ir.model.access"].create(
50
- {
51
- "name": "access.tester2",
52
- "model_id": cls.tester_model_2.id,
53
- "perm_read": 1,
54
- "perm_write": 1,
55
- "perm_create": 1,
56
- "perm_unlink": 1,
57
- }
47
+
48
+ models = (
49
+ cls.tester_model,
50
+ cls.tester_model_2,
51
+ cls.tester_model_computed,
58
52
  )
53
+ for model in models:
54
+ # Access record:
55
+ cls.env["ir.model.access"].create(
56
+ {
57
+ "name": f"access {model.name}",
58
+ "model_id": model.id,
59
+ "perm_read": 1,
60
+ "perm_write": 1,
61
+ "perm_create": 1,
62
+ "perm_unlink": 1,
63
+ }
64
+ )
59
65
 
60
- # Define views to avoid automatic views with all fields.
61
- for model in cls.test_model._name, cls.test_model_2._name:
66
+ # Define views to avoid automatic views with all fields.
62
67
  cls.env["ir.ui.view"].create(
63
68
  {
64
- "model": model,
69
+ "model": model.model,
65
70
  "name": f"Demo view for {model}",
66
71
  "arch": """<form>
67
72
  <header>
@@ -103,6 +108,7 @@ class CommonTierValidation(common.TransactionCase):
103
108
 
104
109
  cls.test_record = cls.test_model.create({"test_field": 1.0})
105
110
  cls.test_record_2 = cls.test_model_2.create({"test_field": 1.0})
111
+ cls.test_record_computed = cls.test_model_computed.create({"test_field": 1.0})
106
112
 
107
113
  cls.tier_def_obj.create(
108
114
  {
@@ -142,6 +148,19 @@ class CommonTierValidation(common.TransactionCase):
142
148
  }
143
149
  )
144
150
 
151
+ cls.tier_def_obj.create(
152
+ {
153
+ "model_id": cls.tester_model_computed.id,
154
+ "review_type": "individual",
155
+ "reviewer_id": cls.test_user_1.id,
156
+ "definition_domain": "[]",
157
+ "approve_sequence": True,
158
+ "notify_on_pending": False,
159
+ "sequence": 20,
160
+ "name": "Definition for computed model",
161
+ }
162
+ )
163
+
145
164
  @classmethod
146
165
  def tearDownClass(cls):
147
166
  cls.loader.restore_registry()
@@ -970,6 +970,35 @@ class TierTierValidation(CommonTierValidation):
970
970
  )
971
971
  self.assertEqual(self.test_record.test_validation_field, 4)
972
972
 
973
+ def test_26_computed_state_field(self):
974
+ """Test the regular flow on a model where state is a computed field"""
975
+ # The record cannot be confirmed without validation
976
+ with self.assertRaisesRegex(
977
+ ValidationError,
978
+ "This action needs to be validated",
979
+ ):
980
+ with self.env.cr.savepoint():
981
+ self.test_record_computed.action_confirm()
982
+ # Flush manually to trigger the _write
983
+ self.test_record_computed.flush_recordset()
984
+ self.assertEqual(self.test_record_computed.state, "draft")
985
+ # The validation is performed
986
+ self.test_record_computed.request_validation()
987
+ self.test_record_computed.invalidate_recordset()
988
+ self.assertEqual(self.test_record_computed.review_ids.status, "waiting")
989
+ self.test_record_computed.with_user(self.test_user_1).validate_tier()
990
+ self.test_record_computed.invalidate_recordset()
991
+ self.assertEqual(self.test_record_computed.review_ids.status, "approved")
992
+ # After validation, the record can be confirmed
993
+ self.test_record_computed.action_confirm()
994
+ self.test_record_computed.flush_recordset()
995
+ self.assertEqual(self.test_record_computed.state, "confirmed")
996
+ # After cancelling, the reviews are removed
997
+ self.test_record_computed.action_cancel()
998
+ self.test_record_computed.flush_recordset()
999
+ self.assertFalse(self.test_record_computed.review_ids)
1000
+ self.test_record_computed.invalidate_recordset()
1001
+
973
1002
 
974
1003
  @tagged("at_install")
975
1004
  class TierTierValidationView(CommonTierValidation):
@@ -48,6 +48,59 @@ class TierValidationTester2(models.Model):
48
48
  self.write({"state": "confirmed"})
49
49
 
50
50
 
51
+ class TierValidationTesterComputed(models.Model):
52
+ _name = "tier.validation.tester.computed"
53
+ _description = "Tier Validation Tester Computed"
54
+ _inherit = ["tier.validation"]
55
+ _tier_validation_manual_config = False
56
+ _tier_validation_state_field_is_computed = True
57
+
58
+ confirmed = fields.Boolean()
59
+ cancelled = fields.Boolean()
60
+ state = fields.Selection(
61
+ selection=[
62
+ ("draft", "Draft"),
63
+ ("confirmed", "Confirmed"),
64
+ ("cancel", "Cancel"),
65
+ ],
66
+ compute="_compute_state",
67
+ store=True,
68
+ )
69
+ test_field = fields.Float()
70
+ test_validation_field = fields.Float()
71
+ user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users")
72
+
73
+ @api.model
74
+ def _get_after_validation_exceptions(self):
75
+ return super()._get_after_validation_exceptions() + [
76
+ "confirmed",
77
+ "cancelled",
78
+ ]
79
+
80
+ @api.model
81
+ def _get_under_validation_exceptions(self):
82
+ return super()._get_under_validation_exceptions() + [
83
+ "confirmed",
84
+ "cancelled",
85
+ ]
86
+
87
+ @api.depends("confirmed", "cancelled")
88
+ def _compute_state(self):
89
+ for rec in self:
90
+ if rec.cancelled:
91
+ rec.state = "cancel"
92
+ elif rec.confirmed:
93
+ rec.state = "confirmed"
94
+ else:
95
+ rec.state = "draft"
96
+
97
+ def action_confirm(self):
98
+ self.write({"confirmed": True})
99
+
100
+ def action_cancel(self):
101
+ self.write({"cancelled": True})
102
+
103
+
51
104
  class TierDefinition(models.Model):
52
105
  _inherit = "tier.definition"
53
106
 
@@ -56,4 +109,5 @@ class TierDefinition(models.Model):
56
109
  res = super()._get_tier_validation_model_names()
57
110
  res.append("tier.validation.tester")
58
111
  res.append("tier.validation.tester2")
112
+ res.append("tier.validation.tester.computed")
59
113
  return res
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base_tier_validation
3
- Version: 17.0.2.1.3
3
+ Version: 17.0.2.2.1
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo>=17.0a,<17.1dev
6
6
  Summary: Implement a validation process based on tiers.
7
7
  Home-page: https://github.com/OCA/server-ux
8
8
  License: AGPL-3
9
- Author: brain-tec AG, ForgeFlow, Odoo Community Association (OCA)
9
+ Author: ForgeFlow, Odoo Community Association (OCA)
10
10
  Author-email: support@odoo-community.org
11
11
  Classifier: Programming Language :: Python
12
12
  Classifier: Framework :: Odoo
@@ -23,7 +23,7 @@ Base Tier Validation
23
23
  !! This file is generated by oca-gen-addon-readme !!
24
24
  !! changes will be overwritten. !!
25
25
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26
- !! source digest: sha256:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
26
+ !! source digest: sha256:1d286dc389232f0cc60fd6012ae72c5eaf918284c9e7ef73da914cd6691cf822
27
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
28
 
29
29
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -60,6 +60,12 @@ See
60
60
  `purchase_tier_validation <https://github.com/OCA/purchase-workflow>`__
61
61
  as an example of implementation.
62
62
 
63
+ Additionally, if your state field is a (stored) computed field, you need
64
+ to set ``_tier_validation_state_field_is_computed`` to ``True`` in your
65
+ model Python file, and you will want to add the dependent fields of the
66
+ compute method in ``_get_after_validation_exceptions`` and
67
+ ``_get_under_validation_exceptions``.
68
+
63
69
  **Table of contents**
64
70
 
65
71
  .. contents::
@@ -257,7 +263,6 @@ Credits
257
263
  Authors
258
264
  -------
259
265
 
260
- * brain-tec AG
261
266
  * ForgeFlow
262
267
 
263
268
  Contributors
@@ -280,6 +285,8 @@ Contributors
280
285
 
281
286
  - Houzéfa Abbasbhay
282
287
 
288
+ - Stefan Rijnhart <stefan@opener.amsterdam>
289
+
283
290
  Maintainers
284
291
  -----------
285
292
 
@@ -1,6 +1,6 @@
1
- odoo/addons/base_tier_validation/README.rst,sha256=Ld-IIPAHTISx2dTFI-yWrQLQfnMA2__1aq7Z9jlMGqc,8628
1
+ odoo/addons/base_tier_validation/README.rst,sha256=NXljPME_Y-feJlmn6HwziZCNrog3oSMMc3jTmQ0xRwo,8974
2
2
  odoo/addons/base_tier_validation/__init__.py,sha256=rKfzYX9RhkkCxgh2f0PJLYN45Kw8T8-fwxw1pbjLuug,108
3
- odoo/addons/base_tier_validation/__manifest__.py,sha256=82UECwQ51OwK3D4z_eg9uJBx2QUiy2Jt_jFATHT10Zg,1658
3
+ odoo/addons/base_tier_validation/__manifest__.py,sha256=MYmD2UnjVyY4Vi-jwxlED14VnsitZAknJ5vkyEjaA-Y,1644
4
4
  odoo/addons/base_tier_validation/data/mail_data.xml,sha256=UKzkLT8rYrFuThdp43v7nLW5SOco4vvIIAhbB_IAQZs,1414
5
5
  odoo/addons/base_tier_validation/i18n/base_tier_validation.pot,sha256=kMrxSb-JBx09Ips79-X6pyC0yPsc-fEQ8W_1Zv9z1wM,31554
6
6
  odoo/addons/base_tier_validation/i18n/es.po,sha256=foXNBuNeOITckWNhyRzAi_MnAAcH0TL17il_MM2x2xc,37396
@@ -16,17 +16,17 @@ odoo/addons/base_tier_validation/models/res_config_settings.py,sha256=xMdQiCfU5p
16
16
  odoo/addons/base_tier_validation/models/res_users.py,sha256=rpXM9gCB1sIdFYU032VPJh6v3BWRAiwnmXi8Ukuk8CY,1985
17
17
  odoo/addons/base_tier_validation/models/tier_definition.py,sha256=I-HeOZopA1n-bISs28XDeAosUrTnhL_mp_TB3awb2w0,4168
18
18
  odoo/addons/base_tier_validation/models/tier_review.py,sha256=vuR832VVM-ZUDm-4j9zK1BSNnL0JfesxBSLyhW4Zia8,6754
19
- odoo/addons/base_tier_validation/models/tier_validation.py,sha256=ahNgJJAfULCescQrih72IPvGbzpBrdr7iPL9IAiY6oY,32943
19
+ odoo/addons/base_tier_validation/models/tier_validation.py,sha256=-ipA8E1C8VUIiCPfok9_ARyKVJuNbrGCi6daKpFEXuI,34585
20
20
  odoo/addons/base_tier_validation/models/tier_validation_exception.py,sha256=9H_FbTF04IyB2u6a82UAdIPmv_MUcFKmLNVl7UOM1lg,2882
21
21
  odoo/addons/base_tier_validation/readme/CONFIGURE.md,sha256=MuyVCH75T0_3Rtrkl7RUg7XzxjoU7zUkbPWv84_a-XU,1709
22
- odoo/addons/base_tier_validation/readme/CONTRIBUTORS.md,sha256=DJp09K9mooM4Qy1fPUVPjAU02fUNudXVeTRzA2gxOoA,616
23
- odoo/addons/base_tier_validation/readme/DESCRIPTION.md,sha256=nFbYOx89EsI26v6NJF9d-Wm-X2YtHduSRlV5Euk3WWc,651
22
+ odoo/addons/base_tier_validation/readme/CONTRIBUTORS.md,sha256=QM71L1RKrzDEgNvfgXjNAoWy3dMxH5k26HhcrrpdYRs,664
23
+ odoo/addons/base_tier_validation/readme/DESCRIPTION.md,sha256=SJukiMB1jvhcY8zrM6BLWCJrLJtMUPAg7dzzmJbyv18,958
24
24
  odoo/addons/base_tier_validation/readme/HISTORY.md,sha256=P8GfoUhYG7QGIpa8Z0L67E3YEeZBFQCwpDXnt5WG-DY,1332
25
25
  odoo/addons/base_tier_validation/readme/ROADMAP.md,sha256=HRRQQuOlSeOF5yfqG0KuANnvrde8y6Suz2pbrXB1OyU,864
26
26
  odoo/addons/base_tier_validation/security/ir.model.access.csv,sha256=g6B58IuYYqxD54e9I9vyre7mD74tkpauqTqMAH4Oey0,1134
27
27
  odoo/addons/base_tier_validation/security/tier_validation_security.xml,sha256=eWFwz-osHgYFmVoEVzOSboO9oqUMtQ8oygyaz0os50Y,806
28
28
  odoo/addons/base_tier_validation/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
29
- odoo/addons/base_tier_validation/static/description/index.html,sha256=iVRJ2j6554X9FdtcNi3TcMndjSeq3Oe1t80BWqyRr34,23191
29
+ odoo/addons/base_tier_validation/static/description/index.html,sha256=7vMyz90jgwGeAmxEIIf_D6chvzrBBXUHG5l5rHvZ5Fw,23747
30
30
  odoo/addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.esm.js,sha256=MNfjKSg-9h3JfeXiYlf15SAdVHjj3aUvedj0BqVvJrk,2254
31
31
  odoo/addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml,sha256=_wIy5Gv2VUJEXD5_FGphx1J19-Y8uzFlWryuPqlIh8c,2798
32
32
  odoo/addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js,sha256=MDWUp2ozeRdBoLeCfTcOnD-bKnk3yF6pHwtTAnsLZmg,1090
@@ -35,9 +35,9 @@ odoo/addons/base_tier_validation/static/src/components/tier_review_widget/tier_r
35
35
  odoo/addons/base_tier_validation/static/src/js/services/tier_review_service.esm.js,sha256=E4xNh1WmnofpFt88EYYCGcDWyP53S2Mt450QawcrsCM,972
36
36
  odoo/addons/base_tier_validation/templates/tier_validation_templates.xml,sha256=VI6kY0V6nVSz6KQ9GRxY_9TZkRrJgzBzsl9xFKtA__Y,3620
37
37
  odoo/addons/base_tier_validation/tests/__init__.py,sha256=3z2_lQ9JiDSFDam4p24qDw5j02iaPb4m2naxv9DkbGA,122
38
- odoo/addons/base_tier_validation/tests/common.py,sha256=9KAJHlWXLj9TDX2ZM_J5WhDC53jTojRiObPKxc4bcFI,5211
39
- odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=YLSMmtVxFdoMg6xHIJr_hI0X76dEaognFnPcc92ELRQ,40561
40
- odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=3usFbhfDhlKIWbVu--3qsbsm52B6RwTP4zy244dY1yk,1757
38
+ odoo/addons/base_tier_validation/tests/common.py,sha256=iqVkPTebb6oKgapgFeNwORgR_0-vO2Ttd0WA6-Ggd_A,5944
39
+ odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=UIrjZBY8x9Ch6BYKXjy_YN4PLZL0HG_GMyUzM5Cb8YI,42106
40
+ odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=m25QbB9-9Goxx1Fiz0qwsVO3WPL6jrtMlGDW6VQbLik,3345
41
41
  odoo/addons/base_tier_validation/views/res_config_settings_views.xml,sha256=5HbrsAVaXRoQNX7utIQ_EzZrqzKnwBrV9uHsi-PHb9M,2640
42
42
  odoo/addons/base_tier_validation/views/tier_definition_view.xml,sha256=FHpO2tW8FYKQffayERVlQEJH_ip8baZ7nC1NcFDsP7Y,7635
43
43
  odoo/addons/base_tier_validation/views/tier_review_view.xml,sha256=tPzmpz-kbQwOOtJrAcsTJEP9bJLcfzWAITCpI86kZU4,966
@@ -45,7 +45,7 @@ odoo/addons/base_tier_validation/views/tier_validation_exception_view.xml,sha256
45
45
  odoo/addons/base_tier_validation/wizard/__init__.py,sha256=52q6-LAjYeJ1Vu5ahon_jnhds9VsoJvYaQCiZc82WKw,95
46
46
  odoo/addons/base_tier_validation/wizard/comment_wizard.py,sha256=gj7zCcpe47-2ifxSRlE6okQ1wtq5Ok3JBVg2CtN0ZIU,879
47
47
  odoo/addons/base_tier_validation/wizard/comment_wizard_view.xml,sha256=9XFTqrNwDCZH2IEX3HutaznSkBYk-6RERXzUDwObz4I,979
48
- odoo_addon_base_tier_validation-17.0.2.1.3.dist-info/METADATA,sha256=5DrBRcHvlkRwoFsVJmA6rhyFxcFMg4gE20Ca0LCLMmU,9224
49
- odoo_addon_base_tier_validation-17.0.2.1.3.dist-info/WHEEL,sha256=8Rd4enx1PCuyDWP4SABqO5Fv8rpaknqp3VzjoFFLa6c,83
50
- odoo_addon_base_tier_validation-17.0.2.1.3.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
51
- odoo_addon_base_tier_validation-17.0.2.1.3.dist-info/RECORD,,
48
+ odoo_addon_base_tier_validation-17.0.2.2.1.dist-info/METADATA,sha256=IA9cZ8gPYKz4wnmbmJT5epcoXMWf59rAcxaSGF8-SOc,9556
49
+ odoo_addon_base_tier_validation-17.0.2.2.1.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
50
+ odoo_addon_base_tier_validation-17.0.2.2.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
51
+ odoo_addon_base_tier_validation-17.0.2.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: Whool 1.0.1
2
+ Generator: Whool 1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5