Files
wticreatorstudio/Modules/WTIJobBoard/Http/Controllers/JobRequestsController.php
T
Leonard Biano ee8cd0b6a5 WTIJobBoard Module Update
Admin Notes Functionality and Access Video Changes
2024-06-13 19:52:31 +08:00

419 lines
14 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 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::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);
}
}