Odoo addons personalizados por Criptomart
Find a file
GitHub Copilot a9d6f52ca6 [ADD] website_sale_lazy_loading: load the /shop listing on demand
The shop pages products: every page is a full reload that throws away the
grid the visitor was reading. This appends the next page to the grid
instead, on scroll or on a "Load more products" click, per website.

The controller does not duplicate /shop. The new /shop/lazy_products calls
shop() and renders the cards out of the qcontext it prepared, so search,
categories, attributes, tags, price filter, sort order and pricelists are
supported by construction -- and so are the values other modules add to the
listing, the wishlist state among them. Out of range pages answer empty
rather than the last page again, which portal.pager would otherwise clamp
to and the frontend would append as duplicates.

The product loop of website_sale.products is replaced by a call to a shared
template, so the first page and the appended ones are the same markup: a
ribbon, a price or a button another module adds to products_item shows up
on every card, not only on the ones the initial render produced.

Progressive enhancement throughout: the first page and the pager are still
what the standard controller renders, and the pager is only hidden once the
widget is running. Without JavaScript -- and for crawlers -- the shop is
exactly what it is without this module. The page size is the shop layout's
"Products per page", the value the pager already uses, so there is nothing
to keep in sync.

The frontend takes no decision about what to show: the server sends the
mode, the URL of the listing on screen and each page of cards. It observes
a block below the grid rather than listening to scroll, restarts the public
widgets on the appended cards, and keeps a button as the fallback for a
failed request or a browser without IntersectionObserver.

Tests cover the block rendering per mode, the filters travelling in the
AJAX URL, and the endpoint on a next page, the last page, an out of range
page, a broken page number and an unknown category.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 12:33:09 +02:00
.claude [IMP] website_sale_aplicoop: accessibility and responsive polish — phase 8 2026-08-16 11:34:38 +02:00
.github [ADD] website_sale_lazy_loading: load the /shop listing on demand 2026-08-24 12:33:09 +02:00
.vscode build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
account_banking_mandate_batch acción de servidor para crear mandatos bancarios en lote 2026-08-07 16:38:15 +02:00
account_invoice_triple_discount_readonly iconos 2026-02-25 18:41:16 +01:00
docs [IMP] website_sale_aplicoop: accessibility and responsive polish — phase 8 2026-08-16 11:34:38 +02:00
l10n_es_edi_tbai_reagyp_recibidas Revert "[FIX] l10n_es_edi_tbai_reagyp_recibidas: fix chaining within same invoice series" 2026-07-31 19:11:49 +02:00
l10n_es_partner_ccpae addons portados en el repo de ecocentral 2026-08-07 16:34:38 +02:00
membership_expiry_reminder cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
membership_monthly_invoicing create monthly recurring membership lines 2026-06-02 14:22:13 +02:00
membership_payment_date #2 #3 add membership_payment_date: membership start date -> payment date. Don't overlap membership periods on renewals 2026-07-14 11:56:57 +02:00
portal_event_registration cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
pos_account_payment_order_sepa paso a pos.sessions más natural, los apuntes están ahí. 2026-06-26 19:57:07 +02:00
pos_full_refund addons portados en el repo de ecocentral 2026-08-07 16:34:38 +02:00
pos_order_reorder addons portados en el repo de ecocentral 2026-08-07 16:34:38 +02:00
pos_payment_method_cashdro_fix [IMP] docker-compose: host paths in .env, override merged in 2026-08-17 13:57:25 +02:00
pos_payment_method_cashdro_rounding [ADD] pos_payment_method_cashdro_rounding: migration to 18.0 2026-08-11 13:30:49 +02:00
product_origin_char [I18N] website_sale_aplicoop, product_origin_char: add Catalan translation 2026-08-13 11:52:54 +02:00
product_price_category_supplier iconos 2026-02-25 18:41:16 +01:00
product_pricelist_total_margin iconos 2026-02-25 18:41:16 +01:00
product_public_category_from_internal [ADD] product_public_category_from_internal: mirror internal categories into eCommerce ones 2026-08-17 19:42:01 +02:00
product_sale_price_from_pricelist [ADD] product_sale_price_from_pricelist: server action to bulk-correct purchase price from supplierinfo 2026-06-12 16:30:15 +02:00
purchase_rappel Ecocentral/ecocentral#172: migrate purchase_rappel to 18.0 2026-06-23 14:30:03 +02:00
scripts [I18N] website_sale_aplicoop: Limpieza de traducciones y etiquetas UI en inglés por defecto 2026-02-26 14:33:44 +01:00
setup build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
sort_lines_by_product_name addons portados en el repo de ecocentral 2026-08-07 16:34:38 +02:00
stock_picking_batch_custom [IMP] stock_picking_batch_custom: allow deleting operator lines, show picking reference 2026-07-15 16:26:14 +02:00
stock_picking_report_undelivered_product addons portados en el repo de ecocentral 2026-08-07 16:34:38 +02:00
website_membership_associate add website_membership_associate 2026-07-28 09:29:14 +02:00
website_membership_signup_required website_membership_signup_required: fix reset_password form 2026-07-27 11:25:19 +02:00
website_sale_aplicoop [IMP] website_sale_aplicoop: pay on the checkout page, not a step later 2026-08-17 19:14:49 +02:00
website_sale_disable_cart [ADD] website_sale_disable_cart: extract cart restriction from website_sale_aplicoop 2026-08-06 11:34:59 +02:00
website_sale_lazy_loading [ADD] website_sale_lazy_loading: load the /shop listing on demand 2026-08-24 12:33:09 +02:00
.editorconfig build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
.env.example [IMP] docker-compose: host paths in .env, override merged in 2026-08-17 13:57:25 +02:00
.flake8 cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
.gitignore [REM] CLAUDE.md: untrack it, ignored like the rest of the agent config 2026-08-11 13:32:36 +02:00
.isort.cfg build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
.pre-commit-config.yaml cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
.prettierignore [FIX] product_sale_price_from_pricelist: Actualizar tests para Odoo 18 2026-02-12 19:23:29 +01:00
.prettierrc.yml [REF] website_sale_aplicoop: Mejorar legibilidad del XML (reformatear con mejor indentación) 2026-02-26 14:59:34 +01:00
.pylintrc cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
.pylintrc-mandatory cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
check_addon.sh build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
check_tax_config.sh Revertir cambio: eliminar cálculo duplicado de impuestos 2026-02-11 19:54:28 +01:00
docker-compose.yml [IMP] docker-compose: host paths in .env, override merged in 2026-08-17 13:57:25 +02:00
eslint.config.js [CHORE] Add ESLint configuration file 2026-02-17 01:29:17 +01:00
Makefile build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
oca_dependencies.txt build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00
odoo.conf docker test files 2026-02-11 15:33:31 +01:00
pyproject.toml cron better exception management. show supplier commercial name in product card template. linters config 2026-06-02 10:43:54 +02:00
README.md [DOC] actualizar y sincronizar documentación de todos los addons 2026-05-20 16:27:17 +02:00
requirements.txt build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01:00

