odoo-addon-base-tier-validation 16.0.2.5.2__py3-none-any.whl → 16.0.2.6.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:9bc3a73e27a6f01a27a62cf994eea55425ba31d142e5642ff7dc468325f2a4c9
10
+ !! source digest: sha256:8e99bb2b477c5c3a3ce8a49b2f854341131b246b0a7b1ea30c4e04acf1dbeaec
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": "16.0.2.5.2",
6
+ "version": "16.0.2.6.0",
7
7
  "development_status": "Mature",
8
8
  "maintainers": ["LoisRForgeFlow"],
9
9
  "category": "Tools",
@@ -26,6 +26,7 @@ class TierValidation(models.AbstractModel):
26
26
 
27
27
  _tier_validation_buttons_xpath = "/form/header/button[last()]"
28
28
  _tier_validation_manual_config = True
29
+ _tier_validation_company_field = "company_id"
29
30
 
30
31
  _state_field = "state"
31
32
  _state_from = ["draft"]
@@ -225,7 +226,7 @@ class TierValidation(models.AbstractModel):
225
226
  .search(
226
227
  [
227
228
  ("model", "=", self._name),
228
- ("company_id", "in", [False] + self.env.company.ids),
229
+ ("company_id", "in", [False] + rec._get_company().ids),
229
230
  ]
230
231
  )
231
232
  )
@@ -258,7 +259,7 @@ class TierValidation(models.AbstractModel):
258
259
  .search(
259
260
  [
260
261
  ("model", "=", self._name),
261
- ("company_id", "in", [False] + self.env.company.ids),
262
+ ("company_id", "in", [False] + rec._get_company().ids),
262
263
  ]
263
264
  )
264
265
  )
@@ -285,7 +286,7 @@ class TierValidation(models.AbstractModel):
285
286
  .search(
286
287
  [
287
288
  ("model_name", "=", self._name),
288
- ("company_id", "in", [False] + self.env.company.ids),
289
+ ("company_id", "in", [False] + self._get_company().ids),
289
290
  "|",
290
291
  ("group_ids", "in", self.env.user.groups_id.ids),
291
292
  ("group_ids", "=", False),
@@ -641,6 +642,17 @@ class TierValidation(models.AbstractModel):
641
642
  "sequence": sequence,
642
643
  }
643
644
 
645
+ @api.model
646
+ def _get_company(self):
647
+ company_id = self.env.company
648
+ if (
649
+ self
650
+ and self._tier_validation_company_field in self.env[self._name]
651
+ and self[self._tier_validation_company_field]
652
+ ):
653
+ company_id = self[self._tier_validation_company_field]
654
+ return company_id
655
+
644
656
  def request_validation(self):
645
657
  td_obj = self.env["tier.definition"]
646
658
  tr_obj = self.env["tier.review"]
@@ -650,7 +662,7 @@ class TierValidation(models.AbstractModel):
650
662
  tier_definitions = td_obj.search(
651
663
  [
652
664
  ("model", "=", self._name),
653
- ("company_id", "in", [False] + self.env.company.ids),
665
+ ("company_id", "in", [False] + rec._get_company().ids),
654
666
  ("id", "not in", rec.review_ids.mapped("definition_id").ids),
655
667
  ],
656
668
  order="sequence desc",
@@ -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:9bc3a73e27a6f01a27a62cf994eea55425ba31d142e5642ff7dc468325f2a4c9
370
+ !! source digest: sha256:8e99bb2b477c5c3a3ce8a49b2f854341131b246b0a7b1ea30c4e04acf1dbeaec
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/16.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-16-0/server-ux-16-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=16.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 company
@@ -56,6 +56,9 @@ class CommonTierValidation(common.TransactionCase):
56
56
  "perm_unlink": 1,
57
57
  }
58
58
  )
59
+ # Create a multi-company
60
+ cls.main_company = cls.env.ref("base.main_company")
61
+ cls.other_company = cls.env["res.company"].create({"name": "My Company"})
59
62
 
60
63
  # Define views to avoid automatic views with all fields.
61
64
  for model in cls.test_model._name, cls.test_model_2._name:
@@ -88,6 +91,14 @@ class CommonTierValidation(common.TransactionCase):
88
91
  cls.test_user_2 = cls.env["res.users"].create(
89
92
  {"name": "Mike", "login": "test2", "email": "mike@yourcompany.example.com"}
90
93
  )
94
+ cls.test_user_3_multi_company = cls.env["res.users"].create(
95
+ {
96
+ "name": "Jane",
97
+ "login": "test3",
98
+ "email": "jane@mycompany.example.com",
99
+ "company_ids": [(6, 0, [cls.main_company.id, cls.other_company.id])],
100
+ }
101
+ )
91
102
 
