feat: update various controllers to return back instead of redirecting to index routes; add payroll adjustment and payroll controllers

This commit is contained in:
Yoga Pangestu 2026-08-08 14:18:04 +07:00
parent 6627422655
commit 48c031a86f
16 changed files with 64 additions and 119 deletions

View File

@ -36,7 +36,7 @@ public function updateSystem(UpdateSystemRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengaturan sistem berhasil diperbarui.']);
return to_route('admin.settings.index');
return back();
}
public function updateHomepage(UpdateHomepageRequest $request): RedirectResponse
@ -45,7 +45,7 @@ public function updateHomepage(UpdateHomepageRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengaturan homepage berhasil diperbarui.']);
return to_route('admin.settings.index');
return back();
}
public function updateSocialMedia(UpdateSocialMediaRequest $request): RedirectResponse
@ -54,7 +54,7 @@ public function updateSocialMedia(UpdateSocialMediaRequest $request): RedirectRe
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengaturan media sosial berhasil diperbarui.']);
return to_route('admin.settings.index');
return back();
}
public function updateMarketplace(UpdateMarketplaceRequest $request): RedirectResponse
@ -63,7 +63,7 @@ public function updateMarketplace(UpdateMarketplaceRequest $request): RedirectRe
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengaturan marketplace berhasil diperbarui.']);
return to_route('admin.settings.index');
return back();
}
public function updateHR(UpdateHRRequest $request): RedirectResponse
@ -72,6 +72,6 @@ public function updateHR(UpdateHRRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Pengaturan HR berhasil diperbarui.']);
return to_route('admin.settings.index');
return back();
}
}

View File

