From dee969929a000e069b1d2bf2d3e362ae7aed6d9e Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 25 Jun 2014 12:00:14 +0200 Subject: [PATCH 1/2] [FIX] purchase_requisition: duplicated stock moves When a purchase requisition is created from a procurement order, a first stock move is created, not associated to any purchase orders Then, on purchase order creation and confirmation, in the purchase requisition, new stock moves are created, associated to the purchase order. The existing stock move issued from the procurement order which created the purchase requisition remained untouched, leading to wrong inventory values To fix this, the destination location of the stock move of the procurement order is written on the source location A proper fix should be to use a dedicated workflow for puchase requisition, but this can't be done in 7.0, it has to be done in master/trunk --- addons/purchase_requisition/purchase_requisition.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 3b8ea1c06c7..031c902e4bb 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -73,7 +73,7 @@ class purchase_requisition(osv.osv): if str(purchase_id.state) in('draft'): purchase_order_obj.action_cancel(cr,uid,[purchase_id.id]) procurement_ids = self.pool['procurement.order'].search(cr, uid, [('requisition_id', 'in', ids)], context=context) - self.pool['procurement.order'].write(cr, uid, procurement_ids, {'state': 'cancel'}, context=context) + self.pool['procurement.order'].action_done(cr, uid, procurement_ids) return self.write(cr, uid, ids, {'state': 'cancel'}) def tender_in_progress(self, cr, uid, ids, context=None): @@ -84,7 +84,7 @@ class purchase_requisition(osv.osv): def tender_done(self, cr, uid, ids, context=None): procurement_ids = self.pool['procurement.order'].search(cr, uid, [('requisition_id', 'in', ids)], context=context) - self.pool['procurement.order'].write(cr, uid, procurement_ids, {'state': 'done'}, context=context) + self.pool['procurement.order'].action_done(cr, uid, procurement_ids) return self.write(cr, uid, ids, {'state':'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')}, context=context) def _planned_date(self, requisition, delay=0.0): @@ -218,6 +218,10 @@ class purchase_order(osv.osv): wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'purchase.order', order.id, 'purchase_cancel', cr) po.requisition_id.tender_done(context=context) + if po.requisition_id and all(purchase_id.state in ['draft', 'cancel'] for purchase_id in po.requisition_id.purchase_ids if purchase_id.id != po.id): + procurement_ids = self.pool['procurement.order'].search(cr, uid, [('requisition_id', '=', po.requisition_id.id)], context=context) + for procurement in proc_obj.browse(cr, uid, procurement_ids, context=context): + procurement.move_id.write({'location_id': procurement.move_id.location_dest_id.id}) return res purchase_order() From df6b37c472772ef8911671b54caee1769cf77706 Mon Sep 17 00:00:00 2001 From: dhr-odoo Date: Wed, 25 Jun 2014 12:07:02 +0200 Subject: [PATCH 2/2] [FIX] account: add multicompany rule to account.subscription.line The wizard to generate recurring entries did not respect multicompany rules as the request was done in plain sql. Add ir.rule and use the orm (opw 607782) --- addons/account/security/account_security.xml | 7 +++++++ addons/account/wizard/account_subscription_generate.py | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml index 9a2383de45b..65d3e95be54 100644 --- a/addons/account/security/account_security.xml +++ b/addons/account/security/account_security.xml @@ -139,6 +139,13 @@ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + Account subscription line company rule + + + ['|',('subscription_id.model_id.company_id','=',False),('subscription_id.model_id.company_id','child_of',[user.company_id.id])] + + Invoice Line company rule diff --git a/addons/account/wizard/account_subscription_generate.py b/addons/account/wizard/account_subscription_generate.py index f5babc4fd87..65604446e9f 100644 --- a/addons/account/wizard/account_subscription_generate.py +++ b/addons/account/wizard/account_subscription_generate.py @@ -36,11 +36,11 @@ class account_subscription_generate(osv.osv_memory): def action_generate(self, cr, uid, ids, context=None): mod_obj = self.pool.get('ir.model.data') act_obj = self.pool.get('ir.actions.act_window') + sub_line_obj = self.pool.get('account.subscription.line') moves_created=[] for data in self.read(cr, uid, ids, context=context): - cr.execute('select id from account_subscription_line where date<%s and move_id is null', (data['date'],)) - line_ids = map(lambda x: x[0], cr.fetchall()) - moves = self.pool.get('account.subscription.line').move_create(cr, uid, line_ids, context=context) + line_ids = sub_line_obj.search(cr, uid, [('date', '<', data['date']), ('move_id', '=', False)], context=context) + moves = sub_line_obj.move_create(cr, uid, line_ids, context=context) moves_created.extend(moves) result = mod_obj.get_object_reference(cr, uid, 'account', 'action_move_line_form') id = result and result[1] or False