update revisi
This commit is contained in:
@@ -45,14 +45,10 @@ class FormUpCountryController extends Controller
|
||||
|
||||
// Tentukan periode
|
||||
if ($now->day >= $startDay) {
|
||||
// Mulai dari tanggal START bulan ini
|
||||
$startDate = Carbon::create($now->year, $now->month, $startDay)->startOfDay();
|
||||
// Sampai tanggal CLOSING bulan depan
|
||||
$closingDate = Carbon::create($now->copy()->addMonth()->year, $now->copy()->addMonth()->month, $closingDay)->endOfDay();
|
||||
} else {
|
||||
// Mulai dari tanggal START bulan lalu
|
||||
$startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay)->startOfDay();
|
||||
// Sampai tanggal CLOSING bulan ini
|
||||
$closingDate = Carbon::create($now->year, $now->month, $closingDay)->endOfDay();
|
||||
}
|
||||
|
||||
@@ -77,20 +73,25 @@ class FormUpCountryController extends Controller
|
||||
}
|
||||
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 = $startDate->month;
|
||||
$periodeYear = $startDate->year;
|
||||
$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 = $startDate->month;
|
||||
$periodeYear = $startDate->year;
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear);
|
||||
}
|
||||
else {
|
||||
$forms = $forms;
|
||||
}
|
||||
@@ -144,7 +145,6 @@ class FormUpCountryController extends Controller
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['forms.country.create']);
|
||||
|
||||
$request->validate([
|
||||
'rayon_id' => 'required|exists:rayon,id',
|
||||
'tanggal' => 'required',
|
||||
@@ -163,87 +163,83 @@ class FormUpCountryController extends Controller
|
||||
$tanggal = Carbon::parse($request->tanggal);
|
||||
$startDay = (int) env('STARTING_DATE', 11);
|
||||
$closingDay = (int) env('CLOSING_DATE', 10);
|
||||
|
||||
// Ambil tanggal sekarang untuk tentukan periode berjalan
|
||||
$now = Carbon::now();
|
||||
|
||||
// Tentukan periode aktif saat ini
|
||||
if ($now->day >= $startDay) {
|
||||
// Periode berjalan dari bulan ini sampai bulan depan
|
||||
$startDate = Carbon::create($now->year, $now->month, $startDay);
|
||||
$closingDate = Carbon::create($now->copy()->addMonth()->year, $now->copy()->addMonth()->month, $closingDay);
|
||||
} else {
|
||||
// Periode berjalan dari bulan lalu sampai bulan ini
|
||||
$startDate = Carbon::create($now->copy()->subMonth()->year, $now->copy()->subMonth()->month, $startDay);
|
||||
$closingDate = Carbon::create($now->year, $now->month, $closingDay);
|
||||
}
|
||||
|
||||
// Validasi apakah tanggal input berada di periode aktif
|
||||
if ($tanggal->lt($startDate) || $tanggal->gt($closingDate)) {
|
||||
session()->flash('error', "Gagal, tanggal tidak berada dalam periode input: {$startDate->format('d M')} - {$closingDate->format('d M')}");
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
$cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
|
||||
$region = Region::where('id', $cabang->region_id)->first();
|
||||
$cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()?->cabang;
|
||||
if (!$cabang) {
|
||||
session()->flash('error', 'Cabang tidak ditemukan.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
$region = Region::find($cabang->region_id);
|
||||
$kategori = Kategori::where('name', 'Up Country')->first();
|
||||
|
||||
// Hitung periode budget dari tanggal input
|
||||
if ($tanggal->day >= $startDay) {
|
||||
$periodeDate = Carbon::create($tanggal->year, $tanggal->month, $startDay);
|
||||
} else {
|
||||
$periodeDate = Carbon::create($tanggal->copy()->subMonth()->year, $tanggal->copy()->subMonth()->month, $startDay);
|
||||
}
|
||||
|
||||
$periodeMonth = strtolower($periodeDate->format('F'));
|
||||
$periodeYear = (int) $periodeDate->format('Y');
|
||||
|
||||
// Upload file
|
||||
$filePaths = [];
|
||||
$folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry';
|
||||
|
||||
if ($request->hasFile('bukti_allowance')) {
|
||||
$bukti_allowance = $request->file('bukti_allowance');
|
||||
$filename = Str::uuid() . '.' . $bukti_allowance->extension();
|
||||
|
||||
$filePaths['bukti_allowance'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_allowance->getContent(),
|
||||
$filename
|
||||
);
|
||||
|
||||
if ($request->hasFile('bukti_allowance')) {
|
||||
$bukti = $request->file('bukti_allowance');
|
||||
$filename = Str::uuid() . '.' . $bukti->extension();
|
||||
$filePaths['bukti_allowance'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $bukti->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_transport_dalkot')) {
|
||||
$bukti_transport_dalkot = $request->file('bukti_transport_dalkot');
|
||||
$filename = Str::uuid() . '.' . $bukti_transport_dalkot->extension();
|
||||
|
||||
$filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_transport_dalkot->getContent(),
|
||||
$filename
|
||||
);
|
||||
$bukti = $request->file('bukti_transport_dalkot');
|
||||
$filename = Str::uuid() . '.' . $bukti->extension();
|
||||
$filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $bukti->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_transport_ankot')) {
|
||||
$bukti_transport_ankot = $request->file('bukti_transport_ankot');
|
||||
$filename = Str::uuid() . '.' . $bukti_transport_ankot->extension();
|
||||
|
||||
$filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_transport_ankot->getContent(),
|
||||
$filename
|
||||
);
|
||||
$bukti = $request->file('bukti_transport_ankot');
|
||||
$filename = Str::uuid() . '.' . $bukti->extension();
|
||||
$filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $bukti->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_hotel')) {
|
||||
$bukti_hotel = $request->file('bukti_hotel');
|
||||
$filename = Str::uuid() . '.' . $bukti_hotel->extension();
|
||||
|
||||
$filePaths['bukti_hotel'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_hotel->getContent(),
|
||||
$filename
|
||||
);
|
||||
$bukti = $request->file('bukti_hotel');
|
||||
$filename = Str::uuid() . '.' . $bukti->extension();
|
||||
$filePaths['bukti_hotel'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $bukti->getContent(), $filename);
|
||||
}
|
||||
|
||||
// Generate sequence number and expense number
|
||||
$sequence_number = FormUpCountry::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . '%')->count() + 1;
|
||||
// Generate expense number
|
||||
$sequence_number = FormUpCountry::withTrashed()
|
||||
->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . '%')
|
||||
->count() + 1;
|
||||
|
||||
$formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
|
||||
$expense_number = $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . $formatted_sequence_number;
|
||||
|
||||
// Hitung total nominal
|
||||
$data_nominal = [
|
||||
'allowance' => $request->allowance ?? 0,
|
||||
'transport_dalkot' => $request->transport_dalkot ?? 0,
|
||||
@@ -251,8 +247,11 @@ class FormUpCountryController extends Controller
|
||||
'hotel' => $request->hotel ?? 0,
|
||||
];
|
||||
|
||||
// Check if the total nominal exceeds the available budget
|
||||
if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget($cabang->id)) {
|
||||
$totalNominal = array_sum($data_nominal);
|
||||
|
||||
// Validasi budget berdasarkan periode
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, $periodeMonth, $periodeYear);
|
||||
if(array_sum($data_nominal) > $availableBudget) {
|
||||
session()->flash('error', 'Alokasi budget bulanan cabang tidak mencukupi,silahkan ajukan pada periode expense berikutnya');
|
||||
return redirect()->back();
|
||||
}
|
||||
@@ -397,79 +396,77 @@ class FormUpCountryController extends Controller
|
||||
'bukti_hotel' => ['nullable', 'file', 'max:51200'],
|
||||
]);
|
||||
|
||||
$form = FormUpCountry::findOrfail($id);
|
||||
if (($form->status != 'On Progress' && $form->status != 'Rejected') && $role == 'Medical Representatif') {
|
||||
$form = FormUpCountry::findOrFail($id);
|
||||
if (($form->status !== 'On Progress' && $form->status !== 'Rejected') && $role === 'Medical Representatif') {
|
||||
session()->flash('error', 'You cannot edit this form because it has been approved or closed.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
$cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang;
|
||||
$region = Region::where('id', $cabang->region_id)->first();
|
||||
$cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()?->cabang;
|
||||
if (!$cabang) {
|
||||
session()->flash('error', 'Cabang tidak ditemukan.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
$region = Region::find($cabang->region_id);
|
||||
$kategori = Kategori::where('name', 'Up Country')->first();
|
||||
|
||||
// Hitung periode dari tanggal input
|
||||
$tanggal = Carbon::parse($request->tanggal);
|
||||
$startDay = (int) env('STARTING_DATE', 11);
|
||||
if ($tanggal->day >= $startDay) {
|
||||
$periodeDate = Carbon::create($tanggal->year, $tanggal->month, $startDay);
|
||||
} else {
|
||||
$periodeDate = Carbon::create($tanggal->copy()->subMonth()->year, $tanggal->copy()->subMonth()->month, $startDay);
|
||||
}
|
||||
|
||||
$periodeMonth = strtolower($periodeDate->format('F'));
|
||||
$periodeYear = (int) $periodeDate->format('Y');
|
||||
|
||||
// Upload bukti file
|
||||
$filePaths = [];
|
||||
$folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry';
|
||||
|
||||
if ($request->hasFile('bukti_allowance')) {
|
||||
$bukti_allowance = $request->file('bukti_allowance');
|
||||
$filename = Str::uuid() . '.' . $bukti_allowance->extension();
|
||||
|
||||
$filePaths['bukti_allowance'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_allowance->getContent(),
|
||||
$filename
|
||||
);
|
||||
|
||||
$file = $request->file('bukti_allowance');
|
||||
$filename = Str::uuid() . '.' . $file->extension();
|
||||
$filePaths['bukti_allowance'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_transport_dalkot')) {
|
||||
$bukti_transport_dalkot = $request->file('bukti_transport_dalkot');
|
||||
$filename = Str::uuid() . '.' . $bukti_transport_dalkot->extension();
|
||||
|
||||
$filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_transport_dalkot->getContent(),
|
||||
$filename
|
||||
);
|
||||
$file = $request->file('bukti_transport_dalkot');
|
||||
$filename = Str::uuid() . '.' . $file->extension();
|
||||
$filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_transport_ankot')) {
|
||||
$bukti_transport_ankot = $request->file('bukti_transport_ankot');
|
||||
$filename = Str::uuid() . '.' . $bukti_transport_ankot->extension();
|
||||
|
||||
$filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_transport_ankot->getContent(),
|
||||
$filename
|
||||
);
|
||||
$file = $request->file('bukti_transport_ankot');
|
||||
$filename = Str::uuid() . '.' . $file->extension();
|
||||
$filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename);
|
||||
}
|
||||
|
||||
if ($request->hasFile('bukti_hotel')) {
|
||||
$bukti_hotel = $request->file('bukti_hotel');
|
||||
$filename = Str::uuid() . '.' . $bukti_hotel->extension();
|
||||
|
||||
$filePaths['bukti_hotel'] = $folderPath . '/' . $filename;
|
||||
|
||||
NextCloudHelper::uploadFile(
|
||||
$folderPath,
|
||||
$bukti_hotel->getContent(),
|
||||
$filename
|
||||
);
|
||||
$file = $request->file('bukti_hotel');
|
||||
$filename = Str::uuid() . '.' . $file->extension();
|
||||
$filePaths['bukti_hotel'] = $folderPath . '/' . $filename;
|
||||
NextCloudHelper::uploadFile($folderPath, $file->getContent(), $filename);
|
||||
}
|
||||
|
||||
// Hitung total nominal
|
||||
$data_nominal = [
|
||||
'allowance' => $request->allowance ?? 0,
|
||||
'transport_dalkot' => $request->transport_dalkot ?? 0,
|
||||
'transport_ankot' => $request->transport_ankot ?? 0,
|
||||
'hotel' => $request->hotel ?? 0,
|
||||
];
|
||||
$totalNominal = array_sum($data_nominal);
|
||||
|
||||
// Check if the total nominal exceeds the available budget
|
||||
$cabang_id = UserHasCabang::where('user_id', $form->user_id)->first()->cabang_id;
|
||||
if(array_sum($data_nominal) > BudgetHelper::getAvailableBudget($cabang_id)) {
|
||||
// Validasi budget dengan periode
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($cabang->id, $periodeMonth, $periodeYear);
|
||||
if(array_sum($data_nominal) > $availableBudget) {
|
||||
session()->flash('error', 'The total nominal exceeds the available budget.');
|
||||
return redirect()->back();
|
||||
}
|
||||
@@ -696,16 +693,35 @@ class FormUpCountryController extends Controller
|
||||
public function finalApprove($id)
|
||||
{
|
||||
$this->checkAuthorization(auth()->user(), ['final_approval.approve']);
|
||||
$form = FormUpCountry::findOrFail($id);
|
||||
|
||||
$form = FormUpCountry::findOrfail($id);
|
||||
if($form->approved_at == null || $form->approved2_at == null) {
|
||||
if ($form->approved_at === null || $form->approved2_at === null) {
|
||||
session()->flash('error', 'Form must be approved by both approvers before final approval.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Check if the total nominal exceeds the available budget
|
||||
$cabang_id = UserHasCabang::where('user_id', $form->user_id)->first()->cabang_id;
|
||||
if($form->approved_total > BudgetHelper::getAvailableBudget($cabang_id)) {
|
||||
// Ambil cabang_id dari user yang mengisi form
|
||||
$cabang_id = UserHasCabang::where('user_id', $form->user_id)->first()?->cabang_id;
|
||||
if (!$cabang_id) {
|
||||
session()->flash('error', 'Data cabang tidak ditemukan.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
// Hitung periode berdasarkan tanggal form
|
||||
$tanggal = Carbon::parse($form->tanggal);
|
||||
$startDay = (int) env('STARTING_DATE', 11);
|
||||
if ($tanggal->day >= $startDay) {
|
||||
$periodeDate = Carbon::create($tanggal->year, $tanggal->month, $startDay);
|
||||
} else {
|
||||
$periodeDate = Carbon::create($tanggal->copy()->subMonth()->year, $tanggal->copy()->subMonth()->month, $startDay);
|
||||
}
|
||||
|
||||
$periodeMonth = strtolower($periodeDate->format('F'));
|
||||
$periodeYear = (int) $periodeDate->format('Y');
|
||||
|
||||
// Ambil sisa budget sesuai periode
|
||||
$availableBudget = BudgetHelper::getAvailableBudget($cabang_id, $periodeMonth, $periodeYear);
|
||||
if($form->approved_total > $availableBudget) {
|
||||
session()->flash('error', 'Budget cabang untuk periode ini tidak mencukupi, silahkan ajukan pada periode expense berikutnya');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user