odoo-addon-base-tier-validation 16.0.2.2.2.3__py3-none-any.whl → 16.0.2.3.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:f09a6ac42502605dac3f91f6a5e27e786f1f5bc212ec8641d692a5e551043be3
10
+ !! source digest: sha256:b8ad9914d3d83a36f03df6d1027d6d363fbce13a577a647069407aa865d65e24
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.2.2",
6
+ "version": "16.0.2.3.0",
7
7
  "development_status": "Mature",
8
8
  "maintainers": ["LoisRForgeFlow"],
9
9
  "category": "Tools",
@@ -363,6 +363,11 @@ msgid ""
363
363
  "definition are restarted."
364
364
  msgstr ""
365
365
 
366
+ #. module: base_tier_validation
367
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
368
+ msgid "Is Reevaluation Required"
369
+ msgstr ""
370
+
366
371
  #. module: base_tier_validation
367
372
  #: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
368
373
  msgid "It's fully validated"
@@ -523,6 +528,11 @@ msgstr ""
523
528
  msgid "Pending"
524
529
  msgstr ""
525
530
 
531
+ #. module: base_tier_validation
532
+ #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
533
+ msgid "Reevaluate Reviews"
534
+ msgstr ""
535
+
526
536
  #. module: base_tier_validation
527
537
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
528
538
  msgid "Referenced Model"
@@ -12,7 +12,7 @@ from odoo.exceptions import ValidationError
12
12
  from odoo.osv.expression import OR
13
13
  from odoo.tools.misc import frozendict
14
14
 
15
- BASE_EXCEPTION_FIELDS = ["message_follower_ids", "access_token"]
15
+ BASE_EXCEPTION_FIELDS = ["message_follower_ids", "access_token", "need_validation"]
16
16
 
17
17
 
18
18
  class TierValidation(models.AbstractModel):
@@ -70,6 +70,9 @@ class TierValidation(models.AbstractModel):
70
70
  )
71
71
  has_comment = fields.Boolean(compute="_compute_has_comment")
72
72
  next_review = fields.Char(compute="_compute_next_review")
73
+ is_reevaluation_required = fields.Boolean(
74
+ compute="_compute_is_reevaluation_required"
75
+ )
73
76
 
74
77
  def _compute_has_comment(self):
75
78
  for rec in self:
@@ -206,6 +209,27 @@ class TierValidation(models.AbstractModel):
206
209
  )[:1]
207
210
  rec.next_review = review and _("Next: %s") % review.name or ""
208
211
 
212
+ def _compute_is_reevaluation_required(self):
213
+ for rec in self:
214
+ if isinstance(rec.id, models.NewId):
215
+ rec.is_reevaluation_required = False
216
+ continue
217
+ tiers = (
218
+ self.env["tier.definition"]
219
+ .with_context(active_test=True)
220
+ .search(
221
+ [
222
+ ("model", "=", self._name),
223
+ ("company_id", "in", [False] + self.env.company.ids),
224
+ ]
225
+ )
226
+ )
227
+ rec.is_reevaluation_required = False
228
+ valid_tiers = tiers.filtered(lambda x: rec.evaluate_tier(x))
229
+ if valid_tiers and rec.review_ids.definition_id:
230
+ if len(valid_tiers) != len(rec.review_ids.definition_id):
231
+ rec.is_reevaluation_required = True
232
+
209
233
  @api.model
210
234
  def _calc_reviews_validated(self, reviews):
211
235
  """Override for different validation policy."""
@@ -233,10 +257,12 @@ class TierValidation(models.AbstractModel):
233
257
  ]
234
258
  )
235
259
  )
236
- valid_tiers = any([rec.evaluate_tier(tier) for tier in tiers])
237
- rec.need_validation = (
238
- not rec.review_ids and valid_tiers and rec._check_state_from_condition()
239
- )
260
+ valid_tiers = tiers.filtered(lambda x: rec.evaluate_tier(x))
261
+ requested_tiers = rec.review_ids.filtered(
262
+ lambda x: x.status != "pending"
263
+ ).mapped("definition_id")
264
+ new_tiers = valid_tiers - requested_tiers
265
+ rec.need_validation = new_tiers and rec._check_state_from_condition()
240
266
 
