[WIP] Sequence on picking types
authorJosse Colpaert <jco@openerp.com>
Wed, 24 Jul 2013 15:32:35 +0000 (17:32 +0200)
committerJosse Colpaert <jco@openerp.com>
Wed, 24 Jul 2013 15:32:35 +0000 (17:32 +0200)
bzr revid: jco@openerp.com-20130724153235-0we14ofbquanuo2h

addons/purchase/purchase.py
addons/stock/product.py
addons/stock/product_view.xml
addons/stock/stock.py
addons/stock/stock_data.xml
addons/stock/stock_view.xml

index 18e1f98..319b126 100644 (file)
@@ -622,13 +622,15 @@ class purchase_order(osv.osv):
         return user_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
 
     def _prepare_order_picking(self, cr, uid, order, context=None):
+        type_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'stock', 'picking_type_in')[1]
+        type = self.pool.get("picking.type").browse(cr, uid, type_id, context=context)
+        
         return {
-            'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking'),
+            'name': self.pool.get('ir.sequence').get(cr, uid, type.sequence_id.id, 'id'),
             'origin': order.name + ((order.origin and (':' + order.origin)) or ''),
             'date': self.date_to_datetime(cr, uid, order.date_order, context),
             'partner_id': order.dest_address_id.id or order.partner_id.id,
             'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none',
-            'type': 'in',
             'partner_id': order.dest_address_id.id or order.partner_id.id,
             'purchase_id': order.id,
             'company_id': order.company_id.id,
@@ -652,7 +654,6 @@ class purchase_order(osv.osv):
             'partner_id': order.dest_address_id.id or order.partner_id.id,
             'move_dest_id': order_line.move_dest_id.id,
             'state': 'draft',
-            'type':'in',
             'purchase_line_id': order_line.id,
             'company_id': order.company_id.id,
             'price_unit': order_line.price_unit, 
index fbd8c21..1563ee1 100644 (file)
@@ -31,7 +31,8 @@ class product_product(osv.osv):
         move_pool=self.pool.get('stock.move')
         moves = move_pool.read_group(cr, uid, [
             ('product_id', 'in', ids),
-            ('picking_id.type', '=', 'in'),
+            ('location_id.usage', '!=', 'internal'),
+            ('location_dest_id.usage', '=', 'internal'),
             ('state','in',('confirmed','assigned','pending'))
         ], ['product_id'], ['product_id'])
         for move in moves:
@@ -39,7 +40,8 @@ class product_product(osv.osv):
             res[product_id]['reception_count'] = move['product_id_count']
         moves = move_pool.read_group(cr, uid, [
             ('product_id', 'in', ids),
-            ('picking_id.type', '=', 'out'),
+            ('location_id.usage', '=', 'internal'),
+            ('location_dest_id.usage', '!=', 'internal'),
             ('state','in',('confirmed','assigned','pending'))
         ], ['product_id'], ['product_id'])
         for move in moves:
index 6a9bc5b..d057c47 100644 (file)
@@ -48,7 +48,7 @@
             <field name="type">ir.actions.act_window</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,form</field>
-            <field name="domain">[('picking_id.type','=','in')]</field>
+            <field name="domain">[('picking_type_id','=',ref("picking_type_in")), ('location_id.usage','!=','internal'), ('location_dest_id.usage', '=', 'internal')]</field>
             <field name="view_id" ref="view_move_tree_reception_picking"/>
             <field name="context" eval="'{\'search_default_product_id\': [active_id]}'"/>
             <field name="help" type="html">
@@ -68,8 +68,8 @@
             <field name="type">ir.actions.act_window</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,form</field>
-            <field name="domain">[('picking_id.type','=','out')]</field>
             <field name="view_id" ref="view_move_tree_reception_picking"/>
+            <field name="domain">[('picking_type_id','=',ref("picking_type_out")), ('location_id.usage','=','internal'), ('location_dest_id.usage', '!=', 'internal')]</field>
             <field name="context" eval="'{\'search_default_product_id\': [active_id]}'"/>
             <field name="help" type="html">
               <p class="oe_view_nocontent_create">
index 5adaca5..f952b9e 100644 (file)
@@ -403,7 +403,12 @@ class stock_picking(osv.osv):
 
     def create(self, cr, user, vals, context=None):
         if ('name' not in vals) or (vals.get('name') in ('/', False)):
-            vals['name'] = self.pool.get('ir.sequence').get(cr, user, self._name)
+            import pdb
+            pdb.set_trace()
+            if 'move_lines' in vals:
+                if vals['move_lines'][0] and vals['move_lines'][0][2] and vals['move_lines'][0][2]['picking_type_id']:
+                    sequence_id = self.pool.get('stock.picking.type').browse(cr, user, vals['move_lines'][0][2]['picking_type_id'], context=context).sequence_id.id 
+                    vals['name'] = self.pool.get('ir.sequence').get_id(cr, user, sequence_id, 'id', context=context)
         return super(stock_picking, self).create(cr, user, vals, context)
 
 
