$this->id, 'order_number' => $this->order_number, 'reference' => $this->reference, 'order_type' => $this->order_type, 'status' => $this->status, 'order_date' => $this->order_date, 'order_source' => $this->order_source, 'customer_id' => $this->customer_id, 'waiter_id' => $this->waiter_id, // 'driver_id' => $this->driver_id, // ===== Customer Info ===== 'customer' => [ 'id' => $this->customer_id, 'name' => $this->customer?->name, 'phone' => $this->customer?->phone, 'address' => $this->delivery_address, ], // ===== Table / Staff Info ===== 'table' => [ 'id' => $this->table_id, 'name' => $this->table?->name, ], 'waiter' => [ 'id' => $this->waiter_id, 'name' => $this->waiter?->first_name, ], // TODO // 'driver' => [ // 'id' => $this->driver_id, // 'name' => $this->driver?->first_name, // ], // ===== Payment Info ===== 'payment' => [ 'method_id' => $this->payment_method_id, 'method_name' => $this->paymentMethod?->name, 'status' => (bool) $this->payment_status, 'reference' => $this->payment_reference, 'paid_at' => optional($this->paid_at)->toDateTimeString(), ], // ===== Financials ===== 'subtotal' => $this->subtotal, 'discount' => $this->discount, 'tax' => $this->tax, 'service_charge' => $this->service_charge, 'tip_amount' => $this->tip_amount, 'grand_total' => $this->grand_total, // ===== Time Info ===== 'estimated_ready_time' => optional($this->estimated_ready_time)->toDateTimeString(), 'ready_at' => optional($this->ready_at)->toDateTimeString(), 'handed_over_at' => optional($this->handed_over_at)->toDateTimeString(), 'delivered_at' => optional($this->delivered_at)->toDateTimeString(), // ===== Meta / Extra ===== 'meta' => $this->meta ? json_decode($this->meta, true) : null, 'created_at' => optional($this->created_at)->toDateTimeString(), 'updated_at' => optional($this->updated_at)->toDateTimeString(), // ===== Order Items ===== 'items' => $this->items->map(function ($item) { return [ 'id' => $item->id, 'food_item_id' => $item->food_item_id, 'food_variant_id' => $item->food_variant_id, 'food_name' => $item->food?->name, 'food_description' => $item->food?->description, 'food_image' => $item->food?->image, 'quantity' => $item->quantity, 'price' => $item->price, 'discount' => $item->discount, 'tax' => $item->tax, 'total' => $item->total, // ===== Variant Info ===== 'variant' => $item->variation ? [ 'id' => $item->variation->id, 'name' => $item->variation->name, 'sku' => $item->variation->sku, 'unit_id' => $item->variation?->unit_id, 'price' => $item->variation->price, 'offer_price' => $item->variation->offer_price, 'discount' => $item->variation->discount, 'offer_start_at' => optional($item->variation->offer_start_at)->toDateTimeString(), 'offer_end_at' => optional($item->variation->offer_end_at)->toDateTimeString(), ] : null, // ===== Addons ===== 'addons' => $item->addons ? json_decode($item->addons, true) : [], // ===== Optional Ingredients (for kitchen / stock use) ===== // 'ingredients' => $item->food?->ingredients->map(function ($ing) { // return [ // 'id' => $ing->id, // 'name' => $ing->name, // 'quantity_required' => $ing->pivot->quantity_required ?? 0, // 'unit_id' => $ing->unit ?? 'g', // ]; // }), 'status' => $item->status, ]; }), ]; } }