mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-29 12:13:06 -04:00
930 lines
42 KiB
PHP
930 lines
42 KiB
PHP
<?php
|
|
|
|
namespace Modules\WTIJobBoard\Repositories;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Modules\WTIJobBoard\Entities\Creator;
|
|
use Modules\WTIJobBoard\Entities\JobRequest;
|
|
use Modules\WTIJobBoard\Entities\JobRequestCategory;
|
|
use Modules\WTIJobBoard\Entities\JobRequestProductDetails;
|
|
use Modules\WTIJobBoard\Entities\JobRequestStatus;
|
|
use Modules\WTIJobBoard\Entities\JobRequestTrack;
|
|
use Modules\WTIJobBoard\Entities\JobRequestTrackMeta;
|
|
use Modules\WTIJobBoard\Entities\JobRequestBadge;
|
|
use Modules\WTIJobBoard\Entities\JobRequestSocialMediaSite;
|
|
use Modules\WTIJobBoard\Entities\JobRequestSocialMediaPost;
|
|
use Modules\WTIJobBoard\Entities\JobRequestSetting;
|
|
use Modules\StudioPlus\Entities\VideoUrl;
|
|
use Modules\Subscription\Entities\UserCreditHistory;
|
|
use Modules\Customer\Services\CustomerService;
|
|
use App\Traits\SendMail;
|
|
use Carbon\Carbon;
|
|
|
|
class JobRequestsRepository
|
|
{
|
|
use SendMail;
|
|
|
|
public function all($data)
|
|
{
|
|
if (permissionCheck('job_board.admin.index')) {
|
|
$items = JobRequest::with(['client.company', 'video.urls', 'video.videoType', 'source', 'category.badge', 'product', 'socialMediaPosts.site', 'tracks.status', 'tracks.metas', 'shipment' , 'applications.creator', 'applications.address', 'pov_video.urls', 'pov_video.videoType']);
|
|
|
|
if (!in_array(auth()->user()->role->type, ['superadmin', 'admin'])) {
|
|
|
|
$type_ids = [];
|
|
$categories = Cache::remember('categories', 300, function() {
|
|
return JobRequestCategory::where('active',1)->get();
|
|
});
|
|
foreach ($categories as $key => $category) {
|
|
if($category->route_permission != null && permissionCheck($category->route_permission)){
|
|
array_push($type_ids, $category->id);
|
|
}
|
|
}
|
|
|
|
$items = $items->whereIn('type', $type_ids)->where('status','publish')->whereNull('deleted_at');
|
|
}
|
|
|
|
//dont show draft job request and deleted
|
|
$items = $items->where('status','publish')->whereNull('deleted_at');
|
|
|
|
} else {
|
|
|
|
$items = JobRequest::with(['source', 'category.badge', 'video.ottUrl', 'video.urls', 'product', 'socialMediaPosts.site', 'tracks.status', 'tracks.metas', 'shipment', 'pov_video.videoType']);
|
|
|
|
if (permissionCheck('job_board.creator.index')) {
|
|
$items = $items->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');
|
|
|
|
// $type_ids = [];
|
|
// $staff_badges = (array)json_decode(auth()->user()->staff->badges);
|
|
// $badges = \Modules\WTIJobBoard\Entities\JobRequestBadge::whereIn('id',$staff_badges)->get();
|
|
// foreach ($badges as $key => $badge) {
|
|
// if($badge->categories != null){
|
|
// array_push($type_ids, $badge->categories[0]);
|
|
// }
|
|
// }
|
|
|
|
// $items = $items->whereIn('type', $type_ids);
|
|
|
|
|
|
} else {
|
|
|
|
$items = $items->where('client_id', auth()->id())->whereNull('deleted_at');
|
|
}
|
|
}
|
|
|
|
if (isset($data['filter'])) {
|
|
|
|
$filter = $data['filter'];
|
|
|
|
$items = $items->where(function($query) use($filter) {
|
|
|
|
|
|
if(isset($filter['job_types'])){
|
|
$job_types = $filter['job_types'];
|
|
$query->whereIn('type', $job_types);
|
|
}
|
|
|
|
if(isset($filter['job_status'])){
|
|
$job_status = $filter['job_status'];
|
|
$query->whereIn('job_status', $job_status);
|
|
}
|
|
|
|
if(isset($filter['creator_status'])){
|
|
$creator_status = $filter['creator_status'];
|
|
if (in_array("Available", $creator_status)){
|
|
$query->whereDoesntHave('applications', function($query) {
|
|
$query->where('applicant_id', auth()->id());
|
|
});
|
|
}
|
|
if (in_array("Applied", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 0);
|
|
});
|
|
}
|
|
if (in_array("In Progress", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 1);
|
|
})->where('job_status','!=','Completed');
|
|
}
|
|
if (in_array("Completed", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 1);
|
|
})->where('job_status','Completed');
|
|
}
|
|
}
|
|
|
|
if(isset($filter['source_id'])){
|
|
$sources = $filter['source_id'];
|
|
$query->whereIn('source_id', $sources);
|
|
}
|
|
|
|
if(isset($filter['client'])){
|
|
$client = $filter['client'];
|
|
$query->whereHas('client', function($query) use($client) {
|
|
$query->whereIn('id', $client);
|
|
});
|
|
}
|
|
|
|
if(isset($filter['product_brand'])){
|
|
$product_brand = $filter['product_brand'];
|
|
$query->whereHas('product', function($query) use($product_brand) {
|
|
$query->whereIn('brand', $product_brand);
|
|
});
|
|
}
|
|
|
|
if(isset($filter['track_package'])){
|
|
$track_package = $filter['track_package'];
|
|
$query->whereIn('track_package_status', $track_package);
|
|
}
|
|
|
|
if(isset($filter['order_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['order_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['order_date'][1]) ? Carbon::parse($filter['order_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
$query->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
}
|
|
|
|
|
|
if(isset($filter['shipped_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['shipped_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['shipped_date'][1]) ? Carbon::parse($filter['shipped_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
|
|
$query->whereHas('tracks', function($query) use($startDate,$endDate) {
|
|
$query->where('status_id', 3)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
if(isset($filter['received_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['received_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['received_date'][1]) ? Carbon::parse($filter['received_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
|
|
$query->whereHas('tracks', function($query) use($startDate,$endDate) {
|
|
$query->where('status_id', 4)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
|
|
if(isset($filter['search'])){
|
|
$search = $filter['search'];
|
|
$query->where('id', 'like', '%' . $search . '%');
|
|
$query->orWhere('title', 'like', '%' . $search . '%');
|
|
$query->orWhere('asin', 'like', '%' . $search . '%');
|
|
// $query->orWhereHas('client', function ($query) use($search) {
|
|
// $query->where('name', 'like', '%' . $search . '%');
|
|
// });
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
$items = $items->orderBy('created_at', $data['ascending'] === 'true' ? 'ASC' : 'DESC')->paginate($data['pagination']);
|
|
|
|
return $items;
|
|
}
|
|
|
|
public function counts($data)
|
|
{
|
|
if (permissionCheck('job_board.admin.index')) {
|
|
$items = JobRequest::query();
|
|
|
|
if (!in_array(auth()->user()->role->type, ['superadmin', 'admin'])) {
|
|
|
|
$type_ids = [];
|
|
$categories = Cache::remember('categories', 300, function() {
|
|
return JobRequestCategory::where('active',1)->get();
|
|
});
|
|
foreach ($categories as $key => $category) {
|
|
if($category->route_permission != null && permissionCheck($category->route_permission)){
|
|
array_push($type_ids, $category->id);
|
|
}
|
|
}
|
|
|
|
$items = $items->whereIn('type', $type_ids)->where('status','publish')->whereNull('deleted_at');
|
|
}
|
|
|
|
//dont show draft job request and deleted
|
|
$items = $items->where('status','publish')->whereNull('deleted_at');
|
|
|
|
} else {
|
|
|
|
$items = JobRequest::query();
|
|
|
|
if (permissionCheck('job_board.creator.index')) {
|
|
$items = $items->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');
|
|
|
|
// $type_ids = [];
|
|
// $staff_badges = (array)json_decode(auth()->user()->staff->badges);
|
|
// $badges = \Modules\WTIJobBoard\Entities\JobRequestBadge::whereIn('id',$staff_badges)->get();
|
|
// foreach ($badges as $key => $badge) {
|
|
// if($badge->categories != null){
|
|
// array_push($type_ids, $badge->categories[0]);
|
|
// }
|
|
// }
|
|
|
|
// $items = $items->whereIn('type', $type_ids);
|
|
|
|
} else {
|
|
|
|
$items = $items->where('client_id', auth()->id())->whereNull('deleted_at');
|
|
}
|
|
}
|
|
|
|
if (isset($data['filter'])) {
|
|
|
|
$filter = $data['filter'];
|
|
|
|
$items = $items->where(function($query) use($filter) {
|
|
|
|
if(isset($filter['job_types'])){
|
|
$job_types = $filter['job_types'];
|
|
$query->whereIn('type', $job_types);
|
|
}
|
|
|
|
if(isset($filter['job_status'])){
|
|
$job_status = $filter['job_status'];
|
|
$query->whereIn('job_status', $job_status);
|
|
}
|
|
|
|
if(isset($filter['creator_status'])){
|
|
$creator_status = $filter['creator_status'];
|
|
if (in_array("Available", $creator_status)){
|
|
$query->whereDoesntHave('applications', function($query) {
|
|
$query->where('applicant_id', auth()->id());
|
|
});
|
|
}
|
|
if (in_array("Applied", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 0);
|
|
});
|
|
}
|
|
if (in_array("In Progress", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 1);
|
|
})->where('job_status','!=','Completed');
|
|
}
|
|
if (in_array("Completed", $creator_status)){
|
|
$query->orWhereHas('applications', function ($query) {
|
|
$query->where('applicant_id', auth()->id())->where('is_hired', 1);
|
|
})->where('job_status','Completed');
|
|
}
|
|
}
|
|
|
|
if(isset($filter['source_id'])){
|
|
$sources = $filter['source_id'];
|
|
$query->whereIn('source_id', $sources);
|
|
}
|
|
|
|
if(isset($filter['client'])){
|
|
$client = $filter['client'];
|
|
$query->whereHas('client', function($query) use($client) {
|
|
$query->whereIn('id', $client);
|
|
});
|
|
}
|
|
if(isset($filter['product_brand'])){
|
|
$product_brand = $filter['product_brand'];
|
|
$query->whereHas('product', function($query) use($product_brand) {
|
|
$query->whereIn('brand', $product_brand);
|
|
});
|
|
}
|
|
|
|
if(isset($filter['track_package'])){
|
|
$track_package = $filter['track_package'];
|
|
$query->whereIn('track_package_status', $track_package);
|
|
}
|
|
|
|
if(isset($filter['order_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['order_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['order_date'][1]) ? Carbon::parse($filter['order_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
$query->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
}
|
|
|
|
|
|
if(isset($filter['shipped_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['shipped_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['shipped_date'][1]) ? Carbon::parse($filter['shipped_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
|
|
$query->whereHas('tracks', function($query) use($startDate,$endDate) {
|
|
$query->where('status_id', 3)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
if(isset($filter['received_date'][0])){
|
|
|
|
$startDate = Carbon::parse($filter['received_date'][0])->addDay()->format('Y-m-d');
|
|
$endDate = isset($filter['received_date'][1]) ? Carbon::parse($filter['received_date'][1])->addDay()->format('Y-m-d') : $startDate;
|
|
|
|
$query->whereHas('tracks', function($query) use($startDate,$endDate) {
|
|
$query->where('status_id', 4)->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
|
|
if(isset($filter['search'])){
|
|
$search = $filter['search'];
|
|
$query->where('id', 'like', '%' . $search . '%');
|
|
$query->orWhere('title', 'like', '%' . $search . '%');
|
|
$query->orWhere('asin', 'like', '%' . $search . '%');
|
|
// $query->orWhereHas('client', function ($query) use($search) {
|
|
// $query->where('name', 'like', '%' . $search . '%');
|
|
// });
|
|
}
|
|
|
|
|
|
});
|
|
}
|
|
|
|
return $items->get()->countBy(function ($item) {
|
|
return permissionCheck('job_board.admin.index') ? strtolower(str_replace(' ', '_', $item->client_status)) : ( permissionCheck('job_board.creator.index') ? strtolower(str_replace(' ', '_', $item->creator_status)) : strtolower(str_replace(' ', '_', $item->client_status)));
|
|
});
|
|
|
|
|
|
}
|
|
|
|
public function create($data)
|
|
{
|
|
$category = JobRequestCategory::find($data['category']['id']);
|
|
if($category){
|
|
$job_request = new JobRequest();
|
|
|
|
if($data['client_id'] == null){
|
|
$credits = auth()->user()->credit_points_status;
|
|
if($data['status'] == 'publish' && auth()->user()->role->type == 'customer'){
|
|
if($data['credit_type'] == 'subscription' && $credits['total_available_credits']['subscription'] < $category->credits ){
|
|
$data['status'] == 'draft';
|
|
} else if($data['credit_type'] == 'alacarte' && $credits['total_available_credits']['alacarte'] < $category->credits ){
|
|
$data['status'] == 'draft';
|
|
}
|
|
}
|
|
} else {
|
|
$credits = (new CustomerService())->credits($data['client_id']);
|
|
}
|
|
|
|
$data['credits'] = $category->credits;
|
|
$data['source_id'] = $data['source']['id'];
|
|
$data['type'] = $data['category']['id'];
|
|
$data['post_to'] = $data['category']['will_be_posted'] ? $data['post_to'] : null;
|
|
|
|
$job_request->fill($data);
|
|
if($data['client_id'] == null){
|
|
$job_request->client_id = auth()->id();
|
|
}
|
|
$job_request->save();
|
|
|
|
|
|
if($category->will_be_posted && $job_request->post_to != null){
|
|
foreach ($job_request->post_to as $key => $site) {
|
|
JobRequestSocialMediaPost::create([
|
|
'job_request_id' => $job_request->id,
|
|
'social_media_site_id' => $site,
|
|
'handle' => $data['handles'][$site]
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
if($data['source']['has_product']){
|
|
$product = $data['product'];
|
|
$job_request->product()->create([
|
|
'asin' => $data['asin'],
|
|
'name' => $product['name'] != null ? $product['name'] : $data['title'],
|
|
'store' => isset($product['store']) ? $product['store'] : null,
|
|
'brand' => isset($product['brand']) ? $product['brand'] : null,
|
|
'store' => isset($product['store']) ? $product['store'] : null,
|
|
'category' => isset($product['category']['name']) ? $product['category']['name'] : null,
|
|
'price' => isset($product['price']) ? $product['price'] : null,
|
|
'reviews' => isset($product['reviews']) ? $product['reviews'] : null,
|
|
'image' => isset($product['image']['link']) ? $product['image']['link'] : null,
|
|
'link' => isset($product['link']) ? $product['link'] : null,
|
|
]);
|
|
}
|
|
|
|
$status_ordered = JobRequestStatus::where('name', 'ordered')->first();
|
|
if ($status_ordered) {
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $job_request->id;
|
|
$track->status_id = $status_ordered->id;
|
|
$track->save();
|
|
}
|
|
|
|
if($job_request->status == 'publish' && $job_request->category->credits > 0){
|
|
UserCreditHistory::create([
|
|
'user_id' => $job_request->client_id,
|
|
'subscription_credits_from' => $credits['total_available_credits']['subscription'],
|
|
'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] - (int)$job_request->credits : $credits['total_available_credits']['subscription'],
|
|
'alacarte_credits_from' => $credits['total_available_credits']['alacarte'],
|
|
'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] - (int)$job_request->credits : $credits['total_available_credits']['alacarte'],
|
|
'details' => 'Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.')'
|
|
]);
|
|
}
|
|
|
|
// if($job_request->status == 'publish'){
|
|
// $this->sendJobRequestUpdate($job_request->category->support_email, 'Pending', $data['asin']);
|
|
// }
|
|
|
|
return $job_request;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function update($data)
|
|
{
|
|
$job_request = JobRequest::with(['client.company','category'])->find($data['id']);
|
|
if ($job_request) {
|
|
|
|
$category = JobRequestCategory::find($data['category']['id']);
|
|
$old_status = $job_request->status;
|
|
|
|
if (auth()->user()->role->type == 'customer') {
|
|
$data['is_approved'] = 0;
|
|
$data['job_status'] = 'Pending';
|
|
}
|
|
|
|
if($data['status'] == 'publish' && auth()->user()->role->type == 'customer'){
|
|
$credits = auth()->user()->credit_points_status;
|
|
if($data['credit_type'] == 'subscription' && $credits['total_available_credits']['subscription'] < $category->credits ){
|
|
$data['status'] == 'draft';
|
|
} else if($data['credit_type'] == 'alacarte' && $credits['total_available_credits']['alacarte'] < $category->credits ){
|
|
$data['status'] == 'draft';
|
|
}
|
|
}
|
|
|
|
$data['credits'] = $category->credits;
|
|
$data['type'] = $data['category']['id'];
|
|
$data['post_to'] = $data['category']['will_be_posted'] ? $data['post_to'] : null;
|
|
$data['studio_plus_videos_id'] = $data['category']['video_types'] == null ? null : $data['studio_plus_videos_id'];
|
|
|
|
if($old_status == 'draft' && $data['status'] == 'publish'){
|
|
$data['created_at'] = \Carbon\Carbon::now()->format('Y-m-d H:i:s');
|
|
|
|
$credits = (new CustomerService())->credits($job_request->client_id);
|
|
UserCreditHistory::create([
|
|
'user_id' => $job_request->client_id,
|
|
'subscription_credits_from' => $credits['total_available_credits']['subscription'],
|
|
'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] - (int)$job_request->credits : $credits['total_available_credits']['subscription'],
|
|
'alacarte_credits_from' => $credits['total_available_credits']['alacarte'],
|
|
'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] - (int)$job_request->credits : $credits['total_available_credits']['alacarte'],
|
|
'details' => 'Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.')'
|
|
]);
|
|
|
|
} else if($old_status == 'publish' && $data['status'] == 'draft'){
|
|
|
|
$credits = (new CustomerService())->credits($job_request->client_id);
|
|
UserCreditHistory::create([
|
|
'user_id' => $job_request->client_id,
|
|
'subscription_credits_from' => $credits['total_available_credits']['subscription'],
|
|
'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] + (int)$job_request->credits : $credits['total_available_credits']['subscription'],
|
|
'alacarte_credits_from' => $credits['total_available_credits']['alacarte'],
|
|
'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] + (int)$job_request->credits : $credits['total_available_credits']['alacarte'],
|
|
'details' => 'Reset to Draft Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.')'
|
|
]);
|
|
}
|
|
|
|
$job_request->fill($data);
|
|
$job_request->update();
|
|
|
|
if($category->will_be_posted && $job_request->post_to != null){
|
|
$job_request->socialMediaPosts()->whereNotIn('social_media_site_id', $job_request->post_to)->delete();
|
|
foreach ($job_request->post_to as $key => $site) {
|
|
JobRequestSocialMediaPost::updateOrCreate(
|
|
['job_request_id' => $job_request->id, 'social_media_site_id' => $site],
|
|
['handle' => isset($data['handles'][$site]) ? $data['handles'][$site] : null]
|
|
);
|
|
}
|
|
}
|
|
|
|
$product = $data['product'];
|
|
$job_request->product()->update([
|
|
'asin' => $data['asin'],
|
|
'name' => $product['name'] != null ? $product['name'] : $data['title'],
|
|
'store' => isset($product['store']) ? $product['store'] : null,
|
|
'brand' => isset($product['brand']) ? $product['brand'] : null,
|
|
'store' => isset($product['store']) ? $product['store'] : null,
|
|
'category' => isset($product['category']['name']) ? $product['category']['name'] : null,
|
|
'price' => isset($product['price']) ? $product['price'] : null,
|
|
'reviews' => isset($product['reviews']) ? $product['reviews'] : null,
|
|
'image' => isset($product['image']['link']) ? $product['image']['link'] : null,
|
|
'link' => isset($product['link']) ? $product['link'] : null,
|
|
]);
|
|
|
|
return $job_request;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function approve($id,$credits)
|
|
{
|
|
$user = auth()->user();
|
|
|
|
if ($user) {
|
|
$role = $user->role->type;
|
|
|
|
if (permissionCheck('job_request.approve')) {
|
|
$job_request = JobRequest::find($id);
|
|
|
|
if ($job_request) {
|
|
$job_request->job_status = 'Approved';
|
|
$job_request->track_package_status = 'Approved';
|
|
$job_request->is_approved = true;
|
|
$job_request->is_rejected = false;
|
|
if($job_request->category->credits == 0){
|
|
|
|
$user_credits = (new CustomerService())->credits($job_request->client_id);
|
|
if($job_request->credit_type == 'subscription' && $user_credits['total_available_credits']['subscription'] < $credits){
|
|
return false;
|
|
} else if($job_request->credit_type == 'alacarte' && $user_credits['total_available_credits']['alacarte'] < $credits){
|
|
return false;
|
|
}
|
|
|
|
UserCreditHistory::create([
|
|
'user_id' => $job_request->client_id,
|
|
'subscription_credits_from' => $user_credits['total_available_credits']['subscription'],
|
|
'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $user_credits['total_available_credits']['subscription'] - (int)$credits : $user_credits['total_available_credits']['subscription'],
|
|
'alacarte_credits_from' => $user_credits['total_available_credits']['alacarte'],
|
|
'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $user_credits['total_available_credits']['alacarte'] - (int)$credits : $user_credits['total_available_credits']['alacarte'],
|
|
'details' => 'Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.')'
|
|
]);
|
|
|
|
$job_request->credits = $credits;
|
|
}
|
|
$job_request->update();
|
|
|
|
$processing_status = JobRequestStatus::where('name', 'processing')->first();
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $job_request->id;
|
|
$track->status_id = $processing_status->id;
|
|
$track->save();
|
|
|
|
//complete the job after approve for purchase video and access video
|
|
if($job_request->type == 10 || $job_request->type == 12){
|
|
$this->fulfilled(['id' => $job_request->id]);
|
|
}
|
|
|
|
//$this->sendJobRequestUpdate($job_request->client->email, 'Approved', $job_request->asin);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function reject($id)
|
|
{
|
|
$user = auth()->user();
|
|
|
|
if ($user) {
|
|
$role = $user->role->type;
|
|
|
|
if (permissionCheck('job_request.reject')) {
|
|
$job_request = JobRequest::find($id);
|
|
|
|
if ($job_request) {
|
|
|
|
$credits = (new CustomerService())->credits($job_request->client_id);
|
|
UserCreditHistory::create([
|
|
'user_id' => $job_request->client_id,
|
|
'subscription_credits_from' => $credits['total_available_credits']['subscription'],
|
|
'subscription_credits_to' => $job_request->credit_type == 'subscription' ? $credits['total_available_credits']['subscription'] + (int)$job_request->credits : $credits['total_available_credits']['subscription'],
|
|
'alacarte_credits_from' => $credits['total_available_credits']['alacarte'],
|
|
'alacarte_credits_to' => $job_request->credit_type == 'alacarte' ? $credits['total_available_credits']['alacarte'] + (int)$job_request->credits : $credits['total_available_credits']['alacarte'],
|
|
'details' => 'Rejected Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.')'
|
|
]);
|
|
|
|
$job_request->job_status = 'Denied';
|
|
$job_request->track_package_status = 'Rejected';
|
|
$job_request->is_rejected = true;
|
|
$job_request->is_approved = false;
|
|
$job_request->update();
|
|
|
|
$processing_status = JobRequestStatus::where('name', 'rejected')->first();
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $job_request->id;
|
|
$track->status_id = $processing_status->id;
|
|
$track->save();
|
|
|
|
$setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first();
|
|
$this->sendJobRequestUpdate($setting ? $setting->email : $job_request->client->email, 'Rejected', $job_request->asin);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function incomplete($id)
|
|
{
|
|
|
|
if (permissionCheck('job_request.incomplete')) {
|
|
$job_request = JobRequest::find($id);
|
|
|
|
if ($job_request) {
|
|
|
|
$last_track = $job_request->tracks()->where('status_id','!=',5)->latest()->first();
|
|
$job_request->job_status = 'In Progress';
|
|
$job_request->track_package_status = $last_track->status->label;
|
|
$job_request->update();
|
|
|
|
$processing_status = JobRequestStatus::where('name', 'incomplete')->first();
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $job_request->id;
|
|
$track->status_id = $processing_status->id;
|
|
$track->save();
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$job_request = JobRequest::find($id);
|
|
if ($job_request) {
|
|
|
|
if ($job_request->client_id != auth()->id() && !permissionCheck('job_request.delete')) {
|
|
return false;
|
|
}
|
|
|
|
$job_request->delete();
|
|
$job_request->product()->delete();
|
|
$job_request->applications()->delete();
|
|
$job_request->shipment()->delete();
|
|
$job_request->tracks()->delete();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function fulfilled($data)
|
|
{
|
|
$current_track = JobRequestTrack::where('job_request_id',$data['id'])->latest()->first();
|
|
$track_exist = JobRequestTrack::where('job_request_id',$data['id'])->where('status_id',5)->first();
|
|
if(!$track_exist || $current_track->status_id == 11) {
|
|
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $data['id'];
|
|
$track->status_id = 5;
|
|
$track->save();
|
|
|
|
$meta = new JobRequestTrackMeta();
|
|
$meta->track_id = $track->id;
|
|
$meta->name = 'fulfilled_at';
|
|
$meta->value = $data['fulfilled_at'] ?? \Carbon\Carbon::now()->format('Y-m-d H:i:s');
|
|
$meta->save();
|
|
}
|
|
|
|
$job_request = JobRequest::find($data['id']);
|
|
if($job_request->job_status != 'Completed'){
|
|
$job_request->job_status = 'Completed';
|
|
$job_request->track_package_status = 'Completed';
|
|
$job_request->save();
|
|
|
|
$setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first();
|
|
$this->sendJobRequestUpdate((object)['email' => $setting ? $setting->email : $job_request->client->email, 'first_name' => $job_request->client->first_name], 'Completed', $job_request->asin);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function winner($data)
|
|
{
|
|
$job_request = JobRequest::find($data['id']);
|
|
if ($job_request) {
|
|
|
|
$winner_selected_status = JobRequestStatus::where('name', 'winner-selected')->first();
|
|
$track_exist = JobRequestTrack::where('job_request_id',$job_request->id)->where('status_id',$winner_selected_status->id)->first();
|
|
if(!$track_exist) {
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $job_request->id;
|
|
$track->status_id = $winner_selected_status->id;
|
|
$track->save();
|
|
}
|
|
|
|
$job_request->track_package_status = 'Winner Selected';
|
|
$job_request->others = [
|
|
'winner_name' => $data['winner_name'],
|
|
'winner_phone' => $data['winner_phone'],
|
|
'winner_shipping_address' => $data['winner_shipping_address'],
|
|
];
|
|
$job_request->save();
|
|
|
|
$setting = JobRequestSetting::where('job_request_category_id',$job_request->type)->where('user_id',$job_request->client_id)->whereNotNull('email')->first();
|
|
$this->sendJobRequestUpdate($setting ? $setting->email : $job_request->client->email, 'Winner Selected', $job_request->id);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function deliverable($data)
|
|
{
|
|
$deliverable_status = JobRequestStatus::where('name', 'deliverable')->first();
|
|
$track = new JobRequestTrack();
|
|
$track->job_request_id = $data['id'];
|
|
$track->status_id = $deliverable_status->id;
|
|
$track->save();
|
|
|
|
$meta = new JobRequestTrackMeta();
|
|
$meta->track_id = $track->id;
|
|
$meta->name = 'deliverable_at';
|
|
$meta->value = $data['deliverable_at'];
|
|
$meta->save();
|
|
|
|
$job_request = JobRequest::find($data['id']);
|
|
$job_request->job_status = 'In Progress';
|
|
$job_request->track_package_status = 'Scheduled';
|
|
$job_request->save();
|
|
|
|
return true;
|
|
}
|
|
|
|
public function deliverableUpdate($data)
|
|
{
|
|
$meta = JobRequestTrackMeta::where('track_id', $data['track_id'])->first();
|
|
if($meta){
|
|
$meta->value = $data['deliverable_at'];
|
|
$meta->update();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function postedLinks($data)
|
|
{
|
|
$job_request = JobRequest::find($data['id']);
|
|
foreach ($data['links'] as $id => $value) {
|
|
$post = JobRequestSocialMediaPost::where('job_request_id', $job_request->id)->where('id', $id)->first();
|
|
if($post){
|
|
$post->url = $value;
|
|
$post->save();
|
|
}
|
|
}
|
|
|
|
$this->fulfilled($data);
|
|
|
|
return true;
|
|
}
|
|
|
|
public function adminNotes($data)
|
|
{
|
|
$job_request = JobRequest::find($data['id']);
|
|
if($job_request){
|
|
$job_request->admin_notes = $data['admin_notes'];
|
|
$job_request->save();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function url($data)
|
|
{
|
|
if (permissionCheck('job_request.pictures-manager') || permissionCheck('job_request.pov-manager') || permissionCheck('job_request.livestream.url') || permissionCheck('job_board.livestream-manager') || permissionCheck('job_board.ott-app-manager') || permissionCheck('job_board.giveaway-manager')) {
|
|
$job_request = JobRequest::find($data['id']);
|
|
|
|
if ($job_request) {
|
|
|
|
if($job_request->category->name == 'pov_video'){
|
|
$amazon = $job_request->video->urls->where('label','Amazon')->first();
|
|
if($amazon){
|
|
$amazon->url = $data['url'];
|
|
$amazon->save();
|
|
}
|
|
} else {
|
|
$job_request->fill($data);
|
|
$job_request->update();
|
|
}
|
|
|
|
return $this->fulfilled($data);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function downloadVideo($id)
|
|
{
|
|
$job_request = JobRequest::find($id);
|
|
$video_id = $job_request->pov_video != null ? $job_request->pov_video->id : ($job_request->video != null ? $job_request->video->id : false );
|
|
|
|
if(!$video_id) return false;
|
|
|
|
$video = \Modules\StudioPlus\Entities\StudioPlusVideo::with('channel')->find($video_id);
|
|
if($video){
|
|
|
|
//$token = \Cache::remember('user-token-'.auth()->user()->id, 300, function () {
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, 'https://wtisv.com/api/studio/get-token');
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
|
|
|
$headers = array();
|
|
$headers[] = 'Authorization: Bearer ooVeuWUlukjmsHSc26yVqlVT4BG7Ii9P';
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
$token = $result->token;
|
|
//});
|
|
|
|
if($token){
|
|
|
|
//for purchase video only should not have watermarks
|
|
if($job_request->type == 10){
|
|
$video_url = $video->original_video_url;
|
|
} else {
|
|
$video_url = $video->video_url;
|
|
}
|
|
|
|
$video_url = \Str::remove(\Config::get('studioplus.google_api_endpoint'). "/" , $video_url);
|
|
$video_url = \Str::remove(\Config::get('studioplus.bucket_name'). "/", $video_url);
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, 'https://wtisv.com/api/studio/generate-video-link');
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, "user_id=".$video->channel->user_id."&video_id=".$video->id."&video_url=".$video_url);
|
|
|
|
$headers = array();
|
|
$headers[] = 'Authorization: Bearer '.$token;
|
|
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
return isset($result->link) ? $result->link : false;
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function searchPOV($asin, $type)
|
|
{
|
|
|
|
$query = \Modules\StudioPlus\Entities\StudioPlusVideo::query()->with('urls')->where('asin', 'LIKE', "%{$asin}%");
|
|
$category = JobRequestCategory::find($type);
|
|
if($category && $category->video_types != null){
|
|
$query = $query->whereIn('studio_plus_video_type_id', $category->video_types);
|
|
}
|
|
|
|
$videos = $query->get();
|
|
$pov_videos = [];
|
|
foreach ($videos as $key => $video) {
|
|
|
|
$alread_purchased = false;
|
|
if($type == 10){
|
|
$job = JobRequest::where('studio_plus_videos_id',$video->id)->where('type',10)->first() ?? false;
|
|
}
|
|
|
|
$data = [
|
|
'id' => $video->id,
|
|
'title' => $video->title,
|
|
'type' => $video->videoType->name,
|
|
'status' => $video->status,
|
|
'urls' => $video->urls,
|
|
'alread_purchased' => isset($job) ? ($job && $job->job_status != 'Pending' ? true : false) : false
|
|
];
|
|
array_push($pov_videos,$data);
|
|
}
|
|
|
|
return collect($pov_videos);
|
|
|
|
}
|
|
}
|