92
103
  # Create tier definitions:
93
104
  cls.tier_def_obj = cls.env["tier.definition"]
@@ -104,6 +115,46 @@ class CommonTierValidation(common.TransactionCase):
104
115
  cls.test_record = cls.test_model.create({"test_field": 2.5})
105
116
  cls.test_record_2 = cls.test_model_2.create({"test_field": 2.5})
106
117
 
118
+ # Create definition for test 28, 29
119
+ # Main company tier definition
120
+ cls.tier_def_obj.create(
121
+ {
122
+ "model_id": cls.tester_model_2.id,
123
+ "review_type": "individual",
124
+ "reviewer_id": cls.test_user_1.id,
125
+ "definition_domain": "[('test_field', '>=', 1.0)]",
126
+ "approve_sequence": True,
127
+ "sequence": 30,
128
+ "name": "Definition for test 30 - sequence - user 1 - main company",
129
+ "company_id": cls.main_company.id,
130
+ }
131
+ )
132
+ cls.tier_def_obj.create(
133
+ {
134
+ "model_id": cls.tester_model_2.id,
135
+ "review_type": "individual",
136
+ "reviewer_id": cls.test_user_3_multi_company.id,
137
+ "definition_domain": "[('test_field', '>=', 1.0)]",
138
+ "approve_sequence": True,
139
+ "sequence": 20,
140
+ "name": "Definition for test 30 - sequence - user 3 - main company",
141
+ "company_id": cls.main_company.id,
142
+ }
143
+ )
144
+ # Other company tier definition
145
+ cls.tier_def_obj.create(
146
+ {
147
+ "model_id": cls.tester_model_2.id,
148
+ "review_type": "individual",
149
+ "reviewer_id": cls.test_user_3_multi_company.id,
150
+ "definition_domain": "[('test_field', '>=', 1.0)]",
151
+ "approve_sequence": True,
152
+ "sequence": 30,
153
+ "name": "Definition for test 30 - sequence - user 3 - other company",
154
+ "company_id": cls.other_company.id,
155
+ }
156
+ )
157
+
107
158
  @classmethod
108
159
  def tearDownClass(cls):
109
160
  cls.loader.restore_registry()
@@ -902,7 +902,7 @@ class TierTierValidation(CommonTierValidation):
902
902
  )
903
903
  self.assertEqual(self.test_record.test_validation_field, 4)
904
904
 
905
- def test_27_reevaluate_validation(self):
905
+ def test_26_reevaluate_validation(self):
906
906
  # Create new test record
907
907
  test_record = self.test_model.create(
908
908
  {"test_field": 100, "test_validation_field": 15}
@@ -946,7 +946,7 @@ class TierTierValidation(CommonTierValidation):
946
946
  self.assertEqual(len(test_record.review_ids), 2)
947
947
  self.assertIn(old_review, test_record.review_ids)
948
948
 
949
- def test_28_reevaluate_validation(self):
949
+ def test_27_reevaluate_validation(self):
950
950
  # Create new test record
951
951
  test_record = self.test_model.create(
952
952
  {"test_field": 100, "test_validation_field": 15}
@@ -994,6 +994,62 @@ class TierTierValidation(CommonTierValidation):
994
994
  self.assertEqual(len(test_record.review_ids), 2)
995
995
  self.assertIn(old_review, test_record.review_ids)
996
996
 
997
+ def test_28_request_validation_diff_company(self):
998
+ """
999
+ Test validation request behavior with multi-company setup.
1000
+
1001
+ Setup:
1002
+ - Main company has 2 tier definitions:
1003
+ - One for User1 (sequence 30)
1004
+ - One for User3 (sequence 20)
1005
+ - Other company has 1 tier definition:
1006
+ - One for User3 (sequence 30)
1007
+
1008
+ When record's company is set to 'other company':
1009
+ - Only User3's tier definition from other company should be applied
1010
+ - Should create only 1 review
1011
+ """
1012
+ self.assertFalse(self.test_record_2.review_ids)
1013
+ self.assertFalse(self.test_record_2.company_id)
1014
+ self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company)
1015
+
1016
+ self.test_record_2.company_id = self.other_company
1017
+
1018
+ reviews = self.test_record_2.with_user(
1019
+ self.test_user_3_multi_company.id
1020
+ ).request_validation()
1021
+ self.test_record_2.invalidate_recordset()
1022
+
1023
+ self.assertEqual(len(reviews), 1)
1024
+
1025
+ def test_29_request_validation_same_company(self):
1026
+ """
1027
+ Test validation request behavior with multi-company setup.
1028
+
1029
+ Setup:
1030
+ - Main company has 2 tier definitions:
1031
+ - One for User1 (sequence 30)
1032
+ - One for User3 (sequence 20)
1033
+ - Other company has 1 tier definition:
1034
+ - One for User3 (sequence 30)
1035
+
1036
+ When record's company is set to 'main company':
1037
+ - Both User1 and User3's tier definitions from main company should be applied
1038
+ - Should create 2 reviews
1039
+ """
1040
+ self.assertFalse(self.test_record_2.review_ids)
1041
+ self.assertFalse(self.test_record_2.company_id)
1042
+ self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company)
1043
+
1044
+ self.test_record_2.company_id = self.main_company
1045
+
1046
+ reviews = self.test_record_2.with_user(
1047
+ self.test_user_3_multi_company.id
1048
+ ).request_validation()
1049
+ self.test_record_2.invalidate_recordset()
1050
+
1051
+ self.assertEqual(len(reviews), 2)
1052
+
997
1053
 
