File: //var/www/html/punjabcabs/app/Http/Controllers/ProviderResources/ProfileController.php
<?php
namespace App\Http\Controllers\ProviderResources;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Http\Controllers\Controller;
use Auth;
use Setting;
use Storage;
use Exception;
use Carbon\Carbon;
use App\ProviderProfile;
use App\UserRequests;
use App\ProviderService;
use App\Fleet;
use App\ProviderApplication;
class ProfileController extends Controller
{
/**
* Create a new user instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('provider.api', ['except' => ['show', 'store', 'available', 'location_edit', 'location_update','application_show','application_store']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
try {
Auth::user()->service = ProviderService::where('provider_id',Auth::user()->id)
->with('service_type')
->first();
Auth::user()->fleet = Fleet::find(Auth::user()->fleet);
Auth::user()->currency = Setting::get('currency', '$');
Auth::user()->sos = Setting::get('sos_number', '911');
return Auth::user();
} catch (Exception $e) {
return $e->getMessage();
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'mobile' => 'required',
'avatar' => 'mimes:jpeg,bmp,png',
'language' => 'max:255',
'address' => 'max:255',
'address_secondary' => 'max:255',
'city' => 'max:255',
'country' => 'max:255',
'postal_code' => 'max:255',
]);
try {
$Provider = Auth::user();
if($request->has('first_name'))
$Provider->first_name = $request->first_name;
if($request->has('last_name'))
$Provider->last_name = $request->last_name;
if ($request->has('mobile'))
$Provider->mobile = $request->mobile;
if ($request->hasFile('avatar')) {
Storage::delete($Provider->avatar);
$Provider->avatar = $request->avatar->store('provider/profile');
}
if($request->has('service_type')) {
if($Provider->service) {
if($Provider->service->service_type_id != $request->service_type) {
$Provider->status = 'banned';
}
$ProviderService = ProviderService::find(Auth::user()->id);
$ProviderService->service_type_id = $request->service_type;
$ProviderService->taxi_type = 1;
$ProviderService->service_number = $request->service_number;
$ProviderService->service_model = $request->service_model;
$ProviderService->save();
} else {
ProviderService::create([
'provider_id' => $Provider->id,
'service_type_id' => $request->service_type,
'taxi_type' => 1,
'service_number' => $request->service_number,
'service_model' => $request->service_model,
]);
$Provider->status = 'banned';
}
}
if($Provider->profile) {
$Provider->profile->update([
'language' => $request->language ? : $Provider->profile->language,
'address' => $request->address ? : $Provider->profile->address,
'address_secondary' => $request->address_secondary ? : $Provider->profile->address_secondary,
'city' => $request->city ? : $Provider->profile->city,
'country' => $request->country ? : $Provider->profile->country,
'postal_code' => $request->postal_code ? : $Provider->profile->postal_code,
]);
} else {
ProviderProfile::create([
'provider_id' => $Provider->id,
'language' => $request->language,
'address' => $request->address,
'address_secondary' => $request->address_secondary,
'city' => $request->city,
'country' => $request->country,
'postal_code' => $request->postal_code,
]);
}
$Provider->save();
return redirect(route('provider.profile.index'));
}
catch (ModelNotFoundException $e) {
return response()->json(['error' => 'Provider Not Found!'], 404);
}
}
/**
* Display the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function show()
{
return view('provider.profile.index');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
{
$this->validate($request, [
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'mobile' => 'required',
'avatar' => 'mimes:jpeg,bmp,png',
'language' => 'max:255',
'address' => 'max:255',
'address_secondary' => 'max:255',
'city' => 'max:255',
'country' => 'max:255',
'postal_code' => 'max:255',
]);
try {
$Provider = Auth::user();
if($request->has('first_name'))
$Provider->first_name = $request->first_name;
if($request->has('last_name'))
$Provider->last_name = $request->last_name;
if ($request->has('mobile'))
$Provider->mobile = $request->mobile;
if ($request->hasFile('avatar')) {
Storage::delete($Provider->avatar);
$Provider->avatar = $request->avatar->store('provider/profile');
}
if($Provider->profile) {
$Provider->profile->update([
'language' => $request->language ? : $Provider->profile->language,
'address' => $request->address ? : $Provider->profile->address,
'address_secondary' => $request->address_secondary ? : $Provider->profile->address_secondary,
'city' => $request->city ? : $Provider->profile->city,
'country' => $request->country ? : $Provider->profile->country,
'postal_code' => $request->postal_code ? : $Provider->profile->postal_code,
]);
} else {
ProviderProfile::create([
'provider_id' => $Provider->id,
'language' => $request->language,
'address' => $request->address,
'address_secondary' => $request->address_secondary,
'city' => $request->city,
'country' => $request->country,
'postal_code' => $request->postal_code,
]);
}
$Provider->save();
return $Provider;
}
catch (ModelNotFoundException $e) {
return response()->json(['error' => 'Provider Not Found!'], 404);
}
}
/**
* Update latitude and longitude of the user.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function location(Request $request)
{
$this->validate($request, [
'latitude' => 'required|numeric',
'longitude' => 'required|numeric',
]);
if($Provider = Auth::user()){
$Provider->latitude = $request->latitude;
$Provider->longitude = $request->longitude;
$Provider->save();
return response()->json(['message' => 'Location Updated successfully!']);
} else {
return response()->json(['error' => 'Provider Not Found!']);
}
}
/**
* Toggle service availability of the provider.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function available(Request $request)
{
$this->validate($request, [
'service_status' => 'required|in:active,offline',
]);
$Provider = Auth::user();
if($Provider->service) {
$Provider->service->update(['status' => $request->service_status]);
} else {
return response()->json(['error' => 'You account has not been approved for driving']);
}
return $Provider;
}
/**
* Update password of the provider.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function password(Request $request)
{
$this->validate($request, [
'password' => 'required|confirmed',
'password_old' => 'required',
]);
$Provider = Auth::user();
if(password_verify($request->password_old, $Provider->password))
{
$Provider->password = bcrypt($request->password);
$Provider->save();
return response()->json(['message' => 'Password changed successfully!']);
} else {
return response()->json(['error' => 'Please enter correct password'], 422);
}
}
/**
* Show providers daily target.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function target(Request $request)
{
try {
Carbon::setWeekStartsAt(Carbon::SUNDAY);
$type =$request->type;
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->where('created_at', '>=', Carbon::today())
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
if($type == 0){
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->where('created_at', '>=', Carbon::today())
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
}elseif($type == 1){
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->whereBetween('created_at', [Carbon::now()->startOfWeek(),Carbon::now()->endOfWeek()])
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
}elseif($type == 2){
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->where('created_at', '>=', Carbon::now()->month)
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
}elseif($type == 3){
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->where('created_at', '>=', Carbon::now()->year)
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
}elseif($type == 4){
$Rides = UserRequests::where('provider_id', Auth::user()->id)
->where('status', 'COMPLETED')
->with('payment', 'service_type')
->orderBy('id','desc')
->get();
}
$total_earnings =0;
foreach ($Rides as $key => $value) {
if($Rides[$key]->payment){
$Rides[$key]->payment->earnings = $value->payment->total - $value->payment->commision;
$Rides[$key]->payment->trip_amount = $value->payment->total - $value->payment->tip_amount;
$total_earnings+= $Rides[$key]->payment->earnings;
}
}
return response()->json([
'rides' => $Rides,
'total_earnings' =>$total_earnings,
'rides_count' => $Rides->count(),
'target' => Setting::get('daily_target','0')
]);
} catch(Exception $e) {
return $e;
}
}
/**
* Display the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function application_show()
{
return view('provider.application.index');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function application_store(Request $request)
{
$this->validate($request, [
'name' => 'required|max:25',
'last_name' => 'required|max:25',
'dob' => 'required|max:25',
'ssn' => 'required|max:25',
'phone' => 'required|max:25',
'driver_license' => 'required|max:50',
'expiration_date' => 'required|max:50',
'emergency_person' => 'required|max:50',
'emergency_phone' => 'required|max:50',
'crime' => 'required|max:50',
'make' => 'required|max:50',
'model' => 'required|max:50',
'model_type' => 'required|max:50',
'year' => 'required|max:50',
'color' => 'required|max:50',
'license_plate' => 'required|max:50',
'shift1' => 'required|max:50',
'shift2' => 'required|max:50',
'shift3' => 'required|max:50',
]);
try {
$Provider = Auth::user();
if($request->ajax()) {
if($request->has('shift1')){
$shift1 = $request->shift1;
}else{
$shift1 ="";
}
if($request->has('shift2')){
$shift2 = $request->shift2;
}else{
$shift2 ="";
}
if($request->has('shift3')){
$shift3 = $request->shift3;
}else{
$shift3 ="";
}
}else{
if($request->has('shift1')){
$shift1 = implode(',', $request->shift1);
}else{
$shift1 ="";
}
if($request->has('shift2')){
$shift2 = implode(',', $request->shift2);
}else{
$shift2 ="";
}
if($request->has('shift3')){
$shift3 = implode(',', $request->shift3);
}else{
$shift3 ="";
}
}
if($Provider->application) {
$Provider->application->update([
'name' => $request->name ? : $Provider->application->name,
'last_name' => $request->last_name ? : $Provider->application->last_name,
'dob' => $request->dob ? : $Provider->application->dob,
'ssn' => $request->ssn ? : $Provider->application->ssn,
'phone' => $request->phone ? : $Provider->application->phone,
'driver_license' => $request->driver_license ? : $Provider->application->driver_license,
'expiration_date' => $request->expiration_date ? : $Provider->application->expiration_date,
'emergency_person' => $request->emergency_person ? : $Provider->application->emergency_person,
'emergency_phone' => $request->emergency_phone ? : $Provider->application->emergency_phone,
'crime' => $request->crime ? : $Provider->application->crime,
'crime_explain' => $request->crime_explain ? : $Provider->application->crime_explain,
'make' => $request->make ? : $Provider->application->make,
'model' => $request->model ? : $Provider->application->model,
'model_type' => $request->model_type ? : $Provider->application->model_type,
'year' => $request->year ? : $Provider->application->year,
'color' => $request->color ? : $Provider->application->color,
'license_plate' => $request->license_plate ? : $Provider->application->license_plate,
'shift1' => $shift1,
'shift2' => $shift2,
'shift3' => $shift3,
]);
} else {
ProviderApplication::create([
'provider_id' => Auth::user()->id,
'name' => $request->name,
'last_name' => $request->last_name,
'dob' => $request->dob,
'ssn' => $request->ssn,
'phone' => $request->phone,
'driver_license' => $request->driver_license,
'expiration_date' => $request->expiration_date,
'emergency_person' => $request->emergency_person,
'emergency_phone' => $request->emergency_phone,
'crime' => $request->crime,
'crime_explain' => $request->crime_explain ? : '',
'make' => $request->make,
'model' => $request->model,
'model_type' => $request->model_type,
'year' => $request->year,
'color' => $request->color,
'license_plate' => $request->license_plate,
'shift1' => $shift1,
'shift2' => $shift2,
'shift3' => $shift3,
]);
}
$Provider->save();
if($request->ajax()) {
return response()->json(['message' => trans('Application Updated Successfully')]);
}else{
return back()->with('flash_success', 'Application Updated Successfully');
}
}
catch (ModelNotFoundException $e) {
if($request->ajax()) {
return response()->json(['error' => trans('api.something_went_wrong')], 500);
}else{
return back()->with('flash_error', 'Something went wrong while sending application. Please try again.');
}
}
}
}