241
267
  def evaluate_tier(self, tier):
242
268
  if tier.definition_domain:
@@ -620,6 +646,7 @@ class TierValidation(models.AbstractModel):
620
646
  [
621
647
  ("model", "=", self._name),
622
648
  ("company_id", "in", [False] + self.env.company.ids),
649
+ ("id", "not in", rec.review_ids.mapped("definition_id").ids),
623
650
  ],
624
651
  order="sequence desc",
625
652
  )
@@ -674,6 +701,13 @@ class TierValidation(models.AbstractModel):
674
701
  getattr(self, subscribe)(partner_ids=partners_to_notify_ids)
675
702
  rec._notify_restarted_review()
676
703
 
704
+ def reevaluate_reviews(self):
705
+ reviews = self.env["tier.review"]
706
+ for rec in self:
707
+ rec._compute_need_validation()
708
+ reviews += rec.request_validation()
709
+ return reviews
710
+
677
711
  @api.model
678
712
  def _update_counter(self, review_counter):
679
713
  self.review_ids._compute_can_review()
@@ -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:f09a6ac42502605dac3f91f6a5e27e786f1f5bc212ec8641d692a5e551043be3
370
+ !! source digest: sha256:b8ad9914d3d83a36f03df6d1027d6d363fbce13a577a647069407aa865d65e24
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
@@ -18,11 +18,18 @@
18
18
  ('#{state_field}', '#{state_operator}', #{state_value})]}"
19
19
  type="object"
20
20
  />
21
+ <button
22
+ name="reevaluate_reviews"
23
+ string="Reevaluate Reviews"
24
+ t-attf-attrs="{'invisible': ['|',('is_reevaluation_required', '!=', True),('#{state_field}', '#{state_operator}', #{state_value})]}"
25
+ type="object"
26
+ />
21
27
  </div>
22
28
  </template>
23
29
  <template id="tier_validation_label">
24
30
  <div>
25
31
  <field name="need_validation" invisible="1" />
32
+ <field name="is_reevaluation_required" invisible="1" />
26
33
  <field name="validated" invisible="1" />
27
34
  <field name="rejected" invisible="1" />
28
35
  <div
@@ -905,6 +905,88 @@ class TierTierValidation(CommonTierValidation):
905
905
  )
906
906
  self.assertEqual(self.test_record.test_validation_field, 4)
907
907
 
908
+ def test_27_reevaluate_validation(self):
909
+ # Create new test record
910
+ test_record = self.test_model.create(
911
+ {"test_field": 100, "test_validation_field": 15}
912
+ )
913
+ # Create tier definitions
914
+ self.tier_def_obj.create(
915
+ {
916
+ "model_id": self.tester_model.id,
917
+ "review_type": "individual",
918
+ "reviewer_id": self.test_user_1.id,
919
+ "definition_domain": "[('test_field', '>', 100)]",
920
+ }
921
+ )
922
+ # Request validation
923
+ reviews = test_record.with_user(self.test_user_2.id).request_validation()
924
+ # Check need validation
925
+ self.assertTrue(test_record.need_validation)
926
+ self.assertEqual(len(reviews), 1)
927
+
928
+ # Now record is not validated yet and new definition create,
929
+ # and then we reevaluate object then it will add new definition validation
930
+ # also in current object
931
+ self.tier_def_obj.create(
932
+ {
933
+ "model_id": self.tester_model.id,
934
+ "review_type": "individual",
935
+ "reviewer_id": self.test_user_1.id,
936
+ "definition_domain": "[('test_validation_field', '>', 10)]",
937
+ }
938
+ )
939
+
940
+ # Reevaluate Validation
941
+ reviews = test_record.with_user(self.test_user_2.id).reevaluate_reviews()
942
+ # Check need validation
943
+ self.assertTrue(test_record.need_validation)
944
+ self.assertEqual(len(reviews), 2)
945
+
946
+ def test_28_reevaluate_validation(self):
947
+ # Create new test record
948
+ test_record = self.test_model.create(
949
+ {"test_field": 100, "test_validation_field": 15}
950
+ )
951
+ # Create tier definitions
952
+ # 1st defination to check test_field
953
+ self.tier_def_obj.create(
954
+ {
955
+ "model_id": self.tester_model.id,
956
+ "review_type": "individual",
957
+ "reviewer_id": self.test_user_1.id,
958
+ "definition_domain": "[('test_field', '>', 100)]",
959
+ }
960
+ )
961
+ # 2nd definition will be trigger only when there is
962
+ # new message with body "This record need extra validation"
963
+ test_message = "This record need extra validation"
964
+ self.tier_def_obj.create(
965
+ {
966
+ "model_id": self.tester_model.id,
967
+ "review_type": "individual",
968
+ "reviewer_id": self.test_user_1.id,
969
+ "definition_domain": "[('message_ids.body', 'ilike', '%s')]"
970
+ % (test_message),
971
+ }
972
+ )
973
+
974
+ # Request validation
975
+ reviews = test_record.with_user(self.test_user_2.id).request_validation()
976
+ # Check need validation
977
+ self.assertTrue(test_record.need_validation)
978
+ self.assertEqual(len(reviews), 1)
979
+
980
+ # now post new message "This record need extra validation",
981
+ # it will need to reevaluate record and will add new tier validation
982
+ test_record.with_user(self.test_user_2.id).message_post(body=test_message)
983
+
984
+ # Reevaluate Validation
985
+ reviews = test_record.with_user(self.test_user_2.id).reevaluate_reviews()
986
+ # Check need validation
987
+ self.assertTrue(test_record.need_validation)
988
+ self.assertEqual(len(reviews), 2)
989
+
908
990
 
