purchase_requisition_alternative_warning.py 1.4 KB

123456789101112131415161718192021222324252627282930
  1. # -*- coding: utf-8 -*-
  2. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  3. from odoo import api, fields, models
  4. class PurchaseRequisitionAlternativeWarning(models.TransientModel):
  5. _name = 'purchase.requisition.alternative.warning'
  6. _description = 'Wizard in case PO still has open alternative requests for quotation'
  7. po_ids = fields.Many2many('purchase.order', 'warning_purchase_order_rel', string="POs to Confirm")
  8. alternative_po_ids = fields.Many2many('purchase.order', 'warning_purchase_order_alternative_rel', string="Alternative POs")
  9. alternative_po_count = fields.Integer(compute="_compute_alternative_po_count")
  10. @api.depends("alternative_po_ids")
  11. def _compute_alternative_po_count(self):
  12. for wizard in self:
  13. wizard.alternative_po_count = len(wizard.alternative_po_ids)
  14. def action_keep_alternatives(self):
  15. return self._action_done()
  16. def action_cancel_alternatives(self):
  17. # in theory alternative_po_ids shouldn't have any po_ids in it, but it's possible by accident/forcing it, so avoid cancelling them to be safe
  18. self.alternative_po_ids.filtered(lambda po: po.state in ['draft', 'sent', 'to approve'] and po.id not in self.po_ids.ids).button_cancel()
  19. return self._action_done()
  20. def _action_done(self):
  21. return self.po_ids.with_context({'skip_alternative_check': True}).button_confirm()