From 5f8b09f9d173f74615b348e225e5e7058c200770 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 27 Nov 2024 18:36:47 +0700 Subject: [PATCH] feat(overview): custom halaman ringkasan,menambahkan scope model Customer,Expense dan Transaction,menambahkan image dan custom css --- .../Admin/Dashboard/OverviewController.php | 50 ++++++ app/Models/Customer.php | 13 ++ app/Models/Expense.php | 18 ++ app/Models/Transaction.php | 18 ++ public/assets/admin/css/style.css | 2 +- public/assets/admin/images/balance-bg.png | Bin 0 -> 10233 bytes public/assets/admin/images/mobile.png | Bin 0 -> 14920 bytes .../pages/admin/dashboard/overview.blade.php | 166 +++++++++++++----- 8 files changed, 226 insertions(+), 41 deletions(-) create mode 100644 public/assets/admin/images/balance-bg.png create mode 100644 public/assets/admin/images/mobile.png diff --git a/app/Http/Controllers/Admin/Dashboard/OverviewController.php b/app/Http/Controllers/Admin/Dashboard/OverviewController.php index f353492..29917f6 100644 --- a/app/Http/Controllers/Admin/Dashboard/OverviewController.php +++ b/app/Http/Controllers/Admin/Dashboard/OverviewController.php @@ -3,13 +3,63 @@ namespace App\Http\Controllers\Admin\Dashboard; use App\Http\Controllers\Controller; +use App\Models\Barbershop; +use App\Models\Expense; +use App\Models\Transaction; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; class OverviewController extends Controller { public function index() { + $todayIncome = Transaction::query()->barbershop()->whereDate('created_at', now()->today())->sum('total'); + $yesterdayIncome = Transaction::query()->barbershop()->whereDate('created_at', now()->yesterday())->sum('total'); + + $todayShaving = Transaction::query()->barbershop()->today()->count(); + $yesterdayShaving = Transaction::query()->barbershop()->yesterday()->count(); + + $todayExpense = Expense::query()->barbershop()->today()->sum('amount'); + $yesterdayExpense = Expense::query()->barbershop()->yesterday()->sum('amount'); + + $todayNewCustomer = Transaction::with('customer')->whereDoesntHave('customer.transactions', function ($query) { + $query->where('id', '<>', DB::raw('transactions.id')); + }) + ->barbershop() + ->today() + ->distinct('customer_id') + ->count('customer_id'); + + $yesterdayNewCustomer = Transaction::with('customer')->whereDoesntHave('customer.transactions', function ($query) { + $query->where('id', '<>', DB::raw('transactions.id')); + }) + ->barbershop() + ->yesterday() + ->distinct('customer_id') + ->count('customer_id'); + + $topCustomersByTotal = Transaction::groupBy('customer_id') + ->select( + 'customer_id', + DB::raw('SUM(total) as total_transaction'), + DB::raw('COUNT(*) as transaction_count') + ) + ->orderBy('total_transaction', 'desc') + ->limit(5) + ->get(); + return view('pages.admin.dashboard.overview', [ 'pageTitle' => 'Ringkasan', + 'todayIncome' => $todayIncome, + 'diffIncome' => $todayIncome - $yesterdayIncome, + 'todayShaving' => $todayShaving, + 'diffShaving' => $todayShaving - $yesterdayShaving, + 'todayExpense' => $todayExpense, + 'diffExpense' => $todayExpense - $yesterdayExpense, + 'todayNewCustomer' => $todayNewCustomer, + 'diffNewCustomer' => $todayNewCustomer - $yesterdayNewCustomer, + 'cash' => Barbershop::findOrFail(Auth::user()->barbershop_id)->cash, + 'topCustomersByTotal' => $topCustomersByTotal, ]); } } diff --git a/app/Models/Customer.php b/app/Models/Customer.php index e0d9a58..9ab7869 100644 --- a/app/Models/Customer.php +++ b/app/Models/Customer.php @@ -2,10 +2,13 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Support\Facades\Auth; class Customer extends Model { @@ -18,6 +21,11 @@ class Customer extends Model 'contact_number', ]; + public function scopeBarbershop(Builder $query): Builder + { + return $query->where('barbershop_id', Auth::user()->barbershop_id); + } + public function user(): BelongsTo { return $this->belongsTo(User::class); @@ -27,4 +35,9 @@ public function barbershop(): BelongsTo { return $this->belongsTo(Barbershop::class); } + + public function transactions(): HasMany + { + return $this->hasMany(Transaction::class); + } } diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 7c16546..b79fe0c 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -3,12 +3,15 @@ namespace App\Models; use App\Observers\ExpenseObserver; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Attributes\ObservedBy; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphOne; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Support\Facades\Auth; #[ObservedBy([ExpenseObserver::class])] class Expense extends Model @@ -23,6 +26,21 @@ class Expense extends Model 'use_cash', ]; + public function scopeBarbershop(Builder $query): Builder + { + return $query->where('barbershop_id', Auth::user()->barbershop_id); + } + + public function scopeToday(Builder $query): Builder + { + return $query->whereDate('created_at', Carbon::today()); + } + + public function scopeYesterday(Builder $query): Builder + { + return $query->whereDate('created_at', Carbon::yesterday()); + } + public function user(): BelongsTo { return $this->belongsTo(User::class); diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 260905d..0e3e994 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -2,11 +2,14 @@ namespace App\Models; +use Carbon\Carbon; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphOne; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Support\Facades\Auth; class Transaction extends Model { @@ -23,6 +26,21 @@ class Transaction extends Model 'payment_method', ]; + public function scopeBarbershop(Builder $query): Builder + { + return $query->where('barbershop_id', Auth::user()->barbershop_id); + } + + public function scopeToday(Builder $query): Builder + { + return $query->whereDate('created_at', Carbon::today()); + } + + public function scopeYesterday(Builder $query): Builder + { + return $query->whereDate('created_at', Carbon::yesterday()); + } + public function user(): BelongsTo { return $this->belongsTo(User::class); diff --git a/public/assets/admin/css/style.css b/public/assets/admin/css/style.css index 2fc3fe6..f1e1f93 100644 --- a/public/assets/admin/css/style.css +++ b/public/assets/admin/css/style.css @@ -18644,7 +18644,7 @@ .widget-decor { } .balance-widget { - background-image: url(../images/dashboard-2/balance-bg.png); + background-image: url(../images/balance-bg.png); background-size: cover; background-repeat: no-repeat; background-position: right; diff --git a/public/assets/admin/images/balance-bg.png b/public/assets/admin/images/balance-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..54eba6b753e6f5f6aa796ce8779bfcaa5d0d80f9 GIT binary patch literal 10233 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 literal 0 HcmV?d00001 diff --git a/resources/views/pages/admin/dashboard/overview.blade.php b/resources/views/pages/admin/dashboard/overview.blade.php index d39831a..b83bd97 100644 --- a/resources/views/pages/admin/dashboard/overview.blade.php +++ b/resources/views/pages/admin/dashboard/overview.blade.php @@ -2,49 +2,136 @@ @section('styles') @endsection @section('app') -
-
-
-
-
-
-
-
-

