From 97d2c5108ea0748304bde543f2a0581f7c6dd2cc Mon Sep 17 00:00:00 2001 From: Josse Colpaert Date: Wed, 12 Aug 2015 11:49:58 +0200 Subject: [PATCH] [FIX] purchase_requisition: Make sure run of procurements takes into account creating purchase requisitions As the run method was optimized to assign and execute multiple procurements at once in purchase, the method for creating purchase requisitions was not triggered anymore. It is solved by inheriting from make_po instead in purchase_requisition. --- .../purchase_requisition.py | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index e63e497cc07..ea4c8995819 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -398,28 +398,36 @@ class procurement_order(osv.osv): 'requisition_id': fields.many2one('purchase.requisition', 'Latest Requisition') } - def _run(self, cr, uid, procurement, context=None): + def make_po(self, cr, uid, ids, context=None): requisition_obj = self.pool.get('purchase.requisition') warehouse_obj = self.pool.get('stock.warehouse') - if procurement.rule_id and procurement.rule_id.action == 'buy' and procurement.product_id.purchase_requisition: - warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id)], context=context) - requisition_id = requisition_obj.create(cr, uid, { - 'origin': procurement.origin, - 'date_end': procurement.date_planned, - 'warehouse_id': warehouse_id and warehouse_id[0] or False, - 'company_id': procurement.company_id.id, - 'procurement_id': procurement.id, - 'picking_type_id': procurement.rule_id.picking_type_id.id, - 'line_ids': [(0, 0, { - 'product_id': procurement.product_id.id, - 'product_uom_id': procurement.product_uom.id, - 'product_qty': procurement.product_qty - - })], - }) - self.message_post(cr, uid, [procurement.id], body=_("Purchase Requisition created"), context=context) - return self.write(cr, uid, [procurement.id], {'requisition_id': requisition_id}, context=context) - return super(procurement_order, self)._run(cr, uid, procurement, context=context) + req_ids = [] + res = {} + for procurement in self.browse(cr, uid, ids, context=context): + res[procurement.id] = False + if procurement.product_id.purchase_requisition: + warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id)], context=context) + requisition_id = requisition_obj.create(cr, uid, { + 'origin': procurement.origin, + 'date_end': procurement.date_planned, + 'warehouse_id': warehouse_id and warehouse_id[0] or False, + 'company_id': procurement.company_id.id, + 'procurement_id': procurement.id, + 'picking_type_id': procurement.rule_id.picking_type_id.id, + 'line_ids': [(0, 0, { + 'product_id': procurement.product_id.id, + 'product_uom_id': procurement.product_uom.id, + 'product_qty': procurement.product_qty + })], + }) + self.message_post(cr, uid, [procurement.id], body=_("Purchase Requisition created"), context=context) + self.write(cr, uid, [procurement.id], {'requisition_id': requisition_id}, context=context) + req_ids += [procurement.id] + res[procurement.id] = True + set_others = set(ids) - set(req_ids) + if set_others: + res.update(super(procurement_order, self).make_po(cr, uid, list(set_others), context=context)) + return res def _check(self, cr, uid, procurement, context=None): if procurement.rule_id and procurement.rule_id.action == 'buy' and procurement.product_id.purchase_requisition: