From 50e72d9edd50a70bd35e59254c66b4b63693a036 Mon Sep 17 00:00:00 2001 From: Kitti U Date: Tue, 9 Feb 2021 21:33:21 +0700 Subject: [PATCH 01/25] [14.0][ADD] base_tier_validation_correction --- base_tier_validation_correction/__init__.py | 4 + .../__manifest__.py | 25 + .../data/cron_data.xml | 13 + .../data/mail_data.xml | 13 + .../models/__init__.py | 4 + .../models/tier_correction.py | 306 ++++++++++++ .../models/tier_validation.py | 44 ++ .../readme/CONFIGURE.rst | 1 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 10 + .../readme/USAGE.rst | 37 ++ .../security/correction_groups.xml | 15 + .../security/ir.model.access.csv | 6 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 440 ++++++++++++++++++ .../templates/tier_validation_templates.xml | 18 + .../tests/__init__.py | 3 + .../tests/test_tier_validation.py | 135 ++++++ .../views/tier_correction_view.xml | 253 ++++++++++ .../wizards/__init__.py | 3 + .../wizards/affected_tier_reviews.py | 18 + .../wizards/affected_tier_reviews.xml | 25 + 22 files changed, 1374 insertions(+) create mode 100644 base_tier_validation_correction/__init__.py create mode 100644 base_tier_validation_correction/__manifest__.py create mode 100644 base_tier_validation_correction/data/cron_data.xml create mode 100644 base_tier_validation_correction/data/mail_data.xml create mode 100644 base_tier_validation_correction/models/__init__.py create mode 100644 base_tier_validation_correction/models/tier_correction.py create mode 100644 base_tier_validation_correction/models/tier_validation.py create mode 100644 base_tier_validation_correction/readme/CONFIGURE.rst create mode 100644 base_tier_validation_correction/readme/CONTRIBUTORS.rst create mode 100644 base_tier_validation_correction/readme/DESCRIPTION.rst create mode 100644 base_tier_validation_correction/readme/USAGE.rst create mode 100644 base_tier_validation_correction/security/correction_groups.xml create mode 100644 base_tier_validation_correction/security/ir.model.access.csv create mode 100644 base_tier_validation_correction/static/description/icon.png create mode 100644 base_tier_validation_correction/static/description/index.html create mode 100644 base_tier_validation_correction/templates/tier_validation_templates.xml create mode 100644 base_tier_validation_correction/tests/__init__.py create mode 100644 base_tier_validation_correction/tests/test_tier_validation.py create mode 100644 base_tier_validation_correction/views/tier_correction_view.xml create mode 100644 base_tier_validation_correction/wizards/__init__.py create mode 100644 base_tier_validation_correction/wizards/affected_tier_reviews.py create mode 100644 base_tier_validation_correction/wizards/affected_tier_reviews.xml diff --git a/base_tier_validation_correction/__init__.py b/base_tier_validation_correction/__init__.py new file mode 100644 index 000000000..a7ec2ad35 --- /dev/null +++ b/base_tier_validation_correction/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models +from . import wizards diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py new file mode 100644 index 000000000..28027a9db --- /dev/null +++ b/base_tier_validation_correction/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Base Tier Validation Correction", + "summary": "Correct tier.review data after it has been created.", + "version": "14.0.1.0.0", + "category": "Tools", + "website": "https://github.com/OCA/server-ux", + "author": "Ecosoft,Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["base_tier_validation"], + "data": [ + "security/correction_groups.xml", + "security/ir.model.access.csv", + "data/mail_data.xml", + "data/cron_data.xml", + "templates/tier_validation_templates.xml", + "wizards/affected_tier_reviews.xml", + "views/tier_correction_view.xml", + ], + "development_status": "Alpha", + "maintainers": ["kittiu"], + "application": False, + "installable": True, +} diff --git a/base_tier_validation_correction/data/cron_data.xml b/base_tier_validation_correction/data/cron_data.xml new file mode 100644 index 000000000..5c915aedb --- /dev/null +++ b/base_tier_validation_correction/data/cron_data.xml @@ -0,0 +1,13 @@ + + + + Tier Correction Scheduler + 1 + hours + -1 + + + model._tier_correction_auto_run() + code + + diff --git a/base_tier_validation_correction/data/mail_data.xml b/base_tier_validation_correction/data/mail_data.xml new file mode 100644 index 000000000..9a28197e4 --- /dev/null +++ b/base_tier_validation_correction/data/mail_data.xml @@ -0,0 +1,13 @@ + + + + Tier Validation Correction + + + + + diff --git a/base_tier_validation_correction/models/__init__.py b/base_tier_validation_correction/models/__init__.py new file mode 100644 index 000000000..1d8d8d1e2 --- /dev/null +++ b/base_tier_validation_correction/models/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import tier_correction +from . import tier_validation diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py new file mode 100644 index 000000000..c61003e0f --- /dev/null +++ b/base_tier_validation_correction/models/tier_correction.py @@ -0,0 +1,306 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class TierCorrection(models.Model): + _name = "tier.correction" + _inherit = ["mail.thread", "mail.activity.mixin"] + _description = "Tier Review Correction" + _order = "id desc" + + name = fields.Char( + string="Description", + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + ) + model_id = fields.Many2one( + comodel_name="ir.model", + string="On Model", + domain=lambda self: [ + ( + "model", + "in", + self.env["tier.definition"]._get_tier_validation_model_names(), + ) + ], + readonly=True, + states={"draft": [("readonly", False)]}, + ) + model = fields.Char(related="model_id.model", index=True, store=True) + correction_type = fields.Selection( + selection=[ + ("reviewer", "Reassign Reviewer(s)"), + ], + string="Correction Type", + default="reviewer", + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + ) + search_name = fields.Char( + string="Name Search", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + old_reviewer_ids = fields.Many2many( + comodel_name="res.users", + relation="tier_correction_old_reviewer_rel", + string="Original Reviewer(s)", + readonly=True, + states={"draft": [("readonly", False)]}, + help="Find documents with tier reviews matching some reviewers", + ) + new_reviewer_ids = fields.Many2many( + comodel_name="res.users", + relation="tier_correction_new_reviewer_rel", + string="Reassign Reviewer(s)", + readonly=True, + states={"draft": [("readonly", False)]}, + help="Reassign these reviewers to the tier reviews of the found document", + ) + item_ids = fields.One2many( + comodel_name="tier.correction.item", + inverse_name="correction_id", + readonly=True, + states={"draft": [("readonly", False)], "prepare": [("readonly", False)]}, + ) + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("prepare", "Preparing"), + ("done", "Corrected"), + ("cancel", "Cancelled"), + ("revert", "Reverted"), + ], + string="Status", + readonly=True, + copy=False, + index=True, + tracking=1, + default="draft", + ) + reference = fields.Char( + string="Affected Documents", + compute="_compute_reference", + store=True, + ) + date_schedule_correct = fields.Datetime( + string="Scheduled Correction Date", + readonly=True, + states={"draft": [("readonly", False)], "prepare": [("readonly", False)]}, + copy=False, + ) + date_actual_correct = fields.Datetime( + string="Actual Correction Date", + readonly=True, + copy=False, + ) + date_schedule_revert = fields.Datetime( + string="Scheduled Revert Date", + readonly=True, + states={ + "draft": [("readonly", False)], + "prepare": [("readonly", False)], + "done": [("readonly", False)], + }, + copy=False, + ) + date_actual_revert = fields.Datetime( + string="Actual Revert Date", + readonly=True, + copy=False, + ) + + @api.constrains("date_schedule_correct", "date_schedule_revert") + def _check_date(self): + """ Correct Date < Revert Date """ + for rec in self: + now = fields.Datetime.now() + correct = rec.date_schedule_correct or now + revert = rec.date_schedule_revert or correct or now + if not (correct <= revert): + raise ValidationError(_("Revert Date should be after Correct Date")) + + def search_document(self): + for rec in self: + rec.item_ids.unlink() + if rec.correction_type == "reviewer": + doc_domain = [("review_ids.status", "=", "pending")] + review_domain = [("status", "=", "pending")] + if rec.search_name: + doc_ids = self.env[rec.model].name_search(rec.search_name) + doc_domain += [("id", "in", list(dict(doc_ids).keys()))] + if rec.old_reviewer_ids: + doc_domain += [ + ("review_ids.reviewer_ids", "in", rec.old_reviewer_ids.ids) + ] + review_domain += [("reviewer_ids", "in", rec.old_reviewer_ids.ids)] + items = [] + for doc in self.env[rec.model].search(doc_domain): + review_ids = doc.review_ids.filtered_domain(review_domain).ids + items.append( + ( + 0, + 0, + { + "res_model": doc._name, + "res_id": doc.id, + "resource_ref": "{},{}".format(doc._name, doc.id), + "reference": doc.display_name, + "new_reviewer_ids": [(6, 0, rec.new_reviewer_ids.ids)], + "review_ids": [(6, 0, review_ids)], + }, + ) + ) + rec.write({"item_ids": items}) + + @api.depends("item_ids") + def _compute_reference(self): + for rec in self: + rec.reference = ", ".join( + rec.item_ids.filtered("reference").mapped("reference") + ) + + def do_correct(self): + for rec in self: + if rec.state != "prepare": + raise ValidationError( + _("Correction is allowed on state = 'prepare' only") + ) + if rec.correction_type == "reviewer": + rec.item_ids.correct() + self.write({"date_actual_correct": fields.Datetime.now()}) + + def do_revert(self): + for rec in self: + if rec.state != "done": + raise ValidationError(_("Correction is allowed on state = 'done' only")) + if rec.correction_type == "reviewer": + rec.item_ids.revert() + self.write({"date_actual_revert": fields.Datetime.now()}) + + def action_draft(self): + self.mapped("item_ids").unlink() + self.write({"state": "draft"}) + + def action_prepare(self): + self.search_document() + self.write({"state": "prepare"}) + + def action_done(self): + self.do_correct() + self.write({"state": "done"}) + + def action_cancel(self): + self.write({"state": "cancel"}) + + def action_revert(self): + self.do_revert() + self.write({"state": "revert"}) + + def view_scheduled_action(self): + self.ensure_one() + action = self.env.ref("base.ir_cron_act") + result = action.read()[0] + cron = self.env.ref("base_tier_validation_correction.tier_correction_scheduler") + result["domain"] = [("id", "in", cron.id)] + return result + + def _tier_correction_auto_run(self): + # To correct + to_correct = self.search( + [ + ("state", "=", "prepare"), + ("date_schedule_correct", "!=", False), + ("date_schedule_correct", "<=", fields.Datetime.now()), + ] + ) + to_correct.action_done() + _logger.info("Tier Correction - Correction: %s " % to_correct) + # To revert + to_revert = self.search( + [ + ("state", "=", "done"), + ("date_schedule_revert", "!=", False), + ("date_schedule_revert", "<=", fields.Datetime.now()), + ] + ) + to_revert.action_revert() + _logger.info("Tier Correction - Reversion: %s " % to_revert) + + +class TierCorrectionItem(models.Model): + _name = "tier.correction.item" + _description = "Tier Correction Detail" + + correction_id = fields.Many2one( + comodel_name="tier.correction", + index=True, + ) + res_model = fields.Char(readonly=True) + res_id = fields.Integer(readonly=True) + resource_ref = fields.Reference( + string="Resource", + selection=lambda self: [ + (model.model, model.name) for model in self.env["ir.model"].search([]) + ], + readonly=True, + ) + reference = fields.Char(readonly=True) + new_reviewer_ids = fields.Many2many( + comodel_name="res.users", + relation="tier_correction_item_new_reviewer_rel", + string="New Reviewers", + help="These reviewers will overwrite the existing reviewer_ids in tier.review", + ) + review_ids = fields.Many2many( + comodel_name="tier.review", + string="Affected Tier Reviews", + help="Tier reivews that will be affected by this correction.", + ) + + def _notify_reviewer_change(self, ttype="correct"): + self.ensure_one() + post = "message_post" + if hasattr(self.resource_ref, post): + tier_reviews = self.review_ids + reviews = ", ".join(tier_reviews.filtered("name").mapped("name")) + reviewers = ", ".join( + tier_reviews.reviewer_ids.filtered("name").mapped("name") + ) + message = _("The Correction '%s', corrrected reviewers on '%s' to '%s'") % ( + self.correction_id.name, + reviews, + reviewers, + ) + if ttype == "revert": + message = _( + "The Correction '%s', reverted reviewers on '%s' back to '%s'" + ) % (self.correction_id.name, reviews, reviewers) + getattr(self.resource_ref, post)( + subtype_xmlid=( + "base_tier_validation_correction.mt_tier_validation_correction" + ), + body=message, + ) + + def correct(self): + for item in self: + # Only pending reviews will gets updated + item.review_ids.filtered(lambda l: l.status == "pending").write( + {"reviewer_ids": [(6, 0, item.new_reviewer_ids.ids)]} + ) + item._notify_reviewer_change("correct") + + def revert(self): + for item in self: + for review in item.review_ids.filtered(lambda l: l.status == "pending"): + review.reviewer_ids = review._get_reviewers() + item._notify_reviewer_change("revert") diff --git a/base_tier_validation_correction/models/tier_validation.py b/base_tier_validation_correction/models/tier_validation.py new file mode 100644 index 000000000..b309c36b8 --- /dev/null +++ b/base_tier_validation_correction/models/tier_validation.py @@ -0,0 +1,44 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models +from odoo.tools.safe_eval import safe_eval + + +class TierValidation(models.AbstractModel): + _inherit = "tier.validation" + + def view_tier_correction(self): + self.ensure_one() + # Caller document + active_model = self.env.context.get("active_model") + active_id = self.env.context.get("active_id") + res_model = self.env["ir.model"].search([("model", "=", active_model)]) + doc = self.env[active_model].browse(active_id) + # Prepare to redirect to Tier Correction + action = self.env.ref("base_tier_validation_correction.tier_correction_action") + result = action.sudo().read()[0] + # Setup default values + ctx = result.get("context", {}) + if ctx: + ctx = safe_eval(ctx) + ctx.update( + { + "default_name": "%s ..." % doc.display_name, + "default_model_id": res_model.id, + "default_search_name": doc.display_name, + "default_correction_type": "reviewer", + } + ) + result["context"] = ctx + items = self.env["tier.correction.item"].search( + [("res_model", "=", active_model), ("res_id", "=", active_id)] + ) + if len(items) > 0: # Already has corrections, show them. + result["domain"] = [("id", "in", items.mapped("correction_id").ids)] + else: # No correction, create one + res = self.env.ref( + "base_tier_validation_correction.tier_correction_view_form", False + ) + result["views"] = [(res and res.id or False, "form")] + return result diff --git a/base_tier_validation_correction/readme/CONFIGURE.rst b/base_tier_validation_correction/readme/CONFIGURE.rst new file mode 100644 index 000000000..dff6aad7a --- /dev/null +++ b/base_tier_validation_correction/readme/CONFIGURE.rst @@ -0,0 +1 @@ +Person that can use the tier review correction, must has access right to group *Tier Review Correction* diff --git a/base_tier_validation_correction/readme/CONTRIBUTORS.rst b/base_tier_validation_correction/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..6ce956d96 --- /dev/null +++ b/base_tier_validation_correction/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Kitti U. diff --git a/base_tier_validation_correction/readme/DESCRIPTION.rst b/base_tier_validation_correction/readme/DESCRIPTION.rst new file mode 100644 index 000000000..9429064f1 --- /dev/null +++ b/base_tier_validation_correction/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ +This module provide a new operation to correct the information in tier.review for any document under tier validation. + +For example, a document started validation, a tier review is assigned to Mr. Smith. + +However, since Mr. Smith has urgent business oversea for a few days, +all document need to get approved by Mr. John as person in charge. + +This module allow user with Tier Review Correction role to change the reviewer to Mr. John. + +Note: Currently, only correction type available is to reassign the reviewer, but it is possible to add in the future. diff --git a/base_tier_validation_correction/readme/USAGE.rst b/base_tier_validation_correction/readme/USAGE.rst new file mode 100644 index 000000000..73052fcf6 --- /dev/null +++ b/base_tier_validation_correction/readme/USAGE.rst @@ -0,0 +1,37 @@ +To create/edit Tier Review Correction + +* Login as user with Tier Review Correction role +* Go to menu Settings > Technical > Tier Validation > Tier Review Correction +* Create a new tier correction, by selecting, + + * Correction Type, in this case, Reassign Reviewer(s) + * Document Model, i.e., Purchase order +* Find documents with pending reviews by, + + * Reviewer(s) + * Name Search +* Then set default value to change, in this case, + + * New Reviewer(s) +* Click button "Prepare", if any document matched, it should list in Correction Detail table. +* For each correction line, user can still change the affected tier reviews, and new reviewers. +* Click button "Make Correction" to finalize the operation. +* As an option, click on "Revert Back" to set back to original status. + + * For case Reassign Reviewer(s), system to get the original reviewers from tier definition as set it back. + +Quick access, from a working document, to create/view Tier Review Correction + +* As user with Tier Review Correction role +* On any document, i.e., Purchase Order, with validation already started. +* On the yellow banner (pending state), click on "Change Reviewer" link on its right side. + + * If this document has no Correction yet, it will create new. + * If the document already has some Corrections, it will show those corrections. + +To run the Tier Review Correction by scheduled job + +* As user with Tier Review Correction role +* On any Tier Review Correction, open tab "Scheduled Action" +* Setup the datetime to Scheduled Correct and Scheduled Revert. By default, + scheduled action "Tier Correction Scheduler" will run every 1 hour. diff --git a/base_tier_validation_correction/security/correction_groups.xml b/base_tier_validation_correction/security/correction_groups.xml new file mode 100644 index 000000000..679e1fb58 --- /dev/null +++ b/base_tier_validation_correction/security/correction_groups.xml @@ -0,0 +1,15 @@ + + + + + + Tier Review Correction + + + + + + diff --git a/base_tier_validation_correction/security/ir.model.access.csv b/base_tier_validation_correction/security/ir.model.access.csv new file mode 100644 index 000000000..10bbc27a2 --- /dev/null +++ b/base_tier_validation_correction/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_tier_correction_admin,access.tier.correction.item.admin,model_tier_correction,group_tier_correction,1,1,1,1 +access_tier_correction_item_admin,access.tier.correction.item.admin,model_tier_correction_item,group_tier_correction,1,1,1,1 +access_tier_correction_user,access.tier.correction.item.user,model_tier_correction,,1,0,0,0 +access_tier_correction_item_user,access.tier.correction.item.user,model_tier_correction_item,,1,0,0,0 +access_affected_tier_reviews,access_affected_tier_reviews,model_affected_tier_reviews,,1,0,0,0 diff --git a/base_tier_validation_correction/static/description/icon.png b/base_tier_validation_correction/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html new file mode 100644 index 000000000..7a11af54a --- /dev/null +++ b/base_tier_validation_correction/static/description/index.html @@ -0,0 +1,440 @@ + + + + + + +Base Tier Validation Forward + + + +
+