Odoo Addons — Criptomart

Colección de addons Odoo 18.0 para Criptomart / Elika Bilbo. Incluye addons OCA incluidos como dependencias y addons custom desarrollados internamente.

Addons OCA (dependencias incluidas)

Addons del ecosistema OCA incorporados al repositorio. No se modifican salvo hotfixes puntuales.

Addon Versión Descripción
account_invoice_triple_discount 18.0.1.0.0 Triple descuento en líneas de factura
product_get_price_helper 18.0.1.1.0 Helper para obtener precios de producto respetando tarifas
product_main_seller 18.0.1.0.0 Campo "proveedor principal" en producto
product_origin_char 18.0.2.0.0 Campo de texto libre para origen del producto
product_price_category 18.0.1.0.0 Categoría de precio en producto + aplicación masiva vía tarifas
purchase_triple_discount 18.0.1.0.0 Triple descuento en líneas de pedido de compra

Addons Custom

Addons desarrollados por Criptomart para necesidades específicas del proyecto.

Addon Versión Descripción
account_invoice_triple_discount_readonly 18.0.1.0.0 Corrige bug de acumulación de descuentos y pone descuento total en solo lectura
membership_expiry_reminder 18.0.1.0.0 Recordatorio por email de membresías próximas a vencer
portal_event_registration 18.0.1.0.0 Vista portal de inscripciones a eventos con adjuntos al chatter
product_price_category_supplier 18.0.1.0.0 Categoría de precio por defecto en proveedor + actualización masiva de productos
product_pricelist_total_margin 18.0.1.2.0 Margen aditivo (no compuesto) en tarifas encadenadas, con límites globales
product_sale_price_from_pricelist 18.0.2.7.0 Calcula precio de venta desde último precio de compra vía tarifa configurable
stock_picking_batch_custom 18.0.1.0.0 Columnas extra en operaciones detalladas de lotes: partner, categoría, recogido
website_sale_aplicoop 18.0.1.9.0 Sistema de pedidos colaborativos para grupos de consumo (reemplazo de Aplicoop)

Dependencias entre addons custom

website_sale_aplicoop
  └── product_sale_price_from_pricelist
        └── product_pricelist_total_margin
              └── product_price_category
  └── product_main_seller
  └── product_price_category_supplier
        └── product_price_category

account_invoice_triple_discount_readonly
  └── account_invoice_triple_discount
  └── purchase_triple_discount

Desarrollo

Instalación / actualización de un addon

docker-compose exec -T odoo odoo -d odoo -u <nombre_addon> --stop-after-init

Tests

docker-compose exec -T odoo odoo -d odoo --test-enable --stop-after-init -u <nombre_addon>

Linters

# Python
black . && isort . && flake8 . && pylint --load-plugins=pylint_odoo <addon>/

# JS
npx eslint <addon>/static/src/

Ver docs/LINTERS_README.md para configuración completa.

Traducciones

Ver docs/TRANSLATIONS.md.

Documentación técnica

Ver carpeta docs/ para documentación transversal (instalación, lazy loading, QWeb, etc.).