mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-30 06:13:09 -04:00
378 lines
12 KiB
PHP
378 lines
12 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 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);
|
|
|
|
if ($ret) {
|
|
return response()->json([
|
|
'message' => 'Job Request has been approved.'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Unable to approve job request.'
|
|
], 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 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 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::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_details['brand_name'] ?? 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'])) {
|
|
|
|
$members = Client::whereHas('job_request', function ($query) {
|
|
$query->where('status', 'publish');
|
|
$query->whereNull('deleted_at');
|
|
})->where('role_id',4)->get();
|
|
|
|
} else if((permissionCheck('job_board.pov-manager') || permissionCheck('job_board.livestream-manager') || permissionCheck('job_board.ott-app-manager') || permissionCheck('job_board.vvs-manager') || permissionCheck('job_board.pictures-manager') || permissionCheck('job_board.giveaway-manager') || permissionCheck('job_board.blog-post-manager') || permissionCheck('job_board.translations-manager'))) {
|
|
|
|
$type_ids = [];
|
|
|
|
if(permissionCheck('job_board.pov-manager')) array_push($type_ids, 1);
|
|
if(permissionCheck('job_board.livestream-manager')) array_push($type_ids, 2);
|
|
if(permissionCheck('job_board.ott-app-manager')) array_push($type_ids, 7);
|
|
if(permissionCheck('job_board.vvs-manager')) array_push($type_ids, 4);
|
|
if(permissionCheck('job_board.pictures-manager')) array_push($type_ids, 5);
|
|
if(permissionCheck('job_board.giveaway-manager')) array_push($type_ids, 6);
|
|
if(permissionCheck('job_board.blog-post-manager')) array_push($type_ids, 8);
|
|
if(permissionCheck('job_board.translations-manager')) array_push($type_ids, 9);
|
|
|
|
$members = Client::whereHas('job_request', function ($query) use($type_ids) {
|
|
$query->whereIn('type', $type_ids);
|
|
$query->where('status', 'publish');
|
|
$query->whereNull('deleted_at');
|
|
})->where('role_id',4)->get();
|
|
} else if(permissionCheck('job_board.creator.index')) {
|
|
$brands = JobRequestProductDetails::select('brand')->groupBy('brand')->orderBy('brand')->get();
|
|
return response()->json($brands);
|
|
}
|
|
|
|
$brands = [];
|
|
foreach ($members as $key => $member) {
|
|
$brand_name = json_decode($member->wti_data)->brand_name ?? null;
|
|
if($brand_name != null){
|
|
$data = [
|
|
'id' => $member->id,
|
|
'brand' => $brand_name,
|
|
'email' => $member->email
|
|
];
|
|
array_push($brands,$data);
|
|
}
|
|
}
|
|
|
|
array_multisort(array_column($brands, 'brand'), SORT_ASC, $brands);
|
|
|
|
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);
|
|
}
|
|
}
|