Base Tier Validation Forward

+ + +

Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runbot

+

This module add an advance option to base_tier_validation.

+
    +
  • To allow “Forward” the tier to different user.
  • +
+

Sample use case:

+

A user is appointed to approve a tire, but he/she don’t want to make decision +for some reason, and want to pass/forward the decision to another person.

+

User can then click on Forward instead of Approve. A new tier with minor sequence will be +created on the reviewer table, and new user will be able to make approval decision.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Configuration

+

In any tier definition, check “Allow Forward” to enable this feature.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Ecosoft
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

kittiu

+

This module is part of the OCA/server-ux project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/base_tier_validation_correction/templates/tier_validation_templates.xml b/base_tier_validation_correction/templates/tier_validation_templates.xml new file mode 100644 index 000000000..6f81a1bf4 --- /dev/null +++ b/base_tier_validation_correction/templates/tier_validation_templates.xml @@ -0,0 +1,18 @@ + + + diff --git a/base_tier_validation_correction/tests/__init__.py b/base_tier_validation_correction/tests/__init__.py new file mode 100644 index 000000000..b439a531d --- /dev/null +++ b/base_tier_validation_correction/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_tier_validation diff --git a/base_tier_validation_correction/tests/test_tier_validation.py b/base_tier_validation_correction/tests/test_tier_validation.py new file mode 100644 index 000000000..40b4fcf63 --- /dev/null +++ b/base_tier_validation_correction/tests/test_tier_validation.py @@ -0,0 +1,135 @@ +# Copyright 2018 ForgeFlow S.L. +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). +from datetime import timedelta + +from odoo import fields +from odoo.exceptions import ValidationError +from odoo.tests.common import tagged + +from odoo.addons.base_tier_validation.tests.common import CommonTierValidation + + +@tagged("post_install", "-at_install") +class TierTierValidation(CommonTierValidation): + def test_01_tier_correction(self): + """With the document in validation, + - User click on Change Reivewer to creat new correction + - Change the reviewer to user 2, test that user 2 need_validation + - Revert to user 1, test that now user 1 need validation + - Click on Change Review link from the document again, then view the corrections + """ + # User 2, request validation + doc_user2 = self.test_record.with_user(self.test_user_2.id) + doc_user2.request_validation() + self.assertFalse(doc_user2.can_review) + # User 1, is the reviewer as specified in the tier.definition + doc_user1 = self.test_record.with_user(self.test_user_1.id) + doc_user1.invalidate_cache() + self.assertTrue(doc_user1.can_review) + # Change Reviewer from user 1 -> user 2 + ctx = {"active_id": doc_user1.id, "active_model": doc_user1._name} + res = doc_user1.with_context(ctx).view_tier_correction() + self.assertFalse(res["domain"]) # No existing correction, create new + correction = self.env["tier.correction"].create( + { + "name": res["context"].get("default_name"), + "search_name": res["context"].get("default_search_name"), + "model_id": res["context"].get("default_model_id"), + "correction_type": res["context"].get("default_correction_type"), + "new_reviewer_ids": [self.test_user_2.id], + "old_reviewer_ids": [self.test_user_1.id], + } + ) + # Only on state = 'prepare', to allow correction + with self.assertRaises(ValidationError): + correction.do_correct() + # Test cancel -> draft + correction.action_cancel() + self.assertEqual(correction.state, "cancel") + correction.action_draft() + self.assertEqual(correction.state, "draft") + # Test view scheduled action + action = correction.view_scheduled_action() + self.assertEqual(action["name"], "Scheduled Actions") + # Continue + correction.action_prepare() + self.assertEqual(correction.state, "prepare") + self.assertTrue(correction.reference) + with self.assertRaises(ValidationError): + correction.do_revert() + item = correction.item_ids[0] + self.assertEqual(item.resource_ref, self.test_record) + self.assertEqual(item.new_reviewer_ids, correction.new_reviewer_ids) + # View affected tier.reviews + AffectedReview = self.env["affected.tier.reviews"] + reviews = AffectedReview.with_context(active_id=item.id)._default_review_ids() + self.assertTrue(reviews) + # Make correction, now user 2 can review + correction.action_done() + doc_user2.invalidate_cache() + self.assertTrue(doc_user2.can_review) + doc_user1.invalidate_cache() + self.assertFalse(doc_user1.can_review) + # Make reversion, now user 1 can reivew + correction.action_revert() + doc_user1.invalidate_cache() + self.assertTrue(doc_user1.can_review) + doc_user2.invalidate_cache() + self.assertFalse(doc_user2.can_review) + # From the document, view tier correction once again + res = doc_user1.with_context(ctx).view_tier_correction() + self.assertEqual(res["domain"][0][2], [correction.id]) + + def test_01_tier_correction_by_scheduler(self): + """With the document in validation, + - User click on Change Reivewer to creat new correction + - Setup Scheduled Correction Date and Scheduled Revert, test date constraints + - Run scheduler which change reviewer to user 2, test user 2 need_validation + - Run scheduler which revert to user 1, test user 1 need validation + """ + # User 2, request validation + doc_user2 = self.test_record.with_user(self.test_user_2.id) + doc_user2.request_validation() + self.assertFalse(doc_user2.can_review) + # User 1, is the reviewer as specified in the tier.definition + doc_user1 = self.test_record.with_user(self.test_user_1.id) + doc_user1.invalidate_cache() + self.assertTrue(doc_user1.can_review) + # Change Reviewer from user 1 -> user 2 + ctx = {"active_id": doc_user1.id, "active_model": doc_user1._name} + res = doc_user1.with_context(ctx).view_tier_correction() + self.assertFalse(res["domain"]) # No existing correction, create new + correction = self.env["tier.correction"].create( + { + "name": res["context"].get("default_name"), + "search_name": res["context"].get("default_search_name"), + "model_id": res["context"].get("default_model_id"), + "correction_type": res["context"].get("default_correction_type"), + "new_reviewer_ids": [self.test_user_2.id], + } + ) + # Run Schedulder, to correct + correction.date_schedule_correct = fields.Datetime.now() + scheduler = self.env.ref( + "base_tier_validation_correction.tier_correction_scheduler" + ) + correction.action_prepare() + self.assertEqual(correction.state, "prepare") + scheduler.method_direct_trigger() + doc_user2.invalidate_cache() + self.assertTrue(doc_user2.can_review) + doc_user1.invalidate_cache() + self.assertFalse(doc_user1.can_review) + # Run Schedulder, to revert + with self.assertRaises(ValidationError): + correction.date_schedule_revert = fields.Datetime.now() - timedelta(days=1) + correction.date_schedule_revert = fields.Datetime.now() + scheduler = self.env.ref( + "base_tier_validation_correction.tier_correction_scheduler" + ) + self.assertEqual(correction.state, "done") + scheduler.method_direct_trigger() + doc_user2.invalidate_cache() + self.assertTrue(doc_user1.can_review) + doc_user1.invalidate_cache() + self.assertFalse(doc_user2.can_review) diff --git a/base_tier_validation_correction/views/tier_correction_view.xml b/base_tier_validation_correction/views/tier_correction_view.xml new file mode 100644 index 000000000..b24708f12 --- /dev/null +++ b/base_tier_validation_correction/views/tier_correction_view.xml @@ -0,0 +1,253 @@ + + + + + tier.correction.tree + tier.correction + + + + + + + + + + + tier.correction.form + tier.correction + +
+
+
+ +
+
+ Name +

+ +

+
+ + + + + + + + + + + +

+ This is optional search criteria to find matched document into Correction Details. + Only document with pending reviews will be listed. +

+ + +
+ +

+ Default new reviewers to be assigned to the correction. This value can be overwritten in + Correction Detail. +