Selamat Datang

-

Inilah yang terjadi di akun Anda hari ini

-
+
+
+
+
+
+
+
+
+
+ Kas +

+ {{ formatToRupiah($cash) }} +

+ Tambah Kas +
+ mobile with coin +
+
-
-
- - - - - - - - - - - - - - - - - - - - +
+
+
+ Pendapatan +
+

{{ formatToRupiah($todayIncome) }}

+ + + + {{ formatToRupiah($diffIncome) > 0 ? '+' : '' }}{{ formatToRupiah($diffIncome) }} + +
+
+
+
+
+
+
+
+
+ Cukur +
+

{{ $todayShaving }}

+ + + {{ $diffShaving > 0 ? '+' : '' }}{{ $diffShaving }} + +
+
+ + +
+
+
+
+
+
+
+ Pengeluaran +
+

{{ formatToRupiah($todayExpense) }}

+ + + + {{ formatToRupiah($diffExpense) > 0 ? '+' : '' }}{{ formatToRupiah($diffExpense) }} + +
+
+ + +
+
+
+
+
+
+
+ Pelanggan Baru +
+

{{ $todayNewCustomer }}

+ + + + {{ $diffNewCustomer > 0 ? '+' : '' }}{{ $diffNewCustomer }} + +
+
+ + +
+
-
-
- barber +
+
+
+
+
+
+
Top Pelanggan
+
+
+
+
+ + + + + + + + + + + @foreach ($topCustomersByTotal as $item) + + + + + + + @endforeach + +
NamaKontakJumlah TransaksiTotal Transakski
{{ $item->customer->name ?? '--deleted--' }}{{ $item->customer->contact_number ?? '-' }}{{ $item->transaction_count }}{{ formatToRupiah($item->total_transaction) }}
+
+
+
@@ -52,6 +139,5 @@
@endsection -@section('beforeScripts') - +@section('afterScript') @endsection