odoo-addon-base-tier-validation 15.0.1.4.0__py3-none-any.whl → 15.0.1.5.0.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.
Files changed (23) hide show
  1. odoo/addons/base_tier_validation/README.rst +1 -1
  2. odoo/addons/base_tier_validation/__manifest__.py +2 -1
  3. odoo/addons/base_tier_validation/data/cron_data.xml +17 -0
  4. odoo/addons/base_tier_validation/data/mail_data.xml +18 -0
  5. odoo/addons/base_tier_validation/i18n/base_tier_validation.pot +36 -0
  6. odoo/addons/base_tier_validation/i18n/es.po +55 -5
  7. odoo/addons/base_tier_validation/i18n/es_MX.po +54 -0
  8. odoo/addons/base_tier_validation/i18n/fr.po +54 -0
  9. odoo/addons/base_tier_validation/i18n/it.po +54 -0
  10. odoo/addons/base_tier_validation/i18n/nl_NL.po +54 -0
  11. odoo/addons/base_tier_validation/i18n/sv.po +54 -0
  12. odoo/addons/base_tier_validation/i18n/zh_CN.po +54 -0
  13. odoo/addons/base_tier_validation/models/tier_definition.py +35 -0
  14. odoo/addons/base_tier_validation/models/tier_review.py +40 -0
  15. odoo/addons/base_tier_validation/static/description/index.html +8 -5
  16. odoo/addons/base_tier_validation/tests/__init__.py +1 -0
  17. odoo/addons/base_tier_validation/tests/common.py +1 -1
  18. odoo/addons/base_tier_validation/tests/test_tier_validation_reminder.py +46 -0
  19. odoo/addons/base_tier_validation/views/tier_definition_view.xml +1 -0
  20. {odoo_addon_base_tier_validation-15.0.1.4.0.dist-info → odoo_addon_base_tier_validation-15.0.1.5.0.1.dist-info}/METADATA +3 -6
  21. {odoo_addon_base_tier_validation-15.0.1.4.0.dist-info → odoo_addon_base_tier_validation-15.0.1.5.0.1.dist-info}/RECORD +23 -21
  22. {odoo_addon_base_tier_validation-15.0.1.4.0.dist-info → odoo_addon_base_tier_validation-15.0.1.5.0.1.dist-info}/WHEEL +1 -1
  23. {odoo_addon_base_tier_validation-15.0.1.4.0.dist-info → odoo_addon_base_tier_validation-15.0.1.5.0.1.dist-info}/top_level.txt +0 -0
@@ -59,6 +59,12 @@ msgstr "<span class=\"oe_edit_only\">Naam</span>"
59
59
  msgid "<span>Bypassed, if previous tier was validated by same reviewer</span>"
60
60
  msgstr ""
61
61
 
62
+ #. module: base_tier_validation
63
+ #: code:addons/base_tier_validation/models/tier_review.py:0
64
+ #, python-format
65
+ msgid "A review has been requested %s days ago."
66
+ msgstr ""
67
+
62
68
  #. module: base_tier_validation
63
69
  #: code:addons/base_tier_validation/models/tier_validation.py:0
64
70
  #, python-format
@@ -145,6 +151,11 @@ msgstr "Goedkeuren op volgorde"
145
151
  msgid "Approved"
146
152
  msgstr "Goedgekeurd"
147
153
 
154
+ #. module: base_tier_validation
155
+ #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
156
+ msgid "Archived"
157
+ msgstr ""
158
+
148
159
  #. module: base_tier_validation
149
160
  #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
150
161
  #: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
@@ -315,6 +326,11 @@ msgstr ""
315
326
  msgid "Last Modified on"
316
327
  msgstr "Laatst gewijzigd op"
317
328
 
329
+ #. module: base_tier_validation
330
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
331
+ msgid "Last Reminder Date"
332
+ msgstr ""
333
+
318
334
  #. module: base_tier_validation
319
335
  #: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
