Viewing file: ShipmentController.php (7.45 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;
use App\Exports\ShipmentsExport;
use App\Models\Shipment;
use App\Models\Sale;
use App\utils\helpers;
use Carbon\Carbon;
use DB;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Auth;
class ShipmentController extends BaseController
{
//----------- Get ALL Shipments-------\\
public function index(request $request)
{
$this->authorizeForUser($request->user('api'), 'view', Shipment::class);
// How many items do you want to display.
$perPage = $request->limit;
$pageStart = \Request::get('page', 1);
// Start displaying items from this number;
$offSet = ($pageStart * $perPage) - $perPage;
$order = $request->SortField;
$dir = $request->SortType;
$helpers = new helpers();
$data = array();
$shipments = Shipment::with('sale','sale.client','sale.warehouse')
// Search With Multiple Param
->where(function ($query) use ($request) {
return $query->when($request->filled('search'), function ($query) use ($request) {
return $query->where('Ref', 'LIKE', "%{$request->search}%")
->orWhere('status', 'LIKE', "%{$request->search}%")
->orWhere('delivered_to', 'LIKE', "%{$request->search}%")
->orWhere(function ($query) use ($request) {
return $query->whereHas('sale', function ($q) use ($request) {
$q->where('Ref', 'LIKE', "%{$request->search}%");
});
})
->orWhere(function ($query) use ($request) {
return $query->whereHas('sale.warehouse', function ($q) use ($request) {
$q->where('name', 'LIKE', "%{$request->search}%");
});
})
->orWhere(function ($query) use ($request) {
return $query->whereHas('sale.client', function ($q) use ($request) {
$q->where('name', 'LIKE', "%{$request->search}%");
});
});
});
});
$totalRows = $shipments->count();
if($perPage == "-1"){
$perPage = $totalRows;
}
$shipments_data = $shipments->offset($offSet)
->limit($perPage)
->orderBy($order, $dir)
->get();
foreach ($shipments_data as $shipment) {
$item['id'] = $shipment['id'];
$item['date'] = $shipment['date'];
$item['shipment_ref'] = $shipment['Ref'];
$item['status'] = $shipment['status'];
$item['delivered_to'] = $shipment['delivered_to'];
$item['shipping_address'] = $shipment['shipping_address'];
$item['shipping_details'] = $shipment['shipping_details'];
$item['sale_ref'] = $shipment['sale']['Ref'];
$item['sale_id'] = $shipment['sale']['id'];
$item['warehouse_name'] = $shipment['sale']['warehouse']->name;
$item['customer_name'] = $shipment['sale']['client']->name;
$data[] = $item;
}
return response()->json([
'shipments' => $data,
'totalRows' => $totalRows,
]);
}
//----------- Store new Shipment -------\\
public function store(Request $request)
{
$this->authorizeForUser($request->user('api'), 'create', Shipment::class);
request()->validate([
'status' => 'required',
]);
\DB::transaction(function () use ($request) {
$shipment = Shipment::firstOrNew([ 'Ref' => $request['Ref']]);
$shipment->user_id = Auth::user()->id;
$shipment->sale_id = $request['sale_id'];
$shipment->delivered_to = $request['delivered_to'];
$shipment->shipping_address = $request['shipping_address'];
$shipment->shipping_details = $request['shipping_details'];
$shipment->status = $request['status'];
$shipment->save();
$sale = Sale::findOrFail($request['sale_id']);
$sale->update([
'shipping_status' => $request['status'],
]);
}, 10);
return response()->json(['success' => true]);
}
public function show($id){
$get_shipment = Shipment::where('sale_id', $id)->first();
if($get_shipment){
$shipment_data['Ref'] = $get_shipment->Ref;
$shipment_data['sale_id'] = $get_shipment->sale_id;
$shipment_data['delivered_to'] = $get_shipment->delivered_to;
$shipment_data['shipping_address'] = $get_shipment->shipping_address;
$shipment_data['status'] = $get_shipment->status;
$shipment_data['shipping_details'] = $get_shipment->shipping_details;
}else{
$shipment_data['Ref'] = $this->getNumberOrder();
$shipment_data['sale_id'] = $id;
$shipment_data['delivered_to'] = '';
$shipment_data['shipping_address'] = '';
$shipment_data['status'] = '';
$shipment_data['shipping_details'] = '';
}
return response()->json([
'shipment' => $shipment_data,
]);
}
//----------- Update Shipment-------\\
public function update(Request $request, $id)
{
$this->authorizeForUser($request->user('api'), 'update', Shipment::class);
request()->validate([
'status' => 'required',
]);
\DB::transaction(function () use ($request , $id) {
Shipment::whereId($id)->update($request->all());
$sale = Sale::findOrFail($request['sale_id']);
$sale->update([
'shipping_status' => $request['status'],
]);
}, 10);
return response()->json(['success' => true]);
}
//----------- delete Shipment-------\\
public function destroy(Request $request, $id)
{
$this->authorizeForUser($request->user('api'), 'delete', Shipment::class);
\DB::transaction(function () use ($request , $id) {
$shipment = Shipment::find($id);
$shipment->delete();
$sale = Sale::findOrFail($shipment->sale_id);
$sale->update([
'shipping_status' => $request['status'],
]);
}, 10);
return response()->json(['success' => true]);
}
//----------- Export Excel ALL Shipments-------\\
public function exportExcel(Request $request)
{
$this->authorizeForUser($request->user('api'), 'view', Shipment::class);
return Excel::download(new ShipmentsExport, 'shipments.xlsx');
}
//------------- Reference Number Order SALE -----------\\
public function getNumberOrder()
{
$last = DB::table('shipments')->latest('id')->first();
if ($last) {
$item = $last->Ref;
$nwMsg = explode("_", $item);
$inMsg = $nwMsg[1] + 1;
$code = $nwMsg[0] . '_' . $inMsg;
} else {
$code = 'SM_1111';
}
return $code;
}
}
|