From f9e3058378db0f1479d5befd82bec2f3b8c1bf13 Mon Sep 17 00:00:00 2001 From: Edwin Gonzales Date: Tue, 11 Mar 2025 09:08:59 +0800 Subject: [PATCH 1/2] [UPD] spp_change_request: Initial commit --- spp_change_request/__manifest__.py | 19 +---- spp_change_request/data/mail_activity.xml | 49 ------------- spp_change_request/data/sequences.xml | 17 ----- spp_change_request/models/__init__.py | 6 +- .../models/change_request_stage.py | 14 ---- spp_change_request/models/dms_directory.py | 7 -- spp_change_request/models/dms_file.py | 40 ----------- spp_change_request/models/mixins/__init__.py | 1 - .../mixins/validation_sequence_mixin.py | 34 --------- spp_change_request/models/registry.py | 14 ---- spp_change_request/views/dms_file_view.xml | 70 ------------------- spp_change_request/wizard/__init__.py | 2 - .../wizard/cancel_change_request.py | 42 ----------- .../wizard/cancel_change_request_view.xml | 41 ----------- .../wizard/confirm_user_assignment_view.xml | 43 ------------ .../wizard/reject_change_request.py | 40 ----------- .../wizard/reject_change_request_view.xml | 42 ----------- 17 files changed, 3 insertions(+), 478 deletions(-) delete mode 100644 spp_change_request/data/mail_activity.xml delete mode 100644 spp_change_request/data/sequences.xml delete mode 100644 spp_change_request/models/change_request_stage.py delete mode 100644 spp_change_request/models/dms_directory.py delete mode 100644 spp_change_request/models/dms_file.py delete mode 100644 spp_change_request/models/mixins/validation_sequence_mixin.py delete mode 100644 spp_change_request/models/registry.py delete mode 100644 spp_change_request/views/dms_file_view.xml delete mode 100644 spp_change_request/wizard/cancel_change_request.py delete mode 100644 spp_change_request/wizard/cancel_change_request_view.xml delete mode 100644 spp_change_request/wizard/confirm_user_assignment_view.xml delete mode 100644 spp_change_request/wizard/reject_change_request.py delete mode 100644 spp_change_request/wizard/reject_change_request_view.xml diff --git a/spp_change_request/__manifest__.py b/spp_change_request/__manifest__.py index efd5f70b9..ff9678ae1 100644 --- a/spp_change_request/__manifest__.py +++ b/spp_change_request/__manifest__.py @@ -17,6 +17,7 @@ }, "depends": [ "base", + "spp_change_request_base", "g2p_registry_base", "g2p_registry_individual", "g2p_registry_group", @@ -25,33 +26,17 @@ "spp_area", "spp_scan_id_document", "spp_dms", - # "dms_field", ], "data": [ "security/change_request_security.xml", "security/ir.model.access.csv", - "data/sequences.xml", - "data/mail_activity.xml", "data/dms.xml", - "wizard/confirm_user_assignment_view.xml", - "wizard/reject_change_request_view.xml", - "wizard/cancel_change_request_view.xml", "views/main_view.xml", "views/change_request_view.xml", "views/change_request_validation_sequence_view.xml", - "views/dms_file_view.xml", "views/registrant_view.xml", ], - "assets": { - "web.assets_backend": [ - "spp_change_request/static/src/scss/change_request.scss", - # will be obsolete once the DMS for change request is developed - # "spp_change_request/static/src/js/dms_preview.js", - ], - "web.assets_qweb": { - "/spp_change_request/static/src/xml/dms_preview_widget.xml", - }, - }, + "assets": {}, "demo": [], "images": [], "application": True, diff --git a/spp_change_request/data/mail_activity.xml b/spp_change_request/data/mail_activity.xml deleted file mode 100644 index b4a210f1a..000000000 --- a/spp_change_request/data/mail_activity.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - Change Request Pending Validation - spp.change.request - fa-clock-o - 0 - - - - Change Request For Validation - spp.change.request - fa-list - 0 - - - - Apply Change Request - spp.change.request - fa-floppy-o - 0 - - - - Reject Change Request - spp.change.request - fa-thumbs-down - 0 - - - - Cancel Request - spp.change.request - fa-ban - 0 - - - - Change Request Reset to Draft - spp.change.request - fa-undo - 0 - - - diff --git a/spp_change_request/data/sequences.xml b/spp_change_request/data/sequences.xml deleted file mode 100644 index 8319bda4f..000000000 --- a/spp_change_request/data/sequences.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Change Request Number - spp.change.request.num - no_gap - 6 - - - CR-%(range_year)s- - - - - diff --git a/spp_change_request/models/__init__.py b/spp_change_request/models/__init__.py index f10f26a87..f93891cc0 100644 --- a/spp_change_request/models/__init__.py +++ b/spp_change_request/models/__init__.py @@ -1,10 +1,6 @@ # Part of OpenSPP. See LICENSE file for full copyright and licensing details. +from . import change_request_targets from . import group_membership from . import change_request -from . import change_request_stage -from . import dms_file -from . import dms_directory -from . import registry from . import mixins -from . import change_request_targets diff --git a/spp_change_request/models/change_request_stage.py b/spp_change_request/models/change_request_stage.py deleted file mode 100644 index eb906bf42..000000000 --- a/spp_change_request/models/change_request_stage.py +++ /dev/null @@ -1,14 +0,0 @@ -# Part of OpenSPP. See LICENSE file for full copyright and licensing details. -import logging - -from odoo import fields, models - -_logger = logging.getLogger(__name__) - - -class ChangeRequestValidationStages(models.Model): - _name = "spp.change.request.validation.stage" - _description = "Change Request Validation Stage" - _order = "id" - - name = fields.Char("Stage") diff --git a/spp_change_request/models/dms_directory.py b/spp_change_request/models/dms_directory.py deleted file mode 100644 index dfac3ae45..000000000 --- a/spp_change_request/models/dms_directory.py +++ /dev/null @@ -1,7 +0,0 @@ -from odoo import fields, models - - -class SPPDMSDirectoryCustom(models.Model): - _inherit = "spp.dms.directory" - - change_request_id = fields.Many2one("spp.change.request", "Change Request") diff --git a/spp_change_request/models/dms_file.py b/spp_change_request/models/dms_file.py deleted file mode 100644 index a262c1849..000000000 --- a/spp_change_request/models/dms_file.py +++ /dev/null @@ -1,40 +0,0 @@ -import logging - -from odoo import _, fields, models - -_logger = logging.getLogger(__name__) - - -class SPPDMSFileCustom(models.Model): - _inherit = "spp.dms.file" - - change_request_id = fields.Many2one("spp.change.request", "Change Request") - - def action_save_and_close(self): - return {"type": "ir.actions.act_window_close"} - - def action_close(self): - return {"type": "ir.actions.act_window_close"} - - def action_attach_documents(self): - for rec in self: - form_id = self.env.ref("spp_change_request.view_dms_file_spp_custom_form").id - action = { - "type": "ir.actions.act_window", - "view_mode": "form", - "view_id": form_id, - "view_type": "form", - "res_model": "spp.dms.file", - "target": "new", - "res_id": rec.id, - } - dms_context = { - "category_readonly": True, - } - action.update( - { - "name": _("Upload Document: %s", rec.category_id.name), - "context": dms_context, - } - ) - return action diff --git a/spp_change_request/models/mixins/__init__.py b/spp_change_request/models/mixins/__init__.py index 31574cc26..96e27f508 100644 --- a/spp_change_request/models/mixins/__init__.py +++ b/spp_change_request/models/mixins/__init__.py @@ -1,4 +1,3 @@ # Part of OpenSPP. See LICENSE file for full copyright and licensing details. from . import source_mixin -from . import validation_sequence_mixin diff --git a/spp_change_request/models/mixins/validation_sequence_mixin.py b/spp_change_request/models/mixins/validation_sequence_mixin.py deleted file mode 100644 index add5dcd77..000000000 --- a/spp_change_request/models/mixins/validation_sequence_mixin.py +++ /dev/null @@ -1,34 +0,0 @@ -# Part of OpenSPP. See LICENSE file for full copyright and licensing details. -import logging - -from odoo import Command, api, fields, models - -_logger = logging.getLogger(__name__) - - -class ChangeRequestValidationSequenceMixin(models.AbstractModel): - """Change Request Validation Sequence mixin.""" - - _name = "spp.change.request.validation.sequence.mixin" - _description = "Change Request Validation Sequence Mixin" - - @api.model - def _default_validation_ids(self): - _logger.debug("DEBUG! _default_validation_ids: %s", self._name) - validations = self.env["spp.change.request.validation.sequence"].search([("request_type", "=", self._name)]) - if validations: - validation_ids = [] - for rec in validations: - validation_ids.append(Command.link(rec.id)) - _logger.debug("DEBUG! _default_validation_ids: validation_ids: %s", validation_ids) - return validation_ids - else: - return None - - validation_ids = fields.Many2many( - "spp.change.request.validation.sequence", - relation="spp_change_request_rel", - string="Validation Sequence", - default=_default_validation_ids, - required=True, - ) diff --git a/spp_change_request/models/registry.py b/spp_change_request/models/registry.py deleted file mode 100644 index ca7d93868..000000000 --- a/spp_change_request/models/registry.py +++ /dev/null @@ -1,14 +0,0 @@ -# Part of OpenSPP. See LICENSE file for full copyright and licensing details. - -from odoo import fields, models - - -class RegistryCRCustom(models.Model): - """ - Extends the res.partner model to link the change requests to the group registrants. - Filter applied and cancelled change requests only - """ - - _inherit = "res.partner" - - change_request_ids = fields.One2many("spp.change.request", "registrant_id", "Change Requests") diff --git a/spp_change_request/views/dms_file_view.xml b/spp_change_request/views/dms_file_view.xml deleted file mode 100644 index b7df8809c..000000000 --- a/spp_change_request/views/dms_file_view.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - view_dms_file_spp_custom_form - spp.dms.file - -
- -
- -
-

- -

-

- -

-
- - - - - - - - - - - - - - - - - -
-
- -
- - diff --git a/spp_change_request/wizard/__init__.py b/spp_change_request/wizard/__init__.py index 556ea511e..a9044e230 100644 --- a/spp_change_request/wizard/__init__.py +++ b/spp_change_request/wizard/__init__.py @@ -1,5 +1,3 @@ # Part of OpenSPP. See LICENSE file for full copyright and licensing details. from . import confirm_user_assignment -from . import reject_change_request -from . import cancel_change_request diff --git a/spp_change_request/wizard/cancel_change_request.py b/spp_change_request/wizard/cancel_change_request.py deleted file mode 100644 index 051bbb9fb..000000000 --- a/spp_change_request/wizard/cancel_change_request.py +++ /dev/null @@ -1,42 +0,0 @@ -# Part of OpenSPP. See LICENSE file for full copyright and licensing details. - -from odoo import _, api, fields, models -from odoo.exceptions import UserError - - -class CancelChangeRequestWiz(models.TransientModel): - _name = "spp.change.request.cancel.wizard" - _description = "Change Request Cancel Wizard" - - @api.model - def default_get(self, fields): - res = super().default_get(fields) - if self.env.context.get("change_request_id"): - res["change_request_id"] = self.env.context["change_request_id"] - else: - if self.env.context.get("active_id"): - res["change_request_id"] = self.env.context["active_id"] - return res - - change_request_id = fields.Many2one("spp.change.request", "Change Request", required=True) - cancelled_by_id = fields.Many2one("res.users", "Cancelled by", default=lambda self: self.env.user.id) - dialog_message = fields.Text(compute="_compute_message") - - def cancel_change_request(self): - for rec in self: - if rec.change_request_id: - if rec.change_request_id.request_type_ref_id: - rec.change_request_id.request_type_ref_id._cancel(rec.change_request_id) - else: - rec.change_request_id._cancel(rec.change_request_id) - else: - raise UserError(_("There are no change request selected.")) - - @api.depends("change_request_id") - def _compute_message(self): - for rec in self: - msg = _( - "Are you sure you would like to cancel this request: %s", - rec.change_request_id.name, - ) - rec.dialog_message = msg diff --git a/spp_change_request/wizard/cancel_change_request_view.xml b/spp_change_request/wizard/cancel_change_request_view.xml deleted file mode 100644 index 991165964..000000000 --- a/spp_change_request/wizard/cancel_change_request_view.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - change_request_cancel_wizard - spp.change.request.cancel.wizard - -
- -
-

- -

-
- - - - -
-
-
-
-
-
- - - Cancel Change Request - spp.change.request.cancel.wizard - form - new - -
diff --git a/spp_change_request/wizard/confirm_user_assignment_view.xml b/spp_change_request/wizard/confirm_user_assignment_view.xml deleted file mode 100644 index 58029a42e..000000000 --- a/spp_change_request/wizard/confirm_user_assignment_view.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - change_request_user_assign_wizard - spp.change.request.user.assign.wizard - -
- -
-

- -

-
- - - - - - - -
-
-
-
-
-
- - - Assign Change Request to User - spp.change.request.user.assign.wizard - form - new - -
diff --git a/spp_change_request/wizard/reject_change_request.py b/spp_change_request/wizard/reject_change_request.py deleted file mode 100644 index 999425e22..000000000 --- a/spp_change_request/wizard/reject_change_request.py +++ /dev/null @@ -1,40 +0,0 @@ -# Part of OpenSPP. See LICENSE file for full copyright and licensing details. - -from odoo import _, api, fields, models -from odoo.exceptions import UserError - - -class RejectChangeRequestWiz(models.TransientModel): - _name = "spp.change.request.reject.wizard" - _description = "Change Request Rejection Wizard" - - @api.model - def default_get(self, fields): - res = super().default_get(fields) - if self.env.context.get("change_request_id"): - res["change_request_id"] = self.env.context["change_request_id"] - else: - if self.env.context.get("active_id"): - res["change_request_id"] = self.env.context["active_id"] - return res - - change_request_id = fields.Many2one("spp.change.request", "Change Request", required=True) - rejected_by_id = fields.Many2one("res.users", "Rejected by", default=lambda self: self.env.user.id) - rejected_remarks = fields.Text("Rejection Remarks", required=True) - dialog_message = fields.Text(compute="_compute_message") - - def reject_change_request(self): - for rec in self: - if rec.change_request_id: - rec.change_request_id.request_type_ref_id._on_reject(rec.change_request_id, rec.rejected_remarks) - else: - raise UserError(_("There are no change request selected.")) - - @api.depends("change_request_id") - def _compute_message(self): - for rec in self: - msg = _( - "Are you sure you would like to reject this request: %s", - rec.change_request_id.name, - ) - rec.dialog_message = msg diff --git a/spp_change_request/wizard/reject_change_request_view.xml b/spp_change_request/wizard/reject_change_request_view.xml deleted file mode 100644 index e0b382129..000000000 --- a/spp_change_request/wizard/reject_change_request_view.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - change_request_reject_wizard - spp.change.request.reject.wizard - -
- -
-

- -

-
- - - - - -
-
-
-
-
-
- - - Reject Change Request - spp.change.request.reject.wizard - form - new - -
From f223a307371bb150406727b5e39267cd64b0d010 Mon Sep 17 00:00:00 2001 From: Edwin Gonzales Date: Tue, 15 Apr 2025 19:37:25 +0800 Subject: [PATCH 2/2] Add fix to source_mixin.py --- .../models/mixins/source_mixin.py | 768 +----------------- 1 file changed, 4 insertions(+), 764 deletions(-) diff --git a/spp_change_request/models/mixins/source_mixin.py b/spp_change_request/models/mixins/source_mixin.py index 8477788df..def8c74c3 100644 --- a/spp_change_request/models/mixins/source_mixin.py +++ b/spp_change_request/models/mixins/source_mixin.py @@ -1,47 +1,16 @@ # Part of OpenSPP. See LICENSE file for full copyright and licensing details. -import logging - -from odoo import Command, _, api, fields, models -from odoo.exceptions import UserError, ValidationError - -_logger = logging.getLogger(__name__) +from odoo import _, fields, models class ChangeRequestSourceMixin(models.AbstractModel): - """ - Change Request Data Source mixin. - --------------------------------- - This mixin is inherited by objects implementing a change Request. - - Example: - - .. code-block:: python - - class ChangeRequestAddChildren(models.Model): - _name = "spp.change.request.demo.add.children" - _inherit = [ - "spp.change.request.source.mixin", - "spp.change.request.validation.sequence.mixin", - ] - _description = "Add Children Change Request Type" - - # Initialize DMS Storage - DMS_STORAGE = "spp_change_request_add_children.attachment_storage_add_children" - VALIDATION_FORM = "spp_change_request_add_children.view_change_request_add_children_validation_form" - REQUIRED_DOCUMENT_TYPE = [ - "change_request.dms_birth_certificate_category", - ] - - """ - - _name = "spp.change.request.source.mixin" - _description = "Change Request Data Source Mixin" - _rec_name = "change_request_id" + _inherit = "spp.change.request.source.mixin" REQUIRED_DOCUMENT_TYPE = [] # List of required document category `spp.dms.category` VALIDATION_FORM = None AUTO_APPLY_CHANGES = True + REGISTRANT_FORM_ID = "g2p_registry_group.view_groups_form" + ADMIN_GROUP_NAME = "spp_change_request.group_spp_change_request_administrator" registrant_id = fields.Many2one("res.partner", "Registrant", domain=[("is_registrant", "=", True)]) applicant_id = fields.Many2one( @@ -50,488 +19,11 @@ class ChangeRequestAddChildren(models.Model): domain=[("is_registrant", "=", True), ("is_group", "=", False)], ) applicant_phone = fields.Char("Applicant's Phone Number", related="change_request_id.applicant_phone") - change_request_id = fields.Many2one("spp.change.request", "Change Request", required=True) - assign_to_id = fields.Many2one("res.users", "Assigned to", related="change_request_id.assign_to_id") - last_validated_by_id = fields.Many2one( - "res.users", "Last Validator", related="change_request_id.last_validated_by_id" - ) - date_validated = fields.Datetime(related="change_request_id.date_validated") - state = fields.Selection( - related="change_request_id.state", - string="Status", - readonly=True, - ) # Target Fields group_address = fields.Text(related="registrant_id.address", readonly=True) group_registration_date = fields.Date(related="registrant_id.registration_date", readonly=True) - # DMS Field - # dms_directory_ids = fields.One2many( - # "spp.dms.directory", - # "change_request_id", - # string="DMS Directories", - # auto_join=True, - # ) - # dms_file_ids = fields.One2many( - # "spp.dms.file", - # "change_request_id", - # string="DMS Files", - # auto_join=True, - # ) - - current_user_assigned = fields.Boolean(compute="_compute_current_user_assigned", default=False) - - def _update_registrant_id(self, res): - for rec in res: - if rec.registrant_id: - rec.change_request_id.update({"registrant_id": rec.registrant_id.id}) - - def get_request_type_view_id(self): - """ - Retrieve form view ID. - - :return: form view ID - :rtype: int - """ - return self.env["ir.ui.view"].sudo().search([("model", "=", self._name), ("type", "=", "form")], limit=1).id - - def update_live_data(self): - """ - This method is meant to be overridden by the child classes to update the data of the registrant. - - """ - raise NotImplementedError() - - def validate_data(self): - """ - This method is meant to be overridden by the child classes to validate the data of the change request - before submitting for review. - - :raise ValidationError: Exception raised when something is not valid. - """ - self.ensure_one() - if self.env.context.get("skip_check_required_documents", False): - return - self.check_required_documents() - - def action_submit(self): - """ - This method is called when the Change Request is requested for validation by a user. - - Usage: - - Add this function in the name of button with type object in XML - - example: -