From 74775b5050176de94bb1a738e0bd93927c639f20 Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Sat, 20 May 2017 13:48:53 +0530
Subject: [PATCH 01/85] 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 a175ba867707c30215a988f5be7f7090b6c2259b Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Sat, 20 May 2017 16:03:44 +0530
Subject: [PATCH 02/85] 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 26f68cf815a7cfa78673e4607e50306f7f3a9f5d Mon Sep 17 00:00:00 2001
From: rsh-pledra
Date: Mon, 22 May 2017 20:35:44 +0530
Subject: [PATCH 03/85] 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/85] [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 840ba70bc8717d7ef53508e764241d00ea80f71a Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 25 May 2017 12:07:36 +0200
Subject: [PATCH 05/85] 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 9818352d16b41de1d604067959574cf8b24fdc3b Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 25 May 2017 14:58:25 +0200
Subject: [PATCH 06/85] 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 1eb486f823afb95b51da75ba885ea3da527cbe63 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 26 May 2017 17:38:47 +0200
Subject: [PATCH 07/85] 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 ce2a4e176d3aaae2bacbccc420b2cf3a41e304a5 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Sun, 11 Jun 2017 22:03:16 +0300
Subject: [PATCH 08/85] 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 2a4f36f0898626c556b7951c6d1cf7e30c6b5d19 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 26 Jun 2017 17:27:43 +0300
Subject: [PATCH 09/85] 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 a1c49c2e8396206f052515bce67f5381674b15ea Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 20 Feb 2018 19:44:57 +0100
Subject: [PATCH 10/85] 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 0b1a9dd2580e07da40660a8d48d87e8c6d0d2b48 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 14 May 2018 13:01:18 +0200
Subject: [PATCH 11/85] 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 7bb00648d71c29dd7e3f43ac1003ddddc83d15db Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 14 May 2018 13:22:51 +0200
Subject: [PATCH 12/85] [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 e93bd7496d38161282f34908c5bbec07a0526191 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 15 May 2018 15:10:27 +0200
Subject: [PATCH 13/85] [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 323630790eb93649442fdf4d9e500e0543528b37 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:37:38 +0530
Subject: [PATCH 14/85] [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 dfc691a695b0332daad68ba24eaabac96d52a5f0 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:39:00 +0530
Subject: [PATCH 15/85] 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 703c929b05b774dccfa8167f796a819384689500 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 10:44:49 +0530
Subject: [PATCH 16/85] [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 b7ee5ee1d845bfedd22731b6e85b00f26460b8fb Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 11 Sep 2018 16:58:07 +0530
Subject: [PATCH 17/85] [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 6b811a7c30531d8902812589f8b84dd0dfbf6715 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 24 Sep 2018 12:07:02 +0530
Subject: [PATCH 18/85] [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/85]
[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 f0c153ab160f4ba2f2d26a7f4be4a9c8e9aaf390 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 17:12:10 +0530
Subject: [PATCH 21/85]
[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 54a6a019de657d053b609d0dabeee6ceba21d59d Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 17:32:22 +0530
Subject: [PATCH 22/85] [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 492816d6ac2c208fade82262d01d39afb8a6541d Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 25 Sep 2018 20:13:54 +0530
Subject: [PATCH 23/85] [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 31cab4c8bc1a1bffeb1ff23c1a743f9151769f7d Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Wed, 26 Sep 2018 18:16:17 +0200
Subject: [PATCH 24/85] [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 0ea3fa086c114d1878d11fc99eff5575c14fe0b7 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Thu, 27 Sep 2018 16:22:05 +0200
Subject: [PATCH 25/85] 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 7b6b446e4388ada9dbedd591439decda83b76282 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 27 Sep 2018 21:20:06 +0530
Subject: [PATCH 26/85] [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 38bd1d360683c900a5c66465f5b8ac094286f82b Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Fri, 28 Sep 2018 13:38:36 +0530
Subject: [PATCH 27/85] [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 538e083b78b6da67743e1b850cffcbb9eb04626d Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 19 Oct 2018 11:49:23 +0200
Subject: [PATCH 28/85] 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 66cbcb4a23432f7218a98fd1c2e7bd16a9dda84e Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Fri, 1 Feb 2019 16:21:55 +0100
Subject: [PATCH 29/85] 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 4e0986c9c83dc43ddf9005450e45d92dff9d6256 Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Mon, 4 Feb 2019 11:38:13 +0100
Subject: [PATCH 30/85] [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 c69d0285ccb5b852d22c359daf75b07840f10e82 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 9 Apr 2019 11:41:05 +0530
Subject: [PATCH 31/85] [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 21c3cd431da5a8037086067eeaf3e46157fb8414 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 9 Apr 2019 15:41:51 +0530
Subject: [PATCH 32/85] [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 a14b36186550e19054b38baa26c5b03ae5f86522 Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Mon, 27 May 2019 16:18:24 +0530
Subject: [PATCH 33/85] [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 49be47a3d05de7507cd006493871dc34b0458853 Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Thu, 6 Jun 2019 18:09:33 +0530
Subject: [PATCH 34/85] [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 993459117de57904ccd563508671919743d8dd6a Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Thu, 6 Jun 2019 18:15:18 +0530
Subject: [PATCH 35/85] [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 f482013a89dc04fb27fc17b5ed75b92b791f76b8 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 6 Jun 2019 18:17:25 +0530
Subject: [PATCH 36/85] [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 71afd45e0d8c2dad9cc26c1cf764cca3ba4dd59d Mon Sep 17 00:00:00 2001
From: Pooja Khandelwal
Date: Fri, 7 Jun 2019 13:22:19 +0530
Subject: [PATCH 37/85] [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 669d439b1675463e32c5c1f3466e1e32c0eea76e Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Wed, 19 Jun 2019 12:10:08 +0530
Subject: [PATCH 38/85] [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 09cf6fe9f170cb5796aa2b4c953a51ac0ac7fe85 Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Mon, 24 Jun 2019 14:29:41 +0530
Subject: [PATCH 39/85] [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 584fb8bed61761332f055c8783062ba48d50dd4a Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Mon, 24 Jun 2019 17:31:00 +0530
Subject: [PATCH 40/85] [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 4b0ac59d5e8c0acfd1dc65058d46e6b1658b31c3 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 26 Jun 2019 15:20:17 +0530
Subject: [PATCH 41/85] [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 7b553f92251cffa551274da190b261ba50c1291a Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 26 Jun 2019 19:50:07 +0530
Subject: [PATCH 42/85] [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 42791d6ab12f2e9273a34a0a1d1037b74bd0bca7 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 27 Jun 2019 18:48:39 +0530
Subject: [PATCH 43/85] [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 f015914fcb8e50f8d5c1ef4e8bc5decc9f863a79 Mon Sep 17 00:00:00 2001
From: Harshil Trivedi
Date: Fri, 28 Jun 2019 19:38:50 +0530
Subject: [PATCH 44/85] [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 1bc5f4798376ed50d1500382f6baa375739688c7 Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Sat, 29 Jun 2019 11:32:43 +0530
Subject: [PATCH 45/85] [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 4a38badfb97ebb8afc2a00e923ee1f1b33614a6e Mon Sep 17 00:00:00 2001
From: Chirag Parmar
Date: Sat, 29 Jun 2019 15:10:38 +0530
Subject: [PATCH 46/85] [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 ad8edb2c18abe2c236c2faf1931b49aaf67cc67f Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 2 Jul 2019 12:49:36 +0530
Subject: [PATCH 47/85] [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 39f6b66779b4af01789dd0d6b111ecf5ed03462c Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Fri, 26 Jul 2019 10:58:53 +0530
Subject: [PATCH 48/85] [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 5f3b4c1f3ec062b34677bcad96df0e257e4c38f3 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 26 Dec 2019 20:05:09 +0530
Subject: [PATCH 49/85] [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 531a5afa416e4e630b3a24273f894c203219be46 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 2 Jan 2020 17:00:17 +0530
Subject: [PATCH 50/85] [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 e77bf974719acefb37a0ab205d6230dbd3da29ad Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Thu, 2 Jan 2020 20:23:04 +0530
Subject: [PATCH 51/85] [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 ed6292f5ab8fb60f71b88ecbe8595983bd4fb9bd Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Sat, 4 Jan 2020 15:26:26 +0530
Subject: [PATCH 52/85] [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 6ff6c1e0d97c1471ab665d81208a5b879478f3b7 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Sat, 4 Jan 2020 19:12:03 +0530
Subject: [PATCH 53/85] [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 f10a5c442298187715d3de45281a52f10d817c0b Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 6 Jan 2020 12:06:12 +0530
Subject: [PATCH 54/85] [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 1eb9adefb16d285f1a1e91f043e34cefa8a49bfb Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Mon, 6 Jan 2020 12:26:19 +0530
Subject: [PATCH 55/85] [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 33f546ce2061764dcf156e28804565e11eb598e9 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Tue, 28 Jan 2020 17:53:36 +0530
Subject: [PATCH 56/85] [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 27e1cfec35efe31f6141e48386bb57dc998d7284 Mon Sep 17 00:00:00 2001
From: Shruti Singh
Date: Wed, 4 Nov 2020 23:21:53 +0530
Subject: [PATCH 57/85] [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 341f14ae20106dc4b3692fff12c8dad45320e73e Mon Sep 17 00:00:00 2001
From: Chandresh Thakkar
Date: Thu, 1 Apr 2021 19:30:35 +0530
Subject: [PATCH 58/85] [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 fc220d1943c7c5b455930433bbad4544b00ff37b Mon Sep 17 00:00:00 2001
From: Chandresh Thakkar OSI
Date: Wed, 7 Apr 2021 15:35:05 +0530
Subject: [PATCH 59/85] [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 845ea03c362da312cc8886f260a08fae4ac76238 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Tue, 27 Apr 2021 20:55:04 +0100
Subject: [PATCH 60/85] [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 f9917ef3700f5e707f6f1528c6ba1037ae1a5abf Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Tue, 4 May 2021 20:04:02 +0100
Subject: [PATCH 61/85] [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 28497210f069045e9d67cdf09b05cc4bc1b5d02e Mon Sep 17 00:00:00 2001
From: Paul Catinean
Date: Tue, 15 Jun 2021 20:16:04 +0300
Subject: [PATCH 62/85] 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 605f89d1f626b0dc7c7a0c2bf1518924d70f8847 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Thu, 23 Sep 2021 19:02:05 +0100
Subject: [PATCH 63/85] [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 263c2f5fc3dc5b84ce696e59ae9cd19618567b05 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/85] [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 77b76f769e706ecce323f374076a9a469ee1eb3a Mon Sep 17 00:00:00 2001
From: PRV
Date: Mon, 25 Oct 2021 22:18:56 +0530
Subject: [PATCH 65/85] [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 2043268b0dd3eb008d88d69b2f363c37df90e189 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Fri, 10 Dec 2021 12:13:26 +0000
Subject: [PATCH 66/85] [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 c521d06311b88699e7f748f68642e29723e263b5 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/85] [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 5c497f707127e16ea5cae7b2eb668a9dfc30cdb2 Mon Sep 17 00:00:00 2001
From: Benjamin Henquet
Date: Tue, 25 Apr 2023 11:46:14 +0200
Subject: [PATCH 68/85] [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