odoo-addon-base-tier-validation 17.0.2.1.1.2__py3-none-any.whl → 17.0.2.1.3__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:7cd893ad4c0ec4a8016552e03b14d5688a73089c9e0249f35340050655889f41
10
+ !! source digest: sha256:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -260,6 +260,9 @@ Contributors
260
260
  - Evan Soh <evan.soh@omnisoftsolution.com>
261
261
  - Manuel Regidor <manuel.regidor@sygel.es>
262
262
  - Eduardo de Miguel <edu@moduon.team>
263
+ - `XCG Consulting <https://xcg-consulting.fr>`__:
264
+
265
+ - Houzéfa Abbasbhay
263
266
 
264
267
  Maintainers
265
268
  -----------
@@ -3,7 +3,7 @@
3
3
  {
4
4
  "name": "Base Tier Validation",
5
5
  "summary": "Implement a validation process based on tiers.",
6
- "version": "17.0.2.1.1",
6
+ "version": "17.0.2.1.3",
7
7
  "development_status": "Mature",
8
8
  "maintainers": ["LoisRForgeFlow"],
9
9
  "category": "Tools",
@@ -45,19 +45,3 @@ class Users(models.Model):
45
45
  "pending_count": len(records),
46
46
  }
47
47
  return list(user_reviews.values())
48
-
49
- @api.model
50
- def get_reviews(self, data):
51
- review_obj = self.env["tier.review"].with_context(lang=self.env.user.lang)
52
- res = review_obj.search_read([("id", "in", data.get("res_ids"))])
53
- for r in res:
54
- # Get the translated status value.
55
- r["display_status"] = dict(
56
- review_obj.fields_get("status")["status"]["selection"]
57
- ).get(r.get("status"))
58
- # Convert to datetime timezone
59
- if r["reviewed_date"]:
60
- r["reviewed_date"] = fields.Datetime.context_timestamp(
61
- self, r["reviewed_date"]
62
- )
63
- return res
@@ -749,16 +749,11 @@ class TierValidation(models.AbstractModel):
749
749
  @api.model
750
750
  def get_view(self, view_id=None, view_type="form", **options):
751
751
  res = super().get_view(view_id=view_id, view_type=view_type, **options)
752
-
753
752
  View = self.env["ir.ui.view"]
754
-
755
- # Override context for postprocessing
756
- if view_id and res.get("base_model", self._name) != self._name:
757
- View = View.with_context(base_model_name=res["base_model"])
758
753
  if view_type == "form" and not self._tier_validation_manual_config:
759
754
  doc = etree.XML(res["arch"])
760
755
  params = {}
761
- all_models = res["models"].copy()
756
+ all_models = res["models"].copy() # {modelname(str) ➔ fields(tuple)}
762
757
  for node in doc.xpath(self._tier_validation_buttons_xpath):
763
758
  # By default, after the last button of the header
764
759
  # _add_tier_validation_buttons process
@@ -767,6 +762,7 @@ class TierValidation(models.AbstractModel):
767
762
  new_node = etree.fromstring(new_arch)
768
763
  for new_element in new_node:
769
764
  node.addnext(new_element)
765
+ _merge_view_fields(all_models, new_models)
770
766
  for node in doc.xpath("/form/sheet"):
771
767
  # _add_tier_validation_label process
772
768
  new_node = self._add_tier_validation_label(node, params)
@@ -774,18 +770,13 @@ class TierValidation(models.AbstractModel):
774
770
  new_node = etree.fromstring(new_arch)
775
771
  for new_element in new_node:
776
772
  node.addprevious(new_element)
773
+ _merge_view_fields(all_models, new_models)
777
774
  # _add_tier_validation_reviews process
778
775
  new_node = self._add_tier_validation_reviews(node, params)
779
776
  new_arch, new_models = View.postprocess_and_fields(new_node, self._name)
780
- for model in new_models:
781
- if model in all_models:
782
- continue
783
- if model not in res["models"]:
784
- all_models[model] = new_models[model]
785
- else:
786
- all_models[model] = res["models"][model]
787
777
  new_node = etree.fromstring(new_arch)
788
778
  node.append(new_node)
