diff --git a/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py b/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py index a22788ced..94d451764 100644 --- a/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py +++ b/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py @@ -22,6 +22,10 @@ class PurchaseRequisitionCustom(models.Model): _inherit = 'purchase.requisition' # committee type + attach_no = fields.Integer(compute='get_attachments') + res_id = fields.Integer() + res_model = fields.Char() + committee_type_id = fields.Many2one('purchase.committee.type', string='Committee Type') state_blanket_order = fields.Selection( selection_add=[('purchase_manager', 'Purchase manager'), ('checked', 'Waiting Approval'), @@ -86,6 +90,75 @@ class PurchaseRequisitionCustom(models.Model): change_state_line = fields.One2many('change.purchase.user.state', 'requisition_id') date_end = fields.Datetime(string='Agreement Deadline', tracking=True) check_request = fields.Boolean(compute='check_request_field') + + def get_attachments(self): + # Check if multiple records are passed, and handle them in a loop + if len(self) > 1: + action = self.env['ir.actions.act_window']._for_xml_id('base.action_attachment') + action['domain'] = [ + ('res_model', '=', 'purchase.requisition'), + ('res_id', 'in', self.ids), + ] + + # Update attachment count for all records (if necessary) + for record in self: + related_ids = record.ids + related_models = 'purchase.requisition' + + if record.res_id and record.res_model: + related_ids = record.ids + [record.res_id] + related_models = ['purchase.requisition', record.res_model] + action['domain'] = [ + ('res_model', 'in', related_models), + ('res_id', 'in', related_ids), + ] + + # Context for creating new attachments for each record + action['context'] = "{'default_res_model': '%s','default_res_id': %d}" % (record._name, record.id) + + # Update attachment count for each record + record.attach_no = self.env['ir.attachment'].search_count([ + ('res_model', 'in', related_models), + ('res_id', 'in', related_ids) + ]) + + return action + + # If only one record is passed, use the original logic + self.ensure_one() + + action = self.env['ir.actions.act_window']._for_xml_id('base.action_attachment') + action['domain'] = [ + ('res_model', '=', 'purchase.requisition'), + ('res_id', 'in', self.ids), + ] + domain = [ + ('res_model', '=', 'purchase.requisition'), + ('res_id', 'in', self.ids), + ] + related_ids = self.ids + related_models = 'purchase.requisition' + + if self.res_id and self.res_model: + related_ids = self.ids + [self.res_id] + related_models = ['purchase.requisition', self.res_model] + action['domain'] = [ + ('res_model', 'in', related_models), + ('res_id', 'in', related_ids), + ] + domain = [ + ('res_model', 'in', related_models), + ('res_id', 'in', related_ids), + ] + + # Context for creating new attachments + action['context'] = "{'default_res_model': '%s','default_res_id': %d}" % (self._name, self.id) + + # Update attachment count for smart button + self.attach_no = self.env['ir.attachment'].search_count(domain) + + return action + def check_request_field(self): for rec in self: if rec.request_id: