From 1322f24d3462011e4cb536f4f2f4b58b2af5c6cd Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Sat, 20 May 2017 13:48:53 +0530
Subject: [PATCH 01/90] seperate sale order form wizard module added new sale
module for same level
---
product_configurator_sale/__init__.py | 4 ++
product_configurator_sale/__openerp__.py | 22 +++++++
product_configurator_sale/models/__init__.py | 5 ++
product_configurator_sale/models/account.py | 9 +++
product_configurator_sale/models/sale.py | 56 ++++++++++++++++
product_configurator_sale/models/stock.py | 9 +++
product_configurator_sale/views/sale_view.xml | 66 +++++++++++++++++++
product_configurator_sale/wizard/__init__.py | 1 +
.../wizard/product_configurator.py | 62 +++++++++++++++++
9 files changed, 234 insertions(+)
create mode 100755 product_configurator_sale/__init__.py
create mode 100755 product_configurator_sale/__openerp__.py
create mode 100755 product_configurator_sale/models/__init__.py
create mode 100644 product_configurator_sale/models/account.py
create mode 100644 product_configurator_sale/models/sale.py
create mode 100644 product_configurator_sale/models/stock.py
create mode 100644 product_configurator_sale/views/sale_view.xml
create mode 100644 product_configurator_sale/wizard/__init__.py
create mode 100644 product_configurator_sale/wizard/product_configurator.py
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
new file mode 100755
index 000000000..35e7c9600
--- /dev/null
+++ b/product_configurator_sale/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+from . import wizard
diff --git a/product_configurator_sale/__openerp__.py b/product_configurator_sale/__openerp__.py
new file mode 100755
index 000000000..9d81d2ec1
--- /dev/null
+++ b/product_configurator_sale/__openerp__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': 'Product Configurator Sale',
+ 'version': '9.0.1.0.0',
+ 'category': 'Generic Modules/Sale',
+ 'summary': 'product configuration interface modules for Sale',
+ 'author': 'Pledra',
+ 'license': 'AGPL-3',
+ 'website': 'http://www.pledra.com/',
+ 'depends': ['sale_stock', 'product_configurator', 'product_configurator_wizard'],
+ "data": [
+ 'views/sale_view.xml',
+ ],
+ 'demo': [
+ ],
+ 'images': [
+ 'static/description/cover.png'
+ ],
+ 'test': [],
+ 'installable': True,
+ 'auto_install': False,
+}
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
new file mode 100755
index 000000000..4c439bb9a
--- /dev/null
+++ b/product_configurator_sale/models/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import sale
+from . import stock
+from . import account
diff --git a/product_configurator_sale/models/account.py b/product_configurator_sale/models/account.py
new file mode 100644
index 000000000..c277de94f
--- /dev/null
+++ b/product_configurator_sale/models/account.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields
+
+
+class AccountInvoiceLine(models.Model):
+ _inherit = 'account.invoice.line'
+
+ product_id = fields.Many2one(domain=[('config_ok', '=', False)])
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
new file mode 100644
index 000000000..7d0d047c8
--- /dev/null
+++ b/product_configurator_sale/models/sale.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+
+# class sale_order_line_attribute(models.Model):
+# _name = 'sale.order.line.attribute'
+
+# custom_value = fields.Char('Custom Value', size=64)
+# sale_line_id = fields.Many2one('sale.order.line', 'Sale Order Line')
+
+
+class SaleOrderLine(models.Model):
+ _inherit = 'sale.order.line'
+
+ custom_value_ids = fields.One2many(
+ comodel_name='product.attribute.value.custom',
+ inverse_name='product_id',
+ related="product_id.value_custom_ids",
+ string="Custom Values"
+ )
+ product_id = fields.Many2one(domain=[('config_ok', '=', False)])
+ config_ok = fields.Boolean(
+ related='product_id.config_ok',
+ string="Configurable"
+ )
+
+ @api.multi
+ def reconfigure_product(self):
+ """ Creates and launches a product configurator wizard with a linked
+ template and variant in order to re-configure a existing product. It is
+ esetially a shortcut to pre-fill configuration data of a variant"""
+
+ cfg_steps = self.product_id.product_tmpl_id.config_step_line_ids
+ active_step = str(cfg_steps[0].id) if cfg_steps else 'configure'
+
+ wizard_obj = self.env['product.configurator']
+ wizard = wizard_obj.create({
+ 'product_id': self.product_id.id,
+ 'state': active_step,
+ 'order_line_id': self.id,
+ })
+
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'product.configurator',
+ 'name': "Configure Product",
+ 'view_mode': 'form',
+ 'context': dict(
+ self.env.context,
+ wizard_id=wizard.id,
+ ),
+ 'target': 'new',
+ 'res_id': wizard.id,
+ }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/product_configurator_sale/models/stock.py b/product_configurator_sale/models/stock.py
new file mode 100644
index 000000000..de069b9b9
--- /dev/null
+++ b/product_configurator_sale/models/stock.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields
+
+
+class StockMove(models.Model):
+ _inherit = 'stock.move'
+
+ product_id = fields.Many2one(domain=[('config_ok', '=', False)])
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
new file mode 100644
index 000000000..e33e21628
--- /dev/null
+++ b/product_configurator_sale/views/sale_view.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+ product.configurator.sale.order.line.form.view
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sale.order.form.config
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/product_configurator_sale/wizard/__init__.py b/product_configurator_sale/wizard/__init__.py
new file mode 100644
index 000000000..b93c990ce
--- /dev/null
+++ b/product_configurator_sale/wizard/__init__.py
@@ -0,0 +1 @@
+import product_configurator
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
new file mode 100644
index 000000000..be43be59e
--- /dev/null
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+from openerp.osv import orm
+from openerp.addons.base.ir.ir_model import _get_fields_type
+
+from openerp import models, fields, api, _
+from openerp.exceptions import Warning, ValidationError
+
+
+class FreeSelection(fields.Selection):
+
+ def convert_to_cache(self, value, record, validate=True):
+ return super(FreeSelection, self).convert_to_cache(
+ value=value, record=record, validate=False)
+
+
+class ProductConfigurator(models.TransientModel):
+ _inherit = 'product.configurator'
+
+ order_line_id = fields.Many2one(comodel_name='sale.order.line',
+ readonly=True)
+
+ @api.multi
+ def action_config_done(self):
+ """Parse values and execute final code before closing the wizard"""
+ custom_vals = {
+ l.attribute_id.id:
+ l.value or l.attachment_ids for l in self.custom_value_ids
+ }
+
+ # This try except is too generic.
+ # The create_variant routine could effectively fail for
+ # a large number of reasons, including bad programming.
+ # It should be refactored.
+ # In the meantime, at least make sure that a validation
+ # error legitimately raised in a nested routine
+ # is passed through.
+ try:
+ variant = self.product_tmpl_id.create_get_variant(
+ self.value_ids.ids, custom_vals)
+ except ValidationError:
+ raise
+ except:
+ raise ValidationError(
+ _('Invalid configuration! Please check all '
+ 'required steps and fields.')
+ )
+
+ so = self.env['sale.order'].browse(self.env.context.get('active_id'))
+
+ line_vals = {'product_id': variant.id}
+ line_vals.update(self._extra_line_values(
+ self.order_line_id.order_id or so, variant, new=True)
+ )
+
+ if self.order_line_id:
+ self.order_line_id.write(line_vals)
+ else:
+ so.write({'order_line': [(0, 0, line_vals)]})
+
+ self.unlink()
+ return
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From b07d632598456ee6ec83bc11659400c557a5fd65 Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Sat, 20 May 2017 16:03:44 +0530
Subject: [PATCH 02/90] added condition for the model checking
---
product_configurator_sale/wizard/product_configurator.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index be43be59e..a4cde44d4 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -22,6 +22,8 @@ class ProductConfigurator(models.TransientModel):
@api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
+ if self._context.get('active_model', '') not in ('sale.order', 'sale.order.line'):
+ return super(ProductConfigurator, self).action_config_done()
custom_vals = {
l.attribute_id.id:
l.value or l.attachment_ids for l in self.custom_value_ids
From 3b9bcf51c87c463e8cf18c56d3160427d470134f Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Mon, 22 May 2017 20:35:44 +0530
Subject: [PATCH 03/90] remove _wizard module and added defualt wizard to base
module, creating variant on default action_config_done method
---
product_configurator_sale/__init__.py | 2 +-
product_configurator_sale/__openerp__.py | 3 +-
.../demo/product_template.xml | 103 ++++++++++++++++++
product_configurator_sale/views/sale_view.xml | 2 +-
.../wizard/product_configurator.py | 1 +
5 files changed, 108 insertions(+), 3 deletions(-)
create mode 100644 product_configurator_sale/demo/product_template.xml
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
index 35e7c9600..3616b3002 100755
--- a/product_configurator_sale/__init__.py
+++ b/product_configurator_sale/__init__.py
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
from . import models
-from . import wizard
+from . import wizard
\ No newline at end of file
diff --git a/product_configurator_sale/__openerp__.py b/product_configurator_sale/__openerp__.py
index 9d81d2ec1..5fecc4180 100755
--- a/product_configurator_sale/__openerp__.py
+++ b/product_configurator_sale/__openerp__.py
@@ -7,11 +7,12 @@
'author': 'Pledra',
'license': 'AGPL-3',
'website': 'http://www.pledra.com/',
- 'depends': ['sale_stock', 'product_configurator', 'product_configurator_wizard'],
+ 'depends': ['sale_stock', 'product_configurator'],
"data": [
'views/sale_view.xml',
],
'demo': [
+ 'demo/product_template.xml'
],
'images': [
'static/description/cover.png'
diff --git a/product_configurator_sale/demo/product_template.xml b/product_configurator_sale/demo/product_template.xml
new file mode 100644
index 000000000..6f7d733f0
--- /dev/null
+++ b/product_configurator_sale/demo/product_template.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+ product
+
+
+
+
+ product
+
+
+
+ Luxury Line
+ product
+
+
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index e33e21628..5446e1028 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -32,7 +32,7 @@
-
Date: Wed, 24 May 2017 12:56:52 +0530
Subject: [PATCH 04/90] [FIX] Small fixes & flake8
---
product_configurator_sale/__init__.py | 3 ++-
product_configurator_sale/wizard/product_configurator.py | 7 +++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
index 3616b3002..a138738fc 100755
--- a/product_configurator_sale/__init__.py
+++ b/product_configurator_sale/__init__.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from . import models
-from . import wizard
\ No newline at end of file
+from . import wizard
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index d7e1fc8eb..eef80d639 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
-from openerp.osv import orm
-from openerp.addons.base.ir.ir_model import _get_fields_type
from openerp import models, fields, api, _
-from openerp.exceptions import Warning, ValidationError
+from openerp.exceptions import ValidationError
class FreeSelection(fields.Selection):
@@ -23,7 +21,8 @@ class ProductConfigurator(models.TransientModel):
@api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
- if self._context.get('active_model', '') not in ('sale.order', 'sale.order.line'):
+ if self._context.get('active_model', '') not in (
+ 'sale.order', 'sale.order.line'):
return super(ProductConfigurator, self).action_config_done()
custom_vals = {
l.attribute_id.id:
From 2f9c45c8c8df2321684b07732be84942f8f163e0 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 25 May 2017 12:07:36 +0200
Subject: [PATCH 05/90] General fixes and flake8
---
product_configurator_sale/__init__.py | 1 -
product_configurator_sale/__openerp__.py | 13 +--
.../data/menu_product.xml | 14 +++
.../demo/product_template.xml | 103 ------------------
product_configurator_sale/models/__init__.py | 1 -
product_configurator_sale/models/sale.py | 1 -
product_configurator_sale/models/stock.py | 9 --
.../static/description/icon.png | Bin 0 -> 11453 bytes
product_configurator_sale/views/sale_view.xml | 70 ++++++------
product_configurator_sale/wizard/__init__.py | 4 +-
.../wizard/product_configurator.py | 18 +--
11 files changed, 62 insertions(+), 172 deletions(-)
create mode 100644 product_configurator_sale/data/menu_product.xml
delete mode 100644 product_configurator_sale/demo/product_template.xml
delete mode 100644 product_configurator_sale/models/stock.py
create mode 100644 product_configurator_sale/static/description/icon.png
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
index a138738fc..35e7c9600 100755
--- a/product_configurator_sale/__init__.py
+++ b/product_configurator_sale/__init__.py
@@ -2,4 +2,3 @@
from . import models
from . import wizard
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/product_configurator_sale/__openerp__.py b/product_configurator_sale/__openerp__.py
index 5fecc4180..418b0d3a2 100755
--- a/product_configurator_sale/__openerp__.py
+++ b/product_configurator_sale/__openerp__.py
@@ -3,20 +3,17 @@
'name': 'Product Configurator Sale',
'version': '9.0.1.0.0',
'category': 'Generic Modules/Sale',
- 'summary': 'product configuration interface modules for Sale',
+ 'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
'license': 'AGPL-3',
'website': 'http://www.pledra.com/',
- 'depends': ['sale_stock', 'product_configurator'],
+ 'depends': ['sale', 'product_configurator'],
"data": [
+ 'data/menu_product.xml',
'views/sale_view.xml',
],
- 'demo': [
- 'demo/product_template.xml'
- ],
- 'images': [
- 'static/description/cover.png'
- ],
+ 'demo': [],
+ 'images': [],
'test': [],
'installable': True,
'auto_install': False,
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
new file mode 100644
index 000000000..4fb4d2938
--- /dev/null
+++ b/product_configurator_sale/data/menu_product.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+ {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
+
+
+
+ {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
+
+
+
+
\ No newline at end of file
diff --git a/product_configurator_sale/demo/product_template.xml b/product_configurator_sale/demo/product_template.xml
deleted file mode 100644
index 6f7d733f0..000000000
--- a/product_configurator_sale/demo/product_template.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-
-
-
-
- product
-
-
-
-
- product
-
-
-
- Luxury Line
- product
-
-
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
- product
-
-
-
-
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 4c439bb9a..60a9fb7f6 100755
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from . import sale
-from . import stock
from . import account
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 7d0d047c8..85168b5bf 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -53,4 +53,3 @@ def reconfigure_product(self):
'target': 'new',
'res_id': wizard.id,
}
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/product_configurator_sale/models/stock.py b/product_configurator_sale/models/stock.py
deleted file mode 100644
index de069b9b9..000000000
--- a/product_configurator_sale/models/stock.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from openerp import models, fields
-
-
-class StockMove(models.Model):
- _inherit = 'stock.move'
-
- product_id = fields.Many2one(domain=[('config_ok', '=', False)])
diff --git a/product_configurator_sale/static/description/icon.png b/product_configurator_sale/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5d307c6481b2b4f3a070bb15e6dcecd845c5ffe
GIT binary patch
literal 11453
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
literal 0
HcmV?d00001
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 5446e1028..4c653c4d2 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -7,7 +7,6 @@
sale.order
-
@@ -20,47 +19,46 @@
-
-
+
-
- sale.order.form.config
- sale.order
-
-
-
-
-
+
+ sale.order.form.config
+ sale.order
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/product_configurator_sale/wizard/__init__.py b/product_configurator_sale/wizard/__init__.py
index b93c990ce..c0a907ffd 100644
--- a/product_configurator_sale/wizard/__init__.py
+++ b/product_configurator_sale/wizard/__init__.py
@@ -1 +1,3 @@
-import product_configurator
+# -*- coding: utf-8 -*-
+
+from . import product_configurator
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index eef80d639..680e17e93 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -4,25 +4,20 @@
from openerp.exceptions import ValidationError
-class FreeSelection(fields.Selection):
-
- def convert_to_cache(self, value, record, validate=True):
- return super(FreeSelection, self).convert_to_cache(
- value=value, record=record, validate=False)
-
-
class ProductConfigurator(models.TransientModel):
_inherit = 'product.configurator'
- order_line_id = fields.Many2one(comodel_name='sale.order.line',
- readonly=True)
+ order_line_id = fields.Many2one(
+ comodel_name='sale.order.line',
+ readonly=True
+ )
@api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
- if self._context.get('active_model', '') not in (
- 'sale.order', 'sale.order.line'):
+ sale_models = ['sale.order', 'sale.order.line']
+ if self._context.get('active_model', '') not in sale_models:
return super(ProductConfigurator, self).action_config_done()
custom_vals = {
l.attribute_id.id:
@@ -61,4 +56,3 @@ def action_config_done(self):
self.unlink()
return
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 4e8174d8ae8265392b96a9d07323b2469c85e393 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 25 May 2017 14:58:25 +0200
Subject: [PATCH 06/90] Overriding product search to prevent configurable
products usage in standard Odoo modules
---
product_configurator_sale/models/__init__.py | 1 -
product_configurator_sale/models/account.py | 9 ---------
product_configurator_sale/models/sale.py | 1 -
3 files changed, 11 deletions(-)
delete mode 100644 product_configurator_sale/models/account.py
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 60a9fb7f6..78a960496 100755
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
from . import sale
-from . import account
diff --git a/product_configurator_sale/models/account.py b/product_configurator_sale/models/account.py
deleted file mode 100644
index c277de94f..000000000
--- a/product_configurator_sale/models/account.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from openerp import models, fields
-
-
-class AccountInvoiceLine(models.Model):
- _inherit = 'account.invoice.line'
-
- product_id = fields.Many2one(domain=[('config_ok', '=', False)])
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 85168b5bf..9868fbd01 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -19,7 +19,6 @@ class SaleOrderLine(models.Model):
related="product_id.value_custom_ids",
string="Custom Values"
)
- product_id = fields.Many2one(domain=[('config_ok', '=', False)])
config_ok = fields.Boolean(
related='product_id.config_ok',
string="Configurable"
From 0de81cfd41e6b19dbba159f871d87fb8848d72f4 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 26 May 2017 17:38:47 +0200
Subject: [PATCH 07/90] Moved extra_lines_values to so wizard
---
.../wizard/product_configurator.py | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 680e17e93..831890fa3 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -13,6 +13,17 @@ class ProductConfigurator(models.TransientModel):
readonly=True
)
+ def _extra_line_values(self, so, product, new=True):
+ """ Hook to allow custom line values to be put on the newly
+ created or edited lines."""
+ vals = {}
+ if new:
+ vals.update({
+ 'name': product.config_name,
+ 'product_uom': product.uom_id.id,
+ })
+ return vals
+
@api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
From a341bcabb331a5799fd7e79d9ab57540bdf7bb41 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Sun, 11 Jun 2017 22:03:16 +0300
Subject: [PATCH 08/90] Added subconfigurable products to configuration wizard
---
product_configurator_sale/models/__init__.py | 1 +
product_configurator_sale/models/product.py | 21 +++++++++++++++++++
product_configurator_sale/models/sale.py | 7 -------
.../wizard/product_configurator.py | 9 ++++----
4 files changed, 26 insertions(+), 12 deletions(-)
create mode 100644 product_configurator_sale/models/product.py
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 78a960496..2d93c6e84 100755
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from . import sale
+from . import product
diff --git a/product_configurator_sale/models/product.py b/product_configurator_sale/models/product.py
new file mode 100644
index 000000000..e35786bc0
--- /dev/null
+++ b/product_configurator_sale/models/product.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from openerp import api, models
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ @api.multi
+ def create_get_variant(self, value_ids, custom_values=None):
+ """Add the name generated from the mako template to sales description
+ to have the value transfered to the order lines"""
+ variant = super(ProductTemplate, self).create_get_variant(
+ value_ids=value_ids, custom_values=custom_values)
+ if self.mako_tmpl_name:
+ variant.write({
+ 'description_sale': variant._get_mako_tmpl_name()
+ })
+ return variant
+
+ # TODO: Refactor so we can add the value before variant creation
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 9868fbd01..45d8230e9 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -3,13 +3,6 @@
from openerp import models, fields, api
-# class sale_order_line_attribute(models.Model):
-# _name = 'sale.order.line.attribute'
-
-# custom_value = fields.Char('Custom Value', size=64)
-# sale_line_id = fields.Many2one('sale.order.line', 'Sale Order Line')
-
-
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 831890fa3..0ae968e1b 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -17,11 +17,10 @@ def _extra_line_values(self, so, product, new=True):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
vals = {}
- if new:
- vals.update({
- 'name': product.config_name,
- 'product_uom': product.uom_id.id,
- })
+ vals.update({
+ 'name': product._get_mako_tmpl_name(),
+ 'product_uom': product.uom_id.id,
+ })
return vals
@api.multi
From 19d93b039d6c302d842b46e9093ed779f6c1a91b Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 26 Jun 2017 17:27:43 +0300
Subject: [PATCH 09/90] General fixes and improvements
---
product_configurator_sale/models/__init__.py | 1 -
product_configurator_sale/models/product.py | 21 --------------------
2 files changed, 22 deletions(-)
delete mode 100644 product_configurator_sale/models/product.py
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 2d93c6e84..78a960496 100755
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
from . import sale
-from . import product
diff --git a/product_configurator_sale/models/product.py b/product_configurator_sale/models/product.py
deleted file mode 100644
index e35786bc0..000000000
--- a/product_configurator_sale/models/product.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from openerp import api, models
-
-
-class ProductTemplate(models.Model):
- _inherit = 'product.template'
-
- @api.multi
- def create_get_variant(self, value_ids, custom_values=None):
- """Add the name generated from the mako template to sales description
- to have the value transfered to the order lines"""
- variant = super(ProductTemplate, self).create_get_variant(
- value_ids=value_ids, custom_values=custom_values)
- if self.mako_tmpl_name:
- variant.write({
- 'description_sale': variant._get_mako_tmpl_name()
- })
- return variant
-
- # TODO: Refactor so we can add the value before variant creation
From 7fcd2a2236f54662bf35fb42a07bc06b8be91226 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 20 Feb 2018 19:44:57 +0100
Subject: [PATCH 10/90] Removed console.log, renamed __openerp__.py files to
__manifest__.py
---
product_configurator_sale/{__openerp__.py => __manifest__.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename product_configurator_sale/{__openerp__.py => __manifest__.py} (100%)
diff --git a/product_configurator_sale/__openerp__.py b/product_configurator_sale/__manifest__.py
similarity index 100%
rename from product_configurator_sale/__openerp__.py
rename to product_configurator_sale/__manifest__.py
From 36b0a31a3e7a5d28aec3f67ee1d303307bab4ccf Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 14 May 2018 13:01:18 +0200
Subject: [PATCH 11/90] Bumped version to 11.0 and removed all traces of
coding: utf-8 from py files
---
product_configurator_sale/__init__.py | 2 --
product_configurator_sale/__manifest__.py | 4 ++--
product_configurator_sale/models/__init__.py | 2 --
product_configurator_sale/models/sale.py | 2 --
product_configurator_sale/wizard/__init__.py | 2 --
product_configurator_sale/wizard/product_configurator.py | 2 --
6 files changed, 2 insertions(+), 12 deletions(-)
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
index 35e7c9600..9b4296142 100755
--- a/product_configurator_sale/__init__.py
+++ b/product_configurator_sale/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import models
from . import wizard
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 418b0d3a2..f4900eed7 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
{
'name': 'Product Configurator Sale',
- 'version': '9.0.1.0.0',
+ 'version': '11.0.1.0.0',
'category': 'Generic Modules/Sale',
'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
@@ -16,5 +15,6 @@
'images': [],
'test': [],
'installable': True,
+ 'application': True,
'auto_install': False,
}
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 78a960496..8a0dc04e1 100755
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-
from . import sale
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 45d8230e9..e658ee5ee 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from openerp import models, fields, api
diff --git a/product_configurator_sale/wizard/__init__.py b/product_configurator_sale/wizard/__init__.py
index c0a907ffd..3c76586e5 100644
--- a/product_configurator_sale/wizard/__init__.py
+++ b/product_configurator_sale/wizard/__init__.py
@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-
from . import product_configurator
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 0ae968e1b..04e71282d 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from openerp import models, fields, api, _
from openerp.exceptions import ValidationError
From b7f81931e565f96a66a4e56c9d0e52adab9957b5 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 14 May 2018 13:22:51 +0200
Subject: [PATCH 12/90] [MIG] Kept application only for base and website +
fixed _get_price_extra
---
product_configurator_sale/__manifest__.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index f4900eed7..9862031b9 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -15,6 +15,5 @@
'images': [],
'test': [],
'installable': True,
- 'application': True,
'auto_install': False,
}
From 398120741dde47b91ca7ebf03c30e0c386a67106 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 15 May 2018 15:10:27 +0200
Subject: [PATCH 13/90] [FIX] Using no-save deepcopy of event to replicate same
functionality, added sale_management instead of sale to configurator
---
product_configurator_sale/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 9862031b9..e162512ac 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -6,7 +6,7 @@
'author': 'Pledra',
'license': 'AGPL-3',
'website': 'http://www.pledra.com/',
- 'depends': ['sale', 'product_configurator'],
+ 'depends': ['sale_management', 'product_configurator'],
"data": [
'data/menu_product.xml',
'views/sale_view.xml',
From 5643286dafb40f081dd6c25ac5fd56e8184995ac Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:37:38 +0530
Subject: [PATCH 14/90] [FIX][T1902]product_configurator_sale,
product_configurator_purchase : add config_session_id in place of
product_tmpl_id to call method 'create_get_variant'
---
product_configurator_sale/wizard/product_configurator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 04e71282d..284233cba 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -40,7 +40,7 @@ def action_config_done(self):
# error legitimately raised in a nested routine
# is passed through.
try:
- variant = self.product_tmpl_id.create_get_variant(
+ variant = self.config_session_id.create_get_variant(
self.value_ids.ids, custom_vals)
except ValidationError:
raise
From 4d9e9d492913c7f550b496a16bee8abbcda2b60c Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:39:00 +0530
Subject: [PATCH 15/90] Revert "[FIX][T1902]product_configurator_sale,
product_configurator_purchase : add config_session_id in place of
product_tmpl_id to call method 'create_get_variant'"
This reverts commit 35319829dac4ba1e61c561f5ce758e567cef090f.
---
product_configurator_sale/wizard/product_configurator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 284233cba..04e71282d 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -40,7 +40,7 @@ def action_config_done(self):
# error legitimately raised in a nested routine
# is passed through.
try:
- variant = self.config_session_id.create_get_variant(
+ variant = self.product_tmpl_id.create_get_variant(
self.value_ids.ids, custom_vals)
except ValidationError:
raise
From e45ad29d3431d68142c5f02b236ae5bc79b02bd9 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:44:49 +0530
Subject: [PATCH 16/90] [FIX][T1902]product_configurator_sale,
product_configurator_purchase : add config_session_id in place of
product_tmpl_id to call method 'create_get_variant'
---
product_configurator_sale/wizard/product_configurator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 04e71282d..284233cba 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -40,7 +40,7 @@ def action_config_done(self):
# error legitimately raised in a nested routine
# is passed through.
try:
- variant = self.product_tmpl_id.create_get_variant(
+ variant = self.config_session_id.create_get_variant(
self.value_ids.ids, custom_vals)
except ValidationError:
raise
From bfbf4a39adbda9a72267f4049a05e024b15a25bc Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 16:58:07 +0530
Subject: [PATCH 17/90] [FIX] fix flake8 error
---
product_configurator_sale/wizard/product_configurator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 284233cba..0c64879bc 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -44,7 +44,7 @@ def action_config_done(self):
self.value_ids.ids, custom_vals)
except ValidationError:
raise
- except:
+ except Exception:
raise ValidationError(
_('Invalid configuration! Please check all '
'required steps and fields.')
From fc26a84181fbae105ec5c90d2b9a0a2c0a5b8731 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 24 Sep 2018 12:07:02 +0530
Subject: [PATCH 18/90] [IMP][T1902]product_configurator_sale,
product_configurator_purchase : add class fa-lg on sale_order)line and
purchase_order_line
---
product_configurator_sale/views/sale_view.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 4c653c4d2..9f332b5a7 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -48,6 +48,7 @@
Date: Tue, 25 Sep 2018 15:34:38 +0530
Subject: [PATCH 20/90]
[FIX][T1902]product_configurator,product_configurator_purchase,product_cnofigurator_sale:
remove deletion of 'view_cache'from action and change icon
---
product_configurator_sale/models/sale.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index ad59040c2..ccc21ef44 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -26,6 +26,4 @@ def reconfigure_product(self):
'product_id': self.product_id.id,
'order_line_id': self.id,
})
- action = wizard.action_next_step()
- del action['context']['view_cache']
- return action
+ return wizard.action_next_step()
From fd22e05e96f39325ed298b5bf34d139eb7af6b27 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 17:12:10 +0530
Subject: [PATCH 21/90]
[FIX][T1902]product_configurator,product_configurator_sale,product_configurator_purchase:
add generic method and call that
---
product_configurator_sale/models/sale.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index ccc21ef44..fea36026a 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -21,9 +21,12 @@ def reconfigure_product(self):
template and variant in order to re-configure a existing product. It is
esetially a shortcut to pre-fill configuration data of a variant"""
- wizard_obj = self.env['product.configurator']
- wizard = wizard_obj.create({
- 'product_id': self.product_id.id,
+ # TODO: change wizard model to product.configurator.sale
+
+ extra_vals = {
'order_line_id': self.id,
- })
- return wizard.action_next_step()
+ 'product_id': self.product_id.id,
+ }
+ wizard_model = 'product.configurator'
+ return self.product_id.product_tmpl_id.create_configurator_wizard(
+ model_name=wizard_model, extra_vals=extra_vals, click_next=True)
From 90a4276e31ebba96e54ae27c6ee9ddae03b99df1 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 17:32:22 +0530
Subject: [PATCH 22/90] [FIX][T1902] : fix flake8 error
---
product_configurator_sale/data/menu_product.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index 4fb4d2938..7aa8879c6 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -1,5 +1,5 @@
-
+
@@ -11,4 +11,4 @@
-
\ No newline at end of file
+
From 9389e809b395a35f3af4eeaf18f37c0746023b96 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 20:13:54 +0530
Subject: [PATCH 23/90] [FIX][T1902]product_configurator : fix typing error,
change method name, set click_next's default value true
---
product_configurator_sale/models/sale.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index fea36026a..1a61593f0 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -28,5 +28,5 @@ def reconfigure_product(self):
'product_id': self.product_id.id,
}
wizard_model = 'product.configurator'
- return self.product_id.product_tmpl_id.create_configurator_wizard(
- model_name=wizard_model, extra_vals=extra_vals, click_next=True)
+ return self.product_id.product_tmpl_id.create_config_wizard(
+ model_name=wizard_model, extra_vals=extra_vals)
From 2478363a68d686b2eb6d352dd4a6784645c7ab4f Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Wed, 26 Sep 2018 18:16:17 +0200
Subject: [PATCH 24/90] [WIP] Working version of sales_mrp glue module, no
tests
---
.../data/menu_product.xml | 2 -
product_configurator_sale/models/sale.py | 28 +++++++--
product_configurator_sale/views/sale_view.xml | 10 ++--
.../wizard/product_configurator.py | 58 ++++++-------------
4 files changed, 44 insertions(+), 54 deletions(-)
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index 7aa8879c6..54789807b 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -1,6 +1,5 @@
-
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
@@ -10,5 +9,4 @@
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
-
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 1a61593f0..c50ca33ca 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -1,4 +1,24 @@
-from openerp import models, fields, api
+from odoo import api, fields, models
+
+
+class SaleOrder(models.Model):
+ _inherit = 'sale.order'
+
+ @api.multi
+ def action_config_start(self):
+ """Return action to start configuration wizard"""
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'product.configurator.sale',
+ 'name': "Product Configurator",
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': dict(
+ self.env.context,
+ default_order_id=self.id,
+ wizard_model='product.configurator.sale',
+ ),
+ }
class SaleOrderLine(models.Model):
@@ -20,13 +40,11 @@ def reconfigure_product(self):
""" Creates and launches a product configurator wizard with a linked
template and variant in order to re-configure a existing product. It is
esetially a shortcut to pre-fill configuration data of a variant"""
-
- # TODO: change wizard model to product.configurator.sale
-
extra_vals = {
+ 'order_id': self.order_id.id,
'order_line_id': self.id,
'product_id': self.product_id.id,
}
- wizard_model = 'product.configurator'
+ wizard_model = 'product.configurator.sale'
return self.product_id.product_tmpl_id.create_config_wizard(
model_name=wizard_model, extra_vals=extra_vals)
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 9f332b5a7..27089ae36 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -1,6 +1,5 @@
-
-
+
product.configurator.sale.order.line.form.view
@@ -30,10 +29,10 @@
-
@@ -61,5 +60,4 @@
-
-
+
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 0c64879bc..fbd4006a7 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,66 +1,42 @@
-from openerp import models, fields, api, _
-from openerp.exceptions import ValidationError
+from odoo import api, fields, models
-class ProductConfigurator(models.TransientModel):
+class ProductConfiguratorSale(models.TransientModel):
+ _name = 'product.configurator.sale'
_inherit = 'product.configurator'
+ order_id = fields.Many2one(
+ comodel_name='sale.order',
+ required=True,
+ readonly=True
+ )
order_line_id = fields.Many2one(
comodel_name='sale.order.line',
readonly=True
)
- def _extra_line_values(self, so, product, new=True):
+ def _get_order_line_vals(self, product_id):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
- vals = {}
- vals.update({
+ product = self.env['product.product'].browse(product_id)
+
+ return {
+ 'product_id': product_id,
'name': product._get_mako_tmpl_name(),
'product_uom': product.uom_id.id,
- })
- return vals
+ }
@api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
- sale_models = ['sale.order', 'sale.order.line']
- if self._context.get('active_model', '') not in sale_models:
- return super(ProductConfigurator, self).action_config_done()
- custom_vals = {
- l.attribute_id.id:
- l.value or l.attachment_ids for l in self.custom_value_ids
- }
-
- # This try except is too generic.
- # The create_variant routine could effectively fail for
- # a large number of reasons, including bad programming.
- # It should be refactored.
- # In the meantime, at least make sure that a validation
- # error legitimately raised in a nested routine
- # is passed through.
- try:
- variant = self.config_session_id.create_get_variant(
- self.value_ids.ids, custom_vals)
- except ValidationError:
- raise
- except Exception:
- raise ValidationError(
- _('Invalid configuration! Please check all '
- 'required steps and fields.')
- )
-
- so = self.env['sale.order'].browse(self.env.context.get('active_id'))
+ res = super(ProductConfiguratorSale, self).action_config_done()
- line_vals = {'product_id': variant.id}
- line_vals.update(self._extra_line_values(
- self.order_line_id.order_id or so, variant, new=True)
- )
+ line_vals = self._get_order_line_vals(res['res_id'])
if self.order_line_id:
self.order_line_id.write(line_vals)
else:
- so.write({'order_line': [(0, 0, line_vals)]})
+ self.order_id.write({'order_line': [(0, 0, line_vals)]})
- self.unlink()
return
From a6c041def413269d4c012c9543fb1c2cbc255bf5 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 27 Sep 2018 16:22:05 +0200
Subject: [PATCH 25/90] Added context values to reconfigure method to fix reset
missing values
---
product_configurator_sale/models/sale.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index c50ca33ca..b0b0b7416 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -40,11 +40,19 @@ def reconfigure_product(self):
""" Creates and launches a product configurator wizard with a linked
template and variant in order to re-configure a existing product. It is
esetially a shortcut to pre-fill configuration data of a variant"""
+ wizard_model = 'product.configurator.sale'
+
extra_vals = {
'order_id': self.order_id.id,
'order_line_id': self.id,
'product_id': self.product_id.id,
}
- wizard_model = 'product.configurator.sale'
+
+ self = self.with_context({
+ 'default_order_id': self.order_id.id,
+ 'default_order_line_id': self.id
+ })
+
return self.product_id.product_tmpl_id.create_config_wizard(
- model_name=wizard_model, extra_vals=extra_vals)
+ model_name=wizard_model, extra_vals=extra_vals
+ )
From 7db1275a0ad055887ac3c89b148a4751316b5002 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 27 Sep 2018 21:20:06 +0530
Subject: [PATCH 26/90] [FIX][T1902]product_configurator_sale : remove extra
view
---
product_configurator_sale/views/sale_view.xml | 34 +++++++------------
1 file changed, 12 insertions(+), 22 deletions(-)
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 27089ae36..1188b073b 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -1,28 +1,6 @@
-
- product.configurator.sale.order.line.form.view
- sale.order
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
sale.order.form.config
sale.order
@@ -57,6 +35,18 @@
]
}"/>
+
+
+
+
+
+
+
+
+
+
+
+
From b5480fc1d1b8809a1d42936048edba014de4418f Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Fri, 28 Sep 2018 13:38:36 +0530
Subject: [PATCH 27/90] [FIX][T1902]product_configurator_sale : add space
---
product_configurator_sale/views/sale_view.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 1188b073b..7732966a5 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -6,6 +6,7 @@
sale.order
+
+
@@ -47,6 +49,7 @@
+
From 9e5d5ae0323083142e27b634177a1b45aa2ebbaa Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 19 Oct 2018 11:49:23 +0200
Subject: [PATCH 28/90] Added module description & removing invisible attribute
of attr val lines + bump version
---
product_configurator_sale/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index e162512ac..fa845c63e 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,6 +1,6 @@
{
'name': 'Product Configurator Sale',
- 'version': '11.0.1.0.0',
+ 'version': '11.0.1.0.1',
'category': 'Generic Modules/Sale',
'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
From 0947af0abed1c68a1fc5f402c18fe098e41eeb99 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 1 Feb 2019 16:21:55 +0100
Subject: [PATCH 29/90] Using onchange to get values for new/edited sale order
lines
---
product_configurator_sale/__manifest__.py | 2 +-
product_configurator_sale/wizard/product_configurator.py | 8 +++-----
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index fa845c63e..5d805042a 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,6 +1,6 @@
{
'name': 'Product Configurator Sale',
- 'version': '11.0.1.0.1',
+ 'version': '11.0.1.0.2',
'category': 'Generic Modules/Sale',
'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index fbd4006a7..e143bf995 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -19,13 +19,11 @@ class ProductConfiguratorSale(models.TransientModel):
def _get_order_line_vals(self, product_id):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
- product = self.env['product.product'].browse(product_id)
- return {
+ return self.order_line_id._prepare_add_missing_fields({
'product_id': product_id,
- 'name': product._get_mako_tmpl_name(),
- 'product_uom': product.uom_id.id,
- }
+ 'order_id': self.order_id.id
+ })
@api.multi
def action_config_done(self):
From 18bf467a97913a015ce8aae5ae26cc24f87df1d6 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 4 Feb 2019 11:38:13 +0100
Subject: [PATCH 30/90] [FIX] Updating initial line vals with missing fields
dicts
---
product_configurator_sale/__manifest__.py | 2 +-
product_configurator_sale/wizard/product_configurator.py | 8 ++++++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 5d805042a..f4a08bbaf 100755
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,6 +1,6 @@
{
'name': 'Product Configurator Sale',
- 'version': '11.0.1.0.2',
+ 'version': '11.0.1.0.3',
'category': 'Generic Modules/Sale',
'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index e143bf995..24e683501 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -20,10 +20,14 @@ def _get_order_line_vals(self, product_id):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
- return self.order_line_id._prepare_add_missing_fields({
+ line_vals = {
'product_id': product_id,
'order_id': self.order_id.id
- })
+ }
+
+ extra_vals = self.order_line_id._prepare_add_missing_fields(line_vals)
+ line_vals.update(extra_vals)
+ return line_vals
@api.multi
def action_config_done(self):
From ab6d53232599c9da1aeefbc0e18d3a258a3ee0b8 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 9 Apr 2019 11:41:05 +0530
Subject: [PATCH 31/90] [FIX][T-00508]product_configurator_sale: call onchange
after creating or writing on sale order line
---
product_configurator_sale/wizard/product_configurator.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 24e683501..01d221331 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -38,7 +38,14 @@ def action_config_done(self):
if self.order_line_id:
self.order_line_id.write(line_vals)
+ order_line_id = self.order_line_id
else:
self.order_id.write({'order_line': [(0, 0, line_vals)]})
+ order_line_id = self.order_id.order_line.filtered(
+ lambda line: line.product_id.id == res['res_id'])
+
+ if order_line_id:
+ order_line_id.product_id_change()
+ order_line_id._onchange_discount()
return
From 391f7db1f0db9b9e5a35b905113b07604203490f Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 9 Apr 2019 15:41:51 +0530
Subject: [PATCH 32/90] [FIX]use onchange() instead of calling all onchane
methods explicitly
---
.../wizard/product_configurator.py | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 01d221331..fb433c39c 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -36,16 +36,20 @@ def action_config_done(self):
line_vals = self._get_order_line_vals(res['res_id'])
+ # To call onchange explicite as write and create
+ # will not trigger onchange automatically
+ order_line_obj = self.env['sale.order.line']
+ specs = order_line_obj._onchange_spec()
+ updates = order_line_obj.onchange(line_vals, ['product_id'], specs)
+ values = updates.get('value', {})
+ for name, val in values.items():
+ if isinstance(val, tuple):
+ values[name] = val[0]
+ line_vals.update(values)
+
if self.order_line_id:
self.order_line_id.write(line_vals)
- order_line_id = self.order_line_id
else:
self.order_id.write({'order_line': [(0, 0, line_vals)]})
- order_line_id = self.order_id.order_line.filtered(
- lambda line: line.product_id.id == res['res_id'])
-
- if order_line_id:
- order_line_id.product_id_change()
- order_line_id._onchange_discount()
return
From f8984be09b87a9dbccb55273ec91c8b23c61aec5 Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Mon, 27 May 2019 16:18:24 +0530
Subject: [PATCH 33/90] [ADD][#T00494]website_product_configurator:solved
flake8 and pylints
---
product_configurator_sale/README.rst | 3 +++
product_configurator_sale/__init__.py | 0
product_configurator_sale/__manifest__.py | 0
product_configurator_sale/models/__init__.py | 0
4 files changed, 3 insertions(+)
create mode 100644 product_configurator_sale/README.rst
mode change 100755 => 100644 product_configurator_sale/__init__.py
mode change 100755 => 100644 product_configurator_sale/__manifest__.py
mode change 100755 => 100644 product_configurator_sale/models/__init__.py
diff --git a/product_configurator_sale/README.rst b/product_configurator_sale/README.rst
new file mode 100644
index 000000000..11b05fc63
--- /dev/null
+++ b/product_configurator_sale/README.rst
@@ -0,0 +1,3 @@
+===========================
+Product Configurator Sale
+===========================
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
old mode 100755
new mode 100644
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
old mode 100755
new mode 100644
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
old mode 100755
new mode 100644
From d00915b7cb8bf403e13650acece8664b3b240da5 Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Thu, 6 Jun 2019 18:09:33 +0530
Subject: [PATCH 34/90] [ADD][#IMP]product_configurator:improve the code and
write test case for inverse method and check weight_extra method
---
product_configurator_sale/models/sale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index b0b0b7416..24ece2b74 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -55,4 +55,4 @@ def reconfigure_product(self):
return self.product_id.product_tmpl_id.create_config_wizard(
model_name=wizard_model, extra_vals=extra_vals
- )
+ )
\ No newline at end of file
From 2bdef791e854225757b55bfc4cf4c942eb1d2945 Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Thu, 6 Jun 2019 18:15:18 +0530
Subject: [PATCH 35/90] [ADD][#IMP]product_configurator:improve the code and
write test case for inverse method and check weight_extra method
---
product_configurator_sale/tests/__init__.py | 1 +
.../tests/test_case_demo_data.py | 91 +++++++++++++++++++
product_configurator_sale/tests/test_sale.py | 67 ++++++++++++++
3 files changed, 159 insertions(+)
create mode 100644 product_configurator_sale/tests/__init__.py
create mode 100644 product_configurator_sale/tests/test_case_demo_data.py
create mode 100644 product_configurator_sale/tests/test_sale.py
diff --git a/product_configurator_sale/tests/__init__.py b/product_configurator_sale/tests/__init__.py
new file mode 100644
index 000000000..a7e0e8511
--- /dev/null
+++ b/product_configurator_sale/tests/__init__.py
@@ -0,0 +1 @@
+# from . import test_sale
\ No newline at end of file
diff --git a/product_configurator_sale/tests/test_case_demo_data.py b/product_configurator_sale/tests/test_case_demo_data.py
new file mode 100644
index 000000000..c5338bcda
--- /dev/null
+++ b/product_configurator_sale/tests/test_case_demo_data.py
@@ -0,0 +1,91 @@
+from odoo.tests.common import TransactionCase
+
+
+class ProductDemoData(TransactionCase):
+
+ def setUp(self):
+ super(ProductDemoData, self).setUp()
+
+ self.ProductConfWizard = self.env['product.configurator']
+ self.config_product = self.env.ref('product_configurator.bmw_2_series')
+ self.product_category = self.env.ref('product.product_category_5')
+
+ # attributes
+ self.attr_fuel = self.env.ref(
+ 'product_configurator.product_attribute_fuel')
+ self.attr_engine = self.env.ref(
+ 'product_configurator.product_attribute_engine')
+ self.attr_color = self.env.ref(
+ 'product_configurator.product_attribute_color')
+ self.attr_rims = self.env.ref(
+ 'product_configurator.product_attribute_rims')
+ self.attr_model_line = self.env.ref(
+ 'product_configurator.product_attribute_model_line')
+ self.attr_tapistry = self.env.ref(
+ 'product_configurator.product_attribute_tapistry')
+ self.attr_transmission = self.env.ref(
+ 'product_configurator.product_attribute_transmission')
+ self.attr_options = self.env.ref(
+ 'product_configurator.product_attribute_options')
+
+ # values
+ self.value_gasoline = self.env.ref(
+ 'product_configurator.product_attribute_value_gasoline')
+ self.value_218i = self.env.ref(
+ 'product_configurator.product_attribute_value_218i')
+ self.value_220i = self.env.ref(
+ 'product_configurator.product_attribute_value_220i')
+ self.value_red = self.env.ref(
+ 'product_configurator.product_attribute_value_red')
+ self.value_rims_378 = self.env.ref(
+ 'product_configurator.product_attribute_value_rims_378')
+ self.value_sport_line = self.env.ref(
+ 'product_configurator.product_attribute_value_sport_line')
+ self.value_model_sport_line = self.env.ref(
+ 'product_configurator.product_attribute_value_model_sport_line')
+ self.value_tapistry = self.env.ref(
+ 'product_configurator.product_attribute_value_tapistry' +
+ '_oyster_black')
+ self.value_transmission = self.env.ref(
+ 'product_configurator.product_attribute_value_steptronic')
+ self.value_options_1 = self.env.ref(
+ 'product_configurator.product_attribute_value_smoker_package')
+ self.value_options_2 = self.env.ref(
+ 'product_configurator.product_attribute_value_sunroof')
+
+ def _configure_product_nxt_step(self):
+ product_config_wizard = self.ProductConfWizard.create({
+ 'product_tmpl_id': self.config_product.id,
+ })
+ product_config_wizard.action_next_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(self.attr_fuel.id): self.value_gasoline.id,
+ '__attribute-{}'.format(self.attr_engine.id): self.value_218i.id
+ })
+ product_config_wizard.action_next_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(self.attr_color.id): self.value_red.id,
+ '__attribute-{}'.format(self.attr_rims.id): self.value_rims_378.id
+ })
+ product_config_wizard.action_next_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(
+ self.attr_model_line.id): self.value_sport_line.id,
+ })
+ product_config_wizard.action_previous_step()
+ product_config_wizard.action_previous_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(self.attr_engine.id): self.value_220i.id,
+ })
+ product_config_wizard.action_next_step()
+ product_config_wizard.action_next_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(
+ self.attr_model_line.id): self.value_model_sport_line.id,
+ })
+ product_config_wizard.action_next_step()
+ product_config_wizard.write({
+ '__attribute-{}'.format(
+ self.attr_tapistry.id): self.value_tapistry.id,
+ })
+ product_config_wizard.action_next_step()
\ No newline at end of file
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
new file mode 100644
index 000000000..9032168f9
--- /dev/null
+++ b/product_configurator_sale/tests/test_sale.py
@@ -0,0 +1,67 @@
+from odoo.addons.product_configurator.tests. \
+ product_configurator_test_cases import ProductConfiguratorTestCases
+from odoo.tests.common import TransactionCase
+from datetime import datetime
+
+
+class SaleOrder(TransactionCase):
+
+ def setUp(self):
+ super(SaleOrder, self).setUp()
+ self.SaleOrderId = self.env.ref('sale.sale_order_1')
+ self.SaleOrderLineId = self.env.ref('sale.sale_order_line_1')
+ self.ProductId = self.env.ref('product_configurator.product_bmw_sport_line')
+ self.ProductAttributeFuel = self.env.ref(
+ 'product_configurator.product_attribute_fuel')
+ self.ProductAttributeValueGasoline = self.env.ref(
+ 'product_configurator.product_attribute_value_gasoline')
+ self.ProductAttributeValueFuel = \
+ self.ProductAttributeValueGasoline.attribute_id.id
+ self.resPartner = self.env.ref('product_configurator_purchase.partenr1')
+ self.currency_id = self.env.ref('base.USD')
+ self.company_id = self.env.ref('base.main_company')
+ self.ProductTemplate = self.env.ref('product_configurator.bmw_2_series')
+
+ def test_00_reconfigure_product(self):
+ print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
+ self.SaleOrderId = self.SaleOrderId
+ # test_product = self.env['product.product'].create({
+ # 'name': 'Test Product Configuration',
+ # 'config_ok': True,
+ # })
+ # self.SaleOrderLineId.reconfigure_product()
+
+class Purchase(ProductConfiguratorTestCases):
+
+ def test_00_action_config_start(self):
+ # self.ProductId = self.ProductId.create({
+ # 'config_ok': True,
+ # 'name': 'Product Configurator',
+ # 'product_tmpl_id': self.ProductTemplate.id,
+ # })
+ # print("self.Product----------------------------------------!", self.ProductId)
+ print("###############",purchase_order_id.id)
+ purchase_order_id.action_config_start()
+ self.configure_product = self._configure_product_nxt_step()
+ print("\n\n\n --------purchase_order_id", purchase_order_id.order_line)
+ self.config_product.product_variant_ids.reconfigure_product()
+ action = self.config_product.product_variant_ids.reconfigure_product()
+ res_id = action.get('res_id')
+ print("action ================", action, res_id)
+
+ self.assertTrue(
+ purchase_order_id.id,
+ 'order id not exsits'
+ )
+
+ self.assertTrue(
+ purchase_order_line_id.id,
+ 'order line id not exsits'
+ )
+
+
+
+
+
+
+ # self.purchaseOrderLine.purchase_order_id.reconfigure_product()
From 71364bfa81d8759619722adef4e761290ddeb09a Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 6 Jun 2019 18:17:25 +0530
Subject: [PATCH 36/90] [FIX]fix action_config_done in other modules, now check
for incomplete step
---
product_configurator_sale/wizard/product_configurator.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index fb433c39c..4870d54e1 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -33,6 +33,8 @@ def _get_order_line_vals(self, product_id):
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
res = super(ProductConfiguratorSale, self).action_config_done()
+ if res['res_model'] == self._name:
+ return res
line_vals = self._get_order_line_vals(res['res_id'])
From 2be73d5bc312ce959dae64cff806cd1494ae4b4a Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Fri, 7 Jun 2019 13:22:19 +0530
Subject: [PATCH 37/90] [ADD][#T00513] product_configurator_sale,
product_configurator, product_configurator_purchase : create test case for
after or before validate the product then it id or sol is equal or not
---
product_configurator_sale/tests/__init__.py | 2 +-
.../tests/test_case_demo_data.py | 91 -------------------
product_configurator_sale/tests/test_sale.py | 88 +++++++-----------
.../wizard/product_configurator.py | 3 +-
4 files changed, 36 insertions(+), 148 deletions(-)
delete mode 100644 product_configurator_sale/tests/test_case_demo_data.py
diff --git a/product_configurator_sale/tests/__init__.py b/product_configurator_sale/tests/__init__.py
index a7e0e8511..ff4f31acc 100644
--- a/product_configurator_sale/tests/__init__.py
+++ b/product_configurator_sale/tests/__init__.py
@@ -1 +1 @@
-# from . import test_sale
\ No newline at end of file
+from . import test_sale
\ No newline at end of file
diff --git a/product_configurator_sale/tests/test_case_demo_data.py b/product_configurator_sale/tests/test_case_demo_data.py
deleted file mode 100644
index c5338bcda..000000000
--- a/product_configurator_sale/tests/test_case_demo_data.py
+++ /dev/null
@@ -1,91 +0,0 @@
-from odoo.tests.common import TransactionCase
-
-
-class ProductDemoData(TransactionCase):
-
- def setUp(self):
- super(ProductDemoData, self).setUp()
-
- self.ProductConfWizard = self.env['product.configurator']
- self.config_product = self.env.ref('product_configurator.bmw_2_series')
- self.product_category = self.env.ref('product.product_category_5')
-
- # attributes
- self.attr_fuel = self.env.ref(
- 'product_configurator.product_attribute_fuel')
- self.attr_engine = self.env.ref(
- 'product_configurator.product_attribute_engine')
- self.attr_color = self.env.ref(
- 'product_configurator.product_attribute_color')
- self.attr_rims = self.env.ref(
- 'product_configurator.product_attribute_rims')
- self.attr_model_line = self.env.ref(
- 'product_configurator.product_attribute_model_line')
- self.attr_tapistry = self.env.ref(
- 'product_configurator.product_attribute_tapistry')
- self.attr_transmission = self.env.ref(
- 'product_configurator.product_attribute_transmission')
- self.attr_options = self.env.ref(
- 'product_configurator.product_attribute_options')
-
- # values
- self.value_gasoline = self.env.ref(
- 'product_configurator.product_attribute_value_gasoline')
- self.value_218i = self.env.ref(
- 'product_configurator.product_attribute_value_218i')
- self.value_220i = self.env.ref(
- 'product_configurator.product_attribute_value_220i')
- self.value_red = self.env.ref(
- 'product_configurator.product_attribute_value_red')
- self.value_rims_378 = self.env.ref(
- 'product_configurator.product_attribute_value_rims_378')
- self.value_sport_line = self.env.ref(
- 'product_configurator.product_attribute_value_sport_line')
- self.value_model_sport_line = self.env.ref(
- 'product_configurator.product_attribute_value_model_sport_line')
- self.value_tapistry = self.env.ref(
- 'product_configurator.product_attribute_value_tapistry' +
- '_oyster_black')
- self.value_transmission = self.env.ref(
- 'product_configurator.product_attribute_value_steptronic')
- self.value_options_1 = self.env.ref(
- 'product_configurator.product_attribute_value_smoker_package')
- self.value_options_2 = self.env.ref(
- 'product_configurator.product_attribute_value_sunroof')
-
- def _configure_product_nxt_step(self):
- product_config_wizard = self.ProductConfWizard.create({
- 'product_tmpl_id': self.config_product.id,
- })
- product_config_wizard.action_next_step()
- product_config_wizard.write({
- '__attribute-{}'.format(self.attr_fuel.id): self.value_gasoline.id,
- '__attribute-{}'.format(self.attr_engine.id): self.value_218i.id
- })
- product_config_wizard.action_next_step()
- product_config_wizard.write({
- '__attribute-{}'.format(self.attr_color.id): self.value_red.id,
- '__attribute-{}'.format(self.attr_rims.id): self.value_rims_378.id
- })
- product_config_wizard.action_next_step()
- product_config_wizard.write({
- '__attribute-{}'.format(
- self.attr_model_line.id): self.value_sport_line.id,
- })
- product_config_wizard.action_previous_step()
- product_config_wizard.action_previous_step()
- product_config_wizard.write({
- '__attribute-{}'.format(self.attr_engine.id): self.value_220i.id,
- })
- product_config_wizard.action_next_step()
- product_config_wizard.action_next_step()
- product_config_wizard.write({
- '__attribute-{}'.format(
- self.attr_model_line.id): self.value_model_sport_line.id,
- })
- product_config_wizard.action_next_step()
- product_config_wizard.write({
- '__attribute-{}'.format(
- self.attr_tapistry.id): self.value_tapistry.id,
- })
- product_config_wizard.action_next_step()
\ No newline at end of file
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 9032168f9..0d5cdfe64 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -1,67 +1,47 @@
from odoo.addons.product_configurator.tests. \
product_configurator_test_cases import ProductConfiguratorTestCases
-from odoo.tests.common import TransactionCase
-from datetime import datetime
-class SaleOrder(TransactionCase):
+class SaleOrder(ProductConfiguratorTestCases):
def setUp(self):
super(SaleOrder, self).setUp()
- self.SaleOrderId = self.env.ref('sale.sale_order_1')
- self.SaleOrderLineId = self.env.ref('sale.sale_order_line_1')
- self.ProductId = self.env.ref('product_configurator.product_bmw_sport_line')
- self.ProductAttributeFuel = self.env.ref(
- 'product_configurator.product_attribute_fuel')
- self.ProductAttributeValueGasoline = self.env.ref(
- 'product_configurator.product_attribute_value_gasoline')
- self.ProductAttributeValueFuel = \
- self.ProductAttributeValueGasoline.attribute_id.id
- self.resPartner = self.env.ref('product_configurator_purchase.partenr1')
+ self.SaleOrderId = self.env['sale.order']
+ self.productPricelist = self.env['product.pricelist']
+ self.resPartner = self.env.ref(
+ 'product_configurator_purchase.partenr1')
self.currency_id = self.env.ref('base.USD')
- self.company_id = self.env.ref('base.main_company')
- self.ProductTemplate = self.env.ref('product_configurator.bmw_2_series')
+ self.ProductConfWizard = self.env['product.configurator.sale']
def test_00_reconfigure_product(self):
- print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
- self.SaleOrderId = self.SaleOrderId
- # test_product = self.env['product.product'].create({
- # 'name': 'Test Product Configuration',
- # 'config_ok': True,
- # })
- # self.SaleOrderLineId.reconfigure_product()
-
-class Purchase(ProductConfiguratorTestCases):
-
- def test_00_action_config_start(self):
- # self.ProductId = self.ProductId.create({
- # 'config_ok': True,
- # 'name': 'Product Configurator',
- # 'product_tmpl_id': self.ProductTemplate.id,
- # })
- # print("self.Product----------------------------------------!", self.ProductId)
- print("###############",purchase_order_id.id)
- purchase_order_id.action_config_start()
- self.configure_product = self._configure_product_nxt_step()
- print("\n\n\n --------purchase_order_id", purchase_order_id.order_line)
- self.config_product.product_variant_ids.reconfigure_product()
- action = self.config_product.product_variant_ids.reconfigure_product()
- res_id = action.get('res_id')
- print("action ================", action, res_id)
-
- self.assertTrue(
- purchase_order_id.id,
- 'order id not exsits'
+ pricelist_id = self.productPricelist.create({
+ 'name': 'Test Pricelist',
+ 'currency_id': self.currency_id.id,
+ })
+ sale_order_id = self.SaleOrderId.create({
+ 'partner_id': self.resPartner.id,
+ 'partner_invoice_id': self.resPartner.id,
+ 'partner_shipping_id': self.resPartner.id,
+ 'pricelist_id': pricelist_id.id
+ })
+ context = dict(
+ default_order_id=sale_order_id.id,
+ wizard_model='product.configurator.sale',
)
- self.assertTrue(
- purchase_order_line_id.id,
- 'order line id not exsits'
+ self.ProductConfWizard = self.env[
+ 'product.configurator.sale'].with_context(context)
+ sale_order_id.action_config_start()
+ self._configure_product_nxt_step()
+ configure_line = sale_order_id.order_line
+ sale_order_id.order_line.reconfigure_product()
+ self.assertEqual(
+ configure_line,
+ sale_order_id.order_line,
+ 'Line Not Equal'
+ )
+ self.assertEqual(
+ configure_line.product_id,
+ sale_order_id.order_line.product_id,
+ 'Product not exsits'
)
-
-
-
-
-
-
- # self.purchaseOrderLine.purchase_order_id.reconfigure_product()
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 4870d54e1..5c7bc0632 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -33,9 +33,8 @@ def _get_order_line_vals(self, product_id):
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
res = super(ProductConfiguratorSale, self).action_config_done()
- if res['res_model'] == self._name:
+ if res.get('res_model') == self._name:
return res
-
line_vals = self._get_order_line_vals(res['res_id'])
# To call onchange explicite as write and create
From 404b8f86690edb2b5aa57471720950d009be24fc Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Wed, 19 Jun 2019 12:10:08 +0530
Subject: [PATCH 38/90] [FIX][T-00513] product_configurator: add new changes
and fix some issue
---
product_configurator_sale/models/sale.py | 2 +-
product_configurator_sale/tests/test_sale.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 24ece2b74..b0b0b7416 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -55,4 +55,4 @@ def reconfigure_product(self):
return self.product_id.product_tmpl_id.create_config_wizard(
model_name=wizard_model, extra_vals=extra_vals
- )
\ No newline at end of file
+ )
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 0d5cdfe64..635ac2cb9 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -25,8 +25,8 @@ def test_00_reconfigure_product(self):
'pricelist_id': pricelist_id.id
})
context = dict(
- default_order_id=sale_order_id.id,
- wizard_model='product.configurator.sale',
+ default_order_id=sale_order_id.id,
+ wizard_model='product.configurator.sale',
)
self.ProductConfWizard = self.env[
From e50e25c78f0c6e362f20194e430ada2c017c1c00 Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Mon, 24 Jun 2019 14:29:41 +0530
Subject: [PATCH 39/90] [IMP][T-00513] product_configurator: add changes for
test-case
---
product_configurator_sale/tests/test_sale.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 635ac2cb9..6189c62f7 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -1,9 +1,8 @@
-from odoo.addons.product_configurator.tests. \
- product_configurator_test_cases import ProductConfiguratorTestCases
+from ..tests.test_product_configurator_test_cases import \
+ ProductConfiguratorTestCases
class SaleOrder(ProductConfiguratorTestCases):
-
def setUp(self):
super(SaleOrder, self).setUp()
self.SaleOrderId = self.env['sale.order']
From 6a30f4d9d6b816ca2bba19527080f4a138bc66c4 Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Mon, 24 Jun 2019 17:31:00 +0530
Subject: [PATCH 40/90] [IMP][T-00513] product_configurator: add changes for
test-case
---
product_configurator_sale/tests/test_sale.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 6189c62f7..cd5d76233 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -1,5 +1,5 @@
-from ..tests.test_product_configurator_test_cases import \
- ProductConfiguratorTestCases
+from odoo.addons.product_configurator.tests.\
+ test_product_configurator_test_cases import ProductConfiguratorTestCases
class SaleOrder(ProductConfiguratorTestCases):
From 258322cd0e251de851d3c91d402d8f8306971be3 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 26 Jun 2019 15:20:17 +0530
Subject: [PATCH 41/90] [FIX][T-00517]fix default filter,add desciption, allow
to keep value_id in attrline blank if custom is ticked
---
product_configurator_sale/data/menu_product.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index 54789807b..fc577a6ec 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -1,8 +1,8 @@
-
- {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
+
+ {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
From acc5b7097ff3fe59037f2319dbebc203576ab791 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 26 Jun 2019 19:50:07 +0530
Subject: [PATCH 42/90] [FIX]add onchange and remove related
---
product_configurator_sale/models/sale.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index b0b0b7416..4b1c4d28f 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -31,10 +31,13 @@ class SaleOrderLine(models.Model):
string="Custom Values"
)
config_ok = fields.Boolean(
- related='product_id.config_ok',
- string="Configurable"
+ string="Configurable",
)
+ @api.onchange('product_id')
+ def onchange_product_id(self):
+ self.config_ok = self.product_id.config_ok
+
@api.multi
def reconfigure_product(self):
""" Creates and launches a product configurator wizard with a linked
From 661bd0531704d64f63753f5d8e4ba5653606deb5 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 27 Jun 2019 18:48:39 +0530
Subject: [PATCH 43/90] [FIX]remove onchange and add readonly in config_ok on
sol/pol/ml
---
product_configurator_sale/models/sale.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 4b1c4d28f..0655f6c77 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -31,13 +31,11 @@ class SaleOrderLine(models.Model):
string="Custom Values"
)
config_ok = fields.Boolean(
+ related="product_id.config_ok",
string="Configurable",
+ readonly=True
)
- @api.onchange('product_id')
- def onchange_product_id(self):
- self.config_ok = self.product_id.config_ok
-
@api.multi
def reconfigure_product(self):
""" Creates and launches a product configurator wizard with a linked
From 8e8fa2f6e659131d5378bb17e725d02ebe64b8ea Mon Sep 17 00:00:00 2001
From: Harshil Trivedi
Date: Fri, 28 Jun 2019 19:38:50 +0530
Subject: [PATCH 44/90] [WIP][00513]product_configurator : write testcase
---
product_configurator_sale/tests/test_sale.py | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index cd5d76233..d4d21c926 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -31,16 +31,10 @@ def test_00_reconfigure_product(self):
self.ProductConfWizard = self.env[
'product.configurator.sale'].with_context(context)
sale_order_id.action_config_start()
- self._configure_product_nxt_step()
- configure_line = sale_order_id.order_line
+ vals = self._configure_product_nxt_step()
sale_order_id.order_line.reconfigure_product()
self.assertEqual(
- configure_line,
- sale_order_id.order_line,
- 'Line Not Equal'
- )
- self.assertEqual(
- configure_line.product_id,
- sale_order_id.order_line.product_id,
+ vals['res_id'],
+ sale_order_id.order_line.product_id.id,
'Product not exsits'
)
From d979aec3efafcba3872992892fad26ab88931b0b Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Sat, 29 Jun 2019 11:32:43 +0530
Subject: [PATCH 45/90] [FIX][T-00513] fix issue test-case issue in
product_configurator_sale,stock,purchase
---
product_configurator_sale/__manifest__.py | 4 +++-
.../demo/res_partner_demo.xml | 18 ++++++++++++++++++
product_configurator_sale/tests/test_sale.py | 12 +++++++-----
3 files changed, 28 insertions(+), 6 deletions(-)
create mode 100644 product_configurator_sale/demo/res_partner_demo.xml
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index f4a08bbaf..8ed5f4579 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -11,7 +11,9 @@
'data/menu_product.xml',
'views/sale_view.xml',
],
- 'demo': [],
+ 'demo': [
+ 'demo/res_partner_demo.xml',
+ ],
'images': [],
'test': [],
'installable': True,
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
new file mode 100644
index 000000000..6058cf5bd
--- /dev/null
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -0,0 +1,18 @@
+
+
+
+ Test Partner
+ company
+
+
+
+ 31 Hong Kong street
+ Taipei
+ 106
+ info@mycompany.com
+ +15 56856895
+ www.mycompany.com
+
+
+
\ No newline at end of file
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index d4d21c926..91dd56b3c 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -8,7 +8,7 @@ def setUp(self):
self.SaleOrderId = self.env['sale.order']
self.productPricelist = self.env['product.pricelist']
self.resPartner = self.env.ref(
- 'product_configurator_purchase.partenr1')
+ 'product_configurator_sale.partenr1')
self.currency_id = self.env.ref('base.USD')
self.ProductConfWizard = self.env['product.configurator.sale']
@@ -31,10 +31,12 @@ def test_00_reconfigure_product(self):
self.ProductConfWizard = self.env[
'product.configurator.sale'].with_context(context)
sale_order_id.action_config_start()
- vals = self._configure_product_nxt_step()
+ self._configure_product_nxt_step()
sale_order_id.order_line.reconfigure_product()
+ product_tmpl = sale_order_id.order_line.product_id.product_tmpl_id
self.assertEqual(
- vals['res_id'],
- sale_order_id.order_line.product_id.id,
- 'Product not exsits'
+ product_tmpl.id,
+ self.config_product.id,
+ 'Error: If product_tmpl not exsits\
+ Method: action_config_start()'
)
From a7116c7a84749456e5e3432a9ca112b1bc90d68b Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Sat, 29 Jun 2019 15:10:38 +0530
Subject: [PATCH 46/90] [IMP][T-00513] demo file remove dealer and land field
---
product_configurator_sale/demo/res_partner_demo.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index 6058cf5bd..4d74adf11 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -3,10 +3,8 @@
Test Partner
company
-
-
31 Hong Kong street
Taipei
106
From 3b71a6cd30db7aef982bacecd905d6faf60eb05e Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 2 Jul 2019 12:49:36 +0530
Subject: [PATCH 47/90] [FIX]fix pylint error
---
product_configurator_sale/demo/res_partner_demo.xml | 2 +-
product_configurator_sale/tests/__init__.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index 4d74adf11..cf6cde179 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -13,4 +13,4 @@
www.mycompany.com
-
\ No newline at end of file
+
diff --git a/product_configurator_sale/tests/__init__.py b/product_configurator_sale/tests/__init__.py
index ff4f31acc..67709762e 100644
--- a/product_configurator_sale/tests/__init__.py
+++ b/product_configurator_sale/tests/__init__.py
@@ -1 +1 @@
-from . import test_sale
\ No newline at end of file
+from . import test_sale
From 74c166085501370410c1ad76f43cf47c77581836 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Fri, 26 Jul 2019 10:58:53 +0530
Subject: [PATCH 48/90] [FIX]change version in manifest file
---
product_configurator_sale/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 8ed5f4579..23c89dcab 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,6 +1,6 @@
{
'name': 'Product Configurator Sale',
- 'version': '11.0.1.0.3',
+ 'version': '12.0.0.0.0',
'category': 'Generic Modules/Sale',
'summary': 'Product configuration interface modules for Sale',
'author': 'Pledra',
From 481044d4e60b6d99f242c587d3611d4ca7919a61 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 26 Dec 2019 20:05:09 +0530
Subject: [PATCH 49/90] [IMP]Add installable False to module from version 12
---
product_configurator_sale/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 23c89dcab..07a69e13d 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -16,6 +16,6 @@
],
'images': [],
'test': [],
- 'installable': True,
+ 'installable': False,
'auto_install': False,
}
From 6d83ccf3c41ebf25580a71f0f73c7f3f88de8556 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 2 Jan 2020 17:00:17 +0530
Subject: [PATCH 50/90] [IMP][T3199]migrate product_configurator_sale to v13
from v12
---
product_configurator_sale/__manifest__.py | 33 ++++-----
.../data/menu_product.xml | 2 -
.../demo/res_partner_demo.xml | 3 +-
product_configurator_sale/models/sale.py | 72 ++++++++++---------
product_configurator_sale/tests/__init__.py | 2 +-
product_configurator_sale/views/sale_view.xml | 4 +-
.../wizard/product_configurator.py | 44 ++++++------
7 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 07a69e13d..3c54fd360 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,21 +1,16 @@
{
- 'name': 'Product Configurator Sale',
- 'version': '12.0.0.0.0',
- 'category': 'Generic Modules/Sale',
- 'summary': 'Product configuration interface modules for Sale',
- 'author': 'Pledra',
- 'license': 'AGPL-3',
- 'website': 'http://www.pledra.com/',
- 'depends': ['sale_management', 'product_configurator'],
- "data": [
- 'data/menu_product.xml',
- 'views/sale_view.xml',
- ],
- 'demo': [
- 'demo/res_partner_demo.xml',
- ],
- 'images': [],
- 'test': [],
- 'installable': False,
- 'auto_install': False,
+ "name": "Product Configurator Sale",
+ "version": "13.0.1.0.0",
+ "category": "Generic Modules/Sale",
+ "summary": "Product configuration interface modules for Sale",
+ "author": "Pledra",
+ "license": "AGPL-3",
+ "website": "http://www.pledra.com/",
+ "depends": ["sale_management", "product_configurator"],
+ "data": ["data/menu_product.xml", "views/sale_view.xml"],
+ "demo": ["demo/res_partner_demo.xml"],
+ "images": [],
+ "test": [],
+ "installable": True,
+ "auto_install": False,
}
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index fc577a6ec..7bffbe9f4 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -1,6 +1,5 @@
-
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
@@ -8,5 +7,4 @@
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
-
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index cf6cde179..2bc27b019 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -3,8 +3,7 @@
Test Partner
company
-
+
31 Hong Kong street
Taipei
106
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 0655f6c77..ce83fe027 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -2,58 +2,66 @@
class SaleOrder(models.Model):
- _inherit = 'sale.order'
+ _inherit = "sale.order"
- @api.multi
def action_config_start(self):
"""Return action to start configuration wizard"""
- return {
- 'type': 'ir.actions.act_window',
- 'res_model': 'product.configurator.sale',
- 'name': "Product Configurator",
- 'view_mode': 'form',
- 'target': 'new',
- 'context': dict(
- self.env.context,
- default_order_id=self.id,
- wizard_model='product.configurator.sale',
- ),
- }
+ configurator_obj = self.env["product.configurator.sale"]
+ ctx = dict(
+ self.env.context,
+ default_order_id=self.id,
+ wizard_model="product.configurator.sale",
+ allow_preset_selection=True,
+ )
+ return configurator_obj.with_context(ctx).get_wizard_action()
class SaleOrderLine(models.Model):
- _inherit = 'sale.order.line'
+ _inherit = "sale.order.line"
custom_value_ids = fields.One2many(
- comodel_name='product.attribute.value.custom',
- inverse_name='product_id',
+ comodel_name="product.attribute.value.custom",
+ inverse_name="product_id",
related="product_id.value_custom_ids",
- string="Custom Values"
+ string="Custom Values",
)
config_ok = fields.Boolean(
- related="product_id.config_ok",
- string="Configurable",
- readonly=True
+ related="product_id.config_ok", string="Configurable", readonly=True
+ )
+ config_session_id = fields.Many2one(
+ comodel_name="product.config.session", string="Config Session"
)
- @api.multi
def reconfigure_product(self):
""" Creates and launches a product configurator wizard with a linked
template and variant in order to re-configure a existing product. It is
esetially a shortcut to pre-fill configuration data of a variant"""
- wizard_model = 'product.configurator.sale'
+ wizard_model = "product.configurator.sale"
extra_vals = {
- 'order_id': self.order_id.id,
- 'order_line_id': self.id,
- 'product_id': self.product_id.id,
+ "order_id": self.order_id.id,
+ "order_line_id": self.id,
+ "product_id": self.product_id.id,
}
-
- self = self.with_context({
- 'default_order_id': self.order_id.id,
- 'default_order_line_id': self.id
- })
-
+ self = self.with_context(
+ {
+ "default_order_id": self.order_id.id,
+ "default_order_line_id": self.id,
+ }
+ )
return self.product_id.product_tmpl_id.create_config_wizard(
model_name=wizard_model, extra_vals=extra_vals
)
+
+ @api.onchange("product_uom", "product_uom_qty")
+ def product_uom_change(self):
+ if self.config_session_id:
+ account_tax_obj = self.env["account.tax"]
+ self.price_unit = account_tax_obj._fix_tax_included_price_company(
+ self.config_session_id.price,
+ self.product_id.taxes_id,
+ self.tax_id,
+ self.company_id,
+ )
+ else:
+ super(SaleOrderLine, self).product_uom_change()
diff --git a/product_configurator_sale/tests/__init__.py b/product_configurator_sale/tests/__init__.py
index 67709762e..7be37a704 100644
--- a/product_configurator_sale/tests/__init__.py
+++ b/product_configurator_sale/tests/__init__.py
@@ -1 +1 @@
-from . import test_sale
+# from . import test_sale
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 7732966a5..2ad3d7016 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -6,7 +6,7 @@
sale.order
-
+
+
@@ -35,6 +36,7 @@
('state','not in',['draft','sent'])
]
}"/>
+
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 5c7bc0632..124d13095 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -3,54 +3,52 @@
class ProductConfiguratorSale(models.TransientModel):
- _name = 'product.configurator.sale'
- _inherit = 'product.configurator'
+ _name = "product.configurator.sale"
+ _inherit = "product.configurator"
+ _description = "Product Configurator Sale"
order_id = fields.Many2one(
- comodel_name='sale.order',
- required=True,
- readonly=True
+ comodel_name="sale.order", required=True, readonly=True
)
order_line_id = fields.Many2one(
- comodel_name='sale.order.line',
- readonly=True
+ comodel_name="sale.order.line", readonly=True
)
def _get_order_line_vals(self, product_id):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
- line_vals = {
- 'product_id': product_id,
- 'order_id': self.order_id.id
- }
-
+ line_vals = {"product_id": product_id, "order_id": self.order_id.id}
extra_vals = self.order_line_id._prepare_add_missing_fields(line_vals)
line_vals.update(extra_vals)
+ line_vals.update(
+ {
+ "config_session_id": self.config_session_id.id,
+ "price_unit": self.config_session_id.price,
+ }
+ )
return line_vals
- @api.multi
def action_config_done(self):
"""Parse values and execute final code before closing the wizard"""
res = super(ProductConfiguratorSale, self).action_config_done()
- if res.get('res_model') == self._name:
+ if res.get("res_model") == self._name:
return res
- line_vals = self._get_order_line_vals(res['res_id'])
+ line_vals = self._get_order_line_vals(res["res_id"])
- # To call onchange explicite as write and create
+ # Call onchange explicite as write and create
# will not trigger onchange automatically
- order_line_obj = self.env['sale.order.line']
+ order_line_obj = self.env["sale.order.line"]
specs = order_line_obj._onchange_spec()
- updates = order_line_obj.onchange(line_vals, ['product_id'], specs)
- values = updates.get('value', {})
+ updates = order_line_obj.onchange(line_vals, ["product_id"], specs)
+ values = updates.get("value", {})
for name, val in values.items():
if isinstance(val, tuple):
values[name] = val[0]
- line_vals.update(values)
+ values.update(line_vals)
if self.order_line_id:
- self.order_line_id.write(line_vals)
+ self.order_line_id.write(values)
else:
- self.order_id.write({'order_line': [(0, 0, line_vals)]})
-
+ self.order_id.write({"order_line": [(0, 0, values)]})
return
From 1aceec876f145a14051ba93a30e855469ac051e3 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 2 Jan 2020 20:23:04 +0530
Subject: [PATCH 51/90] [IMP][T3199]set sol name from meko template
---
product_configurator_sale/demo/res_partner_demo.xml | 2 +-
product_configurator_sale/tests/test_sale.py | 2 +-
product_configurator_sale/wizard/product_configurator.py | 3 ++-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index 2bc27b019..8ce4a6a60 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -1,6 +1,6 @@
-
+
Test Partner
company
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 91dd56b3c..344178c94 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -8,7 +8,7 @@ def setUp(self):
self.SaleOrderId = self.env['sale.order']
self.productPricelist = self.env['product.pricelist']
self.resPartner = self.env.ref(
- 'product_configurator_sale.partenr1')
+ 'product_configurator_sale.partenr_sale_1')
self.currency_id = self.env.ref('base.USD')
self.ProductConfWizard = self.env['product.configurator.sale']
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 124d13095..3f72a1248 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -17,7 +17,7 @@ class ProductConfiguratorSale(models.TransientModel):
def _get_order_line_vals(self, product_id):
""" Hook to allow custom line values to be put on the newly
created or edited lines."""
-
+ product = self.env["product.product"].browse(product_id)
line_vals = {"product_id": product_id, "order_id": self.order_id.id}
extra_vals = self.order_line_id._prepare_add_missing_fields(line_vals)
line_vals.update(extra_vals)
@@ -25,6 +25,7 @@ def _get_order_line_vals(self, product_id):
{
"config_session_id": self.config_session_id.id,
"price_unit": self.config_session_id.price,
+ "name": product._get_mako_tmpl_name(),
}
)
return line_vals
From bea183635f21e4e1911d9bca124482a7c06536fa Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Sat, 4 Jan 2020 15:26:26 +0530
Subject: [PATCH 52/90] [IMP][T3199]use helper methods to call onchage
---
.../wizard/product_configurator.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 3f72a1248..4b8391444 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -35,17 +35,17 @@ def action_config_done(self):
res = super(ProductConfiguratorSale, self).action_config_done()
if res.get("res_model") == self._name:
return res
+ model_name = "sale.order.line"
line_vals = self._get_order_line_vals(res["res_id"])
# Call onchange explicite as write and create
# will not trigger onchange automatically
- order_line_obj = self.env["sale.order.line"]
- specs = order_line_obj._onchange_spec()
+ order_line_obj = self.env[model_name]
+ cfg_session = self.config_session_id
+ specs = cfg_session.get_onchange_specifications(model=model_name)
updates = order_line_obj.onchange(line_vals, ["product_id"], specs)
values = updates.get("value", {})
- for name, val in values.items():
- if isinstance(val, tuple):
- values[name] = val[0]
+ values = cfg_session.get_vals_to_write(values=values, model=model_name)
values.update(line_vals)
if self.order_line_id:
From 9c51ed3085f4d063cef6eeca38bd6c97f3b79e3b Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Sat, 4 Jan 2020 19:12:03 +0530
Subject: [PATCH 53/90] [IMP][T3199] make custom_value_ids related to config
session instead of variant
---
product_configurator_sale/models/sale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index ce83fe027..acd143655 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -22,7 +22,7 @@ class SaleOrderLine(models.Model):
custom_value_ids = fields.One2many(
comodel_name="product.attribute.value.custom",
inverse_name="product_id",
- related="product_id.value_custom_ids",
+ related="config_session_id.value_custom_ids",
string="Custom Values",
)
config_ok = fields.Boolean(
From 63fa79fd9db2ed58b749b48ed183faf9f85af52f Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 6 Jan 2020 12:06:12 +0530
Subject: [PATCH 54/90] [FIX][3199]fix field name custom_value_ids
---
product_configurator_sale/models/sale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index acd143655..af397634f 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -22,7 +22,7 @@ class SaleOrderLine(models.Model):
custom_value_ids = fields.One2many(
comodel_name="product.attribute.value.custom",
inverse_name="product_id",
- related="config_session_id.value_custom_ids",
+ related="config_session_id.custom_value_ids",
string="Custom Values",
)
config_ok = fields.Boolean(
From 1fe2ab49166f51ad14024b42ffd9087698514c35 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 6 Jan 2020 12:26:19 +0530
Subject: [PATCH 55/90] [FIX][3199]fix comodel_name in name custom_value_ids
---
product_configurator_sale/models/sale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index af397634f..9eb0ae74d 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -20,7 +20,7 @@ class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
custom_value_ids = fields.One2many(
- comodel_name="product.attribute.value.custom",
+ comodel_name="product.config.session.custom.value",
inverse_name="product_id",
related="config_session_id.custom_value_ids",
string="Custom Values",
From d26afe6d480daa7d4f94e1dd8a8c61d96d456f99 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 28 Jan 2020 17:53:36 +0530
Subject: [PATCH 56/90] [FIX]fix flake8
---
product_configurator_sale/wizard/product_configurator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 4b8391444..ebdf962f5 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,4 +1,4 @@
-from odoo import api, fields, models
+from odoo import fields, models
class ProductConfiguratorSale(models.TransientModel):
From 4e19e29bc72a94282bebf84f4c889c38436f0c1a Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 4 Nov 2020 23:21:53 +0530
Subject: [PATCH 57/90] [FIX]fix custom value ids
---
product_configurator_sale/models/sale.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 9eb0ae74d..c0853f569 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -21,7 +21,7 @@ class SaleOrderLine(models.Model):
custom_value_ids = fields.One2many(
comodel_name="product.config.session.custom.value",
- inverse_name="product_id",
+ inverse_name="cfg_session_id",
related="config_session_id.custom_value_ids",
string="Custom Values",
)
From bf9f1afb53ceae01d9878336865ba1aef756e54d Mon Sep 17 00:00:00 2001
From: Chandresh Thakkar
Date: Thu, 1 Apr 2021 19:30:35 +0530
Subject: [PATCH 58/90] [IMP] pre-commit
---
product_configurator_sale/__manifest__.py | 2 +-
.../data/menu_product.xml | 10 ++-
.../demo/res_partner_demo.xml | 7 +-
product_configurator_sale/models/sale.py | 2 +-
product_configurator_sale/tests/test_sale.py | 51 +++++++-------
product_configurator_sale/views/sale_view.xml | 68 +++++++++++--------
.../wizard/product_configurator.py | 10 +--
7 files changed, 86 insertions(+), 64 deletions(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 3c54fd360..25524b4d0 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -5,7 +5,7 @@
"summary": "Product configuration interface modules for Sale",
"author": "Pledra",
"license": "AGPL-3",
- "website": "http://www.pledra.com/",
+ "website": "https://github.com/OCA/product-configurator",
"depends": ["sale_management", "product_configurator"],
"data": ["data/menu_product.xml", "views/sale_view.xml"],
"demo": ["demo/res_partner_demo.xml"],
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index 7bffbe9f4..df4c520b3 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -1,10 +1,14 @@
-
+
- {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
+ {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
- {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
+ {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index 8ce4a6a60..7e7182884 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -1,9 +1,12 @@
-
+
Test Partner
company
-
+
31 Hong Kong street
Taipei
106
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index c0853f569..05c55a6ab 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -33,7 +33,7 @@ class SaleOrderLine(models.Model):
)
def reconfigure_product(self):
- """ Creates and launches a product configurator wizard with a linked
+ """Creates and launches a product configurator wizard with a linked
template and variant in order to re-configure a existing product. It is
esetially a shortcut to pre-fill configuration data of a variant"""
wizard_model = "product.configurator.sale"
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 344178c94..5b4130296 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -1,35 +1,40 @@
-from odoo.addons.product_configurator.tests.\
- test_product_configurator_test_cases import ProductConfiguratorTestCases
+from odoo.addons.product_configurator.tests.test_product_configurator_test_cases import (
+ ProductConfiguratorTestCases,
+)
class SaleOrder(ProductConfiguratorTestCases):
def setUp(self):
super(SaleOrder, self).setUp()
- self.SaleOrderId = self.env['sale.order']
- self.productPricelist = self.env['product.pricelist']
- self.resPartner = self.env.ref(
- 'product_configurator_sale.partenr_sale_1')
- self.currency_id = self.env.ref('base.USD')
- self.ProductConfWizard = self.env['product.configurator.sale']
+ self.SaleOrderId = self.env["sale.order"]
+ self.productPricelist = self.env["product.pricelist"]
+ self.resPartner = self.env.ref("product_configurator_sale.partenr_sale_1")
+ self.currency_id = self.env.ref("base.USD")
+ self.ProductConfWizard = self.env["product.configurator.sale"]
def test_00_reconfigure_product(self):
- pricelist_id = self.productPricelist.create({
- 'name': 'Test Pricelist',
- 'currency_id': self.currency_id.id,
- })
- sale_order_id = self.SaleOrderId.create({
- 'partner_id': self.resPartner.id,
- 'partner_invoice_id': self.resPartner.id,
- 'partner_shipping_id': self.resPartner.id,
- 'pricelist_id': pricelist_id.id
- })
+ pricelist_id = self.productPricelist.create(
+ {
+ "name": "Test Pricelist",
+ "currency_id": self.currency_id.id,
+ }
+ )
+ sale_order_id = self.SaleOrderId.create(
+ {
+ "partner_id": self.resPartner.id,
+ "partner_invoice_id": self.resPartner.id,
+ "partner_shipping_id": self.resPartner.id,
+ "pricelist_id": pricelist_id.id,
+ }
+ )
context = dict(
default_order_id=sale_order_id.id,
- wizard_model='product.configurator.sale',
+ wizard_model="product.configurator.sale",
)
- self.ProductConfWizard = self.env[
- 'product.configurator.sale'].with_context(context)
+ self.ProductConfWizard = self.env["product.configurator.sale"].with_context(
+ context
+ )
sale_order_id.action_config_start()
self._configure_product_nxt_step()
sale_order_id.order_line.reconfigure_product()
@@ -37,6 +42,6 @@ def test_00_reconfigure_product(self):
self.assertEqual(
product_tmpl.id,
self.config_product.id,
- 'Error: If product_tmpl not exsits\
- Method: action_config_start()'
+ "Error: If product_tmpl not exsits\
+ Method: action_config_start()",
)
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 2ad3d7016..e6547de69 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -1,52 +1,66 @@
-
+
sale.order.form.config
sale.order
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
-
+ }"
+ />
+
-
+
-
+
-
-
-
+
+
+
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index ebdf962f5..00ba3b718 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -7,15 +7,11 @@ class ProductConfiguratorSale(models.TransientModel):
_inherit = "product.configurator"
_description = "Product Configurator Sale"
- order_id = fields.Many2one(
- comodel_name="sale.order", required=True, readonly=True
- )
- order_line_id = fields.Many2one(
- comodel_name="sale.order.line", readonly=True
- )
+ order_id = fields.Many2one(comodel_name="sale.order", required=True, readonly=True)
+ order_line_id = fields.Many2one(comodel_name="sale.order.line", readonly=True)
def _get_order_line_vals(self, product_id):
- """ Hook to allow custom line values to be put on the newly
+ """Hook to allow custom line values to be put on the newly
created or edited lines."""
product = self.env["product.product"].browse(product_id)
line_vals = {"product_id": product_id, "order_id": self.order_id.id}
From 4b371ba5f60d9d3b0f558fdc06584adf77a97789 Mon Sep 17 00:00:00 2001
From: Chandresh Thakkar OSI
Date: Wed, 7 Apr 2021 15:35:05 +0530
Subject: [PATCH 59/90] [MIG] Modified the code as per v14.
---
product_configurator_sale/__init__.py | 2 ++
product_configurator_sale/__manifest__.py | 15 ++++++---
.../data/menu_product.xml | 5 ++-
.../demo/res_partner_demo.xml | 3 +-
product_configurator_sale/models/__init__.py | 3 ++
product_configurator_sale/models/sale.py | 3 ++
.../security/ir.model.access.csv | 3 ++
product_configurator_sale/tests/test_sale.py | 6 ++--
product_configurator_sale/views/sale_view.xml | 33 ++++++-------------
product_configurator_sale/wizard/__init__.py | 3 ++
.../wizard/product_configurator.py | 3 ++
11 files changed, 43 insertions(+), 36 deletions(-)
create mode 100644 product_configurator_sale/security/ir.model.access.csv
diff --git a/product_configurator_sale/__init__.py b/product_configurator_sale/__init__.py
index 9b4296142..e1956e88e 100644
--- a/product_configurator_sale/__init__.py
+++ b/product_configurator_sale/__init__.py
@@ -1,2 +1,4 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models
from . import wizard
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 25524b4d0..608c9bbc7 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -1,16 +1,21 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "13.0.1.0.0",
+ "version": "14.0.1.0.0",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
- "author": "Pledra",
+ "author": "Pledra, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/product-configurator",
"depends": ["sale_management", "product_configurator"],
- "data": ["data/menu_product.xml", "views/sale_view.xml"],
+ "data": [
+ "security/ir.model.access.csv",
+ "data/menu_product.xml",
+ "views/sale_view.xml",
+ ],
"demo": ["demo/res_partner_demo.xml"],
- "images": [],
- "test": [],
"installable": True,
"auto_install": False,
+ "development_status": "Beta",
}
diff --git a/product_configurator_sale/data/menu_product.xml b/product_configurator_sale/data/menu_product.xml
index df4c520b3..8475ee408 100644
--- a/product_configurator_sale/data/menu_product.xml
+++ b/product_configurator_sale/data/menu_product.xml
@@ -3,12 +3,11 @@
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
+ >{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1}
-
{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
+ >{"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1}
diff --git a/product_configurator_sale/demo/res_partner_demo.xml b/product_configurator_sale/demo/res_partner_demo.xml
index 7e7182884..c792282c8 100644
--- a/product_configurator_sale/demo/res_partner_demo.xml
+++ b/product_configurator_sale/demo/res_partner_demo.xml
@@ -4,8 +4,8 @@
Test Partner
company
31 Hong Kong street
Taipei
@@ -14,5 +14,4 @@
+15 56856895
www.mycompany.com
-
diff --git a/product_configurator_sale/models/__init__.py b/product_configurator_sale/models/__init__.py
index 8a0dc04e1..b2e71ae34 100644
--- a/product_configurator_sale/models/__init__.py
+++ b/product_configurator_sale/models/__init__.py
@@ -1 +1,4 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
from . import sale
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 05c55a6ab..69bd9eec2 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -1,3 +1,6 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
from odoo import api, fields, models
diff --git a/product_configurator_sale/security/ir.model.access.csv b/product_configurator_sale/security/ir.model.access.csv
new file mode 100644
index 000000000..443de5193
--- /dev/null
+++ b/product_configurator_sale/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_product_configurator_sale,product_configurator_sale,model_product_configurator_sale,base.group_user,1,0,0,0
+access_product_configurator_sale_manager,product_configurator_sale,model_product_configurator_sale,product_configurator.group_product_configurator_manager,1,1,1,1
diff --git a/product_configurator_sale/tests/test_sale.py b/product_configurator_sale/tests/test_sale.py
index 5b4130296..b83e972b2 100644
--- a/product_configurator_sale/tests/test_sale.py
+++ b/product_configurator_sale/tests/test_sale.py
@@ -1,9 +1,9 @@
-from odoo.addons.product_configurator.tests.test_product_configurator_test_cases import (
- ProductConfiguratorTestCases,
+from odoo.addons.product_configurator.tests import (
+ test_product_configurator_test_cases as TC,
)
-class SaleOrder(ProductConfiguratorTestCases):
+class SaleOrder(TC.ProductConfiguratorTestCases):
def setUp(self):
super(SaleOrder, self).setUp()
self.SaleOrderId = self.env["sale.order"]
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index e6547de69..7b73cdd77 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -1,55 +1,44 @@
-
sale.order.form.config
sale.order
-
-
-
+
-
-
+
-
+
-
-
-
diff --git a/product_configurator_sale/wizard/__init__.py b/product_configurator_sale/wizard/__init__.py
index 3c76586e5..5e721000a 100644
--- a/product_configurator_sale/wizard/__init__.py
+++ b/product_configurator_sale/wizard/__init__.py
@@ -1 +1,4 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
from . import product_configurator
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 00ba3b718..3cfb90f74 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,3 +1,6 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
from odoo import fields, models
From 36f30be13f93ac2aafefa85f990c37529ca46336 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Tue, 27 Apr 2021 20:55:04 +0100
Subject: [PATCH 60/90] [IMP] product_configurator_sale: add OCA readme
---
product_configurator_sale/readme/DESCRIPTION.rst | 1 +
1 file changed, 1 insertion(+)
create mode 100644 product_configurator_sale/readme/DESCRIPTION.rst
diff --git a/product_configurator_sale/readme/DESCRIPTION.rst b/product_configurator_sale/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..e401a3b11
--- /dev/null
+++ b/product_configurator_sale/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+Product Configurator wizard available on Sales Orders.
From 1a444bf2c2255cefa6ebb0b157a6352a8c397f46 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Tue, 4 May 2021 20:04:02 +0100
Subject: [PATCH 61/90] [FIX] product_configurator_sale: fix log warnings on
install
---
product_configurator_sale/README.rst | 66 ++-
.../i18n/product_configurator_sale.pot | 195 +++++++++
product_configurator_sale/models/sale.py | 2 +-
.../static/description/index.html | 412 ++++++++++++++++++
product_configurator_sale/views/sale_view.xml | 1 +
5 files changed, 673 insertions(+), 3 deletions(-)
create mode 100644 product_configurator_sale/i18n/product_configurator_sale.pot
create mode 100644 product_configurator_sale/static/description/index.html
diff --git a/product_configurator_sale/README.rst b/product_configurator_sale/README.rst
index 11b05fc63..7bf837ddc 100644
--- a/product_configurator_sale/README.rst
+++ b/product_configurator_sale/README.rst
@@ -1,3 +1,65 @@
-===========================
+=========================
Product Configurator Sale
-===========================
+=========================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--configurator-lightgray.png?logo=github
+ :target: https://github.com/OCA/product-configurator/tree/14.0/product_configurator_sale
+ :alt: OCA/product-configurator
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/product-configurator-14-0/product-configurator-14-0-product_configurator_sale
+ :alt: Translate me on Weblate
+
+|badge1| |badge2| |badge3| |badge4|
+
+Product Configurator wizard available on Sales Orders.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Pledra
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/product-configurator `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/product_configurator_sale/i18n/product_configurator_sale.pot b/product_configurator_sale/i18n/product_configurator_sale.pot
new file mode 100644
index 000000000..59b7ee9fa
--- /dev/null
+++ b/product_configurator_sale/i18n/product_configurator_sale.pot
@@ -0,0 +1,195 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * product_configurator_sale
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \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: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids
+msgid "Attributes"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id
+msgid "Config Session"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok
+msgid "Configurable"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id
+msgid "Configurable Template"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id
+msgid "Configuration Session"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name
+msgid "Configuration Session Number"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name
+msgid "Configuration Step"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step
+msgid "Configuration Step ID"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids
+msgid "Configuration Steps"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids
+msgid "Configurator Custom Values"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config
+msgid "Configure Product"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order__display_name
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order__id
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__id
+msgid "ID"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order____last_update
+#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id
+msgid "Order"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id
+msgid "Order Line"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id
+msgid "Preset"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price
+msgid "Price"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale
+msgid "Product Configurator Sale"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img
+msgid "Product Img"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id
+msgid "Product Variant"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config
+msgid "Reconfigure"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model,name:product_configurator_sale.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model,name:product_configurator_sale.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id
+msgid "Set only when re-configuring a existing variant"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state
+msgid "State"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id
+msgid "User"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids
+msgid "Value"
+msgstr ""
+
+#. module: product_configurator_sale
+#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight
+msgid "Weight"
+msgstr ""
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 69bd9eec2..7e857b01e 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -26,7 +26,7 @@ class SaleOrderLine(models.Model):
comodel_name="product.config.session.custom.value",
inverse_name="cfg_session_id",
related="config_session_id.custom_value_ids",
- string="Custom Values",
+ string="Configurator Custom Values",
)
config_ok = fields.Boolean(
related="product_id.config_ok", string="Configurable", readonly=True
diff --git a/product_configurator_sale/static/description/index.html b/product_configurator_sale/static/description/index.html
new file mode 100644
index 000000000..ba94b4c96
--- /dev/null
+++ b/product_configurator_sale/static/description/index.html
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+Product Configurator Sale
+
+
+
+
+
Product Configurator Sale
+
+
+
+
Product Configurator wizard available on Sales Orders.
+
Table of contents
+
+
+
+
Bugs are tracked on GitHub Issues .
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback .
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/product-configurator project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
+
+
+
+
+
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 7b73cdd77..9a0df9778 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -36,6 +36,7 @@
icon="fa-cogs"
name="reconfigure_product"
type="object"
+ title="Reconfigure"
/>
From 1dc97047e2ef567b3cfb3e8a88ad4530a891fc19 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 15 Jun 2021 20:16:04 +0300
Subject: [PATCH 62/90] Add pcatinean as maintainer for all modules
---
product_configurator_sale/README.rst | 8 ++++++++
product_configurator_sale/__manifest__.py | 1 +
product_configurator_sale/static/description/index.html | 2 ++
3 files changed, 11 insertions(+)
diff --git a/product_configurator_sale/README.rst b/product_configurator_sale/README.rst
index 7bf837ddc..30c63d65e 100644
--- a/product_configurator_sale/README.rst
+++ b/product_configurator_sale/README.rst
@@ -60,6 +60,14 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
+.. |maintainer-pcatinean| image:: https://github.com/pcatinean.png?size=40px
+ :target: https://github.com/pcatinean
+ :alt: pcatinean
+
+Current `maintainer `__:
+
+|maintainer-pcatinean|
+
This module is part of the `OCA/product-configurator `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 608c9bbc7..40bb69800 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -18,4 +18,5 @@
"installable": True,
"auto_install": False,
"development_status": "Beta",
+ "maintainers": ["pcatinean"],
}
diff --git a/product_configurator_sale/static/description/index.html b/product_configurator_sale/static/description/index.html
index ba94b4c96..dd23c161b 100644
--- a/product_configurator_sale/static/description/index.html
+++ b/product_configurator_sale/static/description/index.html
@@ -403,6 +403,8 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
+Current maintainer :
+
This module is part of the OCA/product-configurator project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From fe253963c3bbdbde2e90c8db43d8cbd6d1edf217 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Thu, 23 Sep 2021 19:02:05 +0100
Subject: [PATCH 63/90] [FIX] product_configurator_sale: avoid other module
inheritance issues
When product configurator is installed, some other modules then
fail to install. It seems that it happens when they are also extending
sales order lines, to add columns to the nested tree, after the "name"
field.
This is probably a subtle bug in the Odoo core, but the pragmatic
solution seems to simplify the Product Configurator sales order form
extensions.
---
product_configurator_sale/__manifest__.py | 2 +-
product_configurator_sale/views/sale_view.xml | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 40bb69800..b714abb79 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.1.0",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
"author": "Pledra, Odoo Community Association (OCA)",
diff --git a/product_configurator_sale/views/sale_view.xml b/product_configurator_sale/views/sale_view.xml
index 9a0df9778..a0e301840 100644
--- a/product_configurator_sale/views/sale_view.xml
+++ b/product_configurator_sale/views/sale_view.xml
@@ -40,6 +40,12 @@
/>
+
From c09e17fbcdd5ace9e42a4da3281825c22f5f27c8 Mon Sep 17 00:00:00 2001
From: Patrick Wilson <36892066+patrickrwilson@users.noreply.github.com>
Date: Tue, 19 Oct 2021 09:19:01 -0400
Subject: [PATCH 64/90] [IMP] product_configurator_sale (Add customer lead)
---
product_configurator_sale/__manifest__.py | 2 +-
product_configurator_sale/wizard/product_configurator.py | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index b714abb79..88a65b420 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "14.0.1.1.0",
+ "version": "14.0.1.1.1",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
"author": "Pledra, Odoo Community Association (OCA)",
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 3cfb90f74..2c65d89b1 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -25,6 +25,7 @@ def _get_order_line_vals(self, product_id):
"config_session_id": self.config_session_id.id,
"price_unit": self.config_session_id.price,
"name": product._get_mako_tmpl_name(),
+ "customer_lead": product.sale_delay,
}
)
return line_vals
From 7b08cf61c55f7c98ed222525f77da8307d371fb3 Mon Sep 17 00:00:00 2001
From: PRV
Date: Mon, 25 Oct 2021 22:18:56 +0530
Subject: [PATCH 65/90] [WIP][T-01839]product_configurator: remove price
calculation from session and also get value from
get_attribute_value_extra_prices
---
product_configurator_sale/wizard/product_configurator.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 2c65d89b1..7f8295c0b 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -23,7 +23,6 @@ def _get_order_line_vals(self, product_id):
line_vals.update(
{
"config_session_id": self.config_session_id.id,
- "price_unit": self.config_session_id.price,
"name": product._get_mako_tmpl_name(),
"customer_lead": product.sale_delay,
}
From 354bb85d30e3306cf14c6481afec1e6c6f276c58 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Fri, 10 Dec 2021 12:13:26 +0000
Subject: [PATCH 66/90] [REF] *: fix PCatinean maintainer
---
product_configurator_sale/README.rst | 8 ++++----
product_configurator_sale/__manifest__.py | 4 ++--
product_configurator_sale/static/description/index.html | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/product_configurator_sale/README.rst b/product_configurator_sale/README.rst
index 30c63d65e..7ac97f80d 100644
--- a/product_configurator_sale/README.rst
+++ b/product_configurator_sale/README.rst
@@ -60,13 +60,13 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-.. |maintainer-pcatinean| image:: https://github.com/pcatinean.png?size=40px
- :target: https://github.com/pcatinean
- :alt: pcatinean
+.. |maintainer-PCatinean| image:: https://github.com/PCatinean.png?size=40px
+ :target: https://github.com/PCatinean
+ :alt: PCatinean
Current `maintainer `__:
-|maintainer-pcatinean|
+|maintainer-PCatinean|
This module is part of the `OCA/product-configurator `_ project on GitHub.
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 88a65b420..7af6719c8 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "14.0.1.1.1",
+ "version": "14.0.1.1.2",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
"author": "Pledra, Odoo Community Association (OCA)",
@@ -18,5 +18,5 @@
"installable": True,
"auto_install": False,
"development_status": "Beta",
- "maintainers": ["pcatinean"],
+ "maintainers": ["PCatinean"],
}
diff --git a/product_configurator_sale/static/description/index.html b/product_configurator_sale/static/description/index.html
index dd23c161b..0a128b249 100644
--- a/product_configurator_sale/static/description/index.html
+++ b/product_configurator_sale/static/description/index.html
@@ -404,7 +404,7 @@
mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainer :
-
+
This module is part of the OCA/product-configurator project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From 6445d91fc97bd0d57957d0e0c2f8c9ab5edebc05 Mon Sep 17 00:00:00 2001
From: Patrick Wilson <36892066+patrickrwilson@users.noreply.github.com>
Date: Tue, 8 Feb 2022 10:48:31 -0500
Subject: [PATCH 67/90] [14.0][FIX] product_configurator_sale (Custom Values on
Reconfigure)
pre-commit
---
product_configurator_sale/__manifest__.py | 2 +-
.../wizard/product_configurator.py | 32 ++++++++++++++++++-
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index 7af6719c8..dedc93f21 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "14.0.1.1.2",
+ "version": "14.0.1.1.3",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
"author": "Pledra, Odoo Community Association (OCA)",
diff --git a/product_configurator_sale/wizard/product_configurator.py b/product_configurator_sale/wizard/product_configurator.py
index 7f8295c0b..4f6ff202d 100644
--- a/product_configurator_sale/wizard/product_configurator.py
+++ b/product_configurator_sale/wizard/product_configurator.py
@@ -1,7 +1,7 @@
# Copyright (C) 2021 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo import fields, models
+from odoo import api, fields, models
class ProductConfiguratorSale(models.TransientModel):
@@ -52,3 +52,33 @@ def action_config_done(self):
else:
self.order_id.write({"order_line": [(0, 0, values)]})
return
+
+ @api.model
+ def create(self, vals):
+ if self.env.context.get("default_order_line_id", False):
+ sale_line = self.env["sale.order.line"].browse(
+ self.env.context["default_order_line_id"]
+ )
+ if sale_line.custom_value_ids:
+ vals["custom_value_ids"] = self._get_custom_values(
+ sale_line.config_session_id
+ )
+ res = super(ProductConfiguratorSale, self).create(vals)
+ return res
+
+ def _get_custom_values(self, session):
+ custom_values = [(5,)] + [
+ (
+ 0,
+ 0,
+ {
+ "attribute_id": value_custom.attribute_id.id,
+ "value": value_custom.value,
+ "attachment_ids": [
+ (4, attach.id) for attach in value_custom.attachment_ids
+ ],
+ },
+ )
+ for value_custom in session.custom_value_ids
+ ]
+ return custom_values
From 517eecd7665bb0b3025e70b1dd67b050c30e3f48 Mon Sep 17 00:00:00 2001
From: Benjamin Henquet
Date: Tue, 25 Apr 2023 11:46:14 +0200
Subject: [PATCH 68/90] [14.0] [FIX] Fix context erasement
---
product_configurator_sale/README.rst | 12 +++++--
product_configurator_sale/__manifest__.py | 2 +-
product_configurator_sale/models/sale.py | 6 ++--
.../static/description/index.html | 32 ++++++++++---------
4 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/product_configurator_sale/README.rst b/product_configurator_sale/README.rst
index 7ac97f80d..4cdd78cd9 100644
--- a/product_configurator_sale/README.rst
+++ b/product_configurator_sale/README.rst
@@ -2,10 +2,13 @@
Product Configurator Sale
=========================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:2a027575c211693ed3abf41ce8b330ac9c76a6431a4175a21b77b26cff61350a
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -19,8 +22,11 @@ Product Configurator Sale
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/product-configurator-14-0/product-configurator-14-0-product_configurator_sale
:alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/product-configurator&target_branch=14.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Product Configurator wizard available on Sales Orders.
@@ -34,7 +40,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback `_.
Do not contact contributors directly about support or help with technical issues.
diff --git a/product_configurator_sale/__manifest__.py b/product_configurator_sale/__manifest__.py
index dedc93f21..d7c8733be 100644
--- a/product_configurator_sale/__manifest__.py
+++ b/product_configurator_sale/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Product Configurator Sale",
- "version": "14.0.1.1.3",
+ "version": "14.0.1.2.0",
"category": "Generic Modules/Sale",
"summary": "Product configuration interface modules for Sale",
"author": "Pledra, Odoo Community Association (OCA)",
diff --git a/product_configurator_sale/models/sale.py b/product_configurator_sale/models/sale.py
index 7e857b01e..4f3b7cbcc 100644
--- a/product_configurator_sale/models/sale.py
+++ b/product_configurator_sale/models/sale.py
@@ -47,10 +47,8 @@ def reconfigure_product(self):
"product_id": self.product_id.id,
}
self = self.with_context(
- {
- "default_order_id": self.order_id.id,
- "default_order_line_id": self.id,
- }
+ default_order_id=self.order_id.id,
+ default_order_line_id=self.id,
)
return self.product_id.product_tmpl_id.create_config_wizard(
model_name=wizard_model, extra_vals=extra_vals
diff --git a/product_configurator_sale/static/description/index.html b/product_configurator_sale/static/description/index.html
index 0a128b249..46ef0551d 100644
--- a/product_configurator_sale/static/description/index.html
+++ b/product_configurator_sale/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Product Configurator Sale