[REF] stock: refactoring set active field on push and pull rules as a normal field (previously related on the route) as the route_id field is not required

bzr revid: qdp-launchpad@openerp.com-20140423082322-ms66ta8zq0uklw32
This commit is contained in:
Quentin (OpenERP) 2014-04-23 10:23:22 +02:00
parent 6ccdde1f9b
commit d69f5e20ec
4 changed files with 22 additions and 37 deletions

View File

@ -79,6 +79,7 @@ class procurement_rule(osv.osv):
_columns = {
'name': fields.char('Name', required=True,
help="This field will fill the packing origin and the name of its moves"),
'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the rule without removing it."),
'group_propagation_option': fields.selection([('none', 'Leave Empty'), ('propagate', 'Propagate'), ('fixed', 'Fixed')], string="Propagation of Procurement Group"),
'group_id': fields.many2one('procurement.group', 'Fixed Procurement Group'),
'action': fields.selection(selection=lambda s, cr, uid, context=None: s._get_action(cr, uid, context=context),
@ -90,6 +91,7 @@ class procurement_rule(osv.osv):
_defaults = {
'group_propagation_option': 'propagate',
'sequence': 20,
'active': True,
}

View File

@ -221,6 +221,7 @@
<group string="General Information">
<field name="action"/>
<field name="sequence"/>
<field name="active"/>
</group>
<group name="propagation_group" string="Propagation Options" groups="base.group_no_one">
<field name="group_propagation_option"/>

View File

@ -47,20 +47,6 @@ class procurement_rule(osv.osv):
res += [x.id for x in route.pull_ids]
return res
def _get_route(self, cr, uid, ids, context=None):
#WARNING TODO route_id is not required, so a field related seems a bad idea >-<
if context is None:
context = {}
result = {}
if context is None:
context = {}
context_with_inactive = context.copy()
context_with_inactive['active_test']=False
for route in self.pool.get('stock.location.route').browse(cr, uid, ids, context=context_with_inactive):
for pull_rule in route.pull_ids:
result[pull_rule.id] = True
return result.keys()
_columns = {
'location_id': fields.many2one('stock.location', 'Procurement Location'),
'location_src_id': fields.many2one('stock.location', 'Source Location',
@ -76,10 +62,6 @@ class procurement_rule(osv.osv):
}),
'picking_type_id': fields.many2one('stock.picking.type', 'Picking Type',
help="Picking Type determines the way the picking should be shown in the view, reports, ..."),
'active': fields.related('route_id', 'active', type='boolean', string='Active', store={
'stock.location.route': (_get_route, ['active'], 20),
'procurement.rule': (lambda self, cr, uid, ids, c={}: ids, ['route_id'], 20)},
help="If the active field is set to False, it will allow you to hide the rule without removing it."),
'delay': fields.integer('Number of Days'),
'partner_address_id': fields.many2one('res.partner', 'Partner Address'),
'propagate': fields.boolean('Propagate cancel and split', help='If checked, when the previous move of the move (which was generated by a next procurement) is cancelled or split, the move generated by this move will too'),
@ -89,7 +71,6 @@ class procurement_rule(osv.osv):
_defaults = {
'procure_method': 'make_to_stock',
'active': True,
'propagate': True,
'delay': 0,
}

View File

@ -210,6 +210,24 @@ class stock_location_route(osv.osv):
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location.route', context=c),
}
def write(self, cr, uid, ids, vals, context=None):
'''when a route is deactivated, deactivate also its pull and push rules'''
if isinstance(ids, (int, long)):
ids = [ids]
res = super(stock_location_route, self).write(cr, uid, ids, vals, context=context)
if 'active' in vals:
push_ids = []
pull_ids = []
for route in self.browse(cr, uid, ids, context=context):
if route.push_ids:
push_ids += [r.id for r in route.push_ids if r.active != vals['active']]
if route.pull_ids:
pull_ids += [r.id for r in route.pull_ids if r.active != vals['active']]
if push_ids:
self.pool.get('stock.location.path').write(cr, uid, push_ids, {'active': vals['active']}, context=context)
if pull_ids:
self.pool.get('procurement.rule').write(cr, uid, pull_ids, {'active': vals['active']}, context=context)
return res
#----------------------------------------------------------
# Quants
@ -3324,20 +3342,6 @@ class stock_location_path(osv.osv):
_description = "Pushed Flows"
_order = "name"
def _get_route(self, cr, uid, ids, context=None):
#WARNING TODO route_id is not required, so a field related seems a bad idea >-<
if context is None:
context = {}
result = {}
if context is None:
context = {}
context_with_inactive = context.copy()
context_with_inactive['active_test'] = False
for route in self.pool.get('stock.location.route').browse(cr, uid, ids, context=context_with_inactive):
for push_rule in route.push_ids:
result[push_rule.id] = True
return result.keys()
def _get_rules(self, cr, uid, ids, context=None):
res = []
for route in self.browse(cr, uid, ids, context=context):
@ -3362,10 +3366,7 @@ class stock_location_path(osv.osv):
"by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
),
'propagate': fields.boolean('Propagate cancel and split', help='If checked, when the previous move is cancelled or split, the move generated by this move will too'),
'active': fields.related('route_id', 'active', type='boolean', string='Active', store={
'stock.location.route': (_get_route, ['active'], 20),
'stock.location.path': (lambda self, cr, uid, ids, c={}: ids, ['route_id'], 20),},
help="If the active field is set to False, it will allow you to hide the rule without removing it." ),
'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the rule without removing it."),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'),
'route_sequence': fields.related('route_id', 'sequence', string='Route Sequence',
store={