Skip to content

Commit

Permalink
[ADD] website_sale_menu_top_user_selling: New module
Browse files Browse the repository at this point in the history
TT52287
  • Loading branch information
pilarvargas-tecnativa committed Dec 20, 2024
1 parent 5b6783b commit 816d763
Show file tree
Hide file tree
Showing 14 changed files with 629 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/website_sale_menu_top_user_selling/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
78 changes: 78 additions & 0 deletions website_sale_menu_top_user_selling/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
==================================
Website Sale Menu Top User Selling
==================================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:72c89f7b3b6be4bf5e26518bbcc2d2ddab1c32e8c6d51624dc39914ef20e6598
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fe--commerce-lightgray.png?logo=github
:target: https://github.com/OCA/e-commerce/tree/15.0/website_sale_menu_top_user_selling
:alt: OCA/e-commerce
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/e-commerce-15-0/e-commerce-15-0-website_sale_menu_top_user_selling
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/e-commerce&target_branch=15.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|



**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/e-commerce/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/e-commerce/issues/new?body=module:%20website_sale_menu_top_user_selling%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Tecnativa

Contributors
~~~~~~~~~~~~

* `Tecnativa <https://www.tecnativa.com>`_

* Pilar Vargas

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/e-commerce <https://github.com/OCA/e-commerce/tree/15.0/website_sale_menu_top_user_selling>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions website_sale_menu_top_user_selling/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import controllers
from . import models
15 changes: 15 additions & 0 deletions website_sale_menu_top_user_selling/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2024 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Website Sale Menu Top User Selling",
"summary": "Displays the products most sold by the user in the e-commerce.",
"version": "15.0.1.0.0",
"category": "Website",
"website": "https://github.com/OCA/e-commerce",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": ["website_sale"],
"data": ["views/templates.xml"],
}
1 change: 1 addition & 0 deletions website_sale_menu_top_user_selling/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
67 changes: 67 additions & 0 deletions website_sale_menu_top_user_selling/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from odoo import http
from odoo.http import request

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


class WebsiteSale(WebsiteSale):
@http.route(
["/shop/top_selling_products", "/shop/top_selling_products/page/<int:page>"],
type="http",
auth="public",
website=True,
)
def user_top_products(self, page=0, ppg=False, **kwargs):
if request.env.user.has_group("base.group_public"):
return request.redirect("/web/login")
# Obtener el contexto base del método 'shop'
shop_context = self.shop(page=page, ppg=ppg, **kwargs)
# Obtener los productos más comprados por el usuario
product_ids = (
request.env["sale.order.line"]
.sudo()
.read_group(
[("order_id.partner_id", "=", request.env.user.partner_id.id)],
["product_id"],
["product_id"],
)
)
top_product_ids = [
rec["product_id"][0] for rec in product_ids if rec["product_id"]
]
templates = (
request.env["product.template"]
.sudo()
.search([("product_variant_ids", "in", top_product_ids)])
)
# Establecer productos por página y paginador
ppg = ppg or 20
total_products = len(templates)
page_count = (total_products + ppg - 1) // ppg
page = max(0, min(page, page_count - 1))
offset = page * ppg
products_on_page = templates[offset : offset + ppg]
pager = request.website.pager(
url="/shop/top_selling_products",
total=total_products,
page=page + 1, # Página actual (en Odoo, las páginas empiezan en 1)
step=ppg,
scope=5, # Número de páginas a mostrar
url_args=kwargs,
)
# Actualizar el contexto
shop_context.qcontext["pager"] = pager # Añadir el paginador
shop_context.qcontext[
"products"
] = products_on_page # Productos de la página actual
shop_context.qcontext["search_product"] = products_on_page # Para búsquedas
shop_context.qcontext[
"search_count"
] = total_products # Número total de productos
ppr = (
request.env["website"].get_current_website().shop_ppr or 4
) # Productos por fila
shop_context.qcontext["bins"] = TableCompute().process(
products_on_page, ppg, ppr
)
return request.render("website_sale.products", shop_context.qcontext)
Empty file.
3 changes: 3 additions & 0 deletions website_sale_menu_top_user_selling/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* `Tecnativa <https://www.tecnativa.com>`_

* Pilar Vargas
1 change: 1 addition & 0 deletions website_sale_menu_top_user_selling/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Empty file.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 816d763

Please sign in to comment.