diff --git a/app/Http/Controllers/Admin/Finance/PayrollController.php b/app/Http/Controllers/Admin/Finance/PayrollController.php index 554cb64..1a9c0aa 100644 --- a/app/Http/Controllers/Admin/Finance/PayrollController.php +++ b/app/Http/Controllers/Admin/Finance/PayrollController.php @@ -11,6 +11,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; class PayrollController extends Controller { @@ -40,11 +41,18 @@ public function create(): View public function store(PayrollRequest $request): RedirectResponse { $validatedData = $request->validated(); - Payroll::create(array_merge($validatedData, [ - 'user_id' => Auth::id(), - 'employee_id' => $validatedData['employee'], - 'barbershop_id' => Auth::user()->barbershop_id, - ])); + + DB::transaction(function () use ($validatedData) { + Payroll::create(array_merge($validatedData, [ + 'user_id' => Auth::id(), + 'employee_id' => $validatedData['employee'], + 'barbershop_id' => Auth::user()->barbershop_id, + ])); + + Transaction::where('user_id', $validatedData['employee']) + ->where('is_paid', '0') + ->update(['is_paid' => '1']); + }); notify()->success('Data berhasil ditambahkan', 'Berhasil'); @@ -82,11 +90,22 @@ public function delete(Payroll $payroll): RedirectResponse public function getSalaryEmployee(string $employeeId): JsonResponse { - $baseSalary = User::find($employeeId)->base_salary; - $latestPayroll = Payroll::where('user_id', $employeeId)->latest()->first(); - $shavingResults = Transaction::where('user_id', $employeeId) - ->when($latestPayroll, function ($query) use ($latestPayroll) { + $employee = User::find($employeeId); + $latestPayroll = Payroll::where('employee_id', $employeeId)->latest()->first(); + + $shavingResults = Transaction::query() + ->when($employee->role_id === 4, function ($query) use ($employee) { + return $query->where('barbershop_id', $employee->barbershop_id); + }) + ->when($employee->role_id === 5, function ($query) use ($employeeId) { + return $query->where('user_id', $employeeId) + ->where('is_paid', '0'); + }) + ->when($latestPayroll, function ($query) use ($latestPayroll, $employee) { $query->whereBetween('created_at', [$latestPayroll->created_at, now()]); + if ($employee->role_id === 4 && $latestPayroll->created_at->isToday()) { + $query->where('is_paid', '0'); + } }) ->sum('total'); @@ -94,8 +113,8 @@ public function getSalaryEmployee(string $employeeId): JsonResponse 'status' => true, 'message' => 'Data retrieved successfully', 'data' => [ - 'baseSalary' => formatToRupiah($baseSalary), - 'shavingResults' => formatToRupiah($shavingResults), + 'baseSalary' => formatToRupiah($employee->base_salary), + 'shavingResults' => in_array($employee->role_id, [4, 5]) ? formatToRupiah($shavingResults) : 'Rp0', ], ]); } diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 0e3e994..ffac151 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -24,6 +24,7 @@ class Transaction extends Model 'discount', 'total', 'payment_method', + 'is_paid', ]; public function scopeBarbershop(Builder $query): Builder diff --git a/database/migrations/2024_11_30_202154_add_status_to_transactions.php b/database/migrations/2024_11_30_202154_add_status_to_transactions.php new file mode 100644 index 0000000..568f9bd --- /dev/null +++ b/database/migrations/2024_11_30_202154_add_status_to_transactions.php @@ -0,0 +1,28 @@ +enum('is_paid', ['0', '1'])->comment('0:belum dibayarkan gaji 1:Sudah dibayarkan gaji')->default('0')->after('payment_method'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('transactions', function (Blueprint $table) { + $table->dropColumn('is_paid'); + }); + } +};