[MERGE]: Merged lp:~openerp-dev/openobject-addons/trunk-improve-purchase-requisition...
[odoo/odoo.git] / addons / purchase_requisition / purchase_requisition.py
index 85a81c4..fa0a807 100644 (file)
@@ -31,7 +31,7 @@ import decimal_precision as dp
 class purchase_requisition(osv.osv):
     _name = "purchase.requisition"
     _description="Purchase Requisition"
-    _inherit = ['ir.needaction_mixin']
+    _inherit = ['ir.needaction_mixin', 'mail.thread']
     _columns = {
         'name': fields.char('Requisition Reference', size=32,required=True),
         'origin': fields.char('Source', size=32),
@@ -211,6 +211,43 @@ class purchase_order(osv.osv):
     _columns = {
         'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition')
     }
+    def default_get(self, cr, uid, fields, context=None):
+        if not context:
+            context = {}
+        val_list = []
+        requisition_id = {}
+        product_obj = self.pool.get('product.product')
+        requisition_line_obj = self.pool.get('purchase.requisition.line')
+        purchase_order_line_obj = self.pool.get('purchase.order.line')
+        res = super(purchase_order, self).default_get(cr, uid, fields, context=context)
+        product_ids = context.get('product_ids', False)
+        if product_ids:
+            for id in product_ids:
+                if  id[0] == 4:
+                    requisition_data = requisition_line_obj.browse(cr, uid, id[1], context=context)
+                    requisition_id.update({'requisition_id': requisition_data.requisition_id.id})
+                    line_vals={'product_id': requisition_data.product_id.id, 'product_qty': requisition_data.product_qty, 'name': requisition_data.product_id.name}
+                elif id[0] == 0:
+                   product_data = id[2]
+                   name = product_obj.browse(cr, uid, product_data.get('product_id'), context=context).name
+                   line_vals = {'product_id': product_data.get('product_id'), 'product_qty': product_data.get('product_qty'), 'name': name}
+                val_list.append((0,0,line_vals))
+        res.update({'order_line': val_list, 'requisition_id': requisition_id.get('requisition_id')})
+        return res
+        
+    def onchange_partner_id(self, cr, uid, ids, partner_id, requisition_id):
+        res = {}
+        res = super(purchase_order, self).onchange_partner_id(cr, uid, ids, partner_id)
+        res_partner = self.pool.get('res.partner')
+        value = {'partner_id': ''}
+        requisition_pool = self.pool.get('purchase.requisition')
+        supplier = res_partner.browse(cr, uid, partner_id)
+        if requisition_id: 
+            requisition = requisition_pool.browse(cr, uid, requisition_id)
+            if supplier.id in filter(lambda x: x, [rfq.state <> 'cancel' and rfq.partner_id.id or None for rfq in requisition.purchase_ids]):
+                 raise osv.except_osv(_('Warning'), _('You have already one %s purchase order for this partner, you must cancel this purchase order to create a new quotation.') % rfq.state)
+        return res
+        
     def wkf_confirm_order(self, cr, uid, ids, context=None):
         res = super(purchase_order, self).wkf_confirm_order(cr, uid, ids, context=context)
         proc_obj = self.pool.get('procurement.order')