diff --git a/addons/purchase_requisition/__openerp__.py b/addons/purchase_requisition/__openerp__.py index 03a7cf2362c..d2448baeacc 100644 --- a/addons/purchase_requisition/__openerp__.py +++ b/addons/purchase_requisition/__openerp__.py @@ -33,6 +33,9 @@ related requisition. This new object will regroup and will allow you to easily keep track and order all your purchase orders. """, 'depends' : ['purchase'], + 'js': [ + 'static/src/js/web_addons.js', + ], 'demo': ['purchase_requisition_demo.xml'], 'data': ['security/purchase_tender.xml', 'wizard/purchase_requisition_partner_view.xml', diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 1634568d197..7f2a740b9f0 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -203,16 +203,30 @@ class purchase_requisition(osv.osv): """ Generate all purchase order based on selected lines, should only be called on one tender at a time """ + po = self.pool.get('purchase.order') + poline = self.pool.get('purchase.order.line') id_per_supplier = {} - for po_line in self.browse(cr, uid, id, context=context)[0].po_line_ids: + tender = self.browse(cr, uid, id, context=context)[0] + for po_line in tender.po_line_ids: if po_line.state == 'confirmed': partner = po_line.partner_id.id if id_per_supplier.get(partner): id_per_supplier[partner].append(po_line.id) else: - id_per_supplier[partner] = [po_line.id] + id_per_supplier[partner] = [po_line] #TODO generate po based on supplier and check if a draft po is complete before creating a new one + for supplier, product_line in id_per_supplier.items(): + #duplicate po_line and change product_qty if needed + line_ids = [] + for line in product_line: + line_ids.append(poline.copy(cr, uid, line.id, default = {'product_qty': line.quantity_bid}, context=context)) + #copy a quotation for this supplier and change order_line then validate it + quotation_copy_id = po.search(cr, uid, [('requisition_id', '=', tender.id), ('partner_id', '=', supplier)], limit=1) + new_po = po.copy(cr, uid, quotation_copy_id, default = {'order_line': line_ids}, context=context) + #use workflow to set new PO state to confirm + + #TODO set previous line to cancel class purchase_requisition_line(osv.osv): diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index 739a878ab12..78e64fda6ae 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -216,7 +216,7 @@ purchase.order.line.tree.tender purchase.order.line - + diff --git a/addons/purchase_requisition/static/src/js/web_addons.js b/addons/purchase_requisition/static/src/js/web_addons.js new file mode 100644 index 00000000000..4624bf24520 --- /dev/null +++ b/addons/purchase_requisition/static/src/js/web_addons.js @@ -0,0 +1,30 @@ +openerp.purchase_requisition = function(instance) { + + var QWeb = instance.web.qweb, + _t = instance.web._t; + + instance.web.ListView.include({ + init: function() { + var self = this; + this._super.apply(this, arguments); + this.on('list_view_loaded', this, function() { + if (!!self.fields_view.arch.attrs.options) { + _.extend(self.options, py.eval(self.fields_view.arch.attrs.options)); + } + if (!!self.options.generate_po) { + if(self.__parentedParent.$el.find('.oe_generate_po').length == 0){ + var button = $("") + .click(this.proxy('generate_purchase_order')); + self.__parentedParent.$el.find('.oe_list_buttons').append(button); + } + } + }); + }, + generate_purchase_order: function () { + var self = this; + //self.dataset.model = current model (purchase or else) + new instance.web.Model(self.dataset.model).call("generate_po",[""]); + //self.dataset.parent_view.recursive_reload(); + }, + }); +} \ No newline at end of file