odoo-addon-base-tier-validation 17.0.2.3.4.1__py3-none-any.whl → 17.0.2.4.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.
@@ -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:383888146dbed9d6782bb997d2c3c5737d1603d2345785aef167a0ac028790f3
10
+ !! source digest: sha256:e4f55b4e91a75826046e629fd7419db7f83cd415ce90fc9e031a00be6f69c4bf
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -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.3.4",
6
+ "version": "17.0.2.4.0",
7
7
  "development_status": "Mature",
8
8
  "maintainers": ["LoisRForgeFlow"],
9
9
  "category": "Tools",
@@ -21,6 +21,7 @@ class TierValidation(models.AbstractModel):
21
21
  _tier_validation_buttons_xpath = "/form/header/button[last()]"
22
22
  _tier_validation_manual_config = True
23
23
  _tier_validation_state_field_is_computed = False
24
+ _tier_validation_company_field = "company_id"
24
25
 
25
26
  _state_field = "state"
26
27
  _state_from = ["draft"]
@@ -250,7 +251,7 @@ class TierValidation(models.AbstractModel):
250
251
  .search(
251
252
  [
252
253
  ("model", "=", self._name),
253
- ("company_id", "in", [False] + self.env.company.ids),
254
+ ("company_id", "in", [False] + rec._get_company().ids),
254
255
  ]
255
256
  )
256
257
  )
@@ -275,7 +276,7 @@ class TierValidation(models.AbstractModel):
275
276
  .search(
276
277
  [
277
278
  ("model_name", "=", self._name),
278
- ("company_id", "in", [False] + self.env.company.ids),
279
+ ("company_id", "in", [False] + self._get_company().ids),
279
280
  "|",
280
281
  ("group_ids", "in", self.env.user.groups_id.ids),
281
282
  ("group_ids", "=", False),
@@ -708,6 +709,17 @@ class TierValidation(models.AbstractModel):
708
709
  "sequence": sequence,
709
710
  }
710
711
 
712
+ @api.model
713
+ def _get_company(self):
714
+ company_id = self.env.company
715
+ if (
716
+ self
717
+ and self._tier_validation_company_field in self.env[self._name]
718
+ and self[self._tier_validation_company_field]
719
+ ):
720
+ company_id = self[self._tier_validation_company_field]
721
+ return company_id
722
+
711
723
  def request_validation(self):
712
724
  td_obj = self.env["tier.definition"]
713
725
  tr_obj = self.env["tier.review"]
@@ -717,7 +729,7 @@ class TierValidation(models.AbstractModel):
717
729
  tier_definitions = td_obj.search(
718
730
  [
719
731
  ("model", "=", self._name),
720
- ("company_id", "in", [False] + self.env.company.ids),
732
+ ("company_id", "in", [False] + rec._get_company().ids),
721
733
  ],
722
734
  order="sequence desc",
723
735
  )
@@ -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:383888146dbed9d6782bb997d2c3c5737d1603d2345785aef167a0ac028790f3
370
+ !! source digest: sha256:e4f55b4e91a75826046e629fd7419db7f83cd415ce90fc9e031a00be6f69c4bf
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
@@ -44,6 +44,9 @@ class CommonTierValidation(common.TransactionCase):
44
44
  cls.tester_model_computed = cls.env["ir.model"].search(
45
45
  [("model", "=", "tier.validation.tester.computed")]
46
46
  )
47
+ # Create a multi-company
48
+ cls.main_company = cls.env.ref("base.main_company")
49
+ cls.other_company = cls.env["res.company"].create({"name": "My Company"})
47
50
 
48
51
  models = (
49
52
  cls.tester_model,
@@ -93,6 +96,14 @@ class CommonTierValidation(common.TransactionCase):
93
96
  cls.test_user_2 = cls.env["res.users"].create(
94
97
  {"name": "Mike", "login": "test2", "email": "mike@yourcompany.example.com"}
95
98
  )
99
+ cls.test_user_3_multi_company = cls.env["res.users"].create(
100
+ {
101
+ "name": "Jane",
102
+ "login": "test3",
103
+ "email": "jane@mycompany.example.com",
104
+ "company_ids": [(6, 0, [cls.main_company.id, cls.other_company.id])],
105
+ }
106
+ )
96
107
 
97
108
  # Create tier definitions:
98
109
  cls.tier_def_obj = cls.env["tier.definition"]
@@ -161,6 +172,49 @@ class CommonTierValidation(common.TransactionCase):
161
172
  }
162
173
  )
