diff --git a/stock_orderpoint_creator/base_product_config_template.py b/stock_orderpoint_creator/base_product_config_template.py index 4cf6b7d77..ec11c7cf4 100644 --- a/stock_orderpoint_creator/base_product_config_template.py +++ b/stock_orderpoint_creator/base_product_config_template.py @@ -20,7 +20,7 @@ ############################################################################## """ Base template for product config """ - +from openerp.osv.orm import browse_record, browse_record_list class BaseProductConfigTemplate(): """ Abstract class for product config """ @@ -42,30 +42,40 @@ class BaseProductConfigTemplate(): return must return a list of id""" return [] - def _disable_old_instances(self, cursor, uid, template_id, + def _disable_old_instances(self, cursor, uid, template_br_list, product_ids, context=None): """ Clean old instance by setting those inactives """ model_obj = self._get_model() - ids2clean = self._get_ids_2_clean(cursor, uid, template_id, - product_ids, context=context) - model_obj.write(cursor, uid, ids2clean, - {'active': False}, context=context) + for template in template_br_list: + ids2clean = self._get_ids_2_clean(cursor, uid, template, + product_ids, context=context) + if self._clean_mode == 'deactivate': + model_obj.write(cursor, uid, ids2clean, + {'active': False}, context=context) + elif self._clean_mode == 'unlink': + model_obj.unlink(cursor, uid, ids2clean, context=context) def create_instances(self, cursor, uid, template_br, product_ids, context=None): """ Create instances of model using template inherited model """ - if not isinstance(product_ids, list): product_ids = [product_ids] - self._disable_old_instances(cursor, uid, template_br, - product_ids, context=context) - - data = self.copy_data(cursor, uid, template_br.id, context=context) + # data = self.copy_data(cursor, uid, template_br.id, context=context) + # copy data will not work in any case and may write erronus value model_obj = self._get_model() + data = {} + for key in model_obj._columns.keys(): + tmp = template_br[key] + if isinstance(tmp, browse_record): + tmp = tmp.id + if isinstance(tmp, browse_record_list): + tmp = [0,6,tmp] + data[key] = tmp + for product_id in product_ids: data['product_id'] = product_id model_obj.create(cursor, uid, data, context=context) diff --git a/stock_orderpoint_creator/orderpoint_template.py b/stock_orderpoint_creator/orderpoint_template.py index cd49d66a3..2de2e6e76 100644 --- a/stock_orderpoint_creator/orderpoint_template.py +++ b/stock_orderpoint_creator/orderpoint_template.py @@ -21,15 +21,17 @@ """ Template of order point object """ -from openerp.osv.orm import TransientModel, fields +from openerp.osv.orm import Model, fields from base_product_config_template import BaseProductConfigTemplate -class OrderpointTemplate(BaseProductConfigTemplate, TransientModel): +class OrderpointTemplate(BaseProductConfigTemplate, Model): """ Template for orderpoints """ _name = 'stock.warehouse.orderpoint.template' _inherit = 'stock.warehouse.orderpoint' _table = 'stock_warehouse_orderpoint_template' + _clean_mode = 'deactivate' + _columns = { 'product_id': fields.many2one('product.product', @@ -40,13 +42,11 @@ class OrderpointTemplate(BaseProductConfigTemplate, TransientModel): } def _get_ids_2_clean(self, cursor, uid, template_br, product_ids, context=None): - """ hook to select model specific objects to clean before recteating new one - return must return a list of id. """ + """ hook to select model specific objects to clean + return must return a list of id""" model_obj = self._get_model() - search_args = [('warehouse_id', '=', template_br.warehouse_id.id), - ('product_id', 'in', product_ids)] - - ids2clean = model_obj.search(cursor, uid, search_args, context=context) - return ids2clean + ids_to_del = model_obj.search(cursor, uid, + [('product_id', 'in', product_ids)]) + return ids_to_del # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/stock_orderpoint_creator/security/ir.model.access.csv b/stock_orderpoint_creator/security/ir.model.access.csv new file mode 100644 index 000000000..91ccafeef --- /dev/null +++ b/stock_orderpoint_creator/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_warehouse_orderpoint_creator,stock.warehouse.manage,model_stock_warehouse_orderpoint_creator,stock.group_stock_manager,1,1,1,1 +access_stock_warehouse_orderpoint_template,stock.warehouse.manage,model_stock_warehouse_orderpoint_template,stock.group_stock_manager,1,1,1,1 diff --git a/stock_orderpoint_creator/wizard/orderpoint_creator.py b/stock_orderpoint_creator/wizard/orderpoint_creator.py index 1601876ec..f84abd5d0 100644 --- a/stock_orderpoint_creator/wizard/orderpoint_creator.py +++ b/stock_orderpoint_creator/wizard/orderpoint_creator.py @@ -22,18 +22,18 @@ """ Wizard defining stock.warehouse.orderpoint configurations for selected products. Those configs are generated using templates """ -from osv import osv, fields +from openerp.osv.orm import browse_record, TransientModel, fields _template_register = ['orderpoint_template_id'] -class OrderpointCreator(osv.osv_memory): +class OrderpointCreator(TransientModel): _name = 'stock.warehouse.orderpoint.creator' _description = 'Orderpoint Creator' - _columns = { - 'orderpoint_template_id': fields.many2one( - 'stock.warehouse.orderpoint.template', - "Stock rule template") + _columns = {'orderpoint_template_id': fields.many2many( + 'stock.warehouse.orderpoint.template', + rel='order_point_creator_rel', + string='Stock rule template') } @@ -50,13 +50,17 @@ class OrderpointCreator(osv.osv_memory): if isinstance(wiz_id, list): wiz_id = wiz_id[0] current = self.browse(cursor, uid, wiz_id, context=context) - for template_field in self._get_template_register(): - template_br = current[template_field] - if template_br: - template_model = template_br._model._name + template_br_list = current[template_field] + if template_br_list: + if isinstance(template_br_list, browse_record): + template_br_list = [template_br_list] + template_model = template_br_list[0]._model._name template_obj = self.pool.get(template_model) - template_obj.create_instances(cursor, uid, template_br, + template_obj._disable_old_instances(cursor, uid, template_br_list, + product_ids, context=context) + for template_br in template_br_list: + template_obj.create_instances(cursor, uid, template_br, product_ids, context=context) return {} diff --git a/stock_orderpoint_creator/wizard/orderpoint_creator_view.xml b/stock_orderpoint_creator/wizard/orderpoint_creator_view.xml index f321500f1..efa42ece6 100644 --- a/stock_orderpoint_creator/wizard/orderpoint_creator_view.xml +++ b/stock_orderpoint_creator/wizard/orderpoint_creator_view.xml @@ -8,8 +8,8 @@ form
- - + +