mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-30 20:16:46 -04:00
231 lines
12 KiB
PHP
231 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Modules\Customer\Repositories;
|
|
|
|
use App\Models\Order;
|
|
use Modules\Customer\Entities\CustomerAddress;
|
|
use App\Models\User;
|
|
use App\Traits\Notification;
|
|
use App\Traits\SendMail;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use Modules\Customer\Imports\CustomerImport;
|
|
use Modules\GeneralSetting\Entities\EmailTemplateType;
|
|
use Modules\GeneralSetting\Entities\UserNotificationSetting;
|
|
use Modules\Marketing\Entities\ReferralCode;
|
|
use Modules\Marketing\Entities\ReferralCodeSetup;
|
|
use Modules\Marketing\Entities\ReferralUse;
|
|
use Modules\OrderManage\Entities\CustomerNotification;
|
|
use Modules\Setup\Entities\Country;
|
|
use Modules\Setup\Entities\State;
|
|
use Modules\Wallet\Entities\WalletBalance;
|
|
use Modules\Customer\Entities\TransferAccountHistory;
|
|
use Modules\WTIJobBoard\Entities\JobRequest;
|
|
use Modules\Subscription\Entities\UserCredit;
|
|
use Modules\Subscription\Entities\UserCreditHistory;
|
|
use Modules\Customer\Services\CustomerService;
|
|
use Carbon\Carbon;
|
|
|
|
class CustomerRepository
|
|
{
|
|
use Notification, SendMail;
|
|
public function getAll()
|
|
{
|
|
return User::with('wallet_balances', 'creditPoints', 'referrer','company','additionalContacts')->whereHas('role', function($query){
|
|
return $query->where('type', 'customer');
|
|
})->latest();
|
|
}
|
|
|
|
public function membersDropdown()
|
|
{
|
|
$members = User::with('company')->whereHas('role', function($query){
|
|
return $query->whereIn('id', [2,4,5,6,7,8,111,117]);
|
|
})->where('is_active', true)->orderBy('first_name')->orderBy('last_name')->get();
|
|
|
|
$members_data = [];
|
|
foreach ($members as $key => $member) {
|
|
|
|
$data = [
|
|
'id' => $member->id,
|
|
'member' => $member->role_id == 4 ? $member->full_name ." ".($member->company != null ? "({$member->company->brand_name})" : '') : "{$member->full_name} - {$member->role->name}",
|
|
'email' => $member->email,
|
|
'avatar' => $member->avatar,
|
|
'role_id' => $member->role->id
|
|
];
|
|
array_push($members_data,$data);
|
|
}
|
|
|
|
return collect($members_data);
|
|
|
|
}
|
|
|
|
public function find($id)
|
|
{
|
|
return User::with('wallet_balances', 'orders', 'customerAddresses', 'creditPoints', 'subscriptions','company','additionalContacts')->findOrFail($id);
|
|
}
|
|
|
|
public function store($data){
|
|
|
|
$user = User::create([
|
|
'first_name' => $data->first_name,
|
|
'last_name' => $data->last_name,
|
|
'username' => $data->email,
|
|
'email' => $data->email,
|
|
'verify_code' => sha1(time()),
|
|
'password' => Hash::make($data->password),
|
|
'role_id' => 4,
|
|
'phone' => $data->phone,
|
|
'is_verified' => 1,
|
|
'is_active' => $data->is_active,
|
|
'currency_id' => app('general_setting')->currency,
|
|
'lang_code' => app('general_setting')->language_code,
|
|
'currency_code' => app('general_setting')->currency_code,
|
|
'referrer_id' => $data->referrer_id,
|
|
]);
|
|
|
|
//lets save the company details
|
|
$user->wti_data = json_encode($data->only('storefront', 'company_name', 'brand_name', 'accounts_payable_name', 'accounts_payable_email', 'marketing_contact_name', 'marketing_contact_email', 'company_address'));
|
|
$user->save();
|
|
|
|
// User Notification Setting Create
|
|
(new UserNotificationSetting)->createForRegisterUser($user->id);
|
|
$this->typeId = EmailTemplateType::where('type', 'register_email_template')->first()->id; //register email templete typeid
|
|
$this->notificationSend("Register", $user->id);
|
|
|
|
if ($data->has('referral_code')) {
|
|
$referralData = ReferralCodeSetup::first();
|
|
$referralExist = ReferralCode::where('referral_code', $data->referral_code)->first();
|
|
if ($referralExist) {
|
|
$referralExist->update(['total_used' => $referralExist->total_used + 1]);
|
|
ReferralUse::create([
|
|
'user_id' => $user->id,
|
|
'referral_code' => $data->referral_code,
|
|
'discount_amount' => $referralData->amount
|
|
]);
|
|
}
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
public function update($data, $id){
|
|
$user = User::find($id);
|
|
$user->update([
|
|
'first_name' => $data->first_name,
|
|
'last_name' => $data->last_name,
|
|
'email' => $data->email,
|
|
'phone' => $data->phone,
|
|
'password' => $data->password != null ? Hash::make($data->password) : $user->password,
|
|
'is_active' => $data->has('is_active') ? $data->is_active : $user->is_active,
|
|
'referrer_id' => $data->referrer_id,
|
|
]);
|
|
|
|
//lets update the company details
|
|
$user->wti_data = json_encode($data->only('storefront', 'company_name', 'brand_name', 'accounts_payable_name', 'accounts_payable_email', 'marketing_contact_name', 'marketing_contact_email', 'company_address'));
|
|
$user->save();
|
|
|
|
return $user;
|
|
|
|
}
|
|
|
|
public function contact($data, $id){
|
|
$user = User::find($id);
|
|
if($user){
|
|
return $this->sendContactCustomer($user,$data);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function transfer($data, $id){
|
|
$transfer_from = User::find($id);
|
|
if($transfer_from){
|
|
|
|
$transfer_to = User::find($data->transfer_to);
|
|
if($transfer_to){
|
|
|
|
|
|
$total_subscription_credits = JobRequest::whereIn('id',$data['jobs'])->where('client_id',$transfer_from->id)->where('credit_type','subscription')->sum('credits');
|
|
$total_alacarte_credits = JobRequest::whereIn('id',$data['jobs'])->where('client_id',$transfer_from->id)->where('credit_type','alacarte')->sum('credits');
|
|
|
|
$from_credits = (new CustomerService())->credits($transfer_from->id);
|
|
$user_credits_history = new UserCreditHistory;
|
|
$user_credits_history->user_id = $transfer_from->id;
|
|
$user_credits_history->subscription_credits_from = $data['transfer_credits'] ? $total_subscription_credits + $from_credits['total_available_credits']['subscription'] : $total_subscription_credits;
|
|
$user_credits_history->subscription_credits_to = 0;
|
|
$user_credits_history->alacarte_credits_from = $data['transfer_credits'] ? $total_alacarte_credits + $from_credits['total_available_credits']['alacarte'] : $total_alacarte_credits;
|
|
$user_credits_history->alacarte_credits_to = 0;
|
|
$user_credits_history->details = 'Credits transferred to '.$transfer_to->full_name.' ('.$transfer_to->email.')';
|
|
$user_credits_history->save();
|
|
|
|
$to_credits = (new CustomerService())->credits($transfer_to->id);
|
|
$user_credits_history = new UserCreditHistory;
|
|
$user_credits_history->user_id = $transfer_to->id;
|
|
$user_credits_history->subscription_credits_from = $to_credits['total_available_credits']['subscription'];
|
|
$user_credits_history->subscription_credits_to = $to_credits['total_available_credits']['subscription'] + ($data['transfer_credits'] ? $total_subscription_credits + $from_credits['total_available_credits']['subscription'] : $total_subscription_credits);
|
|
$user_credits_history->alacarte_credits_from = $to_credits['total_available_credits']['alacarte'];
|
|
$user_credits_history->alacarte_credits_to = $to_credits['total_available_credits']['alacarte'] + ($data['transfer_credits'] ? $total_alacarte_credits + $from_credits['total_available_credits']['alacarte'] : $total_alacarte_credits);
|
|
$user_credits_history->details = 'Credits transferred from '.$transfer_from->full_name.' ('.$transfer_from->email.')';
|
|
$user_credits_history->save();
|
|
|
|
|
|
UserCredit::where('user_id',$transfer_to->id)->increment('subscription_credits',$data['transfer_credits'] ? $total_subscription_credits + $from_credits['total_available_credits']['subscription'] : $total_subscription_credits);
|
|
UserCredit::where('user_id',$transfer_to->id)->increment('alacarte_credits',$data['transfer_credits'] ? $total_alacarte_credits + $from_credits['total_available_credits']['alacarte'] : $total_alacarte_credits);
|
|
|
|
|
|
UserCredit::where('user_id',$transfer_from->id)->decrement('subscription_credits',$data['transfer_credits'] ? $total_subscription_credits + $from_credits['total_available_credits']['subscription'] : $total_subscription_credits);
|
|
UserCredit::where('user_id',$transfer_from->id)->decrement('alacarte_credits', $data['transfer_credits'] ? $total_alacarte_credits + $from_credits['total_available_credits']['alacarte'] : $total_alacarte_credits);
|
|
|
|
|
|
$job_requests = JobRequest::with('category')->whereIn('id',$data['jobs'])->where('client_id',$transfer_from->id)->where('status','publish')->orderBy('id')->get();
|
|
foreach ($job_requests as $key => $job_request) {
|
|
|
|
$to_credits = (new CustomerService())->credits($transfer_to->id);
|
|
|
|
$user_credits_history = new UserCreditHistory;
|
|
$user_credits_history->user_id = $transfer_to->id;
|
|
$user_credits_history->subscription_credits_from = $to_credits['total_available_credits']['subscription'];
|
|
$user_credits_history->subscription_credits_to = $job_request->credit_type == 'subscription' ? $to_credits['total_available_credits']['subscription'] - (int)$job_request->credits : $to_credits['total_available_credits']['subscription'];
|
|
$user_credits_history->alacarte_credits_from = $to_credits['total_available_credits']['alacarte'];
|
|
$user_credits_history->alacarte_credits_to = $job_request->credit_type == 'alacarte' ? $to_credits['total_available_credits']['alacarte'] - (int)$job_request->credits : $to_credits['total_available_credits']['alacarte'];
|
|
$user_credits_history->details = 'Transferred Job ID: <b>'.$job_request->id.'</b> ('.$job_request->category->label.') '.Carbon::parse($job_request->created_at)->format('M j, Y, g:i A');
|
|
$user_credits_history->save();
|
|
|
|
$job_request->client_id = $transfer_to->id;
|
|
$job_request->save();
|
|
}
|
|
|
|
TransferAccountHistory::create([
|
|
'transfer_by' => auth()->user()->id,
|
|
'transfer_from' => $transfer_from->id,
|
|
'transfer_to' => $transfer_to->id
|
|
]);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function destroy($id){
|
|
$customer = User::find($id);
|
|
$customer_orders = Order::where('customer_id',$id)->pluck('id');
|
|
$wallet = WalletBalance::where('user_id', $id)->pluck('id');
|
|
if($customer_orders->count() || $wallet->count()){
|
|
return false;
|
|
}
|
|
$addresses = $customer->customerAddresses->pluck('id');
|
|
CustomerAddress::destroy($addresses);
|
|
$notifications = CustomerNotification::where('customer_id', $id)->pluck('id');
|
|
CustomerNotification::destroy($notifications);
|
|
$notification_settings = UserNotificationSetting::where('user_id', $id)->pluck('id');
|
|
UserNotificationSetting::destroy($notification_settings);
|
|
$customer->delete();
|
|
return true;
|
|
}
|
|
public function BulkUploadStore($data){
|
|
Excel::import(new CustomerImport, $data['file']->store('temp'));
|
|
}
|
|
|
|
}
|