Use forecasted quantity (virtual_available) instead of on-hand quantity
(qty_available) for out-of-stock and low-stock calculations, so pending
incoming/outgoing moves are taken into account.
Three guards before confirming sale orders:
1. Skip if no cutoff_date (no cutoff_day configured): avoids blindly confirming
all draft orders for group orders without a weekly cycle defined
2. Skip if cutoff_date >= today: cycle still open
3. Skip if cutoff_date >= 7 days ago: stale date from a previous cycle
(protects against cron gaps and confirms only within 1-6 days after cutoff)
The cutoff day itself is still open for orders; confirmation should only
happen when the cutoff date is strictly in the past (>= today = skip).
The real bug was only the order of operations in _cron_update_dates.
- _cron_update_dates: call _confirm_linked_sale_orders() BEFORE recomputing
dates so cutoff_date still points to the current cycle when the check runs
- _confirm_linked_sale_orders: change >= to > so orders are confirmed both
on the cutoff day itself and after it has passed
- Ajusta _get_delivery_product_display_price para calcular envío con list_price + impuestos
- Evita aplicar reglas de pricelist al envío (recargos/descuentos no deseados)
- Mantiene fallback seguro a list_price ante errores
Resultado esperado: para PVP 5.74 con IVA 21% => 6.95
- Fix: delivery product price now includes VAT (homepage/checkout)
* Added _get_delivery_product_display_price() helper to use same pricing pipeline as regular products
* Uses pricelist + tax calculations instead of bare list_price
* Fallback chain: pricelist → bare list_price → default 5.74
* Updated context in eskaera_shop() and eskaera_checkout()
- Test: test_constraint_cutoff_before_pickup_invalid
* Constraint removed: now allows any combination of cutoff_day and pickup_day
* Updated test to reflect this change (no ValidationError expected)
- Test: test_day_names_not_using_inline_underscore
* Fixed to check sub-template eskaera_order_card_meta where day_names is actually used
* eskaera_page calls this sub-template so day_names context is inherited
Results: 128 tests - 0 failed, 0 errors (100% pass rate)
- Move origin_text field from product.supplierinfo to product.template
- Add related field in product.product for variant access
- Remove dependency on product_main_seller
- Update views to show field near category (editable)
- Rewrite tests for new architecture
- Update all documentation (README, readme/ fragments)
- Bump version to 18.0.2.0.0
- Add stock_picking_batch dependency to manifest
- Add cutoff date validation in _confirm_linked_sale_orders()
- Create _create_picking_batches_for_sale_orders() method
- Group pickings by consumer_group_id into separate batches
- Set batch scheduled_date from group order pickup_date
- Add test_cron_picking_batch.py with 7 tests covering:
- Skip orders before cutoff
- Confirm orders after cutoff
- Separate batches per consumer group
- Same group orders in same batch
- Batch has scheduled_date
- No duplicate batches on re-run
- Closed group orders not processed
- Create eskaera_order_card_meta template for cleaner code
- Simplify layout: horizontal meta-grid instead of table
- Fix t-if conditions on container elements
- Show only relevant fields: cutoff, pickup, delivery
- Add meta-grid CSS styles for compact horizontal display
- Home delivery badge only shown when enabled
- Add consumer_group_id to sale.order for tracking the consumer group
- Fix stock.picking consumer_group_id to use sale_id.consumer_group_id
- Add group_ids inverse relation in res.partner for bidirectional access
- Remove auto-calculation of consumer_group_id, data comes directly from group_order.group_ids[0]
- Add debug logging for consumer_group propagation
- commitment_date propagates directly from group_order (no recalculation)
Added website_sale_stock dependency and modified _compute_stock_ribbons
to respect the allow_out_of_stock_order field:
- If allow_out_of_stock_order=True: product can always be added to cart
- If allow_out_of_stock_order=False and qty<=0: add-to-cart is blocked
The JS logic already checks data-out-of-stock attribute from template,
so no frontend changes were needed.
Version bump: 18.0.1.7.0 -> 18.0.1.8.0
After infinite scroll loads new products, the event listeners were
never re-attached because the code was looking for window.aplicoopShop
but the actual object is window.groupOrderShop.
- Use regular dict instead of defaultdict to avoid empty entries
- Make summary_line_ids readonly=True to prevent UI from inserting empty lines
- Add SQL constraint CHECK(product_id IS NOT NULL) as safeguard
- Use boolean_toggle widget for is_collected field
- Fix tests to use TransactionCase and invalidate_recordset
- Add test for empty batch + add pickings + confirm flow
- CHANGELOG: documentar nueva funcionalidad de actualización de órdenes de venta
- README: añadir sección sobre Update Sales Orders from List Price
- README_DEV: incluir uso de la acción en workflow
- readme/USAGE: detallar paso a paso para actualizar órdenes
Funcionalidad documentada:
- Botón/acción para actualizar líneas de orden de venta con precio actual del producto
- Solo procesa órdenes no facturadas/canceladas
- Preserva descuentos, omite notas/secciones y anticipos
- Disponible en vista formulario y lista
- Restored product_main_seller addon to fix dependency chain
- Addon required by product_origin_char and website_sale_aplicoop
[IMP] website_sale_aplicoop: Add demo data configuration to manifest
- Updated __manifest__.py to include demo data files
- Demo data includes partners, suppliers, products, group orders, and sale orders
- Demo data successfully loads during module installation