diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 7706353..62cb89a 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -40,66 +40,66 @@ class FormUpCountryController extends Controller $startDay = (int) env('STARTING_DATE', 11); $closingDay = (int) env('CLOSING_DATE', 10); - // Referensi waktu sekarang + // Current time reference $now = Carbon::now(); - // Tentukan periode + // Determine the period if ($now->day >= $startDay) { - $startDate = Carbon::create($now->year, $now->month, $startDay)->startOfDay(); - $closingDate = Carbon::create($now->copy()->addMonth()->year, $now->copy()->addMonth()->month, $closingDay)->endOfDay(); + $currentPeriodStartDate = Carbon::create($now->year, $now->month, $startDay)->startOfDay(); + $currentPeriodClosingDate = Carbon::create($now->copy()->addMonth()->year, $now->copy()->addMonth()->month, $closingDay)->endOfDay(); } else { - $startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay(); - $closingDate = Carbon::create($now->year, $now->month, $closingDay)->endOfDay(); + $currentPeriodStartDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay(); + $currentPeriodClosingDate = Carbon::create($now->year, $now->month, $closingDay)->endOfDay(); } - $forms = FormUpCountry::whereBetween('tanggal', [$startDate, $closingDate]) - ->orderBy('tanggal', 'desc') - ->with(['rayon', 'user']) - ->get(); + // Calculate the actual start date for data retrieval (1 month before currentPeriodStartDate) + $dataRetrievalStartDate = $currentPeriodStartDate->copy()->subMonth()->startOfDay(); + + $forms = FormUpCountry::whereBetween('tanggal', [$dataRetrievalStartDate, $currentPeriodClosingDate]) + ->orderBy('tanggal', 'desc') + ->with(['rayon', 'user']) + ->get(); $availableBudget = null; - $periodeMonth = strtolower($startDate->format('F')); - $periodeYear = (int) $startDate->format('Y'); + $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 ($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); - })->get(); + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->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(); + $userIds = $users->pluck('user_id')->toArray(); + $forms = $forms->whereIn('user_id', $userIds); + + $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); + } + } else if ($role == 'Medical Representatif') { + $forms = $forms->where('user_id', auth()->user()->id); + $cabang_id = UserHasCabang::where('user_id', auth()->user()->id)->first()->cabang_id; - $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(); - $userIds = $users->pluck('user_id')->toArray(); - $forms = $forms->whereIn('user_id', $userIds); - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); - } - } - else if ($role == 'Medical Representatif') { - $forms = $forms->where('user_id', auth()->user()->id); - $cabang_id = UserHasCabang::where('user_id', auth()->user()->id)->first()->cabang_id; - - $availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear); - } - else { - $forms = $forms; + } else { + $forms = $forms; } session()->put('redirect_url', route('forms.up-country')); - return view('backend.pages.forms.upcountry.index', [ - 'forms' => $forms, - 'availableBudget' => $availableBudget - ]); - } + return view('backend.pages.forms.upcountry.index', [ + 'forms' => $forms, + 'availableBudget' => $availableBudget + ]); + } public function detail($id) { @@ -110,6 +110,7 @@ class FormUpCountryController extends Controller $form->bukti_transport_dalkot = $form->bukti_transport_dalkot ? NextCloudHelper::getFileUrl($form->bukti_transport_dalkot) : null; $form->bukti_transport_ankot = $form->bukti_transport_ankot ? NextCloudHelper::getFileUrl($form->bukti_transport_ankot) : null; $form->bukti_hotel = $form->bukti_hotel ? NextCloudHelper::getFileUrl($form->bukti_hotel) : null; + $form->uc_plan = $form->uc_plan ? NextCloudHelper::getFileUrl($form->uc_plan) : null; return response()->json($form); } @@ -123,6 +124,7 @@ class FormUpCountryController extends Controller $form->bukti_transport_dalkot = $form->bukti_transport_dalkot ? NextCloudHelper::getFileUrl($form->bukti_transport_dalkot) : null; $form->bukti_transport_ankot = $form->bukti_transport_ankot ? NextCloudHelper::getFileUrl($form->bukti_transport_ankot) : null; $form->bukti_hotel = $form->bukti_hotel ? NextCloudHelper::getFileUrl($form->bukti_hotel) : null; + $form->uc_plan = $form->uc_plan ? NextCloudHelper::getFileUrl($form->uc_plan) : null; return view('backend.pages.forms.upcountry.view', [ 'form' => $form, @@ -156,6 +158,7 @@ class FormUpCountryController extends Controller 'bukti_transport_dalkot' => ['nullable', 'file', 'max:51200'], 'bukti_transport_ankot' => ['nullable', 'file', 'max:51200'], 'bukti_hotel' => ['nullable', 'file', 'max:51200'], + 'uc_plan' => 'nullable|file|max:51200', ]); $tanggal = Carbon::parse($request->tanggal); @@ -229,6 +232,13 @@ class FormUpCountryController extends Controller NextCloudHelper::uploadFile($folderPath, $bukti->getContent(), $filename); } + if ($request->hasFile('uc_plan')) { + $ucPlan = $request->file('uc_plan'); + $filename = Str::uuid() . '.' . $ucPlan->extension(); + $filePaths['uc_plan'] = $folderPath . '/' . $filename; + NextCloudHelper::uploadFile($folderPath, $ucPlan->getContent(), $filename); + } + // Generate expense number $sequence_number = FormUpCountry::withTrashed() ->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . '%') @@ -271,6 +281,7 @@ class FormUpCountryController extends Controller 'bukti_transport_dalkot' => $filePaths['bukti_transport_dalkot'] ?? null, 'bukti_transport_ankot' => $filePaths['bukti_transport_ankot'] ?? null, 'bukti_hotel' => $filePaths['bukti_hotel'] ?? null, + 'uc_plan' => $filePaths['uc_plan'] ?? null, 'account_number' => $kategori->account_number, 'status' => 'On Progress', ]); @@ -355,7 +366,7 @@ class FormUpCountryController extends Controller return redirect()->back(); } - public function edit($id) + public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.country.edit']); $role = auth()->user()->getRoleNames()[0]; @@ -392,6 +403,7 @@ class FormUpCountryController extends Controller 'bukti_transport_dalkot' => ['nullable', 'file', 'max:51200'], 'bukti_transport_ankot' => ['nullable', 'file', 'max:51200'], 'bukti_hotel' => ['nullable', 'file', 'max:51200'], + 'uc_plan' => 'nullable|file|max:51200', ]); $form = FormUpCountry::findOrFail($id); @@ -453,6 +465,13 @@ class FormUpCountryController extends Controller NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename); } + if ($request->hasFile('uc_plan')) { + $file = $request->file('uc_plan'); + $filename = Str::uuid() . '.' . $file->extension(); + $filePaths['uc_plan'] = $folderPath . '/' . $filename; + NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename); + } + // Hitung total nominal $data_nominal = [ 'allowance' => $request->allowance ?? 0, @@ -484,6 +503,7 @@ class FormUpCountryController extends Controller 'bukti_transport_dalkot' => $filePaths['bukti_transport_dalkot'] ?? $form->bukti_transport_dalkot, 'bukti_transport_ankot' => $filePaths['bukti_transport_ankot'] ?? $form->bukti_transport_ankot, 'bukti_hotel' => $filePaths['bukti_hotel'] ?? $form->bukti_hotel, + 'uc_plan' => $filePaths['uc_plan'] ?? $form->uc_plan, 'account_number' => $kategori->account_number, ]); diff --git a/app/Models/FormUpCountry.php b/app/Models/FormUpCountry.php index f88a034..e4b49c9 100644 --- a/app/Models/FormUpCountry.php +++ b/app/Models/FormUpCountry.php @@ -31,6 +31,7 @@ class FormUpCountry extends Model 'bukti_transport_dalkot', 'bukti_transport_ankot', 'bukti_hotel', + 'uc_plan', 'account_number', 'status', 'approved_at', diff --git a/database/migrations/2025_06_18_114326_add_uc_plan_to_forms_up_country.php b/database/migrations/2025_06_18_114326_add_uc_plan_to_forms_up_country.php new file mode 100644 index 0000000..8834da7 --- /dev/null +++ b/database/migrations/2025_06_18_114326_add_uc_plan_to_forms_up_country.php @@ -0,0 +1,28 @@ +string('uc_plan')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_up_country', function (Blueprint $table) { + $table->dropColumn('uc_plan'); + }); + } +}; diff --git a/resources/views/backend/pages/forms/upcountry/create.blade.php b/resources/views/backend/pages/forms/upcountry/create.blade.php index 8c49223..8bc0616 100644 --- a/resources/views/backend/pages/forms/upcountry/create.blade.php +++ b/resources/views/backend/pages/forms/upcountry/create.blade.php @@ -107,6 +107,13 @@ +
Please select the items you want to approve:
Please select the items you want to approve: