Skip to content

Commit

Permalink
[IMP] website_sale_cart_with_unconfirmed_budget: Remove fork
Browse files Browse the repository at this point in the history
  • Loading branch information
unaiberis committed Oct 18, 2024
1 parent a321ca6 commit 0b55b55
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 32 deletions.
135 changes: 123 additions & 12 deletions website_sale_cart_with_unconfirmed_budget/controllers/website_sale.py
Original file line number Diff line number Diff line change
@@ -1,35 +1,125 @@
from odoo import fields, http
import logging

from odoo import SUPERUSER_ID, fields, http
from odoo.http import request

from odoo.addons.website_sale.controllers.main import WebsiteSale

_logger = logging.getLogger(__name__)


class WebsiteSale(WebsiteSale):

@http.route(["/shop/cart"], type="http", auth="public", website=True, sitemap=False)
def cart(self, access_token=None, revive="", **post):
order = request.website.sale_get_order()
if order and order.state != "draft":
_logger.info(
"Entrando a la función cart con access_token: %s y revive: %s",
access_token,
revive,
)

SaleOrder = request.env["sale.order"].sudo()
sale_order_id = request.session.get("sale_order_id")
_logger.debug("ID del pedido en la sesión: %s", sale_order_id)

if sale_order_id:
sale_order_sudo = SaleOrder.browse(sale_order_id).exists()
_logger.debug("Pedido encontrado en la sesión: %s", sale_order_sudo)
elif request.env.user and not request.env.user._is_public():
sale_order_sudo = request.env.user.partner_id.last_website_so_id
_logger.debug("Pedido encontrado para el usuario: %s", sale_order_sudo)

if sale_order_sudo:
available_pricelists = self.get_pricelist_available()
_logger.debug("Listas de precios disponibles: %s", available_pricelists)

if sale_order_sudo.pricelist_id not in available_pricelists:
_logger.warning(
"La lista de precios del pedido no está disponible."
)
sale_order_sudo = None
else:
fpos = (
sale_order_sudo.env["account.fiscal.position"]
.with_company(sale_order_sudo.company_id)
._get_fiscal_position(
sale_order_sudo.partner_id,
delivery=sale_order_sudo.partner_shipping_id,
)
)
_logger.debug("Posición fiscal obtenida: %s", fpos)
if fpos.id != sale_order_sudo.fiscal_position_id.id:
_logger.warning(
"La posición fiscal ha cambiado, invalidando el pedido."
)
sale_order_sudo = None
else:
sale_order_sudo = SaleOrder
_logger.debug("No se encontró un pedido previo, se creará uno nuevo.")

if sale_order_sudo and sale_order_sudo.state in (
"pending",
"authorized",
"done",
):
_logger.warning(
"El pedido está en un estado no válido: %s", sale_order_sudo.state
)
sale_order_sudo = None

if sale_order_sudo and sale_order_sudo.state not in ["draft", "sent"]:
_logger.info(
"El pedido tiene un estado diferente de 'draft' y 'sent',\
reiniciando el ID del pedido en la sesión."
)
request.session["sale_order_id"] = None
order = request.website.sale_get_order()
sale_order_sudo = SaleOrder

if not sale_order_sudo:
partner_sudo = request.env.user.partner_id
_logger.info("Creando un nuevo pedido para el socio: %s", partner_sudo.name)
so_data = request.env["sale.order"]._prepare_sale_order_values(partner_sudo)
sale_order_sudo = SaleOrder.with_user(SUPERUSER_ID).create(so_data)

request.session["website_sale_cart_quantity"] = order.cart_quantity
request.session["sale_order_id"] = sale_order_sudo.id
request.session["website_sale_cart_quantity"] = (
sale_order_sudo.cart_quantity
)
sale_order_sudo = sale_order_sudo.with_user(request.env.user).sudo()

_logger.debug(
"Cantidad del carrito antes de la actualización: %s",
request.session.get("website_sale_cart_quantity", 0),
)
request.session["website_sale_cart_quantity"] = sale_order_sudo.cart_quantity

values = {
"website_sale_order": order,
"website_sale_order": sale_order_sudo,
"date": fields.Date.today(),
"suggested_products": [],
}

if order:
values.update(order._get_website_sale_extra_values())
order.order_line.filtered(
if sale_order_sudo:
_logger.info("Actualizando valores adicionales para el pedido.")
values.update(sale_order_sudo._get_website_sale_extra_values())

_logger.debug(
"Líneas del pedido antes de limpiar: %s", sale_order_sudo.order_line
)
sale_order_sudo.order_line.filtered(
lambda line: line.product_id and not line.product_id.active
).unlink()
values["suggested_products"] = order._cart_accessories()
values.update(self._get_express_shop_payment_values(order))
_logger.info("Líneas inactivas eliminadas del pedido.")

_logger.info("Calculando productos sugeridos para el pedido.")
values["suggested_products"] = sale_order_sudo._cart_accessories()
values.update(self._get_express_shop_payment_values(sale_order_sudo))

response = super().cart(access_token=access_token, revive=revive, **post)
response.qcontext.update(values)

return request.render("website_sale.cart", values)
_logger.info("Valores de respuesta actualizados: %s", values)
return response

@http.route(
["/shop/cart/update"],
Expand All @@ -48,6 +138,13 @@ def cart_update(
express=False,
**kwargs
):
_logger.info(
"Actualizando carrito con producto_id: %s, add_qty: %s, set_qty: %s",
product_id,
add_qty,
set_qty,
)

sale_order = super().cart_update(
product_id=product_id,
add_qty=add_qty,
Expand All @@ -59,8 +156,10 @@ def cart_update(
)

request.session["website_sale_cart_quantity"] = sale_order.cart_quantity
_logger.info("Cantidad del carrito actualizada a: %s", sale_order.cart_quantity)

if express:
_logger.info("Redirigiendo a la página de checkout en modo expreso.")
return request.redirect("/shop/checkout?express=1")

return request.redirect("/shop/cart")
Expand All @@ -84,6 +183,15 @@ def cart_update_json(
no_variant_attribute_values=None,
**kw
):
_logger.info(
"Actualizando carrito (JSON) con producto_id: %s,\
line_id: %s, add_qty: %s, set_qty: %s",
product_id,
line_id,
add_qty,
set_qty,
)

values = super().cart_update_json(
product_id=product_id,
line_id=line_id,
Expand All @@ -96,5 +204,8 @@ def cart_update_json(
)

request.session["website_sale_cart_quantity"] = values.get("cart_quantity", 0)
_logger.info(
"Cantidad del carrito actualizada a: %s", values.get("cart_quantity", 0)
)

return values
49 changes: 29 additions & 20 deletions website_sale_cart_with_unconfirmed_budget/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,34 @@ class SaleOrder(models.Model):
_inherit = "sale.order"

@api.model
def create(self, vals):
unconfirmed_budget = self.env["sale.order"].search(
[
("state", "=", "draft"),
("partner_id", "=", vals.get("partner_id")),
],
limit=1,
)
def create(self, vals_list):
if isinstance(vals_list, dict):
vals_list = [vals_list]

if unconfirmed_budget:
unconfirmed_budget.order_line.unlink()
for line in vals.get("order_line", []):
unconfirmed_budget.order_line.create(
{
"order_id": unconfirmed_budget.id,
"product_id": line[2]["product_id"],
"product_uom_qty": line[2]["product_uom_qty"],
}
)
return unconfirmed_budget
created_orders = self.browse()

return super().create(vals)
for vals in vals_list:
unconfirmed_budget = self.env["sale.order"].search(
[
("state", "=", "draft"),
("partner_id", "=", vals.get("partner_id")),
],
limit=1,
)

if unconfirmed_budget:
unconfirmed_budget.order_line.unlink()
for line in vals.get("order_line", []):
unconfirmed_budget.order_line.create(
{
"order_id": unconfirmed_budget.id,
"product_id": line[2]["product_id"],
"product_uom_qty": line[2]["product_uom_qty"],
}
)
created_orders += unconfirmed_budget
else:
created_order = super().create(vals)
created_orders += created_order

return created_orders

0 comments on commit 0b55b55

Please sign in to comment.