service = new JobRequestsService(); $this->customerService = $customerService; } public function all(Request $request) { $items = $this->service->all($request->except('_token')); return [ 'items' => $items ]; } public function statistics(Request $request) { $counts = $this->service->counts($request->except('_token')); return [ 'counts' => $counts ]; } public function credits(Request $request) { try { return response()->json([ 'credits' => auth()->user()->credit_points_status ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function creditsTransfer(Request $request) { try { $data = []; $credits = $this->customerService->credits(auth()->user()->id); if($request->credit_type == 'subscription'){ //lets transfer all to alacaret $data['subscription_credits'] = $credits['total_used_credits']['subscription']; $data['alacarte_credits'] = $credits['total_available_credits']['subscription'] + $credits['total_credits']['alacarte']; } else { //lets transfer all to subscription $data['subscription_credits'] = $credits['total_available_credits']['alacarte'] + $credits['total_credits']['subscription']; $data['alacarte_credits'] = $credits['total_used_credits']['alacarte']; } UserCredit::updateOrCreate( ['user_id' => auth()->user()->id], $data ); $updatedCredits = $this->customerService->credits(auth()->user()->id); UserCreditHistory::create([ 'user_id' => auth()->user()->id, 'subscription_credits_from' => $credits['total_available_credits']['subscription'], 'subscription_credits_to' => $updatedCredits['total_available_credits']['subscription'], 'alacarte_credits_from' => $credits['total_available_credits']['alacarte'], 'alacarte_credits_to' => $updatedCredits['total_available_credits']['alacarte'], 'details' => 'Transfer all available '.($request->credit_type == 'subscription' ? 'Subscription Credits to À La Carte Credits' : 'À La Carte Credits to Subscription Credits') ]); return response()->json([ 'message' => 'Credits Transferred Successfully.' ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function store(JobRequest $request) { if($request->client_id != null && !permissionCheck('job_request.assign')){ return response()->json([ 'message' => "You don't have permission to perform this assign job." ],500); } $this->service->create($request->except('_token')); return response()->json([ 'message' => 'Job Request has been posted.' ]); } public function update(JobRequest $request) { $this->service->update($request->except('_token')); return response()->json([ 'message' => 'Job Request has been updated.' ]); } public function approve(Request $request) { if (permissionCheck('job_request.approve')) { $ret = $this->service->approve($request->id,$request->credits); if ($ret) { return response()->json([ 'message' => 'Job Request has been approved.' ]); } return response()->json([ 'message' => 'Unable to approve job request, customer has insufficient credits!' ], 400); } return response()->json([ 'message' => "You don't have permission to perform this action." ], 403); } public function reject(Request $request) { if (permissionCheck('job_request.reject')) { $ret = $this->service->reject($request->id); if ($ret) { return response()->json([ 'message' => 'Job Request has been rejected.' ]); } return response()->json([ 'message' => 'Unable to reject job request.' ], 400); } return response()->json([ 'message' => "You don't have permission to perform this action." ], 403); } public function incomplete(Request $request) { if (permissionCheck('job_request.incomplete')) { $ret = $this->service->incomplete($request->id); if ($ret) { return response()->json([ 'message' => 'Job Request has been back to in progress.' ]); } return response()->json([ 'message' => 'Unable to incomplete job request.' ], 400); } return response()->json([ 'message' => "You don't have permission to perform this action." ], 403); } public function delete(Request $request) { $ret = $this->service->delete($request->id); if ($ret) { return response()->json([ 'message' => 'Job Request has been deleted.' ]); } return response()->json([ 'message' => 'Unable to delete job request.' ], 400); } public function winner(Request $request) { $request->validate([ 'winner_name' => ['required'], 'winner_shipping_address' => ['required'], 'winner_phone' => ['required'] ]); $this->service->winner($request->except('_token')); return response()->json([ 'message' => 'Winner has been set.' ]); } public function deliverable(Request $request) { $this->service->deliverable($request->except('_token')); return response()->json([ 'message' => 'Order deliverable date has been set.' ]); } public function deliverableUpdate(Request $request) { $ret = $this->service->deliverableUpdate($request->except('_token')); if($ret){ return response()->json([ 'message' => 'Deliverable date has been updated.' ]); } return response()->json([ 'message' => 'Failed to update the deliverable date.' ], 400); } public function postedLinks(Request $request) { $this->service->postedLinks($request->except('_token')); return response()->json([ 'message' => 'Order posted links has been set.' ]); } public function adminNotes(Request $request) { $this->service->adminNotes($request->except('_token')); return response()->json([ 'message' => 'Admin Notes has been saved.' ]); } public function fulfilled(Request $request) { $this->service->fulfilled($request->except('_token')); return response()->json([ 'message' => 'Order status has been updated.' ]); } public function searchPOV(Request $request) { return response()->json([ 'pov' => $this->service->searchPOV($request->asin,$request->type) ]); } public function url(Request $request) { $this->service->url($request->except('_token')); return response()->json([ 'message' => 'URL has been saved.' ]); } public function download(Request $request) { return response()->json([ 'download_link' => $this->service->downloadVideo($request->video_id), 'message' => 'Download link has been generated.' ]); } public function members(Request $request) { $members = User::with('company')->where('role_id',4)->where('is_active', true)->orderBy('first_name')->get(); $members_data = []; foreach ($members as $key => $member) { $credits = $this->customerService->credits($member->id); $brand_name = $member->company->brand_name ?? null ?? null; $data = [ 'id' => $member->id, 'email' => $member->email, 'name' => Str::of("{$member->full_name} - {$brand_name}")->limit(40), 'avatar' => $member->avatar, 'total_available_credits' => $credits['total_available_credits'] ]; array_push($members_data,$data); } return response()->json($members_data); } public function brands(Request $request) { if (in_array(auth()->user()->role->type, ['superadmin', 'admin'])) { $brands = JobRequestProductDetails::select('brand')->whereNotNull('brand')->groupBy('brand')->orderBy('brand')->get(); } else { $type_ids = []; $manager_permission = \DB::table('permissions')->where('parent_id',230912201)->get(); foreach ($manager_permission as $key => $permission) { if(permissionCheck($permission->route)){ if($category = JobRequestCategory::where('route_permission',$permission->route)->first()){ array_push($type_ids, $category->id); } } } if(count($type_ids) > 0){ $brands = JobRequestProductDetails::whereHas('job_request', function ($query) use($type_ids) { $query->whereIn('type', $type_ids)->where('status', 'publish')->whereNull('deleted_at'); })->select('brand')->whereNotNull('brand')->groupBy('brand')->orderBy('brand')->get(); } else if(permissionCheck('job_board.creator.index')) { $brands = JobRequestProductDetails::whereHas('job_request', function ($query){ $query->where('is_approved', true)->where(function($query) { $query->whereDoesntHave('applications', function($query) { $query->where('is_hired', true); })->orWhereHas('applications', function($query) { $query->where('is_hired', true)->where('applicant_id', auth()->id()); }); })->whereHas('category', function ($query) { $query->where('will_be_shipped', 1); })->where('status','publish')->whereNull('deleted_at'); })->select('brand')->whereNotNull('brand')->groupBy('brand')->orderBy('brand')->get(); } } return response()->json($brands); } public function address(Request $request) { $customer_address = CustomerAddress::with('getCountry','getState','getCity')->where('customer_id',auth()->user()->id)->get(); $customer_address_data = []; foreach ($customer_address as $key => $data) { $address = $data->address; $country = $data->getCountry->name; $country_code = $data->getCountry->code; $state = $data->getState->name; $city = $data->getCity->name; $postal_code = $data->postal_code; $phone = $data->phone; $value = [ 'id' => $data->id, 'shipping_address' => "{$address} {$state} {$city} {$postal_code}, {$country} - (${phone})", 'address' => $address, 'country' => $country , 'country_code' => $country_code , 'state' => $state, 'city' => $city, 'postal_code' => $postal_code, 'phone' => $phone, 'default' => $data->is_shipping_default ]; array_push($customer_address_data,$value); } $data['addresses'] = $customer_address_data; $data['countries'] = Country::where('status', 1)->orderBy('name')->get(); return response()->json($data); } }