998
1054
  @tagged("at_install")
999
1055
  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: 16.0.2.5.2
3
+ Version: 16.0.2.6.0
4
4
  Summary: Implement a validation process based on tiers.
5
5
  Home-page: https://github.com/OCA/server-ux
6
6
  Author: ForgeFlow, Odoo Community Association (OCA)
@@ -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:9bc3a73e27a6f01a27a62cf994eea55425ba31d142e5642ff7dc468325f2a4c9
26
+ !! source digest: sha256:8e99bb2b477c5c3a3ce8a49b2f854341131b246b0a7b1ea30c4e04acf1dbeaec
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=3iWr4gCzWTTuarvTgI2pchtYFwW7df8bSbQjrq3-hmM,7996
1
+ odoo/addons/base_tier_validation/README.rst,sha256=Sxxf574eNVV2IkDmBEPnurzl8SGNNml4a8O0tst5Mc8,7996
2
2
  odoo/addons/base_tier_validation/__init__.py,sha256=rKfzYX9RhkkCxgh2f0PJLYN45Kw8T8-fwxw1pbjLuug,108
3
- odoo/addons/base_tier_validation/__manifest__.py,sha256=E8qJv6sKWLPSJJXgKEQxQoT0OtgHJ4UKr4FbQ22VnOE,2011
3
+ odoo/addons/base_tier_validation/__manifest__.py,sha256=79nt4BfpMiUmxKOtt5pvt3ui3L5i_HOiKCu-1ueo5LM,2011
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=Ap_T6TSlEoy4uXvycYBt7EA4SbyymwJWlKWiei7S2KQ,32404
@@ -17,7 +17,7 @@ odoo/addons/base_tier_validation/models/res_config_settings.py,sha256=n-i1InkXDc
17
17
  odoo/addons/base_tier_validation/models/res_users.py,sha256=JhUZ0NxJ9EPwpkJ-mvsNTrE1avQncGNKqAF-xFxokEo,2638
18
18
  odoo/addons/base_tier_validation/models/tier_definition.py,sha256=rcDv7ySDKqBD1ksJ09um_4Reec_Im1MrdotivQ7Q_44,5173
19
19
  odoo/addons/base_tier_validation/models/tier_review.py,sha256=a7vMoaN4uWZqN48CmlK9x4ou9Ao0r4i6FuSSqPah6Qw,7329
20
- odoo/addons/base_tier_validation/models/tier_validation.py,sha256=tbVbTj8kIgLj8TAjR3euhXm7a2d5kA6JbWUC3wV4JKg,32770
20
+ odoo/addons/base_tier_validation/models/tier_validation.py,sha256=IfVARiZPcmw7y9LauVLFMwc96b_1BNRfZNzK79GQ74A,33179
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.rst,sha256=ABgtWmfnm0QieIj7_ZsvoTHwjaKiZkBLCAjUXJeOnm4,1466
23
23
  odoo/addons/base_tier_validation/readme/CONTRIBUTORS.rst,sha256=hyMj4T9es9vnGNmdg-uPF9wc1xGRxC5DU39McI03xjA,479
@@ -27,7 +27,7 @@ odoo/addons/base_tier_validation/readme/ROADMAP.rst,sha256=UWhIpMUTM_ido6s3jZiF8
27
27
  odoo/addons/base_tier_validation/security/ir.model.access.csv,sha256=vsKy73mk8r45jzU0fAt_vfM7-JSH7lIAA7JBr1P6FAY,633
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=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
30
- odoo/addons/base_tier_validation/static/description/index.html,sha256=2VcDcw1MkdOCiNa5Id25nPKbz01SvWgn0Fvs7SHadJU,22306
30
+ odoo/addons/base_tier_validation/static/description/index.html,sha256=ZNC0M7ADQZ-OVswN0jXecbZWAFxuOuGj1dObLtuY2yw,22306
31
31
  odoo/addons/base_tier_validation/static/src/js/ir_model.esm.js,sha256=kHSA7CeIt02IZmsKJdn2yZVqKqSyQ6_g6QVmtq5Qo2A,706