320
336
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
@@ -379,6 +395,13 @@ msgstr "Geen beoordelingen te doen."
379
395
  msgid "Notify Reviewers on Creation"
380
396
  msgstr "Informeer beoordelaar bij het maken"
381
397
 
398
+ #. module: base_tier_validation
399
+ #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
400
+ msgid ""
401
+ "Number of days after which a message must be posted to remind about pending "
402
+ "validation (0 = no reminder)"
403
+ msgstr ""
404
+
382
405
  #. module: base_tier_validation
383
406
  #: code:addons/base_tier_validation/models/tier_validation.py:0
384
407
  #, python-format
@@ -410,6 +433,7 @@ msgstr ""
410
433
  #. openerp-web
411
434
  #: code:addons/base_tier_validation/static/src/xml/systray.xml:0
412
435
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
436
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
413
437
  #, python-format
414
438
  msgid "Pending"
415
439
  msgstr "In afwachting"
@@ -427,6 +451,7 @@ msgstr ""
427
451
  #. module: base_tier_validation
428
452
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
429
453
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
454
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
430
455
  msgid "Rejected"
431
456
  msgstr "Afgekeurd"
432
457
 
@@ -518,6 +543,18 @@ msgstr "Beoordelaars"
518
543
  msgid "Reviews"
519
544
  msgstr "Beoordelingen"
520
545
 
546
+ #. module: base_tier_validation
547
+ #: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
548
+ #: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
549
+ #: model:ir.cron,name:base_tier_validation.ir_cron_auto_tier_validation
550
+ msgid "Send Tier Review Reminder"
551
+ msgstr ""
552
+
553
+ #. module: base_tier_validation
554
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
555
+ msgid "Send reminder message on pending reviews"
556
+ msgstr ""
557
+
521
558
  #. module: base_tier_validation
522
559
  #. openerp-web
523
560
  #: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
@@ -629,6 +666,12 @@ msgstr "Tier-validatie (abstract)"
629
666
  msgid "Tier Validation Rejected Notification"
630
667
  msgstr "Tier-validatie (abstract)"
631
668
 
669
+ #. module: base_tier_validation
670
+ #: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
671
+ #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
672
+ msgid "Tier Validation Reminder"
673
+ msgstr ""
674
+
632
675
  #. module: base_tier_validation
633
676
  #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
634
677
  msgid "Tier Validation Requested"
@@ -683,6 +726,7 @@ msgstr "Valideren weigeren"
683
726
 
684
727
  #. module: base_tier_validation
685
728
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
729
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
686
730
  msgid "Validated"
687
731
  msgstr "Gevalideerd"
688
732
 
@@ -705,11 +749,21 @@ msgstr "Gevalideerd door"
705
749
  msgid "Validation Date"
706
750
  msgstr "Validatie datum"
707
751
 
752
+ #. module: base_tier_validation
753
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
754
+ msgid "Validation Status"
755
+ msgstr ""
756
+
708
757
  #. module: base_tier_validation
709
758
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
710
759
  msgid "Validations"
711
760
  msgstr "Validaties"
712
761
 
762
+ #. module: base_tier_validation
763
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
764
+ msgid "Without validation"
765
+ msgstr ""
766
+
713
767
  #. module: base_tier_validation
714
768
  #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
715
769
  msgid "e.g. Tier Validation for..."
@@ -70,6 +70,12 @@ msgstr "<span class=\"oe_edit_only\">Namn</span>"
70
70
  msgid "<span>Bypassed, if previous tier was validated by same reviewer</span>"
71
71
  msgstr ""
72
72
 
73
+ #. module: base_tier_validation
74
+ #: code:addons/base_tier_validation/models/tier_review.py:0
75
+ #, python-format
76
+ msgid "A review has been requested %s days ago."
77
+ msgstr ""
78
+
73
79
  #. module: base_tier_validation
74
80
  #: code:addons/base_tier_validation/models/tier_validation.py:0
75
81
  #, python-format
@@ -156,6 +162,11 @@ msgstr "Godkänn efter sekvens"
156
162
  msgid "Approved"
