[IMP] website_sale_aplicoop: propagate consumer_group_id directly from group_order

- 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)
This commit is contained in:
snt 2026-03-06 13:49:13 +01:00
parent 4141fc5ab1
commit 80539f3e36
8 changed files with 163 additions and 56 deletions

View file

@ -929,6 +929,26 @@ class AplicoopWebsiteSale(WebsiteSale):
Returns the sale.order record.
"""
# consumer_group_id comes directly from group_order (first/only group)
# No calculations - data propagates directly from the order context
consumer_group_id = (
group_order.group_ids[0].id if group_order.group_ids else False
)
_logger.info(
"[CONSUMER_GROUP DEBUG] _create_or_update_sale_order: "
"group_order=%s, group_order.group_ids=%s, consumer_group_id=%s",
group_order.id,
group_order.group_ids.ids,
consumer_group_id,
)
# commitment_date: use provided or calculate from group_order
if not commitment_date:
commitment_date = (
group_order.delivery_date if is_delivery else group_order.pickup_date
)
if existing_order:
# Update existing order with new lines and propagate fields
# Use sudo() to avoid permission issues with portal users
@ -939,13 +959,15 @@ class AplicoopWebsiteSale(WebsiteSale):
existing_order_sudo.pickup_day = group_order.pickup_day
existing_order_sudo.pickup_date = group_order.pickup_date
existing_order_sudo.home_delivery = is_delivery
existing_order_sudo.consumer_group_id = consumer_group_id
if commitment_date:
existing_order_sudo.commitment_date = commitment_date
_logger.info(
"Updated existing sale.order %d: commitment_date=%s, home_delivery=%s",
"Updated existing sale.order %d: commitment_date=%s, home_delivery=%s, consumer_group_id=%s",
existing_order.id,
commitment_date,
is_delivery,
consumer_group_id,
)
return existing_order
@ -957,6 +979,7 @@ class AplicoopWebsiteSale(WebsiteSale):
"pickup_day": group_order.pickup_day,
"pickup_date": group_order.pickup_date,
"home_delivery": is_delivery,
"consumer_group_id": consumer_group_id,
}
if commitment_date:
order_vals["commitment_date"] = commitment_date
@ -974,11 +997,12 @@ class AplicoopWebsiteSale(WebsiteSale):
# Create order with sudo to avoid permission issues with portal users
sale_order = request.env["sale.order"].sudo().create(order_vals)
_logger.info(
"sale.order created successfully: %d with group_order_id=%d, pickup_day=%s, home_delivery=%s",
"sale.order created successfully: %d with group_order_id=%d, pickup_day=%s, home_delivery=%s, consumer_group_id=%s",
sale_order.id,
group_order.id,
group_order.pickup_day,
group_order.home_delivery,
consumer_group_id,
)
return sale_order
@ -989,27 +1013,39 @@ class AplicoopWebsiteSale(WebsiteSale):
Returns created sale.order record.
"""
# consumer_group_id comes directly from group_order (first/only group)
# No calculations - data propagates directly from the order context
consumer_group_id = (
group_order.group_ids[0].id if group_order.group_ids else False
)
_logger.info(
"[CONSUMER_GROUP DEBUG] _create_draft_sale_order: "
"group_order=%s, group_order.group_ids=%s, consumer_group_id=%s",
group_order.id,
group_order.group_ids.ids,
consumer_group_id,
)
# commitment_date comes from group_order (delivery_date or pickup_date)
commitment_date = (
group_order.delivery_date
if group_order.home_delivery
else group_order.pickup_date
)
order_vals = {
"partner_id": current_user.partner_id.id,
"order_line": sale_order_lines,
"state": "draft",
"group_order_id": order_id,
"pickup_day": group_order.pickup_day,
"pickup_date": group_order.pickup_date,
"home_delivery": group_order.home_delivery,
"consumer_group_id": consumer_group_id,
"commitment_date": commitment_date,
}
# Propagate fields from group order
if group_order.pickup_day:
order_vals["pickup_day"] = group_order.pickup_day
if group_order.pickup_date:
order_vals["pickup_date"] = group_order.pickup_date
if group_order.home_delivery:
order_vals["home_delivery"] = group_order.home_delivery
# Add commitment/commitment_date if provided
if pickup_date:
order_vals["commitment_date"] = pickup_date
elif group_order.pickup_date:
order_vals["commitment_date"] = group_order.pickup_date
# Get salesperson for order creation (portal users need this)
salesperson = self._get_salesperson_for_order(current_user.partner_id)
if salesperson:
@ -1233,7 +1269,30 @@ class AplicoopWebsiteSale(WebsiteSale):
existing_drafts,
order_id,
):
"""Replace existing draft (if any) with new lines, else create it."""
"""Replace existing draft (if any) with new lines, else create it.
All fields (commitment_date, consumer_group_id, etc.) come from group_order.
"""
# consumer_group_id comes directly from group_order (first/only group)
# No calculations - data propagates directly from the order context
consumer_group_id = (
group_order.group_ids[0].id if group_order.group_ids else False
)
_logger.info(
"[CONSUMER_GROUP DEBUG] _merge_or_replace_draft: "
"group_order=%s, group_order.group_ids=%s, consumer_group_id=%s",
group_order.id,
group_order.group_ids.ids,
consumer_group_id,
)
# commitment_date comes directly from group_order
commitment_date = (
group_order.delivery_date
if group_order.home_delivery
else group_order.pickup_date
)
if existing_drafts:
draft = existing_drafts[0].sudo()
@ -1249,6 +1308,8 @@ class AplicoopWebsiteSale(WebsiteSale):
"pickup_day": group_order.pickup_day,
"pickup_date": group_order.pickup_date,
"home_delivery": group_order.home_delivery,
"consumer_group_id": consumer_group_id,
"commitment_date": commitment_date,
}
)
return draft
@ -1261,6 +1322,8 @@ class AplicoopWebsiteSale(WebsiteSale):
"pickup_day": group_order.pickup_day,
"pickup_date": group_order.pickup_date,
"home_delivery": group_order.home_delivery,
"consumer_group_id": consumer_group_id,
"commitment_date": commitment_date,
}
# Get salesperson for order creation (portal users need this)
salesperson = self._get_salesperson_for_order(current_user.partner_id)