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 d931c26
Show file tree
Hide file tree
Showing 14 changed files with 634 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")

Check warning on line 16 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L16

Added line #L16 was not covered by tests
# Obtener el contexto base del método 'shop'
shop_context = self.shop(page=page, ppg=ppg, **kwargs)

Check warning on line 18 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L18

Added line #L18 was not covered by tests
# Obtener los productos más comprados por el usuario
product_ids = (

Check warning on line 20 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L20

Added line #L20 was not covered by tests
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 = (

Check warning on line 32 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L32

Added line #L32 was not covered by tests
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(

Check warning on line 44 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L38-L44

Added lines #L38 - L44 were not covered by tests
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[

Check warning on line 54 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L53-L54

Added lines #L53 - L54 were not covered by tests
"products"
] = products_on_page # Productos de la página actual
shop_context.qcontext["search_product"] = products_on_page # Para búsquedas
shop_context.qcontext[

Check warning on line 58 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L57-L58

Added lines #L57 - L58 were not covered by tests
"search_count"
] = total_products # Número total de productos
ppr = (

Check warning on line 61 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L61

Added line #L61 was not covered by tests
request.env["website"].get_current_website().shop_ppr or 4
) # Productos por fila
shop_context.qcontext["bins"] = TableCompute().process(

Check warning on line 64 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L64

Added line #L64 was not covered by tests
products_on_page, ppg, ppr
)
return request.render("website_sale.products", shop_context.qcontext)

Check warning on line 67 in website_sale_menu_top_user_selling/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_menu_top_user_selling/controllers/main.py#L67

Added line #L67 was not covered by tests
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 d931c26

Please sign in to comment.