@ -20,10 +20,8 @@ public function __construct(
public function index(PaginatedRequest $request): Response
{
$cashAccount = $this->service->get();
return Inertia::render('admin/finance/cash-account/index', [
'cashAccount' => $cashAccount,
'cashAccount' => $this->service->get(),
'transactions' => $this->service->paginatedTransactions(
...$request->validatedWithDefaults(),
filters: $request->only(['type']),

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Admin\Finance;
namespace App\Http\Controllers\Admin\Finance\Payroll;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Finance\PayrollAdjustmentRequest;

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Admin\Finance;
namespace App\Http\Controllers\Admin\Finance\Payroll;
use App\Http\Controllers\Controller;
use App\Models\Payroll;

View File

@ -1,8 +1,7 @@
<?php
namespace App\Http\Controllers\Admin\Finance;
namespace App\Http\Controllers\Admin\Finance\Payroll;
use App\Enums\PayrollPeriodStatus;
use App\Http\Controllers\Controller;
use App\Http\Requests\PaginatedRequest;
use App\Models\PayrollPeriod;
@ -26,22 +25,15 @@ public function index(PaginatedRequest $request): Response
public function current(): RedirectResponse
{
$now = now();
$period = PayrollPeriod::firstOrCreate(
['year' => $now->year, 'month' => $now->month],
['status' => PayrollPeriodStatus::OPEN]
);
$period = $this->service->getCurrentOrCreate();
return to_route('admin.finance.payroll-periods.show', ['payroll_period' => $period->id]);
}
public function show(PayrollPeriod $payrollPeriod): Response
{
$period = $this->service->getDetail($payrollPeriod);
return Inertia::render('admin/finance/payroll-period/show', [
'payrollPeriod' => $period,
'payrollPeriod' => $this->service->getDetail($payrollPeriod),
]);
}

View File

@ -6,7 +6,6 @@
use App\Http\Requests\Admin\HR\AttendanceRequest;
use App\Models\Attendance;
use App\Services\Admin\HR\AttendanceService;
use App\Settings\HRSettings;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Inertia\Inertia;
@ -22,44 +21,9 @@ public function index(Request $request): Response
{
$year = $request->integer('year', now()->year);
$month = $request->integer('month', now()->month);
$hrSettings = app(HRSettings::class);
$user = auth()->user();
$isAdmin = $user->hasAnyRole(['developer', 'owner']);
if ($isAdmin) {
return Inertia::render('admin/hr/attendance/index', [
'attendances' => $this->service->getByMonth($year, $month),
'leaves' => $this->service->getLeavesByMonth($year, $month),
'employees' => $this->service->getAllEmployees(),
'todayAttendance' => null,
'currentYear' => $year,
'currentMonth' => $month,
'monthStats' => $this->service->getMonthStats($year, $month),
'hrSettings' => [
'scheduled_check_in_time' => $hrSettings->scheduled_check_in_time,
'scheduled_check_out_time' => $hrSettings->scheduled_check_out_time,
],
'isAdmin' => true,
]);
}
$employeeId = $user->employee?->id;
$isOnLeave = $this->service->isOnLeave($user);
return Inertia::render('admin/hr/attendance/index', [
'attendances' => $this->service->getByMonth($year, $month, $employeeId),
'leaves' => $this->service->getLeavesByMonth($year, $month, $employeeId),
'todayAttendance' => $this->service->getToday(),
'currentYear' => $year,
'currentMonth' => $month,
'monthStats' => $this->service->getMonthStats($year, $month, $employeeId),
'hrSettings' => [
'scheduled_check_in_time' => $hrSettings->scheduled_check_in_time,
'scheduled_check_out_time' => $hrSettings->scheduled_check_out_time,
],
'isOnLeave' => $isOnLeave,
'canCheckIn' => $user->employee !== null,
'isAdmin' => false,
...$this->service->getIndexData($year, $month),
]);
}

View File

@ -7,15 +7,16 @@
use App\Http\Requests\PaginatedRequest;
use App\Models\User;
use App\Services\Admin\HR\EmployeeService;
use App\Services\Admin\Settings\RoleService;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\Permission\Models\Role;
class EmployeeController extends Controller
{
public function __construct(
private EmployeeService $service
private EmployeeService $service,
private RoleService $roleService,
) {}
public function index(PaginatedRequest $request): Response
@ -32,14 +33,8 @@ public function index(PaginatedRequest $request): Response
public function create(): Response
{
$user = auth()->user();
return Inertia::render('admin/hr/employee/create', [
'roles' => $this->service->canViewAll()
? Role::where('name', '!=', 'Developer')
->when($this->service->shouldHideAdminBahanBaku(), fn ($q) => $q->where('name', '!=', 'admin-bahan-baku'))
->get(['id', 'name'])
: Role::where('name', '=', $user->roles->first()?->name)->get(['id', 'name']),
'roles' => $this->roleService->getForEmployee(),
'canViewAll' => $this->service->canViewAll(),
]);
}
@ -59,9 +54,7 @@ public function edit(User $user): Response
return Inertia::render('admin/hr/employee/edit', [
'employee' => $user,
'roles' => Role::where('name', '!=', 'Developer')
->when($this->service->shouldHideAdminBahanBaku(), fn ($q) => $q->where('name', '!=', 'admin-bahan-baku'))
->get(['id', 'name']),
'roles' => $this->roleService->getForEmployee(),
'canViewAll' => $this->service->canViewAll(),
]);
}
@ -91,7 +84,7 @@ public function toggleActive(User $user): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => "Pegawai berhasil {$status}."]);
return to_route('admin.hr.employees.index');
return back();
}
public function resetPassword(User $user): RedirectResponse

View File

@ -30,7 +30,7 @@ public function store(CategoryRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Kategori berhasil ditambahkan.']);
return to_route('admin.master.categories.index');
return back();
}
public function update(CategoryRequest $request, Category $category): RedirectResponse
@ -39,7 +39,7 @@ public function update(CategoryRequest $request, Category $category): RedirectRe
Inertia::flash('toast', ['type' => 'success', 'message' => 'Kategori berhasil diperbarui.']);
return to_route('admin.master.categories.index');
return back();
}
public function destroy(Category $category): RedirectResponse
@ -48,6 +48,6 @@ public function destroy(Category $category): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Kategori berhasil dihapus.']);
return to_route('admin.master.categories.index');
return back();
}
}

View File

@ -30,7 +30,7 @@ public function store(CustomerRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Customer berhasil ditambahkan.']);
return to_route('admin.master.customers.index');
return back();
}
public function update(CustomerRequest $request, Customer $customer): RedirectResponse
@ -39,7 +39,7 @@ public function update(CustomerRequest $request, Customer $customer): RedirectRe
Inertia::flash('toast', ['type' => 'success', 'message' => 'Customer berhasil diperbarui.']);
return to_route('admin.master.customers.index');
return back();
}
public function destroy(Customer $customer): RedirectResponse
@ -48,6 +48,6 @@ public function destroy(Customer $customer): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Customer berhasil dihapus.']);
return to_route('admin.master.customers.index');
return back();
}
}

