You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

65 lines
2.6 KiB

# -*- coding: utf-8 -*-
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models, api
from openerp.exceptions import ValidationError
from openerp.tools.translate import _
class PosOrderLine(models.Model):
_inherit = 'pos.order.line'
# Column Section
returned_line_id = fields.Many2one(
comodel_name='pos.order.line', string='Returned Order',
readonly=True)
refund_line_ids = fields.One2many(
comodel_name='pos.order.line', inverse_name='returned_line_id',
string='Refund Lines', readonly=True)
# Compute Section
@api.model
def max_returnable_qty(self, ignored_line_ids):
qty = self.qty
for refund_line in self.refund_line_ids:
if refund_line.id not in ignored_line_ids:
qty += refund_line.qty
return qty
# Constraint Section
@api.one
@api.constrains('returned_line_id', 'qty')
def _check_return_qty(self):
if self.env.context.get('do_not_check_negative_qty', False):
return True
if self.returned_line_id:
if - self.qty > self.returned_line_id.qty:
raise ValidationError(_(
"You can not return %d %s of %s because the original"
" Order line only mentions %d %s.") % (
- self.qty, self.product_id.uom_id.name,
self.product_id.name, self.returned_line_id.qty,
self.product_id.uom_id.name))
elif - self.qty >\
self.returned_line_id.max_returnable_qty([self.id]):
raise ValidationError(_(
"You can not return %d %s of %s because some refunds"
" has been yet done.\n Maximum quantity allowed :"
" %d %s.") % (
- self.qty, self.product_id.uom_id.name,
self.product_id.name,
self.returned_line_id.max_returnable_qty([self.id]),
self.product_id.uom_id.name))
else:
if self.qty < 0 and\
not self.product_id.product_tmpl_id.pos_allow_negative_qty:
raise ValidationError(_(
"For legal and traceability reasons, you can not set a"
" negative quantity (%d %s of %s), without using return"
" wizard.") % (
self.qty, self.product_id.uom_id.name,
self.product_id.name))