mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-30 06:13:09 -04:00
411 lines
13 KiB
PHP
411 lines
13 KiB
PHP
<?php
|
|
|
|
namespace Modules\WTIJobBoard\Http\Controllers;
|
|
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Str;
|
|
use Modules\WTIJobBoard\Http\Requests\JobRequest;
|
|
use Modules\WTIJobBoard\Services\JobRequestsService;
|
|
use Modules\Customer\Services\CustomerService;
|
|
use Modules\Setup\Repositories\CityRepository;
|
|
use Modules\Setup\Repositories\StateRepository;
|
|
use Modules\Setup\Entities\Country;
|
|
use Modules\Customer\Entities\CustomerAddress;
|
|
use Modules\WTIJobBoard\Entities\Client;
|
|
use Modules\WTIJobBoard\Entities\JobRequestProductDetails;
|
|
use Modules\Subscription\Entities\UserCredit;
|
|
use Modules\Subscription\Entities\UserCreditHistory;
|
|
use Modules\WTIJobBoard\Entities\JobRequestCategory;
|
|
use App\Models\User;
|
|
|
|
class JobRequestsController extends Controller
|
|
{
|
|
protected $service;
|
|
|
|
public function __construct(CustomerService $customerService)
|
|
{
|
|
$this->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);
|
|
}
|
|
}
|