add product_sale_price_from_pricelist
This commit is contained in:
parent
6a3293b9a3
commit
188f32a052
13 changed files with 979 additions and 0 deletions
1
product_sale_price_from_pricelist/__init__.py
Normal file
1
product_sale_price_from_pricelist/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
from . import models
|
||||||
25
product_sale_price_from_pricelist/__manifest__.py
Normal file
25
product_sale_price_from_pricelist/__manifest__.py
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "Product Sale Price from Pricelist",
|
||||||
|
"version": "16.0.1.0.0",
|
||||||
|
"category": "product",
|
||||||
|
"summary": "Set sale price from pricelist based on last purchase price",
|
||||||
|
"description": """
|
||||||
|
Set sale price from pricelist based on last purchase price
|
||||||
|
""",
|
||||||
|
"author": "Criptomart",
|
||||||
|
"website": "https://criptomart.net",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"depends": [
|
||||||
|
"product_get_price_helper",
|
||||||
|
"sale",
|
||||||
|
"purchase",
|
||||||
|
"account",
|
||||||
|
"stock_account",
|
||||||
|
"product_template_tags",
|
||||||
|
],
|
||||||
|
"data": [
|
||||||
|
"views/actions.xml",
|
||||||
|
"views/product_view.xml",
|
||||||
|
],
|
||||||
|
"installable": True,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="paperformat_barcode" model="report.paperformat">
|
||||||
|
<field name="name">Barcodes stickers format</field>
|
||||||
|
<field name="default" eval="True" />
|
||||||
|
<field name="format">A4</field>
|
||||||
|
<field name="page_height">0</field>
|
||||||
|
<field name="page_width">0</field>
|
||||||
|
<field name="orientation">Portrait</field>
|
||||||
|
<field name="margin_top">10</field>
|
||||||
|
<field name="margin_bottom">5</field>
|
||||||
|
<field name="margin_left">8</field>
|
||||||
|
<field name="margin_right">8</field>
|
||||||
|
<field name="header_line" eval="False" />
|
||||||
|
<field name="header_spacing">0</field>
|
||||||
|
<field name="dpi">75</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
||||||
317
product_sale_price_from_pricelist/i18n/es.po
Normal file
317
product_sale_price_from_pricelist/i18n/es.po
Normal file
|
|
@ -0,0 +1,317 @@
|
||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * product_laosa
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 12.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-03-26 09:31+0000\n"
|
||||||
|
"PO-Revision-Date: 2024-03-26 10:32+0100\n"
|
||||||
|
"Last-Translator: <>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: es\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Poedit 3.4.2\n"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price_automatic
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price_automatic
|
||||||
|
msgid "Automatic Sale Price"
|
||||||
|
msgstr "Precio de venta automático"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price_automatic
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price_automatic
|
||||||
|
msgid "Automatic computation of the PVP from the cost price and the rate defined in the configuration."
|
||||||
|
msgstr "Cálculo automático del PVP a partir del precio de coste y la tarifa definida en la configuración."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_pricelist_item__base
|
||||||
|
msgid ""
|
||||||
|
"Base price for computation.\n"
|
||||||
|
"Public Price: The base price will be the Sale/public Price.\n"
|
||||||
|
"Cost Price : The base price will be the cost price.\n"
|
||||||
|
"Other Pricelist : Computation of the base price based on another Pricelist."
|
||||||
|
msgstr ""
|
||||||
|
"Precio base de cálculo.\n"
|
||||||
|
"Precio Público: El precio base será el Precio Público / Venta.\n"
|
||||||
|
"Precio de costo: El precio base será el precio de costo.\n"
|
||||||
|
"Otra lista de precios: cálculo del precio base basado en otra lista de precios."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_pricelist_item__base
|
||||||
|
msgid "Based on"
|
||||||
|
msgstr "Basado en"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__last_purchase_price_compute_type
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__last_purchase_price_compute_type
|
||||||
|
msgid ""
|
||||||
|
"Choose whether discounts should influence the calculation of the last purchase price. Select Never update for manual configuration of cost and sale prices.\n"
|
||||||
|
"\n"
|
||||||
|
"* Without discounts: does not take into account discounts when updating the last purchase price.\n"
|
||||||
|
"* First discount: take into account only first discount when updating the last purchase price.\n"
|
||||||
|
"* Triple discount: take into account all discounts when updating the last purchase price. Needs \"Purchase Triple Discount\" OCA module.\n"
|
||||||
|
"* Manual update: Select this for manual configuration of cost and sale price. The sales price will not be calculated automatically."
|
||||||
|
msgstr ""
|
||||||
|
"Elija si los descuentos deben influir en la actualización del último precio de compra. Seleccione No actualizar nunca para la configuración manual de los precios de coste y venta.\n"
|
||||||
|
"\n"
|
||||||
|
"* Sin descuentos: no tiene en cuenta ningún descuento al actualizar el último precio de compra.\n"
|
||||||
|
"* Primer descuento: tiene en cuenta sólo el primer descuento al actualizar el último precio de compra.\n"
|
||||||
|
"* Triple descuento: tiene en cuenta todos los descuentos al actualizar el último precio de compra. Necesita el módulo OCA \"Purchase Triple Discount\".\n"
|
||||||
|
"* Actualización manual: configuración manual del precio de coste y de venta. El precio de venta no se calculará automáticamente."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr "Compañías"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_res_config_settings
|
||||||
|
msgid "Config Settings"
|
||||||
|
msgstr "Opciones de Configuración"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_packaging__qty
|
||||||
|
msgid "Contained Quantity"
|
||||||
|
msgstr "Cantidad contenida"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Cost"
|
||||||
|
msgstr "Coste"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Cost Price Tax Included"
|
||||||
|
msgstr "Precio de coste con impuesto incluido"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.res_config_settings_view_form_pricelists
|
||||||
|
msgid "Default pricelists for Coops"
|
||||||
|
msgstr "Tarifas por defecto para cooperativas"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Double discount"
|
||||||
|
msgstr "Doble descuento"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "First discount"
|
||||||
|
msgstr "Primer descuento"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_print_label_date
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_print_label_date
|
||||||
|
msgid "Last Print Label Date"
|
||||||
|
msgstr "Fecha de la última impresión de la etiqueta"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_purchase_price
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_purchase_price
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_list_price_auto
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Last purchase price"
|
||||||
|
msgstr "Último precio de compra"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_purchase_price_compute_type
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_purchase_price_compute_type
|
||||||
|
msgid "Last purchase price calculation type"
|
||||||
|
msgstr "Cálculo de último precio de compra"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price_updated
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price_updated
|
||||||
|
msgid "Last purchase price updated"
|
||||||
|
msgstr "Último precio de compra actualizado"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template_tag__image
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Manual update"
|
||||||
|
msgstr "Actualización manual"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__name_wordpress
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__name_wordpress
|
||||||
|
msgid "Name for WordPress"
|
||||||
|
msgstr "Nombre para WordPress"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: code:addons/product_laosa/models/product_template.py:55
|
||||||
|
#, python-format
|
||||||
|
msgid "Not found a valid pricelist to compute sale price. Check configuration in General Settings."
|
||||||
|
msgstr "No se ha encontrado una lista de precios válida para calcular el precio de venta. Compruebe la configuración en los Ajustes Generales."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Other Pricelist"
|
||||||
|
msgstr "Otra tarifa"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price
|
||||||
|
msgid "Price calculated according to the configured pricelist, including VAT."
|
||||||
|
msgstr "Precio calculado según la tarifa configurada, incluyendo el IVA."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_pricelist
|
||||||
|
msgid "Pricelist"
|
||||||
|
msgstr "Tarifa"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_pricelist_item
|
||||||
|
msgid "Pricelist Item"
|
||||||
|
msgstr "Elemento de tarifa"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_res_config_settings__product_pricelist_automatic
|
||||||
|
msgid "Pricelist applied to automatic calculation of sales price"
|
||||||
|
msgstr "Tarifa aplicada al cálculo automático del precio de venta"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_res_company__product_pricelist_automatic
|
||||||
|
msgid "Pricelist applied to the automatic selling price"
|
||||||
|
msgstr "Tarifa aplicada al PVP automáticamente"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_product
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "Producto"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_packaging
|
||||||
|
msgid "Product Packaging"
|
||||||
|
msgstr "Empaquetado del producto"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_template_tag
|
||||||
|
msgid "Product Tag"
|
||||||
|
msgstr "Etiqueta de producto"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_template
|
||||||
|
msgid "Product Template"
|
||||||
|
msgstr "Plantilla de producto"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_tags
|
||||||
|
msgid "Products that have changed their sales price and no label has been printed."
|
||||||
|
msgstr "Productos que han cambiado su PVP y no se ha impreso su etiqueta."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_updated
|
||||||
|
msgid "Products that have recently changed their cost price and have not updated their selling price."
|
||||||
|
msgstr "Productos que han cambiado recientemente su precio de coste y no han actualizado su PVP."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Public Price"
|
||||||
|
msgstr "Precio público"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__is_wordpress_public
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__is_wordpress_public
|
||||||
|
msgid "Publish on WordPress"
|
||||||
|
msgstr "Publicar en WordPress"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_res_company__product_pricelist_automatic
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_res_config_settings__product_pricelist_automatic
|
||||||
|
msgid "Rate that applies to all products that update the selling price automatically."
|
||||||
|
msgstr "Tarifa que se aplica a todos los productos que actualizan el precio de venta automáticamente."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_ir_actions_report
|
||||||
|
msgid "Report Action"
|
||||||
|
msgstr "Reportar la acción"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price
|
||||||
|
msgid "Sale price with VAT"
|
||||||
|
msgstr "PVP con impuestos"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_list_price_auto
|
||||||
|
msgid "Sale price."
|
||||||
|
msgstr "PVP"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template_tag__sequence
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr "Secuencia"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_stock_move
|
||||||
|
msgid "Stock Move"
|
||||||
|
msgstr "Movimiento de stock"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price_updated
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price_updated
|
||||||
|
msgid "The last cost price has been updated and you need to update the selling price in the database, shelves and scales."
|
||||||
|
msgstr "Se ha actualizado el último precio de coste y hay que actualizar el PVP en la base de datos, lineales y las balanzas."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__last_purchase_price
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__last_purchase_price
|
||||||
|
msgid "The last price at which the product was purchased. It is used as the base price field for calculating the product sale price."
|
||||||
|
msgstr "El último precio al que se compró el producto. Se utiliza como campo de precio base para calcular el precio de venta del producto."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__to_print
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__to_print
|
||||||
|
msgid "The sale price has been updated on this product and needs to be updated on the shelf."
|
||||||
|
msgstr "El PVP ha sido actualizado en este producto y necesita ser actualizado en el lineal."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_packaging__qty
|
||||||
|
msgid "The total number of products you can have per pallet or box."
|
||||||
|
msgstr "El numero total de productos que puede tener por palé o caja."
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_tags
|
||||||
|
msgid "To print"
|
||||||
|
msgstr "Para imprimir"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__to_print
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__to_print
|
||||||
|
msgid "To print label"
|
||||||
|
msgstr "Pendiente de imprimir etiqueta"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_updated
|
||||||
|
msgid "To update sales price"
|
||||||
|
msgstr "Pendiente de actualizar PVP"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Triple discount"
|
||||||
|
msgstr "Triple decuento"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.actions.server,name:product_laosa.action_product_calculate_theoritical_price
|
||||||
|
msgid "Update Sales Price"
|
||||||
|
msgstr "Actualizar PVP"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Without discounts"
|
||||||
|
msgstr "Sin descuentos"
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_wordpress_laosa
|
||||||
|
msgid "WordPress"
|
||||||
|
msgstr "WordPress"
|
||||||
|
|
@ -0,0 +1,304 @@
|
||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * product_laosa
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 12.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-03-26 09:39+0000\n"
|
||||||
|
"PO-Revision-Date: 2024-03-26 09:39+0000\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_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price_automatic
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price_automatic
|
||||||
|
msgid "Automatic Sale Price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price_automatic
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price_automatic
|
||||||
|
msgid "Automatic computation of the PVP from the cost price and the rate defined in the configuration."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_pricelist_item__base
|
||||||
|
msgid "Base price for computation.\n"
|
||||||
|
"Public Price: The base price will be the Sale/public Price.\n"
|
||||||
|
"Cost Price : The base price will be the cost price.\n"
|
||||||
|
"Other Pricelist : Computation of the base price based on another Pricelist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_pricelist_item__base
|
||||||
|
msgid "Based on"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__last_purchase_price_compute_type
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__last_purchase_price_compute_type
|
||||||
|
msgid "Choose whether discounts should influence the calculation of the last purchase price. Select Never update for manual configuration of cost and sale prices.\n"
|
||||||
|
"\n"
|
||||||
|
"* Without discounts: does not take into account discounts when updating the last purchase price.\n"
|
||||||
|
"* First discount: take into account only first discount when updating the last purchase price.\n"
|
||||||
|
"* Triple discount: take into account all discounts when updating the last purchase price. Needs \"Purchase Triple Discount\" OCA module.\n"
|
||||||
|
"* Manual update: Select this for manual configuration of cost and sale price. The sales price will not be calculated automatically."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_res_config_settings
|
||||||
|
msgid "Config Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_packaging__qty
|
||||||
|
msgid "Contained Quantity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Cost"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Cost Price Tax Included"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.res_config_settings_view_form_pricelists
|
||||||
|
msgid "Default pricelists for Coops"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Double discount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "First discount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_print_label_date
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_print_label_date
|
||||||
|
msgid "Last Print Label Date"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_purchase_price
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_purchase_price
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_list_price_auto
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Last purchase price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__last_purchase_price_compute_type
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__last_purchase_price_compute_type
|
||||||
|
msgid "Last purchase price calculation type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price_updated
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price_updated
|
||||||
|
msgid "Last purchase price updated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template_tag__image
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Manual update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__name_wordpress
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__name_wordpress
|
||||||
|
msgid "Name for WordPress"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: code:addons/product_laosa/models/product_template.py:55
|
||||||
|
#, python-format
|
||||||
|
msgid "Not found a valid pricelist to compute sale price. Check configuration in General Settings."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Other Pricelist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price
|
||||||
|
msgid "Price calculated according to the configured pricelist, including VAT."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_pricelist
|
||||||
|
msgid "Pricelist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_pricelist_item
|
||||||
|
msgid "Pricelist Item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_res_config_settings__product_pricelist_automatic
|
||||||
|
msgid "Pricelist applied to automatic calculation of sales price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_res_company__product_pricelist_automatic
|
||||||
|
msgid "Pricelist applied to the automatic selling price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_product
|
||||||
|
msgid "Product"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_packaging
|
||||||
|
msgid "Product Packaging"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_template_tag
|
||||||
|
msgid "Product Tag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_product_template
|
||||||
|
msgid "Product Template"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_tags
|
||||||
|
msgid "Products that have changed their sales price and no label has been printed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_updated
|
||||||
|
msgid "Products that have recently changed their cost price and have not updated their selling price."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.pricelist.item,base:0
|
||||||
|
msgid "Public Price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__is_wordpress_public
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__is_wordpress_public
|
||||||
|
msgid "Publish on WordPress"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_res_company__product_pricelist_automatic
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_res_config_settings__product_pricelist_automatic
|
||||||
|
msgid "Rate that applies to all products that update the selling price automatically."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_ir_actions_report
|
||||||
|
msgid "Report Action"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__list_price
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__list_price
|
||||||
|
msgid "Sale price with VAT"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_list_price_auto
|
||||||
|
msgid "Sale price."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template_tag__sequence
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model,name:product_laosa.model_stock_move
|
||||||
|
msgid "Stock Move"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__list_price_updated
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__list_price_updated
|
||||||
|
msgid "The last cost price has been updated and you need to update the selling price in the database, shelves and scales."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__last_purchase_price
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__last_purchase_price
|
||||||
|
msgid "The last price at which the product was purchased. It is used as the base price field for calculating the product sale price."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_product__to_print
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_template__to_print
|
||||||
|
msgid "The sale price has been updated on this product and needs to be updated on the shelf."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,help:product_laosa.field_product_packaging__qty
|
||||||
|
msgid "The total number of products you can have per pallet or box."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_tags
|
||||||
|
msgid "To print"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_product__to_print
|
||||||
|
#: model:ir.model.fields,field_description:product_laosa.field_product_template__to_print
|
||||||
|
msgid "To print label"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.view_product_search_form_inherit_updated
|
||||||
|
msgid "To update sales price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Triple discount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model:ir.actions.server,name:product_laosa.action_product_calculate_theoritical_price
|
||||||
|
msgid "Update Sales Price"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: selection:product.template,last_purchase_price_compute_type:0
|
||||||
|
msgid "Without discounts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: product_laosa
|
||||||
|
#: model_terms:ir.ui.view,arch_db:product_laosa.product_view_inherit_wordpress_laosa
|
||||||
|
msgid "WordPress"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
5
product_sale_price_from_pricelist/models/__init__.py
Normal file
5
product_sale_price_from_pricelist/models/__init__.py
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
from . import product_pricelist
|
||||||
|
from . import product_pricelist_item
|
||||||
|
from . import product_template
|
||||||
|
from . import res_config
|
||||||
|
from . import stock_move
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Copyright (C) 2020: Criptomart (https://criptomart.net)
|
||||||
|
# @author Santi Noreña (<santi@criptomart.net>)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
# import logging
|
||||||
|
|
||||||
|
from odoo import api, models
|
||||||
|
|
||||||
|
# _logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ProductPricelist(models.Model):
|
||||||
|
_inherit = "product.pricelist"
|
||||||
|
|
||||||
|
def _compute_price_rule(self, products, qty, uom=None, date=False, **kwargs):
|
||||||
|
ProductPricelistItem = self.env["product.pricelist.item"]
|
||||||
|
ProductProduct = self.env["product.product"]
|
||||||
|
res = super()._compute_price_rule(products, date=date, qty=1)
|
||||||
|
new_res = res.copy()
|
||||||
|
item_id = []
|
||||||
|
for product_id, values in res.items():
|
||||||
|
if values[1]:
|
||||||
|
item_id = values[1]
|
||||||
|
if item_id:
|
||||||
|
item = ProductPricelistItem.browse(item_id)
|
||||||
|
if item.base == "last_purchase_price":
|
||||||
|
price = ProductProduct.browse(product_id).last_purchase_price
|
||||||
|
price = (price - (price * (item.price_discount / 100))) or 0.0
|
||||||
|
new_res[product_id] = (price, item_id)
|
||||||
|
return new_res
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Copyright (C) 2020: Criptomart (https://criptomart.net)
|
||||||
|
# @author Santi Noreña (<santi@criptomart.net>)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ProductPricelistItem(models.Model):
|
||||||
|
_inherit = "product.pricelist.item"
|
||||||
|
|
||||||
|
base = fields.Selection(
|
||||||
|
selection_add=[("last_purchase_price", "Last purchase price")],
|
||||||
|
ondelete={"last_purchase_price": "set default"},
|
||||||
|
)
|
||||||
90
product_sale_price_from_pricelist/models/product_template.py
Normal file
90
product_sale_price_from_pricelist/models/product_template.py
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Copyright (C) 2020: Criptomart (https://criptomart.net)
|
||||||
|
# @author Santi Noreña (<santi@criptomart.net>)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import exceptions, models, fields, api, _
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ProductTemplate(models.Model):
|
||||||
|
_inherit = "product.template"
|
||||||
|
|
||||||
|
last_purchase_price_updated = fields.Boolean(
|
||||||
|
string="Last purchase price updated",
|
||||||
|
help="The last purchase price has been updated and you need to update the selling price in the database, shelves and scales.",
|
||||||
|
default=False,
|
||||||
|
company_dependent=True,
|
||||||
|
)
|
||||||
|
list_price_theoritical = fields.Float(
|
||||||
|
"Theoritical price",
|
||||||
|
readonly=True,
|
||||||
|
company_dependent=True,
|
||||||
|
)
|
||||||
|
last_purchase_price = fields.Float(
|
||||||
|
string="Last purchase price",
|
||||||
|
help="The last price at which the product was purchased. It is used as the base price field for calculating the product sale price.",
|
||||||
|
readonly=True,
|
||||||
|
digits="Product Price",
|
||||||
|
company_dependent=True,
|
||||||
|
)
|
||||||
|
last_purchase_price_compute_type = fields.Selection(
|
||||||
|
[
|
||||||
|
("without_discounts", "Without discounts"),
|
||||||
|
("with_discount", "First discount"),
|
||||||
|
("with_two_discounts", "Double discount"),
|
||||||
|
("with_three_discounts", "Triple discount"),
|
||||||
|
("manual_update", "Manual update"),
|
||||||
|
],
|
||||||
|
string="Last purchase price calculation type",
|
||||||
|
help="Choose whether discounts should influence the calculation of the last purchase price. Select Never update for manual configuration of cost and sale prices.\n"
|
||||||
|
"\n* Without discounts: does not take into account discounts when updating the last purchase price.\n"
|
||||||
|
"* First discount: take into account only first discount when updating the last purchase price.\n"
|
||||||
|
'* Triple discount: take into account all discounts when updating the last purchase price. Needs "Purchase Triple Discount" OCA module.\n'
|
||||||
|
"* Manual update: Select this for manual configuration of cost and sale price. The sales price will not be calculated automatically.",
|
||||||
|
default="without_discounts",
|
||||||
|
required=True,
|
||||||
|
company_dependent=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _compute_theoritical_price(self):
|
||||||
|
pricelist_obj = self.env["product.pricelist"]
|
||||||
|
pricelist_id = (
|
||||||
|
self.env["ir.config_parameter"]
|
||||||
|
.sudo()
|
||||||
|
.get_param("product_sale_price_from_pricelist.product_pricelist_automatic")
|
||||||
|
or False
|
||||||
|
)
|
||||||
|
pricelist = pricelist_obj.browse(int(pricelist_id))
|
||||||
|
if pricelist:
|
||||||
|
for template in self:
|
||||||
|
_logger.debug(("company: %s" % self.env.company))
|
||||||
|
_logger.debug("compute pre price : %s" % template.last_purchase_price)
|
||||||
|
|
||||||
|
if (
|
||||||
|
template.name
|
||||||
|
and template.id
|
||||||
|
and template.product_variant_id
|
||||||
|
and template.last_purchase_price_compute_type != "manual_update"
|
||||||
|
):
|
||||||
|
partial_price = template.product_variant_id._get_price(
|
||||||
|
qty=1, pricelist=pricelist
|
||||||
|
)
|
||||||
|
_logger.debug("partial price : %s" % partial_price)
|
||||||
|
template.list_price_theoritical = partial_price["value"]
|
||||||
|
template.last_purchase_price_updated = True
|
||||||
|
_logger.debug("final price : %s" % template.list_price_theoritical)
|
||||||
|
else:
|
||||||
|
raise UserError(
|
||||||
|
_(
|
||||||
|
"Not found a valid pricelist to compute sale price. Check configuration in General Settings."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def action_update_list_price(self):
|
||||||
|
for template in self:
|
||||||
|
template.list_price = template.list_price_theoritical
|
||||||
|
template.last_purchase_price_updated = False
|
||||||
11
product_sale_price_from_pricelist/models/res_config.py
Normal file
11
product_sale_price_from_pricelist/models/res_config.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
class ResConfigSettings(models.TransientModel):
|
||||||
|
_inherit = "res.config.settings"
|
||||||
|
|
||||||
|
product_pricelist_automatic = fields.Many2one(
|
||||||
|
comodel_name="product.pricelist",
|
||||||
|
string="Pricelist applied to automatic calculation of sales price",
|
||||||
|
config_parameter="product_sale_price_from_pricelist.product_pricelist_automatic",
|
||||||
|
)
|
||||||
65
product_sale_price_from_pricelist/models/stock_move.py
Normal file
65
product_sale_price_from_pricelist/models/stock_move.py
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Copyright 2016-2019 Akretion (http://www.akretion.com/)
|
||||||
|
# Copyright 2020 Criptomart <tech@criptomart.net>
|
||||||
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
# @author Santi Noreña (<santi@criptomart.net>)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import math
|
||||||
|
|
||||||
|
from odoo import exceptions, models, fields, api, _
|
||||||
|
from odoo.tools import float_is_zero, float_round, float_compare
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class StockMove(models.Model):
|
||||||
|
_inherit = "stock.move"
|
||||||
|
|
||||||
|
def product_price_update_before_done(self):
|
||||||
|
super(StockMove, self).product_price_update_before_done()
|
||||||
|
for move in self.filtered(lambda move: move.location_id.usage == "supplier"):
|
||||||
|
if (
|
||||||
|
move.product_id.last_purchase_price_compute_type
|
||||||
|
== "with_three_discounts"
|
||||||
|
):
|
||||||
|
price_updated = float_round(
|
||||||
|
move.purchase_line_id.price_subtotal
|
||||||
|
/ move.purchase_line_id.product_qty,
|
||||||
|
precision_digits=2,
|
||||||
|
)
|
||||||
|
elif move.product_id.last_purchase_price_compute_type == "with_discount":
|
||||||
|
price_updated = float_round(
|
||||||
|
move.purchase_line_id.price_unit
|
||||||
|
* (1 - move.purchase_line_id.discount / 100),
|
||||||
|
precision_digits=2,
|
||||||
|
)
|
||||||
|
elif (
|
||||||
|
move.product_id.last_purchase_price_compute_type == "with_two_discounts"
|
||||||
|
):
|
||||||
|
price_updated = float_round(
|
||||||
|
move.purchase_line_id.price_unit
|
||||||
|
* (1 - move.purchase_line_id.discount / 100)
|
||||||
|
* (1 - move.purchase_line_id.discount2 / 100),
|
||||||
|
precision_digits=2,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
price_updated = move.purchase_line_id.price_unit
|
||||||
|
|
||||||
|
if float_compare(
|
||||||
|
move.product_id.last_purchase_price, price_updated, precision_digits=2
|
||||||
|
) and not float_is_zero(move.quantity_done, precision_digits=3):
|
||||||
|
_logger.info(
|
||||||
|
"Update last_purchase_price: %s for product %s Previous price: %s"
|
||||||
|
% (
|
||||||
|
price_updated,
|
||||||
|
move.product_id.default_code,
|
||||||
|
move.product_id.last_purchase_price,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
move.product_id.with_company(move.company_id).last_purchase_price = (
|
||||||
|
price_updated
|
||||||
|
)
|
||||||
|
move.product_id.with_company(
|
||||||
|
move.company_id
|
||||||
|
).product_tmpl_id._compute_theoritical_price()
|
||||||
22
product_sale_price_from_pricelist/views/actions.xml
Normal file
22
product_sale_price_from_pricelist/views/actions.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2020-Today: La Osa (<https://laosa.coop/>)
|
||||||
|
@author: Criptomart (https://criptomart.net)
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<!-- Add action entry in the Action Menu for calculate sale price in Products -->
|
||||||
|
<record id="action_product_calculate_theoritical_price" model="ir.actions.server">
|
||||||
|
<field name="name">Update Sales Price</field>
|
||||||
|
<field name="model_id" ref="product.model_product_template"/>
|
||||||
|
<field name="binding_model_id" ref="product.model_product_template"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
records.action_update_list_price()
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
|
|
||||||
75
product_sale_price_from_pricelist/views/product_view.xml
Normal file
75
product_sale_price_from_pricelist/views/product_view.xml
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<!-- list automatic price tick in product sheet -->
|
||||||
|
<record model="ir.ui.view" id="product_view_inherit_list_price_auto">
|
||||||
|
<field name="name">product.list.price.automatic.form</field>
|
||||||
|
<field name="model">product.template</field>
|
||||||
|
<field name="type">form</field>
|
||||||
|
<field name="inherit_id" ref="product.product_template_form_view" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//label[@for='list_price']" position="before">
|
||||||
|
<field name="last_purchase_price"
|
||||||
|
widget="monetary"
|
||||||
|
options="{'currency_field': 'currency_id', 'field_digits': True}"
|
||||||
|
attrs="{'readonly': 0}"
|
||||||
|
/>
|
||||||
|
<field name="last_purchase_price_compute_type" />
|
||||||
|
<field name="list_price_theoritical" />
|
||||||
|
</xpath>
|
||||||
|
<field name="standard_price" position="attributes">
|
||||||
|
<attribute name="attrs">
|
||||||
|
{'readonly':[('last_purchase_price_compute_type','!=','manual_update')]}
|
||||||
|
</attribute>
|
||||||
|
</field>
|
||||||
|
<group name="group_standard_price" position="after">
|
||||||
|
<group></group>
|
||||||
|
<group name="label_info" string="Label Info">
|
||||||
|
<field name="last_purchase_price_updated" />
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="res_config_settings_view_form_pricelists" model="ir.ui.view">
|
||||||
|
<field name="name">product.print.supermarket.res.config.settings.form</field>
|
||||||
|
<field name="model">res.config.settings</field>
|
||||||
|
<field name="priority" eval="100" />
|
||||||
|
<field name="inherit_id" ref="sale.res_config_settings_view_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//div[@id='pricing_setting_container']" position="inside">
|
||||||
|
<div
|
||||||
|
class="col-12 col-lg-6 o_setting_box"
|
||||||
|
name="supermarket_settigs_container"
|
||||||
|
>
|
||||||
|
<div class="o_setting_right_pane">
|
||||||
|
<label for="product_pricelist_automatic" string="Sale Price Pricelist" />
|
||||||
|
<field name="product_pricelist_automatic" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!--Filter
|
||||||
|
for products that should update its sales price -->
|
||||||
|
<record id="view_product_search_form_inherit_updated" model="ir.ui.view">
|
||||||
|
<field name="name">view.product.search.form.inherit.updated</field>
|
||||||
|
<field name="model">product.template</field>
|
||||||
|
<field name="inherit_id" ref="product.product_template_search_view" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//filter[@name='services']" position="before">
|
||||||
|
<separator />
|
||||||
|
<filter string="To update sales price"
|
||||||
|
name="products_updated_filter"
|
||||||
|
domain="[('last_purchase_price_updated', '=', True), ('last_purchase_price_compute_type', '!=', 'manual_update')]"
|
||||||
|
help="Products that have recently changed their cost price and have not updated their selling price."
|
||||||
|
icon="terp-project"
|
||||||
|
/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue