[MERGE] stock usability improvements
bzr revid: qdp-launchpad@openerp.com-20140424143838-a3so6ouc1q3la3ch
This commit is contained in:
commit
f402240ade
|
@ -1078,6 +1078,15 @@ class mrp_production(osv.osv):
|
||||||
production.write({'state': 'confirmed'}, context=context)
|
production.write({'state': 'confirmed'}, context=context)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def action_assign(self, cr, uid, ids, context=None):
|
||||||
|
"""
|
||||||
|
Checks the availability on the consume lines of the production order
|
||||||
|
"""
|
||||||
|
move_obj = self.pool.get("stock.move")
|
||||||
|
for production in self.browse(cr, uid, ids, context=context):
|
||||||
|
move_obj.action_assign(cr, uid, [x.id for x in production.move_lines], context=context)
|
||||||
|
|
||||||
|
|
||||||
def force_production(self, cr, uid, ids, *args):
|
def force_production(self, cr, uid, ids, *args):
|
||||||
""" Assigns products.
|
""" Assigns products.
|
||||||
@param *args: Arguments
|
@param *args: Arguments
|
||||||
|
|
|
@ -673,6 +673,7 @@
|
||||||
<header>
|
<header>
|
||||||
<button name="button_confirm" states="draft" string="Confirm Production" class="oe_highlight"/>
|
<button name="button_confirm" states="draft" string="Confirm Production" class="oe_highlight"/>
|
||||||
<button name="%(act_mrp_product_produce)d" states="ready,in_production" string="Produce" type="action" class="oe_highlight"/>
|
<button name="%(act_mrp_product_produce)d" states="ready,in_production" string="Produce" type="action" class="oe_highlight"/>
|
||||||
|
<button name="action_assign" states="confirmed,picking_except" string="Check Availability" type="object" class="oe_highlight"/>
|
||||||
<button name="force_production" states="confirmed" string="Force Reservation" type="object"/>
|
<button name="force_production" states="confirmed" string="Force Reservation" type="object"/>
|
||||||
<button name="force_production" states="picking_except" string="Force Reservation" type="object"/>
|
<button name="force_production" states="picking_except" string="Force Reservation" type="object"/>
|
||||||
<button name="button_produce" states="ready" string="Mark as Started"/>
|
<button name="button_produce" states="ready" string="Mark as Started"/>
|
||||||
|
|
|
@ -206,7 +206,8 @@ class StockMove(osv.osv):
|
||||||
class stock_warehouse(osv.osv):
|
class stock_warehouse(osv.osv):
|
||||||
_inherit = 'stock.warehouse'
|
_inherit = 'stock.warehouse'
|
||||||
_columns = {
|
_columns = {
|
||||||
'manufacture_to_resupply': fields.boolean('Manufacture in this Warehouse'),
|
'manufacture_to_resupply': fields.boolean('Manufacture in this Warehouse',
|
||||||
|
help="When products are manufactured, they can be manufactured in this warehouse."),
|
||||||
'manufacture_pull_id': fields.many2one('procurement.rule', 'Manufacture Rule'),
|
'manufacture_pull_id': fields.many2one('procurement.rule', 'Manufacture Rule'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,8 @@ class stock_picking(osv.osv):
|
||||||
class stock_warehouse(osv.osv):
|
class stock_warehouse(osv.osv):
|
||||||
_inherit = 'stock.warehouse'
|
_inherit = 'stock.warehouse'
|
||||||
_columns = {
|
_columns = {
|
||||||
'buy_to_resupply': fields.boolean('Purchase to resupply this warehouse'),
|
'buy_to_resupply': fields.boolean('Purchase to resupply this warehouse',
|
||||||
|
help="When products are bought, they can be delivered to this warehouse"),
|
||||||
'buy_pull_id': fields.many2one('procurement.rule', 'BUY rule'),
|
'buy_pull_id': fields.many2one('procurement.rule', 'BUY rule'),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -202,7 +202,6 @@ class procurement_order(osv.osv):
|
||||||
move_dict = self._run_move_create(cr, uid, procurement, context=context)
|
move_dict = self._run_move_create(cr, uid, procurement, context=context)
|
||||||
#create the move as SUPERUSER because the current user may not have the rights to do it (mto product launched by a sale for example)
|
#create the move as SUPERUSER because the current user may not have the rights to do it (mto product launched by a sale for example)
|
||||||
move_obj.create(cr, SUPERUSER_ID, move_dict, context=context)
|
move_obj.create(cr, SUPERUSER_ID, move_dict, context=context)
|
||||||
self.message_post(cr, uid, [procurement.id], body=_("Supply Move created"), context=context)
|
|
||||||
return True
|
return True
|
||||||
return super(procurement_order, self)._run(cr, uid, procurement, context=context)
|
return super(procurement_order, self)._run(cr, uid, procurement, context=context)
|
||||||
|
|
||||||
|
|
|
@ -1427,7 +1427,7 @@ class stock_production_lot(osv.osv):
|
||||||
'name': fields.char('Serial Number', size=64, required=True, help="Unique Serial Number"),
|
'name': fields.char('Serial Number', size=64, required=True, help="Unique Serial Number"),
|
||||||
'ref': fields.char('Internal Reference', size=256, help="Internal reference number in case it differs from the manufacturer's serial number"),
|
'ref': fields.char('Internal Reference', size=256, help="Internal reference number in case it differs from the manufacturer's serial number"),
|
||||||
'product_id': fields.many2one('product.product', 'Product', required=True, domain=[('type', '<>', 'service')]),
|
'product_id': fields.many2one('product.product', 'Product', required=True, domain=[('type', '<>', 'service')]),
|
||||||
'quant_ids': fields.one2many('stock.quant', 'lot_id', 'Quants'),
|
'quant_ids': fields.one2many('stock.quant', 'lot_id', 'Quants', readonly=True),
|
||||||
'create_date': fields.datetime('Creation Date'),
|
'create_date': fields.datetime('Creation Date'),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
@ -2735,11 +2735,13 @@ class stock_warehouse(osv.osv):
|
||||||
'reception_steps': fields.selection([
|
'reception_steps': fields.selection([
|
||||||
('one_step', 'Receive goods directly in stock (1 step)'),
|
('one_step', 'Receive goods directly in stock (1 step)'),
|
||||||
('two_steps', 'Unload in input location then go to stock (2 steps)'),
|
('two_steps', 'Unload in input location then go to stock (2 steps)'),
|
||||||
('three_steps', 'Unload in input location, go through a quality control before being admitted in stock (3 steps)')], 'Incoming Shipments', required=True),
|
('three_steps', 'Unload in input location, go through a quality control before being admitted in stock (3 steps)')], 'Incoming Shipments',
|
||||||
|
help="Default incoming route to follow", required=True),
|
||||||
'delivery_steps': fields.selection([
|
'delivery_steps': fields.selection([
|
||||||
('ship_only', 'Ship directly from stock (Ship only)'),
|
('ship_only', 'Ship directly from stock (Ship only)'),
|
||||||
('pick_ship', 'Bring goods to output location before shipping (Pick + Ship)'),
|
('pick_ship', 'Bring goods to output location before shipping (Pick + Ship)'),
|
||||||
('pick_pack_ship', 'Make packages into a dedicated location, then bring them to the output location for shipping (Pick + Pack + Ship)')], 'Outgoing Shippings', required=True),
|
('pick_pack_ship', 'Make packages into a dedicated location, then bring them to the output location for shipping (Pick + Pack + Ship)')], 'Outgoing Shippings',
|
||||||
|
help="Default outgoing route to follow", required=True),
|
||||||
'wh_input_stock_loc_id': fields.many2one('stock.location', 'Input Location'),
|
'wh_input_stock_loc_id': fields.many2one('stock.location', 'Input Location'),
|
||||||
'wh_qc_stock_loc_id': fields.many2one('stock.location', 'Quality Control Location'),
|
'wh_qc_stock_loc_id': fields.many2one('stock.location', 'Quality Control Location'),
|
||||||
'wh_output_stock_loc_id': fields.many2one('stock.location', 'Output Location'),
|
'wh_output_stock_loc_id': fields.many2one('stock.location', 'Output Location'),
|
||||||
|
@ -2755,8 +2757,9 @@ class stock_warehouse(osv.osv):
|
||||||
'delivery_route_id': fields.many2one('stock.location.route', 'Delivery Route'),
|
'delivery_route_id': fields.many2one('stock.location.route', 'Delivery Route'),
|
||||||
'resupply_from_wh': fields.boolean('Resupply From Other Warehouses'),
|
'resupply_from_wh': fields.boolean('Resupply From Other Warehouses'),
|
||||||
'resupply_wh_ids': fields.many2many('stock.warehouse', 'stock_wh_resupply_table', 'supplied_wh_id', 'supplier_wh_id', 'Resupply Warehouses'),
|
'resupply_wh_ids': fields.many2many('stock.warehouse', 'stock_wh_resupply_table', 'supplied_wh_id', 'supplier_wh_id', 'Resupply Warehouses'),
|
||||||
'resupply_route_ids': fields.one2many('stock.location.route', 'supplied_wh_id', 'Resupply Routes'),
|
'resupply_route_ids': fields.one2many('stock.location.route', 'supplied_wh_id', 'Resupply Routes',
|
||||||
'default_resupply_wh_id': fields.many2one('stock.warehouse', 'Default Resupply Warehouse'),
|
help="Routes will be created for these resupply warehouses and you can select them on products and product categories"),
|
||||||
|
'default_resupply_wh_id': fields.many2one('stock.warehouse', 'Default Resupply Warehouse', help="Goods will always be resupplied from this warehouse"),
|
||||||
}
|
}
|
||||||
|
|
||||||
def onchange_filter_default_resupply_wh_id(self, cr, uid, ids, default_resupply_wh_id, resupply_wh_ids, context=None):
|
def onchange_filter_default_resupply_wh_id(self, cr, uid, ids, default_resupply_wh_id, resupply_wh_ids, context=None):
|
||||||
|
|
|
@ -360,15 +360,26 @@
|
||||||
<field eval="'ir.actions.act_window,'+str(action5)" name="value"/>
|
<field eval="'ir.actions.act_window,'+str(action5)" name="value"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="location_open_quants">
|
||||||
|
<field name="context">{'search_default_productgroup': 1}</field>
|
||||||
|
<field name="domain">[('location_id', 'child_of', active_ids)]</field>
|
||||||
|
<field name="name">Quants</field>
|
||||||
|
<field name="res_model">stock.quant</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="view_location_form" model="ir.ui.view">
|
<record id="view_location_form" model="ir.ui.view">
|
||||||
<field name="name">stock.location.form</field>
|
<field name="name">stock.location.form</field>
|
||||||
<field name="model">stock.location</field>
|
<field name="model">stock.location</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Stock Location" version="7.0">
|
<form string="Stock Location" version="7.0">
|
||||||
|
<div class="oe_right oe_button_box" name="buttons">
|
||||||
|
<button string="Current Stock" name="%(location_open_quants)d" type="action"/>
|
||||||
|
</div>
|
||||||
<label for="name" class="oe_edit_only"/>
|
<label for="name" class="oe_edit_only"/>
|
||||||
<h1><field name="name"/></h1>
|
<h1><field name="name"/></h1>
|
||||||
<label for="location_id" class="oe_edit_only"/>
|
<label for="location_id" class="oe_edit_only"/>
|
||||||
<h2><field name="location_id"/></h2>
|
<h2><field name="location_id"/></h2>
|
||||||
|
|
||||||
<group>
|
<group>
|
||||||
<group string="Additional Information">
|
<group string="Additional Information">
|
||||||
<field name="usage"/>
|
<field name="usage"/>
|
||||||
|
@ -1773,6 +1784,7 @@
|
||||||
<field name="name">Quants</field>
|
<field name="name">Quants</field>
|
||||||
<field name="res_model">stock.quant</field>
|
<field name="res_model">stock.quant</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-->
|
<!-->
|
||||||
<record model="ir.ui.view" id="product_template_form_view_procurement">
|
<record model="ir.ui.view" id="product_template_form_view_procurement">
|
||||||
<field name="name">product.template.procurement</field>
|
<field name="name">product.template.procurement</field>
|
||||||
|
@ -1812,7 +1824,7 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
<xpath expr="//div[@name='buttons']" position="inside">
|
<xpath expr="//div[@name='buttons']" position="inside">
|
||||||
<button string="Inventory" name="%(product_open_quants)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations"/>
|
<button string="Current Stock" name="%(product_open_quants)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations"/>
|
||||||
<button string="Moves" name= "%(act_product_stock_move_open)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_stock_user"/>
|
<button string="Moves" name= "%(act_product_stock_move_open)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_stock_user"/>
|
||||||
<button string="Orderpoints" name="%(product_open_orderpoint)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
<button string="Orderpoints" name="%(product_open_orderpoint)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
Loading…
Reference in New Issue