909
991
  @tagged("at_install")
910
992
  class TierTierValidationView(CommonTierValidation):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-base_tier_validation
3
- Version: 16.0.2.2.2.3
3
+ Version: 16.0.2.3.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:f09a6ac42502605dac3f91f6a5e27e786f1f5bc212ec8641d692a5e551043be3
26
+ !! source digest: sha256:b8ad9914d3d83a36f03df6d1027d6d363fbce13a577a647069407aa865d65e24
27
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28
28
 
29
29
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -1,9 +1,9 @@
1
- odoo/addons/base_tier_validation/README.rst,sha256=JE_h3xwzFSxD4l9o2jCETI6Wrq8JuPg9OfkRkziHmfc,7996
1
+ odoo/addons/base_tier_validation/README.rst,sha256=POG5AbEptBmF9jKRhniSDwG-uM4_C_JjKt8ypZkpOvk,7996
2
2
  odoo/addons/base_tier_validation/__init__.py,sha256=rKfzYX9RhkkCxgh2f0PJLYN45Kw8T8-fwxw1pbjLuug,108
3
- odoo/addons/base_tier_validation/__manifest__.py,sha256=o_fNwD35Mn1EuiYVcjEDP63-Iz4SId5weSOSEWWV-Cg,2011
3
+ odoo/addons/base_tier_validation/__manifest__.py,sha256=QHoUIYdO9MTnehkfTn2ZsGc8XDOJmkpx72xtn1GRwbc,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
- odoo/addons/base_tier_validation/i18n/base_tier_validation.pot,sha256=YYP5oGNL3dhS7yL-_k7J29oQ8rb3XAnEqTPI11Pn0Aw,32069
6
+ odoo/addons/base_tier_validation/i18n/base_tier_validation.pot,sha256=RtlXdM30mKs3ju2AjK4QxnQJ4RsuW5-RVl4aXG_UZ6I,32406
7
7
  odoo/addons/base_tier_validation/i18n/es.po,sha256=QwqRwFBKyx6AHCwn_Y4dG6wV5eDP2mX9rGWhjD83BSA,37251
8
8
  odoo/addons/base_tier_validation/i18n/es_MX.po,sha256=hXOfANN5n6CMn0SeOwboF5tUh3gG1m_ZQLCq6Bj22j0,35382
9
9
  odoo/addons/base_tier_validation/i18n/fr.po,sha256=dsR5-957iIpHkSPnRNWBcvJ-bZNvBw-RTv_c3eJE7mw,38351
