This commit is contained in:
Utkarsh Khedkar
2025-12-19 11:24:28 +05:30
8 changed files with 3408 additions and 1250 deletions

View File

@@ -365,6 +365,128 @@ class AdminOrderController extends Controller
}
public function see($id)
{
$order = Order::with([
'markList',
'items',
'invoice.items',
'shipments' => function ($q) use ($id) {
$q->whereHas('orders', function ($oq) use ($id) {
$oq->where('orders.id', $id)
->whereNull('orders.deleted_at');
})->with([
'orders' => function ($oq) use ($id) {
$oq->where('orders.id', $id)
->whereNull('orders.deleted_at')
->with('items');
}
]);
}
])->findOrFail($id);
/* ---------------- ORDER DATA ---------------- */
$orderData = [
'order_id' => $order->order_id,
'status' => $order->status,
'totals' => [
'ctn' => $order->ctn,
'qty' => $order->qty,
'ttl_qty' => $order->ttl_qty,
'cbm' => $order->cbm,
'ttl_cbm' => $order->ttl_cbm,
'kg' => $order->kg,
'ttl_kg' => $order->ttl_kg,
'amount' => $order->ttl_amount,
],
'items' => $order->items,
];
/* ---------------- SHIPMENTS DATA ---------------- */
$shipmentsData = [];
foreach ($order->shipments as $shipment) {
$shipmentOrders = [];
$totals = [
'ctn' => 0, 'qty' => 0, 'ttl_qty' => 0,
'cbm' => 0, 'ttl_cbm' => 0,
'kg' => 0, 'ttl_kg' => 0,
'amount' => 0,
];
foreach ($shipment->orders as $shipOrder) {
foreach ($shipOrder->items as $item) {
$shipmentOrders[] = [
'order_id' => $shipOrder->order_id,
'origin' => $shipOrder->origin,
'destination' => $shipOrder->destination,
'description' => $item->description,
'ctn' => $item->ctn,
'qty' => $item->qty,
'ttl_qty' => $item->ttl_qty,
'amount' => $item->ttl_amount,
];
$totals['ctn'] += $item->ctn;
$totals['qty'] += $item->qty;
$totals['ttl_qty'] += $item->ttl_qty;
$totals['cbm'] += $item->cbm;
$totals['ttl_cbm'] += $item->ttl_cbm;
$totals['kg'] += $item->kg;
$totals['ttl_kg'] += $item->ttl_kg;
$totals['amount'] += $item->ttl_amount;
}
}
if (empty($shipmentOrders)) {
continue;
}
$shipmentsData[] = [
'shipment_id' => $shipment->shipment_id,
'status' => $shipment->status,
'date' => $shipment->shipment_date,
'total_orders' => 1,
'orders' => $shipmentOrders,
'totals' => $totals,
];
}
/* ---------------- INVOICE DATA ---------------- */
$invoiceData = null;
if ($order->invoice) {
$invoice = $order->invoice;
$invoiceData = [
'invoice_no' => $invoice->invoice_number,
'status' => $invoice->status,
'invoice_date' => $invoice->invoice_date,
'due_date' => $invoice->due_date,
'customer' => [
'name' => $invoice->customer_name,
'mobile' => $invoice->customer_mobile,
'email' => $invoice->customer_email,
'address' => $invoice->customer_address,
'pincode' => $invoice->pincode,
],
'items' => $invoice->items,
'summary' => [
'amount' => $invoice->final_amount,
'cgst' => 0,
'sgst' => 0,
'total' => $invoice->final_amount_with_gst,
],
];
}
return view('admin.see_order', compact(
'order',
'orderData',
'shipmentsData',
'invoiceData'
));
}
public function resetTemp()
@@ -375,89 +497,143 @@ class AdminOrderController extends Controller
->with('success', 'Order reset successfully.');
}
public function orderShow()
{
$orders = Order::with([
'markList', // company, customer, origin, destination, date
'shipments', // shipment_id, shipment_date, status
'invoice' // invoice number, dates, amounts, status
])
->latest('id') // show latest orders first
->get();
public function orderShow()
{
$orders = Order::with([
'markList', // company, customer, origin, destination, date
'shipments', // shipment_id, shipment_date, status
'invoice' // invoice number, dates, amounts, status
])
->latest('id') // show latest orders first
->get();
return view('admin.orders', compact('orders'));
}
// inside AdminOrderController
return view('admin.orders', compact('orders'));
}
// inside AdminOrderController
private function buildOrdersQueryFromRequest(Request $request)
{
$query = Order::with(['markList', 'invoice', 'shipments']);
{
$query = Order::query()
->with(['markList', 'invoice', 'shipments']);
// Search across order_id, markList.company_name, markList.customer_id, invoice.invoice_number
if ($request->filled('search')) {
$search = $request->search;
$query->where(function($q) use ($search) {
$q->where('order_id', 'like', "%{$search}%")
->orWhereHas('markList', function($q2) use ($search) {
$q2->where('company_name', 'like', "%{$search}%")
->orWhere('customer_id', 'like', "%{$search}%");
})
->orWhereHas('invoice', function($q3) use ($search) {
$q3->where('invoice_number', 'like', "%{$search}%");
/* ----------------------------------
| SEARCH FILTER
|----------------------------------*/
if ($request->filled('search')) {
$search = trim($request->search);
$query->where(function ($q) use ($search) {
$q->where('orders.order_id', 'like', "%{$search}%")
->orWhereHas('markList', function ($q2) use ($search) {
$q2->where('company_name', 'like', "%{$search}%")
->orWhere('customer_id', 'like', "%{$search}%")
->orWhere('origin', 'like', "%{$search}%")
->orWhere('destination', 'like', "%{$search}%");
})
->orWhereHas('invoice', function ($q3) use ($search) {
$q3->where('invoice_number', 'like', "%{$search}%");
})
->orWhereHas('shipments', function ($q4) use ($search) {
// ✅ VERY IMPORTANT: table name added
$q4->where('shipments.shipment_id', 'like', "%{$search}%");
});
});
});
}
/* ----------------------------------
| INVOICE STATUS FILTER
|----------------------------------*/
if ($request->filled('status')) {
$query->where(function ($q) use ($request) {
$q->whereHas('invoice', function ($q2) use ($request) {
$q2->where('status', $request->status);
})
->orWhereDoesntHave('invoice');
});
}
/* ----------------------------------
| SHIPMENT STATUS FILTER
|----------------------------------*/
if ($request->filled('shipment')) {
$query->where(function ($q) use ($request) {
$q->whereHas('shipments', function ($q2) use ($request) {
$q2->where('status', $request->shipment);
})
->orWhereDoesntHave('shipments');
});
}
/* ----------------------------------
| DATE RANGE FILTER (🔥 FIXED)
|----------------------------------*/
if ($request->filled('from_date')) {
$query->whereDate('orders.created_at', '>=', $request->from_date);
}
if ($request->filled('to_date')) {
$query->whereDate('orders.created_at', '<=', $request->to_date);
}
return $query->latest('orders.id');
}
// Invoice status filter
if ($request->filled('status')) {
$query->whereHas('invoice', function($q) use ($request) {
$q->where('status', $request->status);
});
}
// Shipment status filter
if ($request->filled('shipment')) {
$query->whereHas('shipments', function($q) use ($request) {
$q->where('status', $request->shipment);
});
}
// optional ordering
$query->latest('id');
return $query;
}
public function downloadPdf(Request $request)
{
// Build same filtered query used for table
// $query = $this->buildOrdersQueryFromRequest($request);
public function downloadPdf(Request $request)
{
// Build same filtered query used for table
$query = $this->buildOrdersQueryFromRequest($request);
// $orders = $query->get();
$orders = $query->get();
// // optional: pass filters to view for header
// $filters = [
// 'search' => $request->search ?? null,
// 'status' => $request->status ?? null,
// 'shipment' => $request->shipment ?? null,
// ];
// $pdf = PDF::loadView('admin.orders.pdf', compact('orders', 'filters'))
// ->setPaper('a4', 'landscape'); // adjust if needed
// $fileName = 'orders-report'
// . ($filters['status'] ? "-{$filters['status']}" : '')
// . '-' . date('Y-m-d') . '.pdf';
// return $pdf->download($fileName);
$orders = $this->buildOrdersQueryFromRequest($request)->get();
// optional: pass filters to view for header
$filters = [
'search' => $request->search ?? null,
'status' => $request->status ?? null,
'shipment' => $request->shipment ?? null,
'search' => $request->search,
'status' => $request->status,
'shipment' => $request->shipment,
'from' => $request->from_date,
'to' => $request->to_date,
];
$pdf = PDF::loadView('admin.orders.pdf', compact('orders', 'filters'))
->setPaper('a4', 'landscape'); // adjust if needed
->setPaper('a4', 'landscape');
$fileName = 'orders-report'
. ($filters['status'] ? "-{$filters['status']}" : '')
. '-' . date('Y-m-d') . '.pdf';
return $pdf->download(
'orders-report-' . now()->format('Y-m-d') . '.pdf'
);
}
return $pdf->download($fileName);
}
public function downloadExcel(Request $request)
{
// pass request to OrdersExport which will build Filtered query internally
return Excel::download(new OrdersExport($request), 'orders-report-' . date('Y-m-d') . '.xlsx');
}
public function downloadExcel(Request $request)
{
// pass request to OrdersExport which will build Filtered query internally
// return Excel::download(new OrdersExport($request), 'orders-report-' . date('Y-m-d') . '.xlsx');
return Excel::download(
new OrdersExport($request),
'orders-report-' . now()->format('Y-m-d') . '.xlsx'
);
}
public function addTempItem(Request $request)