diff --git a/spp_change_request_event_data/__init__.py b/spp_change_request_event_data/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/spp_change_request_event_data/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/spp_change_request_event_data/__manifest__.py b/spp_change_request_event_data/__manifest__.py new file mode 100644 index 000000000..b8466d7af --- /dev/null +++ b/spp_change_request_event_data/__manifest__.py @@ -0,0 +1,22 @@ +{ + "name": "OpenSPP Change Request Event Data", + "category": "OpenSPP", + "version": "17.0.1.0.0", + "sequence": 1, + "author": "OpenSPP.org", + "website": "https://github.com/OpenSPP/openspp-modules", + "license": "LGPL-3", + "development_status": "Beta", + "maintainers": ["shashikala1998"], + "depends": [ + "spp_event_data", + "spp_change_request", + ], + "data": [ + "security/ir.model.access.csv", + "views/change_request_view.xml", + ], + "application": False, + "installable": True, + "auto_install": False, +} diff --git a/spp_change_request_event_data/models/__init__.py b/spp_change_request_event_data/models/__init__.py new file mode 100644 index 000000000..b553e871c --- /dev/null +++ b/spp_change_request_event_data/models/__init__.py @@ -0,0 +1,2 @@ +from . import change_request +from . import event_data diff --git a/spp_change_request_event_data/models/change_request.py b/spp_change_request_event_data/models/change_request.py new file mode 100644 index 000000000..961a3a586 --- /dev/null +++ b/spp_change_request_event_data/models/change_request.py @@ -0,0 +1,63 @@ +import logging + +from odoo import fields, models + +_logger = logging.getLogger(__name__) + + +class ChangeRequest(models.Model): + _inherit = "spp.change.request" + + event_data_ids = fields.One2many( + "spp.event.data", + "change_request_id", + string="Event History", + ) + + def write(self, vals): + """Override to track state changes and create event data""" + _logger.info("Writing change request: %s with vals: %s", self.name, vals) + + res = super().write(vals) + + # If state is changing to validated or applied, create/update event data + new_state = vals.get("state") + if new_state in ["validated", "applied"]: + for record in self: + if record.request_type_ref_id: + _logger.info("Creating/Updating event data for state change to %s", new_state) + + # Get model and res_id from request_type_ref_id + ref_model = record.request_type_ref_id._name + ref_id = record.request_type_ref_id.id + + # Get the user who performed the action + user = self.env.user.name + + # Check if an event already exists for this change request + existing_event = self.env["spp.event.data"].search( + [("change_request_id", "=", record.id), ("model", "=", ref_model), ("res_id", "=", ref_id)], + limit=1, + ) + + event_vals = { + "model": ref_model, + "res_id": ref_id, + "partner_id": record.registrant_id.id, + "registrar": user, + "state": "active", + "change_request_id": record.id, + "collection_date": fields.Date.today(), + "event_type": new_state.capitalize(), # 'Validated' or 'Applied' + } + + if existing_event: + # Update existing event + existing_event.write(event_vals) + _logger.info("Updated event data: %s", existing_event.id) + else: + # Create new event + event = self.env["spp.event.data"].create(event_vals) + _logger.info("Created event data: %s", event.id) + + return res diff --git a/spp_change_request_event_data/models/event_data.py b/spp_change_request_event_data/models/event_data.py new file mode 100644 index 000000000..3685abd73 --- /dev/null +++ b/spp_change_request_event_data/models/event_data.py @@ -0,0 +1,11 @@ +from odoo import fields, models + + +class EventData(models.Model): + _inherit = "spp.event.data" + + change_request_id = fields.Many2one( + "spp.change.request", + string="Change Request", + ondelete="set null", + ) diff --git a/spp_change_request_event_data/pyproject.toml b/spp_change_request_event_data/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/spp_change_request_event_data/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/spp_change_request_event_data/security/ir.model.access.csv b/spp_change_request_event_data/security/ir.model.access.csv new file mode 100644 index 000000000..d13c40049 --- /dev/null +++ b/spp_change_request_event_data/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_spp_event_data_change_request_validator,SPP Event Data Change Request Validator Access,spp_event_data.model_spp_event_data,spp_change_request.group_spp_change_request_validator,1,1,1,0 +access_spp_event_data_change_request_hq_validator,SPP Event Data Change Request HQ Validator Access,spp_event_data.model_spp_event_data,spp_change_request.group_spp_change_request_hq_validator,1,1,1,0 +access_spp_event_data_change_request_applicator,SPP Event Data Change Request Applicator Access,spp_event_data.model_spp_event_data,spp_change_request.group_spp_change_request_applicator,1,1,1,0 diff --git a/spp_change_request_event_data/views/change_request_view.xml b/spp_change_request_event_data/views/change_request_view.xml new file mode 100644 index 000000000..b033e1355 --- /dev/null +++ b/spp_change_request_event_data/views/change_request_view.xml @@ -0,0 +1,30 @@ + + + + + spp.change.request.form.inherit.event.data + spp.change.request + + + + + + + + + + + + + + + + + + + +