feat: fetch and include order references and store names in loyalty history using batch queries
This commit is contained in:
parent
8571ddc88a
commit
b2a14520ab
@ -177,11 +177,50 @@ class AppNotificationController(http.Controller):
|
|||||||
|
|
||||||
history_records = request.env['loyalty.history'].sudo().search_read(
|
history_records = request.env['loyalty.history'].sudo().search_read(
|
||||||
[('card_id', 'in', card_ids)],
|
[('card_id', 'in', card_ids)],
|
||||||
['id', 'card_id', 'issued', 'used', 'create_date', 'order_id', 'description'],
|
['id', 'card_id', 'issued', 'used', 'create_date', 'order_model', 'order_id', 'description'],
|
||||||
order='create_date desc',
|
order='create_date desc',
|
||||||
limit=100
|
limit=100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Collect IDs to fetch in batches
|
||||||
|
pos_order_ids = []
|
||||||
|
sale_order_ids = []
|
||||||
|
for rec in history_records:
|
||||||
|
order_model = rec.get('order_model')
|
||||||
|
order_id = rec.get('order_id')
|
||||||
|
if order_id and order_model == 'pos.order':
|
||||||
|
pos_order_ids.append(order_id)
|
||||||
|
elif order_id and order_model == 'sale.order':
|
||||||
|
sale_order_ids.append(order_id)
|
||||||
|
|
||||||
|
# Batch query pos.orders to get receipt number and store name
|
||||||
|
pos_orders_map = {}
|
||||||
|
if pos_order_ids:
|
||||||
|
pos_orders = request.env['pos.order'].sudo().search_read(
|
||||||
|
[('id', 'in', pos_order_ids)],
|
||||||
|
['id', 'name', 'pos_reference', 'config_id']
|
||||||
|
)
|
||||||
|
for po in pos_orders:
|
||||||
|
config_name = po.get('config_id')[1] if isinstance(po.get('config_id'), (list, tuple)) else ''
|
||||||
|
pos_orders_map[po['id']] = {
|
||||||
|
'reference': po.get('pos_reference') or po.get('name') or '',
|
||||||
|
'pos_name': config_name
|
||||||
|
}
|
||||||
|
|
||||||
|
# Batch query sale.orders to get order number and warehouse name
|
||||||
|
sale_orders_map = {}
|
||||||
|
if sale_order_ids:
|
||||||
|
sale_orders = request.env['sale.order'].sudo().search_read(
|
||||||
|
[('id', 'in', sale_order_ids)],
|
||||||
|
['id', 'name', 'warehouse_id']
|
||||||
|
)
|
||||||
|
for so in sale_orders:
|
||||||
|
wh_name = so.get('warehouse_id')[1] if isinstance(so.get('warehouse_id'), (list, tuple)) else ''
|
||||||
|
sale_orders_map[so['id']] = {
|
||||||
|
'reference': so.get('name') or '',
|
||||||
|
'pos_name': wh_name
|
||||||
|
}
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for rec in history_records:
|
for rec in history_records:
|
||||||
issued = rec.get('issued') or 0.0
|
issued = rec.get('issued') or 0.0
|
||||||
@ -189,15 +228,27 @@ class AppNotificationController(http.Controller):
|
|||||||
points = issued - used
|
points = issued - used
|
||||||
point_type = 'earn' if points >= 0 else 'spend'
|
point_type = 'earn' if points >= 0 else 'spend'
|
||||||
|
|
||||||
order_ref = ''
|
order_model = rec.get('order_model')
|
||||||
order_id = rec.get('order_id')
|
order_id = rec.get('order_id')
|
||||||
if order_id and isinstance(order_id, (list, tuple)) and len(order_id) > 1:
|
|
||||||
order_ref = str(order_id[1])
|
order_ref = ''
|
||||||
elif order_id:
|
pos_name = ''
|
||||||
order_ref = str(order_id)
|
|
||||||
|
if order_id and order_model == 'pos.order' and order_id in pos_orders_map:
|
||||||
|
order_ref = pos_orders_map[order_id]['reference']
|
||||||
|
pos_name = pos_orders_map[order_id]['pos_name']
|
||||||
|
elif order_id and order_model == 'sale.order' and order_id in sale_orders_map:
|
||||||
|
order_ref = sale_orders_map[order_id]['reference']
|
||||||
|
pos_name = sale_orders_map[order_id]['pos_name']
|
||||||
|
|
||||||
|
# Fallbacks
|
||||||
if not order_ref:
|
if not order_ref:
|
||||||
order_ref = rec.get('description') or ''
|
if order_id and isinstance(order_id, (list, tuple)) and len(order_id) > 1:
|
||||||
|
order_ref = str(order_id[1])
|
||||||
|
elif order_id:
|
||||||
|
order_ref = str(order_id)
|
||||||
|
else:
|
||||||
|
order_ref = rec.get('description') or ''
|
||||||
|
|
||||||
result.append({
|
result.append({
|
||||||
'id': rec['id'],
|
'id': rec['id'],
|
||||||
@ -205,6 +256,7 @@ class AppNotificationController(http.Controller):
|
|||||||
'points': round(float(points), 2),
|
'points': round(float(points), 2),
|
||||||
'type': point_type,
|
'type': point_type,
|
||||||
'order_ref': order_ref,
|
'order_ref': order_ref,
|
||||||
|
'pos_name': pos_name,
|
||||||
'card_id': rec['card_id'][0] if isinstance(rec.get('card_id'), (list, tuple)) else rec.get('card_id'),
|
'card_id': rec['card_id'][0] if isinstance(rec.get('card_id'), (list, tuple)) else rec.get('card_id'),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user