Añade la funcionalidad de pos_empty_default_image pra poder mostraar el formato en productos sin imagen
This commit is contained in:
parent
f1c8cf8414
commit
913de79db8
14 changed files with 284 additions and 41 deletions
|
@ -1,18 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Product Library',
|
'name': 'Product Library',
|
||||||
'category': 'Product',
|
'category': 'Product',
|
||||||
'summary': 'Add library related fields to product',
|
'summary': 'Add library related fields to product',
|
||||||
'version': '12.0.1.0.1',
|
'version': '12.0.1.0.2',
|
||||||
'description': """
|
'description': """
|
||||||
|
|
||||||
Addon mejora de Odoo para librerías y tiendas de discos
|
Addon mejora de Odoo para librerías y tiendas de discos
|
||||||
==================================================
|
==================================================
|
||||||
* Añade campos a product: Editorial, autor, género, formato,...
|
* Añade campos a product: Editorial, autor, género, formato, fecha de edición, fecha de entrada, colección, subcolección.
|
||||||
* Hace búsquedas en el TPV y backend en esos campos nuevos
|
* Hace búsquedas en el TPV y backend en esos campos nuevos.
|
||||||
* Búsqueda sin acentos en el PoS
|
* Búsqueda sin acentos en el PoS.
|
||||||
* Muestra el campo formato en el PoS en los productos y en las líneas de la orden
|
* Muestra el campo formato en el PoS en los productos y en las líneas de la orden.
|
||||||
|
* Funcionalidad de pos_empty_default_image para mostrar el formato, en el addon original sobrescribe el widget y no se puede mostraar.
|
||||||
|
|
||||||
""",
|
""",
|
||||||
'author': 'Criptomart',
|
'author': 'Criptomart',
|
||||||
|
@ -23,9 +22,12 @@ Addon mejora de Odoo para librerías y tiendas de discos
|
||||||
'external_dependencies': {'python': [], 'bin': []},
|
'external_dependencies': {'python': [], 'bin': []},
|
||||||
'data': [
|
'data': [
|
||||||
'views/product.xml',
|
'views/product.xml',
|
||||||
'views/templates.xml'
|
'views/templates.xml',
|
||||||
|
'views/pos_config.xml',
|
||||||
|
],
|
||||||
|
'qweb': [
|
||||||
|
'static/src/xml/pos.xml',
|
||||||
],
|
],
|
||||||
'qweb': ['static/src/xml/pos.xml'],
|
|
||||||
'demo': [],
|
'demo': [],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
|
49
product_library/i18n/es.po
Normal file
49
product_library/i18n/es.po
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * pos_default_empty_image
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 12.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"PO-Revision-Date: 2020-10-26 11:08+0000\n"
|
||||||
|
"Last-Translator: Daniel Martinez Vila <daniel.martinez@qubiq.es>\n"
|
||||||
|
"Language-Team: none\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: \n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Weblate 3.10\n"
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,field_description:pos_default_empty_image.field_pos_config__iface_fixed_font_size
|
||||||
|
#: model_terms:ir.ui.view,arch_db:pos_default_empty_image.pos_config_view_form
|
||||||
|
msgid "Fixed Font Size"
|
||||||
|
msgstr "Tamaño de fuente fijo"
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,help:pos_default_empty_image.field_pos_config__iface_fixed_font_size
|
||||||
|
#: model_terms:ir.ui.view,arch_db:pos_default_empty_image.pos_config_view_form
|
||||||
|
msgid ""
|
||||||
|
"Font size of the product name, when it has no image. Set '0' will set "
|
||||||
|
"adaptative font-size, depending on the length of the name."
|
||||||
|
msgstr ""
|
||||||
|
"Tamaño de fuente del nombre del producto, cuando no tiene imagen. Establecer "
|
||||||
|
"'0' establecerá un tamaño de fuente adaptativo, dependiendo de la longitud "
|
||||||
|
"del nombre."
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,field_description:pos_default_empty_image.field_product_product__has_image
|
||||||
|
msgid "Has Image"
|
||||||
|
msgstr "Tiene imagen"
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model,name:pos_default_empty_image.model_pos_config
|
||||||
|
msgid "Point of Sale Configuration"
|
||||||
|
msgstr "Configuración del punto de venta"
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model,name:pos_default_empty_image.model_product_product
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "Producto"
|
42
product_library/i18n/produc_library.pot
Normal file
42
product_library/i18n/produc_library.pot
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * product_library
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 12.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: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,field_description:pos_default_empty_image.field_pos_config__iface_fixed_font_size
|
||||||
|
#: model_terms:ir.ui.view,arch_db:pos_default_empty_image.pos_config_view_form
|
||||||
|
msgid "Fixed Font Size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,help:pos_default_empty_image.field_pos_config__iface_fixed_font_size
|
||||||
|
#: model_terms:ir.ui.view,arch_db:pos_default_empty_image.pos_config_view_form
|
||||||
|
msgid "Font size of the product name, when it has no image. Set '0' will set adaptative font-size, depending on the length of the name."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model.fields,field_description:pos_default_empty_image.field_product_product__has_image
|
||||||
|
msgid "Has Image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model,name:pos_default_empty_image.model_pos_config
|
||||||
|
msgid "Point of Sale Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: pos_default_empty_image
|
||||||
|
#: model:ir.model,name:pos_default_empty_image.model_product_product
|
||||||
|
msgid "Product"
|
||||||
|
msgstr ""
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
from . import res_product
|
from . import pos_config
|
||||||
|
from . import product_template
|
||||||
|
from . import product_product
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2013-Today OpenERP SA (<http://www.openerp.com>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
from . import res_product
|
|
||||||
|
|
16
product_library/models/pos_config.py
Normal file
16
product_library/models/pos_config.py
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Copyright (C) 2020 - Today:
|
||||||
|
# GRAP (http://www.grap.coop)
|
||||||
|
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class PosConfig(models.Model):
|
||||||
|
_inherit = 'pos.config'
|
||||||
|
|
||||||
|
iface_fixed_font_size = fields.Integer(
|
||||||
|
string="Fixed Font Size",
|
||||||
|
help="Font size of the product name, when it has no image."
|
||||||
|
" Set '0' will set adaptative font-size, depending on the"
|
||||||
|
" length of the name.")
|
20
product_library/models/product_product.py
Normal file
20
product_library/models/product_product.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# Copyright (C) 2017 - Today:
|
||||||
|
# GRAP (http://www.grap.coop)
|
||||||
|
# Akretion (http://www.akretion.com)
|
||||||
|
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
class ProductProduct(models.Model):
|
||||||
|
_inherit = 'product.product'
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
@api.depends('image')
|
||||||
|
def _compute_has_image(self):
|
||||||
|
for product in self:
|
||||||
|
product.has_image = product.image
|
||||||
|
|
||||||
|
has_image = fields.Boolean(
|
||||||
|
compute='_compute_has_image', string='Has Image', store=True)
|
|
@ -17,3 +17,23 @@
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright (C) 2014 - Today: GRAP (http://www.grap.coop)
|
||||||
|
@author Julien WESTE
|
||||||
|
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
*/
|
||||||
|
|
||||||
|
.product-img-without-image{
|
||||||
|
height:25px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-name-without-image{
|
||||||
|
bottom:auto !important;
|
||||||
|
top:25px !important;
|
||||||
|
padding-top:3px !important;
|
||||||
|
height:80px !important;
|
||||||
|
line-height: 20px;
|
||||||
|
text-align: center;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
|
@ -2,10 +2,12 @@ odoo.define('product_library.product_library', function (require) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var models = require('point_of_sale.models');
|
var models = require('point_of_sale.models');
|
||||||
var screens = require('point_of_sale.screens');
|
//var screens = require('point_of_sale.screens');
|
||||||
var core = require('web.core');
|
//var core = require('web.core');
|
||||||
var gui = require('point_of_sale.gui');
|
//var gui = require('point_of_sale.gui');
|
||||||
var _t = core._t;
|
//var _t = core._t;
|
||||||
|
|
||||||
|
models.load_fields("product.product", ['has_image']);
|
||||||
|
|
||||||
/* ********************************************************
|
/* ********************************************************
|
||||||
Overload models.PosModel
|
Overload models.PosModel
|
||||||
|
@ -15,7 +17,7 @@ Overload models.PosModel
|
||||||
models.PosModel = models.PosModel.extend({
|
models.PosModel = models.PosModel.extend({
|
||||||
initialize: function (session, attributes) {
|
initialize: function (session, attributes) {
|
||||||
|
|
||||||
this.member_categories = [];
|
//this.member_categories = [];
|
||||||
|
|
||||||
var product_model = _.find(this.models, function(model){ return model.model === 'product.product'; });
|
var product_model = _.find(this.models, function(model){ return model.model === 'product.product'; });
|
||||||
//product_model.fields.push('default_code');
|
//product_model.fields.push('default_code');
|
42
product_library/static/src/js/widgets.js
Normal file
42
product_library/static/src/js/widgets.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
odoo.define('product_library.widgets', function (require) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var screens = require('point_of_sale.screens');
|
||||||
|
|
||||||
|
var core = require('web.core');
|
||||||
|
|
||||||
|
var QWeb = core.qweb;
|
||||||
|
|
||||||
|
//don't try to get an image if we know the product ain't one
|
||||||
|
var ProductListImageWidget = screens.ProductListWidget.include({
|
||||||
|
get_product_image_url: function(product){
|
||||||
|
if (product.has_image)
|
||||||
|
return this._super(product);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Change product display if product has no image;
|
||||||
|
render_product: function(product){
|
||||||
|
if (product.has_image){
|
||||||
|
return this._super(product);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var current_pricelist = this._get_active_pricelist();
|
||||||
|
var cache_key = this.calculate_cache_key(product, current_pricelist);
|
||||||
|
var cached = this.product_cache.get_node(cache_key);
|
||||||
|
if(!cached){
|
||||||
|
var product_html = QWeb.render('ProductNoImage',{
|
||||||
|
widget: this,
|
||||||
|
product: product,
|
||||||
|
pricelist: current_pricelist,
|
||||||
|
});
|
||||||
|
var product_node = document.createElement('div');
|
||||||
|
product_node.innerHTML = product_html;
|
||||||
|
product_node = product_node.childNodes[1];
|
||||||
|
this.product_cache.cache_node(cache_key,product_node);
|
||||||
|
return product_node;
|
||||||
|
}
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
|
@ -26,4 +26,44 @@
|
||||||
</t>
|
</t>
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
|
<t t-name="ProductNoImage">
|
||||||
|
<article class='product' t-att-data-product-id="product.id" tabindex="0" t-attf-aria-labelledby="article_product_#{product.id}">
|
||||||
|
<t t-set="name_length" t-value="product.display_name.length" />
|
||||||
|
<t t-if='widget.pos.config.iface_fixed_font_size'>
|
||||||
|
<t t-set="font_size" t-value="widget.pos.config.iface_fixed_font_size" />
|
||||||
|
</t>
|
||||||
|
<t t-else="">
|
||||||
|
<t t-set="font_size" t-value="
|
||||||
|
name_length >=120 and 11
|
||||||
|
or name_length >=90 and 12
|
||||||
|
or name_length >=60 and 13
|
||||||
|
or name_length>=50 and 14
|
||||||
|
or name_length>=40 and 16
|
||||||
|
or 20"/>
|
||||||
|
</t>
|
||||||
|
<div class="product-img-without-image">
|
||||||
|
<t t-if="!product.to_weight">
|
||||||
|
<span class="price-tag">
|
||||||
|
<t t-esc="widget.format_currency(product.get_price(pricelist, 1),'Product Price')"/>
|
||||||
|
</span>
|
||||||
|
</t>
|
||||||
|
<t t-if="product.to_weight">
|
||||||
|
<span class="price-tag">
|
||||||
|
<t t-esc="widget.format_currency(product.get_price(pricelist, 1),'Product Price')+'/'+widget.pos.units_by_id[product.uom_id[0]].name"/>
|
||||||
|
</span>
|
||||||
|
</t>
|
||||||
|
<t t-if="product.formato">
|
||||||
|
<span class="format">
|
||||||
|
<t t-esc="product.formato"/>
|
||||||
|
</span>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
<div class="product-name-without-image" t-attf-id="article_product_#{product.id}" t-attf-style="font-size: #{font_size}px !important; line-height: #{font_size}px !important;">
|
||||||
|
<t t-esc="product.display_name"/>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</t>
|
||||||
|
|
||||||
</templates>
|
</templates>
|
||||||
|
|
||||||
|
|
||||||
|
|
29
product_library/views/pos_config.xml
Normal file
29
product_library/views/pos_config.xml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright 2020 Creu Blanca
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="pos_config_view_form">
|
||||||
|
<field name="model">pos.config</field>
|
||||||
|
<field name="inherit_id" ref="point_of_sale.pos_config_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='iface_big_scrollbars']/../.." position="after">
|
||||||
|
|
||||||
|
<div class="col-12 col-lg-6 o_setting_box">
|
||||||
|
<div class="o_setting_right_pane">
|
||||||
|
<label for="iface_fixed_font_size" string="Fixed Font Size"/>
|
||||||
|
<div class="text-muted">
|
||||||
|
Font size of the product name, when it has no image. Set '0' will set adaptative font-size, depending on the length of the name.
|
||||||
|
</div>
|
||||||
|
<div class="content-group mt16">
|
||||||
|
<field name="iface_fixed_font_size"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
|
@ -3,8 +3,9 @@
|
||||||
|
|
||||||
<template id="assets_backend" name="product_library" inherit_id="point_of_sale.assets">
|
<template id="assets_backend" name="product_library" inherit_id="point_of_sale.assets">
|
||||||
<xpath expr="." position="inside">
|
<xpath expr="." position="inside">
|
||||||
<script type="text/javascript" src="/product_library/static/src/js/product_library.js"></script>
|
<script type="text/javascript" src="/product_library/static/src/js/models.js"></script>
|
||||||
<script type="text/javascript" src="/product_library/static/src/js/db.js"/>
|
<script type="text/javascript" src="/product_library/static/src/js/db.js"/>
|
||||||
|
<script type="text/javascript" src="/product_library/static/src/js/widgets.js"></script>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//link[@id='pos-stylesheet']" position="after">
|
<xpath expr="//link[@id='pos-stylesheet']" position="after">
|
||||||
<link
|
<link
|
||||||
|
@ -23,7 +24,7 @@
|
||||||
<xpath expr="." position="inside">
|
<xpath expr="." position="inside">
|
||||||
<script
|
<script
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
src="/pos_library/static/src/js/test_pos_format.js"
|
src="/product_library/static/src/js/test_pos_format.js"
|
||||||
/>
|
/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template> -->
|
</template> -->
|
||||||
|
|
Loading…
Add table
Reference in a new issue