diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 899d253e70c..29019385a7c 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2052,7 +2052,7 @@ class stock_inventory(osv.osv): 'date': fields.datetime('Inventory Date', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Inventory Create Date."), 'date_done': fields.datetime('Date done', help="Inventory Validation Date."), 'line_ids': fields.one2many('stock.inventory.line', 'inventory_id', 'Inventories', readonly=False, states={'done': [('readonly', True)]}, help="Inventory Lines."), - 'move_ids': fields.one2many('stock.move', 'inventory_id', 'Created Moves', help="Inventory Moves."), + 'move_ids': fields.one2many('stock.move', 'inventory_id', 'Created Moves', help="Inventory Moves.", states={'done': [('readonly', True)]}), 'state': fields.selection([('draft', 'Draft'), ('cancel', 'Cancelled'), ('confirm', 'In Progress'), ('done', 'Validated')], 'Status', readonly=True, select=True), 'company_id': fields.many2one('res.company', 'Company', required=True, select=True, readonly=True, states={'draft': [('readonly', False)]}), 'location_id': fields.many2one('stock.location', 'Location', required=True, readonly=True, states={'draft': [('readonly', False)]}), @@ -2107,6 +2107,9 @@ class stock_inventory(osv.osv): context = {} move_obj = self.pool.get('stock.move') for inv in self.browse(cr, uid, ids, context=context): + for inventory_line in inv.line_ids: + if inventory_line.product_qty < 0: + raise osv.except_osv(_('Warning'),_('You cannot set a negative product quantity in an inventory line')) if not inv.move_ids: self.action_check(cr, uid, [inv.id], context=context) inv.refresh() @@ -2219,6 +2222,13 @@ class stock_inventory(osv.osv): for key, value in product_line.items(): if not value: product_line[key] = False + if product_line['product_qty'] < 0: + summary = _('Product: ') + product_obj.browse(cr, uid, product_line['product_id'], context=context).name + '\n' + summary += _('Location: ') + location_obj.browse(cr, uid, product_line['location_id'], context=context).complete_name + '\n' + summary += (_('Partner: ') + self.pool.get('res.partner').browse(cr, uid, product_line['partner_id'], context=context).name + '\n') if product_line['partner_id'] else '' + summary += (_('Lot: ') + self.pool.get('stock.production.lot').browse(cr, uid, product_line['prod_lot_id'], context=context).name + '\n') if product_line['prod_lot_id'] else '' + summary += (_('Package: ') + self.pool.get('stock.quant.package').browse(cr, uid, product_line['package_id'], context=context).name + '\n') if product_line['package_id'] else '' + raise osv.except_osv(_('Warning'),_('This inventory line has a theoretical negative quantity, please fix it before doing an inventory\n%s' % (summary))) product_line['inventory_id'] = inventory.id product_line['th_qty'] = product_line['product_qty'] if product_line['product_id']: