From f162ad8845ada71545bfcd79d5a77e923e904618 Mon Sep 17 00:00:00 2001 From: "rha@tinyerp.com" <> Date: Mon, 3 Jan 2011 16:24:56 +0530 Subject: [PATCH 1/4] [Fix] stock: incoming shipments price is wrong lp bug: https://launchpad.net/bugs/696372 fixed bzr revid: rha@tinyerp.com-20110103105456-46dhel6b7b8891uc --- addons/purchase/purchase.py | 3 +- addons/stock/wizard/stock_partial_picking.py | 46 ++++++++++---------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 0de19189fc3..6adb726b97a 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -455,6 +455,7 @@ class purchase_order(osv.osv): 'state': 'draft', 'purchase_line_id': order_line.id, 'company_id': order.company_id.id, + 'price_unit': order_line.price_unit }) if order_line.move_dest_id: self.pool.get('stock.move').write(cr, uid, [order_line.move_dest_id.id], {'location_id':order.location_id.id}) @@ -672,7 +673,7 @@ class purchase_order_line(osv.osv): seller_delay = 0 prod_name = self.pool.get('product.product').name_get(cr, uid, [prod.id], context=context)[0][1] - res = {} + res = {} for s in prod.seller_ids: if s.name.id == partner_id: seller_delay = s.delay diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py index ad75c142a96..305304e8c7e 100644 --- a/addons/stock/wizard/stock_partial_picking.py +++ b/addons/stock/wizard/stock_partial_picking.py @@ -32,24 +32,24 @@ class stock_partial_picking(osv.osv_memory): 'product_moves_out' : fields.one2many('stock.move.memory.out', 'wizard_id', 'Moves'), 'product_moves_in' : fields.one2many('stock.move.memory.in', 'wizard_id', 'Moves'), } - + def __is_in(self,cr, uid, pick_ids): """ @return: True if one of the moves has as picking type 'in' """ if not pick_ids: return False - + pick_obj = self.pool.get('stock.picking') pick_ids = pick_obj.search(cr, uid, [('id','in',pick_ids)]) - - + + for pick in pick_obj.browse(cr, uid, pick_ids): for move in pick.move_lines: if pick.type == 'in' and move.product_id.cost_method == 'average': return True return False - + def __get_picking_type(self, cr, uid, pick_ids): if self.__is_in(cr, uid, pick_ids): return "product_moves_in" @@ -62,11 +62,11 @@ class stock_partial_picking(osv.osv_memory): def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False,submenu=False): result = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu) - - + + picking_ids = context.get('active_ids', False) picking_type = self.__get_picking_type(cr, uid, picking_ids) - + _moves_arch_lst = """
From e9f7a90ac82d9b5e2a84bcba94d989f098c044c4 Mon Sep 17 00:00:00 2001 From: "rha@tinyerp.com" <> Date: Fri, 7 Jan 2011 14:41:58 +0530 Subject: [PATCH 4/4] [Fix]: production orders waiting raw materials can not be cancelled lp bug: https://launchpad.net/bugs/498033 fixed bzr revid: rha@tinyerp.com-20110107091158-1qrugqztsw5ulktr --- addons/mrp/mrp.py | 14 ++++++++++---- addons/mrp/mrp_view.xml | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index a57b76bf2ce..c5ac35ce0df 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -444,7 +444,7 @@ class mrp_production(osv.osv): 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)]), 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null', help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production plannification."), - 'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True, + 'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True, ondelete="restrict", help="This is the internal picking list that brings the finished product to the production plan"), 'move_prod_id': fields.many2one('stock.move', 'Move product', readonly=True), 'move_lines': fields.many2many('stock.move', 'mrp_production_move_ids', 'production_id', 'move_id', 'Products to Consume', domain=[('state','not in', ('done', 'cancel'))], states={'done':[('readonly',True)]}), @@ -602,12 +602,18 @@ class mrp_production(osv.osv): workcenter_line_obj.create(cr, uid, line) return len(results) - def action_cancel(self, cr, uid, ids): + def action_cancel(self, cr, uid, ids, context=None): """ Cancels the production order and related stock moves. @return: True """ + if context is None: + context = {} move_obj = self.pool.get('stock.move') - for production in self.browse(cr, uid, ids): + for production in self.browse(cr, uid, ids, context=context): + if production.picking_id.state not in ('draft', 'cancel'): + raise osv.except_osv( + _('Could not cancel manufacturing order !'), + _('You must first cancel related picking attached to this manufacturing order.')) if production.move_created_ids: move_obj.action_cancel(cr, uid, [x.id for x in production.move_created_ids]) move_obj.action_cancel(cr, uid, [x.id for x in production.move_lines]) @@ -664,7 +670,7 @@ class mrp_production(osv.osv): """ stock_mov_obj = self.pool.get('stock.move') production = self.browse(cr, uid, production_id, context=context) - + final_product_todo = [] produced_qty = 0 diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 000ae6cbcf2..f6b7fb78b88 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -630,7 +630,8 @@