[FIX] warning: make blocking warning actually doing something (opw 607380)
authorMartin Trigaux <mat@openerp.com>
Wed, 7 May 2014 10:25:50 +0000 (12:25 +0200)
committerMartin Trigaux <mat@openerp.com>
Wed, 7 May 2014 10:25:50 +0000 (12:25 +0200)
Instead of raising an exception (which only interupt the call of the onchange methods), return a dictionnary to set the forbidden partner or product to an empty value.
The call is not blocking in a way it forbid to create a record that uses this partner/product but it make it not possible to select it through the web interface.

bzr revid: mat@openerp.com-20140507102550-sms5nbf0u7pdkci9

addons/warning/warning.py

index a3627e0..c1a2f92 100644 (file)
@@ -63,14 +63,14 @@ class sale_order(osv.osv):
         message = False
         partner = self.pool.get('res.partner').browse(cr, uid, part, context=context)
         if partner.sale_warn != 'no-message':
-            if partner.sale_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.sale_warn_msg)
             title =  _("Warning for %s") % partner.name
             message = partner.sale_warn_msg
             warning = {
                     'title': title,
                     'message': message,
             }
+            if partner.sale_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
 
         result =  super(sale_order, self).onchange_partner_id(cr, uid, ids, part, context=context)
 
@@ -92,14 +92,15 @@ class purchase_order(osv.osv):
         message = False
         partner = self.pool.get('res.partner').browse(cr, uid, part)
         if partner.purchase_warn != 'no-message':
-            if partner.purchase_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.purchase_warn_msg)
             title = _("Warning for %s") % partner.name
             message = partner.purchase_warn_msg
             warning = {
                 'title': title,
                 'message': message
                 }
+            if partner.purchase_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
+
         result =  super(purchase_order, self).onchange_partner_id(cr, uid, ids, part)
 
         if result.get('warning',False):
@@ -126,15 +127,16 @@ class account_invoice(osv.osv):
         message = False
         partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
         if partner.invoice_warn != 'no-message':
-            if partner.invoice_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.invoice_warn_msg)
-
             title = _("Warning for %s") % partner.name
             message = partner.invoice_warn_msg
             warning = {
                 'title': title,
                 'message': message
                 }
+
+            if partner.invoice_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
+
         result =  super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id,
             date_invoice=date_invoice, payment_term=payment_term, 
             partner_bank_id=partner_bank_id, company_id=company_id)
@@ -158,14 +160,15 @@ class stock_picking(osv.osv):
         title = False
         message = False
         if partner.picking_warn != 'no-message':
-            if partner.picking_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
             title = _("Warning for %s") % partner.name
             message = partner.picking_warn_msg
             warning = {
                 'title': title,
                 'message': message
             }
+            if partner.picking_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
+
         result =  super(stock_picking, self).onchange_partner_in(cr, uid, ids, partner_id, context)
         if result.get('warning',False):
             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
@@ -188,14 +191,15 @@ class stock_picking_in(osv.osv):
         title = False
         message = False
         if partner.picking_warn != 'no-message':
-            if partner.picking_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
             title = _("Warning for %s") % partner.name
             message = partner.picking_warn_msg
             warning = {
                 'title': title,
                 'message': message
             }
+            if partner.picking_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
+
         result =  super(stock_picking_in, self).onchange_partner_in(cr, uid, ids, partner_id, context)
         if result.get('warning',False):
             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
@@ -214,14 +218,15 @@ class stock_picking_out(osv.osv):
         title = False
         message = False
         if partner.picking_warn != 'no-message':
-            if partner.picking_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
             title = _("Warning for %s") % partner.name
             message = partner.picking_warn_msg
             warning = {
                 'title': title,
                 'message': message
             }
+            if partner.picking_warn == 'block':
+                return {'value': {'partner_id': False}, 'warning': warning}
+
         result =  super(stock_picking_out, self).onchange_partner_in(cr, uid, ids, partner_id, context)
         if result.get('warning',False):
             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
@@ -262,12 +267,12 @@ class sale_order_line(osv.osv):
         message = False
 
         if product_info.sale_line_warn != 'no-message':
-            if product_info.sale_line_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.sale_line_warn_msg)
             title = _("Warning for %s") % product_info.name
             message = product_info.sale_line_warn_msg
             warning['title'] = title
             warning['message'] = message
+            if product_info.sale_line_warn == 'block':
+                return {'value': {'product_id': False}, 'warning': warning}
 
         result =  super(sale_order_line, self).product_id_change( cr, uid, ids, pricelist, product, qty,
             uom, qty_uos, uos, name, partner_id,
@@ -295,12 +300,12 @@ class purchase_order_line(osv.osv):
         message = False
 
         if product_info.purchase_line_warn != 'no-message':
-            if product_info.purchase_line_warn == 'block':
-                raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.purchase_line_warn_msg)
             title = _("Warning for %s") % product_info.name
             message = product_info.purchase_line_warn_msg
             warning['title'] = title
             warning['message'] = message
+            if product_info.purchase_line_warn == 'block':
+                return {'value': {'product_id': False}, 'warning': warning}
 
         result =  super(purchase_order_line, self).onchange_product_id(cr, uid, ids, pricelist, product, qty, uom,
             partner_id, date_order, fiscal_position_id)