32
32
  odoo/addons/base_tier_validation/static/src/js/main.esm.js,sha256=ZSHScoLlMQcO6jW9mLVusJOfyH5kJIw4szPK3xU-KHA,263
33
33
  odoo/addons/base_tier_validation/static/src/js/review_group_view.esm.js,sha256=G110cBwOwENHBUkuScOB8Xg05D0FzOqlsSl_US0PngA,1677
@@ -45,10 +45,10 @@ odoo/addons/base_tier_validation/static/src/xml/systray.xml,sha256=8W04E80UhUPQp
45
45
  odoo/addons/base_tier_validation/static/src/xml/tier_review_template.xml,sha256=o72pPVkPiPmr2KWucaTJahR945MbD4gaYyi3KQn6AyI,6217
46
46
  odoo/addons/base_tier_validation/templates/tier_validation_templates.xml,sha256=_LylRMVAyooIRsK8Y-Lanpi_S3ch1Ts9bJkxewKbr3k,4619
47
47
  odoo/addons/base_tier_validation/tests/__init__.py,sha256=7tj1DSbPnyA__lAKxvjX53Ll_ZTE8y8Z1bewtZJoURI,166
48
- odoo/addons/base_tier_validation/tests/common.py,sha256=Jnt8vMSca4XsiUGbnSDXvyKCCP6aeXepI476_2Gg_to,3787
49
- odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=grzh4DxnvBeKZcD9VPAWbWzT_4sLI9Kfm7E-8Xh7630,41296
48
+ odoo/addons/base_tier_validation/tests/common.py,sha256=kCSmRUWy9qcmXfVpJ-ixTOyj7eL4G75x0p25uWEs7to,5918
49
+ odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=jOq6eYzzChn6Pwrv2C32mK17S0Ye3Z_cuJEDuvHWGsQ,43356
50
50
  odoo/addons/base_tier_validation/tests/test_tier_validation_reminder.py,sha256=jsLU-7pJtbUvKPi7ddXU4jAwiJp32pKTrluarrtLKvU,1963
51
- odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=3usFbhfDhlKIWbVu--3qsbsm52B6RwTP4zy244dY1yk,1757
51
+ odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=zlpJLmxpgnZhpUJ_kFqRVInQftOkgjT3lQ-uzcjn_F0,1818
52
52
  odoo/addons/base_tier_validation/views/res_config_settings_views.xml,sha256=Al6XKCN1QGLPcgAaXTvEnSTYkwBrzDGfSRh3CQD4g5Q,4234
53
53
  odoo/addons/base_tier_validation/views/tier_definition_view.xml,sha256=KAuJ6EiqNd0vG-eUVZKQLpVME011pDdjDYw93nPr0J8,7450
54
54
  odoo/addons/base_tier_validation/views/tier_review_view.xml,sha256=tPzmpz-kbQwOOtJrAcsTJEP9bJLcfzWAITCpI86kZU4,966
@@ -56,7 +56,7 @@ odoo/addons/base_tier_validation/views/tier_validation_exception_view.xml,sha256
56
56
  odoo/addons/base_tier_validation/wizard/__init__.py,sha256=52q6-LAjYeJ1Vu5ahon_jnhds9VsoJvYaQCiZc82WKw,95
57
57
  odoo/addons/base_tier_validation/wizard/comment_wizard.py,sha256=gj7zCcpe47-2ifxSRlE6okQ1wtq5Ok3JBVg2CtN0ZIU,879
58
58
  odoo/addons/base_tier_validation/wizard/comment_wizard_view.xml,sha256=9XFTqrNwDCZH2IEX3HutaznSkBYk-6RERXzUDwObz4I,979
59
- odoo_addon_base_tier_validation-16.0.2.5.2.dist-info/METADATA,sha256=a55oNbLafyB_6Av5uMW6pMOIWKATu7BkB8310ld3XUI,8578
60
- odoo_addon_base_tier_validation-16.0.2.5.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
61
- odoo_addon_base_tier_validation-16.0.2.5.2.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
62
- odoo_addon_base_tier_validation-16.0.2.5.2.dist-info/RECORD,,
59
+ odoo_addon_base_tier_validation-16.0.2.6.0.dist-info/METADATA,sha256=6yz3lwvb6Y8vxcpBqT7K3e4rpsua2o1pHEDLw5vcBHc,8578
60
+ odoo_addon_base_tier_validation-16.0.2.6.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
61
+ odoo_addon_base_tier_validation-16.0.2.6.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
62
+ odoo_addon_base_tier_validation-16.0.2.6.0.dist-info/RECORD,,