163
174
 
175
+ # Create definition for test 30, 31
176
+ # Main company tier definition
177
+ cls.tier_def_obj.create(
178
+ {
179
+ "model_id": cls.tester_model_2.id,
180
+ "review_type": "individual",
181
+ "reviewer_id": cls.test_user_1.id,
182
+ "definition_domain": "[('test_field', '>=', 1.0)]",
183
+ "approve_sequence": True,
184
+ "notify_on_pending": False,
185
+ "sequence": 30,
186
+ "name": "Definition for test 30 - sequence - user 1 - main company",
187
+ "company_id": cls.main_company.id,
188
+ }
189
+ )
190
+ cls.tier_def_obj.create(
191
+ {
192
+ "model_id": cls.tester_model_2.id,
193
+ "review_type": "individual",
194
+ "reviewer_id": cls.test_user_3_multi_company.id,
195
+ "definition_domain": "[('test_field', '>=', 1.0)]",
196
+ "approve_sequence": True,
197
+ "notify_on_pending": False,
198
+ "sequence": 20,
199
+ "name": "Definition for test 30 - sequence - user 3 - main company",
200
+ "company_id": cls.main_company.id,
201
+ }
202
+ )
203
+ # Other company tier definition
204
+ cls.tier_def_obj.create(
205
+ {
206
+ "model_id": cls.tester_model_2.id,
207
+ "review_type": "individual",
208
+ "reviewer_id": cls.test_user_3_multi_company.id,
209
+ "definition_domain": "[('test_field', '>=', 1.0)]",
210
+ "approve_sequence": True,
211
+ "notify_on_pending": False,
212
+ "sequence": 30,
213
+ "name": "Definition for test 30 - sequence - user 3 - other company",
214
+ "company_id": cls.other_company.id,
215
+ }
216
+ )
217
+
164
218
  @classmethod
165
219
  def tearDownClass(cls):
166
220
  cls.loader.restore_registry()
@@ -934,7 +934,7 @@ class TierTierValidation(CommonTierValidation):
934
934
  )
935
935
  self.assertEqual(notifications_no_2, notifications_no_1)
936
936
 
937
- def test_25_change_field_exception_validation(self):
937
+ def test_27_change_field_exception_validation(self):
938
938
  """Test under and after validations"""
939
939
  # Cannot create `tier.validation.exception` records because
940
940
  # `tier.validation.tester` are fake model and its fields are
@@ -985,7 +985,7 @@ class TierTierValidation(CommonTierValidation):
985
985
  )
986
986
  self.assertEqual(self.test_record.test_validation_field, 4)
987
987
 
988
- def test_26_computed_state_field(self):
988
+ def test_28_computed_state_field(self):
989
989
  """Test the regular flow on a model where state is a computed field"""
990
990
  # The record cannot be confirmed without validation
991
991
  with self.assertRaisesRegex(
@@ -1014,7 +1014,7 @@ class TierTierValidation(CommonTierValidation):
1014
1014
  self.assertFalse(self.test_record_computed.review_ids)
1015
1015
  self.test_record_computed.invalidate_recordset()
1016
1016
 
1017
- def test_27_allow_write_for_reviewers(self):
1017
+ def test_29_allow_write_for_reviewers(self):
1018
1018
  reviews = self.test_record.with_user(self.test_user_2.id).request_validation()
1019
1019
  record = self.test_record.with_user(self.test_user_1.id)
1020
1020
  record.invalidate_recordset()
@@ -1025,6 +1025,62 @@ class TierTierValidation(CommonTierValidation):
1025
1025
  )
1026
1026
  record.with_user(self.test_user_1.id).write({"test_field": 0.3})