779
+ _merge_view_fields(all_models, new_models)
789
780
  excepted_fields = self._get_all_validation_exceptions()
790
781
  for node in doc.xpath("//field[@name][not(ancestor::field)]"):
791
782
  if node.attrib.get("name") in excepted_fields:
@@ -817,3 +808,12 @@ class TierValidation(models.AbstractModel):
817
808
  subtype_xmlid=self._get_requested_notification_subtype(),
818
809
  body=rec._notify_requested_review_body(),
819
810
  )
811
+
812
+
813
+ def _merge_view_fields(all_models: dict, new_models: dict):
814
+ """Merge new_models into all_models. Both are {modelname(str) ➔ fields(tuple)}."""
815
+ for model, view_fields in new_models.items():
816
+ if model in all_models:
817
+ all_models[model] = tuple(set(all_models[model]) | set(view_fields))
818
+ else:
819
+ all_models[model] = tuple(view_fields)
@@ -10,4 +10,6 @@
10
10
  - bosd
11
11
  - Evan Soh \<<evan.soh@omnisoftsolution.com>\>
12
12
  - Manuel Regidor \<<manuel.regidor@sygel.es>\>
13
- - Eduardo de Miguel \<<edu@moduon.team>\>
13
+ - Eduardo de Miguel \<<edu@moduon.team>\>
14
+ - [XCG Consulting](https://xcg-consulting.fr):
15
+ - Houzéfa Abbasbhay
@@ -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:7cd893ad4c0ec4a8016552e03b14d5688a73089c9e0249f35340050655889f41
370
+ !! source digest: sha256:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
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
@@ -614,6 +614,10 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
614
614
  <li>Evan Soh &lt;<a class="reference external" href="mailto:evan.soh&#64;omnisoftsolution.com">evan.soh&#64;omnisoftsolution.com</a>&gt;</li>
615
615
  <li>Manuel Regidor &lt;<a class="reference external" href="mailto:manuel.regidor&#64;sygel.es">manuel.regidor&#64;sygel.es</a>&gt;</li>
616
616
  <li>Eduardo de Miguel &lt;<a class="reference external" href="mailto:edu&#64;moduon.team">edu&#64;moduon.team</a>&gt;</li>
617
+ <li><a class="reference external" href="https://xcg-consulting.fr">XCG Consulting</a>:<ul>
618
+ <li>Houzéfa Abbasbhay</li>
619
+ </ul>
620
+ </li>
617
621
  </ul>
618
622
  </div>
619
623
  <div class="section" id="maintainers">
@@ -57,6 +57,24 @@ class CommonTierValidation(common.TransactionCase):
57
57
  }
58
58
  )
59
59
 
60
+ # Define views to avoid automatic views with all fields.
61
+ for model in cls.test_model._name, cls.test_model_2._name:
62
+ cls.env["ir.ui.view"].create(
63
+ {
64
+ "model": model,
65
+ "name": f"Demo view for {model}",
66
+ "arch": """<form>
67
+ <header>
68
+ <button name="action_confirm" type="object" string="Confirm" />
69
+ <field name="state" widget="statusbar" />
70
+ </header>
71
+ <sheet>
72
+ <field name="test_field" />
73
+ </sheet>
74
+ </form>""",
75
+ }
76
+ )
77
+
60
78
  # Create users:
61
79
  group_ids = cls.env.ref("base.group_system").ids
