File: /var/www/html/orbidirectory.com/app/Http/Controllers/Admin/CargoVehicleController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\CargoBrand;
use App\Models\CargoModel;
use App\Models\CargoType;
use App\Models\CargoVehicle;
use App\Models\Transporter;
use Illuminate\Http\Request;
use Symfony\Component\Mailer\Transport;
use Yajra\DataTables\Facades\DataTables;
class CargoVehicleController extends Controller
{
public function index(Request $request) {
if ($request->ajax()) {
$cargoVehicles = CargoVehicle::with(['transporter.get_user', 'cargoBrand', 'cargoModel', 'cargoType'])
->orderBy('created_at', 'desc');
return DataTables::of($cargoVehicles)
->addColumn('transporter_name', function ($row) {
$user = $row->transporter->get_user ?? null;
if ($user) {
return trim($user->name . ' ' . $user->last_name);
}
return '';
})
->addColumn('cargo_brand_name', function ($row) {
return $row->cargoBrand->name ?? '';
})
->addColumn('cargo_model_name', function ($row) {
return $row->cargoModel->name ?? '';
})
->addColumn('cargo_type_name', function ($row) {
return $row->cargoType->name ?? '';
})
->editColumn('status', function ($row) {
if ($row->status == CargoVehicle::STATUS_ACTIVE) {
$status = 'Active';
$badgeClass = 'badge bg-success';
} elseif ($row->status == CargoVehicle::STATUS_INACTIVE) {
$status = 'Inactive';
$badgeClass = 'badge bg-warning';
} elseif ($row->status == CargoVehicle::STATUS_BANNED) {
$status = 'Banned';
$badgeClass = 'badge bg-danger';
}
return "<span class='status-label {$badgeClass}'>{$status}</span>";
})
->addColumn('action', function ($row) {
return view('admin.cargo_vehicle.partially.delete', compact('row'));
})
->rawColumns(['action','transporter_name','cargo_brand_name','cargo_model_name','cargo_type_name','status'])
->make(true);
}
return view('admin.cargo_vehicle.index');
}
// public function index(Request $request) {
// if ($request->ajax()) {
// $cargo_type = CargoVehicle::query()
// ->orderBy('created_at', 'desc');
// return DataTables::of($cargo_type)
// ->addColumn('action', function ($row) {
// $editUrl = route('cargo.type.edit', $row->id);
// return '<a href="'.$editUrl.'" class="btn btn-sm btn-dark"><i class="fa fa-pencil-alt"></i></a>';
// })
// ->rawColumns(['action'])
// ->make(true);
// }
// return view('admin.cargo_vehicle.index');
// }
public function create_vehicle(){
$transporters = Transporter::get();
$cargo_brands = CargoBrand::where('status',CargoBrand::STATUS_ACTIVE)->get();
$cargo_models = CargoModel::where('status',CargoModel::STATUS_ACTIVE)->get();
$cargo_types = CargoType::where('status',CargoModel::STATUS_ACTIVE)->get();
return view('admin.cargo_vehicle.create',compact('transporters','cargo_brands','cargo_models','cargo_types'));
}
public function get_models_by_brand(Request $request){
$brand_id = $request->query('brand_id');
$models = CargoModel::where('cargo_brand_id', $brand_id)->where('status',CargoModel::STATUS_ACTIVE)->get();
return response()->json($models);
}
public function store_vehicle(Request $request)
{
// Step 1: Validate the request
$request->validate([
'transporter_id' => 'required',
'cargo_brand_id' => 'required',
'cargo_model_id' => 'required',
'cargo_type_id' => 'required',
'fuel_type' => 'required',
'body_type' => 'required',
'loading_ramp_available' => 'required',
'permit_type' => 'required',
'weight_capacity' => 'required',
'weight_unit' => 'required',
'length_in' => 'required',
'width_in' => 'required',
'depth_in' => 'required',
'bed_dimension_unit' => 'required',
]);
try {
// Step 2: Save to database
$cargo_vehicle = new CargoVehicle;
$cargo_vehicle->transporter_id = $request->transporter_id;
$cargo_vehicle->cargo_brand_id = $request->cargo_brand_id;
$cargo_vehicle->cargo_model_id = $request->cargo_model_id;
$cargo_vehicle->cargo_type_id = $request->cargo_type_id;
$cargo_vehicle->fuel_type = $request->fuel_type;
$cargo_vehicle->body_type = $request->body_type;
$cargo_vehicle->loading_ramp_available = $request->loading_ramp_available;
$cargo_vehicle->permit_type = $request->permit_type;
$cargo_vehicle->weight_capacity = $request->weight_capacity;
$cargo_vehicle->weight_unit = $request->weight_unit;
$cargo_vehicle->length_in = $request->length_in;
$cargo_vehicle->width_in = $request->width_in;
$cargo_vehicle->depth_in = $request->depth_in;
$cargo_vehicle->bed_dimension_unit = $request->bed_dimension_unit;
$cargo_vehicle->status = $request->status;
$cargo_vehicle->inactive_reason = $request->inactive_reason;
$cargo_vehicle->save();
if ($request->hasFile('cargo_vehicle_image')) {
$cargo_vehicle->addMediaFromRequest('cargo_vehicle_image')->toMediaCollection('cargo_vehicle_image');
}
// Step 3: Redirect with success
return redirect()->route('cargo.vehicle')->with('success', 'Cargo Vehicle saved successfully.');
} catch (\Exception $e) {
// Step 4: Redirect with error
return redirect()->route('cargo.vehicle')->with('error', 'Failed to save vehicle: ' . $e->getMessage());
}
}
public function edit_vehicle($id){
$cargo_vehicle = CargoVehicle::findOrFail($id); // Get the existing vehicle data
$transporters = Transporter::get();
$cargo_brands = CargoBrand::where('status',CargoBrand::STATUS_ACTIVE)->get();
$cargo_models = CargoModel::where('status',CargoModel::STATUS_ACTIVE)->where('cargo_brand_id', $cargo_vehicle->cargo_brand_id)->get();
$cargo_types = CargoType::where('status',CargoType::STATUS_ACTIVE)->get();
return view('admin.cargo_vehicle.edit',compact('transporters','cargo_brands','cargo_models','cargo_types','cargo_vehicle'));
}
public function update_vehicle(Request $request, $id)
{
// Step 1: Validate the request
$request->validate([
'transporter_id' => 'required',
'cargo_brand_id' => 'required',
'cargo_model_id' => 'required',
'cargo_type_id' => 'required',
'fuel_type' => 'required',
'body_type' => 'required',
'loading_ramp_available' => 'required',
'permit_type' => 'required',
'weight_capacity' => 'required',
'weight_unit' => 'required',
'length_in' => 'required',
'width_in' => 'required',
'depth_in' => 'required',
'bed_dimension_unit' => 'required',
]);
try {
// Step 2: Find and update the record
$cargo_vehicle = CargoVehicle::findOrFail($id);
$cargo_vehicle->transporter_id = $request->transporter_id;
$cargo_vehicle->cargo_brand_id = $request->cargo_brand_id;
$cargo_vehicle->cargo_model_id = $request->cargo_model_id;
$cargo_vehicle->cargo_type_id = $request->cargo_type_id;
$cargo_vehicle->fuel_type = $request->fuel_type;
$cargo_vehicle->body_type = $request->body_type;
$cargo_vehicle->loading_ramp_available = $request->loading_ramp_available;
$cargo_vehicle->permit_type = $request->permit_type;
$cargo_vehicle->weight_capacity = $request->weight_capacity;
$cargo_vehicle->weight_unit = $request->weight_unit;
$cargo_vehicle->length_in = $request->length_in;
$cargo_vehicle->width_in = $request->width_in;
$cargo_vehicle->depth_in = $request->depth_in;
$cargo_vehicle->bed_dimension_unit = $request->bed_dimension_unit;
$cargo_vehicle->status = $request->status;
$cargo_vehicle->inactive_reason = $request->inactive_reason;
$cargo_vehicle->save();
// Step 3: Handle new image upload (replace old one if exists)
if ($request->hasFile('cargo_vehicle_image')) {
$cargo_vehicle->clearMediaCollection('cargo_vehicle_image');
$cargo_vehicle->addMediaFromRequest('cargo_vehicle_image')->toMediaCollection('cargo_vehicle_image');
}
// Step 4: Redirect with success
return redirect()->route('cargo.vehicle')->with('success', 'Cargo Vehicle updated successfully.');
} catch (\Exception $e) {
// Step 5: Redirect with error
return redirect()->route('cargo.vehicle')->with('error', 'Failed to update vehicle: ' . $e->getMessage());
}
}
public function delete_vehicle(Request $request, $id){
{
$cargo_vehicle = CargoVehicle::find($id);
if (isset($cargo_vehicle)) {
$cargo_vehicle->Delete();
return redirect()->back()->with('success', 'Cargo vehcile has been deleted successfully.');
} else {
return back()->with('error', 'Cargo vehcile not found.');
}
}
}
}