From 11cc4b59d48c1767b164f2edfd2338fe7c4ff5de Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Tue, 28 Sep 2010 19:25:47 +0200 Subject: [PATCH] [IMP] stock.picking return wizard: properly use uom + correct validation bzr revid: odo@openerp.com-20100928172547-ngdqyn7g0etdz0u4 --- addons/stock/wizard/stock_return_picking.py | 90 +++++++++++---------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index 88bc41e1aa7..4bddc9a7ee4 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -69,15 +69,23 @@ class stock_return_picking(osv.osv_memory): if record_id: pick_obj = self.pool.get('stock.picking') pick = pick_obj.browse(cr, uid, record_id) + if pick.state not in ['done','confirmed','assigned']: + raise osv.except_osv(_('Warning !'), _("You may only return pickings that are Confirmed, Available or Done!")) + return_history = {} + valid_lines = 0 for m in [line for line in pick.move_lines]: - if m.state=='done': - if 'return%s'%(m.id) not in self._columns: - self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True) - if 'invoice_state' not in self._columns: - self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True) - for rec in m.move_history_ids2: - if rec.product_qty==m.product_qty: - raise osv.except_osv(_('Warning !'), _("There is no product to return!")) + if m.state == 'done': + return_history[m.id] = 0 + for rec in m.move_history_ids2: + return_history[m.id] += (rec.product_qty * rec.product_uom.factor) + if m.product_qty * m.product_uom.factor > return_history[m.id]: + valid_lines += 1 + if 'return%s'%(m.id) not in self._columns: + self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True) + if 'invoice_state' not in self._columns: + self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True) + if not valid_lines: + raise osv.except_osv(_('Warning !'), _("There are no products to return (only lines in Done state and not fully returned yet can be returned)!")) return res def fields_view_get(self, cr, uid, view_id=None, view_type='form', @@ -98,16 +106,13 @@ class stock_return_picking(osv.osv_memory): if record_id: pick_obj = self.pool.get('stock.picking') pick = pick_obj.browse(cr, uid, record_id) - if pick.state not in['done','confirmed']: - raise osv.except_osv(_('Warning !'), _("The Picking is not completed yet!\nYou cannot return picking which is not in 'Done' state!")) return_history = {} - for m_line in pick.move_lines: - return_history[m_line.id] = 0 - for rec in m_line.move_history_ids2: - return_history[m_line.id] += rec.product_qty res['fields'].clear() arch_lst=['', '
' % _('Return lines'), '