View File

@ -84,7 +84,7 @@ public function toggleStatus(Product $product): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => "Status produk berhasil diubah menjadi {$status->label()}."]);
return to_route('admin.master.products.index');
return back();
}
public function approve(Product $product): RedirectResponse
@ -93,7 +93,7 @@ public function approve(Product $product): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Produk berhasil disetujui.']);
return to_route('admin.master.products.index');
return back();
}
public function reject(Product $product): RedirectResponse
@ -103,7 +103,7 @@ public function reject(Product $product): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Produk berhasil ditolak.']);
return to_route('admin.master.products.index');
return back();
}
public function resubmit(Product $product): RedirectResponse
@ -112,6 +112,6 @@ public function resubmit(Product $product): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Produk berhasil diajukan ulang.']);
return to_route('admin.master.products.index');
return back();
}
}

View File

@ -18,8 +18,6 @@ public function __construct(
public function index(StockMutationRequest $request, Product $product, ProductVariant $variant): Response
{
$perPage = $request->validatedWithDefaults()['perPage'];
return Inertia::render('admin/master/product/variant/stock-mutations', [
'product' => [
'id' => $product->id,
@ -29,7 +27,7 @@ public function index(StockMutationRequest $request, Product $product, ProductVa
'id' => $variant->id,
'name' => $variant->name,
],
'mutations' => $this->service->paginated($variant, $perPage),
'mutations' => $this->service->paginated($variant, ...$request->validatedWithDefaults()),
]);
}
}

View File

@ -77,6 +77,6 @@ public function toggleStatus(RawMaterial $rawMaterial): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => "Status bahan baku berhasil diubah menjadi {$status}."]);
return to_route('admin.master.raw-materials.index');
return back();
}
}

View File

@ -30,7 +30,7 @@ public function store(SupplierRequest $request): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Supplier berhasil ditambahkan.']);
return to_route('admin.master.suppliers.index');
return back();
}
public function update(SupplierRequest $request, Supplier $supplier): RedirectResponse
@ -39,7 +39,7 @@ public function update(SupplierRequest $request, Supplier $supplier): RedirectRe
Inertia::flash('toast', ['type' => 'success', 'message' => 'Supplier berhasil diperbarui.']);
return to_route('admin.master.suppliers.index');
return back();
}
public function destroy(Supplier $supplier): RedirectResponse
@ -48,6 +48,6 @@ public function destroy(Supplier $supplier): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Supplier berhasil dihapus.']);
return to_route('admin.master.suppliers.index');
return back();
}
}

View File

@ -43,7 +43,7 @@ public function store(RoleRequest $request): RedirectResponse
public function edit(Role $role): Response
{
return Inertia::render('admin/roles/edit', [
'role' => $this->service->getById($role->id),
'role' => $role->load('permissions'),
'permissions' => $this->service->getPermissionsByModule(),
]);
}
@ -63,6 +63,6 @@ public function destroy(Role $role): RedirectResponse
Inertia::flash('toast', ['type' => 'success', 'message' => 'Role berhasil dihapus.']);
return to_route('admin.settings.roles.index');
return back();
}
}

View File

@ -4,9 +4,9 @@
use App\Http\Controllers\Admin\Finance\CashAccountController;
use App\Http\Controllers\Admin\Finance\EmployeeAdvanceController;
use App\Http\Controllers\Admin\Finance\ExpenseController;
use App\Http\Controllers\Admin\Finance\PayrollAdjustmentController;
use App\Http\Controllers\Admin\Finance\PayrollController;
use App\Http\Controllers\Admin\Finance\PayrollPeriodController;
use App\Http\Controllers\Admin\Finance\Payroll\PayrollAdjustmentController;
use App\Http\Controllers\Admin\Finance\Payroll\PayrollController;
use App\Http\Controllers\Admin\Finance\Payroll\PayrollPeriodController;
use App\Http\Controllers\Admin\HR\AttendanceController;
use App\Http\Controllers\Admin\HR\EmployeeController;
use App\Http\Controllers\Admin\HR\LeaveRequestController;