Viewing file: DashboardController.php (20.54 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller; use App\Models\BecameReseller; use App\Models\BillingRequest; use App\Models\Domain; use App\Models\Notice; use App\Models\NumberRequest; use App\Models\Plan; use App\Models\SenderId; use App\Models\Ticket; use App\Models\TopUpRequest; use Carbon\Carbon; use App\Models\UserAnalytics; use Illuminate\Http\Request; use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Response; use function PHPUnit\Framework\isNull;
class DashboardController extends Controller {
public function index() { $user = auth()->guard('customer')->user(); $cache_in_seconds=env('CACHE_TIME');
//Cache For New Message $cacheNewMessageCount = cache('newMessageCount_'.$user->id); if(is_null($cacheNewMessageCount)) { $newMessageCount = $user->receive_messages()->whereDate('created_at', '>=', Carbon::now())->count(); $newMessageCount = cache()->remember('newMessageCount_'.$user->id, $cache_in_seconds, function () use ($newMessageCount) { return $newMessageCount; }); }else{ $newMessageCount= $cacheNewMessageCount; } $data['newMessageCount']=$newMessageCount;
//Cache For Inbox Message Count $cacheInboxCount = cache('inboxCount_'.$user->id); if(is_null($cacheInboxCount)) { $inboxCount = $user->message_logs()->where('type', 'inbox')->whereDate('created_at', Carbon::now())->count(); $inboxCount = cache()->remember('inboxCount_'.$user->id, $cache_in_seconds, function () use ($inboxCount) { return $inboxCount; }); }else{ $inboxCount= $cacheInboxCount; } $data['inboxCount']=$inboxCount;
//Cache For Sent Message Count $cacheSentCount = cache('sentCount_'.$user->id); if(is_null($cacheSentCount)) { $sentCount = $user->message_logs()->where('type', 'sent')->where('status', 'succeed')->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at', Carbon::now())->count(); $sentCount = cache()->remember('sentCount_'.$user->id, $cache_in_seconds, function () use ($sentCount) { return $sentCount; }); }else{ $sentCount= $cacheSentCount; } $data['sentCount']=$sentCount;
//Cache For Weekly Inbox Messages $cacheInboxes = cache('inboxes_'.$user->id); if(is_null($cacheInboxes)) { $inboxes = $user->receive_messages() ->select(DB::Raw('count(*) as count'),DB::Raw('DATE(created_at) day')) ->whereDate('created_at', '>', Carbon::now()->startOfWeek()) ->groupBy('day')->get() ->pluck('count','day'); $inboxes = cache()->remember('inboxes_'.$user->id, $cache_in_seconds, function () use ($inboxes) { return $inboxes; }); }else{ $inboxes= $cacheInboxes; }
$weekDates=[]; foreach (getLastNDays(7) as $day){ $day=Carbon::createFromTimeString(str_replace('"','',$day." 0:00:00")); $weekDates[]= $day->format('m-d-Y'); }
$data['weekDates']=$weekDates; $chatInboxes=[]; foreach (getLastNDays(7) as $day){ $chatInboxes[]=isset($inboxes[trim($day, '"')])?$inboxes[trim($day, '"')]:0; } $data['chart_inbox']=$chatInboxes;
//Cache For Today Expense $cacheTodayExpense = cache('todayExpense_'.$user->id); if(is_null($cacheTodayExpense)) { $todayExpense= auth('customer')->user()->expenses()->whereDate('created_at', now())->sum('cost'); $todayExpense = cache()->remember('todayExpense_'.$user->id, $cache_in_seconds, function () use ($todayExpense) { return $todayExpense; }); }else{ $todayExpense= $cacheTodayExpense; } $data['todayExpense']=$todayExpense;
//Cache For SWeekly Expense $cacheWeeklyExpense = cache('weeklyExpense_'.$user->id); if(is_null($cacheWeeklyExpense)) { $weeklyExpense= auth('customer')->user()->expenses()->whereDate('created_at','>', Carbon::now()->startOfWeek())->sum('cost'); $weeklyExpense = cache()->remember('weeklyExpense_'.$user->id, $cache_in_seconds, function () use ($weeklyExpense) { return $weeklyExpense; }); }else{ $weeklyExpense= $cacheWeeklyExpense; } $data['weeklyExpense']=$weeklyExpense;
//Cache For Total Expense $cacheTotalExpense = cache('totalExpense_'.$user->id); if(is_null($cacheTotalExpense)) { $totalExpense= auth('customer')->user()->expenses()->sum('cost'); $totalExpense = cache()->remember('totalExpense_'.$user->id, $cache_in_seconds, function () use ($totalExpense) { return $totalExpense; }); }else{ $totalExpense= $cacheTotalExpense; } $data['totalExpense']=$totalExpense;
//Cache For InboundResponse $cacheInboundResponse = cache('inboundResponse_'.$user->id); if(is_null($cacheInboundResponse)) { $inboundResponse = auth('customer')->user()->message_logs()->whereDate('created_at', now())->where('type','inbox')->count(); $inboundResponse = cache()->remember('inboundResponse_'.$user->id, $cache_in_seconds, function () use ($inboundResponse) { return $inboundResponse; }); }else{ $inboundResponse= $cacheInboundResponse; }
//Cache For OutboundResponse $cacheOutboundResponse = cache('outboundResponse_'.$user->id); if(is_null($cacheOutboundResponse)) { $outboundResponse = auth('customer')->user()->message_logs()->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at', now())->where('type','sent')->count(); $outboundResponse = cache()->remember('outboundResponse_'.$user->id, $cache_in_seconds, function () use ($outboundResponse) { return $outboundResponse; }); }else{ $outboundResponse= $cacheOutboundResponse; }
//Cache For Weekly Sent Message $cacheWeeklySent = cache('weeklySent_'.$user->id); if(is_null($cacheWeeklySent)) { $weeklySent = $user->message_logs() ->select(DB::raw("COUNT(*) as count"),DB::Raw('DATE(updated_at) day')) ->whereDate('updated_at', '>', Carbon::now()->startOfWeek()) ->where('type','sent') ->groupBy('day')->pluck('count','day'); $weeklySent = cache()->remember('weeklySent_'.$user->id, $cache_in_seconds, function () use ($weeklySent) { return $weeklySent; }); }else{ $weeklySent= $cacheWeeklySent; }
//Cache For Weekly Inbox Message $cacheWeeklyReceived = cache('weeklyReceived_'.$user->id); if(is_null($cacheWeeklyReceived)) { $weeklyReceived = $user->message_logs() ->select(DB::raw("COUNT(*) as count"),DB::Raw('DATE(created_at) day')) ->whereDate('created_at', '>', Carbon::now()->startOfWeek()) ->where('type','inbox') ->groupBy('day')->pluck('count','day'); $weeklyReceived = cache()->remember('weeklyReceived_'.$user->id, $cache_in_seconds, function () use ($weeklyReceived) { return $weeklyReceived; }); }else{ $weeklyReceived= $cacheWeeklyReceived; } //End
$weeklyResponseArray=[]; foreach (getLastNDays(7) as $day){ $day=trim($day,'"'); if(isset($weeklySent[$day]) && isset($weeklyReceived[$day]) && $weeklyReceived[$day]>0 ){ $weeklyResponseArray[]= round(($weeklyReceived[$day]/$weeklySent[$day] ) * 100, 2); }else{ $weeklyResponseArray[]=0; } }
//Cache For All Inbound Message $cacheAllInboundResponse = cache('allInboundResponse_'.$user->id); if(is_null($cacheAllInboundResponse)) { $allInboundResponse = $user->message_logs()->where('type','inbox')->count(); $allInboundResponse = cache()->remember('allInboundResponse_'.$user->id, $cache_in_seconds, function () use ($allInboundResponse) { return $allInboundResponse; }); }else{ $allInboundResponse= $cacheAllInboundResponse; } //End
//Cache For All Sent Message $cacheAllOutboundResponse = cache('allOutboundResponse_'.$user->id); if(is_null($cacheAllOutboundResponse)) { $allOutboundResponse = $user->message_logs()->where('type','sent')->count(); $allOutboundResponse = cache()->remember('allOutboundResponse_'.$user->id, $cache_in_seconds, function () use ($allOutboundResponse) { return $allOutboundResponse; }); }else{ $allOutboundResponse= $cacheAllOutboundResponse; } //End
//Cache For Total Message $cacheTodayTotalMessages = cache('todayTotalMessages_'.$user->id); if(is_null($cacheTodayTotalMessages)) { $todayTotalMessages = $user->message_logs()->where('type', 'sent')->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at', now())->count(); $todayTotalMessages = cache()->remember('todayTotalMessages_'.$user->id, $cache_in_seconds, function () use ($todayTotalMessages) { return $todayTotalMessages; }); }else{ $todayTotalMessages= $cacheTodayTotalMessages; } //End
// TODO::Failed Message Reports //Cache For Total Failed Message $cacheTotalFailed = cache('totalFailed_'.$user->id); if(is_null($cacheTotalFailed)) { $totalFailed = $user->message_logs()->where('type', 'sent')->where('status', 'failed')->count(); $totalFailed = cache()->remember('totalFailed_'.$user->id, $cache_in_seconds, function () use ($totalFailed) { return $totalFailed; }); }else{ $totalFailed= $cacheTotalFailed; } //End
//Cache For Daily Failed Message $cacheDailyFailed = cache('dailyFailed_'.$user->id); if(is_null($cacheDailyFailed)) { $dailyFailed = $user->message_logs()->where('type', 'sent')->where('status', 'failed')->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at', now())->count(); $dailyFailed = cache()->remember('dailyFailed_'.$user->id, $cache_in_seconds, function () use ($dailyFailed) { return $dailyFailed; }); }else{ $dailyFailed= $cacheDailyFailed; } //End
//Cache For Weekly Failed Message $cacheWeeklyFailed = cache('weeklyFailed_'.$user->id); if(is_null($cacheWeeklyFailed)) { $weeklyFailed = $user->message_logs()->where('type', 'sent')->whereDate('updated_at','>', Carbon::now()->startOfWeek())->count(); $weeklyFailed = cache()->remember('weeklyFailed_'.$user->id, $cache_in_seconds, function () use ($weeklyFailed) { return $weeklyFailed; }); }else{ $weeklyFailed= $cacheWeeklyFailed; } //TODO::End Failed Message Report
//TODO::Delivered Message Reports //Cache For Total Delivered Message $cacheTotalDelivered = cache('totalDelivered_'.$user->id); if(is_null($cacheTotalDelivered)) { $totalDelivered = $user->message_logs()->where('status', 'succeed')->whereColumn('created_at', '<', 'updated_at')->where('type', 'sent')->count(); $totalDelivered = cache()->remember('totalDelivered_'.$user->id, $cache_in_seconds, function () use ($totalDelivered) { return $totalDelivered; }); }else{ $totalDelivered= $cacheTotalDelivered; }
//Cache For Total Delivered Message $cacheDailyDelivered = cache('dailyDelivered_'.$user->id); if(is_null($cacheDailyDelivered)) { $dailyDelivered = $user->message_logs()->where('status', 'succeed')->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at', now())->where('type', 'sent')->count(); $dailyDelivered = cache()->remember('dailyDelivered_'.$user->id, $cache_in_seconds, function () use ($dailyDelivered) { return $dailyDelivered; }); }else{ $dailyDelivered= $cacheDailyDelivered; } //Cache For Total Delivered Message $cacheWeeklyDelivered = cache('weeklyDelivered_'.$user->id); if(is_null($cacheWeeklyDelivered)) { $weeklyDelivered = $user->message_logs()->where('status', 'succeed')->whereColumn('created_at', '<', 'updated_at')->whereDate('updated_at','>', Carbon::now()->startOfWeek())->where('type', 'sent')->count(); $weeklyDelivered = cache()->remember('weeklyDelivered_'.$user->id, $cache_in_seconds, function () use ($weeklyDelivered) { return $weeklyDelivered; }); }else{ $weeklyDelivered= $cacheWeeklyDelivered; }
$data['weeklyResponseArray']=$weeklyResponseArray; $data['dailyResponseRate'] = $outboundResponse > 0 && $inboundResponse > 0?formatNumber(($inboundResponse / $outboundResponse) * 100):0; $data['responseRate'] = $allOutboundResponse > 0 && $allInboundResponse > 0?formatNumber(($allInboundResponse / $allOutboundResponse) * 100):0;
$data['deliveryRate'] =$todayTotalMessages > 0 && $dailyDelivered > 0 ? formatNumber(($dailyDelivered * 100) / $todayTotalMessages) : 0;
$data['blockRate'] = $totalFailed > 0 && $totalDelivered > 0 ? formatNumber($totalFailed / $totalDelivered) : 0; $data['dailyBlockRate'] = $dailyFailed > 0 && $dailyDelivered > 0 ? formatNumber($dailyFailed / $dailyDelivered) : 0; $data['weeklyBlockRate'] =$weeklyDelivered > 0 && $weeklyFailed > 0 ? formatNumber($weeklyFailed / $weeklyDelivered) : 0;
// Check Settings $cacheSellerRequest = cache('sellerRequest_'.$user->id); if(is_null($cacheSellerRequest)) { $sellerRequest = BecameReseller::where('customer_id', $user->id)->where('status', 'approved')->first(); $sellerRequest = cache()->remember('sellerRequest_'.$user->id, $cache_in_seconds, function () use ($sellerRequest) { return $sellerRequest; }); }else{ $sellerRequest= $cacheSellerRequest; }
$cacheDomain = cache('domain_'.$user->id); if(is_null($cacheDomain)) { $domain=Domain::where('customer_id', $user->id)->where('status', 'approved')->first(); $domain = cache()->remember('domain_'.$user->id, $cache_in_seconds, function () use ($domain) { return $domain; }); }else{ $domain= $cacheDomain; } $cachePlans = cache('plans_'.$user->id); if(is_null($cachePlans)) { $plans=Plan::where('admin_id', $user->id)->where('added_by', '!=', 'admin')->count(); $plans = cache()->remember('plans_'.$user->id, $cache_in_seconds, function () use ($plans) { return $plans; }); }else{ $plans= $cachePlans; }
$availableSettings=[];
if(!$sellerRequest){ $availableSettings[]=trans("Verify Account"); } if(!$domain){ $availableSettings[]=trans("Configure Domain"); } if($plans <= 0){ $availableSettings[]=trans("Create Plan for Users"); }
$data['available_setting']=$availableSettings;
return view('customer.dashboard', $data); }
public function downloadAttach(Request $request){
$user=auth('customer')->user();
$notice=Notice::where('status', 'active')->whereIn('for', [$user->type, 'all'])->where('id', $request->id)->firstOrFail();
$file=isset($notice->attached_data)?public_path('uploads/'.$notice->attached_data):'';
if(!file_exists($file) || !$notice->attached_data){ return redirect()->back()->withErrors(['failed'=>'File does not exist']); }
return Response::download($file); }
public function viewAllNotices(){
return view('customer.notices'); }
public function countNotification(){ $customer=auth('customer')->user(); if($customer->type=='master_reseller'){ $addedBy='master_reseller'; }else if($customer->type=='reseller'){ $addedBy='reseller'; }else{ $data=[ 'plan_request'=>0, 'topUpReq'=>0, ]; return response()->json([ $data, 'status'=>'success'], 200); }
$sellerCustomers=$customer->customers()->pluck('id'); $plans = $customer->plans()->where('added_by', $addedBy)->pluck('id'); $planReq=BillingRequest::whereIn('plan_id', $plans)->where('status', 'pending')->count(); if ($customer->type == 'master_reseller') { $topup_requests = TopUpRequest::where('admin_id', $customer->id)->where('status', 'pending') ->whereIn('customer_type', ['reseller', 'master_reseller_customer'])->count(); } else if ($customer->type == 'reseller') { $topup_requests = TopUpRequest::where('admin_id', $customer->id)->where('status', 'pending')->where('customer_type', 'reseller_customer')->count(); }
$inboxCount = $customer->message_logs()->where('type', 'inbox')->where('is_read', 'no')->count();
$data=[ 'plan_request'=>$planReq, 'topUpReq'=>$topup_requests, 'inboxCount'=>$inboxCount, ]; return response()->json([ $data, 'status'=>'success'], 200); }
public function clearCache(){ $customer=auth('customer')->user(); cache()->forget('newMessageCount_'.$customer->id); cache()->forget('inboxCount_'.$customer->id); cache()->forget('sentCount_'.$customer->id); cache()->forget('inboxes_'.$customer->id); cache()->forget('todayExpense_'.$customer->id); cache()->forget('weeklyExpense_'.$customer->id); cache()->forget('totalExpense_'.$customer->id); cache()->forget('outboundResponse_'.$customer->id); cache()->forget('weeklySent_'.$customer->id); cache()->forget('weeklyReceived_'.$customer->id); cache()->forget('allInboundResponse_'.$customer->id); cache()->forget('allOutboundResponse_'.$customer->id); cache()->forget('todayTotalMessages_'.$customer->id); cache()->forget('totalFailed_'.$customer->id); cache()->forget('dailyFailed_'.$customer->id); cache()->forget('weeklyFailed_'.$customer->id); cache()->forget('weeklyFailed_'.$customer->id); cache()->forget('totalDelivered_'.$customer->id); cache()->forget('dailyDelivered_'.$customer->id); cache()->forget('weeklyDelivered_'.$customer->id); cache()->forget('sellerRequest_'.$customer->id); cache()->forget('domain_'.$customer->id); cache()->forget('plans_'.$customer->id); cache()->forget('wallet_'.$customer->id);
return redirect()->back()->with('success', trans('customer.messages.cache_cleared')); } public function store_user_browser_data(Request $request) { $request->validate([ 'country' => 'required', 'browser' => 'required', 'os' => 'required' ]);
$auth_id = auth()->user()->id;
$user_analytics = UserAnalytics::where('browser', $request->browser)->where('customer_id', $auth_id)->first(); if(!$user_analytics){ $user_analytics=new UserAnalytics(); $user_analytics->customer_id=$auth_id; $user_analytics->browser=$request->browser; }
$now = Carbon::now(); $lastUpdated = $user_analytics->updated_at ? Carbon::parse($user_analytics->updated_at) : null;
if ($lastUpdated === null || $now->diffInMinutes($lastUpdated) >= 15) { $user_analytics->os = $request->os; $user_analytics->country = $request->country; $user_analytics->browser = $request->browser; $user_analytics->counter = $user_analytics->counter + 1; $user_analytics->updated_at = $now; $user_analytics->save(); }
return response()->json(['status' => 'success']); } }
|