savoirfairelinux-openerp team mailing list archive
-
savoirfairelinux-openerp team
-
Mailing list archive
-
Message #01218
[Merge] lp:~savoirfairelinux-openerp/openerp-isp/contract_isp_package_configurator into lp:openerp-isp
Mathieu Benoit has proposed merging lp:~savoirfairelinux-openerp/openerp-isp/contract_isp_package_configurator into lp:openerp-isp.
Requested reviews:
Joao Alfredo Gama Batista (joao-gama)
For more details, see:
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-isp/contract_isp_package_configurator/+merge/214056
Clean code contract_isp_package_configurator
- pep8
- Remove dupplication code
- Add .pot
--
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-isp/contract_isp_package_configurator/+merge/214056
Your team Savoir-faire Linux' OpenERP is subscribed to branch lp:openerp-isp.
=== modified file 'contract_isp_package_configurator/__openerp__.py'
--- contract_isp_package_configurator/__openerp__.py 2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/__openerp__.py 2014-04-03 15:14:10 +0000
@@ -28,7 +28,9 @@
Contract ISP Package Configurator
=================================
-This module provides a wizard to help create service packages based on product inter-dependencies. It uses the dependency tree provided by the product_dependencies module.""",
+This module provides a wizard to help create service packages based on product\
+ inter-dependencies. It uses the dependency tree provided by the\
+ product_dependencies module.""",
'author': 'Savoirfaire-Linux Inc',
'website': 'www.savoirfairelinux.com',
'license': 'AGPL-3',
=== modified file 'contract_isp_package_configurator/company.py'
--- contract_isp_package_configurator/company.py 2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/company.py 2014-04-03 15:14:10 +0000
@@ -30,5 +30,6 @@
'product.category',
'Default Product Category',
required=True,
- help='''Set the default starting point for the package configuration wizard'''),
+ help='''Set the default starting point for the package \
+ configuration wizard'''),
}
=== modified file 'contract_isp_package_configurator/contract_isp_package_configurator_view.xml'
--- contract_isp_package_configurator/contract_isp_package_configurator_view.xml 2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/contract_isp_package_configurator_view.xml 2014-04-03 15:14:10 +0000
@@ -13,17 +13,16 @@
</xpath>
</field>
</record>
- <record id="view_company_form_package_configurator" model="ir.ui.view">
- <field name="name">company.form.package.configurator</field>
- <field name="model">res.company</field>
- <field name="inherit_id" ref="contract_isp.view_company_contract_isp_form"/>
- <field name="arch" type="xml">
- <field name="parent_account_id" position="before">
- <field name="default_product_category" />
- </field>
- </field>
- </record>
-
+ <record id="view_company_form_package_configurator" model="ir.ui.view">
+ <field name="name">company.form.package.configurator</field>
+ <field name="model">res.company</field>
+ <field name="inherit_id" ref="contract_isp.view_company_contract_isp_form"/>
+ <field name="arch" type="xml">
+ <field name="parent_account_id" position="before">
+ <field name="default_product_category" />
+ </field>
+ </field>
+ </record>
</data>
</openerp>
=== modified file 'contract_isp_package_configurator/i18n/contract_isp_package_configurator.pot'
--- contract_isp_package_configurator/i18n/contract_isp_package_configurator.pot 2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/i18n/contract_isp_package_configurator.pot 2014-04-03 15:14:10 +0000
@@ -0,0 +1,263 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * contract_isp_package_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-04-02 19:06+0000\n"
+"PO-Revision-Date: 2014-04-02 19:06+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+#: field:contract.service.configurator,product_category_id:0
+#: field:contract.service.configurator,root_category_id:0
+msgid "Category"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:42
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:114
+#: selection:contract.service.configurator.dependency.line,state:0
+#: selection:contract.service.configurator.line,state:0
+#, python-format
+msgid "Information"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,is_level2:0
+msgid "Is level 2"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:149
+#: selection:contract.service.configurator,state:0
+#, python-format
+msgid "Select product"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,handle_dependency:0
+#: field:contract.service.configurator.line,handle_dependency:0
+msgid "Handle dependencies"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:44
+#: selection:contract.service.configurator.dependency.line,state:0
+#: selection:contract.service.configurator.line,state:0
+#, python-format
+msgid "No Stock"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: model:ir.model,name:contract_isp_package_configurator.model_contract_service_configurator_dependency_line
+msgid "contract.service.configurator.dependency.line"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+msgid "Next"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: help:res.company,default_product_category:0
+msgid "Set the default starting point for the package configuration wizard"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:148
+#: selection:contract.service.configurator,state:0
+#, python-format
+msgid "Start"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+msgid "Add"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:43
+#: selection:contract.service.configurator.dependency.line,state:0
+#: selection:contract.service.configurator.line,state:0
+#, python-format
+msgid "Select serial number"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:150
+#: selection:contract.service.configurator,state:0
+#, python-format
+msgid "Select components"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:356
+#, python-format
+msgid "Product not found!"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+#: field:contract.service.configurator.dependency.line,product_id:0
+#: field:contract.service.configurator.line,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,current_product_id:0
+msgid "Add Product"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,parent_id:0
+#: field:contract.service.configurator.line,parent_id:0
+msgid "Parent"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,serial:0
+#: view:contract.service.configurator.line:0
+#: field:contract.service.configurator.line,serial:0
+msgid "Serial Number"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,dependency_ids:0
+msgid "Dependencies"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:res.company,default_product_category:0
+msgid "Default Product Category"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,line_ids:0
+msgid "Line"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: model:ir.model,name:contract_isp_package_configurator.model_contract_service_configurator_line
+msgid "contract.service.configurator.line"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:414
+#, python-format
+msgid "Product Details"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator.line:0
+msgid "Ok"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,name:0
+#: field:contract.service.configurator.line,name:0
+msgid "Name"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: model:ir.model,name:contract_isp_package_configurator.model_contract_service_configurator
+msgid "contract.service.configurator"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: model:ir.model,name:contract_isp_package_configurator.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,contract_id:0
+msgid "Contract"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:41
+#: selection:contract.service.configurator.dependency.line,state:0
+#: selection:contract.service.configurator.line,state:0
+#, python-format
+msgid "Added"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+#: view:contract.service.configurator.line:0
+msgid "Products"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:356
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:account.analytic.account:0
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:426
+#: view:contract.service.configurator:0
+#: field:contract.service.configurator.dependency.line,configurator_id:0
+#: view:contract.service.configurator.line:0
+#: field:contract.service.configurator.line,configurator_id:0
+#: model:ir.actions.act_window,name:contract_isp_package_configurator.action_contract_isp_package_configurator
+#, python-format
+msgid "Package Configurator"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,stock_move_id:0
+#: field:contract.service.configurator.line,stock_move_id:0
+msgid "Stock Move"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator,state:0
+#: field:contract.service.configurator.dependency.line,state:0
+#: field:contract.service.configurator.line,state:0
+msgid "State"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:45
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:151
+#: view:contract.service.configurator:0
+#: selection:contract.service.configurator,state:0
+#: selection:contract.service.configurator.dependency.line,state:0
+#: selection:contract.service.configurator.line,state:0
+#, python-format
+msgid "Done"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator:0
+msgid "Click on add to view the available components"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: code:addons/contract_isp_package_configurator/wizard/package_configurator.py:450
+#: view:contract.service.configurator:0
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: field:contract.service.configurator.dependency.line,message:0
+#: field:contract.service.configurator.line,message:0
+msgid "Message"
+msgstr ""
+
+#. module: contract_isp_package_configurator
+#: view:contract.service.configurator.line:0
+msgid "We don't have this product in stock at the moment!"
+msgstr ""
+
=== modified file 'contract_isp_package_configurator/wizard/package_configurator.py'
--- contract_isp_package_configurator/wizard/package_configurator.py 2013-10-11 14:30:38 +0000
+++ contract_isp_package_configurator/wizard/package_configurator.py 2014-04-03 15:14:10 +0000
@@ -27,7 +27,6 @@
class contract_service_configurator_line(orm.TransientModel):
_name = 'contract.service.configurator.line'
- #def _get_stock_production_lot_available(self, cr, uid, )
_columns = {
'name': fields.char('Name'),
'product_id': fields.many2one('product.product', 'Product'),
@@ -42,7 +41,7 @@
'state': fields.selection((('draft', _('Added')),
('message', _('Information')),
('serial', _('Select serial number')),
- ('stock', ('No Stock')),
+ ('stock', _('No Stock')),
('done', _('Done'))), 'State'),
}
@@ -51,37 +50,43 @@
}
def router(self, cr, uid, ids, data=None, context=None):
+ if isinstance(ids, list):
+ ids = ids[0]
+ pool_stock_move = self.pool.get('stock.move')
+ pool_model_data = self.pool.get('ir.model.data')
+
stock_move_id = None
- if isinstance(ids, list):
- ids = ids[0]
line = self.browse(cr, uid, ids, context=context)
if line.state == 'message':
- if line.product_id.type == 'product' and \
- line.product_id.qty_available > 0.0:
+ if line.product_id.type == 'product' \
+ and line.product_id.qty_available > 0:
state = 'serial'
else:
state = 'stock'
elif line.state in ('serial', 'stock'):
- stock_move_obj = self.pool.get('stock.move')
- location_id = self.pool.get('ir.model.data').get_object_reference(
- cr, uid, 'stock', 'stock_location_stock')[1]
- location_dest_id = line.configurator_id.contract_id.partner_id.property_stock_customer.id
+ location_id = \
+ pool_model_data.get_object_reference(cr, uid, 'stock',
+ 'stock_location_stock')[1]
+ partner = line.configurator_id.contract_id.partner_id
+ product = line.product_id and line.product_id
+ product_uom = product and product.uom_id
+ location_dest_id = partner.property_stock_customer.id
move = {
'name': line.product_id and line.product_id.name or '',
- 'product_id': line.product_id and line.product_id.id,
- 'product_uom': line.product_id and line.product_id.uom_id and line.product_id.uom_id.id or None,
+ 'product_id': product and product.id,
+ 'product_uom': product_uom and product_uom.id or None,
'prodlot_id': line.serial and line.serial.id or None,
'location_id': location_id,
'location_dest_id': location_dest_id,
- 'partner_id': line.configurator_id.contract_id.partner_id.id,
+ 'partner_id': partner.id,
'type': 'out'
}
- stock_move_id = stock_move_obj.create(
- cr, uid, move, context=context)
- stock_move_obj.action_confirm(
- cr, uid, [stock_move_id], context=context)
- stock_move_obj.action_done(
- cr, uid, [stock_move_id], context=context)
+ stock_move_id = pool_stock_move.create(cr, uid, move,
+ context=context)
+ pool_stock_move.action_confirm(cr, uid, [stock_move_id],
+ context=context)
+ pool_stock_move.action_done(cr, uid, [stock_move_id],
+ context=context)
state = 'done'
@@ -93,37 +98,21 @@
if isinstance(ids, int):
ids = [ids]
- for line in self.browse(cr, uid, ids, context=context):
- if line.product_id.type == 'product' and line.stock_move_id:
- stock_move_obj = self.pool.get('stock.move')
- move = {
- 'name': ' '.join([_('Cancel'), line.product_id and line.product_id.name or '']),
- 'product_id': line.product_id and line.product_id.id,
- 'product_uom': line.product_id and line.product_id.uom_id and line.product_id.uom_id.id or None,
- 'prodlot_id': line.serial and line.serial.id or None,
- 'location_id': line.stock_move_id.location_dest_id.id,
- 'location_dest_id': line.stock_move_id.location_id.id,
- 'partner_id': line.configurator_id.contract_id.partner_id.id,
- 'type': 'in'
- }
- stock_move_id = stock_move_obj.create(
- cr, uid, move, context=context)
- stock_move_obj.action_confirm(
- cr, uid, [stock_move_id], context=context)
- stock_move_obj.action_done(
- cr, uid, [stock_move_id], context=context)
+ cancel_dependancy(self, cr, uid, ids, context, cancel_line=False)
return super(contract_service_configurator_line, self).unlink(
cr, uid, ids, context=context)
def onchange_product_id(self, cr, uid, ids, product_id, context):
ret = {}
- product_product_obj = self.pool.get('product.product')
+ pool_product_product = self.pool.get('product.product')
+ product_product_obj = pool_product_product.browse(cr, uid, product_id,
+ context)
- if product_product_obj.browse(cr, uid, product_id, context).description:
+ if product_product_obj.description:
ret['warning'] = {
'title': _('Information'),
- 'message': product_product_obj.browse(cr, uid, product_id, context).description
+ 'message': product_product_obj.description
}
return ret
@@ -136,29 +125,23 @@
class contract_service_configurator(orm.TransientModel):
_name = 'contract.service.configurator'
- def _get_default_category(self, cr, uid, context=None):
+ def get_default_category(self, cr, uid, context=None):
res_company_obj = self.pool.get("res.company")
company_id = res_company_obj._company_default_get(cr, uid, context)
res_company = res_company_obj.browse(cr, uid, company_id,
context=context)
- return res_company.default_product_category and \
- res_company.default_product_category.id
+ cat = res_company.default_product_category
+ return cat and cat.id
- def _get_is_level2(self, cr, uid, context=None):
+ def get_is_level2(self, cr, uid, context=None):
ir_model_data_obj = self.pool.get('ir.model.data')
- res_groups_obj = self.pool.get('res.groups')
res_user = self.pool.get('res.users').browse(
cr, uid, uid, context={})
group_agent_n2_id = ir_model_data_obj.get_object_reference(
cr, uid, 'contract_isp', 'group_isp_agent2')[1]
- group_agent_n2 = res_groups_obj.browse(
- cr, uid, group_agent_n2_id, context={})
groups_id = [i.id for i in res_user.groups_id]
- if group_agent_n2_id not in groups_id:
- return False
- else:
- return True
+ return group_agent_n2_id in groups_id
_columns = {
'contract_id': fields.many2one('account.analytic.account', 'Contract'),
@@ -171,11 +154,12 @@
'Line'),
'current_product_id': fields.many2one('product.product',
'Add Product'),
- 'dependency_ids': fields.many2many('contract.service.configurator.dependency.line',
- 'contract_service_configurator_dependency_rel',
- 'configurator_id',
- 'dependency_id',
- 'Dependencies'),
+ 'dependency_ids': fields.many2many(
+ 'contract.service.configurator.dependency.line',
+ 'contract_service_configurator_dependency_rel',
+ 'configurator_id',
+ 'dependency_id',
+ 'Dependencies'),
'root_category_id': fields.many2one('product.category', 'Category'),
'product_category_id': fields.many2one('product.category', 'Category'),
'is_level2': fields.boolean('Is level 2')
@@ -183,16 +167,18 @@
_defaults = {
'state': 'draft',
- 'product_category_id': lambda s, cr, uid, ctx: s._get_default_category(cr, uid, ctx),
- 'root_category_id': lambda s, cr, uid, ctx: s._get_default_category(cr, uid, ctx),
- 'is_level2': lambda s, cr, uid, ctx: s._get_is_level2(cr, uid, ctx)
+ 'product_category_id':
+ lambda s, cr, uid, ctx: s.get_default_category(cr, uid, ctx),
+ 'root_category_id':
+ lambda s, cr, uid, ctx: s.get_default_category(cr, uid, ctx),
+ 'is_level2': lambda s, cr, uid, ctx: s.get_is_level2(cr, uid, ctx)
}
- def onchange_product_category_id(self, cr, uid, ids,
- product_category_id, is_level2):
+ @staticmethod
+ def onchange_product_category_id(cr, uid, ids, product_category_id,
+ is_level2):
domain = [('categ_id', '=', product_category_id)]
- ret = {
- 'domain': {'current_product_id': None}}
+ ret = {'domain': {'current_product_id': None}}
if not is_level2:
domain.append(('list_price', '>=', 0))
@@ -202,9 +188,10 @@
return ret
def do_next(self, cr, uid, ids, context=None):
- contract_service_configurator_line_obj = self.pool.get('contract.service.configurator.line')
- contract_service_configurator_dependency_line_obj = self.pool.get('contract.service.configurator.dependency.line')
- product_product_obj = self.pool.get('product.product')
+ contract_service_configurator_line_obj = self.pool.get(
+ 'contract.service.configurator.line')
+ pool_conf_dep_line = self.pool.get(
+ 'contract.service.configurator.dependency.line')
wizard = self.browse(cr, uid, ids[0], context=context)
@@ -221,117 +208,116 @@
'name': line.product_id.name,
'product_id': line.product_id.id,
'configurator_id': wizard.id,
- 'handle_dependency': line.product_id.dependency_ids and True or False,
+ 'handle_dependency': line.product_id.dependency_ids,
'message': line.product_id.description,
'state': state
}
- contract_service_configurator_line_obj.create(cr, uid, l, context=context)
+ contract_service_configurator_line_obj.create(cr, uid, l,
+ context=context)
query = [('configurator_id', '=', wizard.id)]
- ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,
- uid,
- query,
- context=context)
+ ids_to_unlink = pool_conf_dep_line.search(
+ cr,
+ uid,
+ query,
+ context=context)
if ids_to_unlink:
- contract_service_configurator_dependency_line_obj.unlink(cr, uid,
- ids_to_unlink,
- context)
+ pool_conf_dep_line.unlink(cr, uid, ids_to_unlink, context)
loop_deps = False
for line in wizard.line_ids:
- if line.handle_dependency:
- loop_deps = True
- for dep in line.product_id.dependency_ids:
- if dep.type == 'product':
- if not wizard.is_level2 and dep.list_price < 0:
- continue
-
- if line.product_id.description:
- state = 'message'
- elif line.product_id.type == 'product':
- state = 'serial'
- else:
- state = 'done'
-
- wl = {
- 'name': dep.product_id.name,
- 'product_id': dep.product_id.id,
- 'configurator_id': wizard.id,
- 'parent_id': line.id,
- 'message': line.product_id.description,
- 'state': state
- }
- new_dep = contract_service_configurator_dependency_line_obj.create(
- cr, uid, wl, context=context)
-
- if dep.auto:
- wizard.write({'dependency_ids': [(4, new_dep)]})
-
- elif dep.type == 'category':
- query = [('categ_id', '=', dep.category_id.id)]
- product_ids = product_product_obj.search(cr, uid,
- query,
- context=context)
- for product in product_product_obj.browse(cr, uid, product_ids, context=context):
- if not wizard.is_level2 and dep.list_price < 0:
- continue
-
- if line.product_id.description:
- state = 'message'
- elif line.product_id.type == 'product':
- state = 'serial'
- else:
- state = 'done'
-
- wl = {
- 'name': product.name,
- 'product_id': product.id,
- 'configurator_id': wizard.id,
- 'parent_id': line.id,
- 'message': product.description,
- 'state': state
- }
- contract_service_configurator_dependency_line_obj.create(cr, uid, wl,
- context=context)
- line.write({'handle_dependency': False})
- break
+ if not line.handle_dependency:
+ continue
+
+ loop_deps = True
+ self._write_dependance(line, wizard, cr, uid, context)
+ line.write({'handle_dependency': False})
+ break
if loop_deps:
record = {
'state': 'dependency',
}
- wizard.write(record)
- return self.router(cr, uid, ids, {}, context=context)
-
else:
record = {
'state': 'product',
'current_product_id': None,
- 'dependency_ids': [(5)],
+ 'dependency_ids': [5],
}
- wizard.write(record)
-
- query = [('configurator_id', '=', wizard.id)]
- ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,
- uid,
- query,
- context=context)
- return self.router(cr, uid, ids, {}, context=context)
+ wizard.write(record)
+ return self.router(cr, uid, ids, {}, context=context)
+
+ def _write_dependance(self, line, wizard, cr, uid, context):
+ pool_conf_dep_line = self.pool.get(
+ 'contract.service.configurator.dependency.line')
+ product_product_obj = self.pool.get('product.product')
+
+ contains_dep = False
+ for dep in line.product_id.dependency_ids:
+ if dep.type == 'product':
+ if not wizard.is_level2 and dep.list_price < 0:
+ continue
+
+ if line.product_id.description:
+ state = 'message'
+ elif line.product_id.type == 'product':
+ state = 'serial'
+ else:
+ state = 'done'
+ contains_dep = True
+ wl = {
+ 'name': dep.product_id.name,
+ 'product_id': dep.product_id.id,
+ 'configurator_id': wizard.id,
+ 'parent_id': line.id,
+ 'message': line.product_id.description,
+ 'state': state
+ }
+ new_dep = pool_conf_dep_line.create(cr, uid, wl,
+ context=context)
+
+ if dep.auto:
+ wizard.write({'dependency_ids': [(4, new_dep)]})
+
+ elif dep.type == 'category':
+ query = [('categ_id', '=', dep.category_id.id)]
+ product_ids = product_product_obj.search(cr, uid,
+ query,
+ context=context)
+ for product in product_product_obj.browse(cr, uid,
+ product_ids,
+ context=context):
+ if not wizard.is_level2 and dep.list_price < 0:
+ continue
+
+ if line.product_id.description:
+ state = 'message'
+ elif line.product_id.type == 'product':
+ state = 'serial'
+ else:
+ state = 'done'
+ contains_dep = True
+ wl = {
+ 'name': product.name,
+ 'product_id': product.id,
+ 'configurator_id': wizard.id,
+ 'parent_id': line.id,
+ 'message': product.description,
+ 'state': state
+ }
+ pool_conf_dep_line.create(
+ cr, uid, wl,
+ context=context)
+ return contains_dep
def do_add_current_product_id(self, cr, uid, ids, context=None):
if context is None:
context = {}
- deps = 0
wizard = self.browse(cr, uid, ids[0], context=context)
- contract_service_configurator_line_obj = self.pool.get(
- 'contract.service.configurator.line')
- contract_service_configurator_dependency_line_obj = self.pool.get(
- 'contract.service.configurator.dependency.line')
- product_product_obj = self.pool.get('product.product')
- contract_service_serial_obj = self.pool.get('contract.service.serial')
+ pool_cs_conf_line = self.pool.get('contract.service.configurator.line')
if wizard.current_product_id:
- #if group_agent_n2_id not in res_user.groups_id and \
+ # if group_agent_n2_id not in res_user.groups_id and \
# wizard.current_product_id.type == 'product' and \
# wizard.current_product_id.qty_available <= 0:
# raise orm.except_orm(_('Error!'), _('Product not available!'))
@@ -350,72 +336,19 @@
'message': wizard.current_product_id.description,
'state': state
}
- new_line = contract_service_configurator_line_obj.create(
- cr, uid, record, context=context)
-
- for dep in contract_service_configurator_line_obj.browse(
- cr, uid, new_line,
- context=context).product_id.dependency_ids:
-
- if dep.type == 'product':
- if not wizard.is_level2 and dep.product_id.list_price < 0:
- continue
-
- if dep.product_id.description:
- state = 'message'
- elif dep.product_id.type == 'product':
- state = 'serial'
- else:
- state = 'done'
-
- deps += 1
- wl = {
- 'name': dep.product_id.name,
- 'product_id': dep.product_id.id,
- 'configurator_id': wizard.id,
- 'parent_id': new_line,
- 'message': dep.product_id.description,
- 'state': state
- }
- new_dep = contract_service_configurator_dependency_line_obj.create(cr, uid, wl,
- context=context)
-
- if dep.auto:
- wizard.write({'dependency_ids': [(4, new_dep)]})
-
- elif dep.type == 'category':
- query = [('categ_id', '=', dep.category_id.id)]
- product_ids = product_product_obj.search(cr, uid, query,
- context=context)
- for product in product_product_obj.browse(cr, uid,
- product_ids,
- context=context):
- if not wizard.is_level2 and dep.product_id.list_price < 0:
- continue
-
- if product.description:
- state = 'message'
- elif product.type == 'product':
- state = 'serial'
- else:
- state = 'done'
-
- deps += 1
- record = {
- 'name': product.name,
- 'product_id': product.id,
- 'configurator_id': wizard.id,
- 'parent_id': new_line,
- 'message': product.description,
- 'state': state
- }
- contract_service_configurator_dependency_line_obj.create(
- cr, uid, record, context=context)
+ new_line = pool_cs_conf_line.create(cr, uid, record,
+ context=context)
+
+ product_obj = pool_cs_conf_line.browse(cr, uid, new_line,
+ context=context)
+ contains_dep = self._write_dependance(product_obj, wizard, cr, uid,
+ context)
record = {
'current_product_id': None,
- 'product_category_id': self._get_default_category(cr, uid, context),
- 'state': deps and 'dependency' or 'product'
+ 'product_category_id': self.get_default_category(cr, uid,
+ context),
+ 'state': contains_dep and 'dependency' or 'product'
}
wizard.write(record)
@@ -424,11 +357,7 @@
raise orm.except_orm(_('Error'), _('Product not found!'))
def do_done(self, cr, uid, ids, context=None):
- account_analytic_account_obj = self.pool.get('account.analytic.account')
- contract_service_obj = self.pool.get('contract.service')
- stock_move_obj = self.pool.get('stock.move')
- contract_service_serial_obj = self.pool.get('contract.service.serial')
- ret = self.write(cr, uid, ids, {'state': 'done'}, context=context)
+ pool_contract_service = self.pool.get('contract.service')
wizard = self.browse(cr, uid, ids[0], context=context)
for line in wizard.line_ids:
l = {
@@ -439,7 +368,7 @@
'analytic_line_type': line.product_id.analytic_line_type,
'require_activation': line.product_id.require_activation
}
- contract_service_obj.create(cr, uid, l, context=context)
+ pool_contract_service.create(cr, uid, l, context=context)
if line.product_id.type == 'product' and line.stock_move_id:
line.write({'stock_move_id': None})
@@ -458,44 +387,26 @@
if isinstance(ids, int):
ids = [ids]
- for line in self.browse(cr, uid, ids[0], context=context).line_ids:
- if line.product_id.type == 'product' and line.stock_move_id:
- stock_move_obj = self.pool.get('stock.move')
- move = {
- 'name': ' '.join([_('Cancel'), line.product_id and line.product_id.name or '']),
- 'product_id': line.product_id and line.product_id.id,
- 'product_uom': line.product_id and line.product_id.uom_id and line.product_id.uom_id.id or None,
- 'prodlot_id': line.serial and line.serial.id or None,
- 'location_id': line.stock_move_id.location_dest_id.id,
- 'location_dest_id': line.stock_move_id.location_id.id,
- 'partner_id': line.configurator_id.contract_id.partner_id.id,
- 'type': 'in'
- }
- stock_move_id = stock_move_obj.create(
- cr, uid, move, context=context)
- stock_move_obj.action_confirm(
- cr, uid, [stock_move_id], context=context)
- stock_move_obj.action_done(
- cr, uid, [stock_move_id], context=context)
+ cancel_dependancy(self, cr, uid, ids, context, cancel_line=True)
return True
def router(self, cr, uid, ids, data=None, context=None):
+ pool_stock_prod_lot = self.pool.get('stock.production.lot')
if isinstance(ids, list):
ids = ids[0]
wizard = self.browse(cr, uid, ids, context=context)
for line in wizard.line_ids:
if line.state in ('message', 'serial', 'stock'):
if line.state == 'serial':
- stock_production_lot_obj = self.pool.get('stock.production.lot')
- product_product_obj = self.pool.get('product.product')
query = [
('product_id', '=', line.product_id.id),
('stock_available', '>', 0)
]
- serial_ids = stock_production_lot_obj.search(cr, uid, query, context=context)
+ serial_ids = pool_stock_prod_lot.search(cr, uid, query,
+ context=context)
if not serial_ids:
line.write({'state': 'stock'})
@@ -523,3 +434,36 @@
'nodestroy': True,
'context': context
}
+
+
+def cancel_dependancy(obj_orm, cr, uid, ids, context, cancel_line=True):
+ pool_stock_move = obj_orm.pool.get('stock.move')
+ if cancel_line:
+ lines = obj_orm.browse(cr, uid, ids[0], context=context).line_ids
+ else:
+ lines = obj_orm.browse(cr, uid, ids, context=context)
+
+ for line in lines:
+ if line.product_id.type == 'product' and line.stock_move_id:
+ product = line.product_id and line.product_id
+ product_name = product.name or ''
+ product_uom = product.uom_id and line.product_id.uom_id
+ name = "%s %s" % (_('Cancel'), product_name)
+
+ partner = line.configurator_id.contract_id.partner_id.id
+ move = {
+ 'name': name,
+ 'product_id': product.id,
+ 'product_uom': product_uom,
+ 'prodlot_id': line.serial and line.serial.id or None,
+ 'location_id': line.stock_move_id.location_dest_id.id,
+ 'location_dest_id': line.stock_move_id.location_id.id,
+ 'partner_id': partner,
+ 'type': 'in'
+ }
+ stock_move_id = pool_stock_move.create(cr, uid, move,
+ context=context)
+ pool_stock_move.action_confirm(cr, uid, [stock_move_id],
+ context=context)
+ pool_stock_move.action_done(cr, uid, [stock_move_id],
+ context=context)
\ No newline at end of file