From f12fc7ed1625bcd622398035044f97f894e5d411 Mon Sep 17 00:00:00 2001 From: Thibault Francois Date: Thu, 11 Nov 2010 22:58:22 +0100 Subject: [PATCH 01/24] [IMP] stock/wizard : partial_move and partial_picking cleaning o2m field instead of mutli field dynamic generation bzr revid: tfr@openerp.com-20101111215822-fvvxrntyo3w85dnj --- addons/stock/wizard/stock_partial_move.py | 103 +++++--- .../stock/wizard/stock_partial_move_view.xml | 70 ++++-- addons/stock/wizard/stock_partial_picking.py | 232 +++++++----------- 3 files changed, 214 insertions(+), 191 deletions(-) diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py index ba39f172f22..95000515891 100644 --- a/addons/stock/wizard/stock_partial_move.py +++ b/addons/stock/wizard/stock_partial_move.py @@ -24,29 +24,56 @@ from tools.translate import _ import time -class stock_partial_move_memory(osv.osv_memory): - _name = "stock.move.memory" +class stock_partial_move_memory_out(osv.osv_memory): + _name = "stock.move.memory.out" _rec_name = 'product_id' _columns = { - 'product_id' : fields.many2one('product.product', string="Product", required=True, readonly=True), + 'product_id' : fields.many2one('product.product', string="Product", required=True), 'quantity' : fields.float("Quantity", required=True), - 'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True, readonly=True), + 'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True), 'prodlot_id' : fields.many2one('stock.production.lot', 'Production Lot'), 'move_id' : fields.many2one('stock.move', "Move"), 'wizard_id' : fields.many2one('stock.partial.move', string="Wizard"), - 'cost' : fields.float("Cost", help="Unit Cost for this product line", readonly=True), - 'currency' : fields.many2one('res.currency', string="Currency", help="Currency in which Unit cost is expressed", readonly=True), + 'cost' : fields.float("Cost", help="Unit Cost for this product line"), + 'currency' : fields.many2one('res.currency', string="Currency", help="Currency in which Unit cost is expressed"), } +class stock_partial_move_memory_in(osv.osv_memory): + _inherit = "stock.move.memory.out" + _name = "stock.move.memory.in" + class stock_partial_move(osv.osv_memory): _name = "stock.partial.move" _description = "Partial Move" _columns = { 'date': fields.datetime('Date', required=True), 'type': fields.char("Type", size=3), - 'product_moves' : fields.one2many('stock.move.memory', 'wizard_id', 'Moves'), + '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, move_ids): + """ + @return: True if one of the moves has as picking type 'in' + """ + if not move_ids: + return False + + move_obj = self.pool.get('stock.move') + move_ids = move_obj.search(cr, uid, [('id','in',move_ids)]) + + for move in move_obj.browse(cr, uid, move_ids): + if move.picking_id.type == 'in': + return True + return False + + def __get_picking_type(self, cr, uid, move_ids): + if self.__is_in(cr, uid, move_ids): + return "product_moves_in" + else: + return "product_moves_out" + def view_init(self, cr, uid, fields_list, context=None): res = super(stock_partial_move, self).view_init(cr, uid, fields_list, context=context) move_obj = self.pool.get('stock.move') @@ -68,6 +95,7 @@ class stock_partial_move(osv.osv_memory): 'prodlot_id' : move.prodlot_id.id, 'move_id' : move.id, } + if move.picking_id.type == 'in': move_memory.update({ 'cost' : move.product_id.standard_price, @@ -89,37 +117,36 @@ class stock_partial_move(osv.osv_memory): return res _defaults = { - 'product_moves' : __get_active_stock_moves, - 'date' : time.strftime('%Y-%m-%d %H:%M:%S'), + 'product_moves_in' : __get_active_stock_moves, + 'product_moves_out' : __get_active_stock_moves, + 'date' : lambda *a : time.strftime('%Y-%m-%d %H:%M:%S'), } - + def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): - height = 2 * 25; + if not context: + context = {} + message = { 'title' : _('Deliver Products'), 'info' : _('Delivery Information'), 'button' : _('Deliver'), } - if context: - height = (len(context.get('active_ids', [])) + 1) * 25 + if context: if context.get('product_receive', False): message = { 'title' : _('Receive Products'), 'info' : _('Receive Information'), 'button' : _('Receive'), - } - message['height'] = height - - + } + + move_ids = context.get('active_ids', False) + message['picking_type'] = self.__get_picking_type(cr, uid, move_ids) result = super(stock_partial_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu) _moves_fields = result['fields'] - _moves_fields.update({'product_moves' : - { - 'relation': 'stock.move.memory', - 'type' : 'one2many', - 'string' : 'Product Moves', - } + _moves_fields.update({ + 'product_moves_in' : {'relation': 'stock.move.memory.in', 'type' : 'one2many', 'string' : 'Product Moves'}, + 'product_moves_out' : {'relation': 'stock.move.memory.out', 'type' : 'one2many', 'string' : 'Product Moves'} }) _moves_arch_lst = """ @@ -127,7 +154,7 @@ class stock_partial_move(osv.osv_memory): - +