Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions sale_ux/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
from . import res_partner
from . import crm_team
from . import ir_default
from . import fields
17 changes: 17 additions & 0 deletions sale_ux/models/fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from odoo import fields

_original_get_company_dependent_fallback = fields.Field.get_company_dependent_fallback


def _patched_get_company_dependent_fallback(self, records):
ctx = dict(records.env.context)
if records._name == "res.partner" and records.ids and len(records) == 1:
params = ctx.get("params", {})
params = dict(params)
params["resId"] = records.id
ctx["params"] = params

return _original_get_company_dependent_fallback(self, records.with_context(**ctx))


fields.Field.get_company_dependent_fallback = _patched_get_company_dependent_fallback
18 changes: 14 additions & 4 deletions sale_ux/models/ir_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,38 @@ class IrDefault(models.Model):
def _get_model_defaults(self, model_name, condition=False):
res = super()._get_model_defaults(model_name, condition)
if model_name == "res.partner":
specific_property_pricelist = self.get_default_pricelist()
partner = None
params = self.env.context.get("params")
if params and params.get("resId"):
partner = self.env["res.partner"].browse(params["resId"])
if not partner.exists():
partner = None
specific_property_pricelist = self.get_default_pricelist(partner)
if specific_property_pricelist:
res["specific_property_product_pricelist"] = specific_property_pricelist
return res

def get_default_pricelist(self):
def get_default_pricelist(self, partner=None):
# Si es publico/portal evitamos el método
if self.env.user._is_public():
return
field = self.env["ir.model.fields"]._get("res.partner", "specific_property_product_pricelist")
# Si se pasa un registro de partner, usar su usuario creador
user_id = self.env.context.get("uid", self.env.user.id)
if partner and hasattr(partner, "create_uid") and partner.create_uid:
user_id = partner.create_uid.id
default = (
self.env["ir.default"]
.sudo()
.search(
[
("field_id", "=", field.id),
("user_id", "=", self.env.context.get("uid", self.env.user.id)),
("user_id", "in", [user_id, False]),
("json_value", "!=", False),
("company_id", "in", [self.env.company.id, False]),
],
limit=1,
order="company_id desc",
order="user_id asc, company_id desc",
)
)
return json.loads(default.json_value) if default else None