Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADD] module product_pricelist_supplier_info #326

Open
wants to merge 2 commits into
base: 14.0
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
[ADD] module product_pricelist_supplier_info
  • Loading branch information
sebastienbeau committed Mar 5, 2025
commit 905dbbf0d21fafa684585b57a0f98cf46d92b15e
1 change: 1 addition & 0 deletions product_pricelist_supplier_info/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
27 changes: 27 additions & 0 deletions product_pricelist_supplier_info/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Copyright 2025 Akretion (https://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).


{
"name": "Product Pricelist Supplier Info",
"summary": "Show supplier info on pricelist item",
"version": "14.0.1.0.0",
"development_status": "Alpha",
"category": "Uncategorized",
"website": "www.akretion.com",
"author": " Akretion",
"license": "AGPL-3",
"external_dependencies": {
"python": [],
"bin": [],
},
"depends": [
"purchase",
"sale",
"product_supplierinfo_per_attribute_value",
"product_pricelist_per_attribute_value",
],
"data": ["views/product_pricelist_item_view.xml"],
"demo": [],
}
54 changes: 54 additions & 0 deletions product_pricelist_supplier_info/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_pricelist_supplier_info
#
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_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__display_name
msgid "Display Name"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__id
msgid "ID"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item____last_update
msgid "Last Modified on"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_info
msgid "Main Supplier Info"
msgstr "Autre Prix"

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_margin
msgid "Main Supplier Margin"
msgstr "Marge"

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_price
msgid "Main Supplier Price"
msgstr "Prix Fournisseur"

#. module: product_pricelist_supplier_info
#: model:ir.model,name:product_pricelist_supplier_info.model_product_pricelist_item
msgid "Pricelist Rule"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_partner_id
msgid "Supplier"
msgstr "Fournisseur"
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_pricelist_supplier_info
#
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_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__display_name
msgid "Display Name"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__id
msgid "ID"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item____last_update
msgid "Last Modified on"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_info
msgid "Main Supplier Info"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_margin
msgid "Main Supplier Margin"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_price
msgid "Main Supplier Price"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model,name:product_pricelist_supplier_info.model_product_pricelist_item
msgid "Pricelist Rule"
msgstr ""

#. module: product_pricelist_supplier_info
#: model:ir.model.fields,field_description:product_pricelist_supplier_info.field_product_pricelist_item__main_supplier_partner_id
msgid "Supplier"
msgstr ""
1 change: 1 addition & 0 deletions product_pricelist_supplier_info/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import product_pricelist_item
84 changes: 84 additions & 0 deletions product_pricelist_supplier_info/models/product_pricelist_item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Copyright 2025 Akretion (https://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields, models


class ProductPricelistItem(models.Model):
_inherit = "product.pricelist.item"

main_supplier_partner_id = fields.Many2one(
"res.partner", "Supplier", compute="_compute_supplier_info"
)
main_supplier_margin = fields.Float(compute="_compute_supplier_info")
main_supplier_price = fields.Float(compute="_compute_supplier_info")
main_supplier_info = fields.Text(compute="_compute_supplier_info")

def _prepare_info_name(self, seller):
tmpl_values = seller.product_id.product_template_attribute_value_ids
values = (
tmpl_values.product_attribute_value_id or seller.product_attribute_value_ids
)
if values:
return ", ".join(values.mapped("name"))
else:
return "_"

@api.depends(
"product_tmpl_id.seller_ids.price",
"product_tmpl_id.seller_ids.name",
"product_tmpl_id.seller_ids.min_qty",
"product_tmpl_id.seller_ids.date_start",
"product_tmpl_id.seller_ids.date_end",
"product_tmpl_id.seller_ids.sequence",
"product_tmpl_id.seller_ids.product_id",
"product_tmpl_id.seller_ids.product_attribute_value_ids", # in a glue module ?
)
def _compute_supplier_info(self):
# Following code is not optimal when having a lot of variante
# But it's simple code ;)
for record in self:
sellers = self.env["product.supplierinfo"]
if record.product_id:
sellers = record.product_id._select_seller(quantity=record.min_quantity)
elif record.product_tmpl_id:
for variant in record.product_tmpl_id.product_variant_ids:
if record._is_applicable_for(variant, record.min_quantity):
sellers |= variant._select_seller(quantity=record.min_quantity)
if not sellers:
record.update(
{
"main_supplier_partner_id": None,
"main_supplier_margin": 0,
"main_supplier_price": 0,
"main_supplier_info": "",
}
)
else:
sellers = sellers.sorted("price", reverse=True)
seller = sellers[0]
if len(sellers) > 1 and seller.price > sellers[-1].price:
info = "- " + "\n- ".join(
[
(
format(seller.price, "g")
+ f" : {self._prepare_info_name(seller)}"
)
for seller in sellers
]
)
else:
info = ""
if seller.price:
margin = (record.fixed_price - seller.price) / record.fixed_price
else:
margin = 0
record.update(
{
"main_supplier_partner_id": seller.name.id,
"main_supplier_margin": margin,
"main_supplier_price": seller.price,
"main_supplier_info": info,
}
)
13 changes: 13 additions & 0 deletions product_pricelist_supplier_info/models/product_supplierinfo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2025 Akretion (https://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).


from odoo import _, api, fields, models


class ProductSupplierinfo(models.Model):
_inherit = 'product.supplierinfo'



1 change: 1 addition & 0 deletions product_pricelist_supplier_info/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_price
Loading
Loading