157
163
  msgstr "Godkänd"
158
164
 
165
+ #. module: base_tier_validation
166
+ #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
167
+ msgid "Archived"
168
+ msgstr ""
169
+
159
170
  #. module: base_tier_validation
160
171
  #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
161
172
  #: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
@@ -328,6 +339,11 @@ msgstr ""
328
339
  msgid "Last Modified on"
329
340
  msgstr "Senast ändrad den"
330
341
 
342
+ #. module: base_tier_validation
343
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
344
+ msgid "Last Reminder Date"
345
+ msgstr ""
346
+
331
347
  #. module: base_tier_validation
332
348
  #: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
333
349
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
@@ -394,6 +410,13 @@ msgstr "Inga granskningar att göra."
394
410
  msgid "Notify Reviewers on Creation"
395
411
  msgstr "Meddela granskare vid skapande"
396
412
 
413
+ #. module: base_tier_validation
414
+ #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
415
+ msgid ""
416
+ "Number of days after which a message must be posted to remind about pending "
417
+ "validation (0 = no reminder)"
418
+ msgstr ""
419
+
397
420
  #. module: base_tier_validation
398
421
  #: code:addons/base_tier_validation/models/tier_validation.py:0
399
422
  #, python-format
@@ -430,6 +453,7 @@ msgstr ""
430
453
  #. openerp-web
431
454
  #: code:addons/base_tier_validation/static/src/xml/systray.xml:0
432
455
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
456
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
433
457
  #, python-format
434
458
  msgid "Pending"
435
459
  msgstr "Väntande"
@@ -447,6 +471,7 @@ msgstr "Neka"
447
471
  #. module: base_tier_validation
448
472
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
449
473
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
474
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
450
475
  msgid "Rejected"
451
476
  msgstr "Nekad"
452
477
 
@@ -538,6 +563,18 @@ msgstr "Granskare"
538
563
  msgid "Reviews"
539
564
  msgstr "Granskningar"
540
565
 
566
+ #. module: base_tier_validation
567
+ #: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
568
+ #: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
569
+ #: model:ir.cron,name:base_tier_validation.ir_cron_auto_tier_validation
570
+ msgid "Send Tier Review Reminder"
571
+ msgstr ""
572
+
573
+ #. module: base_tier_validation
574
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
575
+ msgid "Send reminder message on pending reviews"
576
+ msgstr ""
577
+
541
578
  #. module: base_tier_validation
542
579
  #. openerp-web
543
580
  #: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
@@ -647,6 +684,12 @@ msgstr "Meddelande vid accepterad attestering"
647
684
  msgid "Tier Validation Rejected Notification"
648
685
  msgstr "Meddelande vid nekad attestering"
649
686
 
687
+ #. module: base_tier_validation
688
+ #: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
689
+ #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
690
+ msgid "Tier Validation Reminder"
691
+ msgstr ""
692
+
650
693
  #. module: base_tier_validation
651
694
  #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
652
695
  msgid "Tier Validation Requested"
@@ -701,6 +744,7 @@ msgstr "Validera Neka"
701
744
 
702
745
  #. module: base_tier_validation
703
746
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
747
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
704
748
  msgid "Validated"
705
749
  msgstr "Validerad"
706
750
 
@@ -723,11 +767,21 @@ msgstr "Validerad av"
723
767
  msgid "Validation Date"
724
768
  msgstr "Valideringsdatum"
725
769
 
770
+ #. module: base_tier_validation
771
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
772
+ msgid "Validation Status"
773
+ msgstr ""
774
+
726
775
  #. module: base_tier_validation
727
776
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
728
777
  msgid "Validations"
729
778
  msgstr "Valideringar"
730
779
 
780
+ #. module: base_tier_validation
781
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
782
+ msgid "Without validation"
783
+ msgstr ""
784
+
731
785
  #. module: base_tier_validation
732
786
  #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
733
787
  msgid "e.g. Tier Validation for..."
