From 2e3126ea29dc77ea4af794551c9064c4a4a2af7d Mon Sep 17 00:00:00 2001 From: Fiqh Pratama Date: Mon, 13 Oct 2025 00:14:28 +0700 Subject: [PATCH] enhance outstanding expense card --- app/Helpers/OutstandingHelper.php | 77 +++++++++++++++++++ ...ormEntertainmentPresentationController.php | 34 ++++---- .../Forms/FormMeetingSeminarController.php | 34 ++++---- .../Controllers/Forms/FormOtherController.php | 34 ++++---- .../Forms/FormUpCountryController.php | 46 +++++++---- .../Forms/FormVehicleController.php | 34 ++++---- .../pages/forms/entertainment/index.blade.php | 52 ++++++++++++- .../pages/forms/meeting/index.blade.php | 55 ++++++++++++- .../backend/pages/forms/other/index.blade.php | 55 ++++++++++++- .../pages/forms/upcountry/index.blade.php | 54 ++++++++++++- .../pages/forms/vehicle/index.blade.php | 55 ++++++++++++- 11 files changed, 443 insertions(+), 87 deletions(-) create mode 100644 app/Helpers/OutstandingHelper.php diff --git a/app/Helpers/OutstandingHelper.php b/app/Helpers/OutstandingHelper.php new file mode 100644 index 0000000..55578fc --- /dev/null +++ b/app/Helpers/OutstandingHelper.php @@ -0,0 +1,77 @@ +filter(function ($form) use ($role, $periodStart, $periodEnd, $regionId, $cabangId) { + $tanggal = Carbon::parse($form->tanggal); + if ($tanggal->lt($periodStart) || $tanggal->gt($periodEnd)) { + return false; + } + + $status = $form->status; + switch ($role) { + case 'Admin Region': + if ($status !== 'On Progress') { + return false; + } + if ($regionId && optional($form->user)->region_id !== $regionId) { + return false; + } + return true; + + case 'Area Manager Cabang': + if ($status !== 'Approved 1') { + return false; + } + if ($cabangId && optional($form->rayon)->cabang_id !== $cabangId) { + return false; + } + return true; + + case 'Marketing Information System': + return $status === 'Approved 1'; + + case 'Marketing Operational Manager Region': + if ($status !== 'Approved 2') { + return false; + } + if (!is_null($form->final_approved_at) || !is_null($form->final_approved_by)) { + return false; + } + if ($regionId && optional($form->user)->region_id !== $regionId) { + return false; + } + return true; + + case 'Head of Sales Marketing': + if ($status !== 'Approved 2') { + return false; + } + return is_null($form->final_approved_at) || is_null($form->final_approved_by); + + default: + return is_null($form->final_approved_at) || is_null($form->final_approved_by); + } + }); + } +} diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 2c79bc7..4987efe 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -26,6 +26,7 @@ use App\Models\Admin; use App\Rules\FileType; use App\Helpers\BudgetHelper; use App\Helpers\NotificationHelper; +use App\Helpers\OutstandingHelper; use Illuminate\Support\Facades\Log; use App\Services\BrevoService; use Carbon\Carbon; @@ -39,6 +40,9 @@ class FormEntertainmentPresentationController extends Controller $role = auth()->user()->getRoleNames()[0]; $startDay = (int) env('STARTING_DATE', 11); $closingDay = (int) env('CLOSING_DATE', 10); + $userRegionData = auth()->user()->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; $now = Carbon::now(); @@ -64,25 +68,21 @@ class FormEntertainmentPresentationController extends Controller $periodeYear = (int) $currentPeriodStartDate->format('Y'); if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { - $region_id = auth()->user()->getMyCabangAndRegionId()['region']; - - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); + if ($regionContextId) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); })->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); } } elseif ($role == 'Area Manager Cabang') { - $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; - - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + if ($cabangContextId) { + $users = UserHasCabang::where('cabang_id', $cabangContextId)->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + $availableBudget = BudgetHelper::getAvailableBudget($cabangContextId, $periodeMonth, $periodeYear); } } elseif ($role == 'Medical Representatif') { $forms = $forms->where('user_id', auth()->user()->id); @@ -93,9 +93,16 @@ class FormEntertainmentPresentationController extends Controller } } - $outstandingForms = $forms->filter(function ($form) { - return is_null($form->final_approved_at) || is_null($form->final_approved_by); - }); + $outstandingForms = OutstandingHelper::filterForms( + $forms, + $role, + $currentPeriodStartDate, + $currentPeriodClosingDate, + [ + 'region_id' => $regionContextId, + 'cabang_id' => $cabangContextId, + ] + ); session()->put('redirect_url', route('forms.entertainment')); return view('backend.pages.forms.entertainment.index', [ @@ -103,6 +110,7 @@ class FormEntertainmentPresentationController extends Controller 'availableBudget' => $availableBudget, 'outstandingCount' => $outstandingForms->count(), 'outstandingTotal' => $outstandingForms->sum('total'), + 'outstandingIds' => $outstandingForms->pluck('id')->toArray(), ]); } diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index 6b04fda..54a37e1 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -26,6 +26,7 @@ use App\Rules\FileType; use App\Models\Admin; use App\Helpers\BudgetHelper; use App\Helpers\NotificationHelper; +use App\Helpers\OutstandingHelper; use Illuminate\Support\Facades\Log; use App\Services\BrevoService; use Carbon\Carbon; @@ -39,6 +40,9 @@ class FormMeetingSeminarController extends Controller $role = auth()->user()->getRoleNames()[0]; $startDay = (int) env('STARTING_DATE', 11); $closingDay = (int) env('CLOSING_DATE', 10); + $userRegionData = auth()->user()->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; // Referensi waktu sekarang $now = Carbon::now(); @@ -65,25 +69,21 @@ class FormMeetingSeminarController extends Controller $periodeYear = (int) $currentPeriodStartDate->format('Y'); if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { - $region_id = auth()->user()->getMyCabangAndRegionId()['region']; - - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); + if ($regionContextId) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); })->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); } } elseif ($role == 'Area Manager Cabang') { - $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; - - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + if ($cabangContextId) { + $users = UserHasCabang::where('cabang_id', $cabangContextId)->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + $availableBudget = BudgetHelper::getAvailableBudget($cabangContextId, $periodeMonth, $periodeYear); } } elseif ($role == 'Medical Representatif') { $forms = $forms->where('user_id', auth()->user()->id); @@ -94,9 +94,16 @@ class FormMeetingSeminarController extends Controller } } - $outstandingForms = $forms->filter(function ($form) { - return is_null($form->final_approved_at) || is_null($form->final_approved_by); - }); + $outstandingForms = OutstandingHelper::filterForms( + $forms, + $role, + $currentPeriodStartDate, + $currentPeriodClosingDate, + [ + 'region_id' => $regionContextId, + 'cabang_id' => $cabangContextId, + ] + ); session()->put('redirect_url', route('forms.meeting')); @@ -105,6 +112,7 @@ class FormMeetingSeminarController extends Controller 'availableBudget' => $availableBudget, 'outstandingCount' => $outstandingForms->count(), 'outstandingTotal' => $outstandingForms->sum('total'), + 'outstandingIds' => $outstandingForms->pluck('id')->toArray(), ]); } diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 6323cf6..45d9f2b 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -23,6 +23,7 @@ use App\Models\Admin; use App\Helpers\BudgetHelper; use App\Helpers\NotificationHelper; use App\Models\Cabang; +use App\Helpers\OutstandingHelper; use Illuminate\Support\Facades\Log; use App\Services\BrevoService; use Carbon\Carbon; @@ -36,6 +37,9 @@ class FormOtherController extends Controller $role = auth()->user()->getRoleNames()[0]; $startDay = (int) env('STARTING_DATE', 11); $closingDay = (int) env('CLOSING_DATE', 10); + $userRegionData = auth()->user()->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; // Referensi waktu sekarang $now = Carbon::now(); @@ -62,25 +66,21 @@ class FormOtherController extends Controller $periodeYear = (int) $currentPeriodStartDate->format('Y'); if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { - $region_id = auth()->user()->getMyCabangAndRegionId()['region']; - - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); + if ($regionContextId) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); })->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); } } elseif ($role == 'Area Manager Cabang') { - $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; - - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + if ($cabangContextId) { + $users = UserHasCabang::where('cabang_id', $cabangContextId)->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + $availableBudget = BudgetHelper::getAvailableBudget($cabangContextId, $periodeMonth, $periodeYear); } } elseif ($role == 'Medical Representatif') { $forms = $forms->where('user_id', auth()->user()->id); @@ -91,9 +91,16 @@ class FormOtherController extends Controller } } - $outstandingForms = $forms->filter(function ($form) { - return is_null($form->final_approved_at) || is_null($form->final_approved_by); - }); + $outstandingForms = OutstandingHelper::filterForms( + $forms, + $role, + $currentPeriodStartDate, + $currentPeriodClosingDate, + [ + 'region_id' => $regionContextId, + 'cabang_id' => $cabangContextId, + ] + ); session()->put('redirect_url', route('forms.other')); @@ -102,6 +109,7 @@ class FormOtherController extends Controller 'availableBudget' => $availableBudget, 'outstandingCount' => $outstandingForms->count(), 'outstandingTotal' => $outstandingForms->sum('total'), + 'outstandingIds' => $outstandingForms->pluck('id')->toArray(), ]); } diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index e9d5902..53e6bfd 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -26,6 +26,7 @@ use App\Rules\FileType; use App\Models\Admin; use App\Helpers\BudgetHelper; use App\Helpers\NotificationHelper; +use App\Helpers\OutstandingHelper; use Illuminate\Support\Facades\Log; use App\Services\BrevoService; use Carbon\Carbon; @@ -62,29 +63,28 @@ class FormUpCountryController extends Controller ->get(); $availableBudget = null; + $userRegionData = auth()->user()->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; $periodeMonth = strtolower($currentPeriodStartDate->format('F')); $periodeYear = (int) $currentPeriodStartDate->format('Y'); if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { - $region_id = auth()->user()->getMyCabangAndRegionId()['region']; - - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); + if ($regionContextId) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); })->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); } } else if ($role == 'Area Manager Cabang') { - $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; - - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + if ($cabangContextId) { + $users = UserHasCabang::where('cabang_id', $cabangContextId)->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + $availableBudget = BudgetHelper::getAvailableBudget($cabangContextId, $periodeMonth, $periodeYear); } } else if ($role == 'Medical Representatif') { $forms = $forms->where('user_id', auth()->user()->id); @@ -95,9 +95,16 @@ class FormUpCountryController extends Controller $forms = $forms; } - $outstandingForms = $forms->filter(function ($form) { - return is_null($form->final_approved_at) || is_null($form->final_approved_by); - }); + $outstandingForms = OutstandingHelper::filterForms( + $forms, + $role, + $currentPeriodStartDate, + $currentPeriodClosingDate, + [ + 'region_id' => $regionContextId, + 'cabang_id' => $cabangContextId, + ] + ); session()->put('redirect_url', route('forms.up-country')); return view('backend.pages.forms.upcountry.index', [ @@ -105,6 +112,7 @@ class FormUpCountryController extends Controller 'availableBudget' => $availableBudget, 'outstandingCount' => $outstandingForms->count(), 'outstandingTotal' => $outstandingForms->sum('total'), + 'outstandingIds' => $outstandingForms->pluck('id')->toArray(), ]); } @@ -382,15 +390,21 @@ class FormUpCountryController extends Controller $regionId = Cabang::where('id', 1)->value('region_id'); $rayonData = Rayon::where('cabang_id', $cabang->id)->get(); - if ($role = "Admin Region" || "Marketing Information System" || "Superadmin") { + if ($role == "Admin Region") { $rayonData = DB::table('rayon') ->join('cabang', 'rayon.cabang_id', '=', 'cabang.id') ->join('region', 'cabang.region_id', '=', 'region.id') ->where('region.id', $regionId) ->select('rayon.*') ->get(); - - } + } elseif ($role == "Marketing Information System" || $role == "Superadmin") { + $rayonData = DB::table('rayon') + ->join('cabang', 'rayon.cabang_id', '=', 'cabang.id') + ->join('region', 'cabang.region_id', '=', 'region.id') + ->whereNotNull('region.id') + ->select('rayon.*') + ->get(); + } $form = FormUpCountry::with('rayon')->findOrfail($id); if (($form->status != 'On Progress' && $form->status != 'Rejected') && $role == 'Medical Representatif') { diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index de2ba55..a29c5e5 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -26,6 +26,7 @@ use App\Rules\FileType; use App\Models\Admin; use App\Helpers\BudgetHelper; use App\Helpers\NotificationHelper; +use App\Helpers\OutstandingHelper; use Illuminate\Support\Facades\Log; use App\Services\BrevoService; use Carbon\Carbon; @@ -61,29 +62,28 @@ class FormVehicleController extends Controller ->get(); $availableBudget = null; + $userRegionData = auth()->user()->getMyCabangAndRegionId(); + $regionContextId = $userRegionData['region'] !== '-' ? $userRegionData['region'] : null; + $cabangContextId = $userRegionData['cabang'] !== '-' ? $userRegionData['cabang'] : null; $periodeMonth = strtolower($currentPeriodStartDate->format('F')); $periodeYear = (int) $currentPeriodStartDate->format('Y'); if ($role === 'Admin Region' || $role === 'Marketing Operational Manager Region') { - $region_id = auth()->user()->getMyCabangAndRegionId()['region']; - - if ($region_id) { - $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { - $query->where('region_id', $region_id); + if ($regionContextId) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($regionContextId) { + $query->where('region_id', $regionContextId); })->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); } } elseif ($role === 'Area Manager Cabang') { - $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; - - if ($cabang_id) { - $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + if ($cabangContextId) { + $users = UserHasCabang::where('cabang_id', $cabangContextId)->get(); $userIds = $users->pluck('user_id')->toArray(); $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + $availableBudget = BudgetHelper::getAvailableBudget($cabangContextId, $periodeMonth, $periodeYear); } } elseif ($role === 'Medical Representatif') { $forms = $forms->where('user_id', auth()->user()->id); @@ -94,9 +94,16 @@ class FormVehicleController extends Controller } } - $outstandingForms = $forms->filter(function ($form) { - return is_null($form->final_approved_at) || is_null($form->final_approved_by); - }); + $outstandingForms = OutstandingHelper::filterForms( + $forms, + $role, + $currentPeriodStartDate, + $currentPeriodClosingDate, + [ + 'region_id' => $regionContextId, + 'cabang_id' => $cabangContextId, + ] + ); session()->put('redirect_url', route('forms.vehicle')); @@ -105,6 +112,7 @@ class FormVehicleController extends Controller 'availableBudget' => $availableBudget, 'outstandingCount' => $outstandingForms->count(), 'outstandingTotal' => $outstandingForms->sum('total'), + 'outstandingIds' => $outstandingForms->pluck('id')->toArray(), ]); } diff --git a/resources/views/backend/pages/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index 9d3f282..b7dc394 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -5,6 +5,17 @@ @endsection @section('admin-content') + + @php + $outstandingIdCollection = collect($outstandingIds ?? []); + @endphp
@@ -140,7 +151,7 @@ $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) - + {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} @@ -256,7 +267,17 @@ @endif - @if (($role != 'Medical Representatif' && auth()->user()->can('forms.entertainment.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) + @php + $canEdit = false; + if (auth()->user()->can('forms.entertainment.edit')) { + if (in_array($role, ['Medical Representatif', 'Area Manager Cabang'])) { + $canEdit = $item->status == 'On Progress'; + } else { + $canEdit = true; + } + } + @endphp + @if ($canEdit) @@ -458,7 +479,18 @@ $('.custom-control-input').prop('checked', false); if ($('#dataTable').length) { - $('#dataTable').DataTable({ + let outstandingFilterActive = false; + const outstandingFilter = function(settings, data, dataIndex) { + if (!outstandingFilterActive) { + return true; + } + const row = settings.aoData[dataIndex].nTr; + return $(row).data('outstanding') === 1 || $(row).data('outstanding') === '1'; + }; + + $.fn.dataTable.ext.search.push(outstandingFilter); + + const table = $('#dataTable').DataTable({ responsive: false, dom: 'Blfrtip', lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, "All"] ], // Control the entries dropdown @@ -487,6 +519,20 @@ 'colvis' ] }); + + const $outstandingCard = $('#outstandingCard'); + const updateCardHint = (isActive) => { + const text = isActive ? 'Klik untuk menampilkan semua data' : 'Klik untuk menampilkan detail'; + $outstandingCard.find('.filter-hint small').text(text); + }; + updateCardHint(outstandingFilterActive); + + $outstandingCard.on('click', function () { + outstandingFilterActive = !outstandingFilterActive; + $outstandingCard.toggleClass('active', outstandingFilterActive); + table.draw(); + updateCardHint(outstandingFilterActive); + }); } // Handle Reject Button Click diff --git a/resources/views/backend/pages/forms/meeting/index.blade.php b/resources/views/backend/pages/forms/meeting/index.blade.php index d3c9e2b..dc19ea5 100644 --- a/resources/views/backend/pages/forms/meeting/index.blade.php +++ b/resources/views/backend/pages/forms/meeting/index.blade.php @@ -5,6 +5,17 @@ @endsection @section('admin-content') + + @php + $outstandingIdCollection = collect($outstandingIds ?? []); + @endphp
@@ -61,11 +72,12 @@
-
+

{{ $outstandingCount }}

Outstanding Expenses

Total Rp {{ number_format($outstandingTotal, 0, ',', '.') }}

+

Klik untuk menampilkan detail

@@ -139,7 +151,7 @@ $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) - + {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} @@ -246,7 +258,17 @@ @endif - @if (($role != 'Medical Representatif' && auth()->user()->can('forms.meeting.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) + @php + $canEdit = false; + if (auth()->user()->can('forms.meeting.edit')) { + if (in_array($role, ['Medical Representatif', 'Area Manager Cabang'])) { + $canEdit = $item->status == 'On Progress'; + } else { + $canEdit = true; + } + } + @endphp + @if ($canEdit) @@ -470,7 +492,18 @@ $('.custom-control-input').prop('checked', false); if ($('#dataTable').length) { - $('#dataTable').DataTable({ + let outstandingFilterActive = false; + const outstandingFilter = function(settings, data, dataIndex) { + if (!outstandingFilterActive) { + return true; + } + const row = settings.aoData[dataIndex].nTr; + return $(row).data('outstanding') === 1 || $(row).data('outstanding') === '1'; + }; + + $.fn.dataTable.ext.search.push(outstandingFilter); + + const table = $('#dataTable').DataTable({ responsive: false, dom: 'Blfrtip', lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, "All"] ], // Control the entries dropdown @@ -499,6 +532,20 @@ 'colvis' ] }); + + const $outstandingCard = $('#outstandingCard'); + const updateCardHint = (isActive) => { + const text = isActive ? 'Klik untuk menampilkan semua data' : 'Klik untuk menampilkan detail'; + $outstandingCard.find('.filter-hint small').text(text); + }; + updateCardHint(outstandingFilterActive); + + $outstandingCard.on('click', function () { + outstandingFilterActive = !outstandingFilterActive; + $outstandingCard.toggleClass('active', outstandingFilterActive); + table.draw(); + updateCardHint(outstandingFilterActive); + }); } // Handle Reject Button Click diff --git a/resources/views/backend/pages/forms/other/index.blade.php b/resources/views/backend/pages/forms/other/index.blade.php index a73c3e3..15fedc6 100644 --- a/resources/views/backend/pages/forms/other/index.blade.php +++ b/resources/views/backend/pages/forms/other/index.blade.php @@ -5,6 +5,17 @@ @endsection @section('admin-content') + + @php + $outstandingIdCollection = collect($outstandingIds ?? []); + @endphp
@@ -61,11 +72,12 @@
-
+

{{ $outstandingCount }}

Outstanding Expenses

Total Rp {{ number_format($outstandingTotal, 0, ',', '.') }}

+

Klik untuk menampilkan detail

@@ -139,7 +151,7 @@ $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) - + {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} @@ -254,7 +266,17 @@ @endif - @if (($role != 'Medical Representatif' && auth()->user()->can('forms.other.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) + @php + $canEdit = false; + if (auth()->user()->can('forms.other.edit')) { + if (in_array($role, ['Medical Representatif', 'Area Manager Cabang'])) { + $canEdit = $item->status == 'On Progress'; + } else { + $canEdit = true; + } + } + @endphp + @if ($canEdit) @@ -444,7 +466,18 @@ $('.custom-control-input').prop('checked', false); if ($('#dataTable').length) { - $('#dataTable').DataTable({ + let outstandingFilterActive = false; + const outstandingFilter = function(settings, data, dataIndex) { + if (!outstandingFilterActive) { + return true; + } + const row = settings.aoData[dataIndex].nTr; + return $(row).data('outstanding') === 1 || $(row).data('outstanding') === '1'; + }; + + $.fn.dataTable.ext.search.push(outstandingFilter); + + const table = $('#dataTable').DataTable({ responsive: false, dom: 'Blfrtip', lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, "All"] ], // Control the entries dropdown @@ -473,6 +506,20 @@ 'colvis' ] }); + + const $outstandingCard = $('#outstandingCard'); + const updateCardHint = (isActive) => { + const text = isActive ? 'Klik untuk menampilkan semua data' : 'Klik untuk menampilkan detail'; + $outstandingCard.find('.filter-hint small').text(text); + }; + updateCardHint(outstandingFilterActive); + + $outstandingCard.on('click', function () { + outstandingFilterActive = !outstandingFilterActive; + $outstandingCard.toggleClass('active', outstandingFilterActive); + table.draw(); + updateCardHint(outstandingFilterActive); + }); } // Handle Reject Button Click diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index 0d0bffa..2dd123c 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -5,6 +5,17 @@ @endsection @section('admin-content') + + @php + $outstandingIdCollection = collect($outstandingIds ?? []); + @endphp
@@ -61,11 +72,12 @@
-
+

{{ $outstandingCount }}

Outstanding Expenses

Total Rp {{ number_format($outstandingTotal, 0, ',', '.') }}

+

Klik untuk menampilkan detail

@@ -139,7 +151,7 @@ $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) - + {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} @@ -252,7 +264,17 @@ @endif - @if (($role != 'Medical Representatif' && auth()->user()->can('forms.country.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) + @php + $canEdit = false; + if (auth()->user()->can('forms.country.edit')) { + if (in_array($role, ['Medical Representatif', 'Area Manager Cabang'])) { + $canEdit = $item->status == 'On Progress'; + } else { + $canEdit = true; + } + } + @endphp + @if ($canEdit) @@ -518,7 +540,18 @@ $('.custom-control-input').prop('checked', false); if ($('#dataTable').length) { - $('#dataTable').DataTable({ + let outstandingFilterActive = false; + const outstandingFilter = function(settings, data, dataIndex) { + if (!outstandingFilterActive) { + return true; + } + const row = settings.aoData[dataIndex].nTr; + return $(row).data('outstanding') === 1 || $(row).data('outstanding') === '1'; + }; + + $.fn.dataTable.ext.search.push(outstandingFilter); + + const table = $('#dataTable').DataTable({ responsive: true, dom: 'Blfrtip', @@ -551,6 +584,19 @@ }); + const $outstandingCard = $('#outstandingCard'); + const updateCardHint = (isActive) => { + const text = isActive ? 'Klik untuk menampilkan semua data' : 'Klik untuk menampilkan detail'; + $outstandingCard.find('.filter-hint small').text(text); + }; + updateCardHint(outstandingFilterActive); + + $outstandingCard.on('click', function () { + outstandingFilterActive = !outstandingFilterActive; + $outstandingCard.toggleClass('active', outstandingFilterActive); + table.draw(); + updateCardHint(outstandingFilterActive); + }); } // Handle Reject Button Click diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index fc9af6e..b8186a4 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -5,6 +5,17 @@ @endsection @section('admin-content') + + @php + $outstandingIdCollection = collect($outstandingIds ?? []); + @endphp
@@ -61,11 +72,12 @@
-
+

{{ $outstandingCount }}

Outstanding Expenses

Total Rp {{ number_format($outstandingTotal, 0, ',', '.') }}

+

Klik untuk menampilkan detail

@@ -143,7 +155,7 @@ $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) - + {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} @@ -271,7 +283,17 @@ @endif - @if (($role != 'Medical Representatif' && auth()->user()->can('forms.vehicle.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) + @php + $canEdit = false; + if (auth()->user()->can('forms.vehicle.edit')) { + if (in_array($role, ['Medical Representatif', 'Area Manager Cabang'])) { + $canEdit = $item->status == 'On Progress'; + } else { + $canEdit = true; + } + } + @endphp + @if ($canEdit) @@ -479,7 +501,18 @@ $('.custom-control-input').prop('checked', false); if ($('#dataTable').length) { - $('#dataTable').DataTable({ + let outstandingFilterActive = false; + const outstandingFilter = function(settings, data, dataIndex) { + if (!outstandingFilterActive) { + return true; + } + const row = settings.aoData[dataIndex].nTr; + return $(row).data('outstanding') === 1 || $(row).data('outstanding') === '1'; + }; + + $.fn.dataTable.ext.search.push(outstandingFilter); + + const table = $('#dataTable').DataTable({ responsive: false, dom: 'Blfrtip', lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, "All"] ], // Control the entries dropdown @@ -508,6 +541,20 @@ 'colvis' ] }); + + const $outstandingCard = $('#outstandingCard'); + const updateCardHint = (isActive) => { + const text = isActive ? 'Klik untuk menampilkan semua data' : 'Klik untuk menampilkan detail'; + $outstandingCard.find('.filter-hint small').text(text); + }; + updateCardHint(outstandingFilterActive); + + $outstandingCard.on('click', function () { + outstandingFilterActive = !outstandingFilterActive; + $outstandingCard.toggleClass('active', outstandingFilterActive); + table.draw(); + updateCardHint(outstandingFilterActive); + }); } // Handle Reject Button Click