Edit File: DelegateController.php
<?php namespace App\Http\Controllers\Admin; use App\Http\Requests\UpdateDelegateDataRequest; use App\Models\Bank; use App\Models\Category; use App\Models\City; use App\Models\DelegateUpdateData; use App\Models\User; use App\Models\Payout; use App\Models\Region; use App\Traits\Report; use App\Models\Cartype; use App\Models\CarModel; use App\Models\Country; use App\Models\Setting; use App\Traits\Uploadable; use App\Models\Nationality; use App\Jobs\NotifyDelegate; use Illuminate\Http\Request; use App\Services\SettingService; use App\Models\DelegateJoinrequest; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Session; use App\Http\Requests\Admin\Delegate\Store; use App\Http\Requests\Admin\Delegate\Settlement; use App\Jobs\DeleteUser; use App\Jobs\NotifyUser; use App\Jobs\BlockUser; use App\Jobs\AcceptDelegateJoinNotify; use App\Http\Requests\Admin\Notification\StoreOne; class DelegateController extends Controller { use Uploadable; /*************************** get all **************************/ // public function index() // { // $rows = User::where( 'type', 'delegate' )->latest()->get(); // return view( 'admin.delegates.index', compact( 'rows' ) ); // } public function index( $id = null ) { if ( request()->ajax() ) { $rows = User::where( 'type', 'delegate' )->search( request()->searchArray )->paginate( 10 ); $html = view( 'admin.delegates.table', compact( 'rows' ) )->render(); return response()->json( [ 'html' => $html ] ); } return view( 'admin.delegates.index' ); } /*************************** accept**************************/ // public function pending() // { // $rows = DelegateJoinrequest::where( 'status', 'pending' )->latest()->get(); // return view( 'admin.delegates.requests', compact( 'rows' ) ); // } public function pending( $id = null ) { if ( request()->ajax() ) { $rows = DelegateJoinrequest::where( 'status', 'pending' )->whereHas( 'user' )->search( request()->searchArray )->paginate( 10 ); $html = view( 'admin.requests.table', compact( 'rows' ) )->render(); return response()->json( [ 'html' => $html ] ); } return view( 'admin.requests.requests' ); } /*************************** accept**************************/ public function showRequest( $id ) { $countries = Country::get(); $regions = Region::get(); $nationalities = Nationality::get(); $types = Cartype::get(); $models = CarModel::get(); $companies = User::where( 'type', 'company' )->get(); $delegateRequest = DelegateJoinrequest::findOrFail( $id ); $city = City::where( 'id', $delegateRequest[ 'city_id' ] ?? '' )->first(); $region = Region::where( 'id', $city[ 'region_id' ] ?? '' )->first(); $categories = Category::get(); $cities = City::get(); $row=$delegateRequest->user; return view( 'admin.delegates.request_show', compact( 'delegateRequest','cities','categories', 'region', 'row', 'countries', 'regions', 'nationalities', 'types', 'companies', 'city','models' ) ); } public function acceptOrRefuse(Request $request) { $row = DelegateJoinrequest::findOrFail( $request->id ); $user = $row->user; if ( $request->status == 'approved' ) { if ( $row->company_id != null ) { $row->update( [ 'user_id' => $row->user->id, 'status' => 'approved'] ); } else { $row->user->update( [ 'type' => 'delegate', 'approve' => 'approved','completed_info'=>'true' ] ); } $row->update( [ 'status' => $request->status ] ); dispatch( new AcceptDelegateJoinNotify( $row ) ); $user->update(['approve' => 'approved','completed_info'=>'true']); return response()->json(['url' => route('admin.delegates.pending') , 'message' => 'تم قبول الطلب بنجاح']); } else { $row->update( [ 'status' => $request->status ] ); $user->update(['approve' => 'rejected']); return response()->json(['url' => route('admin.delegates.pending') , 'message' => 'تم رفض الطلب بنجاح']); } } /*************************** update **************************/ public function update( Store $request, $id ) { $user = User::find( $id ); $delegate = $user; $join = $delegate->delegateJoinRequests()->latest()->first(); $delegate->update($request->only('name', 'avatar', 'city_id','status')); $join->update($request->validated() + ['user_id' => $delegate->id, 'phone' => $delegate->phone, 'fullname' => $delegate->name]); if ( $request[ 'status' ] == 'block' ) { dispatch( new BlockUser( $user ) ); } Report::addToLog( ' تعديل مندوب' ); return response()->json( [ 'url' => route( 'admin.delegates.index' ) ] ); } public function getUpdateRequest($id = null) { if (request()->ajax()) { $rows = DelegateUpdateData::where('status', 'pending')->whereHas('user')->search(request()->searchArray)->paginate(10); $html = view('admin.delegates_update_requests.table', compact('rows'))->render(); return response()->json(['html' => $html]); } return view('admin.delegates_update_requests.requests'); } public function showUpdateData($id) { $keys = Country::get(); $cities = City::get(); $companies = User::where('type', 'company')->get(); $row = DelegateUpdateData::findOrFail($id); $categories = Category::get(); // return $row->user; return view('admin.delegates.request_show', compact('row','categories', 'companies', 'cities', 'keys')); } public function updateData(Request $request) { $data = DelegateUpdateData::findOrFail($request->id); $arrayData = $data->toArray(); (new UpdateDelegateDataRequest)->validateArrayData($arrayData); if ($request->status == 'approved') { $user = User::find($data->user->id); // dd($user->avatar); $user->update([ 'name' => $data->fullname, 'phone' => $data->phone, // 'avatar' => $user->setAvatarAttribute($data->personal_image??$user->avatar), // 'city_id' => $data->city_id, 'bank_name' => $data->bank_name, 'bank_account_owner' => $data->bank_account_owner, 'bank_account_number' => $data->bank_account_number, 'bank_iban_number' => $data->bank_iban_number, ]); // dd('ss'); $join = DelegateJoinrequest::where('user_id', $user->id)->first(); // dd($user); $join->update([ 'category_id' => $data->category_id, 'fullname' => $data->fullname, 'identity_card_number' => $data->identity_card_number, 'city_id' => $data->city_id, 'phone' => $data->phone, 'car_type_id' => $data->car_type_id, 'car_numbers' => $data->car_numbers, 'category_id' => $data->category_id, 'driving_license_image' => $join->setDrivingLicenseImageAttribute($data->driving_license_image), // 'car_license_image' => $join->setCarLicenseImageAttribute($data->car_license_image), // 'delegation_image' => $join->setDelegationImageAttribute( $data->delegation_image), 'identity_card_image' => $join->setIdentityCardImageAttribute($data->identity_card_image), 'personal_image' => $join->setPersonalImageAttribute($data->personal_image), 'car_front_image' => $join->setCarFrontImageAttribute($data->car_front_image), 'bank_account_number' => $data->bank_account_number, 'bank_iban_number' => $data->bank_iban_number, 'bank_name' => $data->bank_name, 'bank_account_owner' => $data->bank_account_owner, ]); $data->status = 'approved'; $data->save(); Session::flash('success', awtTrans('تم قبول الطلب بنجاح')); return redirect()->route('admin.delegates.getUpdateRequest'); }else{ $data->status = 'rejected'; $data->save(); Session::flash('success', awtTrans('تم رفض الطلب بنجاح')); return redirect()->route('admin.delegates.getUpdateRequest'); } } /*************************** getCities **************************/ public function getCities( Request $request ) { $regionIds = Region::where( 'country_id', $request[ 'country_id' ] )->pluck( 'id' ); $cities = City::select( 'id', 'name' )->whereIn( 'region_id', $regionIds )->get(); $arr = [ 'cities' => $cities ]; if ( isset( $request->city_id ) ) { $arr[ 'selectedCity' ] = $request[ 'city_id' ]; } $html = view( 'admin.delegates.cities' )->with( $arr )->render(); return response()->json( [ 'key' => 'success', 'html' => $html ] ); } /*************************** store **************************/ public function store( Store $request ) { $user = User::create([ 'type'=>'delegate','is_available'=>1,'completed_info'=>'true' , 'phone' => $request['phone'] ,'country_key'=>$request['country_key'],'name'=>$request['name'],'avatar'=>$request['avatar'],'approve'=>'approved'] ); DelegateJoinrequest::create([ 'user_id' => $user->id, 'phone' => $user->phone, 'fullname' => $user->name, 'name' => $user->name, 'country_key'=>$request['country_key'], 'category_id'=>$request['category_id'], 'car_type_id'=>$request['car_type_id'], 'car_numbers'=>$request['car_numbers'], 'driving_license_image'=>$request['driving_license_image'], 'identity_card_image'=>$request['identity_card_image'], 'car_license_image'=>$request['car_license_image'], 'car_front_image'=>$request['car_front_image'], 'bank_iban_number'=>$request['bank_iban_number'], 'bank_account_owner'=>$request['bank_account_owner'], 'bank_name'=>$request['bank_name'], 'bank_account_number'=>$request['bank_account_number'], 'identity_card_number'=>$request['identity_card_number'], 'status'=>'approved', ] ); Report::addToLog( ' اضافه مندوب' ); return response()->json( [ 'url' => route( 'admin.delegates.index' ) ] ); } /*************************** store **************************/ public function create() { $countries = Country::get(); $regions = Region::get(); $nationalities = Nationality::get(); $types = Cartype::get(); $models = CarModel::get(); $categories = Category::get(); $cities = City::get(); $companies = User::where( 'type', 'company' )->where( 'approve', 'accept' )->get(); return view( 'admin.delegates.create', compact( 'countries','categories', 'regions','cities', 'nationalities', 'types', 'companies' ,'models') ); } /*************************** edit page **************************/ public function edit( $id ) { $row = User::findOrFail( $id ); $delegateRequest = $row->delegateJoinRequests->first(); $countries = Country::get(); $regions = Region::get(); $nationalities = Nationality::get(); $types = Cartype::get(); $models = CarModel::get(); $companies = User::where( 'type', 'company' )->get(); $city = City::where( 'id', $delegateRequest[ 'city_id' ] ?? '' )->first(); $region = Region::where( 'id', $city[ 'region_id' ] ?? '' )->first(); $categories = Category::get(); $cities = City::get(); // dd( $delegateRequest ); return view( 'admin.delegates.edit', compact( 'delegateRequest','cities','categories', 'region', 'row', 'countries', 'regions', 'nationalities', 'types', 'companies', 'city','models' ) ); } /*************** show *************************************/ // public function show( $id ) // { // $row = User::findOrFail( $id ); // $keys = Country::get(); // $cities = City::get(); // return view( 'admin.delegates.show', [ 'row' => $row, 'keys' => $keys, 'cities' => $cities ] ); // } /*************************** delete **************************/ public function destroy( $id ) { $user = User::find( $id ); dispatch( new DeleteUser( $user ) ); $user->delete(); Report::addToLog( ' حذف مندوب' ); return response()->json( [ 'id' => $id ] ); } public function destroyAll( Request $request ) { $requestIds = json_decode( $request->data ); foreach ( $requestIds as $id ) { $ids[] = $id->id; } $users = User::whereIn( 'id', $ids )->get(); foreach ( $users as $user ) { dispatch( new DeleteUser( $user ) ); } if ( User::WhereIn( 'id', $ids )->delete() ) { Report::addToLog( ' حذف العديد من المناديب' ); return response()->json( 'success' ); } else { return response()->json( 'failed' ); } } // public function getDelegatesHaveBalance() // { // $rows = User::where( 'type', 'delegate' )->where( 'wallet', '>', 0 )->latest()->get(); // return view( 'admin.delegates.have_balance', compact( 'rows' ) ); // } public function getDelegatesHaveBalance( $id = null ) { if ( request()->ajax() ) { $rows = User::where( 'type', 'delegate' )->where( 'wallet', '>', 0 )->latest()->search( request()->searchArray )->paginate( 10 ); $html = view( 'admin.delegates.have_balance_table', compact( 'rows' ) )->render(); return response()->json( [ 'html' => $html ] ); } return view( 'admin.delegates.have_balance' ); } public function postDelegatesSettlement( Settlement $request ) { $user = User::findOrFail( $request->user_id ); if ( $request->balance > $user->wallet ) { $result = [ 'key' => 'fail', 'msg' => awtTrans( 'عذرأ مبلغ التسوية يجب الا يكون اكبر من المستحقات' ) ]; return response()->json( $result ); } if ( $request->method == 'with_hand' ) { $wallet_after_settlement = $user->update( [ 'wallet' => ( $user->wallet - $request->balance ) ] ); dispatch( new NotifyDelegate( $user, $request ) ); $result = [ 'key' => 'success', 'msg' => awtTrans( 'تمت التسويه بنجاح' ) ]; return response()->json( $result ); } $data = SettingService::appInformations( Setting::pluck( 'value', 'key' ) ); $split_mode = $data[ 'hyper_split_mode' ]; $bank_id = $data[ 'bank_id' ]; $swift_code = Bank::findOrfail( $bank_id )->swift_code; if ( $split_mode == 'test' ) { $url = 'https://splits.sandbox.hyperpay.com/api/v1/login'; $order_url = 'https://splits.sandbox.hyperpay.com/api/v1/orders'; $accountId = ' '; } else { $url = 'https://splits.hyperpay.com/api/v1/login'; $order_url = 'https://splits.hyperpay.com/api/v1/orders'; $accountId = $request->bank_iban_number; } $response = Http::asForm()->post( $url, [ 'email' => $data[ 'hyper_split_email' ], 'password' => $data[ 'hyper_split_password' ] ] ); $array = json_decode( $response->getBody()->getContents(), true ); $authorization = $array[ 'data' ][ 'accessToken' ]; $myBody[ 'merchantTransactionId' ] = rand( 1111, 9999 ) . $user->id; $myBody[ 'transferOption' ] = '0'; $myBody[ 'configId' ] = $data[ 'hyper_split_config_id' ]; if ( $request->type == 'iban' ) { $arr[] = [ 'name' => $user->name, 'accountId' => $accountId, 'debitCurrency' => 'SAR', 'bankIdBIC' => $swift_code, 'transferAmount' => number_format( ( float )$request->balance, 2, '.', '' ), 'transferCurrency' => 'SAR', 'payoutBeneficiaryAddress1' => $user->address ? $user->address : '', 'payoutBeneficiaryAddress2' => $user->address ? $user->address : '', 'payoutBeneficiaryAddress3' => $user->address ? $user->address : '' ]; } else { $arr[] = [ 'name' => $user->name, 'accountId' => $accountId, 'debitCurrency' => 'SAR', 'transferAmount' => number_format( ( float )$request->balance, 2, '.', '' ), 'transferCurrency' => 'SAR', 'payoutBeneficiaryAddress1' => $user->address ? $user->address : '', 'payoutBeneficiaryAddress2' => $user->address ? $user->address : '', 'payoutBeneficiaryAddress3' => $user->address ? $user->address : '' ]; } $myBody[ 'beneficiary' ] = $arr; $response = Http::asForm()->post( $order_url, [ 'headers' => [ 'Authorization' => 'Bearer ' . $authorization ], 'form_params' => $myBody ] ); $array = json_decode( $response->getBody()->getContents(), true ); // if ( $array->status == true ) { // hint => in case data is true active this condition Payout::create( [ 'data' => isset( $array ) ? json_encode( $array[ 'data' ] ) : '', 'message' => isset( $array ) ? $array[ 'message' ] : '', 'errors' => isset( $array ) ? $array[ 'errors' ] : '', 'transaction_id' => isset( $array ) ? $array[ 'data' ][ 'uniqueId' ] : '', 'user_id' => $user->id, 'amount' => $request->balance, ] ); $result = [ 'key' => 'success', 'msg' => awtTrans( 'تم ارسال طلب التسويه بنجاح' ) ]; return response()->json( $result ); // } Session::flash( 'danger', awtTrans( 'حدث خطا فى ارسال طلب التسويه بنجاح' ) ); return redirect()->back(); } public function notify( StoreOne $request ) { if ( 'all' == $request->id ) { $clients = User::where( 'type', 'delegate' )->where( 'status', 'active' )->get(); $count = 'all'; } else { $clients = User::findOrFail( $request->id ); $count = 'one'; } dispatch( new NotifyUser( $clients, $request, $request->type, $count ) ); return response()->json(); } }
Back to File Manager