@@ -59,6 +59,12 @@ msgstr "<span class=\"oe_edit_only\">名称</span>"
59
59
  msgid "<span>Bypassed, if previous tier was validated by same reviewer</span>"
60
60
  msgstr ""
61
61
 
62
+ #. module: base_tier_validation
63
+ #: code:addons/base_tier_validation/models/tier_review.py:0
64
+ #, python-format
65
+ msgid "A review has been requested %s days ago."
66
+ msgstr ""
67
+
62
68
  #. module: base_tier_validation
63
69
  #: code:addons/base_tier_validation/models/tier_validation.py:0
64
70
  #, python-format
@@ -145,6 +151,11 @@ msgstr "按顺序审批"
145
151
  msgid "Approved"
146
152
  msgstr "已批准"
147
153
 
154
+ #. module: base_tier_validation
155
+ #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
156
+ msgid "Archived"
157
+ msgstr ""
158
+
148
159
  #. module: base_tier_validation
149
160
  #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
150
161
  #: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
@@ -313,6 +324,11 @@ msgstr ""
313
324
  msgid "Last Modified on"
314
325
  msgstr "最近修改时间"
315
326
 
327
+ #. module: base_tier_validation
328
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
329
+ msgid "Last Reminder Date"
330
+ msgstr ""
331
+
316
332
  #. module: base_tier_validation
317
333
  #: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
318
334
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
@@ -377,6 +393,13 @@ msgstr "没有待审批的项目。"
377
393
  msgid "Notify Reviewers on Creation"
378
394
  msgstr "创建时通知审批人"
379
395
 
396
+ #. module: base_tier_validation
397
+ #: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
398
+ msgid ""
399
+ "Number of days after which a message must be posted to remind about pending "
400
+ "validation (0 = no reminder)"
401
+ msgstr ""
402
+
380
403
  #. module: base_tier_validation
381
404
  #: code:addons/base_tier_validation/models/tier_validation.py:0
382
405
  #, python-format
@@ -408,6 +431,7 @@ msgstr ""
408
431
  #. openerp-web
409
432
  #: code:addons/base_tier_validation/static/src/xml/systray.xml:0
410
433
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
434
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
411
435
  #, python-format
412
436
  msgid "Pending"
413
437
  msgstr "待审批"
@@ -425,6 +449,7 @@ msgstr ""
425
449
  #. module: base_tier_validation
426
450
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
427
451
  #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
452
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
428
453
  msgid "Rejected"
429
454
  msgstr "已驳回"
430
455
 
@@ -516,6 +541,18 @@ msgstr "审批者"
516
541
  msgid "Reviews"
517
542
  msgstr "审批"
518
543
 
544
+ #. module: base_tier_validation
545
+ #: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
546
+ #: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
547
+ #: model:ir.cron,name:base_tier_validation.ir_cron_auto_tier_validation
548
+ msgid "Send Tier Review Reminder"
549
+ msgstr ""
550
+
551
+ #. module: base_tier_validation
552
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
553
+ msgid "Send reminder message on pending reviews"
554
+ msgstr ""
555
+
519
556
  #. module: base_tier_validation
520
557
  #. openerp-web
521
558
  #: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
@@ -627,6 +664,12 @@ msgstr "多层级审批(抽象)"
627
664
  msgid "Tier Validation Rejected Notification"
628
665
  msgstr "多层级审批(抽象)"
629
666
 
667
+ #. module: base_tier_validation
668
+ #: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
669
+ #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
670
+ msgid "Tier Validation Reminder"
671
+ msgstr ""
672
+
630
673
  #. module: base_tier_validation
631
674
  #: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
632
675
  msgid "Tier Validation Requested"
@@ -681,6 +724,7 @@ msgstr "驳回"
681
724
 
682
725
  #. module: base_tier_validation
683
726
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
727
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
684
728
  msgid "Validated"
685
729
  msgstr "已批准"
686
730
 
