I have a Laravel function that processes an array of delivery items and groups them by DeliveryID to create a structured array of deliveries. Each delivery includes details such as items, subtotal, and an extra_fields URL generated using the DeliveryID. However, I’m encountering an issue where the extra_fields URL sometimes includes an incorrect DeliveryID.
Here is the function:
public function getDeliveries($delivery_items)
{
$deliveries = [];
foreach ($delivery_items as $delivery_item) {
if (isset($deliveries[$delivery_item->DeliveryID])) {
$items = $deliveries[$delivery_item->DeliveryID]['items'];
$subtotal = $deliveries[$delivery_item->DeliveryID]['subtotal'];
} else {
$delivery_array = [
'cust_ref' => $delivery_item->DeliveryID,
'ship_first_name' => $delivery_item->Delivery_First_Name,
'ship_last_name' => $delivery_item->Delivery_Last_Name,
'ship_address_1' => $delivery_item->Delivery_Address_1,
'ship_address_2' => $delivery_item->Delivery_Address_2,
'ship_city' => $delivery_item->Delivery_City,
'ship_state' => $delivery_item->Delivery_State,
'ship_zip' => $delivery_item->Delivery_Zipcode
];
if ($this->hasExtraField($delivery_item)) {
$order_id = $delivery_item->DeliveryID;
$limited_scope_key = config("services.example_api.key");
$delivery_array['extra_fields']['api_link'] = "https://api.example.com/orders/{$order_id }";
}
$deliveries[$delivery_item->DeliveryID] = $delivery_array;
$items = [];
$subtotal = 0;
}
$items[] = [
'item_no' => $delivery_item->ItemID,
'item' => $delivery_item->Item_Number,
'description' => $delivery_item->Item_Description,
'price' => $delivery_item->Item_Price,
'quantity' => $delivery_item->Item_Quantity
];
$subtotal += $delivery_item->Item_Total;
$deliveries[$delivery_item->DeliveryID]['items'] = $items;
$deliveries[$delivery_item->DeliveryID]['subtotal'] = $subtotal;
$deliveries[$delivery_item->DeliveryID]['grand_total'] = $subtotal;
}
return $deliveries;
}
What could cause the extra_fields URL to include an incorrect DeliveryID? Is there a better way to prevent this from happening?
8