61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.addons.sale.controllers.portal import CustomerPortal
|
|
from odoo.addons.portal.controllers.portal import pager as portal_pager
|
|
|
|
|
|
class CustomerPortalInherit(CustomerPortal):
|
|
|
|
def _prepare_quotations_domain(self, partner):
|
|
domain = super()._prepare_quotations_domain(partner)
|
|
return domain
|
|
|
|
def _prepare_sale_portal_rendering_values(self, order, **kwargs):
|
|
values = super()._prepare_sale_portal_rendering_values(order, **kwargs)
|
|
values["enforce_customer_reference"] = (
|
|
request.env["ir.config_parameter"]
|
|
.sudo()
|
|
.get_param(
|
|
"sale_mandatory_customer_reference.enforce_customer_reference", False
|
|
)
|
|
)
|
|
return values
|
|
|
|
@http.route(
|
|
["/my/orders/<int:order_id>/update_reference"],
|
|
type="json",
|
|
auth="public",
|
|
website=True,
|
|
)
|
|
def portal_update_sale_reference(
|
|
self, order_id, reference, access_token=None, **kw
|
|
):
|
|
try:
|
|
order = request.env["sale.order"].browse(order_id)
|
|
if not order.exists():
|
|
return {"error": "Order not found"}
|
|
|
|
# Try user access first
|
|
try:
|
|
# These will raise if access denied
|
|
order.check_access_rights("write")
|
|
order.check_access_rule("write")
|
|
except Exception:
|
|
# If user access fails, try token access
|
|
if access_token:
|
|
order = request.env["sale.order"].sudo().browse(order_id)
|
|
try:
|
|
order.check_access_token(access_token)
|
|
except Exception:
|
|
return {"error": "Access Denied"}
|
|
else:
|
|
return {"error": "Access Denied"}
|
|
|
|
if order.state not in ("draft", "sent"):
|
|
return {"error": "Order cannot be modified in its current state"}
|
|
|
|
order.write({"client_order_ref": reference})
|
|
return {"success": True}
|
|
|
|
except Exception as e:
|
|
return {"error": str(e)}
|