@@ -703,11 +747,21 @@ msgstr "审批人"
703
747
  msgid "Validation Date"
704
748
  msgstr "审批日期"
705
749
 
750
+ #. module: base_tier_validation
751
+ #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
752
+ msgid "Validation Status"
753
+ msgstr ""
754
+
706
755
  #. module: base_tier_validation
707
756
  #: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
708
757
  msgid "Validations"
709
758
  msgstr "审批"
710
759
 
760
+ #. module: base_tier_validation
761
+ #: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
762
+ msgid "Without validation"
763
+ msgstr ""
764
+
711
765
  #. module: base_tier_validation
712
766
  #: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
713
767
  msgid "e.g. Tier Validation for..."
@@ -68,6 +68,11 @@ class TierDefinition(models.Model):
68
68
  "this definition is triggered.",
69
69
  )
70
70
  has_comment = fields.Boolean(string="Comment", default=False)
71
+ notify_reminder_delay = fields.Integer(
72
+ string="Send reminder message on pending reviews",
73
+ help="Number of days after which a message must be posted to remind about "
74
+ "pending validation (0 = no reminder)",
75
+ )
71
76
  approve_sequence = fields.Boolean(
72
77
  string="Approve by sequence",
73
78
  default=False,
@@ -88,3 +93,33 @@ class TierDefinition(models.Model):
88
93
  rec.valid_reviewer_field_ids = self.env["ir.model.fields"].search(
89
94
  [("model", "=", rec.model), ("relation", "=", "res.users")]
90
95
  )
96
+
97
+ def _get_review_needing_reminder(self):
98
+ """Return all the reviews that have the reminder setup."""
99
+ self.ensure_one()
100
+ if not self.notify_reminder_delay:
101
+ return self.env["tier.review"]
102
+ review_date = fields.Datetime.subtract(
103
+ fields.Datetime.now(), days=self.notify_reminder_delay
104
+ )
105
+ return self.env["tier.review"].search(
106
+ [
107
+ ("definition_id", "=", self.id),
108
+ ("status", "=", "pending"),
109
+ "|",
110
+ "&",
111
+ ("create_date", "<", review_date),
112
+ ("last_reminder_date", "=", False),
113
+ ("last_reminder_date", "<", review_date),
114
+ ],
115
+ limit=1,
116
+ )
117
+
118
+ def _cron_send_review_reminder(self):
119
+ definition_with_reminder = self.env["tier.definition"].search(
120
+ [("notify_reminder_delay", ">", 0)]
121
+ )
122
+ for record in definition_with_reminder:
123
+ review_to_remind = record._get_review_needing_reminder()
124
+ if review_to_remind:
125
+ review_to_remind._send_review_reminder()
@@ -1,9 +1,13 @@
1
1
  # Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
2
2
  # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
3
 
4
+ import logging
5
+
4
6
  from odoo import _, api, fields, models
5
7
  from odoo.exceptions import ValidationError
6
8
 
9
+ _logger = logging.getLogger(__name__)
10
+
7
11
 
8
12
  class TierReview(models.Model):
9
13
  _name = "tier.review"
@@ -58,6 +62,7 @@ class TierReview(models.Model):
58
62
  approve_sequence_bypass = fields.Boolean(
59
63
  related="definition_id.approve_sequence_bypass", readonly=True
60
64
  )
65
+ last_reminder_date = fields.Datetime(readonly=True)
61
66
 
62
67
  @api.depends("definition_id.approve_sequence")
63
68
  def _compute_can_review(self):
@@ -110,3 +115,38 @@ class TierReview(models.Model):
110
115
  if not reviewer_field or not reviewer_field._name == "res.users":
111
116
  raise ValidationError(_("There are no res.users in the selected field"))
112
117
  return reviewer_field
118
+
119
+ def _get_reminder_notification_subtype(self):
120
+ return "base_tier_validation.mt_tier_validation_reminder"
121
+
122
+ def _get_reminder_activity_type(self):
123
+ return "base_tier_validation.mail_act_tier_validation_reminder"
124
+
125
+ def _notify_review_reminder_body(self):
126
+ delay = (fields.Datetime.now() - self.create_date).days
127
+ return _("A review has been requested %s days ago.") % (delay)
128
+
129
+ def _send_review_reminder(self):
130
+ record = self.env[self.model].browse(self.res_id)
131
+ # Only schedule activity if reviewer is a single user and model has activities
132
+ if len(self.reviewer_ids) == 1 and hasattr(record, "activity_ids"):
133
+ self._schedule_review_reminder_activity(record)
134
+ elif hasattr(record, "message_post"):
135
+ self._notify_review_reminder(record)
136
+ else:
137
+ msg = "Could not send reminder for record %s" % record
138
+ _logger.exception(msg)
139
+ self.last_reminder_date = fields.Datetime.now()
140
+
141
+ def _notify_review_reminder(self, record):
142
+ record.message_post(
143
+ subtype_xmlid=self._get_reminder_notification_subtype(),
144
+ body=self._notify_review_reminder_body(),
145
+ )
146
+
147
+ def _schedule_review_reminder_activity(self, record):
148
+ record.activity_schedule(
149
+ act_type_xmlid=self._get_reminder_activity_type(),
150
+ note=self._notify_review_reminder_body(),
151
+ act_values={"user_id": self.reviewer_ids.id},
152
+ )
@@ -8,10 +8,11 @@
8
8
 
9
9
  /*
10
10
  :Author: David Goodger (goodger@python.org)
11
- :Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
11
+ :Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
12
12
  :Copyright: This stylesheet has been placed in the public domain.
13
13
 
14
14
  Default cascading style sheet for the HTML output of Docutils.
15
+ Despite the name, some widely supported CSS2 features are used.
15
16
 
16
17
  See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
17
18
  customize this style sheet.
@@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
274
275
  margin-left: 2em ;
275
276
  margin-right: 2em }
276
277
 
277
- pre.code .ln { color: grey; } /* line numbers */
278
+ pre.code .ln { color: gray; } /* line numbers */
278
279
  pre.code, code { background-color: #eeeeee }
279
280
  pre.code .comment, code .comment { color: #5C6576 }
280
281
  pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -300,7 +301,7 @@ span.option {
300
301
  span.pre {
301
302
  white-space: pre }
302
303
 
303
- span.problematic {
304
+ span.problematic, pre.problematic {
304
305
  color: red }
305
306
 
306
307
  span.section-subtitle {
@@ -366,7 +367,7 @@ ul.auto-toc {
366
367
  !! This file is generated by oca-gen-addon-readme !!
367
368
  !! changes will be overwritten. !!
368
369
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
369
- !! source digest: sha256:2fd9b5e68886a6feac275919d3fcc0e7165475bebf2127462745b5042757cf08
370
+ !! source digest: sha256:6630e37cda41b78f1f3dfb44fb574c46992a747d7afb4c55e3ca7691027d177d
370
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
371
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/15.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-15-0/server-ux-15-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=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
372
373
  <p>Validating some operations is a common need across different areas in a company
@@ -567,7 +568,9 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
567
568
  <div class="section" id="maintainers">
568
569
  <h2><a class="toc-backref" href="#toc-entry-22">Maintainers</a></h2>
569
570
  <p>This module is maintained by the OCA.</p>
570
- <a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
571
+ <a class="reference external image-reference" href="https://odoo-community.org">
572
+ <img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
573
+ </a>
571
574
  <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
572
575
  mission is to support the collaborative development of Odoo features and
573
576
  promote its widespread use.</p>
@@ -2,3 +2,4 @@
2
2
 
3
3
  from . import common
4
4
  from . import test_tier_validation
5
+ from . import test_tier_validation_reminder
@@ -75,7 +75,7 @@ class CommonTierValidation(common.TransactionCase):
75
75
 
76
76
  # Create tier definitions:
77
77
  cls.tier_def_obj = cls.env["tier.definition"]
78
- cls.tier_def_obj.create(
78
+ cls.tier_definition = cls.tier_def_obj.create(
79
79
  {
80
80
  "model_id": cls.tester_model.id,
81
81
  "review_type": "individual",
@@ -0,0 +1,46 @@
1
+ # Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
3
+
4
+ from freezegun import freeze_time
5
+
6
+ from odoo import fields
7
+ from odoo.tests.common import tagged
8
+
9
+ from .common import CommonTierValidation
10
+
11
+
12
+ @tagged("post_install", "-at_install")
13
+ class TierTierValidation(CommonTierValidation):
14
+ def test_validation_reminder(self):
15
+ """Check the posting of reminder to reviews."""
16
+ tier_definition = self.tier_definition
17
+ tier_definition.notify_reminder_delay = 3
18
+
19
+ # Request a review today
20
+ self.test_record.with_user(self.test_user_2.id).request_validation()
21
+ review = self.env["tier.review"].search(
22
+ [("definition_id", "=", tier_definition.id)]
23
+ )
24
+ self.assertTrue(review)
25
+ self.assertEqual(review.last_reminder_date, False)
26
+
27
+ # 2 days later no reminder should be posted
28
+ in_2_days = fields.Datetime.add(fields.Datetime.now(), days=2)
29
+ with freeze_time(in_2_days):
30
+ tier_definition._cron_send_review_reminder()
31
+ self.assertEqual(review.last_reminder_date, False)
32
+ # 4 days later first reminder
33
+ in_4_days = fields.Datetime.add(fields.Datetime.now(), days=4)
34
+ with freeze_time(in_4_days):
35
+ self.tier_definition._cron_send_review_reminder()
36
+ self.assertEqual(review.last_reminder_date, in_4_days)
37
+ # 5 days later no new reminder
38
+ in_6_days = fields.Datetime.add(fields.Datetime.now(), days=6)
39
+ with freeze_time(in_6_days):
40
+ self.tier_definition._cron_send_review_reminder()
41
+ self.assertEqual(review.last_reminder_date, in_4_days)
42
+ # 9 days later second reminder
43
+ in_9_days = fields.Datetime.add(fields.Datetime.now(), days=9)
44
+ with freeze_time(in_9_days):
45
+ self.tier_definition._cron_send_review_reminder()
46
+ self.assertEqual(review.last_reminder_date, in_9_days)
@@ -100,6 +100,7 @@
100
100
  <group name="notify">
101
101
  <field name="notify_on_create" />
102
102
  <field name="has_comment" />
103
+ <field name="notify_reminder_delay" />
103
104
  </group>
104
105
  </group>
105
106
  </page>
@@ -1,12 +1,11 @@
1
1
  Metadata-Version: 2.1
2
- Name: odoo-addon-base-tier-validation
3
- Version: 15.0.1.4.0
2
+ Name: odoo-addon-base_tier_validation
3
+ Version: 15.0.1.5.0.1
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)
7
7
  Author-email: support@odoo-community.org
8
8
  License: AGPL-3
9
- Platform: UNKNOWN
10
9
  Classifier: Programming Language :: Python
11
10
  Classifier: Framework :: Odoo
12
11
  Classifier: Framework :: Odoo :: 15.0
@@ -24,7 +23,7 @@ Base Tier Validation
24
23
  !! This file is generated by oca-gen-addon-readme !!
25
24
  !! changes will be overwritten. !!
26
25
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
- !! source digest: sha256:2fd9b5e68886a6feac275919d3fcc0e7165475bebf2127462745b5042757cf08
26
+ !! source digest: sha256:6630e37cda41b78f1f3dfb44fb574c46992a747d7afb4c55e3ca7691027d177d
28
27
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29
28
 
30
29
  .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
@@ -251,5 +250,3 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
251
250
  This module is part of the `OCA/server-ux <https://github.com/OCA/server-ux/tree/15.0/base_tier_validation>`_ project on GitHub.
252
251
 
253
252
  You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
254
-
255
-