+ +
+
+ + + + + + + +
+ + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + tier.correction.search + tier.correction + + + + + + + + + + + + + + + Tier Review Correction + ir.actions.act_window + tier.correction + tree,form + {} + + + +
diff --git a/base_tier_validation_correction/wizards/__init__.py b/base_tier_validation_correction/wizards/__init__.py new file mode 100644 index 000000000..86bed5c2b --- /dev/null +++ b/base_tier_validation_correction/wizards/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import affected_tier_reviews diff --git a/base_tier_validation_correction/wizards/affected_tier_reviews.py b/base_tier_validation_correction/wizards/affected_tier_reviews.py new file mode 100644 index 000000000..d1b9f4c7c --- /dev/null +++ b/base_tier_validation_correction/wizards/affected_tier_reviews.py @@ -0,0 +1,18 @@ +# Copyright 2020 Ecosoft - (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class AffectedTierReviews(models.TransientModel): + _name = "affected.tier.reviews" + _description = "Show Affected Tier Reviews" + + review_ids = fields.Many2many( + comodel_name="tier.review", + default=lambda self: self._default_review_ids(), + ) + + def _default_review_ids(self): + res_id = self.env.context.get("active_id") + correction_item = self.env["tier.correction.item"].browse(res_id) + return correction_item.review_ids.ids diff --git a/base_tier_validation_correction/wizards/affected_tier_reviews.xml b/base_tier_validation_correction/wizards/affected_tier_reviews.xml new file mode 100644 index 000000000..9267ec2c5 --- /dev/null +++ b/base_tier_validation_correction/wizards/affected_tier_reviews.xml @@ -0,0 +1,25 @@ + + + + + affected.tier.reviews.form + affected.tier.reviews + +
+ + + +
+
+
+
+
+ + Affected Tier Reviews + affected.tier.reviews + form + new + +
From ef7e2f30f1416ba6ab72fd35ad2e53db19236444 Mon Sep 17 00:00:00 2001 From: Saran440 Date: Wed, 20 Apr 2022 15:43:02 +0700 Subject: [PATCH 02/25] [FIX] permission to post message --- base_tier_validation_correction/README.rst | 141 ++++ .../i18n/base_tier_validation_correction.pot | 614 ++++++++++++++++++ .../models/tier_correction.py | 4 +- .../static/description/index.html | 96 ++- 4 files changed, 827 insertions(+), 28 deletions(-) create mode 100644 base_tier_validation_correction/README.rst create mode 100644 base_tier_validation_correction/i18n/base_tier_validation_correction.pot diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst new file mode 100644 index 000000000..f57ef7aab --- /dev/null +++ b/base_tier_validation_correction/README.rst @@ -0,0 +1,141 @@ +=============================== +Base Tier Validation Correction +=============================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github + :target: https://github.com/OCA/server-ux/tree/14.0/base_tier_validation_correction + :alt: OCA/server-ux +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-ux-14-0/server-ux-14-0-base_tier_validation_correction + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/250/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provide a new operation to correct the information in tier.review for any document under tier validation. + +For example, a document started validation, a tier review is assigned to Mr. Smith. + +However, since Mr. Smith has urgent business oversea for a few days, +all document need to get approved by Mr. John as person in charge. + +This module allow user with Tier Review Correction role to change the reviewer to Mr. John. + +Note: Currently, only correction type available is to reassign the reviewer, but it is possible to add in the future. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +Person that can use the tier review correction, must has access right to group *Tier Review Correction* + +Usage +===== + +To create/edit Tier Review Correction + +* Login as user with Tier Review Correction role +* Go to menu Settings > Technical > Tier Validation > Tier Review Correction +* Create a new tier correction, by selecting, + + * Correction Type, in this case, Reassign Reviewer(s) + * Document Model, i.e., Purchase order +* Find documents with pending reviews by, + + * Reviewer(s) + * Name Search +* Then set default value to change, in this case, + + * New Reviewer(s) +* Click button "Prepare", if any document matched, it should list in Correction Detail table. +* For each correction line, user can still change the affected tier reviews, and new reviewers. +* Click button "Make Correction" to finalize the operation. +* As an option, click on "Revert Back" to set back to original status. + + * For case Reassign Reviewer(s), system to get the original reviewers from tier definition as set it back. + +Quick access, from a working document, to create/view Tier Review Correction + +* As user with Tier Review Correction role +* On any document, i.e., Purchase Order, with validation already started. +* On the yellow banner (pending state), click on "Change Reviewer" link on its right side. + + * If this document has no Correction yet, it will create new. + * If the document already has some Corrections, it will show those corrections. + +To run the Tier Review Correction by scheduled job + +* As user with Tier Review Correction role +* On any Tier Review Correction, open tab "Scheduled Action" +* Setup the datetime to Scheduled Correct and Scheduled Revert. By default, + scheduled action "Tier Correction Scheduler" will run every 1 hour. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Ecosoft + +Contributors +~~~~~~~~~~~~ + +* Kitti U. + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-kittiu| image:: https://github.com/kittiu.png?size=40px + :target: https://github.com/kittiu + :alt: kittiu + +Current `maintainer `__: + +|maintainer-kittiu| + +This module is part of the `OCA/server-ux `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot new file mode 100644 index 000000000..c15a91ba0 --- /dev/null +++ b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot @@ -0,0 +1,614 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_correction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Name" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_ids +msgid "Activities" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_state +msgid "Activity State" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Actual Correct" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_correct +msgid "Actual Correction Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Actual Revert" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_revert +msgid "Actual Revert Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__reference +msgid "Affected Documents" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.act_window,name:base_tier_validation_correction.view_affected_tier_reviews_action +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__review_ids +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Affected Tier Reviews" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Are you sure to reassign new reviewer(s) for affected tier reviews?" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Are you sure to revert to old reviewer(s) for affected tier reviews?" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Cancel" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_validation_label_forward +msgid "Change Reviewer" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Change Reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.view_affected_tier_reviews_form +msgid "Close" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__done +msgid "Corrected" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__correction_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Correction Details" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__correction_type +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Correction Type" +msgstr "" + +#. module: base_tier_validation_correction +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#, python-format +msgid "Correction is allowed on state = 'done' only" +msgstr "" + +#. module: base_tier_validation_correction +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#, python-format +msgid "Correction is allowed on state = 'prepare' only" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_uid +msgid "Created by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_date +msgid "Created on" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "" +"Default new reviewers to be assigned to the correction. This value can be overwritten in\n" +" Correction Detail." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__name +msgid "Description" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__draft +msgid "Draft" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Find documents with pending reviews by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__old_reviewer_ids +msgid "Find documents with tier reviews matching some reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Group By" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__item_ids +msgid "Item" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews____last_update +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction____last_update +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item____last_update +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation____last_update +msgid "Last Modified on" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Make Correcton" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_ids +msgid "Messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__search_name +msgid "Name Search" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids +msgid "New Reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model_id +msgid "On Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__old_reviewer_ids +msgid "Original Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Prepare" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__prepare +msgid "Preparing" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__new_reviewer_ids +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__correction_type__reviewer +msgid "Reassign Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__new_reviewer_ids +msgid "Reassign these reviewers to the tier reviews of the found document" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Reassign to new value" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__reference +msgid "Reference" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_id +msgid "Res" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_model +msgid "Res Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__resource_ref +msgid "Resource" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Revert Back" +msgstr "" + +#. module: base_tier_validation_correction +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#, python-format +msgid "Revert Date should be after Correct Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__revert +msgid "Reverted" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__review_ids +msgid "Review" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Reviewer" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Action" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Correct" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_correct +msgid "Scheduled Correction Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Revert" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_revert +msgid "Scheduled Revert Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled date/time to auto correct and/or revert by" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Set to Draft" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_affected_tier_reviews +msgid "Show Affected Tier Reviews" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__state +msgid "Status" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: base_tier_validation_correction +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#, python-format +msgid "The Correction '%s', corrrected reviewers on '%s' to '%s'" +msgstr "" + +#. module: base_tier_validation_correction +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#, python-format +msgid "The Correction '%s', reverted reviewers on '%s' back to '%s'" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids +msgid "" +"These reviewers will overwrite the existing reviewer_ids in tier.review" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "" +"This is optional search criteria to find matched document into Correction Details.\n" +" Only document with pending reviews will be listed." +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_tree +msgid "Tier Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_tier_correction_item +msgid "Tier Correction Detail" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.server,name:base_tier_validation_correction.tier_correction_scheduler_ir_actions_server +#: model:ir.cron,cron_name:base_tier_validation_correction.tier_correction_scheduler +#: model:ir.cron,name:base_tier_validation_correction.tier_correction_scheduler +msgid "Tier Correction Scheduler" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.act_window,name:base_tier_validation_correction.tier_correction_action +#: model:ir.model,name:base_tier_validation_correction.model_tier_correction +#: model:ir.ui.menu,name:base_tier_validation_correction.menu_tier_correction +#: model:res.groups,name:base_tier_validation_correction.group_tier_correction +msgid "Tier Review Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:mail.message.subtype,name:base_tier_validation_correction.mt_tier_validation_correction +msgid "Tier Validation Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__review_ids +msgid "Tier reivews that will be affected by this correction." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "e.g. Correction for..." +msgstr "" diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py index c61003e0f..f7b6b1b28 100644 --- a/base_tier_validation_correction/models/tier_correction.py +++ b/base_tier_validation_correction/models/tier_correction.py @@ -120,7 +120,7 @@ class TierCorrection(models.Model): @api.constrains("date_schedule_correct", "date_schedule_revert") def _check_date(self): - """ Correct Date < Revert Date """ + """Correct Date < Revert Date""" for rec in self: now = fields.Datetime.now() correct = rec.date_schedule_correct or now @@ -284,7 +284,7 @@ def _notify_reviewer_change(self, ttype="correct"): message = _( "The Correction '%s', reverted reviewers on '%s' back to '%s'" ) % (self.correction_id.name, reviews, reviewers) - getattr(self.resource_ref, post)( + getattr(self.resource_ref.sudo(), post)( subtype_xmlid=( "base_tier_validation_correction.mt_tier_validation_correction" ), diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index 7a11af54a..20aba3ce2 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -4,7 +4,7 @@ -Base Tier Validation Forward +Base Tier Validation Correction -
-

Base Tier Validation Forward

+
+

Base Tier Validation Correction

-

Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runbot

-

This module add an advance option to base_tier_validation.

-
    -
  • To allow “Forward” the tier to different user.
  • -
-

Sample use case:

-

A user is appointed to approve a tire, but he/she don’t want to make decision -for some reason, and want to pass/forward the decision to another person.

-

User can then click on Forward instead of Approve. A new tier with minor sequence will be -created on the reviewer table, and new user will be able to make approval decision.

+

Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runbot

+

This module provide a new operation to correct the information in tier.review for any document under tier validation.

+

For example, a document started validation, a tier review is assigned to Mr. Smith.

+

However, since Mr. Smith has urgent business oversea for a few days, +all document need to get approved by Mr. John as person in charge.

+

This module allow user with Tier Review Correction role to change the reviewer to Mr. John.

+

Note: Currently, only correction type available is to reassign the reviewer, but it is possible to add in the future.

Important

This is an alpha version, the data model and design can change at any time without warning. @@ -387,43 +384,90 @@

Base Tier Validation Forward

Configuration

-

In any tier definition, check “Allow Forward” to enable this feature.

+

Person that can use the tier review correction, must has access right to group Tier Review Correction

+
+
+

Usage

+

To create/edit Tier Review Correction

+
    +
  • Login as user with Tier Review Correction role
  • +
  • Go to menu Settings > Technical > Tier Validation > Tier Review Correction
  • +
  • Create a new tier correction, by selecting,
      +
    • Correction Type, in this case, Reassign Reviewer(s)
    • +
    • Document Model, i.e., Purchase order
    • +
    +
  • +
  • Find documents with pending reviews by,
      +
    • Reviewer(s)
    • +
    • Name Search
    • +
    +
  • +
  • Then set default value to change, in this case,
      +
    • New Reviewer(s)
    • +
    +
  • +
  • Click button “Prepare”, if any document matched, it should list in Correction Detail table.
  • +
  • For each correction line, user can still change the affected tier reviews, and new reviewers.
  • +
  • Click button “Make Correction” to finalize the operation.
  • +
  • As an option, click on “Revert Back” to set back to original status.
      +
    • For case Reassign Reviewer(s), system to get the original reviewers from tier definition as set it back.
    • +
    +
  • +
+

Quick access, from a working document, to create/view Tier Review Correction

+
    +
  • As user with Tier Review Correction role
  • +
  • On any document, i.e., Purchase Order, with validation already started.
  • +
  • On the yellow banner (pending state), click on “Change Reviewer” link on its right side.
      +
    • If this document has no Correction yet, it will create new.
    • +
    • If the document already has some Corrections, it will show those corrections.
    • +
    +
  • +
+

To run the Tier Review Correction by scheduled job

+
    +
  • As user with Tier Review Correction role
  • +
  • On any Tier Review Correction, open tab “Scheduled Action”
  • +
  • Setup the datetime to Scheduled Correct and Scheduled Revert. By default, +scheduled action “Tier Correction Scheduler” will run every 1 hour.
  • +
-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Ecosoft
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose @@ -431,7 +475,7 @@

Maintainers

promote its widespread use.

Current maintainer:

kittiu

-

This module is part of the OCA/server-ux project on GitHub.

+

This module is part of the OCA/server-ux project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From a1c0ffd63552bbbd2abc1ae76ca77ff614488656 Mon Sep 17 00:00:00 2001 From: Kevin Luna Date: Thu, 9 Feb 2023 10:48:33 +0100 Subject: [PATCH 03/25] [14.0][FIX] base_tier_valaidation_correction: xmlids --- base_tier_validation_correction/models/tier_correction.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py index f7b6b1b28..fa16ce990 100644 --- a/base_tier_validation_correction/models/tier_correction.py +++ b/base_tier_validation_correction/models/tier_correction.py @@ -207,8 +207,7 @@ def action_revert(self): def view_scheduled_action(self): self.ensure_one() - action = self.env.ref("base.ir_cron_act") - result = action.read()[0] + result = self.env["ir.actions.act_window"]._for_xml_id("base.ir_cron_act") cron = self.env.ref("base_tier_validation_correction.tier_correction_scheduler") result["domain"] = [("id", "in", cron.id)] return result From 636c145cea63153170392a7c4cd4a97c0ba147c5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 8 Mar 2023 22:03:57 +0000 Subject: [PATCH 04/25] base_tier_validation_correction 14.0.1.0.1 --- base_tier_validation_correction/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index 28027a9db..7314fb475 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "category": "Tools", "website": "https://github.com/OCA/server-ux", "author": "Ecosoft,Odoo Community Association (OCA)", From 94077cf64082249d8c8d802b18f618b545277b64 Mon Sep 17 00:00:00 2001 From: Christopher Ormaza Date: Thu, 22 Jun 2023 09:25:17 -0500 Subject: [PATCH 05/25] [16.0][MIG] base_tier_validation_correction --- base_tier_validation_correction/README.rst | 23 ++++---- .../__manifest__.py | 2 +- .../i18n/base_tier_validation_correction.pot | 59 ++++++++----------- .../models/tier_correction.py | 25 +++++--- .../security/correction_groups.xml | 10 ++-- .../static/description/index.html | 56 ++++++++++-------- .../tests/test_tier_validation.py | 32 +++++----- .../views/tier_correction_view.xml | 2 +- 8 files changed, 105 insertions(+), 104 deletions(-) diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index f57ef7aab..23f08ec19 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -2,10 +2,13 @@ Base Tier Validation Correction =============================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:37089087e44ba80accb52ea248a8f232aa42ca236527cb4b5f500a825d0ab182 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status @@ -14,16 +17,16 @@ Base Tier Validation Correction :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github - :target: https://github.com/OCA/server-ux/tree/14.0/base_tier_validation_correction + :target: https://github.com/OCA/server-ux/tree/16.0/base_tier_validation_correction :alt: OCA/server-ux .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-ux-14-0/server-ux-14-0-base_tier_validation_correction + :target: https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-base_tier_validation_correction :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/250/14.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module provide a new operation to correct the information in tier.review for any document under tier validation. @@ -97,8 +100,8 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -136,6 +139,6 @@ Current `maintainer `__: |maintainer-kittiu| -This module is part of the `OCA/server-ux `_ project on GitHub. +This module is part of the `OCA/server-ux `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index 7314fb475..278caace9 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "14.0.1.0.1", + "version": "16.0.1.0.0", "category": "Tools", "website": "https://github.com/OCA/server-ux", "author": "Ecosoft,Odoo Community Association (OCA)", diff --git a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot index c15a91ba0..73f9483b0 100644 --- a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot +++ b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -138,12 +138,14 @@ msgid "Correction Type" msgstr "" #. module: base_tier_validation_correction +#. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Correction is allowed on state = 'done' only" msgstr "" #. module: base_tier_validation_correction +#. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Correction is allowed on state = 'prepare' only" @@ -179,7 +181,6 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__display_name msgid "Display Name" msgstr "" @@ -203,11 +204,6 @@ msgstr "" msgid "Followers" msgstr "" -#. module: base_tier_validation_correction -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_channel_ids -msgid "Followers (Channels)" -msgstr "" - #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_partner_ids msgid "Followers (Partners)" @@ -223,11 +219,15 @@ msgstr "" msgid "Group By" msgstr "" +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__has_message +msgid "Has Message" +msgstr "" + #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__id msgid "ID" msgstr "" @@ -243,13 +243,11 @@ msgstr "" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction -#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_unread msgid "If checked, new messages require your attention." msgstr "" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error -#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_sms_error msgid "If checked, some messages have a delivery error." msgstr "" @@ -267,7 +265,6 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews____last_update #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction____last_update #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item____last_update -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation____last_update msgid "Last Modified on" msgstr "" @@ -326,6 +323,11 @@ msgstr "" msgid "New Reviewers" msgstr "" +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_calendar_event_id +msgid "Next Activity Calendar Event" +msgstr "" + #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_date_deadline msgid "Next Activity Deadline" @@ -353,7 +355,7 @@ msgstr "" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction_counter -msgid "Number of messages which requires an action" +msgid "Number of messages requiring action" msgstr "" #. module: base_tier_validation_correction @@ -361,11 +363,6 @@ msgstr "" msgid "Number of messages with delivery error" msgstr "" -#. module: base_tier_validation_correction -#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_unread_counter -msgid "Number of unread messages" -msgstr "" - #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model_id msgid "On Model" @@ -433,6 +430,7 @@ msgid "Revert Back" msgstr "" #. module: base_tier_validation_correction +#. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Revert Date should be after Correct Date" @@ -458,11 +456,6 @@ msgstr "" msgid "Reviewer(s)" msgstr "" -#. module: base_tier_validation_correction -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_sms_error -msgid "SMS Delivery error" -msgstr "" - #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Action" @@ -518,15 +511,21 @@ msgid "" msgstr "" #. module: base_tier_validation_correction +#. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format -msgid "The Correction '%s', corrrected reviewers on '%s' to '%s'" +msgid "" +"The Correction '%(name)s', corrrected reviewers on '%(reviews)s' to " +"'%(reviewers)s'" msgstr "" #. module: base_tier_validation_correction +#. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format -msgid "The Correction '%s', reverted reviewers on '%s' back to '%s'" +msgid "" +"The Correction '%(name)s', reverted reviewers on '%(reviews)s' back to " +"'%(reviewers)s'" msgstr "" #. module: base_tier_validation_correction @@ -544,7 +543,6 @@ msgstr "" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form -#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_tree msgid "Tier Correction" msgstr "" @@ -556,7 +554,6 @@ msgstr "" #. module: base_tier_validation_correction #: model:ir.actions.server,name:base_tier_validation_correction.tier_correction_scheduler_ir_actions_server #: model:ir.cron,cron_name:base_tier_validation_correction.tier_correction_scheduler -#: model:ir.cron,name:base_tier_validation_correction.tier_correction_scheduler msgid "Tier Correction Scheduler" msgstr "" @@ -588,16 +585,6 @@ msgstr "" msgid "Type of the exception activity on record." msgstr "" -#. module: base_tier_validation_correction -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_unread -msgid "Unread Messages" -msgstr "" - -#. module: base_tier_validation_correction -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_unread_counter -msgid "Unread Messages Counter" -msgstr "" - #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__website_message_ids msgid "Website Messages" diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py index fa16ce990..57d936814 100644 --- a/base_tier_validation_correction/models/tier_correction.py +++ b/base_tier_validation_correction/models/tier_correction.py @@ -38,7 +38,6 @@ class TierCorrection(models.Model): selection=[ ("reviewer", "Reassign Reviewer(s)"), ], - string="Correction Type", default="reviewer", required=True, readonly=True, @@ -274,15 +273,25 @@ def _notify_reviewer_change(self, ttype="correct"): reviewers = ", ".join( tier_reviews.reviewer_ids.filtered("name").mapped("name") ) - message = _("The Correction '%s', corrrected reviewers on '%s' to '%s'") % ( - self.correction_id.name, - reviews, - reviewers, - ) + message = _( + "The Correction '%(name)s', " + "corrrected reviewers " + "on '%(reviews)s' to '%(reviewers)s'" + ) % { + "name": self.correction_id.name, + "reviews": reviews, + "reviewers": reviewers, + } if ttype == "revert": message = _( - "The Correction '%s', reverted reviewers on '%s' back to '%s'" - ) % (self.correction_id.name, reviews, reviewers) + "The Correction '%(name)s', " + "reverted reviewers on '%(reviews)s' " + "back to '%(reviewers)s'" + ) % { + "name": self.correction_id.name, + "reviews": reviews, + "reviewers": reviewers, + } getattr(self.resource_ref.sudo(), post)( subtype_xmlid=( "base_tier_validation_correction.mt_tier_validation_correction" diff --git a/base_tier_validation_correction/security/correction_groups.xml b/base_tier_validation_correction/security/correction_groups.xml index 679e1fb58..bfb055cbf 100644 --- a/base_tier_validation_correction/security/correction_groups.xml +++ b/base_tier_validation_correction/security/correction_groups.xml @@ -1,15 +1,13 @@ - - + Tier Review Correction + name="users" + eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]" + /> - diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index 20aba3ce2..b47fc7544 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -1,20 +1,20 @@ - - + Base Tier Validation Correction -
-