@@ -468,11 +473,11 @@ class stock_picking(osv.osv):
         'pack_operation_ids': fields.one2many('stock.pack.operation', 'picking_id', string='Related Packing Operations'), 
          
         # Used to search a product on pickings
-        'product_id': fields.related('move_lines', 'product_id', type='many2one', relation='product.product', string='Product'),
-        'location_id': fields.related('move_lines', 'location_id', type='many2one', relation='stock.location', string='Location'),
-        'location_dest_id': fields.related('move_lines', 'location_dest_id', type='many2one', relation='stock.location', string='Destination Location'),
-        'group_id': fields.related('move_lines', 'group_id', type='many2one', relation='procurement.group', string='Procurement Group'),
-        'picking_type_id': fields.related('move_lines', 'picking_type_id', type='many2one', relation='stock.picking.type', string="Picking Type"),
+        'product_id': fields.related('move_lines', 'product_id', type='many2one', relation='product.product', string='Product'),#?
+        'location_id': fields.related('move_lines', 'location_id', type='many2one', relation='stock.location', string='Location', readonly=True),
+        'location_dest_id': fields.related('move_lines', 'location_dest_id', type='many2one', relation='stock.location', string='Destination Location', readonly=True),
+        'group_id': fields.related('move_lines', 'group_id', type='many2one', relation='procurement.group', string='Procurement Group', readonly=True),
+        'picking_type_id': fields.related('move_lines', 'picking_type_id', type='many2one', relation='stock.picking.type', string="Picking Type", readonly=True),
     }
     _defaults = {
         'name': lambda self, cr, uid, context: '/',
@@ -2301,13 +2306,14 @@ class product_product(osv.osv):
     }
 
 class stock_picking_type(osv.osv):
-    _name="stock.picking.type"
+    _name = "stock.picking.type"
     _columns = {
         'name': fields.char('name', size=30), 
         'pack': fields.boolean('Pack', 'This picking type needs packing interface'), 
         'delivery': fields.boolean('Print delivery'),
-        
+        'sequence_id': fields.many2one('ir.sequence', 'Sequence', required = True),
             }
+    
 
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index ba0e2dc..9e776a6 100644 (file)
@@ -103,17 +103,53 @@ watch your stock valuation, and track production lots upstream and downstream (b
             Picking types
          -->
 
+        <!-- Sequences for picking types   -->
+        <record id="seq_picking_type_in" model="ir.sequence">
+            <field name="name">Picking in</field>
+            <field name="prefix">IN</field>
+            <field name="padding">5</field>
+            <field name="company_id" eval="False"/>
+        </record>
+        
+        <record id="seq_picking_type_out" model="ir.sequence">
+            <field name="name">Picking out</field>
+            <field name="prefix">OUT</field>
+            <field name="padding">5</field>
+            <field name="company_id" eval="False"/>
+        </record>
+        
+        <record id="seq_picking_type_internal" model="ir.sequence">
+            <field name="name">Picking internal</field>
+            <field name="prefix">INT</field>
+            <field name="padding">5</field>
+            <field name="company_id" eval="False"/>
+        </record>
+        
+        <record id="seq_picking_type_inventory" model="ir.sequence">
+            <field name="name">Picking inventory</field>
+            <field name="prefix">INV</field>
+            <field name="padding">5</field>
+            <field name="company_id" eval="False"/>
+        </record>
+        
         <record id="picking_type_in" model="stock.picking.type">
             <field name="name">in</field>
+            <field name="sequence_id" ref="seq_picking_type_in"/>
         </record>
+        
+
         <record id="picking_type_out" model="stock.picking.type">
             <field name="name">out</field>
+            <field name="sequence_id" ref="seq_picking_type_out"/>
         </record>
+        
         <record id="picking_type_internal" model="stock.picking.type">
             <field name="name">internal</field>
+            <field name="sequence_id" ref="seq_picking_type_internal"/>
         </record>
         <record id="picking_type_inventory" model="stock.picking.type">
             <field name="name">inventory</field>
+            <field name="sequence_id" ref="seq_picking_type_inventory"/>
         </record>
 
 
index 7358cf0..8f86f75 100644 (file)
                     </group>
                     <notebook>
                         <page string="Products">
-                            <field name="move_lines" context="{'address_in_id': partner_id, 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree', 'picking_type': 'internal'}"/>
+                            <field name="move_lines" context="{'address_in_id': partner_id, 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/>
                             <field name="pack_operation_ids" domain="[('result_package_id', '!=', False)]">
                                 <tree editable="top">
                                     <field name="product_id"/>
             <field name="type">ir.actions.act_window</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,form</field>
-            <field name="domain">['|','&amp;',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&amp;',('picking_id','!=',False),('picking_id.type','=','out')]</field>
+            <field name="domain">['|','&amp;',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&amp;',('picking_id','!=',False)]</field>
             <field name="view_id" ref="view_move_tree_reception_picking"/>
-            <field name="context">{'picking_type': 'out', 'search_default_future': True}</field>
+            <field name="context">{'search_default_future': True}</field>
             <field name="help" type="html">
               <p class="oe_view_nocontent_create">
                 Click to register a product delivery.