prepare( "SELECT o.id, o.status, o.merchant_id, m.name_ar AS merchant_name_ar, m.latitude AS merchant_lat, m.longitude AS merchant_lng, m.address AS merchant_address, m.avg_prep_minutes, o.delivery_fee, o.items_total, o.service_fee, o.discount, o.grand_total, o.payment_method, o.customer_note, o.delivery_address, o.delivery_lat, o.delivery_lng, o.created_at, o.ready_at, o.courier_assigned_at, o.picked_up_at, (SELECT COALESCE(SUM(quantity),0) FROM food_order_items WHERE order_id=o.id) AS items_count, CASE WHEN o.status IN ('courier_assigned','picked_up') THEN o.delivery_address ELSE NULL END AS visible_address FROM food_orders o JOIN food_merchants m ON m.id = o.merchant_id WHERE o.courier_id = ? AND o.status IN ('courier_assigned','picked_up') ORDER BY o.courier_assigned_at ASC" ); $st->execute([$food_courier_id]); $orders = $st->fetchAll(); // بيانات الزبون (العنوان) تظهر فقط بعد courier_assigned وتُحجب بعد delivered — لا نُعيد أي طلب مسلَّم هنا أصلاً foreach ($orders as &$o) { unset($o['delivery_address']); $o['delivery_address'] = $o['visible_address']; unset($o['visible_address']); $o['items_count'] = (int)$o['items_count']; // نقداً: السائق يحصّل grand_total من الزبون ويحتفظ بأجرته (delivery_fee)، // والباقي يبقى ديناً عليه حتى التسوية — نُظهر الرقمين صراحةً في التطبيق // كي لا يجتهد السائق في الحساب على باب الزبون. $o['cash_to_collect'] = $o['payment_method'] === 'cash' ? (int)$o['grand_total'] : 0; $o['courier_owes'] = $o['payment_method'] === 'cash' ? (int)$o['grand_total'] - (int)$o['delivery_fee'] : 0; } unset($o); jsonSuccess(['orders' => $orders]);