[FIX] website_sale_aplicoop: two draft-reuse and compute-field bugs

- group.order.home_delivery is a stored compute field with no inverse;
  Odoo still lets write() set it directly, so a stray direct write stuck
  instead of always being re-derived from delivery_product_id. create()
  and write() now strip it from vals, same pattern already used for slug.

- _find_recent_draft_order only bounded drafts by create_date, so a
  freshly created draft for a stale/previous pickup_date (but created
  "now") was wrongly reused. Fix requires both create_date to fall in
  the active window AND pickup_date to match when set — the latter
  alone isn't enough either, per the regression already covered by
  test_find_recent_draft_excludes_previous_cycle (observed in
  production at stage.elikabilbo.eus).
This commit is contained in:
GitHub Copilot 2026-08-13 12:02:33 +02:00
parent e59c706ef6
commit 158933e96e
2 changed files with 34 additions and 10 deletions

View file

@ -420,6 +420,7 @@ class GroupOrder(models.Model):
taken = set()
new_vals_list = []
for vals in vals_list:
vals = {k: v for k, v in vals.items() if k != "home_delivery"}
slug = self._normalize_slug(vals.get("slug")) or self._generate_unique_slug(
vals.get("name"), taken=taken
)
@ -428,7 +429,16 @@ class GroupOrder(models.Model):
return super().create(new_vals_list)
def write(self, vals):
"""Normalize the slug, regenerating it from the name when emptied."""
"""Normalize the slug, regenerating it from the name when emptied.
`home_delivery` is derived from `delivery_product_id` and must never
be settable directly dropped here so a stray direct write can't
make it stick outside `_compute_home_delivery`.
"""
if "home_delivery" in vals:
vals = {k: v for k, v in vals.items() if k != "home_delivery"}
if not vals:
return True
if "slug" not in vals:
return super().write(vals)
slug = self._normalize_slug(vals["slug"])