@@ -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=ic6Rkh0PhliJ4gkWHmPJ84Ln2puGC1U5W5N2PCFlXw8,7267
20
- odoo/addons/base_tier_validation/models/tier_validation.py,sha256=I1F00jlUJIjSsV04u8_eFut_9jG8J3vJF6S4OlbRzxw,31260
20
+ odoo/addons/base_tier_validation/models/tier_validation.py,sha256=CH2pPpWUYvVmfWJelpo2GVxOdhlYzuQPWg7UB104-nE,32682
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=n4HslhSWkDvr4gvztcdP-0y8b3qUbxFGXj9JDQumV7Q,22306
30
+ odoo/addons/base_tier_validation/static/description/index.html,sha256=euBSWf1WoZj3bdZ0JUqpevOntjLo-vBLCJGNScsu2B4,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
@@ -43,10 +43,10 @@ odoo/addons/base_tier_validation/static/src/scss/systray.scss,sha256=vco1l3nsJfX
43
43
  odoo/addons/base_tier_validation/static/src/xml/reviewer_menu_container.xml,sha256=pMgADQ7SgdHrE_FTo2hnpDJqPbuc9jOHXHSAaa0Gjbk,271
44
44
  odoo/addons/base_tier_validation/static/src/xml/systray.xml,sha256=8W04E80UhUPQp6U9zvmDu1qqOXsDaDP8Q5YFw6Dgg7s,4987
45
45
  odoo/addons/base_tier_validation/static/src/xml/tier_review_template.xml,sha256=o72pPVkPiPmr2KWucaTJahR945MbD4gaYyi3KQn6AyI,6217
46
- odoo/addons/base_tier_validation/templates/tier_validation_templates.xml,sha256=fuIyMgIwp_UWrlR75TeAKMrfiK-kd2lH8xshLkwWeRg,4191
46
+ odoo/addons/base_tier_validation/templates/tier_validation_templates.xml,sha256=yBB3Sm9dPy9eJ2E6pD97od3Sr7I04_U21Jkcvy9LGYs,4559
47
47
  odoo/addons/base_tier_validation/tests/__init__.py,sha256=7tj1DSbPnyA__lAKxvjX53Ll_ZTE8y8Z1bewtZJoURI,166
48
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=RKGH9WI-q2u9uTFWnemBlvrhLICpWxCWSUDZPNPjQFk,37572
49
+ odoo/addons/base_tier_validation/tests/test_tier_validation.py,sha256=z7NjMeysN44OK5JEeGtn_QfxKobhRns7RTPLWG4zjmQ,40838
50
50
  odoo/addons/base_tier_validation/tests/test_tier_validation_reminder.py,sha256=jsLU-7pJtbUvKPi7ddXU4jAwiJp32pKTrluarrtLKvU,1963
51
51
  odoo/addons/base_tier_validation/tests/tier_validation_tester.py,sha256=3usFbhfDhlKIWbVu--3qsbsm52B6RwTP4zy244dY1yk,1757
52
52
  odoo/addons/base_tier_validation/views/res_config_settings_views.xml,sha256=Al6XKCN1QGLPcgAaXTvEnSTYkwBrzDGfSRh3CQD4g5Q,4234
@@ -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.2.2.3.dist-info/METADATA,sha256=bQns539gYzR4krV8a9G2Ivr1D0o-a1zJtfdsclsEuWA,8580
60
- odoo_addon_base_tier_validation-16.0.2.2.2.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
61
- odoo_addon_base_tier_validation-16.0.2.2.2.3.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
62
- odoo_addon_base_tier_validation-16.0.2.2.2.3.dist-info/RECORD,,
59
+ odoo_addon_base_tier_validation-16.0.2.3.0.dist-info/METADATA,sha256=BpvFoTxeWBtMHqpd9lb8ggX1ea15262uQup1pBAGNpM,8578
60
+ odoo_addon_base_tier_validation-16.0.2.3.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
61
+ odoo_addon_base_tier_validation-16.0.2.3.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
62
+ odoo_addon_base_tier_validation-16.0.2.3.0.dist-info/RECORD,,