upgrade v16. configura automáticamente la categoría del website y el
ribbon del producto según configuraciones en la compañía cuando se actualizan los campos en distribución.
This commit is contained in:
parent
823589afb0
commit
e102c0e517
11 changed files with 166 additions and 30 deletions
|
@ -1,2 +1 @@
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
|
|
|
@ -1,36 +1,23 @@
|
||||||
{
|
{
|
||||||
'name': 'Product Retail',
|
'name': 'Product Retail',
|
||||||
'category': 'Product',
|
'category': 'Product',
|
||||||
'summary': 'Gestiona productos en distribución / Venta a minoristas',
|
'summary': 'Gestiona productos en distribución.',
|
||||||
'version': "16.0.1.0.0",
|
'version': "16.0.1.0.0",
|
||||||
'description': """
|
'description': """
|
||||||
|
|
||||||
Gestiona productos en distribución / Venta a minoristas
|
Gestiona productos en distribución / Venta a minoristas
|
||||||
==================================================
|
==================================================
|
||||||
* Añade campo a product: En Distribución y margin de minoristas.
|
* Añade campo a product: En Distribución y margin de minoristas.
|
||||||
* Filtro de productos en distribución en las vistas de productos
|
* Filtro de productos en distribución en la vista de productos.
|
||||||
|
|
||||||
ToDo:
|
|
||||||
* Configuración para elegir lista de precios a minoristas
|
|
||||||
* Los minoristas se configuran a mano con esa tarifa, público normal con la Tarifa Pública por efecto
|
|
||||||
* los productos con margen configurado se agregan en esa tarifa con el descuento marcado
|
|
||||||
* Impide la venta a minoristas de artículos que no están en distribución
|
|
||||||
""",
|
""",
|
||||||
'author': 'Criptomart',
|
'author': 'Criptomart',
|
||||||
'depends': [
|
'depends': [
|
||||||
'product',
|
'product',
|
||||||
],
|
],
|
||||||
'external_dependencies': {'python': [], 'bin': []},
|
|
||||||
'data': [
|
'data': [
|
||||||
'views/product.xml',
|
'views/product.xml',
|
||||||
],
|
],
|
||||||
'qweb': [],
|
|
||||||
'demo': [],
|
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'application': False,
|
'application': False,
|
||||||
"post_load": None,
|
|
||||||
"pre_init_hook": None,
|
|
||||||
"post_init_hook": None,
|
|
||||||
"uninstall_hook": None,
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
# Copyright (C) 2022: Criptomart (https://criptomart.net)
|
# Copyright (C) 2022-2024: Criptomart (https://criptomart.net)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
#import logging
|
|
||||||
|
|
||||||
from odoo import tools, models, fields, api, _
|
from odoo import tools, models, fields, api, _
|
||||||
|
|
||||||
#_logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
class ProductTemplate(models.Model):
|
class ProductTemplate(models.Model):
|
||||||
_inherit = "product.template"
|
_inherit = "product.template"
|
||||||
|
|
||||||
in_distribution = fields.Boolean('En distribución')
|
in_distribution = fields.Boolean('En distribución libros')
|
||||||
retail_margin = fields.Float('Margen aplicado a minoristas')
|
in_distribution_music = fields.Boolean('En distribución música')
|
||||||
|
|
|
@ -10,18 +10,19 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
|
||||||
<field name="inherit_id" ref="product.product_template_only_form_view"/>
|
<field name="inherit_id" ref="product.product_template_only_form_view"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="sale_ok" position="before">
|
<field name="sale_ok" position="before">
|
||||||
<div>
|
<span>
|
||||||
<field name="in_distribution"/>
|
<field name="in_distribution"/>
|
||||||
<label for="in_distribution" />
|
<label for="in_distribution" />
|
||||||
</div>
|
</span>
|
||||||
|
<span>
|
||||||
|
<field name="in_distribution_music"/>
|
||||||
|
<label for="in_distribution_music" />
|
||||||
|
</span>
|
||||||
</field>
|
</field>
|
||||||
<!-- <field name="list_price" position="after" attrs="{'invisible': [('in_distribution', '=', False)]}">
|
|
||||||
<field name="retail_margin" attrs="{'invisible': [('in_distribution', '=', False)]}"/>
|
|
||||||
</field> -->
|
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
<!--Filter for products in distribution -->
|
<!--Filter for products in distribution -->
|
||||||
<record id="view_product_search_form_inherit_dsitribution" model="ir.ui.view">
|
<record id="view_product_search_form_inherit_distribution" model="ir.ui.view">
|
||||||
<field name="name">view.product.search.form.inherit.distribution</field>
|
<field name="name">view.product.search.form.inherit.distribution</field>
|
||||||
<field name="model">product.template</field>
|
<field name="model">product.template</field>
|
||||||
<field name="inherit_id" ref="product.product_template_search_view"/>
|
<field name="inherit_id" ref="product.product_template_search_view"/>
|
||||||
|
@ -29,8 +30,8 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
|
||||||
<xpath expr="//filter[@name='services']" position="before">
|
<xpath expr="//filter[@name='services']" position="before">
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="En Distribución"
|
<filter string="En Distribución"
|
||||||
name="products_dsitribution_filter"
|
name="products_distribution_filter"
|
||||||
domain="[('in_distribution', '=', True)]"
|
domain="['|',('in_distribution', '=', True),('in_distribution_music', '=', True)]"
|
||||||
help="Products sold to retailers."
|
help="Products sold to retailers."
|
||||||
icon="terp-project"
|
icon="terp-project"
|
||||||
/>
|
/>
|
||||||
|
|
1
website_product_retail/__init__.py
Normal file
1
website_product_retail/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
from . import models
|
25
website_product_retail/__manifest__.py
Normal file
25
website_product_retail/__manifest__.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
'name': 'Website Product Retail',
|
||||||
|
'category': 'Product',
|
||||||
|
'summary': 'Setea categorías y ribbons de website en productos en distribución.',
|
||||||
|
'version': "16.0.1.0.0",
|
||||||
|
'description': """
|
||||||
|
|
||||||
|
Configura categorías y ribbons de website en productos en distribución.
|
||||||
|
==================================================
|
||||||
|
* Configura en el producto las categorías del website de distribución.
|
||||||
|
* Configura en el producto el ribbon del website de distribución.
|
||||||
|
* Las categorías y ribbons se configuran en las opciones de configuración de la compañía.
|
||||||
|
""",
|
||||||
|
'author': 'Criptomart',
|
||||||
|
'depends': [
|
||||||
|
'website_sale',
|
||||||
|
'product_retail_cm',
|
||||||
|
],
|
||||||
|
'data': [
|
||||||
|
'views/res_config_settings_views.xml',
|
||||||
|
],
|
||||||
|
'installable': True,
|
||||||
|
'auto_install': False,
|
||||||
|
'application': False,
|
||||||
|
}
|
5
website_product_retail/models/__init__.py
Normal file
5
website_product_retail/models/__init__.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from . import product_template
|
||||||
|
from . import res_company
|
||||||
|
from . import res_config_settings
|
||||||
|
|
||||||
|
|
38
website_product_retail/models/product_template.py
Normal file
38
website_product_retail/models/product_template.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
from odoo import tools, models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class ProductTemplate(models.Model):
|
||||||
|
_inherit = "product.template"
|
||||||
|
|
||||||
|
def write(self, vals):
|
||||||
|
if 'in_distribution' in vals:
|
||||||
|
if self.env.user.company_id.web_cat_in_distribution_libros:
|
||||||
|
category_id = self.env.user.company_id.web_cat_in_distribution_libros.id
|
||||||
|
if self.env.user.company_id.web_ribbon_in_distribution:
|
||||||
|
ribbon_id = self.env.user.company_id.web_ribbon_in_distribution.id
|
||||||
|
if vals['in_distribution']:
|
||||||
|
if category_id:
|
||||||
|
vals['public_categ_ids'] = [(4,category_id)]
|
||||||
|
if ribbon_id:
|
||||||
|
vals['website_ribbon_id'] = ribbon_id
|
||||||
|
else:
|
||||||
|
if category_id:
|
||||||
|
vals['public_categ_ids'] = [(3,category_id)]
|
||||||
|
if ribbon_id:
|
||||||
|
vals['website_ribbon_id'] = False
|
||||||
|
if 'in_distribution_music' in vals:
|
||||||
|
if self.env.user.company_id.web_cat_in_distribution_musica:
|
||||||
|
category_id = self.env.user.company_id.web_cat_in_distribution_musica.id
|
||||||
|
if self.env.user.company_id.web_ribbon_in_distribution:
|
||||||
|
ribbon_id = self.env.user.company_id.web_ribbon_in_distribution.id
|
||||||
|
if vals['in_distribution_music']:
|
||||||
|
if category_id:
|
||||||
|
vals['public_categ_ids'] = [(4,category_id)]
|
||||||
|
if ribbon_id:
|
||||||
|
vals['website_ribbon_id'] = ribbon_id
|
||||||
|
else:
|
||||||
|
if category_id:
|
||||||
|
vals['public_categ_ids'] = [(3,category_id)]
|
||||||
|
if ribbon_id:
|
||||||
|
vals['website_ribbon_id'] = False
|
||||||
|
return super().write(vals)
|
24
website_product_retail/models/res_company.py
Normal file
24
website_product_retail/models/res_company.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Copyright 2022 Criptomart
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class Company(models.Model):
|
||||||
|
_inherit = 'res.company'
|
||||||
|
|
||||||
|
web_cat_in_distribution_libros = fields.Many2one(
|
||||||
|
'product.public.category',
|
||||||
|
'Website categoría de libros en distribución',
|
||||||
|
)
|
||||||
|
|
||||||
|
web_cat_in_distribution_musica = fields.Many2one(
|
||||||
|
'product.public.category',
|
||||||
|
string='Website categoría de música en distribución',
|
||||||
|
)
|
||||||
|
|
||||||
|
web_ribbon_in_distribution = fields.Many2one(
|
||||||
|
'product.ribbon',
|
||||||
|
string='Website ribbon en distribución',
|
||||||
|
)
|
||||||
|
|
29
website_product_retail/models/res_config_settings.py
Normal file
29
website_product_retail/models/res_config_settings.py
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Copyright 2024 Criptomart
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResConfigSettings(models.TransientModel):
|
||||||
|
_inherit = 'res.config.settings'
|
||||||
|
|
||||||
|
web_cat_in_distribution_libros = fields.Many2one(
|
||||||
|
'product.public.category',
|
||||||
|
'Website categoría de libros en distribución',
|
||||||
|
readonly=False,
|
||||||
|
related="company_id.web_cat_in_distribution_libros",
|
||||||
|
)
|
||||||
|
|
||||||
|
web_cat_in_distribution_musica = fields.Many2one(
|
||||||
|
'product.public.category',
|
||||||
|
string='Website categoría de música en distribución',
|
||||||
|
readonly=False,
|
||||||
|
related="company_id.web_cat_in_distribution_musica",
|
||||||
|
)
|
||||||
|
|
||||||
|
web_ribbon_in_distribution = fields.Many2one(
|
||||||
|
'product.ribbon',
|
||||||
|
string='Website ribbon en distribución',
|
||||||
|
readonly=False,
|
||||||
|
related="company_id.web_ribbon_in_distribution",
|
||||||
|
)
|
30
website_product_retail/views/res_config_settings_views.xml
Normal file
30
website_product_retail/views/res_config_settings_views.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||||
|
<field name="name">res.config.settings.view.form.inherit.retail</field>
|
||||||
|
<field name="model">res.config.settings</field>
|
||||||
|
<field name="inherit_id" ref="product.res_config_settings_view_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<div id="companies" position="after">
|
||||||
|
<h2>Configuración de productos en distribución</h2>
|
||||||
|
<div class="row mt-16 o_settings_container">
|
||||||
|
<div class="o_setting_box o_searchable_setting col 12 -col-lg-6" >
|
||||||
|
<div>
|
||||||
|
<label for="web_cat_in_distribution_libros" />
|
||||||
|
<field name="web_cat_in_distribution_libros" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="web_cat_in_distribution_musica" />
|
||||||
|
<field name="web_cat_in_distribution_musica" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="web_ribbon_in_distribution" />
|
||||||
|
<field name="web_ribbon_in_distribution" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Loading…
Add table
Reference in a new issue