Odoo addons personalizados por Criptomart
An operator weighing a basket types 0.87 kg where the member ordered 1 kg, and a few hours later the line is back at 1 kg. Raising the quantity never reverts. The asymmetry is the reservation engine: below the demand the move goes back to `partially_available` (`_recompute_state`), which is exactly the state `_action_assign` looks for, while above it stays `assigned` and matches no domain. Two things call `_action_assign` on their own: the `Procurement: run scheduler` cron, and `_trigger_assign`, which runs every time another transfer of the same product is validated -- the second explains the "a few hours" better than a daily cron. Both respect one flag only, `picked`, and nobody was setting it: the checkbox is `optional="hide"` on the transfer form and absent from the detailed operation lists. So an onchange on `quantity` marks the record as picked. Onchanges only run from the interface, never from the reservation engine, so a manual edit is told apart from a reservation without guessing at contexts, and if the onchange ever stops firing the behaviour degrades to today's instead of freezing reservations across the system. `picked` also keeps `_free_reservation` from stealing the quantity when stock runs short elsewhere. The three lists where a quantity can be typed now load the field, since the client only sends back what the arch declares. When the typed quantity is below the demand, the demand follows it down. The move stays `assigned` and no backorder is asked for a weight that will never be completed. Only downwards: above the demand nothing needs adjusting. A line left at zero keeps its demand, so a transfer still offers its usual backorder choice for what was not delivered, and chained moves are only frozen -- lowering their demand would leave the next step of the route asking for more than this one delivers. `_pre_action_done_hook` needs the counterpart. Core auto-picks a transfer only when *no* move is picked yet, so freezing one weighed line would push the untouched ones to a backorder, or cancel them if the user answers "no backorder", with the goods already in the basket. Picking everything that carries a quantity keeps validation exactly as operators know it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .github | ||
| .vscode | ||
| account_banking_mandate_batch | ||
| account_invoice_triple_discount_readonly | ||
| docs | ||
| l10n_es_edi_tbai_reagyp_recibidas | ||
| l10n_es_partner_ccpae | ||
| membership_expiry_reminder | ||
| membership_monthly_invoicing | ||
| membership_payment_date | ||
| portal_event_registration | ||
| pos_account_payment_order_sepa | ||
| pos_full_refund | ||
| pos_order_reorder | ||
| pos_payment_method_cashdro_fix | ||
| pos_payment_method_cashdro_rounding | ||
| product_origin_char | ||
| product_price_category_supplier | ||
| product_pricelist_total_margin | ||
| product_public_category_from_internal | ||
| product_sale_price_from_pricelist | ||
| purchase_rappel | ||
| scripts | ||
| setup | ||
| sort_lines_by_product_name | ||
| stock_move_manual_quantity | ||
| stock_picking_batch_custom | ||
| stock_picking_report_undelivered_product | ||
| website_membership_associate | ||
| website_membership_signup_required | ||
| website_sale_aplicoop | ||
| website_sale_disable_cart | ||
| website_sale_lazy_loading | ||
| .editorconfig | ||
| .env.example | ||
| .flake8 | ||
| .gitignore | ||
| .isort.cfg | ||
| .pre-commit-config.yaml | ||
| .prettierignore | ||
| .prettierrc.yml | ||
| .pylintrc | ||
| .pylintrc-mandatory | ||
| check_addon.sh | ||
| check_tax_config.sh | ||
| docker-compose.yml | ||
| eslint.config.js | ||
| Makefile | ||
| oca_dependencies.txt | ||
| odoo.conf | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
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.).