62
80
  cls.test_user_1 = cls.env["res.users"].create(
@@ -417,9 +417,7 @@ class TierTierValidation(CommonTierValidation):
417
417
  # Request validation
418
418
  review = test_record.with_user(self.test_user_2).request_validation()
419
419
  self.assertTrue(review)
420
- self.assertTrue(self.test_user_1.get_reviews({"res_ids": review.ids}))
421
- self.assertTrue(self.test_user_1.review_ids)
422
- test_record.invalidate_model()
420
+ self.env.invalidate_all()
423
421
  self.assertTrue(test_record.review_ids)
424
422
  # Used by front-end
425
423
  count = self.test_user_1.with_user(self.test_user_1).review_user_count()
@@ -475,8 +473,6 @@ class TierTierValidation(CommonTierValidation):
475
473
  self.assertEqual(len(records), 1)
476
474
  review = self.test_record.with_user(self.test_user_2.id).request_validation()
477
475
  self.assertTrue(review)
478
- self.assertTrue(self.test_user_1.get_reviews({"res_ids": review.ids}))
479
- self.assertTrue(self.test_user_1.review_ids)
480
476
  self.test_record.with_user(self.test_user_1.id).request_validation()
481
477
 
482
478
  def test_18_test_review_by_res_users_field(self):
@@ -978,23 +974,6 @@ class TierTierValidation(CommonTierValidation):
978
974
  @tagged("at_install")
979
975
  class TierTierValidationView(CommonTierValidation):
980
976
  def test_view_manual(self):
981
- # We need to add a view in order to ensure that an automatic view with all
982
- # fields is not created
983
- self.env["ir.ui.view"].create(
984
- {
985
- "model": self.test_record._name,
986
- "name": "Demo view",
987
- "arch": """<form>
988
- <header>
989
- <button name="action_confirm" type="object" string="Confirm" />
990
- <field name="state" widget="statusbar" />
991
- </header>
992
- <sheet>
993
- <field name="test_field" />
994
- </sheet>
995
- </form>""",
996
- }
997
- )
998
977
  view = self.env[self.test_record._name].get_view(False, "form")
999
978
  with Form(self.test_record) as f:
1000
979
  self.assertNotIn("review_ids", f._values)
@@ -1004,23 +983,6 @@ class TierTierValidationView(CommonTierValidation):
1004
983
  self.assertFalse(form.xpath("//button[@name='request_validation']"))
1005
984
 
1006
985
  def test_view_automatic(self):
1007
- # We need to add a view in order to ensure that an automatic view with all
1008
- # fields is not created
1009
- self.env["ir.ui.view"].create(
1010
- {
1011
- "model": self.test_record_2._name,
1012
- "name": "Demo view",
1013
- "arch": """<form>
1014
- <header>
1015
- <button name="action_confirm" type="object" string="Confirm" />
1016
- <field name="state" widget="statusbar" />
1017
- </header>
1018
- <sheet>
1019
- <field name="test_field" />
1020
- </sheet>
1021
- </form>""",
1022
- }
1023
- )
1024
986
  view = self.env[self.test_record_2._name].get_view(False, "form")
1025
987
  with Form(self.test_record_2) as f:
1026
988
  self.assertIn("review_ids", f._values)
@@ -1028,3 +990,13 @@ class TierTierValidationView(CommonTierValidation):
1028
990
  self.assertTrue(form.xpath("//field[@name='review_ids']"))
1029
991
  self.assertTrue(form.xpath("//field[@name='can_review']"))
1030
992
  self.assertTrue(form.xpath("//button[@name='request_validation']"))
993
+
994
+ def test_get_view(self):
995
+ view = self.test_record_2.get_view()
996
+ model = "tier.validation.tester2"
997
+ self.assertEqual(view["model"], model)
998
+ self.assertEqual(view["models"].keys(), {model, "tier.review"})
999
+ self.assertIn("id", view["models"][model])
1000
+ self.assertIn("need_validation", view["models"][model])
1001
+ self.assertIn("next_review", view["models"][model])
1002
+ self.assertIn("review_ids", view["models"][model])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base_tier_validation
3
- Version: 17.0.2.1.1.2
3
+ Version: 17.0.2.1.3
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.
@@ -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:7cd893ad4c0ec4a8016552e03b14d5688a73089c9e0249f35340050655889f41
26
+ !! source digest: sha256:e78157d81ee550ef47e5520ef00a14fb058f92df85cfe32b5c96ced4df9c697d
27
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
28
 
29
29
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -276,6 +276,9 @@ Contributors
276
276
  - Evan Soh <evan.soh@omnisoftsolution.com>
277
277
  - Manuel Regidor <manuel.regidor@sygel.es>
278
278
  - Eduardo de Miguel <edu@moduon.team>
279
+ - `XCG Consulting <https://xcg-consulting.fr>`__:
280
+
281
+ - Houzéfa Abbasbhay
279
282
 
280
283
  Maintainers
281
284
  -----------
@@ -1,6 +1,6 @@
1
- odoo/addons/base_tier_validation/README.rst,sha256=b7egJBq94kMcpK1xQBNz_5B8jUDSObnO8gjucA-HS-8,8551
1
+ odoo/addons/base_tier_validation/README.rst,sha256=Ld-IIPAHTISx2dTFI-yWrQLQfnMA2__1aq7Z9jlMGqc,8628
2
2
  odoo/addons/base_tier_validation/__init__.py,sha256=rKfzYX9RhkkCxgh2f0PJLYN45Kw8T8-fwxw1pbjLuug,108
3
- odoo/addons/base_tier_validation/__manifest__.py,sha256=-X_LhicXVWXfdmx9dtMa80L6J3Qkyv0uPDxGpj8MkbA,1658
3
+ odoo/addons/base_tier_validation/__manifest__.py,sha256=82UECwQ51OwK3D4z_eg9uJBx2QUiy2Jt_jFATHT10Zg,1658
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
@@ -13,20 +13,20 @@ odoo/addons/base_tier_validation/i18n/tr.po,sha256=vNq0HkHCwi9WL5fihgHtGY1aZFChx
13
13
  odoo/addons/base_tier_validation/i18n/zh_CN.po,sha256=i0DqtQ8l-Rz8MvCRN7tY8rrESkZAT6OzTUzF1fnhyVM,33449
14
14
  odoo/addons/base_tier_validation/models/__init__.py,sha256=X8c8CFM5eOXyIErFr7xsaGDBPZMBSKE2v4W-_2h9B2s,250
15
15
  odoo/addons/base_tier_validation/models/res_config_settings.py,sha256=xMdQiCfU5p7Z5puKcSRvJihLpI9ulyVFUd_QJjAOuwc,619
16
- odoo/addons/base_tier_validation/models/res_users.py,sha256=JhUZ0NxJ9EPwpkJ-mvsNTrE1avQncGNKqAF-xFxokEo,2638
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=iLSmswQy7pr8loUi6QNeY1tRCJYGodGU21TR9Vi_xTg,32863
19
+ odoo/addons/base_tier_validation/models/tier_validation.py,sha256=ahNgJJAfULCescQrih72IPvGbzpBrdr7iPL9IAiY6oY,32943
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=J7LBj933qFHjWwQrkaxWQUhFE-O3rqObqyRw96H5dpc,545
22
+ odoo/addons/base_tier_validation/readme/CONTRIBUTORS.md,sha256=DJp09K9mooM4Qy1fPUVPjAU02fUNudXVeTRzA2gxOoA,616
23
23
  odoo/addons/base_tier_validation/readme/DESCRIPTION.md,sha256=nFbYOx89EsI26v6NJF9d-Wm-X2YtHduSRlV5Euk3WWc,651
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=7orMqzmZ9B3wiZ_8s_2txRQx2l6TSRZ5iQhjPHHFXoo,23060
29
+ odoo/addons/base_tier_validation/static/description/index.html,sha256=iVRJ2j6554X9FdtcNi3TcMndjSeq3Oe1t80BWqyRr34,23191
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,8 +35,8 @@ 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=Q0g3zv6cYrSPx8QHwsikFxRmi7TtmuUr4ID_9WvImd8,4504
39
- odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=7l1kfCv31dqzNgAirZMaQM5OVvaA2OvJ7uAc0O7PLYw,41566
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
40
  odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=3usFbhfDhlKIWbVu--3qsbsm52B6RwTP4zy244dY1yk,1757
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
@@ -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.1.2.dist-info/METADATA,sha256=luw89gKJhpPufKiuS1eLrhUZgISq-8PcR1i8dJ6OJNU,9149
49
- odoo_addon_base_tier_validation-17.0.2.1.1.2.dist-info/WHEEL,sha256=8Rd4enx1PCuyDWP4SABqO5Fv8rpaknqp3VzjoFFLa6c,83
50
- odoo_addon_base_tier_validation-17.0.2.1.1.2.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
51
- odoo_addon_base_tier_validation-17.0.2.1.1.2.dist-info/RECORD,,
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,,