2018-01-16 06:58:15 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2018-01-16 11:34:37 +01:00
|
|
|
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
|
2018-01-16 06:58:15 +01:00
|
|
|
|
2018-01-16 11:34:37 +01:00
|
|
|
from flectra import models, api, fields
|
|
|
|
from flectra.tools.translate import _
|
2018-01-16 06:58:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
|
|
_inherit = 'sale.order'
|
|
|
|
|
|
|
|
warning_stock = fields.Char('Warning')
|
|
|
|
|
|
|
|
def _cart_update(self, product_id=None, line_id=None, add_qty=0, set_qty=0, **kwargs):
|
|
|
|
values = super(SaleOrder, self)._cart_update(product_id, line_id, add_qty, set_qty, **kwargs)
|
|
|
|
line_id = values.get('line_id')
|
|
|
|
|
|
|
|
for line in self.order_line:
|
|
|
|
if line.product_id.type == 'product' and line.product_id.inventory_availability in ['always', 'threshold']:
|
|
|
|
cart_qty = sum(self.order_line.filtered(lambda p: p.product_id.id == line.product_id.id).mapped('product_uom_qty'))
|
|
|
|
if cart_qty > line.product_id.virtual_available and (line_id == line.id):
|
|
|
|
qty = line.product_id.virtual_available - cart_qty
|
|
|
|
new_val = super(SaleOrder, self)._cart_update(line.product_id.id, line.id, qty, 0, **kwargs)
|
|
|
|
values.update(new_val)
|
|
|
|
|
|
|
|
# Make sure line still exists, it may have been deleted in super()_cartupdate because qty can be <= 0
|
|
|
|
if line.exists() and new_val['quantity']:
|
|
|
|
line.warning_stock = _('You ask for %s products but only %s is available') % (cart_qty, new_val['quantity'])
|
|
|
|
values['warning'] = line.warning_stock
|
|
|
|
else:
|
|
|
|
self.warning_stock = _("Some products became unavailable and your cart has been updated. We're sorry for the inconvenience.")
|
|
|
|
values['warning'] = self.warning_stock
|
|
|
|
return values
|
|
|
|
|
|
|
|
@api.multi
|
|
|
|
def _get_stock_warning(self, clear=True):
|
|
|
|
self.ensure_one()
|
|
|
|
warn = self.warning_stock
|
|
|
|
if clear:
|
|
|
|
self.warning_stock = ''
|
|
|
|
return warn
|
|
|
|
|
|
|
|
|
|
|
|
class SaleOrderLine(models.Model):
|
|
|
|
_inherit = 'sale.order.line'
|
|
|
|
|
|
|
|
warning_stock = fields.Char('Warning')
|
|
|
|
|
|
|
|
@api.multi
|
|
|
|
def _get_stock_warning(self, clear=True):
|
|
|
|
self.ensure_one()
|
|
|
|
warn = self.warning_stock
|
|
|
|
if clear:
|
|
|
|
self.warning_stock = ''
|
|
|
|
return warn
|