1 # -*- coding: utf-8 -*-
2 ##############################################################################
4 # OpenERP, Open Source Management Solution
5 # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU Affero General Public License as
9 # published by the Free Software Foundation, either version 3 of the
10 # License, or (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Affero General Public License for more details.
17 # You should have received a copy of the GNU Affero General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ##############################################################################
23 from openerp.osv import fields,osv
24 from openerp.tools.translate import _
27 ('no-message','No Message'),
28 ('warning','Warning'),
29 ('block','Blocking Message')
32 WARNING_HELP = _('Selecting the "Warning" option will notify user with the message, Selecting "Blocking Message" will throw an exception with the message and block the flow. The Message has to be written in the next field.')
34 class res_partner(osv.osv):
35 _inherit = 'res.partner'
37 'sale_warn' : fields.selection(WARNING_MESSAGE, 'Sales Order', help=WARNING_HELP, required=True),
38 'sale_warn_msg' : fields.text('Message for Sales Order'),
39 'purchase_warn' : fields.selection(WARNING_MESSAGE, 'Purchase Order', help=WARNING_HELP, required=True),
40 'purchase_warn_msg' : fields.text('Message for Purchase Order'),
41 'picking_warn' : fields.selection(WARNING_MESSAGE, 'Stock Picking', help=WARNING_HELP, required=True),
42 'picking_warn_msg' : fields.text('Message for Stock Picking'),
43 'invoice_warn' : fields.selection(WARNING_MESSAGE, 'Invoice', help=WARNING_HELP, required=True),
44 'invoice_warn_msg' : fields.text('Message for Invoice'),
47 'sale_warn' : 'no-message',
48 'purchase_warn' : 'no-message',
49 'picking_warn' : 'no-message',
50 'invoice_warn' : 'no-message',
55 class sale_order(osv.osv):
56 _inherit = 'sale.order'
57 def onchange_partner_id(self, cr, uid, ids, part, context=None):
59 return {'value':{'partner_invoice_id': False, 'partner_shipping_id':False, 'payment_term' : False}}
63 partner = self.pool.get('res.partner').browse(cr, uid, part, context=context)
64 if partner.sale_warn != 'no-message':
65 if partner.sale_warn == 'block':
66 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.sale_warn_msg)
67 title = _("Warning for %s") % partner.name
68 message = partner.sale_warn_msg
74 result = super(sale_order, self).onchange_partner_id(cr, uid, ids, part, context=context)
76 if result.get('warning',False):
77 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
78 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
80 return {'value': result.get('value',{}), 'warning':warning}
83 class purchase_order(osv.osv):
84 _inherit = 'purchase.order'
85 def onchange_partner_id(self, cr, uid, ids, part):
87 return {'value':{'partner_address_id': False}}
91 partner = self.pool.get('res.partner').browse(cr, uid, part)
92 if partner.purchase_warn != 'no-message':
93 if partner.purchase_warn == 'block':
94 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.purchase_warn_msg)
95 title = _("Warning for %s") % partner.name
96 message = partner.purchase_warn_msg
101 result = super(purchase_order, self).onchange_partner_id(cr, uid, ids, part)
103 if result.get('warning',False):
104 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
105 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
107 return {'value': result.get('value',{}), 'warning':warning}
111 class account_invoice(osv.osv):
112 _inherit = 'account.invoice'
113 def onchange_partner_id(self, cr, uid, ids, type, partner_id,
114 date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
118 'payment_term': False,
124 partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
125 if partner.invoice_warn != 'no-message':
126 if partner.invoice_warn == 'block':
127 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.invoice_warn_msg)
129 title = _("Warning for %s") % partner.name
130 message = partner.invoice_warn_msg
135 result = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id,
136 date_invoice=date_invoice, payment_term=payment_term,
137 partner_bank_id=partner_bank_id, company_id=company_id)
139 if result.get('warning',False):
140 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
141 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
143 return {'value': result.get('value',{}), 'warning':warning}
146 class stock_picking(osv.osv):
147 _inherit = 'stock.picking'
149 def onchange_partner_in(self, cr, uid, ids, partner_id=None, context=None):
152 partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
156 if partner.picking_warn != 'no-message':
157 if partner.picking_warn == 'block':
158 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
159 title = _("Warning for %s") % partner.name
160 message = partner.picking_warn_msg
165 result = super(stock_picking, self).onchange_partner_in(cr, uid, ids, partner_id, context)
166 if result.get('warning',False):
167 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
168 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
170 return {'value': result.get('value',{}), 'warning':warning}
173 # FIXME:(class stock_picking_in and stock_picking_out) this is a temporary workaround because of a framework bug (ref: lp:996816).
174 # It should be removed as soon as the bug is fixed
175 class stock_picking_in(osv.osv):
176 _inherit = 'stock.picking.in'
178 def onchange_partner_in(self, cr, uid, ids, partner_id=None, context=None):
181 partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
185 if partner.picking_warn != 'no-message':
186 if partner.picking_warn == 'block':
187 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
188 title = _("Warning for %s") % partner.name
189 message = partner.picking_warn_msg
194 result = super(stock_picking_in, self).onchange_partner_in(cr, uid, ids, partner_id, context)
195 if result.get('warning',False):
196 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
197 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
199 return {'value': result.get('value',{}), 'warning':warning}
201 class stock_picking_out(osv.osv):
202 _inherit = 'stock.picking.out'
204 def onchange_partner_in(self, cr, uid, ids, partner_id=None, context=None):
207 partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
211 if partner.picking_warn != 'no-message':
212 if partner.picking_warn == 'block':
213 raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
214 title = _("Warning for %s") % partner.name
215 message = partner.picking_warn_msg
220 result = super(stock_picking_out, self).onchange_partner_in(cr, uid, ids, partner_id, context)
221 if result.get('warning',False):
222 warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
223 warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
225 return {'value': result.get('value',{}), 'warning':warning}
227 class product_product(osv.osv):
228 _inherit = 'product.product'
230 'sale_line_warn' : fields.selection(WARNING_MESSAGE,'Sales Order Line', help=WARNING_HELP, required=True),
231 'sale_line_warn_msg' : fields.text('Message for Sales Order Line'),
232 'purchase_line_warn' : fields.selection(WARNING_MESSAGE,'Purchase Order Line', help=WARNING_HELP, required=True),
233 'purchase_line_warn_msg' : fields.text('Message for Purchase Order Line'),
237 'sale_line_warn' : 'no-message',
238 'purchase_line_warn' : 'no-message',
242 class sale_order_line(osv.osv):
243 _inherit = 'sale.order.line'
244 def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,
245 uom=False, qty_uos=0, uos=False, name='', partner_id=False,
246 lang=False, update_tax=True, date_order=False, packaging=False,
247 fiscal_position=False, flag=False, context=None):
250 return {'value': {'th_weight' : 0, 'product_packaging': False,
251 'product_uos_qty': qty}, 'domain': {'product_uom': [],
253 product_obj = self.pool.get('product.product')
254 product_info = product_obj.browse(cr, uid, product)
258 if product_info.sale_line_warn != 'no-message':
259 if product_info.sale_line_warn == 'block':
260 raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.sale_line_warn_msg)
261 title = _("Warning for %s") % product_info.name
262 message = product_info.sale_line_warn_msg
263 warning['title'] = title
264 warning['message'] = message
266 result = super(sale_order_line, self).product_id_change( cr, uid, ids, pricelist, product, qty,
267 uom, qty_uos, uos, name, partner_id,
268 lang, update_tax, date_order, packaging, fiscal_position, flag, context=context)
270 if result.get('warning',False):
271 warning['title'] = title and title +' & '+result['warning']['title'] or result['warning']['title']
272 warning['message'] = message and message +'\n\n'+result['warning']['message'] or result['warning']['message']
274 return {'value': result.get('value',{}), 'warning':warning}
277 class purchase_order_line(osv.osv):
278 _inherit = 'purchase.order.line'
279 def onchange_product_id(self,cr, uid, ids, pricelist, product, qty, uom,
280 partner_id, date_order=False, fiscal_position_id=False, date_planned=False,
281 name=False, price_unit=False, notes=False, context=None):
284 return {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'notes': notes or '', 'product_uom' : uom or False}, 'domain':{'product_uom':[]}}
285 product_obj = self.pool.get('product.product')
286 product_info = product_obj.browse(cr, uid, product)
290 if product_info.purchase_line_warn != 'no-message':
291 if product_info.purchase_line_warn == 'block':
292 raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.purchase_line_warn_msg)
293 title = _("Warning for %s") % product_info.name
294 message = product_info.purchase_line_warn_msg
295 warning['title'] = title
296 warning['message'] = message
298 result = super(purchase_order_line, self).onchange_product_id(cr, uid, ids, pricelist, product, qty, uom,
299 partner_id, date_order, fiscal_position_id)
301 if result.get('warning',False):
302 warning['title'] = title and title +' & '+result['warning']['title'] or result['warning']['title']
303 warning['message'] = message and message +'\n\n'+result['warning']['message'] or result['warning']['message']
305 return {'value': result.get('value',{}), 'warning':warning}
309 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: