From 902ac89eb8eba12fd3eab0c900210eca0df0b53c Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Wed, 16 Sep 2020 06:58:34 +0000 Subject: [PATCH] [FIX] point_of_sale: facilitate inheritance return We are are here facilitating the inheritance of the functions that create the reurn orders closes odoo/odoo#57796 X-original-commit: ebb11e18eef7f0a0031f01389116a24de868b6b3 Signed-off-by: pimodoo --- addons/point_of_sale/models/pos_order.py | 52 ++++++++++++------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 920fd228dca..0c54b3f8f1e 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -490,6 +490,19 @@ class PosOrder(models.Model): self.env['pos.payment'].create(data) self.amount_paid = sum(self.payment_ids.mapped('amount')) + def _prepare_refund_values(self, current_session): + self.ensure_one() + return { + 'name': self.name + _(' REFUND'), + 'session_id': current_session.id, + 'date_order': fields.Datetime.now(), + 'pos_reference': self.pos_reference, + 'lines': False, + 'amount_tax': -self.amount_tax, + 'amount_total': -self.amount_total, + 'amount_paid': 0, + } + def refund(self): """Create a copy of order for refund order""" refund_orders = self.env['pos.order'] @@ -499,28 +512,14 @@ class PosOrder(models.Model): current_session = order.session_id.config_id.current_session_id if not current_session: raise UserError(_('To return product(s), you need to open a session in the POS %s', order.session_id.config_id.display_name)) - refund_order = order.copy({ - 'name': order.name + _(' REFUND'), - 'session_id': current_session.id, - 'date_order': fields.Datetime.now(), - 'pos_reference': order.pos_reference, - 'lines': False, - 'amount_tax': -order.amount_tax, - 'amount_total': -order.amount_total, - 'amount_paid': 0, - }) + refund_order = order.copy( + order._prepare_refund_values(current_session) + ) for line in order.lines: PosOrderLineLot = self.env['pos.pack.operation.lot'] for pack_lot in line.pack_lot_ids: PosOrderLineLot += pack_lot.copy() - line.copy({ - 'name': line.name + _(' REFUND'), - 'qty': -line.qty, - 'order_id': refund_order.id, - 'price_subtotal': -line.price_subtotal, - 'price_subtotal_incl': -line.price_subtotal_incl, - 'pack_lot_ids': PosOrderLineLot, - }) + line.copy(line._prepare_refund_data(refund_order, PosOrderLineLot)) refund_orders |= refund_order return { @@ -680,25 +679,28 @@ class PosOrderLine(models.Model): currency_id = fields.Many2one('res.currency', related='order_id.currency_id') full_product_name = fields.Char('Full Product Name') - @api.model - def _prepare_refund_data(self, refund_order_id): + def _prepare_refund_data(self, refund_order, PosOrderLineLot): """ This prepares data for refund order line. Inheritance may inject more data here - @param refund_order_id: the pre-created refund order - @type refund_order_id: pos.order + @param refund_order: the pre-created refund order + @type refund_order: pos.order + + @param PosOrderLineLot: the pre-created Pack operation Lot + @type PosOrderLineLot: pos.pack.operation.lot @return: dictionary of data which is for creating a refund order line from the original line @rtype: dict """ + self.ensure_one() return { - # required=True, copy=False 'name': self.name + _(' REFUND'), 'qty': -self.qty, - 'order_id': refund_order_id.id, + 'order_id': refund_order.id, 'price_subtotal': -self.price_subtotal, 'price_subtotal_incl': -self.price_subtotal_incl, - } + 'pack_lot_ids': PosOrderLineLot, + } @api.model def create(self, values):