1027
1027
 
1028
+ def test_30_request_validation_diff_company(self):
1029
+ """
1030
+ Test validation request behavior with multi-company setup.
1031
+
1032
+ Setup:
1033
+ - Main company has 2 tier definitions:
1034
+ - One for User1 (sequence 30)
1035
+ - One for User3 (sequence 20)
1036
+ - Other company has 1 tier definition:
1037
+ - One for User3 (sequence 30)
1038
+
1039
+ When record's company is set to 'other company':
1040
+ - Only User3's tier definition from other company should be applied
1041
+ - Should create only 1 review
1042
+ """
1043
+ self.assertFalse(self.test_record_2.review_ids)
1044
+ self.assertFalse(self.test_record_2.company_id)
1045
+ self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company)
1046
+
1047
+ self.test_record_2.company_id = self.other_company
1048
+
1049
+ reviews = self.test_record_2.with_user(
1050
+ self.test_user_3_multi_company.id
1051
+ ).request_validation()
1052
+ self.test_record_2.invalidate_recordset()
1053
+
1054
+ self.assertEqual(len(reviews), 1)
1055
+
1056
+ def test_31_request_validation_same_company(self):
1057
+ """
1058
+ Test validation request behavior with multi-company setup.
1059
+
1060
+ Setup:
1061
+ - Main company has 2 tier definitions:
1062
+ - One for User1 (sequence 30)
1063
+ - One for User3 (sequence 20)
1064
+ - Other company has 1 tier definition:
1065
+ - One for User3 (sequence 30)
1066
+
1067
+ When record's company is set to 'main company':
1068
+ - Both User1 and User3's tier definitions from main company should be applied
1069
+ - Should create 2 reviews
1070
+ """
1071
+ self.assertFalse(self.test_record_2.review_ids)
1072
+ self.assertFalse(self.test_record_2.company_id)
1073
+ self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company)
1074
+
1075
+ self.test_record_2.company_id = self.main_company
1076
+
1077
+ reviews = self.test_record_2.with_user(
1078
+ self.test_user_3_multi_company.id
1079
+ ).request_validation()
1080
+ self.test_record_2.invalidate_recordset()
1081
+
1082
+ self.assertEqual(len(reviews), 2)
1083
+
1028
1084
 
1029
1085
  @tagged("at_install")
1030
1086
  class TierTierValidationView(CommonTierValidation):
@@ -43,6 +43,7 @@ class TierValidationTester2(models.Model):
43
43
  test_field = fields.Float()
44
44
  test_validation_field = fields.Float()
45
45
  user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users")
46
+ company_id = fields.Many2one(comodel_name="res.company")
46
47
 
47
48
  def action_confirm(self):
48
49
  self.write({"state": "confirmed"})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base_tier_validation
3
- Version: 17.0.2.3.4.1
3
+ Version: 17.0.2.4.0
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:383888146dbed9d6782bb997d2c3c5737d1603d2345785aef167a0ac028790f3
26
+ !! source digest: sha256:e4f55b4e91a75826046e629fd7419db7f83cd415ce90fc9e031a00be6f69c4bf
27
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
28
 
29
29
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -1,6 +1,6 @@
1
- odoo/addons/base_tier_validation/README.rst,sha256=r8O0BITf4GFm1o3cEF00oo5IZHoW2Mw6Q2bjQsJfbUc,8904
1
+ odoo/addons/base_tier_validation/README.rst,sha256=tCWlrLCRNwSv0EiHveb3Wr1rraNpzxvcHK0pJ2aYFsg,8904
2
2
  odoo/addons/base_tier_validation/__init__.py,sha256=rKfzYX9RhkkCxgh2f0PJLYN45Kw8T8-fwxw1pbjLuug,108
3
- odoo/addons/base_tier_validation/__manifest__.py,sha256=f90jg2MHWYBHDt5SHX60iu-G1J39xknh-RUlhvMUis8,1674
3
+ odoo/addons/base_tier_validation/__manifest__.py,sha256=4TyhPt7-LISnFLiMdzdpzgW3nkPcEaAjm-6_mXfgJsA,1674
4
4
  odoo/addons/base_tier_validation/data/cron_data.xml,sha256=HMA_SgAk3_vLu_QQLHd0UyzPASuDRj5cvpiK_17esQc,707
