You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.9 KiB
PHP
130 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Customer;
|
|
use App\Models\DepositHistory;
|
|
use App\Models\Sale;
|
|
use App\Models\SaleItem;
|
|
use App\Models\Voucher;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Str;
|
|
|
|
class GeneralController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$total_voucher = Voucher::count();
|
|
$total_customer = Customer::count();
|
|
$total_customer_verified = Customer::where('identity_verified', Customer::VERIFIED)->count();
|
|
$total_deposit = DepositHistory::where('is_valid', DepositHistory::STATUS_VALID)->sum('debit');
|
|
|
|
$month = now()->locale('id')->translatedFormat('F');
|
|
$startOfMonth = now()->startOfMonth()->format('m/d/Y');
|
|
$endOfMonth = now()->endOfMonth()->format('m/d/Y');
|
|
$total_voucher_sale_this_month = SaleItem::whereBetween('created_at', [$startOfMonth, $endOfMonth])
|
|
->sum('price');
|
|
$count_voucher_sale_this_month = SaleItem::whereBetween('created_at', [$startOfMonth, $endOfMonth])
|
|
->sum('quantity');
|
|
$total_voucher_sale_this_day = SaleItem::whereDate('created_at', now()->format('Y-m-d'))
|
|
->sum('price');
|
|
$count_voucher_sale_this_day = SaleItem::whereDate('created_at', now()->format('Y-m-d'))
|
|
->sum('quantity');
|
|
|
|
$deposites = DepositHistory::whereDate('created_at', now()->format('Y-m-d'))
|
|
->where('is_valid', DepositHistory::STATUS_VALID)
|
|
->where('debit', '!=', '0')
|
|
->groupBy('customer_id')
|
|
->orderBy('total', 'desc')
|
|
->with('customer')
|
|
->limit(20)
|
|
->selectRaw('sum(debit) as total, is_valid, customer_id')
|
|
->get();
|
|
|
|
$sales = SaleItem::whereDate('sale_items.created_at', now()->format('Y-m-d'))
|
|
->join('sales', 'sales.id', '=', 'sale_items.sale_id')
|
|
->join('customers', 'customers.id', '=', 'sales.customer_id')
|
|
->groupBy('sales.customer_id')
|
|
->orderBy('total', 'desc')
|
|
->limit(20)
|
|
->selectRaw('sum(sale_items.price) as total, sum(quantity) as count, sales.customer_id, customers.name, entity_id')
|
|
->get();
|
|
|
|
// charts
|
|
$startDate = now()->startOfMonth()->format('m/d/Y');
|
|
$endDate = now()->endOfMonth()->format('m/d/Y');
|
|
if ($request->start_date != '') {
|
|
$startDate = Carbon::parse($request->start_date)->format('m/d/Y');
|
|
}
|
|
if ($request->end_date != '') {
|
|
$endDate = Carbon::parse($request->end_date)->format('m/d/Y');
|
|
}
|
|
$charts = Sale::selectRaw('SUM(amount) as sale_total, date_time')
|
|
->whereBetween('date_time', [$startDate, $endDate])
|
|
->orderBy('date_time', 'asc')
|
|
->groupBy('date_time');
|
|
|
|
// filter lokasi
|
|
if ($request->location_id != '') {
|
|
$charts->whereHas('items', function ($q) use ($request) {
|
|
$q->join('vouchers', 'vouchers.id', '=', 'sale_items.entity_id')
|
|
->where('vouchers.location_id', $request->location_id);
|
|
});
|
|
}
|
|
|
|
// filter customer
|
|
if ($request->customer_id != '') {
|
|
$charts->where('customer_id', $request->customer_id);
|
|
}
|
|
|
|
$ca = [];
|
|
$date = Carbon::parse($startDate);
|
|
$end = Carbon::parse($endDate);
|
|
$data = $charts->get();
|
|
while ($date <= $end) {
|
|
$da = $data->where('date', $date->format('d/m/Y'))?->value('sale_total') ?? 0;
|
|
$ca[] = ['sale_total' => $da, 'date' => $date->format('d/m/Y')];
|
|
$date = $date->addDay();
|
|
}
|
|
|
|
return inertia('Dashboard', [
|
|
'total_voucher' => $total_voucher,
|
|
'total_customer' => $total_customer,
|
|
'total_customer_verified' => $total_customer_verified,
|
|
'total_deposit' => $total_deposit,
|
|
'total_voucher_sale_this_month' => $total_voucher_sale_this_month,
|
|
'count_voucher_sale_this_month' => $count_voucher_sale_this_month,
|
|
'total_voucher_sale_this_day' => $total_voucher_sale_this_day,
|
|
'count_voucher_sale_this_day' => $count_voucher_sale_this_day,
|
|
'month' => $month,
|
|
'deposites' => $deposites,
|
|
'sales' => $sales,
|
|
'charts' => $ca,
|
|
'_startDate' => $startDate,
|
|
'_endDate' => $endDate,
|
|
'c' => $charts,
|
|
'd' => $data,
|
|
]);
|
|
}
|
|
|
|
public function maintance()
|
|
{
|
|
return inertia('Maintance');
|
|
}
|
|
|
|
public function upload(Request $request)
|
|
{
|
|
$request->validate(['image' => 'required|file']);
|
|
$file = $request->file('image');
|
|
$file->store('uploads', 'public');
|
|
|
|
return response()->json([
|
|
'id' => Str::ulid(),
|
|
'name' => $file->getClientOriginalName(),
|
|
'url' => asset($file->hashName('uploads')),
|
|
]);
|
|
}
|
|
}
|