[FIX]crm : fixed problems regardig email_from/email_to
[odoo/odoo.git] / addons / warning / warning.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #    
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
6 #
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.
11 #
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.
16 #
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/>.     
19 #
20 ##############################################################################
21
22 import time
23 from osv import fields,osv
24 from tools.translate import _
25
26 WARNING_MESSAGE = [
27                    ('no-message','No Message'),
28                    ('warning','Warning'),
29                    ('block','Blocking Message')
30                    ]
31
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.')
33
34 class res_partner(osv.osv):
35     _inherit = 'res.partner'
36     _columns = {
37         'sale_warn' : fields.selection(WARNING_MESSAGE, 'Sale Order', help=WARNING_HELP),
38         'sale_warn_msg' : fields.text('Message for Sale Order'),
39         'purchase_warn' : fields.selection(WARNING_MESSAGE, 'Purchase Order', help=WARNING_HELP),
40         'purchase_warn_msg' : fields.text('Message for Purchase Order'),
41         'picking_warn' : fields.selection(WARNING_MESSAGE, 'Stock Picking', help=WARNING_HELP),
42         'picking_warn_msg' : fields.text('Message for Stock Picking'),
43         'invoice_warn' : fields.selection(WARNING_MESSAGE, 'Invoice', help=WARNING_HELP),
44         'invoice_warn_msg' : fields.text('Message for Invoice'),
45     }
46     _defaults = {
47          'sale_warn' : lambda *a: 'no-message',
48          'purchase_warn' : lambda *a: 'no-message',
49          'picking_warn' : lambda *a: 'no-message',
50          'invoice_warn' : lambda *a: 'no-message',
51     }
52     
53 res_partner()
54
55
56 class sale_order(osv.osv):
57     _inherit = 'sale.order'
58     def onchange_partner_id(self, cr, uid, ids, part):
59         if not part:
60             return {'value':{'partner_invoice_id': False, 'partner_shipping_id':False, 'partner_order_id':False, 'payment_term' : False}}
61         warning = {}
62         title = False
63         message = False
64         partner = self.pool.get('res.partner').browse(cr, uid, part)
65         if partner.sale_warn != 'no-message':
66             if partner.sale_warn == 'block':
67                 raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.sale_warn_msg)
68             title =  _("Warning for %s") % partner.name
69             message = partner.sale_warn_msg
70             warning = {
71                     'title': title,
72                     'message': message,
73             }
74
75         result =  super(sale_order, self).onchange_partner_id(cr, uid, ids, part)
76         
77         if result.get('warning',False):
78             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
79             warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
80             
81         return {'value': result.get('value',{}), 'warning':warning}
82 sale_order()
83
84
85 class purchase_order(osv.osv):
86     _inherit = 'purchase.order'
87     def onchange_partner_id(self, cr, uid, ids, part):
88         if not part:
89             return {'value':{'partner_address_id': False}}
90         warning = {}
91         title = False
92         message = False
93         partner = self.pool.get('res.partner').browse(cr, uid, part)
94         if partner.purchase_warn != 'no-message':
95             if partner.purchase_warn == 'block':
96                 raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.purchase_warn_msg)
97             title = _("Warning for %s") % partner.name
98             message = partner.purchase_warn_msg
99             warning = {
100                 'title': title,
101                 'message': message
102                 }
103         result =  super(purchase_order, self).onchange_partner_id(cr, uid, ids, part)
104         
105         if result.get('warning',False):
106             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
107             warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
108             
109         return {'value': result.get('value',{}), 'warning':warning}
110     
111 purchase_order()
112
113
114 class account_invoice(osv.osv):
115     _inherit = 'account.invoice'
116     def onchange_partner_id(self, cr, uid, ids, type, partner_id,
117             date_invoice=False, payment_term=False, partner_bank_id=False):
118         
119         if not partner_id:
120             return {'value': {
121             'address_contact_id': False ,
122             'address_invoice_id': False,
123             'account_id': False,
124             'payment_term': False,
125             }
126         }
127         warning = {}
128         title = False
129         message = False
130         partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
131         if partner.invoice_warn != 'no-message':
132             if partner.invoice_warn == 'block':
133                 raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.invoice_warn_msg)
134             
135             title = _("Warning for %s") % partner.name
136             message = partner.invoice_warn_msg
137             warning = {
138                 'title': title,
139                 'message': message
140                 }
141         result =  super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id,
142             date_invoice=False, payment_term=False, partner_bank_id=False)
143         
144         if result.get('warning',False):
145             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
146             warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
147         
148         return {'value': result.get('value',{}), 'warning':warning}
149     
150 account_invoice()
151
152 class stock_picking(osv.osv):
153     _inherit = 'stock.picking'
154     
155     def onchange_partner_in(self, cr, uid, context, partner_id=None):
156         if not partner_id:
157             return {}
158         partner = self.pool.get('res.partner.address').browse(cr, uid, [partner_id])[0].partner_id
159         warning = {}
160         title = False
161         message = False
162         if partner.picking_warn != 'no-message':
163             if partner.picking_warn == 'block':
164                 raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.picking_warn_msg)
165             title = _("Warning for %s") % partner.name
166             message = partner.picking_warn_msg
167             warning = {
168                 'title': title,
169                 'message': message
170             }
171         result =  super(stock_picking, self).onchange_partner_in(cr, uid, context, partner_id)
172         if result.get('warning',False):
173             warning['title'] = title and title +' & '+ result['warning']['title'] or result['warning']['title']
174             warning['message'] = message and message + ' ' + result['warning']['message'] or result['warning']['message']
175         
176         return {'value': result.get('value',{}), 'warning':warning}
177     
178 stock_picking()
179
180 class product_product(osv.osv):
181     _inherit = 'product.product'
182     _columns = {
183          'sale_line_warn' : fields.selection(WARNING_MESSAGE,'Sale Order Line', help=WARNING_HELP),
184          'sale_line_warn_msg' : fields.text('Message for Sale Order Line'),
185          'purchase_line_warn' : fields.selection(WARNING_MESSAGE,'Purchase Order Line', help=WARNING_HELP),
186          'purchase_line_warn_msg' : fields.text('Message for Purchase Order Line'),
187      }
188     
189     _defaults = {
190          'sale_line_warn' : lambda *a: 'no-message',
191          'purchase_line_warn' : lambda *a: 'no-message',
192     }
193     
194 product_product()
195
196 class sale_order_line(osv.osv):
197     _inherit = 'sale.order.line'
198     def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,
199             uom=False, qty_uos=0, uos=False, name='', partner_id=False,
200             lang=False, update_tax=True, date_order=False, packaging=False,
201             fiscal_position=False, flag=False):
202         warning = {}
203         if not product:
204             return {'value': {'th_weight' : 0, 'product_packaging': False,
205                 'product_uos_qty': qty}, 'domain': {'product_uom': [],
206                    'product_uos': []}}
207         product_obj = self.pool.get('product.product') 
208         product_info = product_obj.browse(cr, uid, product)
209         title = False
210         message = False
211         
212         if product_info.sale_line_warn != 'no-message':
213             if product_info.sale_line_warn == 'block':
214                 raise osv.except_osv(_('Alert for %s !') % (product_info.name), product_info.sale_line_warn_msg)
215             title = _("Warning for %s") % product_info.name
216             message = product_info.sale_line_warn_msg
217             warning['title'] = title
218             warning['message'] = message
219             
220         result =  super(sale_order_line, self).product_id_change( cr, uid, ids, pricelist, product, qty,
221             uom, qty_uos, uos, name, partner_id,
222             lang, update_tax, date_order, packaging, fiscal_position, flag)
223 #        if title and message:
224 #             warning['title'] = title
225 #             warning['message']= message
226
227         if result.get('warning',False):
228             warning['title'] = title and title +' & '+result['warning']['title'] or result['warning']['title']
229             warning['message'] = message and message +'\n\n'+result['warning']['message'] or result['warning']['message']
230         
231         return {'value': result.get('value',{}), 'warning':warning}
232     
233 sale_order_line()
234
235 class purchase_order_line(osv.osv):
236     _inherit = 'purchase.order.line'
237     def product_id_change(self,cr, uid, ids, pricelist, product, qty, uom,
238             partner_id, date_order=False, fiscal_position=False):
239         warning = {}
240         if not product:
241             return {'value': {'price_unit': 0.0, 'name':'','notes':'', 'product_uom' : False}, 'domain':{'product_uom':[]}}
242         product_obj = self.pool.get('product.product') 
243         product_info = product_obj.browse(cr, uid, product)
244         title = False
245         message = False
246         
247         if product_info.purchase_line_warn != 'no-message':
248             if product_info.purchase_line_warn == 'block':
249                 raise osv.except_osv(_('Alert for %s !') % (product_info.name), product_info.purchase_line_warn_msg)
250             title = _("Warning for %s") % product_info.name
251             message = product_info.purchase_line_warn_msg
252             warning['title'] = title
253             warning['message'] = message
254             
255         result =  super(purchase_order_line, self).product_id_change(cr, uid, ids, pricelist, product, qty, uom,
256             partner_id, date_order, fiscal_position)
257
258         if result.get('warning',False):
259             warning['title'] = title and title +' & '+result['warning']['title'] or result['warning']['title']
260             warning['message'] = message and message +'\n\n'+result['warning']['message'] or result['warning']['message']
261         
262         return {'value': result.get('value',{}), 'warning':warning}
263     
264 purchase_order_line()
265
266
267 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: