mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-08-01 17:17:12 -04:00
Admin customer job settings for category recipient emails and remove prices on prepaid subscrptions
257 lines
13 KiB
PHP
257 lines
13 KiB
PHP
<?php
|
|
|
|
namespace Modules\Customer\Services;
|
|
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Modules\Customer\Repositories\CustomerRepository;
|
|
use Modules\Subscription\Entities\UserCredit;
|
|
use Modules\Subscription\Entities\UserCreditHistory;
|
|
use Modules\Subscription\Entities\CustomerSubscription;
|
|
use Modules\WTIJobBoard\Entities\JobRequest;
|
|
use Modules\WTIALaCarte\Entities\AlacarteOrder;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
|
|
class CustomerService
|
|
{
|
|
protected $customerRepository;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->customerRepository = new CustomerRepository;
|
|
}
|
|
|
|
public function getAll()
|
|
{
|
|
return $this->customerRepository->getAll();
|
|
}
|
|
|
|
public function membersDropdown()
|
|
{
|
|
return $this->customerRepository->membersDropdown();
|
|
}
|
|
|
|
public function find($id)
|
|
{
|
|
return $this->customerRepository->find($id);
|
|
}
|
|
|
|
public function store($data){
|
|
return $this->customerRepository->store($data);
|
|
}
|
|
|
|
public function update($data, $id){
|
|
return $this->customerRepository->update($data, $id);
|
|
}
|
|
|
|
public function contact($data, $id){
|
|
return $this->customerRepository->contact($data, $id);
|
|
}
|
|
|
|
public function transfer($data, $id){
|
|
return $this->customerRepository->transfer($data, $id);
|
|
}
|
|
|
|
public function destroy($id){
|
|
return $this->customerRepository->destroy($id);
|
|
}
|
|
public function BulkUploadStore($data){
|
|
return $this->customerRepository->BulkUploadStore($data);
|
|
}
|
|
|
|
public function subscriptions($id){
|
|
|
|
$user = User::find($id);
|
|
if($user){
|
|
|
|
$subscriptions_data = [];
|
|
$subscriptions = CustomerSubscription::with('planPrice','discount.coupon','paymentCode.addons')->where('customer_id', $id)->latest()->get();
|
|
$currentSubscription = $user->currentSubscription();
|
|
|
|
foreach ($subscriptions as $subscription) {
|
|
|
|
$payment_details = '';
|
|
|
|
if ($subscription->planPrice->billing_type == 'Recurring') {
|
|
|
|
$price = $subscription->planPrice->price;
|
|
$price_monthly = $subscription->planPrice->price / $subscription->planPrice->custom_interval;
|
|
|
|
if ($subscription->planPrice->interval == 'Custom') {
|
|
|
|
if($subscription->payment_mode == 'Monthly'){
|
|
|
|
$payment_details .= "\$".number_format($price_monthly,2)." / monthly for {$subscription->planPrice->custom_interval} Months";
|
|
|
|
} else {
|
|
|
|
$payment_details .= "\$".number_format($price,2)." for {$subscription->planPrice->custom_interval} {$subscription->planPrice->custom_interval_type}";
|
|
}
|
|
|
|
} else {
|
|
$payment_details .= "\${$subscription->planPrice->price} {$subscription->planPrice->interval}";
|
|
}
|
|
|
|
|
|
if($subscription->discount != null){
|
|
$duration = $subscription->discount->coupon->duration;
|
|
$coupon_payment_mode = $subscription->discount->coupon->payment_mode;
|
|
$discount = $subscription->discount->coupon->discount;
|
|
|
|
if ($subscription->discount->coupon->type == 'Amount') {
|
|
$discount_label = "<span class=\"text-success\">Save \${$discount}</span>";
|
|
$discounted_price_monthly = $price_monthly - $discount;
|
|
$discounted_price_all = $price - $discount;
|
|
|
|
} else {
|
|
$discount_label = "<span class=\"text-success\">Save \${$discount}%</span>";
|
|
$discounted_price_monthly = $price_monthly - (($discount / 100) * $price_monthly);
|
|
$discounted_price_all = $subscription->discount->coupon->duration == 'Once' ? $price - (($discount / 100) * $price_monthly) : $price - (($discount / 100) * $price);
|
|
}
|
|
|
|
$payment_details .= "<br> <span class=\"badge bg-info\">{$subscription->discount->coupon->code}</span>";
|
|
|
|
if ($subscription->payment_mode == 'Monthly' && $coupon_payment_mode == 'Monthly' ) {
|
|
$payment_details .= $duration == 'Once' ? " - \${$discounted_price_monthly} 1st month only)" : " | \${$discounted_price_monthly} per month";
|
|
}
|
|
|
|
if($subscription->payment_mode == 'All' && $coupon_payment_mode == 'All' ) {
|
|
$payment_details .= " - \${$discounted_price_all} for {$subscription->planPrice->custom_interval} Months ";
|
|
}
|
|
}
|
|
|
|
} else if ($subscription->planPrice->billing_type == 'One-Time') {
|
|
|
|
$price = $subscription->planPrice->price;
|
|
if($subscription->paymentCode != null){
|
|
$payment_details .= "Will expire on ".Carbon::parse($subscription->created_at)->addMonths($subscription->planPrice->access_expire_duration)->format('M d, Y');
|
|
} else {
|
|
|
|
if($subscription->payment_status == 'uncaptured'){
|
|
$payment_details .= 'Expires on '. Carbon::parse($subscription->created_at)->addDays(7)->format('M d, Y').' if not yet authorize / captured';
|
|
} else {
|
|
|
|
if($subscription->planPrice->access_expire_duration_type == 'Days'){
|
|
$payment_details .= "\${$price} {$subscription->planPrice->billing_type} {$subscription->planPrice->access} access, will expire on ".Carbon::parse($subscription->created_at)->addDays($subscription->planPrice->access_expire_duration)->format('M d, Y');
|
|
} else if($subscription->planPrice->access_expire_duration_type == 'Weeks'){
|
|
$payment_details .= "\${$price} {$subscription->planPrice->billing_type} {$subscription->planPrice->access} access, will expire on ".Carbon::parse($subscription->created_at)->addWeeks($subscription->planPrice->access_expire_duration)->format('M d, Y');
|
|
} else if($subscription->planPrice->access_expire_duration_type == 'Months'){
|
|
$payment_details .= "\${$price} {$subscription->planPrice->billing_type} {$subscription->planPrice->access} access, will expire on ".Carbon::parse($subscription->created_at)->addMonths($subscription->planPrice->access_expire_duration)->format('M d, Y');
|
|
|
|
} else if($subscription->planPrice->access_expire_duration_type == 'Years'){
|
|
$payment_details .= "\${$price} {$subscription->planPrice->billing_type} {$subscription->planPrice->access} access, will expire on ".Carbon::parse($subscription->created_at)->addYears($subscription->planPrice->access_expire_duration)->format('M d, Y');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'id' => $subscription->id,
|
|
'plan' => [
|
|
'title' => $subscription->planPrice->plan->title,
|
|
'image' => $subscription->planPrice->plan->image_url,
|
|
'price' => $subscription->planPrice->price,
|
|
'billing_type' => $subscription->planPrice->billing_type,
|
|
'interval' => $subscription->planPrice->interval,
|
|
'custom_interval' => $subscription->planPrice->custom_interval,
|
|
'custom_interval_type' => $subscription->planPrice->custom_interval_type,
|
|
|
|
],
|
|
'payment_code' => $subscription->paymentCode != null ? [
|
|
'code' => $subscription->paymentCode->code,
|
|
'addons' => $subscription->paymentCode->addons,
|
|
] : null,
|
|
'payment_details' => $payment_details,
|
|
'status' => $subscription->status == 'trialing' ? 'Waiting for approval' : $subscription->status,
|
|
'approved' => $subscription->approved,
|
|
'payment_method' => $subscription->payment_method,
|
|
'payment_mode' => $subscription->payment_mode,
|
|
'payment_status' => $subscription->payment_status,
|
|
'subscription_start' => Carbon::parse($subscription->renewal_start_date == null ? $subscription->created_at : $subscription->renewal_start_date)->format('j M Y, g:i a'),
|
|
'subscription_end' => Carbon::parse($subscription->renewal_start_date == null ? $subscription->created_at : $subscription->renewal_start_date)->addMonths($subscription->payment_method == 'prepaid' ? $subscription->planPrice->access_expire_duration : $subscription->planPrice->custom_interval)->format('j M Y, g:i a'),
|
|
'subscription_expired' => $currentSubscription && $currentSubscription->status == 'active' ? true : ($subscription->expired_at != null ? Carbon::now()->gt(Carbon::parse($subscription->expired_at)) : true),
|
|
'subscription_expired_at' => $subscription->expired_at != null ? Carbon::parse($subscription->expired_at)->format('j M Y, g:i a') : null,
|
|
'created_at' => Carbon::parse($subscription->created_at)->format('j M Y, g:i a'),
|
|
];
|
|
|
|
if($subscription->discount != null){
|
|
$data['discount'] = [
|
|
'code' => $subscription->discount->coupon->code,
|
|
'type' => $subscription->discount->coupon->type,
|
|
'discount' => $subscription->discount->coupon->discount,
|
|
'duration' => $subscription->discount->coupon->duration,
|
|
];
|
|
}
|
|
|
|
array_push($subscriptions_data, $data);
|
|
|
|
}
|
|
|
|
|
|
return collect($subscriptions_data);
|
|
}
|
|
}
|
|
|
|
public function credits($id){
|
|
|
|
$user = User::find($id);
|
|
if($user){
|
|
|
|
UserCredit::firstOrCreate(['user_id' => $user->id]);
|
|
|
|
$usage = [];
|
|
$categories = \Modules\WTIJobBoard\Entities\JobRequestCategory::get();
|
|
foreach ($categories as $key => $category) {
|
|
$query = \Modules\WTIJobBoard\Entities\JobRequest::query()->where('client_id',$user->id)->where('type',$category->id)->where('status','publish')->where('is_rejected',false)->whereNull('deleted_at');
|
|
$usage[$category->name] = [
|
|
'subscription' => (int)$query->clone()->where('credit_type','subscription')->sum('credits'),
|
|
'alacarte' => (int)$query->clone()->where('credit_type','alacarte')->sum('credits')
|
|
];
|
|
}
|
|
|
|
$total_used_subscription_credits = \Modules\WTIJobBoard\Entities\JobRequest::where('client_id',$user->id)->where('status','publish')->where('is_rejected',false)->whereNull('deleted_at')->where('credit_type','subscription')->sum('credits');
|
|
$total_used_alacarte_credits = \Modules\WTIJobBoard\Entities\JobRequest::where('client_id',$user->id)->where('status','publish')->where('is_rejected',false)->whereNull('deleted_at')->where('credit_type','alacarte')->sum('credits');
|
|
|
|
|
|
$total_subscription_credits = $user->creditPoints->subscription_credits;
|
|
$total_alacarte_credits = $user->creditPoints->alacarte_credits;
|
|
|
|
return collect([
|
|
'total_credits' => [
|
|
'subscription' => (int)$total_subscription_credits,
|
|
'alacarte' => (int)$total_alacarte_credits,
|
|
],
|
|
'total_used_credits' => [
|
|
'subscription' => (int)$total_used_subscription_credits,
|
|
'alacarte' => (int)$total_used_alacarte_credits,
|
|
],
|
|
'total_available_credits' => [
|
|
'subscription' => (int)$total_subscription_credits - $total_used_subscription_credits,
|
|
'alacarte' => (int)$total_alacarte_credits - $total_used_alacarte_credits,
|
|
],
|
|
'usage' => $usage,
|
|
]);
|
|
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function credits_history($id){
|
|
return UserCreditHistory::with(['user'])->where('user_id',$id)->latest('id')->get();
|
|
}
|
|
|
|
public function jobs($id){
|
|
return JobRequest::with(['category', 'video', 'product', 'tracks.status', 'tracks.metas', 'shipment'])->latest('id')->where('client_id', $id)->whereNull('deleted_at')->get();
|
|
}
|
|
|
|
public function orders($id){
|
|
return AlacarteOrder::with(['user','items.product'])->where('user_id',$id)->latest()->get();
|
|
}
|
|
|
|
public function referrals($id){
|
|
return User::with(['company','subscriptions'])->where('referrer_id',$id)->latest('id')->get();
|
|
}
|
|
|
|
}
|