Odoo addons personalizados por Criptomart
Find a file
GitHub Copilot 6ba554c91b [ADD] website_sale_aplicoop: online payment per group order
Members can now pay their eskaera at checkout, through the standard Odoo
payment machinery. Enabled per group order with a new `online_payment`
boolean, off by default: an order without it behaves exactly as before,
members save a draft and the cutoff cron confirms them in bulk.

The flow mirrors website_sale's: the checkout button becomes "Confirm and
pay", saving the cart redirects to a new /eskaera/<slug>/payment step that
renders `payment.form` from `sale`'s `_get_payment_values`, and the standard
/my/orders/<id>/transaction route takes it from there. This addon ships no
provider and configures none; the co-op publishes whichever it wants.

`website_sale`'s `_get_shop_payment_values` is deliberately not reused: it
runs `_get_shop_payment_errors`, which blocks on shippable products without a
delivery method — exactly an eskaera order, collected at the co-op with no
carrier. For the same reason the transaction route stays the portal one,
which does not call `_check_cart_is_ready_to_be_paid()`.

Payment confirms the order, which has three consequences handled here:

* `payment.transaction._check_amount_and_confirm_order` now confirms group
  orders with `from_orderpoint=True`, the way the cutoff cron already does.
  Without it a product with a broken replenishment route raises inside
  `_post_process`, and `/payment/status/poll` rolls back and re-raises: the
  member sees a payment error over a `done` transaction and the retry cron
  fails forever.
* `_confirm_linked_sale_orders` also sweeps the cycle's already confirmed
  orders into the picking batch, scoped by `pickup_date`. Its early return on
  "no drafts" ran before any batching, so a fully prepaid cycle produced no
  batch at all. `_cron_batch_paid_orders_of_closed_cycles` covers the same
  hole for cycles closed by hand.
* A duplicate-order guard answers 409 on save-order, add-to-cart and
  load-draft, and shows a notice on the shop, so a member whose order is
  already placed cannot build and pay for a second one.

The payment policy lives in the model rather than the controller: there are
three sale.order creation paths and two are live, so `_compute_require_payment`
and `_compute_prepayment_percent` are extended instead of patching five vals
dicts. Orders are also created under the group order's company, which is what
filters the payment providers.

Along the way: eskaera drafts were invisible in /my/orders. The portal rule is
`message_partner_ids child_of` and sale.order only subscribes the customer on
send or confirm, never on a draft create, so the `_prepare_orders_domain`
override that includes drafts never had any effect. Fixed with an explicit
`message_subscribe`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 21:59:35 +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_disable_cart: extract cart restriction from website_sale_aplicoop 2026-08-06 11:34:59 +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 [ADD] pos_payment_method_cashdro_fix: 17.0 API leftovers in the OCA base module 2026-08-11 13:31:11 +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_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 [ADD] website_sale_aplicoop: online payment per group order 2026-08-16 21:59:35 +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
.editorconfig build: configurar herramientas de verificación OCA 2026-02-11 16:09:41 +01: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 [DOC] website_sale_aplicoop: Add lazy loading documentation and implement v18.0.1.3.0 feature 2026-02-16 18:39:39 +01: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.).