2025-01-08 14:12:45 +07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Backend;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
use App\Models\AuditTrail;
|
|
|
|
|
use App\Models\FormUpCountry;
|
|
|
|
|
use App\Models\FormEntertaimentPresentation;
|
|
|
|
|
use App\Models\FormMeetingSeminar;
|
|
|
|
|
use App\Models\FormVehicleRunningCost;
|
|
|
|
|
use App\Models\FormOthers;
|
2025-01-08 15:01:42 +07:00
|
|
|
use App\Models\UserHasCabang;
|
2025-01-11 13:31:44 +07:00
|
|
|
use Illuminate\Support\Facades\DB;
|
2025-01-08 15:01:42 +07:00
|
|
|
use App\Models\Cabang;
|
2025-01-10 13:38:11 +07:00
|
|
|
use App\Models\Region;
|
2025-01-11 13:31:44 +07:00
|
|
|
use App\Helpers\FormHelper;
|
|
|
|
|
use App\Helpers\BudgetHelper;
|
2025-10-12 18:29:07 +07:00
|
|
|
use App\Models\Admin;
|
2025-01-11 13:31:44 +07:00
|
|
|
use Illuminate\Support\Carbon;
|
|
|
|
|
use Illuminate\Support\Facades\Schema;
|
2025-01-14 14:15:32 +07:00
|
|
|
use App\Models\Kategori;
|
|
|
|
|
use App\Models\BudgetControlLog;
|
2025-05-05 19:40:38 +07:00
|
|
|
use App\Helpers\PeriodeHelper;
|
2025-01-08 14:12:45 +07:00
|
|
|
|
|
|
|
|
class ReportController extends Controller
|
2025-01-11 13:31:44 +07:00
|
|
|
{
|
2025-01-08 15:36:08 +07:00
|
|
|
public function upcountry()
|
2025-01-08 14:12:45 +07:00
|
|
|
{
|
2025-01-08 15:01:42 +07:00
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
2025-01-15 22:29:07 +07:00
|
|
|
$cabangs = collect(); // Default empty collection
|
|
|
|
|
$regions = collect(); // Default empty collection
|
|
|
|
|
$formsQuery = FormUpCountry::with([
|
|
|
|
|
'user.region',
|
|
|
|
|
'user.cabang',
|
|
|
|
|
'rayon'
|
|
|
|
|
]);
|
2025-01-08 15:01:42 +07:00
|
|
|
|
|
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
2025-01-08 15:01:42 +07:00
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$cabangs = Cabang::all();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::all();
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
2025-01-08 14:12:45 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Apply filters from URL params
|
2025-01-08 15:01:42 +07:00
|
|
|
$params = request()->all();
|
2025-01-15 22:29:07 +07:00
|
|
|
|
|
|
|
|
if (isset($params['region'])) {
|
|
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
|
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
}
|
2025-01-10 13:38:11 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
}
|
2025-01-08 15:01:42 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
if (isset($params['start_date']) || isset($params['end_date'])) {
|
|
|
|
|
$startDate = $params['start_date'] ?? null;
|
|
|
|
|
$endDate = $params['end_date'] ?? null;
|
2025-01-08 15:01:42 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
if ($startDate && $endDate) {
|
|
|
|
|
$formsQuery->whereBetween('tanggal', [$startDate, $endDate]);
|
|
|
|
|
} elseif ($startDate) {
|
|
|
|
|
$formsQuery->where('tanggal', '>=', $startDate);
|
|
|
|
|
} elseif ($endDate) {
|
|
|
|
|
$formsQuery->where('tanggal', '<=', $endDate);
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
}
|
2025-01-08 15:01:42 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
if (isset($params['status'])) {
|
|
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-08 15:01:42 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Fetch forms after applying all filters
|
|
|
|
|
$forms = $formsQuery->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
return view('backend.pages.report.upcountry', [
|
2025-01-08 15:01:42 +07:00
|
|
|
'pageInfo' => [
|
2025-01-08 15:36:08 +07:00
|
|
|
'title' => 'Generate Reports For Form Up Country',
|
|
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-01-10 13:38:11 +07:00
|
|
|
'cabang' => $cabangs,
|
|
|
|
|
'regions' => $regions
|
2025-01-08 15:36:08 +07:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
public function vehicle()
|
|
|
|
|
{
|
|
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
2025-01-15 22:29:07 +07:00
|
|
|
$cabangs = collect(); // Default empty collection
|
|
|
|
|
$regions = collect(); // Default empty collection
|
|
|
|
|
$formsQuery = FormVehicleRunningCost::with([
|
|
|
|
|
'user.region', // Eager load 'region' within 'user'
|
|
|
|
|
'user.cabang', // Eager load 'cabang' within 'user'
|
|
|
|
|
]);
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Apply role-based query logic
|
2025-01-08 15:36:08 +07:00
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
2025-01-08 15:36:08 +07:00
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
} else {
|
2025-01-15 22:29:07 +07:00
|
|
|
// Default behavior for other roles (if no specific role is matched)
|
2025-01-08 15:36:08 +07:00
|
|
|
$cabangs = Cabang::all();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::all();
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Get all params in URL for filtering
|
2025-01-08 15:36:08 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($params) {
|
|
|
|
|
// Filter by region
|
|
|
|
|
if (isset($params['region'])) {
|
|
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by cabang
|
|
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by date range
|
|
|
|
|
if (isset($params['start_date']) || isset($params['end_date'])) {
|
|
|
|
|
$startDate = $params['start_date'] ?? null;
|
|
|
|
|
$endDate = $params['end_date'] ?? null;
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($startDate && $endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->whereBetween('tanggal', [$startDate, $endDate]);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($startDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '>=', $startDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '<=', $endDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by status
|
|
|
|
|
if (isset($params['status'])) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Fetch forms after applying all filters
|
|
|
|
|
$forms = $formsQuery->get();
|
|
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
return view('backend.pages.report.vehicle', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Form Vehicle Running Cost',
|
|
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-01-10 13:38:11 +07:00
|
|
|
'cabang' => $cabangs,
|
|
|
|
|
'regions' => $regions
|
2025-01-08 15:36:08 +07:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function entertainment()
|
|
|
|
|
{
|
|
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
2025-01-15 22:29:07 +07:00
|
|
|
$cabangs = Cabang::all();
|
|
|
|
|
$regions = Region::all();
|
|
|
|
|
$formsQuery = FormEntertaimentPresentation::with([
|
|
|
|
|
'user.region', // Eager load 'region' within 'user'
|
|
|
|
|
'user.cabang', // Eager load 'cabang' within 'user'
|
|
|
|
|
]);
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Apply role-based query logic
|
2025-01-08 15:36:08 +07:00
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
2025-01-08 15:36:08 +07:00
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Get all params in URL for filtering
|
2025-01-08 15:36:08 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($params) {
|
|
|
|
|
// Filter by region
|
|
|
|
|
if (isset($params['region'])) {
|
|
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by cabang
|
|
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by date range
|
|
|
|
|
if (isset($params['start_date']) || isset($params['end_date'])) {
|
|
|
|
|
$startDate = $params['start_date'] ?? null;
|
|
|
|
|
$endDate = $params['end_date'] ?? null;
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($startDate && $endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->whereBetween('tanggal', [$startDate, $endDate]);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($startDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '>=', $startDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '<=', $endDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by status
|
|
|
|
|
if (isset($params['status'])) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Fetch forms after applying all filters
|
|
|
|
|
$forms = $formsQuery->get();
|
|
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
return view('backend.pages.report.entertainment', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Form Entertainment & Presentation',
|
|
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-01-10 13:38:11 +07:00
|
|
|
'cabang' => $cabangs,
|
|
|
|
|
'regions' => $regions
|
2025-01-08 15:36:08 +07:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function meeting()
|
|
|
|
|
{
|
|
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
2025-01-15 22:29:07 +07:00
|
|
|
$cabangs = Cabang::all();
|
|
|
|
|
$regions = Region::all();
|
|
|
|
|
|
|
|
|
|
// Initialize the query for FormMeetingSeminar with eager loading
|
|
|
|
|
$formsQuery = FormMeetingSeminar::with([
|
|
|
|
|
'user.region', // Eager load 'region' within 'user'
|
|
|
|
|
'user.cabang', // Eager load 'cabang' within 'user'
|
|
|
|
|
]);
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Apply role-based query logic
|
2025-01-08 15:36:08 +07:00
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
2025-01-08 15:36:08 +07:00
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Get all params in URL for filtering
|
2025-01-08 15:36:08 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($params) {
|
|
|
|
|
// Filter by region
|
|
|
|
|
if (isset($params['region'])) {
|
|
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by cabang
|
|
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by date range
|
|
|
|
|
if (isset($params['start_date']) || isset($params['end_date'])) {
|
|
|
|
|
$startDate = $params['start_date'] ?? null;
|
|
|
|
|
$endDate = $params['end_date'] ?? null;
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($startDate && $endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->whereBetween('tanggal', [$startDate, $endDate]);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($startDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '>=', $startDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '<=', $endDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by status
|
|
|
|
|
if (isset($params['status'])) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Fetch forms after applying all filters
|
|
|
|
|
$forms = $formsQuery->get();
|
|
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
return view('backend.pages.report.meeting', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Form Meeting & Seminar',
|
|
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-01-10 13:38:11 +07:00
|
|
|
'cabang' => $cabangs,
|
|
|
|
|
'regions' => $regions
|
2025-01-08 15:36:08 +07:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function others()
|
|
|
|
|
{
|
|
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
2025-01-15 22:29:07 +07:00
|
|
|
$cabangs = Cabang::all();
|
|
|
|
|
$regions = Region::all();
|
|
|
|
|
|
|
|
|
|
// Initialize the query for FormOthers with eager loading
|
|
|
|
|
$formsQuery = FormOthers::with([
|
|
|
|
|
'user.region', // Eager load 'region' within 'user'
|
|
|
|
|
'user.cabang', // Eager load 'cabang' within 'user'
|
|
|
|
|
'kategori'
|
|
|
|
|
]);
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Apply role-based query logic
|
2025-01-08 15:36:08 +07:00
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-10 13:38:11 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
2025-01-15 22:29:07 +07:00
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
2025-01-08 15:36:08 +07:00
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 22:29:07 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Get all params in URL for filtering
|
2025-01-08 15:36:08 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($params) {
|
|
|
|
|
// Filter by region
|
|
|
|
|
if (isset($params['region'])) {
|
|
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by cabang
|
|
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by date range
|
|
|
|
|
if (isset($params['start_date']) || isset($params['end_date'])) {
|
|
|
|
|
$startDate = $params['start_date'] ?? null;
|
|
|
|
|
$endDate = $params['end_date'] ?? null;
|
2025-01-08 15:36:08 +07:00
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
if ($startDate && $endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->whereBetween('tanggal', [$startDate, $endDate]);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($startDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '>=', $startDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
} elseif ($endDate) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('tanggal', '<=', $endDate);
|
2025-01-10 13:38:11 +07:00
|
|
|
}
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 13:38:11 +07:00
|
|
|
// Filter by status
|
|
|
|
|
if (isset($params['status'])) {
|
2025-01-15 22:29:07 +07:00
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-08 15:36:08 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
// Fetch forms after applying all filters
|
|
|
|
|
$forms = $formsQuery->get();
|
|
|
|
|
|
2025-01-08 15:36:08 +07:00
|
|
|
return view('backend.pages.report.others', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Form Others',
|
2025-01-08 15:01:42 +07:00
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-01-10 13:38:11 +07:00
|
|
|
'cabang' => $cabangs,
|
|
|
|
|
'regions' => $regions
|
2025-01-08 15:01:42 +07:00
|
|
|
]);
|
2025-01-08 14:12:45 +07:00
|
|
|
}
|
2025-01-11 13:31:44 +07:00
|
|
|
|
|
|
|
|
public function all()
|
|
|
|
|
{
|
2025-07-21 19:47:08 +07:00
|
|
|
$role = auth()->user()->getRoleNames()[0]; // Assuming Spatie Laravel-permission
|
|
|
|
|
$cabangs = collect(); // Initialize as an empty collection
|
|
|
|
|
$regions = collect(); // Initialize as an empty collection
|
2025-01-11 13:31:44 +07:00
|
|
|
|
|
|
|
|
$availableBudget = 0;
|
|
|
|
|
|
2025-05-25 15:14:23 +07:00
|
|
|
$month = strtolower(date('F')); // convert to lowercase for DB compatibility
|
|
|
|
|
$year = (int) date('Y');
|
2025-01-11 13:31:44 +07:00
|
|
|
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'] ?? null;
|
|
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'] ?? null;
|
|
|
|
|
$userId = auth()->user()->id;
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
// Initialize the query for forms with eager loading
|
|
|
|
|
$formsQuery = FormOthers::with([
|
|
|
|
|
'user.region', // Eager load 'region' within 'user'
|
|
|
|
|
'user.cabang', // Eager load 'cabang' within 'user'
|
|
|
|
|
'kategori'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// Apply role-based query logic for initial data
|
2025-01-11 13:31:44 +07:00
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
|
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-07-21 19:47:08 +07:00
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', $cabangs->pluck('id'))->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
|
|
|
|
} else {
|
|
|
|
|
// If no region found for Admin Region/MOM Region, return empty results
|
|
|
|
|
$cabangs = collect();
|
|
|
|
|
$regions = collect();
|
|
|
|
|
$formsQuery->whereRaw('1 = 0'); // Ensure no results are returned
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
} elseif ($role == 'Area Manager Cabang') {
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-07-21 19:47:08 +07:00
|
|
|
$regions = Region::where('id', $cabangs->first()->region_id)->get();
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang_id)->pluck('user_id');
|
|
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
|
|
|
|
} else {
|
|
|
|
|
// If no cabang found for Area Manager, return empty results
|
|
|
|
|
$cabangs = collect();
|
|
|
|
|
$regions = collect();
|
|
|
|
|
$formsQuery->whereRaw('1 = 0'); // Ensure no results are returned
|
|
|
|
|
}
|
|
|
|
|
} elseif ($role == 'Medical Representatif') {
|
|
|
|
|
// For Medical Representative, filter forms by their own user ID
|
|
|
|
|
$formsQuery->where('user_id', $userId);
|
|
|
|
|
// Cabangs and regions might be determined by the user's assigned cabang, or kept empty if not directly relevant to their view
|
|
|
|
|
// If a user is assigned to a specific cabang, you might want to fetch that.
|
|
|
|
|
// For now, let's keep them empty as per your original logic if not explicitly needed.
|
|
|
|
|
$cabangs = collect(); // Or fetch the user's assigned cabang: Cabang::find($cabang_id)
|
|
|
|
|
$regions = collect(); // Or fetch the region of the user's assigned cabang
|
2025-01-11 13:31:44 +07:00
|
|
|
} else {
|
2025-07-21 19:47:08 +07:00
|
|
|
// Default for roles like 'Admin' or others without specific restrictions
|
2025-01-11 13:31:44 +07:00
|
|
|
$cabangs = Cabang::all();
|
|
|
|
|
$regions = Region::all();
|
2025-07-21 19:47:08 +07:00
|
|
|
// No specific user_id filter needed here as it's for all forms
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
// Get all params in URL
|
2025-01-11 13:31:44 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
// Apply additional filters from URL parameters
|
2025-01-11 13:31:44 +07:00
|
|
|
if ($params) {
|
2025-07-21 19:47:08 +07:00
|
|
|
// Filter by region (if parameter exists and no prior role-based region filter was applied for Admin Region/MOM)
|
|
|
|
|
// Or, if it's a general user (not Admin Region/MOM/Area Manager), allow filtering by region param
|
|
|
|
|
if (isset($params['region']) && (!in_array($role, ['Admin Region', 'Marketing Operational Manager Region', 'Area Manager Cabang']) || empty($region_id))) {
|
2025-01-11 13:31:44 +07:00
|
|
|
$region = Region::where('code', $params['region'])->first();
|
|
|
|
|
if ($region) {
|
|
|
|
|
$userIds = UserHasCabang::whereIn('cabang_id', Cabang::where('region_id', $region->id)->pluck('id'))->pluck('user_id')->toArray();
|
2025-07-21 19:47:08 +07:00
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
|
|
|
|
} else {
|
|
|
|
|
// If region param is provided but not found, ensure no results
|
|
|
|
|
$formsQuery->whereRaw('1 = 0');
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
// Filter by cabang (if parameter exists and no prior role-based cabang filter was applied for Area Manager)
|
|
|
|
|
// Or, if it's a general user, allow filtering by cabang param
|
|
|
|
|
if (isset($params['cabang']) && (!in_array($role, ['Area Manager Cabang']) || empty($cabang_id))) {
|
2025-01-11 13:31:44 +07:00
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
|
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id')->toArray();
|
2025-07-21 19:47:08 +07:00
|
|
|
$formsQuery->whereIn('user_id', $userIds);
|
|
|
|
|
|
|
|
|
|
// Ensure lowercase month for BudgetHelper
|
2025-05-25 15:14:23 +07:00
|
|
|
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year);
|
2025-07-21 19:47:08 +07:00
|
|
|
} else {
|
|
|
|
|
// If cabang param is provided but not found, ensure no results
|
|
|
|
|
$formsQuery->whereRaw('1 = 0');
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Filter by date range
|
|
|
|
|
if (isset($params['month']) || isset($params['year'])) {
|
2025-05-25 15:14:23 +07:00
|
|
|
$month = strtolower($params['month'] ?? date('F'));
|
|
|
|
|
$year = (int) ($params['year'] ?? date('Y'));
|
2025-01-11 13:31:44 +07:00
|
|
|
|
|
|
|
|
$startOfMonth = Carbon::parse("first day of $month $year")->startOfDay();
|
|
|
|
|
$endOfMonth = Carbon::parse("last day of $month $year")->endOfDay();
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
$dateColumn = Schema::hasColumn('form_others', 'tanggal') ? 'tanggal' : 'created_at'; // Assuming your forms table is 'form_others'
|
|
|
|
|
$formsQuery->whereBetween($dateColumn, [$startOfMonth, $endOfMonth]);
|
|
|
|
|
|
|
|
|
|
// Recalculate available budget if month/year changed and a cabang filter is present
|
|
|
|
|
if (isset($params['cabang'])) {
|
|
|
|
|
$cabang = Cabang::where('code', $params['cabang'])->first();
|
|
|
|
|
if ($cabang) {
|
|
|
|
|
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year);
|
|
|
|
|
}
|
|
|
|
|
} elseif ($cabang_id) { // If Area Manager Cabang and no specific cabang param, use their assigned cabang
|
|
|
|
|
$cabang = Cabang::find($cabang_id);
|
|
|
|
|
if ($cabang) {
|
|
|
|
|
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, strtolower($month), (int) $year);
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Filter by status
|
|
|
|
|
if (isset($params['status'])) {
|
2025-07-21 19:47:08 +07:00
|
|
|
$formsQuery->where('status', $params['status']);
|
2025-01-11 13:31:44 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-21 19:47:08 +07:00
|
|
|
// Get the forms after all filters have been applied
|
|
|
|
|
// Sort by 'tanggal' if it exists, otherwise by 'created_at'
|
2025-10-12 18:29:07 +07:00
|
|
|
|
|
|
|
|
$tables = [
|
|
|
|
|
'form_others',
|
|
|
|
|
'form_up_country',
|
|
|
|
|
'form_vehicle_running_cost',
|
|
|
|
|
'form_meeting_seminar',
|
|
|
|
|
'form_entertainment_presentation'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$formsQuery = null;
|
|
|
|
|
|
|
|
|
|
foreach ($tables as $table) {
|
|
|
|
|
$query = DB::table($table)
|
|
|
|
|
->selectRaw("
|
|
|
|
|
expense_number,
|
|
|
|
|
'$table' as type,
|
|
|
|
|
user_id,
|
|
|
|
|
total,
|
|
|
|
|
approved_total,
|
|
|
|
|
account_number,
|
|
|
|
|
status,
|
|
|
|
|
created_at
|
|
|
|
|
");
|
|
|
|
|
|
|
|
|
|
$formsQuery = $formsQuery
|
|
|
|
|
? $formsQuery->unionAll($query)
|
|
|
|
|
: $query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$forms = DB::query()
|
|
|
|
|
->fromSub($formsQuery, 'forms')
|
|
|
|
|
->join('admins', 'admins.id', '=', 'forms.user_id')
|
|
|
|
|
->select('forms.*', 'admins.id as admin_id')
|
|
|
|
|
->orderBy('forms.created_at', 'desc')
|
|
|
|
|
->paginate(100);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// inject relasi Admin model ke setiap item
|
|
|
|
|
$forms->getCollection()->transform(function ($item) {
|
|
|
|
|
$item->user = \App\Models\Admin::with(['region', 'rayon.region'])->find($item->admin_id);
|
|
|
|
|
$item->type = ucwords(str_replace('_', ' ', str_replace('form_', '', $item->type)));
|
|
|
|
|
|
|
|
|
|
return $item;
|
|
|
|
|
});
|
2025-07-21 19:47:08 +07:00
|
|
|
|
|
|
|
|
|
2025-01-11 13:31:44 +07:00
|
|
|
return view('backend.pages.report.all', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For All Forms',
|
|
|
|
|
],
|
|
|
|
|
'forms' => $forms,
|
2025-07-21 19:47:08 +07:00
|
|
|
'cabangs' => $cabangs, // Note the plural 'cabangs' for the variable name
|
2025-01-11 13:31:44 +07:00
|
|
|
'regions' => $regions,
|
|
|
|
|
'availableBudget' => $availableBudget
|
|
|
|
|
]);
|
|
|
|
|
}
|
2025-01-14 14:15:32 +07:00
|
|
|
|
|
|
|
|
public function jurnal()
|
|
|
|
|
{
|
|
|
|
|
$role = auth()->user()->getRoleNames()[0];
|
|
|
|
|
$cabangs = [];
|
2025-01-15 14:50:53 +07:00
|
|
|
$regions = [];
|
2025-01-14 14:15:32 +07:00
|
|
|
|
|
|
|
|
if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') {
|
|
|
|
|
$region_id = auth()->user()->getMyCabangAndRegionId()['region'];
|
|
|
|
|
|
|
|
|
|
if ($region_id) {
|
|
|
|
|
$cabangs = Cabang::where('region_id', $region_id)->get();
|
2025-01-15 14:50:53 +07:00
|
|
|
$regions = Region::where('id', $region_id)->get();
|
2025-01-14 14:15:32 +07:00
|
|
|
}
|
|
|
|
|
} else if ($role == 'Area Manager Cabang') {
|
|
|
|
|
$cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang'];
|
|
|
|
|
|
|
|
|
|
if ($cabang_id) {
|
|
|
|
|
$cabangs = Cabang::where('id', $cabang_id)->get();
|
2025-01-15 14:50:53 +07:00
|
|
|
$regions = Region::where('id', $cabangs[0]->region_id)->get();
|
2025-01-14 14:15:32 +07:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$cabangs = Cabang::all();
|
2025-01-15 14:50:53 +07:00
|
|
|
$regions = Region::all();
|
2025-01-14 14:15:32 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return view('backend.pages.report.jurnal', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Jurnal',
|
|
|
|
|
],
|
|
|
|
|
'cabang' => $cabangs,
|
2025-01-15 14:50:53 +07:00
|
|
|
'regions' => $regions
|
2025-01-14 14:15:32 +07:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-05 19:40:38 +07:00
|
|
|
|
|
|
|
|
public function generateJurnal()
|
|
|
|
|
{
|
2025-01-14 14:15:32 +07:00
|
|
|
$params = request()->all();
|
|
|
|
|
|
|
|
|
|
$kategoris = Kategori::all();
|
|
|
|
|
$kategori_bca = Kategori::where('name', 'Cash in Bank BCA')->first();
|
2025-05-05 19:40:38 +07:00
|
|
|
$cabang = Cabang::with('cost')->where('code', $params['cabang'])->firstOrFail();
|
2025-01-15 22:29:07 +07:00
|
|
|
|
2025-01-14 14:15:32 +07:00
|
|
|
$year = $params['year'];
|
2025-05-05 19:40:38 +07:00
|
|
|
$month = $params['month']; // format: angka atau teks bulan (pastikan valid)
|
|
|
|
|
|
|
|
|
|
// Hitung range periode (11 bulan_ini - 10 bulan_depan)
|
|
|
|
|
[$startDate, $endDate] = PeriodeHelper::getPeriodeRange($month, $year);
|
2025-01-14 14:15:32 +07:00
|
|
|
|
2025-05-05 19:40:38 +07:00
|
|
|
// Ambil data terakhir dari log budget
|
|
|
|
|
$budget = BudgetControlLog::where('cabang_id', $cabang->id)
|
|
|
|
|
->where('periode_year', $year)
|
|
|
|
|
->where('periode_month', $month)
|
|
|
|
|
->orderBy('created_at', 'desc')
|
|
|
|
|
->first();
|
2025-03-06 16:24:55 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
$userIds = UserHasCabang::where('cabang_id', $cabang->id)->pluck('user_id');
|
|
|
|
|
|
2025-05-05 19:40:38 +07:00
|
|
|
// Fetch semua forms berdasarkan periode range
|
2025-01-15 22:29:07 +07:00
|
|
|
$forms = [
|
|
|
|
|
'Up Country' => FormUpCountry::whereIn('user_id', $userIds)
|
2025-06-27 16:19:28 +07:00
|
|
|
->whereBetween('final_approved_at', [$startDate, $endDate])
|
2025-05-05 23:19:22 +07:00
|
|
|
->whereIn('status', ['Approved', 'Closed'])
|
2025-01-15 22:29:07 +07:00
|
|
|
->get(),
|
2025-05-05 19:40:38 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
'Vehicle Running Cost' => FormVehicleRunningCost::whereIn('user_id', $userIds)
|
2025-06-27 16:19:28 +07:00
|
|
|
->whereBetween('final_approved_at', [$startDate, $endDate])
|
2025-05-05 23:19:22 +07:00
|
|
|
->whereIn('status', ['Approved', 'Closed'])
|
2025-01-15 22:29:07 +07:00
|
|
|
->get(),
|
2025-05-05 19:40:38 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
'Entertainment' => FormEntertaimentPresentation::whereIn('user_id', $userIds)
|
2025-06-27 16:19:28 +07:00
|
|
|
->whereBetween('final_approved_at', [$startDate, $endDate])
|
2025-05-05 23:19:22 +07:00
|
|
|
->whereIn('status', ['Approved', 'Closed'])
|
2025-01-15 22:29:07 +07:00
|
|
|
->get(),
|
2025-05-05 19:40:38 +07:00
|
|
|
|
2025-01-15 22:29:07 +07:00
|
|
|
'Meeting / Seminar' => FormMeetingSeminar::whereIn('user_id', $userIds)
|
2025-06-27 16:19:28 +07:00
|
|
|
->whereBetween('final_approved_at', [$startDate, $endDate])
|
2025-05-05 23:19:22 +07:00
|
|
|
->whereIn('status', ['Approved', 'Closed'])
|
2025-01-15 22:29:07 +07:00
|
|
|
->get(),
|
|
|
|
|
];
|
|
|
|
|
|
2025-05-05 19:40:38 +07:00
|
|
|
// Forms "Others" dikelompokkan berdasarkan kategori
|
2025-01-15 22:29:07 +07:00
|
|
|
$otherForms = FormOthers::whereIn('user_id', $userIds)
|
2025-06-27 16:19:28 +07:00
|
|
|
->whereBetween('final_approved_at', [$startDate, $endDate])
|
2025-05-05 23:19:22 +07:00
|
|
|
->whereIn('status', ['Approved', 'Closed'])
|
2025-01-15 22:29:07 +07:00
|
|
|
->get();
|
|
|
|
|
|
2025-05-05 19:40:38 +07:00
|
|
|
// Total nominal per kategori
|
2025-01-15 22:29:07 +07:00
|
|
|
$nominals = [];
|
|
|
|
|
foreach ($kategoris as $item) {
|
|
|
|
|
if (isset($forms[$item->name])) {
|
|
|
|
|
$nominals[$item->id] = $forms[$item->name]->sum('approved_total');
|
|
|
|
|
} else {
|
|
|
|
|
$nominals[$item->id] = $otherForms->where('kategori_id', $item->id)->sum('approved_total');
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-14 14:15:32 +07:00
|
|
|
|
|
|
|
|
return view('backend.pages.report.generate_jurnal', [
|
|
|
|
|
'pageInfo' => [
|
|
|
|
|
'title' => 'Generate Reports For Jurnal',
|
|
|
|
|
],
|
|
|
|
|
'kategori' => $kategoris,
|
|
|
|
|
'cabang' => $cabang,
|
|
|
|
|
'year' => $year,
|
|
|
|
|
'month' => $month,
|
2025-01-15 22:29:07 +07:00
|
|
|
'kategori_bca' => $kategori_bca,
|
|
|
|
|
'nominals' => $nominals,
|
2025-05-05 19:40:38 +07:00
|
|
|
'budget' => $budget,
|
2025-01-14 14:15:32 +07:00
|
|
|
]);
|
|
|
|
|
}
|
2025-01-08 14:12:45 +07:00
|
|
|
}
|