5
5
  odoo/addons/base_tier_validation/data/mail_data.xml,sha256=hXhGTSyG2NAsDfZShmpyBKTXJi46L5PP1mFJAlKmlVE,1984
6
6
  odoo/addons/base_tier_validation/i18n/base_tier_validation.pot,sha256=ShkkRe-CS7a4eBPc86lxy4u2sfn4Forn2ck85in9JeE,33179
@@ -17,7 +17,7 @@ odoo/addons/base_tier_validation/models/res_config_settings.py,sha256=xMdQiCfU5p
17
17
  odoo/addons/base_tier_validation/models/res_users.py,sha256=0xJZVWDUfdJwA3_ysHKO99cQph2m8iz0Zr5JU90td68,2163
18
18
  odoo/addons/base_tier_validation/models/tier_definition.py,sha256=_aMzT4DAzV2C0dWm85UwomMlXRyjNN-Bo9xLaSfl58U,5775
19
19
  odoo/addons/base_tier_validation/models/tier_review.py,sha256=F6oEiE6CkIIAYAbQN9mUfyrUyqqhxdVfU9kvduNqnRg,8398
20
- odoo/addons/base_tier_validation/models/tier_validation.py,sha256=yeb-KWE_PWpDGScMAGDvBZ45b-QjyGqcV8GxdQ4iM7w,35425
20
+ odoo/addons/base_tier_validation/models/tier_validation.py,sha256=kSTfIQ6K3nts4jEtAmeHQ1VcMRUpXMhCv4iBq75bc9w,35832
21
21
  odoo/addons/base_tier_validation/models/tier_validation_exception.py,sha256=9H_FbTF04IyB2u6a82UAdIPmv_MUcFKmLNVl7UOM1lg,2882
22
22
  odoo/addons/base_tier_validation/readme/CONFIGURE.md,sha256=MuyVCH75T0_3Rtrkl7RUg7XzxjoU7zUkbPWv84_a-XU,1709
23
23
  odoo/addons/base_tier_validation/readme/CONTRIBUTORS.md,sha256=QM71L1RKrzDEgNvfgXjNAoWy3dMxH5k26HhcrrpdYRs,664
@@ -28,7 +28,7 @@ odoo/addons/base_tier_validation/security/ir.model.access.csv,sha256=_NMShHIoKCQ
28
28
  odoo/addons/base_tier_validation/security/tier_validation_security.xml,sha256=eWFwz-osHgYFmVoEVzOSboO9oqUMtQ8oygyaz0os50Y,806
29
29
  odoo/addons/base_tier_validation/static/description/icon.png,sha256=ocMS0YO1xbJs6kkXqCuw71UnsCa_4d1U5cMvzcKSH2U,4993
30
30
  odoo/addons/base_tier_validation/static/description/icon.svg,sha256=SBeR3DJDE_jBR3Z92Yn3r7WPOkpsRlOd61t1Tuk7M_A,2684
31
- odoo/addons/base_tier_validation/static/description/index.html,sha256=i1XEiVm-vA1liAs3U01FhJ3RfoNkWwif7mqDBgFq1Mk,23747
31
+ odoo/addons/base_tier_validation/static/description/index.html,sha256=6GuA0SIofMcrXLOBZxmJhybMPCPut6up9ZP81ZQckt0,23747
32
32
  odoo/addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.esm.js,sha256=MNfjKSg-9h3JfeXiYlf15SAdVHjj3aUvedj0BqVvJrk,2254
33
33
  odoo/addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml,sha256=_wIy5Gv2VUJEXD5_FGphx1J19-Y8uzFlWryuPqlIh8c,2798
34
34
  odoo/addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js,sha256=MDWUp2ozeRdBoLeCfTcOnD-bKnk3yF6pHwtTAnsLZmg,1090
