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: '.$job_request->id.' ('.$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')); } }