diff --git a/odex25_purchase/purchase_requisition_custom/models/purchase_order.py b/odex25_purchase/purchase_requisition_custom/models/purchase_order.py index 97bb807d4..eb32af36a 100644 --- a/odex25_purchase/purchase_requisition_custom/models/purchase_order.py +++ b/odex25_purchase/purchase_requisition_custom/models/purchase_order.py @@ -19,7 +19,10 @@ class PurchaseOrderCustom(models.Model): data.state = 'draft' return data - + attach_no = fields.Integer(compute='get_attachments') + res_id = fields.Integer() + res_model = fields.Char() + state = fields.Selection([ ('wait', 'Waiting To Be Signed'), ('unsign', 'UnSign'), @@ -70,6 +73,75 @@ class PurchaseOrderCustom(models.Model): is_signed = fields.Boolean() budget_id = fields.Many2one('crossovered.budget') + 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.order'), + ('res_id', 'in', self.ids), + ] + + # Update attachment count for all records (if necessary) + for record in self: + related_ids = record.ids + related_models = 'purchase.order' + + if record.res_id and record.res_model: + related_ids = record.ids + [record.res_id] + related_models = ['purchase.order', 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.order'), + ('res_id', 'in', self.ids), + ] + domain = [ + ('res_model', '=', 'purchase.order'), + ('res_id', 'in', self.ids), + ] + related_ids = self.ids + related_models = 'purchase.order' + + if self.res_id and self.res_model: + related_ids = self.ids + [self.res_id] + related_models = ['purchase.order', 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 _prepare_invoice(self): res = super(PurchaseOrderCustom, self)._prepare_invoice() res.update({'purchase_id': self.id, 'res_id': self.id,'res_model': 'purchase.order'})