@@ -37,10 +37,10 @@ odoo/addons/base_tier_validation/static/src/components/tier_review_widget/tier_r
37
37
  odoo/addons/base_tier_validation/static/src/js/services/tier_review_service.esm.js,sha256=E4xNh1WmnofpFt88EYYCGcDWyP53S2Mt450QawcrsCM,972
38
38
  odoo/addons/base_tier_validation/templates/tier_validation_templates.xml,sha256=VI6kY0V6nVSz6KQ9GRxY_9TZkRrJgzBzsl9xFKtA__Y,3620
39
39
  odoo/addons/base_tier_validation/tests/__init__.py,sha256=7tj1DSbPnyA__lAKxvjX53Ll_ZTE8y8Z1bewtZJoURI,166
40
- odoo/addons/base_tier_validation/tests/common.py,sha256=0UDM1P5r7c2YftiBIs42ykFQdznWXzYur8SNscRK8cI,5966
41
- odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=WVZNMIGu2Rh0EjwuVUVuoLXBUgjy2yzqEK2OhR4J8zM,43283
40
+ odoo/addons/base_tier_validation/tests/common.py,sha256=eO028boA6aiAmX_VnOkPlUQDIthAF8IqthiaAH3cwro,8229
41
+ odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=7VtIypBLgCXFEZon-KU24ZrPLycHptx70zBdp8woEUg,45343
42
42
  odoo/addons/base_tier_validation/tests/test_tier_validation_reminder.py,sha256=jsLU-7pJtbUvKPi7ddXU4jAwiJp32pKTrluarrtLKvU,1963
43
- odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=m25QbB9-9Goxx1Fiz0qwsVO3WPL6jrtMlGDW6VQbLik,3345
43
+ odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=O0QFANIH-jH_1GZtcv-EqPMGp2LgWF2HJMaaibFROWs,3406
44
44
  odoo/addons/base_tier_validation/views/res_config_settings_views.xml,sha256=5HbrsAVaXRoQNX7utIQ_EzZrqzKnwBrV9uHsi-PHb9M,2640
45
45
  odoo/addons/base_tier_validation/views/tier_definition_view.xml,sha256=ScFV2RkAO2ysXAg4kLODlNJGSP65toR-TCKpe4-WGJo,7780
46
46
  odoo/addons/base_tier_validation/views/tier_review_view.xml,sha256=tPzmpz-kbQwOOtJrAcsTJEP9bJLcfzWAITCpI86kZU4,966
@@ -48,7 +48,7 @@ odoo/addons/base_tier_validation/views/tier_validation_exception_view.xml,sha256
48
48
  odoo/addons/base_tier_validation/wizard/__init__.py,sha256=52q6-LAjYeJ1Vu5ahon_jnhds9VsoJvYaQCiZc82WKw,95
49
49
  odoo/addons/base_tier_validation/wizard/comment_wizard.py,sha256=gj7zCcpe47-2ifxSRlE6okQ1wtq5Ok3JBVg2CtN0ZIU,879
50
50
  odoo/addons/base_tier_validation/wizard/comment_wizard_view.xml,sha256=9XFTqrNwDCZH2IEX3HutaznSkBYk-6RERXzUDwObz4I,979
51
- odoo_addon_base_tier_validation-17.0.2.3.4.1.dist-info/METADATA,sha256=sNDfFUxliIbcEsxMVi5mWdSh2mkQV4QI6cRriMOykRE,9488
52
- odoo_addon_base_tier_validation-17.0.2.3.4.1.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
53
- odoo_addon_base_tier_validation-17.0.2.3.4.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
54
- odoo_addon_base_tier_validation-17.0.2.3.4.1.dist-info/RECORD,,
51
+ odoo_addon_base_tier_validation-17.0.2.4.0.dist-info/METADATA,sha256=ol5MsWlEbHcp5gBBf5b9U15RxMdnrpyQvJgrVckZswY,9486
52
+ odoo_addon_base_tier_validation-17.0.2.4.0.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
53
+ odoo_addon_base_tier_validation-17.0.2.4.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
54
+ odoo_addon_base_tier_validation-17.0.2.4.0.dist-info/RECORD,,