<?php
namespace App\Http\Controllers\Admin;
use App\Models\Customer;
use App\Models\Invoices;
use App\Models\Reports;
use App\Models\Senderid;
use ArielMejiaDev\LarapexCharts\LarapexChart;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class AdminBaseController extends Controller
{
/**
* Show admin home.
*
* @return Application|Factory|\Illuminate\Contracts\View\View|View
*/
public function index()
{
$breadcrumbs = [
['link' => "/dashboard", 'name' => __('locale.menu.Dashboard')],
['name' => Auth::user()->displayName()],
];
$sms_outgoing = Reports::currentMonth()
->selectRaw('Day(created_at) as day, count(send_by) as outgoing,send_by')
->where('send_by', "from")
->groupBy('day')->pluck('day', 'outgoing')->flip()->sortKeys();
$sms_incoming = Reports::currentMonth()
->selectRaw('Day(created_at) as day, count(send_by) as incoming,send_by')
->where('send_by', "to")
->groupBy('day')->pluck('day', 'incoming')->flip()->sortKeys();
$sms_api = Reports::currentMonth()
->selectRaw('Day(created_at) as day, count(send_by) as api,send_by')
->where('send_by', "api")
->groupBy('day')->pluck('day', 'api')->flip()->sortKeys();
$outgoing = (new LarapexChart)->lineChart()
->addData(__('locale.labels.outgoing'), $sms_outgoing->values()->toArray())
->setXAxis($sms_outgoing->keys()->toArray());
$incoming = (new LarapexChart)->lineChart()
->addData(__('locale.labels.incoming'), $sms_incoming->values()->toArray())
->setXAxis($sms_incoming->keys()->toArray());
$api = (new LarapexChart)->lineChart()
->addData(__('locale.labels.api'), $sms_api->values()->toArray())
->setXAxis($sms_api->keys()->toArray());
$revenue = Invoices::CurrentMonth()
->selectRaw('Day(created_at) as day, sum(amount) as revenue')
->groupBy('day')
->pluck('revenue', 'day');
$revenue_chart = (new LarapexChart)->lineChart()
->addData(__('locale.labels.revenue'), $revenue->values()->toArray())
->setXAxis($revenue->keys()->toArray());
$customers = Customer::thisYear()
->selectRaw('DATE_FORMAT(created_at, "%m-%Y") as month, count(uid) as customer')
->groupBy('month')
->orderBy('month')
->pluck('customer', 'month');
$customer_growth = (new LarapexChart)->barChart()
->addData(__('locale.labels.customers_growth'), $customers->values()->toArray())
->setXAxis($customers->keys()->toArray());
$sms_history = (new LarapexChart)->pieChart()
->addData([
Reports::where('status', 'like', "%Delivered%")->count(),
Reports::where('status', 'not like', "%Delivered%")->count(),
]);
$sender_ids = Senderid::where('status', 'pending')->latest()->take(10)->cursor();
return view('admin.dashboard', compact('breadcrumbs', 'sms_incoming', 'sms_outgoing', 'outgoing', 'incoming', 'revenue_chart', 'customer_growth', 'sms_history','sender_ids','sms_api', 'api'));
}
/**
* @param Request $request
* @param $message
* @param string $type
*
* @return JsonResponse|RedirectResponse
*/
protected function redirectResponse(Request $request, $message, string $type = 'success'): JsonResponse|RedirectResponse
{
if ($request->wantsJson()) {
return response()->json([
'status' => $type,
'message' => $message,
]);
}
return redirect()->back()->with("flash_{$type}", $message);
}
}