Base Tier Validation Correction

+
+ + +Odoo Community Association + +
+

Base Tier Validation Correction

-

Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

This module provide a new operation to correct the information in tier.review for any document under tier validation.

For example, a document started validation, a tier review is assigned to @@ -401,12 +406,12 @@

Base Tier Validation Correction

-

Configuration

+

Configuration

Person that can use the tier review correction, must has access right to group Tier Review Correction

-

Usage

+

Usage

To create/edit Tier Review Correction

  • Login as user with Tier Review Correction role
  • @@ -432,8 +437,8 @@

    Usage

    reviews, and new reviewers.
  • Click button “Make Correction” to finalize the operation.
  • As an option, click on “Revert Back” to set back to original status.
      -
    • For case Reassign Reviewer(s), system to get the original -reviewers from tier definition as set it back.
    • +
    • For case Reassign Reviewer(s), system to get the original reviewers +from tier definition as set it back.
@@ -456,12 +461,12 @@

Usage

  • As user with Tier Review Correction role
  • On any Tier Review Correction, open tab “Scheduled Action”
  • Setup the datetime to Scheduled Correct and Scheduled Revert. By -default, scheduled action “Tier Correction Scheduler” will run every -1 hour.
  • +default, scheduled action “Tier Correction Scheduler” will run every 1 +hour.
    -

    Bug Tracker

    +

    Bug Tracker

    Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -469,21 +474,22 @@

    Bug Tracker

    Do not contact contributors directly about support or help with technical issues.

    +
    diff --git a/base_tier_validation_correction/templates/tier_validation_templates.xml b/base_tier_validation_correction/templates/tier_validation_templates.xml index 6f81a1bf4..1d6591c19 100644 --- a/base_tier_validation_correction/templates/tier_validation_templates.xml +++ b/base_tier_validation_correction/templates/tier_validation_templates.xml @@ -11,7 +11,6 @@ class="oe_right" icon="fa-male" groups="base_tier_validation_correction.group_tier_correction" - context="{'active_id': active_id, 'active_model': active_model}" />

    diff --git a/base_tier_validation_correction/tests/test_tier_validation.py b/base_tier_validation_correction/tests/test_tier_validation.py index 6a787231a..0f30cd341 100644 --- a/base_tier_validation_correction/tests/test_tier_validation.py +++ b/base_tier_validation_correction/tests/test_tier_validation.py @@ -4,13 +4,21 @@ from odoo import fields from odoo.exceptions import ValidationError -from odoo.tests.common import tagged from odoo.addons.base_tier_validation.tests.common import CommonTierValidation -@tagged("post_install", "-at_install") class TierTierValidation(CommonTierValidation): + @classmethod + def setUpClass(cls): + super().setUpClass() + + from .tier_validation_tester import TierValidationTester + + cls.loader.update_registry((TierValidationTester,)) + + cls.test_record.name = "test" + def test_01_tier_correction(self): """With the document in validation, - User click on Change Reviewer to creat new correction diff --git a/base_tier_validation_correction/tests/tier_validation_tester.py b/base_tier_validation_correction/tests/tier_validation_tester.py new file mode 100644 index 000000000..567ca251c --- /dev/null +++ b/base_tier_validation_correction/tests/tier_validation_tester.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class TierValidationTester(models.Model): + _inherit = "tier.validation.tester" + _rec_name = "name" + + name = fields.Char() diff --git a/base_tier_validation_correction/views/tier_correction_view.xml b/base_tier_validation_correction/views/tier_correction_view.xml index ec082f744..a5c3b5e9a 100644 --- a/base_tier_validation_correction/views/tier_correction_view.xml +++ b/base_tier_validation_correction/views/tier_correction_view.xml @@ -3,10 +3,10 @@ License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - tier.correction.tree + tier.correction.list tier.correction - + @@ -18,7 +18,7 @@ decoration-danger="state in 'cancel'" widget="badge" /> - + @@ -29,14 +29,14 @@
    - - + + @@ -99,10 +105,11 @@

    - +

    @@ -111,17 +118,21 @@

    - - + + - +
    @@ -167,34 +178,35 @@ -
    - - - -
    + +
    @@ -240,7 +252,7 @@ Tier Review Correction ir.actions.act_window tier.correction - tree,form + list,form {} Date: Thu, 15 Jan 2026 12:28:01 +0000 Subject: [PATCH 09/25] Translated using Weblate (Italian) Currently translated at 100.0% (108 of 108 strings) Translation: server-ux-18.0/server-ux-18.0-base_tier_validation_correction Translate-URL: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation_correction/it/ --- base_tier_validation_correction/i18n/it.po | 223 ++++++++++++--------- 1 file changed, 123 insertions(+), 100 deletions(-) diff --git a/base_tier_validation_correction/i18n/it.po b/base_tier_validation_correction/i18n/it.po index 4f44793b1..478cb7d22 100644 --- a/base_tier_validation_correction/i18n/it.po +++ b/base_tier_validation_correction/i18n/it.po @@ -6,165 +6,171 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-01-19 13:50+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Name" -msgstr "" +msgstr "Nome" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction msgid "Action Needed" -msgstr "" +msgstr "Azione richiesta" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_ids msgid "Activities" -msgstr "" +msgstr "Attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_decoration msgid "Activity Exception Decoration" -msgstr "" +msgstr "Decorazione eccezione attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_state msgid "Activity State" -msgstr "" +msgstr "Stato attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_icon msgid "Activity Type Icon" -msgstr "" +msgstr "Icona tipo attività" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Actual Correct" -msgstr "" +msgstr "Attuale corretto" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_correct msgid "Actual Correction Date" -msgstr "" +msgstr "Data correzione attuale" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Actual Revert" -msgstr "" +msgstr "Ripristino attuale" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_revert msgid "Actual Revert Date" -msgstr "" +msgstr "Data ripristino attuale" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__reference msgid "Affected Documents" -msgstr "" +msgstr "Documenti interessati" #. module: base_tier_validation_correction #: model:ir.actions.act_window,name:base_tier_validation_correction.view_affected_tier_reviews_action #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__review_ids #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Affected Tier Reviews" -msgstr "" +msgstr "Revisioni livello interessate" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Are you sure to reassign new reviewer(s) for affected tier reviews?" msgstr "" +"Si è sicuri di riassegnare un nuovo revisore(i) per le revisioni livello " +"interessate?" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Are you sure to revert to old reviewer(s) for affected tier reviews?" msgstr "" +"Si è sicuri di ripristinare il precedente revisore(i) per le revisioni " +"livello interessate?" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_attachment_count msgid "Attachment Count" -msgstr "" +msgstr "Conteggio allegati" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Cancel" -msgstr "" +msgstr "Annulla" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__cancel msgid "Cancelled" -msgstr "" +msgstr "Annullata" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_validation_label_forward msgid "Change Reviewer" -msgstr "" +msgstr "Modifica revisore" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Change Reviewers" -msgstr "" +msgstr "Modifica revisori" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.view_affected_tier_reviews_form msgid "Close" -msgstr "" +msgstr "Chiudi" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__done msgid "Corrected" -msgstr "" +msgstr "Corretti" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__correction_id #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Correction" -msgstr "" +msgstr "Correzione" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Correction Details" -msgstr "" +msgstr "Dettagli correzioni" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__correction_type #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Correction Type" -msgstr "" +msgstr "Tipo correzione" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Correction is allowed on state = 'done' only" -msgstr "" +msgstr "La correzione è consentita solo in stato 'completato'" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Correction is allowed on state = 'prepare' only" -msgstr "" +msgstr "La correzione è consentita solo nello stato 'prepara'" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_uid msgid "Created by" -msgstr "" +msgstr "Creato da" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_date msgid "Created on" -msgstr "" +msgstr "Creato il" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form @@ -172,335 +178,339 @@ msgid "" "Default new reviewers to be assigned to the correction. This value can be overwritten in\n" " Correction Detail." msgstr "" +"Nuovi revisori predefiniti da assegnare alla correzione. Questo valore può " +"essere sovrascritto in\n" +" Dettagli correzione." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__name msgid "Description" -msgstr "" +msgstr "Descrizione" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__draft msgid "Draft" -msgstr "" +msgstr "Bozza" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Find documents with pending reviews by" -msgstr "" +msgstr "Trova documenti con revisioni in corso da" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__old_reviewer_ids msgid "Find documents with tier reviews matching some reviewers" msgstr "" +"Trova documenti con revisioni livello che corrispondono a qualche revisore" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_follower_ids msgid "Followers" -msgstr "" +msgstr "Seguito da" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_partner_ids msgid "Followers (Partners)" -msgstr "" +msgstr "Seguito da (partner)" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_type_icon msgid "Font awesome icon e.g. fa-tasks" -msgstr "" +msgstr "Icona Font Awesome es. fa-tasks" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Group By" -msgstr "" +msgstr "Raggruppa per" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__has_message msgid "Has Message" -msgstr "" +msgstr "Ha un messaggio" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id msgid "ID" -msgstr "" +msgstr "ID" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_icon msgid "Icon" -msgstr "" +msgstr "Icona" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_icon msgid "Icon to indicate an exception activity." -msgstr "" +msgstr "Icona per indicare un'attività eccezione." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction msgid "If checked, new messages require your attention." -msgstr "" +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error msgid "If checked, some messages have a delivery error." -msgstr "" +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_is_follower msgid "Is Follower" -msgstr "" +msgstr "Segue" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__item_ids msgid "Item" -msgstr "" +msgstr "Elemento" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews____last_update #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction____last_update #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_main_attachment_id msgid "Main Attachment" -msgstr "" +msgstr "Allegato principale" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Make Correcton" -msgstr "" +msgstr "Crea correzione" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error msgid "Message Delivery error" -msgstr "" +msgstr "Errore di consegna messaggio" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_ids msgid "Messages" -msgstr "" +msgstr "Messaggi" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Model" -msgstr "" +msgstr "Modello" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__my_activity_date_deadline msgid "My Activity Deadline" -msgstr "" +msgstr "Scadenza mia attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__search_name msgid "Name Search" -msgstr "" +msgstr "Ricerca nome" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids msgid "New Reviewers" -msgstr "" +msgstr "Nuovi revisori" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_calendar_event_id msgid "Next Activity Calendar Event" -msgstr "" +msgstr "Evento calendario attività successiva" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_date_deadline msgid "Next Activity Deadline" -msgstr "" +msgstr "Scadenza prossima attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_summary msgid "Next Activity Summary" -msgstr "" +msgstr "Riepilogo prossima attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_id msgid "Next Activity Type" -msgstr "" +msgstr "Tipo prossima attività" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction_counter msgid "Number of Actions" -msgstr "" +msgstr "Numero di azioni" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error_counter msgid "Number of errors" -msgstr "" +msgstr "Numero di errori" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction_counter msgid "Number of messages requiring action" -msgstr "" +msgstr "Numero di messaggi che richiedono un'azione" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error_counter msgid "Number of messages with delivery error" -msgstr "" +msgstr "Numero di messaggi con errore di consegna" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model_id msgid "On Model" -msgstr "" +msgstr "Nel modello" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__old_reviewer_ids msgid "Original Reviewer(s)" -msgstr "" +msgstr "Revisore(i) originale" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Prepare" -msgstr "" +msgstr "Prepara" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__prepare msgid "Preparing" -msgstr "" +msgstr "Preparazione" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__new_reviewer_ids #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__correction_type__reviewer msgid "Reassign Reviewer(s)" -msgstr "" +msgstr "Riassegna revisore(i)" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__new_reviewer_ids msgid "Reassign these reviewers to the tier reviews of the found document" -msgstr "" +msgstr "Riassegna questi revisori alle revisioni livello del documento trovato" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Reassign to new value" -msgstr "" +msgstr "Riassegna a nuovo valore" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__reference msgid "Reference" -msgstr "" +msgstr "Riferimento" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_id msgid "Res" -msgstr "" +msgstr "Res" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_model msgid "Res Model" -msgstr "" +msgstr "Modello res" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__resource_ref msgid "Resource" -msgstr "" +msgstr "Risorsa" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_user_id msgid "Responsible User" -msgstr "" +msgstr "Utente responsabile" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Revert Back" -msgstr "" +msgstr "Ripristina" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 #, python-format msgid "Revert Date should be after Correct Date" -msgstr "" +msgstr "La data di ripristino deve essere dopo la data di corretta" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__revert msgid "Reverted" -msgstr "" +msgstr "Ripristinato" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__review_ids msgid "Review" -msgstr "" +msgstr "Revisione" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Reviewer" -msgstr "" +msgstr "Revisore" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Reviewer(s)" -msgstr "" +msgstr "Revisore(i)" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Action" -msgstr "" +msgstr "Azione schedulata" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Correct" -msgstr "" +msgstr "Correzione schedulato" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_correct msgid "Scheduled Correction Date" -msgstr "" +msgstr "Data correzione schedulato" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Revert" -msgstr "" +msgstr "Ripristina schedulato" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_revert msgid "Scheduled Revert Date" -msgstr "" +msgstr "Data ripristino schedulato" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled date/time to auto correct and/or revert by" -msgstr "" +msgstr "Data/ora schedulata da auto correggere e/o ripristinare da" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Set to Draft" -msgstr "" +msgstr "Imposta a bozza" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_affected_tier_reviews msgid "Show Affected Tier Reviews" -msgstr "" +msgstr "Visualizza revisioni livello coinvolte" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__state msgid "Status" -msgstr "" +msgstr "Stato" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_state @@ -510,6 +520,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Stato in base alle attività\n" +"Scaduto: la data richiesta è trascorsa\n" +"Oggi: la data attività è oggi\n" +"Pianificato: attività future." #. module: base_tier_validation_correction #. odoo-python @@ -519,6 +533,8 @@ msgid "" "The Correction '%(name)s', corrrected reviewers on '%(reviews)s' to " "'%(reviewers)s'" msgstr "" +"La correzione '%(name)s', ha corretto i revisori in '%(reviews)s' a " +"'%(reviewers)s'" #. module: base_tier_validation_correction #. odoo-python @@ -528,12 +544,15 @@ msgid "" "The Correction '%(name)s', reverted reviewers on '%(reviews)s' back to " "'%(reviewers)s'" msgstr "" +"La correzione '%(name)s', ha ripristinato i revisori in '%(reviews)s' a " +"'%(reviewers)s'" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids msgid "" "These reviewers will overwrite the existing reviewer_ids in tier.review" msgstr "" +"Questi revisori sovrascriveranno gli attuali reviewer_ids in tier.review" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form @@ -541,22 +560,26 @@ msgid "" "This is optional search criteria to find matched document into Correction Details.\n" " Only document with pending reviews will be listed." msgstr "" +"Questo è un criterio di ricerca facoltativo per trovare il documento " +"corrispondente nei dettagli della correzione. \n" +" Verranno elencati solo i documenti con " +"revisioni in sospeso." #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Tier Correction" -msgstr "" +msgstr "Correzione livello" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_tier_correction_item msgid "Tier Correction Detail" -msgstr "" +msgstr "Dettagli correzione livello" #. module: base_tier_validation_correction #: model:ir.actions.server,name:base_tier_validation_correction.tier_correction_scheduler_ir_actions_server #: model:ir.cron,cron_name:base_tier_validation_correction.tier_correction_scheduler msgid "Tier Correction Scheduler" -msgstr "" +msgstr "Schedulatore correzione livello" #. module: base_tier_validation_correction #: model:ir.actions.act_window,name:base_tier_validation_correction.tier_correction_action @@ -564,39 +587,39 @@ msgstr "" #: model:ir.ui.menu,name:base_tier_validation_correction.menu_tier_correction #: model:res.groups,name:base_tier_validation_correction.group_tier_correction msgid "Tier Review Correction" -msgstr "" +msgstr "Correzione revisione livello" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_tier_validation msgid "Tier Validation (abstract)" -msgstr "" +msgstr "Validazione livello (sintesi)" #. module: base_tier_validation_correction #: model:mail.message.subtype,name:base_tier_validation_correction.mt_tier_validation_correction msgid "Tier Validation Correction" -msgstr "" +msgstr "Correzione validazione livello" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__review_ids msgid "Tier reivews that will be affected by this correction." -msgstr "" +msgstr "Revisioni livello che verranno coinvolte da questa correzione." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_decoration msgid "Type of the exception activity on record." -msgstr "" +msgstr "Tipo di attività eccezione sul record." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__website_message_ids msgid "Website Messages" -msgstr "" +msgstr "Messaggi sito web" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__website_message_ids msgid "Website communication history" -msgstr "" +msgstr "Cronologia comunicazioni sito web" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "e.g. Correction for..." -msgstr "" +msgstr "es. Correzione per..." From 58d57fce9654766c94322427322bcccd58bc73d9 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Fri, 20 Feb 2026 13:55:11 -0500 Subject: [PATCH 10/25] [FIX] base_tier_validation_correction: Change where the mock has to be loaded With the changes introduced in odoo/odoo@de056cc#diff-b37c7fd5520c97a29ddc59495779e7be61a66e15e85603928e27b3affb9dc31f, an error was occurring because the change validation on the model was being performed before tearDownClass was executed. Therefore, it has been modified so that the mock changes are applied in each test and cleaned up after each test. This way, the error will no longer appear and the test will run normally. --- base_tier_validation_correction/README.rst | 2 +- base_tier_validation_correction/__manifest__.py | 2 +- .../static/description/index.html | 2 +- .../tests/test_tier_validation.py | 9 ++++----- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index a5c5f55c9..bde521149 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -11,7 +11,7 @@ Base Tier Validation Correction !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5ef682f702644c92187a7951b68516f4bbaa5d21a1e5766e2d76d88e343432a3 + !! source digest: sha256:4a81d2472d4cf81cd1b1c54ee9f8df778654d8f3888ba34b66837e6b9110fbbc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index b2b72dcad..df19fa89d 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Tools", "website": "https://github.com/OCA/server-ux", "author": "Ecosoft,Odoo Community Association (OCA)", diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index 72f79eb1b..28a6fd3ec 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -372,7 +372,7 @@

    Base Tier Validation Correction

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5ef682f702644c92187a7951b68516f4bbaa5d21a1e5766e2d76d88e343432a3 +!! source digest: sha256:4a81d2472d4cf81cd1b1c54ee9f8df778654d8f3888ba34b66837e6b9110fbbc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

    This module provide a new operation to correct the information in diff --git a/base_tier_validation_correction/tests/test_tier_validation.py b/base_tier_validation_correction/tests/test_tier_validation.py index 0f30cd341..0d6bad1b7 100644 --- a/base_tier_validation_correction/tests/test_tier_validation.py +++ b/base_tier_validation_correction/tests/test_tier_validation.py @@ -9,15 +9,14 @@ class TierTierValidation(CommonTierValidation): - @classmethod - def setUpClass(cls): - super().setUpClass() + def setUp(self): + super().setUp() from .tier_validation_tester import TierValidationTester - cls.loader.update_registry((TierValidationTester,)) + self.loader.update_registry((TierValidationTester,)) - cls.test_record.name = "test" + self.test_record.name = "test" def test_01_tier_correction(self): """With the document in validation, From 67b785ac5bf8550e487ff51b094ce08b916c05ad Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Thu, 30 Apr 2026 13:06:04 +0300 Subject: [PATCH 11/25] [IMP] base_tier_validation_correction: pre-commit auto fixes --- base_tier_validation_correction/README.rst | 16 ++++++++-------- base_tier_validation_correction/__manifest__.py | 2 +- .../static/description/index.html | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index bde521149..2474be4a9 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -20,14 +20,14 @@ Base Tier Validation Correction .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github - :target: https://github.com/OCA/server-ux/tree/18.0/base_tier_validation_correction - :alt: OCA/server-ux +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftier--validation-lightgray.png?logo=github + :target: https://github.com/OCA/tier-validation/tree/19.0/base_tier_validation_correction + :alt: OCA/tier-validation .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation_correction + :target: https://translation.odoo-community.org/projects/tier-validation-19-0/tier-validation-19-0-base_tier_validation_correction :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/tier-validation&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -119,10 +119,10 @@ To run the Tier Review Correction by scheduled job Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -161,6 +161,6 @@ Current `maintainer `__: |maintainer-kittiu| -This module is part of the `OCA/server-ux `_ project on GitHub. +This module is part of the `OCA/tier-validation `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index df19fa89d..2c88acaf6 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -5,7 +5,7 @@ "summary": "Correct tier.review data after it has been created.", "version": "18.0.1.0.1", "category": "Tools", - "website": "https://github.com/OCA/server-ux", + "website": "https://github.com/OCA/tier-validation", "author": "Ecosoft,Odoo Community Association (OCA)", "license": "AGPL-3", "depends": ["base_tier_validation"], diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index 28a6fd3ec..f18b59374 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -374,7 +374,7 @@

    Base Tier Validation Correction

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:4a81d2472d4cf81cd1b1c54ee9f8df778654d8f3888ba34b66837e6b9110fbbc !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Alpha License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

    +

    Alpha License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

    This module provide a new operation to correct the information in tier.review for any document under tier validation.

    For example, a document started validation, a tier review is assigned to @@ -467,10 +467,10 @@

    Usage

    Bug Tracker

    -

    Bugs are tracked on GitHub Issues. +

    Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -499,7 +499,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    kittiu

    -

    This module is part of the OCA/server-ux project on GitHub.

    +

    This module is part of the OCA/tier-validation project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    From 013d3f1d40218a76da8a3840ea16649d7c57b58f Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Thu, 30 Apr 2026 14:38:17 +0300 Subject: [PATCH 12/25] [MIG] base_tier_validation_correction: Migration to 19.0 --- .../__manifest__.py | 2 +- .../models/__init__.py | 1 + .../models/tier_correction.py | 127 ++++-------------- .../models/tier_correction_item.py | 86 ++++++++++++ .../models/tier_validation.py | 9 +- .../security/correction_groups.xml | 10 +- .../tests/test_tier_validation.py | 45 ++++--- .../views/tier_correction_view.xml | 2 +- 8 files changed, 148 insertions(+), 134 deletions(-) create mode 100644 base_tier_validation_correction/models/tier_correction_item.py diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index 2c88acaf6..9dbae3cf5 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "18.0.1.0.1", + "version": "19.0.1.0.0", "category": "Tools", "website": "https://github.com/OCA/tier-validation", "author": "Ecosoft,Odoo Community Association (OCA)", diff --git a/base_tier_validation_correction/models/__init__.py b/base_tier_validation_correction/models/__init__.py index 1d8d8d1e2..7c04382cf 100644 --- a/base_tier_validation_correction/models/__init__.py +++ b/base_tier_validation_correction/models/__init__.py @@ -1,4 +1,5 @@ # Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import tier_correction +from . import tier_correction_item from . import tier_validation diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py index 11104de22..179a25b2d 100644 --- a/base_tier_validation_correction/models/tier_correction.py +++ b/base_tier_validation_correction/models/tier_correction.py @@ -2,8 +2,9 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). import logging -from odoo import api, fields, models +from odoo import Command, api, fields, models from odoo.exceptions import ValidationError +from odoo.fields import Domain _logger = logging.getLogger(__name__) @@ -108,32 +109,34 @@ def search_document(self): for rec in self: rec.item_ids.unlink() if rec.correction_type == "reviewer": - doc_domain = [("review_ids.status", "in", ["waiting", "pending"])] - review_domain = [("status", "in", ["waiting", "pending"])] + doc_domain = Domain("review_ids.status", "in", ["waiting", "pending"]) + review_domain = Domain("status", "in", ["waiting", "pending"]) if rec.search_name: doc_ids = self.env[rec.model].name_search(rec.search_name) - doc_domain += [("id", "in", list(dict(doc_ids).keys()))] + doc_domain &= Domain("id", "in", list(dict(doc_ids).keys())) if rec.old_reviewer_ids: - doc_domain += [ - ("review_ids.reviewer_ids", "in", rec.old_reviewer_ids.ids) - ] - review_domain += [("reviewer_ids", "in", rec.old_reviewer_ids.ids)] + doc_domain &= Domain( + "review_ids.reviewer_ids", "in", rec.old_reviewer_ids.ids + ) + review_domain &= Domain( + "reviewer_ids", "in", rec.old_reviewer_ids.ids + ) items = [] for doc in self.env[rec.model].search_fetch( doc_domain, ["review_ids", "display_name"] ): review_ids = doc.review_ids.filtered_domain(review_domain).ids items.append( - ( - 0, - 0, + Command.create( { "res_model": doc._name, "res_id": doc.id, "resource_ref": f"{doc._name},{doc.id}", "reference": doc.display_name, - "new_reviewer_ids": [(6, 0, rec.new_reviewer_ids.ids)], - "review_ids": [(6, 0, review_ids)], + "new_reviewer_ids": [ + Command.set(rec.new_reviewer_ids.ids) + ], + "review_ids": [Command.set(review_ids)], }, ) ) @@ -189,107 +192,23 @@ def view_scheduled_action(self): self.ensure_one() result = self.env["ir.actions.act_window"]._for_xml_id("base.ir_cron_act") cron = self.env.ref("base_tier_validation_correction.tier_correction_scheduler") - result["domain"] = [("id", "in", cron.id)] + result["domain"] = list(Domain("id", "in", cron.ids)) return result def _tier_correction_auto_run(self): # To correct to_correct = self.search( - [ - ("state", "=", "prepare"), - ("date_schedule_correct", "!=", False), - ("date_schedule_correct", "<=", fields.Datetime.now()), - ] + Domain("state", "=", "prepare") + & Domain("date_schedule_correct", "!=", False) + & Domain("date_schedule_correct", "<=", fields.Datetime.now()) ) to_correct.action_done() _logger.info("Tier Correction - Correction: %s", to_correct) # To revert to_revert = self.search( - [ - ("state", "=", "done"), - ("date_schedule_revert", "!=", False), - ("date_schedule_revert", "<=", fields.Datetime.now()), - ] + Domain("state", "=", "done") + & Domain("date_schedule_revert", "!=", False) + & Domain("date_schedule_revert", "<=", fields.Datetime.now()) ) to_revert.action_revert() _logger.info("Tier Correction - Reversion: %s", to_revert) - - -class TierCorrectionItem(models.Model): - _name = "tier.correction.item" - _description = "Tier Correction Detail" - - correction_id = fields.Many2one( - comodel_name="tier.correction", - index=True, - ) - res_model = fields.Char(readonly=True) - res_id = fields.Integer(readonly=True) - resource_ref = fields.Reference( - string="Resource", - selection=lambda self: [ - (model.model, model.name) for model in self.env["ir.model"].search([]) - ], - readonly=True, - ) - reference = fields.Char(readonly=True) - new_reviewer_ids = fields.Many2many( - comodel_name="res.users", - relation="tier_correction_item_new_reviewer_rel", - string="New Reviewers", - help="These reviewers will overwrite the existing reviewer_ids in tier.review", - ) - review_ids = fields.Many2many( - comodel_name="tier.review", - string="Affected Tier Reviews", - help="Tier reivews that will be affected by this correction.", - ) - - def _notify_reviewer_change(self, ttype="correct"): - self.ensure_one() - post = "message_post" - if hasattr(self.resource_ref, post): - tier_reviews = self.review_ids - reviews = ", ".join(tier_reviews.filtered("name").mapped("name")) - reviewers = ", ".join( - tier_reviews.reviewer_ids.filtered("name").mapped("name") - ) - message = self.env._( - "The Correction '%(name)s', " - "corrrected reviewers " - "on '%(reviews)s' to '%(reviewers)s'", - name=self.correction_id.name, - reviews=reviews, - reviewers=reviewers, - ) - if ttype == "revert": - message = self.env._( - "The Correction '%(name)s', " - "reverted reviewers on '%(reviews)s' " - "back to '%(reviewers)s'", - name=self.correction_id.name, - reviews=reviews, - reviewers=reviewers, - ) - getattr(self.resource_ref.sudo(), post)( - subtype_xmlid=( - "base_tier_validation_correction.mt_tier_validation_correction" - ), - body=message, - ) - - def correct(self): - for item in self: - # Only waiting/pending reviews will gets updated - item.review_ids.filtered( - lambda record: record.status in ["waiting", "pending"] - ).write({"reviewer_ids": [(6, 0, item.new_reviewer_ids.ids)]}) - item._notify_reviewer_change("correct") - - def revert(self): - for item in self: - for review in item.review_ids.filtered( - lambda record: record.status in ["waiting", "pending"] - ): - review.reviewer_ids = review._get_reviewers() - item._notify_reviewer_change("revert") diff --git a/base_tier_validation_correction/models/tier_correction_item.py b/base_tier_validation_correction/models/tier_correction_item.py new file mode 100644 index 000000000..fa727805f --- /dev/null +++ b/base_tier_validation_correction/models/tier_correction_item.py @@ -0,0 +1,86 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import Command, fields, models + + +class TierCorrectionItem(models.Model): + _name = "tier.correction.item" + _description = "Tier Correction Detail" + + correction_id = fields.Many2one( + comodel_name="tier.correction", + index=True, + ) + res_model = fields.Char(readonly=True) + res_id = fields.Integer(readonly=True) + resource_ref = fields.Reference( + string="Resource", + selection=lambda self: [ + (model.model, model.name) for model in self.env["ir.model"].search([]) + ], + readonly=True, + ) + reference = fields.Char(readonly=True) + new_reviewer_ids = fields.Many2many( + comodel_name="res.users", + relation="tier_correction_item_new_reviewer_rel", + string="New Reviewers", + help="These reviewers will overwrite the existing reviewer_ids in tier.review", + ) + review_ids = fields.Many2many( + comodel_name="tier.review", + string="Affected Tier Reviews", + help="Tier reivews that will be affected by this correction.", + ) + + def _notify_reviewer_change(self, ttype="correct"): + self.ensure_one() + post = "message_post" + if hasattr(self.resource_ref, post): + tier_reviews = self.review_ids + reviews = ", ".join(tier_reviews.filtered("name").mapped("name")) + reviewers = ", ".join( + tier_reviews.reviewer_ids.filtered("name").mapped("name") + ) + message = self.env._( + "The Correction '%(name)s', " + "corrrected reviewers " + "on '%(reviews)s' to '%(reviewers)s'", + name=self.correction_id.name, + reviews=reviews, + reviewers=reviewers, + ) + if ttype == "revert": + message = self.env._( + "The Correction '%(name)s', " + "reverted reviewers on '%(reviews)s' " + "back to '%(reviewers)s'", + name=self.correction_id.name, + reviews=reviews, + reviewers=reviewers, + ) + getattr(self.resource_ref.sudo(), post)( + subtype_xmlid=( + "base_tier_validation_correction.mt_tier_validation_correction" + ), + body=message, + ) + + def correct(self): + for item in self: + # Only waiting/pending reviews will gets updated + reviews = item.review_ids.filtered( + lambda record: record.status in ["waiting", "pending"] + ) + reviews.write({"reviewer_ids": [Command.set(item.new_reviewer_ids.ids)]}) + item._notify_reviewer_change("correct") + + def revert(self): + for item in self: + reviews = item.review_ids.filtered( + lambda record: record.status in ["waiting", "pending"] + ) + for review in reviews: + review.reviewer_ids = review._get_reviewers() + item._notify_reviewer_change("revert") diff --git a/base_tier_validation_correction/models/tier_validation.py b/base_tier_validation_correction/models/tier_validation.py index 1da245165..cb2388c79 100644 --- a/base_tier_validation_correction/models/tier_validation.py +++ b/base_tier_validation_correction/models/tier_validation.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import models +from odoo.fields import Domain from odoo.tools.safe_eval import safe_eval @@ -11,7 +12,7 @@ class TierValidation(models.AbstractModel): def view_tier_correction(self): self.ensure_one() # Caller document - res_model = self.env["ir.model"].search([("model", "=", self._name)]) + res_model = self.env["ir.model"].search(Domain("model", "=", self._name)) # Prepare to redirect to Tier Correction action = self.env.ref("base_tier_validation_correction.tier_correction_action") result = action.sudo().read()[0] @@ -29,11 +30,13 @@ def view_tier_correction(self): ) result["context"] = ctx items = self.env["tier.correction.item"].search_fetch( - [("res_model", "=", self._name), ("res_id", "=", self.id)], + Domain("res_model", "=", self._name) & Domain("res_id", "=", self.id), ["correction_id"], ) if len(items) > 0: # Already has corrections, show them. - result["domain"] = [("id", "in", items.mapped("correction_id").ids)] + result["domain"] = list( + Domain("id", "in", items.mapped("correction_id").ids) + ) else: # No correction, create one res = self.env.ref( "base_tier_validation_correction.tier_correction_view_form", False diff --git a/base_tier_validation_correction/security/correction_groups.xml b/base_tier_validation_correction/security/correction_groups.xml index bf950cd92..49c8081b5 100644 --- a/base_tier_validation_correction/security/correction_groups.xml +++ b/base_tier_validation_correction/security/correction_groups.xml @@ -1,11 +1,15 @@ - + Tier Review Correction + + + Allowed + diff --git a/base_tier_validation_correction/tests/test_tier_validation.py b/base_tier_validation_correction/tests/test_tier_validation.py index 0d6bad1b7..273e2fdec 100644 --- a/base_tier_validation_correction/tests/test_tier_validation.py +++ b/base_tier_validation_correction/tests/test_tier_validation.py @@ -2,20 +2,29 @@ # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). from datetime import timedelta -from odoo import fields +from odoo import Command, fields from odoo.exceptions import ValidationError +from odoo.orm.model_classes import add_to_registry from odoo.addons.base_tier_validation.tests.common import CommonTierValidation class TierTierValidation(CommonTierValidation): - def setUp(self): - super().setUp() - + @classmethod + def setUpClass(cls): + super().setUpClass() from .tier_validation_tester import TierValidationTester - self.loader.update_registry((TierValidationTester,)) + add_to_registry(cls.registry, TierValidationTester) + cls.registry._setup_models__(cls.env.cr, ["tier.validation.tester"]) + cls.registry.init_models( + cls.env.cr, + ["tier.validation.tester"], + {"models_to_check": True}, + ) + def setUp(self): + super().setUp() self.test_record.name = "test" def test_01_tier_correction(self): @@ -27,7 +36,8 @@ def test_01_tier_correction(self): """ # User 2, request validation doc_user2 = self.test_record.with_user(self.test_user_2.id) - doc_user2.request_validation() + reviews = doc_user2.request_validation() + self.assertEqual(reviews.status, "pending") self.assertFalse(doc_user2.can_review) # User 1, is the reviewer as specified in the tier.definition doc_user1 = self.test_record.with_user(self.test_user_1.id) @@ -43,8 +53,8 @@ def test_01_tier_correction(self): "search_name": res["context"].get("default_search_name"), "model_id": res["context"].get("default_model_id"), "correction_type": res["context"].get("default_correction_type"), - "new_reviewer_ids": [self.test_user_2.id], - "old_reviewer_ids": [self.test_user_1.id], + "new_reviewer_ids": [Command.set(self.test_user_2.ids)], + "old_reviewer_ids": [Command.set(self.test_user_1.ids)], } ) # Only on state = 'prepare', to allow correction @@ -96,7 +106,8 @@ def test_01_tier_correction_by_scheduler(self): """ # User 2, request validation doc_user2 = self.test_record.with_user(self.test_user_2.id) - doc_user2.request_validation() + reviews = doc_user2.request_validation() + self.assertEqual(reviews.status, "pending") self.assertFalse(doc_user2.can_review) # User 1, is the reviewer as specified in the tier.definition doc_user1 = self.test_record.with_user(self.test_user_1.id) @@ -112,31 +123,21 @@ def test_01_tier_correction_by_scheduler(self): "search_name": res["context"].get("default_search_name"), "model_id": res["context"].get("default_model_id"), "correction_type": res["context"].get("default_correction_type"), - "new_reviewer_ids": [self.test_user_2.id], + "new_reviewer_ids": [Command.set(self.test_user_2.ids)], } ) # Run Schedulder, to correct correction.date_schedule_correct = fields.Datetime.now() - scheduler = self.env.ref( - "base_tier_validation_correction.tier_correction_scheduler" - ) correction.action_prepare() self.assertEqual(correction.state, "prepare") - scheduler.method_direct_trigger() - doc_user2.invalidate_recordset() + self.env["tier.correction"]._tier_correction_auto_run() self.assertTrue(doc_user2.can_review) - doc_user1.invalidate_recordset() self.assertFalse(doc_user1.can_review) # Run Schedulder, to revert with self.assertRaises(ValidationError): correction.date_schedule_revert = fields.Datetime.now() - timedelta(days=1) correction.date_schedule_revert = fields.Datetime.now() - scheduler = self.env.ref( - "base_tier_validation_correction.tier_correction_scheduler" - ) self.assertEqual(correction.state, "done") - scheduler.method_direct_trigger() - doc_user2.invalidate_recordset() + self.env["tier.correction"]._tier_correction_auto_run() self.assertTrue(doc_user1.can_review) - doc_user1.invalidate_recordset() self.assertFalse(doc_user2.can_review) diff --git a/base_tier_validation_correction/views/tier_correction_view.xml b/base_tier_validation_correction/views/tier_correction_view.xml index a5c3b5e9a..4513cb5f9 100644 --- a/base_tier_validation_correction/views/tier_correction_view.xml +++ b/base_tier_validation_correction/views/tier_correction_view.xml @@ -231,7 +231,7 @@ name="reviewer" domain="[('correction_type', '=', 'reviewer')]" /> - + Date: Wed, 13 May 2026 15:00:59 +0000 Subject: [PATCH 13/25] [UPD] Update base_tier_validation_correction.pot --- .../i18n/base_tier_validation_correction.pot | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot index 1e4eaa01e..663279f44 100644 --- a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot +++ b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -75,6 +75,11 @@ msgstr "" msgid "Affected Tier Reviews" msgstr "" +#. module: base_tier_validation_correction +#: model:res.groups,name:base_tier_validation_correction.group_tier_correction +msgid "Allowed" +msgstr "" + #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Are you sure to reassign new reviewer(s) for affected tier reviews?" @@ -179,6 +184,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__display_name msgid "Display Name" msgstr "" @@ -212,11 +218,6 @@ msgstr "" msgid "Font awesome icon e.g. fa-tasks" msgstr "" -#. module: base_tier_validation_correction -#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search -msgid "Group By" -msgstr "" - #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__has_message msgid "Has Message" @@ -226,6 +227,7 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__id msgid "ID" msgstr "" @@ -492,7 +494,7 @@ msgstr "" #. module: base_tier_validation_correction #. odoo-python -#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#: code:addons/base_tier_validation_correction/models/tier_correction_item.py:0 msgid "" "The Correction '%(name)s', corrrected reviewers on '%(reviews)s' to " "'%(reviewers)s'" @@ -500,7 +502,7 @@ msgstr "" #. module: base_tier_validation_correction #. odoo-python -#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +#: code:addons/base_tier_validation_correction/models/tier_correction_item.py:0 msgid "" "The Correction '%(name)s', reverted reviewers on '%(reviews)s' back to " "'%(reviewers)s'" @@ -538,7 +540,7 @@ msgstr "" #: model:ir.actions.act_window,name:base_tier_validation_correction.tier_correction_action #: model:ir.model,name:base_tier_validation_correction.model_tier_correction #: model:ir.ui.menu,name:base_tier_validation_correction.menu_tier_correction -#: model:res.groups,name:base_tier_validation_correction.group_tier_correction +#: model:res.groups.privilege,name:base_tier_validation_correction.privilege_tier_correction msgid "Tier Review Correction" msgstr "" From ca209b122b3a587a20ec80c043565c0c6e9ab059 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 13 May 2026 15:04:11 +0000 Subject: [PATCH 14/25] [BOT] post-merge updates --- base_tier_validation_correction/README.rst | 2 +- base_tier_validation_correction/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index 2474be4a9..02a5da6e1 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -11,7 +11,7 @@ Base Tier Validation Correction !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:4a81d2472d4cf81cd1b1c54ee9f8df778654d8f3888ba34b66837e6b9110fbbc + !! source digest: sha256:ab9784cd2cd136951a13278cb009536b8e512a15179d73a1c49d32bba5c96787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index f18b59374..aee205bb5 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -372,7 +372,7 @@

    Base Tier Validation Correction

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:4a81d2472d4cf81cd1b1c54ee9f8df778654d8f3888ba34b66837e6b9110fbbc +!! source digest: sha256:ab9784cd2cd136951a13278cb009536b8e512a15179d73a1c49d32bba5c96787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Alpha License: AGPL-3 OCA/tier-validation Translate me on Weblate Try me on Runboat

    This module provide a new operation to correct the information in From 4469d555de9b0f7e1e1677e12180832ecbcb0e9c Mon Sep 17 00:00:00 2001 From: Bosd Date: Wed, 13 May 2026 20:03:21 +0000 Subject: [PATCH 15/25] Added translation using Weblate (Dutch) --- base_tier_validation_correction/i18n/nl.po | 581 +++++++++++++++++++++ 1 file changed, 581 insertions(+) create mode 100644 base_tier_validation_correction/i18n/nl.po diff --git a/base_tier_validation_correction/i18n/nl.po b/base_tier_validation_correction/i18n/nl.po new file mode 100644 index 000000000..7d273ef9f --- /dev/null +++ b/base_tier_validation_correction/i18n/nl.po @@ -0,0 +1,581 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation_correction +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Name" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_ids +msgid "Activities" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_state +msgid "Activity State" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Actual Correct" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_correct +msgid "Actual Correction Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Actual Revert" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_revert +msgid "Actual Revert Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__reference +msgid "Affected Documents" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.act_window,name:base_tier_validation_correction.view_affected_tier_reviews_action +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__review_ids +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Affected Tier Reviews" +msgstr "" + +#. module: base_tier_validation_correction +#: model:res.groups,name:base_tier_validation_correction.group_tier_correction +msgid "Allowed" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Are you sure to reassign new reviewer(s) for affected tier reviews?" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Are you sure to revert to old reviewer(s) for affected tier reviews?" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Cancel" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_validation_label_forward +msgid "Change Reviewer" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Change Reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.view_affected_tier_reviews_form +msgid "Close" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__done +msgid "Corrected" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__correction_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Correction Details" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__correction_type +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Correction Type" +msgstr "" + +#. module: base_tier_validation_correction +#. odoo-python +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +msgid "Correction is allowed on state = 'done' only" +msgstr "" + +#. module: base_tier_validation_correction +#. odoo-python +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +msgid "Correction is allowed on state = 'prepare' only" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_uid +msgid "Created by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_date +msgid "Created on" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "" +"Default new reviewers to be assigned to the correction. This value can be overwritten in\n" +" Correction Detail." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__name +msgid "Description" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__draft +msgid "Draft" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Find documents with pending reviews by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__old_reviewer_ids +msgid "Find documents with tier reviews matching some reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__has_message +msgid "Has Message" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__item_ids +msgid "Item" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_uid +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_date +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Make Correcton" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_ids +msgid "Messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__search_name +msgid "Name Search" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids +msgid "New Reviewers" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model_id +msgid "On Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__old_reviewer_ids +msgid "Original Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Prepare" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__prepare +msgid "Preparing" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__new_reviewer_ids +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__correction_type__reviewer +msgid "Reassign Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__new_reviewer_ids +msgid "Reassign these reviewers to the tier reviews of the found document" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Reassign to new value" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__reference +msgid "Reference" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_id +msgid "Res" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_model +msgid "Res Model" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__resource_ref +msgid "Resource" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Revert Back" +msgstr "" + +#. module: base_tier_validation_correction +#. odoo-python +#: code:addons/base_tier_validation_correction/models/tier_correction.py:0 +msgid "Revert Date should be after Correct Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__revert +msgid "Reverted" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__review_ids +msgid "Review" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search +msgid "Reviewer" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Reviewer(s)" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Action" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Correct" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_correct +msgid "Scheduled Correction Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled Revert" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_revert +msgid "Scheduled Revert Date" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Scheduled date/time to auto correct and/or revert by" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Set to Draft" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_affected_tier_reviews +msgid "Show Affected Tier Reviews" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__state +msgid "Status" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: base_tier_validation_correction +#. odoo-python +#: code:addons/base_tier_validation_correction/models/tier_correction_item.py:0 +msgid "" +"The Correction '%(name)s', corrrected reviewers on '%(reviews)s' to " +"'%(reviewers)s'" +msgstr "" + +#. module: base_tier_validation_correction +#. odoo-python +#: code:addons/base_tier_validation_correction/models/tier_correction_item.py:0 +msgid "" +"The Correction '%(name)s', reverted reviewers on '%(reviews)s' back to " +"'%(reviewers)s'" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids +msgid "" +"These reviewers will overwrite the existing reviewer_ids in tier.review" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "" +"This is optional search criteria to find matched document into Correction Details.\n" +" Only document with pending reviews will be listed." +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "Tier Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_tier_correction_item +msgid "Tier Correction Detail" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.server,name:base_tier_validation_correction.tier_correction_scheduler_ir_actions_server +msgid "Tier Correction Scheduler" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.actions.act_window,name:base_tier_validation_correction.tier_correction_action +#: model:ir.model,name:base_tier_validation_correction.model_tier_correction +#: model:ir.ui.menu,name:base_tier_validation_correction.menu_tier_correction +#: model:res.groups.privilege,name:base_tier_validation_correction.privilege_tier_correction +msgid "Tier Review Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model,name:base_tier_validation_correction.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation_correction +#: model:mail.message.subtype,name:base_tier_validation_correction.mt_tier_validation_correction +msgid "Tier Validation Correction" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__review_ids +msgid "Tier reivews that will be affected by this correction." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: base_tier_validation_correction +#: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form +msgid "e.g. Correction for..." +msgstr "" From d0a4138ba75deedd76d3f5de2895a5974209e4c6 Mon Sep 17 00:00:00 2001 From: Bosd Date: Wed, 13 May 2026 20:04:56 +0000 Subject: [PATCH 16/25] Translated using Weblate (Dutch) Currently translated at 100.0% (105 of 105 strings) Translation: tier-validation-19.0/tier-validation-19.0-base_tier_validation_correction Translate-URL: https://translation.odoo-community.org/projects/tier-validation-19-0/tier-validation-19-0-base_tier_validation_correction/nl/ --- base_tier_validation_correction/i18n/nl.po | 218 ++++++++++++--------- 1 file changed, 123 insertions(+), 95 deletions(-) diff --git a/base_tier_validation_correction/i18n/nl.po b/base_tier_validation_correction/i18n/nl.po index 7d273ef9f..d99580297 100644 --- a/base_tier_validation_correction/i18n/nl.po +++ b/base_tier_validation_correction/i18n/nl.po @@ -6,168 +6,174 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-05-13 20:06+0000\n" +"Last-Translator: Bosd \n" "Language-Team: none\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Name" -msgstr "" +msgstr "Naam" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction msgid "Action Needed" -msgstr "" +msgstr "Actie vereist" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_ids msgid "Activities" -msgstr "" +msgstr "Activiteiten" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_decoration msgid "Activity Exception Decoration" -msgstr "" +msgstr "Activiteit uitzondering decoratie" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_state msgid "Activity State" -msgstr "" +msgstr "Activiteitsfase" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_icon msgid "Activity Type Icon" -msgstr "" +msgstr "Activiteitstype-icoon" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Actual Correct" -msgstr "" +msgstr "Werkelijke correctie" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_correct msgid "Actual Correction Date" -msgstr "" +msgstr "Werkelijke correctiedatum" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Actual Revert" -msgstr "" +msgstr "Werkelijke terugdraaiing" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_actual_revert msgid "Actual Revert Date" -msgstr "" +msgstr "Werkelijke terugdraaidatum" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__reference msgid "Affected Documents" -msgstr "" +msgstr "Betrokken documenten" #. module: base_tier_validation_correction #: model:ir.actions.act_window,name:base_tier_validation_correction.view_affected_tier_reviews_action #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__review_ids #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Affected Tier Reviews" -msgstr "" +msgstr "Betrokken niveaubeoordelingen" #. module: base_tier_validation_correction #: model:res.groups,name:base_tier_validation_correction.group_tier_correction msgid "Allowed" -msgstr "" +msgstr "Toegestaan" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Are you sure to reassign new reviewer(s) for affected tier reviews?" msgstr "" +"Weet u zeker dat u nieuwe beoordelaar(s) wilt toewijzen voor de betrokken " +"niveaubeoordelingen?" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Are you sure to revert to old reviewer(s) for affected tier reviews?" msgstr "" +"Weet u zeker dat u de oude beoordelaar(s) wilt herstellen voor de betrokken " +"niveaubeoordelingen?" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_attachment_count msgid "Attachment Count" -msgstr "" +msgstr "Aantal bijlagen" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Cancel" -msgstr "" +msgstr "Annuleren" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__cancel msgid "Cancelled" -msgstr "" +msgstr "Geannuleerd" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_validation_label_forward msgid "Change Reviewer" -msgstr "" +msgstr "Beoordelaar wijzigen" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Change Reviewers" -msgstr "" +msgstr "Beoordelaars wijzigen" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.view_affected_tier_reviews_form msgid "Close" -msgstr "" +msgstr "Sluiten" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__done msgid "Corrected" -msgstr "" +msgstr "Gecorrigeerd" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__correction_id #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Correction" -msgstr "" +msgstr "Correctie" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Correction Details" -msgstr "" +msgstr "Correctiedetails" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__correction_type #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Correction Type" -msgstr "" +msgstr "Correctietype" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 msgid "Correction is allowed on state = 'done' only" -msgstr "" +msgstr "Correctie is alleen toegestaan bij status = 'gereed'" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 msgid "Correction is allowed on state = 'prepare' only" -msgstr "" +msgstr "Correctie is alleen toegestaan bij status = 'voorbereiden'" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_uid msgid "Created by" -msgstr "" +msgstr "Aangemaakt door" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__create_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__create_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__create_date msgid "Created on" -msgstr "" +msgstr "Aangemaakt op" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form @@ -175,11 +181,14 @@ msgid "" "Default new reviewers to be assigned to the correction. This value can be overwritten in\n" " Correction Detail." msgstr "" +"Standaard nieuwe beoordelaars die aan de correctie worden toegewezen. Deze " +"waarde kan worden overschreven in de\n" +" correctiedetails." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__name msgid "Description" -msgstr "" +msgstr "Omschrijving" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__display_name @@ -187,42 +196,44 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__display_name #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__display_name msgid "Display Name" -msgstr "" +msgstr "Schermnaam" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__draft msgid "Draft" -msgstr "" +msgstr "Concept" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Find documents with pending reviews by" -msgstr "" +msgstr "Zoek documenten met openstaande beoordelingen op" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__old_reviewer_ids msgid "Find documents with tier reviews matching some reviewers" msgstr "" +"Zoek documenten met niveaubeoordelingen die overeenkomen met bepaalde " +"beoordelaars" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_follower_ids msgid "Followers" -msgstr "" +msgstr "Volgers" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_partner_ids msgid "Followers (Partners)" -msgstr "" +msgstr "Volgers (Relaties)" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_type_icon msgid "Font awesome icon e.g. fa-tasks" -msgstr "" +msgstr "Font Awesome icoon, bijv. fa-tasks" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__has_message msgid "Has Message" -msgstr "" +msgstr "Heeft bericht" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__id @@ -230,259 +241,262 @@ msgstr "" #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__id #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_validation__id msgid "ID" -msgstr "" +msgstr "ID" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_exception_icon msgid "Icon" -msgstr "" +msgstr "Icoon" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_icon msgid "Icon to indicate an exception activity." -msgstr "" +msgstr "Icoon om een uitzonderingsactiviteit aan te geven." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction msgid "If checked, new messages require your attention." -msgstr "" +msgstr "Indien aangevinkt vereisen nieuwe berichten uw aandacht." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error msgid "If checked, some messages have a delivery error." -msgstr "" +msgstr "Indien aangevinkt hebben sommige berichten een leveringsfout." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_is_follower msgid "Is Follower" -msgstr "" +msgstr "Is volger" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__item_ids msgid "Item" -msgstr "" +msgstr "Item" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_uid #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Laatst bijgewerkt door" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__write_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__write_date #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__write_date msgid "Last Updated on" -msgstr "" +msgstr "Laatst bijgewerkt op" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Make Correcton" -msgstr "" +msgstr "Correctie uitvoeren" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error msgid "Message Delivery error" -msgstr "" +msgstr "Bericht leveringsfout" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_ids msgid "Messages" -msgstr "" +msgstr "Berichten" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Model" -msgstr "" +msgstr "Model" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__my_activity_date_deadline msgid "My Activity Deadline" -msgstr "" +msgstr "Mijn activiteit deadline" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__search_name msgid "Name Search" -msgstr "" +msgstr "Zoeken op naam" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids msgid "New Reviewers" -msgstr "" +msgstr "Nieuwe beoordelaars" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_date_deadline msgid "Next Activity Deadline" -msgstr "" +msgstr "Volgende activiteit deadline" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_summary msgid "Next Activity Summary" -msgstr "" +msgstr "Volgende activiteit samenvatting" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_type_id msgid "Next Activity Type" -msgstr "" +msgstr "Volgende activiteitstype" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_needaction_counter msgid "Number of Actions" -msgstr "" +msgstr "Aantal acties" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__message_has_error_counter msgid "Number of errors" -msgstr "" +msgstr "Aantal fouten" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_needaction_counter msgid "Number of messages requiring action" -msgstr "" +msgstr "Aantal berichten die actie vereisen" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__message_has_error_counter msgid "Number of messages with delivery error" -msgstr "" +msgstr "Aantal berichten met leveringsfout" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__model_id msgid "On Model" -msgstr "" +msgstr "Op model" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__old_reviewer_ids msgid "Original Reviewer(s)" -msgstr "" +msgstr "Oorspronkelijke beoordelaar(s)" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Prepare" -msgstr "" +msgstr "Voorbereiden" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__prepare msgid "Preparing" -msgstr "" +msgstr "Voorbereiden" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__new_reviewer_ids #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__correction_type__reviewer msgid "Reassign Reviewer(s)" -msgstr "" +msgstr "Beoordelaar(s) opnieuw toewijzen" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__new_reviewer_ids msgid "Reassign these reviewers to the tier reviews of the found document" msgstr "" +"Wijs deze beoordelaars opnieuw toe aan de niveaubeoordelingen van het " +"gevonden document" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Reassign to new value" -msgstr "" +msgstr "Opnieuw toewijzen aan nieuwe waarde" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__reference msgid "Reference" -msgstr "" +msgstr "Referentie" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_id msgid "Res" -msgstr "" +msgstr "Res" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__res_model msgid "Res Model" -msgstr "" +msgstr "Res-model" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__resource_ref msgid "Resource" -msgstr "" +msgstr "Bron" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__activity_user_id msgid "Responsible User" -msgstr "" +msgstr "Verantwoordelijke gebruiker" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Revert Back" -msgstr "" +msgstr "Terugdraaien" #. module: base_tier_validation_correction #. odoo-python #: code:addons/base_tier_validation_correction/models/tier_correction.py:0 msgid "Revert Date should be after Correct Date" -msgstr "" +msgstr "De terugdraaidatum moet na de correctiedatum liggen" #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__revert msgid "Reverted" -msgstr "" +msgstr "Teruggedraaid" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_affected_tier_reviews__review_ids msgid "Review" -msgstr "" +msgstr "Beoordeling" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_search msgid "Reviewer" -msgstr "" +msgstr "Beoordelaar" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Reviewer(s)" -msgstr "" +msgstr "Beoordelaar(s)" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Action" -msgstr "" +msgstr "Geplande actie" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Correct" -msgstr "" +msgstr "Geplande correctie" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_correct msgid "Scheduled Correction Date" -msgstr "" +msgstr "Geplande correctiedatum" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled Revert" -msgstr "" +msgstr "Geplande terugdraaiing" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__date_schedule_revert msgid "Scheduled Revert Date" -msgstr "" +msgstr "Geplande terugdraaidatum" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Scheduled date/time to auto correct and/or revert by" msgstr "" +"Geplande datum/tijd voor automatische correctie en/of terugdraaiing door" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Set to Draft" -msgstr "" +msgstr "Zet op concept" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_affected_tier_reviews msgid "Show Affected Tier Reviews" -msgstr "" +msgstr "Toon betrokken niveaubeoordelingen" #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__state msgid "Status" -msgstr "" +msgstr "Status" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_state @@ -492,6 +506,10 @@ msgid "" "Today: Activity date is today\n" "Planned: Future activities." msgstr "" +"Status gebaseerd op activiteiten\n" +"Te laat: Deadline is al verstreken\n" +"Vandaag: Activiteitdatum is vandaag\n" +"Gepland: Toekomstige activiteiten." #. module: base_tier_validation_correction #. odoo-python @@ -500,6 +518,8 @@ msgid "" "The Correction '%(name)s', corrrected reviewers on '%(reviews)s' to " "'%(reviewers)s'" msgstr "" +"De correctie '%(name)s' heeft de beoordelaars op '%(reviews)s' gewijzigd " +"naar '%(reviewers)s'" #. module: base_tier_validation_correction #. odoo-python @@ -508,12 +528,16 @@ msgid "" "The Correction '%(name)s', reverted reviewers on '%(reviews)s' back to " "'%(reviewers)s'" msgstr "" +"De correctie '%(name)s' heeft de beoordelaars op '%(reviews)s' teruggezet " +"naar '%(reviewers)s'" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids msgid "" "These reviewers will overwrite the existing reviewer_ids in tier.review" msgstr "" +"Deze beoordelaars zullen de bestaande reviewer_ids in tier.review " +"overschrijven" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form @@ -521,21 +545,25 @@ msgid "" "This is optional search criteria to find matched document into Correction Details.\n" " Only document with pending reviews will be listed." msgstr "" +"Dit zijn optionele zoekcriteria om overeenkomende documenten te vinden in de " +"correctiedetails.\n" +" Alleen documenten met openstaande " +"beoordelingen worden getoond." #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "Tier Correction" -msgstr "" +msgstr "Niveaucorrectie" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_tier_correction_item msgid "Tier Correction Detail" -msgstr "" +msgstr "Niveaucorrectie detail" #. module: base_tier_validation_correction #: model:ir.actions.server,name:base_tier_validation_correction.tier_correction_scheduler_ir_actions_server msgid "Tier Correction Scheduler" -msgstr "" +msgstr "Niveaucorrectie planner" #. module: base_tier_validation_correction #: model:ir.actions.act_window,name:base_tier_validation_correction.tier_correction_action @@ -543,39 +571,39 @@ msgstr "" #: model:ir.ui.menu,name:base_tier_validation_correction.menu_tier_correction #: model:res.groups.privilege,name:base_tier_validation_correction.privilege_tier_correction msgid "Tier Review Correction" -msgstr "" +msgstr "Niveaubeoordeling correctie" #. module: base_tier_validation_correction #: model:ir.model,name:base_tier_validation_correction.model_tier_validation msgid "Tier Validation (abstract)" -msgstr "" +msgstr "Niveauvalidatie (abstract)" #. module: base_tier_validation_correction #: model:mail.message.subtype,name:base_tier_validation_correction.mt_tier_validation_correction msgid "Tier Validation Correction" -msgstr "" +msgstr "Niveauvalidatie correctie" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction_item__review_ids msgid "Tier reivews that will be affected by this correction." -msgstr "" +msgstr "Niveaubeoordelingen die door deze correctie worden beïnvloed." #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__activity_exception_decoration msgid "Type of the exception activity on record." -msgstr "" +msgstr "Type van de uitzonderingsactiviteit op het record." #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__website_message_ids msgid "Website Messages" -msgstr "" +msgstr "Websiteberichten" #. module: base_tier_validation_correction #: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__website_message_ids msgid "Website communication history" -msgstr "" +msgstr "Website communicatiehistorie" #. module: base_tier_validation_correction #: model_terms:ir.ui.view,arch_db:base_tier_validation_correction.tier_correction_view_form msgid "e.g. Correction for..." -msgstr "" +msgstr "bijv. Correctie voor..." From 811fd6cd0bcff52c12662bdd62c979b4dcbb1d3f Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Mon, 5 Oct 2026 12:57:51 +0200 Subject: [PATCH 17/25] [IMP] base_tier_validation_correction: Documents filter instead of Name Search Name Search used the target model's name search, which is often not what users expect: on journal entries it matches the entry number, still '/' for drafts, so searching "Draft Invoice" found nothing, silently. Replace it with a Documents filter edited with the domain widget, like the "Apply On" domain of tier definitions: filter on partner, date, state... The widget shows how many documents match while editing. Documents without open reviews are still never included. Opened from a document with "Change Reviewer", the filter targets that document. The post-migration carries existing Name Search values over as a filter on the display name, which is what the name search matched, and drops the old column. The manifest version goes to 19.0.1.1.0 with it: pylint-odoo requires the manifest to be at least the version of its migration scripts. --- base_tier_validation_correction/README.rst | 3 +- .../__manifest__.py | 2 +- .../migrations/19.0.1.1.0/post-migration.py | 19 ++++ .../models/tier_correction.py | 27 ++++-- .../models/tier_validation.py | 2 +- .../readme/USAGE.md | 3 +- .../static/description/index.html | 3 +- .../tests/__init__.py | 1 + .../test_tier_correction_document_domain.py | 89 +++++++++++++++++++ .../tests/test_tier_validation.py | 4 +- .../views/tier_correction_view.xml | 7 +- 11 files changed, 147 insertions(+), 13 deletions(-) create mode 100644 base_tier_validation_correction/migrations/19.0.1.1.0/post-migration.py create mode 100644 base_tier_validation_correction/tests/test_tier_correction_document_domain.py diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index 02a5da6e1..860884c5b 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -79,7 +79,8 @@ To create/edit Tier Review Correction - Find documents with pending reviews by, - Reviewer(s) - - Name Search + - Documents: a filter on the documents themselves, e.g. a partner, a + date or a state - Then set default value to change, in this case, diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index 9dbae3cf5..13fb86d02 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "19.0.1.0.0", + "version": "19.0.1.1.0", "category": "Tools", "website": "https://github.com/OCA/tier-validation", "author": "Ecosoft,Odoo Community Association (OCA)", diff --git a/base_tier_validation_correction/migrations/19.0.1.1.0/post-migration.py b/base_tier_validation_correction/migrations/19.0.1.1.0/post-migration.py new file mode 100644 index 000000000..13f708532 --- /dev/null +++ b/base_tier_validation_correction/migrations/19.0.1.1.0/post-migration.py @@ -0,0 +1,19 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tools.sql import column_exists + + +def migrate(cr, version): + """Name Search became the Documents filter. Carry each search over as a + filter on the display name, which is what the name search matched.""" + if not column_exists(cr, "tier_correction", "search_name"): + return + cr.execute( + "SELECT id, search_name FROM tier_correction " + "WHERE search_name IS NOT NULL AND search_name != ''" + ) + for correction_id, name in cr.fetchall(): + cr.execute( + "UPDATE tier_correction SET document_domain = %s WHERE id = %s", + (str([("display_name", "ilike", name)]), correction_id), + ) + cr.execute("ALTER TABLE tier_correction DROP COLUMN search_name") diff --git a/base_tier_validation_correction/models/tier_correction.py b/base_tier_validation_correction/models/tier_correction.py index 179a25b2d..19a9e5ccd 100644 --- a/base_tier_validation_correction/models/tier_correction.py +++ b/base_tier_validation_correction/models/tier_correction.py @@ -5,6 +5,7 @@ from odoo import Command, api, fields, models from odoo.exceptions import ValidationError from odoo.fields import Domain +from odoo.tools.safe_eval import datetime, dateutil, safe_eval _logger = logging.getLogger(__name__) @@ -38,8 +39,11 @@ class TierCorrection(models.Model): default="reviewer", required=True, ) - search_name = fields.Char( - string="Name Search", + document_domain = fields.Char( + string="Documents", + default="[]", + help="Only include the documents matching this filter. Documents " + "without a waiting or pending review are never included.", ) old_reviewer_ids = fields.Many2many( comodel_name="res.users", @@ -111,9 +115,7 @@ def search_document(self): if rec.correction_type == "reviewer": doc_domain = Domain("review_ids.status", "in", ["waiting", "pending"]) review_domain = Domain("status", "in", ["waiting", "pending"]) - if rec.search_name: - doc_ids = self.env[rec.model].name_search(rec.search_name) - doc_domain &= Domain("id", "in", list(dict(doc_ids).keys())) + doc_domain &= Domain(rec._get_document_domain()) if rec.old_reviewer_ids: doc_domain &= Domain( "review_ids.reviewer_ids", "in", rec.old_reviewer_ids.ids @@ -142,6 +144,21 @@ def search_document(self): ) rec.write({"item_ids": items}) + def _get_document_domain(self): + """The document filter, evaluated like a domain in a view: it may use + uid, user and dates (e.g. "created in the last 30 days").""" + self.ensure_one() + return safe_eval( + self.document_domain or "[]", + { + "uid": self.env.uid, + "user": self.env.user, + "context_today": lambda: fields.Date.context_today(self), + "datetime": datetime, + "relativedelta": dateutil.relativedelta.relativedelta, + }, + ) + @api.depends("item_ids") def _compute_reference(self): for rec in self: diff --git a/base_tier_validation_correction/models/tier_validation.py b/base_tier_validation_correction/models/tier_validation.py index cb2388c79..d34e82ad1 100644 --- a/base_tier_validation_correction/models/tier_validation.py +++ b/base_tier_validation_correction/models/tier_validation.py @@ -24,7 +24,7 @@ def view_tier_correction(self): { "default_name": f"{self.display_name} ...", "default_model_id": res_model.id, - "default_search_name": self.display_name, + "default_document_domain": str([("id", "=", self.id)]), "default_correction_type": "reviewer", } ) diff --git a/base_tier_validation_correction/readme/USAGE.md b/base_tier_validation_correction/readme/USAGE.md index 0e0c978c2..531c77b1e 100644 --- a/base_tier_validation_correction/readme/USAGE.md +++ b/base_tier_validation_correction/readme/USAGE.md @@ -8,7 +8,8 @@ To create/edit Tier Review Correction - Document Model, i.e., Purchase order - Find documents with pending reviews by, - Reviewer(s) - - Name Search + - Documents: a filter on the documents themselves, e.g. a partner, + a date or a state - Then set default value to change, in this case, - New Reviewer(s) - Click button "Prepare", if any document matched, it should list in diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index aee205bb5..d88f24a0b 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -424,7 +424,8 @@

    Usage

  • Find documents with pending reviews by,
    • Reviewer(s)
    • -
    • Name Search
    • +
    • Documents: a filter on the documents themselves, e.g. a partner, a +date or a state
  • Then set default value to change, in this case,
      diff --git a/base_tier_validation_correction/tests/__init__.py b/base_tier_validation_correction/tests/__init__.py index b439a531d..dc986e308 100644 --- a/base_tier_validation_correction/tests/__init__.py +++ b/base_tier_validation_correction/tests/__init__.py @@ -1,3 +1,4 @@ # Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_tier_correction_document_domain from . import test_tier_validation diff --git a/base_tier_validation_correction/tests/test_tier_correction_document_domain.py b/base_tier_validation_correction/tests/test_tier_correction_document_domain.py new file mode 100644 index 000000000..5f4e0afcf --- /dev/null +++ b/base_tier_validation_correction/tests/test_tier_correction_document_domain.py @@ -0,0 +1,89 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import importlib.util +from pathlib import Path + +from odoo import Command +from odoo.orm.model_classes import add_to_registry + +from odoo.addons.base_tier_validation.tests.common import CommonTierValidation + + +class TestTierCorrectionDocumentDomain(CommonTierValidation): + @classmethod + def setUpClass(cls): + super().setUpClass() + from .tier_validation_tester import TierValidationTester + + add_to_registry(cls.registry, TierValidationTester) + cls.registry._setup_models__(cls.env.cr, ["tier.validation.tester"]) + cls.registry.init_models( + cls.env.cr, + ["tier.validation.tester"], + {"models_to_check": True}, + ) + + def _correction(self, document_domain): + return self.env["tier.correction"].create( + { + "name": "Correction", + "model_id": self.tester_model.id, + "document_domain": document_domain, + "new_reviewer_ids": [Command.set(self.test_user_2.ids)], + } + ) + + def test_document_domain_filters_documents(self): + """Only documents matching the filter, and with open reviews, are + listed.""" + other = self.test_model.create({"test_field": 1.0}) + (self.test_record | other).with_user(self.test_user_2).request_validation() + correction = self._correction(str([("id", "=", other.id)])) + correction.search_document() + self.assertEqual(correction.item_ids.resource_ref, other) + correction = self._correction("[]") + correction.search_document() + self.assertEqual(len(correction.item_ids), 2) + + def test_document_domain_with_dates(self): + """The filter is evaluated like a view domain, dates included.""" + self.test_record.with_user(self.test_user_2).request_validation() + correction = self._correction( + "[('create_date', '>=', " + "(context_today() - relativedelta(days=1)).strftime('%Y-%m-%d'))]" + ) + correction.search_document() + self.assertEqual(correction.item_ids.resource_ref, self.test_record) + + def test_change_reviewer_targets_the_document(self): + """Opened from a document, the correction filters on that document.""" + action = self.test_record.view_tier_correction() + self.assertEqual( + action["context"]["default_document_domain"], + str([("id", "=", self.test_record.id)]), + ) + + def test_migrate_name_search(self): + """A former Name Search becomes a filter on the display name.""" + correction = self._correction("[]") + cr = self.env.cr + cr.execute("ALTER TABLE tier_correction ADD COLUMN search_name varchar") + cr.execute( + "UPDATE tier_correction SET search_name = 'SO042' WHERE id = %s", + (correction.id,), + ) + path = Path(__file__).parents[1] / "migrations/19.0.1.1.0/post-migration.py" + spec = importlib.util.spec_from_file_location("post_migration", path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.migrate(cr, "19.0.1.0.0") + correction.invalidate_recordset() + self.assertEqual( + correction.document_domain, str([("display_name", "ilike", "SO042")]) + ) + cr.execute( + "SELECT 1 FROM information_schema.columns " + "WHERE table_name = 'tier_correction' AND column_name = 'search_name'" + ) + self.assertFalse(cr.fetchone()) + # Nothing to do the second time. + module.migrate(cr, "19.0.1.0.0") diff --git a/base_tier_validation_correction/tests/test_tier_validation.py b/base_tier_validation_correction/tests/test_tier_validation.py index 273e2fdec..a07983375 100644 --- a/base_tier_validation_correction/tests/test_tier_validation.py +++ b/base_tier_validation_correction/tests/test_tier_validation.py @@ -50,7 +50,7 @@ def test_01_tier_correction(self): correction = self.env["tier.correction"].create( { "name": res["context"].get("default_name"), - "search_name": res["context"].get("default_search_name"), + "document_domain": res["context"].get("default_document_domain"), "model_id": res["context"].get("default_model_id"), "correction_type": res["context"].get("default_correction_type"), "new_reviewer_ids": [Command.set(self.test_user_2.ids)], @@ -120,7 +120,7 @@ def test_01_tier_correction_by_scheduler(self): correction = self.env["tier.correction"].create( { "name": res["context"].get("default_name"), - "search_name": res["context"].get("default_search_name"), + "document_domain": res["context"].get("default_document_domain"), "model_id": res["context"].get("default_model_id"), "correction_type": res["context"].get("default_correction_type"), "new_reviewer_ids": [Command.set(self.test_user_2.ids)], diff --git a/base_tier_validation_correction/views/tier_correction_view.xml b/base_tier_validation_correction/views/tier_correction_view.xml index 4513cb5f9..3074c8493 100644 --- a/base_tier_validation_correction/views/tier_correction_view.xml +++ b/base_tier_validation_correction/views/tier_correction_view.xml @@ -109,7 +109,12 @@ widget="many2many_tags" string="Reviewer(s)" /> - +

      From b3f6cff27ddfc05aa75eae32803cc2a5789e50f8 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 5 Oct 2026 16:34:19 +0000 Subject: [PATCH 18/25] [UPD] Update base_tier_validation_correction.pot --- .../i18n/base_tier_validation_correction.pot | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot index 663279f44..287a9d321 100644 --- a/base_tier_validation_correction/i18n/base_tier_validation_correction.pot +++ b/base_tier_validation_correction/i18n/base_tier_validation_correction.pot @@ -188,6 +188,11 @@ msgstr "" msgid "Display Name" msgstr "" +#. module: base_tier_validation_correction +#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__document_domain +msgid "Documents" +msgstr "" + #. module: base_tier_validation_correction #: model:ir.model.fields.selection,name:base_tier_validation_correction.selection__tier_correction__state__draft msgid "Draft" @@ -301,11 +306,6 @@ msgstr "" msgid "My Activity Deadline" msgstr "" -#. module: base_tier_validation_correction -#: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__search_name -msgid "Name Search" -msgstr "" - #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction_item__new_reviewer_ids msgid "New Reviewers" @@ -351,6 +351,13 @@ msgstr "" msgid "On Model" msgstr "" +#. module: base_tier_validation_correction +#: model:ir.model.fields,help:base_tier_validation_correction.field_tier_correction__document_domain +msgid "" +"Only include the documents matching this filter. Documents without a waiting" +" or pending review are never included." +msgstr "" + #. module: base_tier_validation_correction #: model:ir.model.fields,field_description:base_tier_validation_correction.field_tier_correction__old_reviewer_ids msgid "Original Reviewer(s)" From abcd56642ac67a0463b909c586dfcfe96c5aa7c4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 5 Oct 2026 16:38:13 +0000 Subject: [PATCH 19/25] [BOT] post-merge updates --- base_tier_validation_correction/README.rst | 2 +- base_tier_validation_correction/__manifest__.py | 2 +- base_tier_validation_correction/static/description/index.html | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/base_tier_validation_correction/README.rst b/base_tier_validation_correction/README.rst index 860884c5b..a490efe89 100644 --- a/base_tier_validation_correction/README.rst +++ b/base_tier_validation_correction/README.rst @@ -11,7 +11,7 @@ Base Tier Validation Correction !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ab9784cd2cd136951a13278cb009536b8e512a15179d73a1c49d32bba5c96787 + !! source digest: sha256:cab3f08a6bb5d11feecd182bdd765a3545818b3a5da0229ca2736f7b43650724 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/base_tier_validation_correction/__manifest__.py b/base_tier_validation_correction/__manifest__.py index 13fb86d02..cc5c1aa97 100644 --- a/base_tier_validation_correction/__manifest__.py +++ b/base_tier_validation_correction/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Tier Validation Correction", "summary": "Correct tier.review data after it has been created.", - "version": "19.0.1.1.0", + "version": "19.0.1.2.0", "category": "Tools", "website": "https://github.com/OCA/tier-validation", "author": "Ecosoft,Odoo Community Association (OCA)", diff --git a/base_tier_validation_correction/static/description/index.html b/base_tier_validation_correction/static/description/index.html index d88f24a0b..3414dda0c 100644 --- a/base_tier_validation_correction/static/description/index.html +++ b/base_tier_validation_correction/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Base Tier Validation Correction