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:
snt 2024-09-05 01:47:15 +02:00
parent 823589afb0
commit e102c0e517
11 changed files with 166 additions and 30 deletions

View file

@ -1,2 +1 @@
from . import models from . import models

View file

@ -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,
} }

View file

@ -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')

View file

@ -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"
/> />

View file

@ -0,0 +1 @@
from . import models

View 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,
}

View file

@ -0,0 +1,5 @@
from . import product_template
from . import res_company
from . import res_config_settings

View 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)

View 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',
)

View 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",
)

View 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>