odoo-addon-base-tier-validation 16.0.1.0.4.29__py3-none-any.whl → 16.0.1.5.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.
- odoo/addons/base_tier_validation/README.rst +11 -6
- odoo/addons/base_tier_validation/__manifest__.py +1 -1
- odoo/addons/base_tier_validation/i18n/base_tier_validation.pot +104 -6
- odoo/addons/base_tier_validation/i18n/es.po +147 -73
- odoo/addons/base_tier_validation/i18n/es_MX.po +104 -6
- odoo/addons/base_tier_validation/i18n/fr.po +186 -78
- odoo/addons/base_tier_validation/i18n/it.po +159 -48
- odoo/addons/base_tier_validation/i18n/nl_NL.po +159 -37
- odoo/addons/base_tier_validation/i18n/sv.po +140 -54
- odoo/addons/base_tier_validation/i18n/tr.po +107 -6
- odoo/addons/base_tier_validation/i18n/zh_CN.po +107 -6
- odoo/addons/base_tier_validation/models/res_config_settings.py +3 -3
- odoo/addons/base_tier_validation/models/res_users.py +5 -0
- odoo/addons/base_tier_validation/models/tier_definition.py +18 -0
- odoo/addons/base_tier_validation/models/tier_review.py +18 -3
- odoo/addons/base_tier_validation/models/tier_validation.py +183 -63
- odoo/addons/base_tier_validation/readme/CONTRIBUTORS.rst +2 -0
- odoo/addons/base_tier_validation/static/description/index.html +68 -65
- odoo/addons/base_tier_validation/static/src/xml/tier_review_template.xml +41 -17
- odoo/addons/base_tier_validation/templates/tier_validation_templates.xml +7 -6
- odoo/addons/base_tier_validation/tests/common.py +19 -6
- odoo/addons/base_tier_validation/tests/test_tier_validation.py +415 -0
- odoo/addons/base_tier_validation/tests/tier_validation_tester.py +13 -2
- odoo/addons/base_tier_validation/views/res_config_settings_views.xml +6 -6
- odoo/addons/base_tier_validation/views/tier_definition_view.xml +14 -1
- {odoo_addon_base_tier_validation-16.0.1.0.4.29.dist-info → odoo_addon_base_tier_validation-16.0.1.5.1.dist-info}/METADATA +13 -8
- {odoo_addon_base_tier_validation-16.0.1.0.4.29.dist-info → odoo_addon_base_tier_validation-16.0.1.5.1.dist-info}/RECORD +29 -29
- {odoo_addon_base_tier_validation-16.0.1.0.4.29.dist-info → odoo_addon_base_tier_validation-16.0.1.5.1.dist-info}/WHEEL +1 -1
- {odoo_addon_base_tier_validation-16.0.1.0.4.29.dist-info → odoo_addon_base_tier_validation-16.0.1.5.1.dist-info}/top_level.txt +0 -0
@@ -305,6 +305,51 @@ class TierTierValidation(CommonTierValidation):
|
|
305
305
|
0, len(record1.review_ids.filtered(lambda l: l.status == "pending"))
|
306
306
|
)
|
307
307
|
|
308
|
+
def test_12_approve_sequence_same_user_bypassed(self):
|
309
|
+
"""Similar to test_12_approve_sequence, with all same users,
|
310
|
+
but approve_sequence_bypass is True"""
|
311
|
+
# Create new test record
|
312
|
+
test_record = self.test_model.create({"test_field": 2.5})
|
313
|
+
# Create tier definitions
|
314
|
+
self.tier_def_obj.create(
|
315
|
+
{
|
316
|
+
"model_id": self.tester_model.id,
|
317
|
+
"review_type": "individual",
|
318
|
+
"reviewer_id": self.test_user_1.id,
|
319
|
+
"definition_domain": "[('test_field', '>', 1.0)]",
|
320
|
+
"approve_sequence": True,
|
321
|
+
"approve_sequence_bypass": True,
|
322
|
+
"sequence": 20,
|
323
|
+
}
|
324
|
+
)
|
325
|
+
self.tier_def_obj.create(
|
326
|
+
{
|
327
|
+
"model_id": self.tester_model.id,
|
328
|
+
"review_type": "individual",
|
329
|
+
"reviewer_id": self.test_user_1.id,
|
330
|
+
"definition_domain": "[('test_field', '>', 1.0)]",
|
331
|
+
"approve_sequence": True,
|
332
|
+
"approve_sequence_bypass": True,
|
333
|
+
"sequence": 10,
|
334
|
+
}
|
335
|
+
)
|
336
|
+
# Request validation
|
337
|
+
self.assertFalse(self.test_record.review_ids)
|
338
|
+
reviews = test_record.with_user(self.test_user_1.id).request_validation()
|
339
|
+
self.assertTrue(reviews)
|
340
|
+
|
341
|
+
record1 = test_record.with_user(self.test_user_1.id)
|
342
|
+
record1.invalidate_model()
|
343
|
+
self.assertTrue(record1.can_review)
|
344
|
+
# When the first tier is validated, all the rest will be approved.
|
345
|
+
self.assertEqual(
|
346
|
+
3, len(record1.review_ids.filtered(lambda l: l.status == "pending"))
|
347
|
+
)
|
348
|
+
record1.validate_tier()
|
349
|
+
self.assertEqual(
|
350
|
+
0, len(record1.review_ids.filtered(lambda l: l.status == "pending"))
|
351
|
+
)
|
352
|
+
|
308
353
|
def test_13_onchange_review_type(self):
|
309
354
|
tier_def_id = self.tier_def_obj.create(
|
310
355
|
{
|
@@ -436,6 +481,376 @@ class TierTierValidation(CommonTierValidation):
|
|
436
481
|
self.assertTrue(review)
|
437
482
|
self.assertEqual(review.reviewer_ids, self.test_user_2)
|
438
483
|
|
484
|
+
def test_19_notify_on_create(self):
|
485
|
+
# notify on create
|
486
|
+
tier_definition = self.env["tier.definition"].search([])
|
487
|
+
tier_definition.write(
|
488
|
+
{
|
489
|
+
"notify_on_create": True,
|
490
|
+
"notify_on_accepted": False,
|
491
|
+
"notify_on_rejected": False,
|
492
|
+
"notify_on_restarted": False,
|
493
|
+
"review_type": "group",
|
494
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
495
|
+
}
|
496
|
+
)
|
497
|
+
test_record_1 = self.test_model.create({"test_field": 2.5})
|
498
|
+
notifications_no_1 = len(
|
499
|
+
self.env["mail.notification"].search(
|
500
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
501
|
+
)
|
502
|
+
)
|
503
|
+
test_record_1.request_validation()
|
504
|
+
notifications_no_2 = len(
|
505
|
+
self.env["mail.notification"].search(
|
506
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
507
|
+
)
|
508
|
+
)
|
509
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
510
|
+
|
511
|
+
# do not notify on create
|
512
|
+
tier_definition.write({"notify_on_create": False})
|
513
|
+
test_record_2 = self.test_model.create({"test_field": 2.5})
|
514
|
+
notifications_no_1 = len(
|
515
|
+
self.env["mail.notification"].search(
|
516
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
517
|
+
)
|
518
|
+
)
|
519
|
+
test_record_2.request_validation()
|
520
|
+
notifications_no_2 = len(
|
521
|
+
self.env["mail.notification"].search(
|
522
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
523
|
+
)
|
524
|
+
)
|
525
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
526
|
+
|
527
|
+
def test_20_notify_on_accepted(self):
|
528
|
+
self.test_user_2.write(
|
529
|
+
{
|
530
|
+
"groups_id": [(6, 0, self.env.ref("base.group_system").ids)],
|
531
|
+
}
|
532
|
+
)
|
533
|
+
|
534
|
+
# notify on accepted
|
535
|
+
tier_definition = self.env["tier.definition"].search([])
|
536
|
+
tier_definition.write(
|
537
|
+
{
|
538
|
+
"notify_on_create": False,
|
539
|
+
"notify_on_accepted": True,
|
540
|
+
"notify_on_rejected": False,
|
541
|
+
"notify_on_restarted": False,
|
542
|
+
"review_type": "group",
|
543
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
544
|
+
}
|
545
|
+
)
|
546
|
+
test_record_1 = self.test_model.create({"test_field": 2.5})
|
547
|
+
test_record_1.request_validation()
|
548
|
+
test_record_1.invalidate_model()
|
549
|
+
record = test_record_1.with_user(self.test_user_2.id)
|
550
|
+
notifications_no_1 = len(
|
551
|
+
self.env["mail.notification"].search(
|
552
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
553
|
+
)
|
554
|
+
)
|
555
|
+
record.validate_tier()
|
556
|
+
notifications_no_2 = len(
|
557
|
+
self.env["mail.notification"].search(
|
558
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
559
|
+
)
|
560
|
+
)
|
561
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
562
|
+
|
563
|
+
# do not notify on accepted
|
564
|
+
tier_definition.write({"notify_on_accepted": False})
|
565
|
+
test_record_2 = self.test_model.create({"test_field": 2.5})
|
566
|
+
test_record_2.request_validation()
|
567
|
+
test_record_2.invalidate_model()
|
568
|
+
test_record_2.with_user(self.test_user_2.id)
|
569
|
+
notifications_no_1 = len(
|
570
|
+
self.env["mail.notification"].search(
|
571
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
572
|
+
)
|
573
|
+
)
|
574
|
+
test_record_2.validate_tier()
|
575
|
+
notifications_no_2 = len(
|
576
|
+
self.env["mail.notification"].search(
|
577
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
578
|
+
)
|
579
|
+
)
|
580
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
581
|
+
|
582
|
+
def test_21_notify_on_rejected(self):
|
583
|
+
self.test_user_2.write(
|
584
|
+
{
|
585
|
+
"groups_id": [(6, 0, self.env.ref("base.group_system").ids)],
|
586
|
+
}
|
587
|
+
)
|
588
|
+
|
589
|
+
# notify on rejected
|
590
|
+
tier_definition = self.env["tier.definition"].search([])
|
591
|
+
tier_definition.write(
|
592
|
+
{
|
593
|
+
"notify_on_create": False,
|
594
|
+
"notify_on_accepted": False,
|
595
|
+
"notify_on_rejected": True,
|
596
|
+
"notify_on_restarted": False,
|
597
|
+
"review_type": "group",
|
598
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
599
|
+
}
|
600
|
+
)
|
601
|
+
test_record_1 = self.test_model.create({"test_field": 2.5})
|
602
|
+
test_record_1.request_validation()
|
603
|
+
test_record_1.invalidate_model()
|
604
|
+
record = test_record_1.with_user(self.test_user_2.id)
|
605
|
+
notifications_no_1 = len(
|
606
|
+
self.env["mail.notification"].search(
|
607
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
608
|
+
)
|
609
|
+
)
|
610
|
+
record.reject_tier()
|
611
|
+
notifications_no_2 = len(
|
612
|
+
self.env["mail.notification"].search(
|
613
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
614
|
+
)
|
615
|
+
)
|
616
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
617
|
+
|
618
|
+
# do not notify on rejected
|
619
|
+
tier_definition.write({"notify_on_rejected": False})
|
620
|
+
test_record_2 = self.test_model.create({"test_field": 2.5})
|
621
|
+
test_record_2.request_validation()
|
622
|
+
test_record_2.invalidate_model()
|
623
|
+
test_record_2.with_user(self.test_user_2.id)
|
624
|
+
|
625
|
+
notifications_no_1 = len(
|
626
|
+
self.env["mail.notification"].search(
|
627
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
628
|
+
)
|
629
|
+
)
|
630
|
+
test_record_2.reject_tier()
|
631
|
+
notifications_no_2 = len(
|
632
|
+
self.env["mail.notification"].search(
|
633
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
634
|
+
)
|
635
|
+
)
|
636
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
637
|
+
|
638
|
+
def test_22_notify_on_restarted(self):
|
639
|
+
self.test_user_2.write(
|
640
|
+
{
|
641
|
+
"groups_id": [(6, 0, self.env.ref("base.group_system").ids)],
|
642
|
+
}
|
643
|
+
)
|
644
|
+
|
645
|
+
# notify on restarted
|
646
|
+
tier_definition = self.env["tier.definition"].search([])
|
647
|
+
tier_definition.write(
|
648
|
+
{
|
649
|
+
"notify_on_create": False,
|
650
|
+
"notify_on_accepted": False,
|
651
|
+
"notify_on_rejected": False,
|
652
|
+
"notify_on_restarted": True,
|
653
|
+
"review_type": "group",
|
654
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
655
|
+
}
|
656
|
+
)
|
657
|
+
test_record_1 = self.test_model.create({"test_field": 2.5})
|
658
|
+
test_record_1.request_validation()
|
659
|
+
test_record_1.invalidate_model()
|
660
|
+
record = test_record_1.with_user(self.test_user_2.id)
|
661
|
+
notifications_no_1 = len(
|
662
|
+
self.env["mail.notification"].search(
|
663
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
664
|
+
)
|
665
|
+
)
|
666
|
+
record.restart_validation()
|
667
|
+
notifications_no_2 = len(
|
668
|
+
self.env["mail.notification"].search(
|
669
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
670
|
+
)
|
671
|
+
)
|
672
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
673
|
+
|
674
|
+
# do not notify on restarted
|
675
|
+
tier_definition.write({"notify_on_restarted": False})
|
676
|
+
test_record_2 = self.test_model.create({"test_field": 2.5})
|
677
|
+
test_record_2.request_validation()
|
678
|
+
test_record_2.with_user(self.test_user_2.id)
|
679
|
+
notifications_no_1 = len(
|
680
|
+
self.env["mail.notification"].search(
|
681
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
682
|
+
)
|
683
|
+
)
|
684
|
+
test_record_2.restart_validation()
|
685
|
+
notifications_no_2 = len(
|
686
|
+
self.env["mail.notification"].search(
|
687
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
688
|
+
)
|
689
|
+
)
|
690
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
691
|
+
|
692
|
+
def test_23_all_notification(self):
|
693
|
+
self.test_user_2.write(
|
694
|
+
{
|
695
|
+
"groups_id": [(6, 0, self.env.ref("base.group_system").ids)],
|
696
|
+
}
|
697
|
+
)
|
698
|
+
|
699
|
+
# notify on restarted
|
700
|
+
tier_definition = self.env["tier.definition"].search([])
|
701
|
+
tier_definition.write(
|
702
|
+
{
|
703
|
+
"notify_on_create": True,
|
704
|
+
"notify_on_accepted": True,
|
705
|
+
"notify_on_rejected": True,
|
706
|
+
"notify_on_restarted": True,
|
707
|
+
"review_type": "group",
|
708
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
709
|
+
}
|
710
|
+
)
|
711
|
+
|
712
|
+
test_record = self.test_model.create({"test_field": 2.5})
|
713
|
+
|
714
|
+
# request validation
|
715
|
+
notifications_no_1 = len(
|
716
|
+
self.env["mail.notification"].search(
|
717
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
718
|
+
)
|
719
|
+
)
|
720
|
+
test_record.request_validation()
|
721
|
+
test_record.invalidate_model()
|
722
|
+
notifications_no_2 = len(
|
723
|
+
self.env["mail.notification"].search(
|
724
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
725
|
+
)
|
726
|
+
)
|
727
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
728
|
+
|
729
|
+
# accept validation
|
730
|
+
record = test_record.with_user(self.test_user_2.id)
|
731
|
+
notifications_no_1 = len(
|
732
|
+
self.env["mail.notification"].search(
|
733
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
734
|
+
)
|
735
|
+
)
|
736
|
+
record.validate_tier()
|
737
|
+
notifications_no_2 = len(
|
738
|
+
self.env["mail.notification"].search(
|
739
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
740
|
+
)
|
741
|
+
)
|
742
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
743
|
+
|
744
|
+
# restart validation
|
745
|
+
notifications_no_1 = len(
|
746
|
+
self.env["mail.notification"].search(
|
747
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
748
|
+
)
|
749
|
+
)
|
750
|
+
record.restart_validation()
|
751
|
+
notifications_no_2 = len(
|
752
|
+
self.env["mail.notification"].search(
|
753
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
754
|
+
)
|
755
|
+
)
|
756
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
757
|
+
|
758
|
+
# reject validation
|
759
|
+
record.request_validation()
|
760
|
+
notifications_no_1 = len(
|
761
|
+
self.env["mail.notification"].search(
|
762
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
763
|
+
)
|
764
|
+
)
|
765
|
+
record.reject_tier()
|
766
|
+
notifications_no_2 = len(
|
767
|
+
self.env["mail.notification"].search(
|
768
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
769
|
+
)
|
770
|
+
)
|
771
|
+
self.assertEqual(notifications_no_2, notifications_no_1 + 1)
|
772
|
+
|
773
|
+
def test_24_no_notification(self):
|
774
|
+
self.test_user_2.write(
|
775
|
+
{
|
776
|
+
"groups_id": [(6, 0, self.env.ref("base.group_system").ids)],
|
777
|
+
}
|
778
|
+
)
|
779
|
+
|
780
|
+
# notify on restarted
|
781
|
+
tier_definition = self.env["tier.definition"].search([])
|
782
|
+
tier_definition.write(
|
783
|
+
{
|
784
|
+
"notify_on_create": False,
|
785
|
+
"notify_on_accepted": False,
|
786
|
+
"notify_on_rejected": False,
|
787
|
+
"notify_on_restarted": False,
|
788
|
+
"review_type": "group",
|
789
|
+
"reviewer_group_id": self.env.ref("base.group_system").id,
|
790
|
+
}
|
791
|
+
)
|
792
|
+
|
793
|
+
test_record = self.test_model.create({"test_field": 2.5})
|
794
|
+
|
795
|
+
# request validation
|
796
|
+
notifications_no_1 = len(
|
797
|
+
self.env["mail.notification"].search(
|
798
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
799
|
+
)
|
800
|
+
)
|
801
|
+
test_record.request_validation()
|
802
|
+
test_record.invalidate_model()
|
803
|
+
notifications_no_2 = len(
|
804
|
+
self.env["mail.notification"].search(
|
805
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
806
|
+
)
|
807
|
+
)
|
808
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
809
|
+
|
810
|
+
# accept validation
|
811
|
+
record = test_record.with_user(self.test_user_2.id)
|
812
|
+
notifications_no_1 = len(
|
813
|
+
self.env["mail.notification"].search(
|
814
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
815
|
+
)
|
816
|
+
)
|
817
|
+
record.validate_tier()
|
818
|
+
notifications_no_2 = len(
|
819
|
+
self.env["mail.notification"].search(
|
820
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
821
|
+
)
|
822
|
+
)
|
823
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
824
|
+
|
825
|
+
# restart validation
|
826
|
+
notifications_no_1 = len(
|
827
|
+
self.env["mail.notification"].search(
|
828
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
829
|
+
)
|
830
|
+
)
|
831
|
+
record.restart_validation()
|
832
|
+
notifications_no_2 = len(
|
833
|
+
self.env["mail.notification"].search(
|
834
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
835
|
+
)
|
836
|
+
)
|
837
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
838
|
+
|
839
|
+
# reject validation
|
840
|
+
record.request_validation()
|
841
|
+
notifications_no_1 = len(
|
842
|
+
self.env["mail.notification"].search(
|
843
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
844
|
+
)
|
845
|
+
)
|
846
|
+
record.reject_tier()
|
847
|
+
notifications_no_2 = len(
|
848
|
+
self.env["mail.notification"].search(
|
849
|
+
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
|
850
|
+
)
|
851
|
+
)
|
852
|
+
self.assertEqual(notifications_no_2, notifications_no_1)
|
853
|
+
|
439
854
|
|
440
855
|
@tagged("at_install")
|
441
856
|
class TierTierValidationView(CommonTierValidation):
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# Copyright 2018-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
|
-
from odoo import fields, models
|
4
|
+
from odoo import api, fields, models
|
5
5
|
|
6
6
|
|
7
7
|
class TierValidationTester(models.Model):
|
8
8
|
_name = "tier.validation.tester"
|
9
9
|
_description = "Tier Validation Tester"
|
10
|
-
_inherit = ["tier.validation"]
|
10
|
+
_inherit = ["tier.validation", "mail.thread"]
|
11
11
|
_tier_validation_manual_config = True
|
12
12
|
|
13
13
|
state = fields.Selection(
|
@@ -44,3 +44,14 @@ class TierValidationTester2(models.Model):
|
|
44
44
|
|
45
45
|
def action_confirm(self):
|
46
46
|
self.write({"state": "confirmed"})
|
47
|
+
|
48
|
+
|
49
|
+
class TierDefinition(models.Model):
|
50
|
+
_inherit = "tier.definition"
|
51
|
+
|
52
|
+
@api.model
|
53
|
+
def _get_tier_validation_model_names(self):
|
54
|
+
res = super()._get_tier_validation_model_names()
|
55
|
+
res.append("tier.validation.tester")
|
56
|
+
res.append("tier.validation.tester2")
|
57
|
+
return res
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<odoo>
|
3
3
|
<!-- Uncomment me when related modules are migrated-->
|
4
4
|
|
5
|
-
|
5
|
+
<record id="res_config_settings_view_form_budget" model="ir.ui.view">
|
6
6
|
<field name="name">res.config.settings.view.form.budget</field>
|
7
7
|
<field name="model">res.config.settings</field>
|
8
8
|
<field name="priority" eval="25" />
|
@@ -29,7 +29,7 @@
|
|
29
29
|
</div>
|
30
30
|
</div>
|
31
31
|
</div>
|
32
|
-
<div
|
32
|
+
<!-- <div
|
33
33
|
class="col-12 col-lg-6 o_setting_box"
|
34
34
|
id="module_base_tier_validation_server_action"
|
35
35
|
>
|
@@ -46,7 +46,7 @@
|
|
46
46
|
Option to trigger server actions on completion of tier reviews
|
47
47
|
</div>
|
48
48
|
</div>
|
49
|
-
</div>
|
49
|
+
</div> -->
|
50
50
|
<div
|
51
51
|
class="col-12 col-lg-6 o_setting_box"
|
52
52
|
id="module_base_tier_validation_forward"
|
@@ -61,7 +61,7 @@
|
|
61
61
|
</div>
|
62
62
|
</div>
|
63
63
|
</div>
|
64
|
-
<div
|
64
|
+
<!-- <div
|
65
65
|
class="col-12 col-lg-6 o_setting_box"
|
66
66
|
id="module_base_tier_validation_report"
|
67
67
|
>
|
@@ -74,10 +74,10 @@
|
|
74
74
|
More reports about tier validations, i.e., summary of all my reviews
|
75
75
|
</div>
|
76
76
|
</div>
|
77
|
-
</div>
|
77
|
+
</div> -->
|
78
78
|
</div>
|
79
79
|
</div>
|
80
80
|
</xpath>
|
81
81
|
</field>
|
82
|
-
</record>
|
82
|
+
</record>
|
83
83
|
</odoo>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<div class="oe_button_box" name="button_box" />
|
29
29
|
<widget
|
30
30
|
name="web_ribbon"
|
31
|
-
|
31
|
+
title="Archived"
|
32
32
|
bg_color="bg-danger"
|
33
33
|
attrs="{'invisible': [('active', '=', True)]}"
|
34
34
|
/>
|
@@ -71,6 +71,16 @@
|
|
71
71
|
/>
|
72
72
|
<field name="sequence" />
|
73
73
|
<field name="approve_sequence" />
|
74
|
+
<label for="approve_sequence_bypass" invisible="1" />
|
75
|
+
<div
|
76
|
+
name="approve_sequence_bypass_div"
|
77
|
+
class="o_row"
|
78
|
+
attrs="{'invisible': [('approve_sequence', '=', False)]}"
|
79
|
+
>
|
80
|
+
<field name="approve_sequence_bypass" />
|
81
|
+
<span
|
82
|
+
>Bypassed, if previous tier was validated by same reviewer</span>
|
83
|
+
</div>
|
74
84
|
</group>
|
75
85
|
</group>
|
76
86
|
<notebook>
|
@@ -89,6 +99,9 @@
|
|
89
99
|
<group name="more_option">
|
90
100
|
<group name="notify">
|
91
101
|
<field name="notify_on_create" />
|
102
|
+
<field name="notify_on_accepted" />
|
103
|
+
<field name="notify_on_rejected" />
|
104
|
+
<field name="notify_on_restarted" />
|
92
105
|
<field name="has_comment" />
|
93
106
|
</group>
|
94
107
|
</group>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: odoo-addon-base-tier-validation
|
3
|
-
Version: 16.0.1.
|
3
|
+
Version: 16.0.1.5.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)
|
@@ -13,16 +13,19 @@ Classifier: Framework :: Odoo :: 16.0
|
|
13
13
|
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
14
14
|
Classifier: Development Status :: 6 - Mature
|
15
15
|
Requires-Python: >=3.10
|
16
|
-
Requires-Dist: odoo
|
16
|
+
Requires-Dist: odoo <16.1dev,>=16.0a
|
17
17
|
|
18
18
|
====================
|
19
19
|
Base Tier Validation
|
20
20
|
====================
|
21
21
|
|
22
|
-
..
|
22
|
+
..
|
23
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
23
24
|
!! This file is generated by oca-gen-addon-readme !!
|
24
25
|
!! changes will be overwritten. !!
|
25
26
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
27
|
+
!! source digest: sha256:1b69f3df9b2f479b32acf8c146bb4837086a025d8914c2f773db9f6c4c9eab7a
|
28
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
26
29
|
|
27
30
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
|
28
31
|
:target: https://odoo-community.org/page/development-status
|
@@ -36,11 +39,11 @@ Base Tier Validation
|
|
36
39
|
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
37
40
|
:target: https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-base_tier_validation
|
38
41
|
:alt: Translate me on Weblate
|
39
|
-
.. |badge5| image:: https://img.shields.io/badge/
|
40
|
-
:target: https://
|
41
|
-
:alt: Try me on
|
42
|
+
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
43
|
+
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=16.0
|
44
|
+
:alt: Try me on Runboat
|
42
45
|
|
43
|
-
|badge1| |badge2| |badge3| |badge4| |badge5|
|
46
|
+
|badge1| |badge2| |badge3| |badge4| |badge5|
|
44
47
|
|
45
48
|
Validating some operations is a common need across different areas in a company
|
46
49
|
and sometimes it also involves several people and stages in the process. With
|
@@ -200,7 +203,7 @@ Bug Tracker
|
|
200
203
|
|
201
204
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-ux/issues>`_.
|
202
205
|
In case of trouble, please check there if your issue has already been reported.
|
203
|
-
If you spotted it first, help us
|
206
|
+
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
204
207
|
`feedback <https://github.com/OCA/server-ux/issues/new?body=module:%20base_tier_validation%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
205
208
|
|
206
209
|
Do not contact contributors directly about support or help with technical issues.
|
@@ -223,6 +226,8 @@ Contributors
|
|
223
226
|
* Pedro Gonzalez <pedro.gonzalez@pesol.es>
|
224
227
|
* Kitti U. <kittiu@ecosoft.co.th>
|
225
228
|
* Saran Lim. <saranl@ecosoft.co.th>
|
229
|
+
* Evan Soh <evan.soh@omnisoftsolution.com>
|
230
|
+
* Manuel Regidor <manuel.regidor@sygel.es>
|
226
231
|
|
227
232
|
Maintainers
|
228
233
|
~~~~~~~~~~~
|