[IMP] stock: improve picking draft form

The reserved and the done column doesn't have any sense for
draft picking and the forectasted button was always green.
-> Fix it

Also we add forectasted information for draft move in mrp
(281e1a57b3).
-> Use it also for outgoing picking

task-2579011

Part-of: odoo/odoo#77092
This commit is contained in:
Rémy Voet (ryv)
2021-09-24 14:00:21 +00:00
parent 1eed4b8097
commit 6417b6ed6c
2 changed files with 38 additions and 7 deletions
+27
View File
@@ -1876,3 +1876,30 @@ class TestStockFlow(TestStockCommon):
picking = f.save()
self.assertEqual(f.state, 'confirmed')
def test_picking_form_immediate_transfer(self):
picking_form = Form(self.env['stock.picking'].with_context(default_immediate_transfer=True))
picking_form.picking_type_id = self.env.ref('stock.picking_type_in')
with picking_form.move_ids_without_package.new() as move:
self.assertFalse(move._get_modifier('quantity_done', 'column_invisible'))
self.assertTrue(move._get_modifier('forecast_availability', 'column_invisible'))
self.assertTrue(move._get_modifier('reserved_availability', 'column_invisible'))
move.product_id = self.productA
move.quantity_done = 1
picking = picking_form.save()
self.assertEqual(picking.state, 'assigned')
picking_form = Form(self.env['stock.picking'].with_context(default_immediate_transfer=False))
picking_form.picking_type_id = self.env.ref('stock.picking_type_in')
with picking_form.move_ids_without_package.new() as move:
self.assertTrue(move._get_modifier('quantity_done', 'column_invisible'))
self.assertTrue(move._get_modifier('forecast_availability', 'column_invisible'))
self.assertTrue(move._get_modifier('reserved_availability', 'column_invisible'))
move.product_id = self.productA
move.product_uom_qty = 1
picking = picking_form.save()
self.assertEqual(picking.state, 'draft')
+11 -7
View File
@@ -380,14 +380,18 @@
<field name="is_quantity_done_editable" invisible="1"/>
<field name="product_packaging_id" groups="product.group_stock_packaging"/>
<field name="product_uom_qty" string="Demand" attrs="{'column_invisible': [('parent.immediate_transfer', '=', True)], 'readonly': ['|', ('is_initial_demand_editable', '=', False), '&amp;', '&amp;', ('show_operations', '=', True), ('is_locked', '=', True), ('is_initial_demand_editable', '=', False)]}"/>
<button type="object" name="action_product_forecast_report" title="Forecast Report" icon="fa-area-chart" attrs="{'invisible': ['|', ('forecast_availability', '&lt;', 0), '|', ('parent.immediate_transfer', '=', True), ('parent.picking_type_code', '=', 'outgoing')]}"/>
<button type="object" name="action_product_forecast_report" title="Forecast Report" icon="fa-area-chart text-danger" attrs="{'invisible': ['|', ('forecast_availability', '&gt;=', 0), '|', ('parent.immediate_transfer', '=', True), ('parent.picking_type_code', '=', 'outgoing')]}"/>
<field name="reserved_availability" string="Reserved" attrs="{'column_invisible': (['|','|', ('parent.state','=', 'done'), ('parent.picking_type_code', 'in', ['incoming', 'outgoing']), ('parent.immediate_transfer', '=', True)])}"/>
<button type="object" name="action_product_forecast_report" title="Forecast Report" icon="fa-area-chart"
attrs="{'invisible': ['|', ('forecast_availability', '&lt;', 0), '|', ('parent.immediate_transfer', '=', True), '&amp;', ('parent.picking_type_code', '=', 'outgoing'), ('state', '!=', 'draft')]}"/>
<button type="object" name="action_product_forecast_report" title="Forecast Report" icon="fa-area-chart text-danger"
attrs="{'invisible': ['|', ('forecast_availability', '&gt;=', 0), '|', ('parent.immediate_transfer', '=', True), '&amp;', ('parent.picking_type_code', '=', 'outgoing'), ('state', '!=', 'draft')]}"/>
<field name="forecast_expected_date" invisible="1"/>
<field name="forecast_availability" string="Reserved"
attrs="{'column_invisible': ['|', '|', ('parent.state', 'in', ['draft', 'done']), ('parent.picking_type_code', '!=', 'outgoing'), ('parent.immediate_transfer', '=', True)]}" widget="forecast_widget"/>
<field name="reserved_availability" string="Reserved"
attrs="{'column_invisible': ['|', '|', ('parent.state', 'in', ['draft', 'done']), ('parent.picking_type_code', 'in', ['incoming', 'outgoing']), ('parent.immediate_transfer', '=', True)]}"/>
<field name="product_qty" invisible="1" readonly="1"/>
<field name="forecast_expected_date" invisible="1" />
<field name="forecast_availability" string="Reserved" attrs="{'column_invisible': ['|', '|', ('parent.picking_type_code', '!=', 'outgoing'), ('parent.state','=', 'done'), ('parent.immediate_transfer', '=', True)]}" widget="forecast_widget"/>
<field name="quantity_done" string="Done" attrs="{'readonly': [('is_quantity_done_editable', '=', False)]}"/>
<field name="product_uom" attrs="{'readonly': [('state', '!=', 'draft'), ('id', '!=', False)]}" options="{'no_open': True, 'no_create': True}" string="Unit of Measure" groups="uom.group_uom"/>
<field name="quantity_done" string="Done" attrs="{'readonly': [('is_quantity_done_editable', '=', False)], 'column_invisible':[('parent.state', '=', 'draft'), ('parent.immediate_transfer', '=', False)]}"/>
<field name="product_uom" attrs="{'readonly': [('state', '!=', 'draft'), ('additional', '=', False)]}" options="{'no_open': True, 'no_create': True}" string="Unit of Measure" groups="uom.group_uom"/>
<field name="lot_ids" widget="many2many_tags"
groups="stock.group_production_lot"
attrs="{'invisible': ['|', ('show_details_visible', '=', False), ('has_tracking', '!=', 'serial')]}"