feat(payroll): membayar debt saat transaksi gaji
This commit is contained in:
parent
36408541c5
commit
b9a61ee3eb
@ -38,10 +38,14 @@ public function store(DebtRequest $request): RedirectResponse
|
|||||||
$barbershopId = Auth::user()->barbershop_id;
|
$barbershopId = Auth::user()->barbershop_id;
|
||||||
$barbershop = Barbershop::findOrFail($barbershopId);
|
$barbershop = Barbershop::findOrFail($barbershopId);
|
||||||
$user = User::findOrFail($validatedData['employee']);
|
$user = User::findOrFail($validatedData['employee']);
|
||||||
$transaction = Transaction::where('user_id', $user->id)->where('is_paid', '0')->first();
|
|
||||||
|
|
||||||
$transactionAmount = $transaction ? $transaction->total : 0;
|
if ($user->role_id === 4) {
|
||||||
$maxDebt = $user->base_salary + (0.5 * $transactionAmount);
|
$transaction = Transaction::where('barbershop_id', $barbershopId)->where('is_paid', '0')->sum('total');
|
||||||
|
} else {
|
||||||
|
$transaction = Transaction::where('user_id', $user->id)->where('is_paid', '0')->sum('total');
|
||||||
|
}
|
||||||
|
|
||||||
|
$maxDebt = $user->base_salary + (0.5 * $transaction);
|
||||||
|
|
||||||
if ($barbershop->cash < $validatedData['amount']) {
|
if ($barbershop->cash < $validatedData['amount']) {
|
||||||
notify()->error('Kas tidak cukup untuk melakukan transaksi ini', 'Gagal');
|
notify()->error('Kas tidak cukup untuk melakukan transaksi ini', 'Gagal');
|
||||||
@ -50,7 +54,7 @@ public function store(DebtRequest $request): RedirectResponse
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($validatedData['amount'] > $maxDebt) {
|
if ($validatedData['amount'] > $maxDebt) {
|
||||||
notify()->error('Jumlah utang tidak boleh lebih dari gaji pokok + 50% dari transaksi karyawan. Maksimal kasbon: '.formatToRupiah($maxDebt), 'Gagal');
|
notify()->error('Jumlah utang tidak boleh lebih dari gaji pokok + 50% dari transaksi. Maksimal utang: Rp '.number_format($maxDebt, 2), 'Gagal');
|
||||||
|
|
||||||
return back()->withInput();
|
return back()->withInput();
|
||||||
}
|
}
|
||||||
@ -74,7 +78,12 @@ public function update(DebtRequest $request, Debt $debt): RedirectResponse
|
|||||||
$barbershopId = Auth::user()->barbershop_id;
|
$barbershopId = Auth::user()->barbershop_id;
|
||||||
$barbershop = Barbershop::findOrFail($barbershopId);
|
$barbershop = Barbershop::findOrFail($barbershopId);
|
||||||
$user = User::findOrFail($debt->user_id);
|
$user = User::findOrFail($debt->user_id);
|
||||||
$transaction = Transaction::where('user_id', $user->id)->where('is_paid', '0')->first();
|
|
||||||
|
if ($user->role_id == 4) {
|
||||||
|
$transaction = Transaction::where('barbershop_id', $barbershopId)->where('is_paid', '0')->first();
|
||||||
|
} else {
|
||||||
|
$transaction = Transaction::where('user_id', $user->id)->where('is_paid', '0')->first();
|
||||||
|
}
|
||||||
|
|
||||||
$transactionAmount = $transaction ? $transaction->total : 0;
|
$transactionAmount = $transaction ? $transaction->total : 0;
|
||||||
$maxDebt = $user->base_salary + (0.5 * $transactionAmount);
|
$maxDebt = $user->base_salary + (0.5 * $transactionAmount);
|
||||||
@ -88,14 +97,13 @@ public function update(DebtRequest $request, Debt $debt): RedirectResponse
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($validatedData['amount'] > $maxDebt) {
|
if ($validatedData['amount'] > $maxDebt) {
|
||||||
notify()->error('Jumlah utang tidak boleh lebih dari gaji pokok + 50% dari transaksi karyawan. Maksimal utang: Rp '.number_format($maxDebt, 2), 'Gagal');
|
notify()->error('Jumlah utang tidak boleh lebih dari gaji pokok + 50% dari transaksi. Maksimal utang: Rp '.number_format($maxDebt, 2), 'Gagal');
|
||||||
|
|
||||||
return back()->withInput();
|
return back()->withInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::transaction(function () use ($validatedData, $debt, $barbershop, $amountDifference) {
|
DB::transaction(function () use ($validatedData, $debt, $barbershop, $amountDifference) {
|
||||||
$debt->update([
|
$debt->update([
|
||||||
'user_id' => $validatedData['employee'],
|
|
||||||
'amount' => $validatedData['amount'],
|
'amount' => $validatedData['amount'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Admin\Finance\PayrollRequest;
|
use App\Http\Requests\Admin\Finance\PayrollRequest;
|
||||||
|
use App\Models\Barbershop;
|
||||||
|
use App\Models\Debt;
|
||||||
use App\Models\Payroll;
|
use App\Models\Payroll;
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@ -41,15 +43,28 @@ public function create(): View
|
|||||||
public function store(PayrollRequest $request): RedirectResponse
|
public function store(PayrollRequest $request): RedirectResponse
|
||||||
{
|
{
|
||||||
$validatedData = $request->validated();
|
$validatedData = $request->validated();
|
||||||
|
$barbershopId = Auth::user()->barbershop_id;
|
||||||
|
|
||||||
DB::transaction(function () use ($validatedData) {
|
DB::transaction(function () use ($validatedData, $barbershopId) {
|
||||||
Payroll::create(array_merge($validatedData, [
|
Payroll::create(array_merge($validatedData, [
|
||||||
'user_id' => Auth::id(),
|
'user_id' => Auth::id(),
|
||||||
'employee_id' => $validatedData['employee'],
|
'employee_id' => $validatedData['employee'],
|
||||||
'barbershop_id' => Auth::user()->barbershop_id,
|
'barbershop_id' => $barbershopId,
|
||||||
]));
|
]));
|
||||||
|
|
||||||
Transaction::where('user_id', $validatedData['employee'])
|
$totalDebt = Debt::where('user_id', $validatedData['employee'])
|
||||||
|
->where('is_paid', '0')
|
||||||
|
->sum('amount');
|
||||||
|
|
||||||
|
$barbershop = Barbershop::findOrFail($barbershopId);
|
||||||
|
|
||||||
|
if ($validatedData['cut'] > $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $totalDebt);
|
||||||
|
} elseif ($validatedData['cut'] <= $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $validatedData['cut']);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debt::where('user_id', $validatedData['employee'])
|
||||||
->where('is_paid', '0')
|
->where('is_paid', '0')
|
||||||
->update(['is_paid' => '1']);
|
->update(['is_paid' => '1']);
|
||||||
});
|
});
|
||||||
@ -68,24 +83,63 @@ public function edit(Payroll $payroll): View
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(Payroll $payroll, PayrollRequest $request): RedirectResponse
|
public function update(PayrollRequest $request, Payroll $payroll): RedirectResponse
|
||||||
{
|
{
|
||||||
$validatedData = $request->validated();
|
$validatedData = $request->validated();
|
||||||
|
$barbershopId = Auth::user()->barbershop_id;
|
||||||
|
|
||||||
$payroll->update($validatedData);
|
DB::transaction(function () use ($validatedData, $payroll, $barbershopId) {
|
||||||
|
$oldCut = $payroll->cut;
|
||||||
|
$newCut = $validatedData['cut'];
|
||||||
|
$cutDifference = $newCut - $oldCut;
|
||||||
|
|
||||||
notify()->success('Data berhasil diubah', 'Berhasil');
|
$totalDebt = Debt::where('user_id', $payroll->employee)
|
||||||
|
->where('is_paid', '0')
|
||||||
|
->sum('amount');
|
||||||
|
|
||||||
|
$payroll->update($validatedData);
|
||||||
|
|
||||||
|
if ($cutDifference > 0) {
|
||||||
|
$barbershop = Barbershop::findOrFail($barbershopId);
|
||||||
|
|
||||||
|
if ($newCut > $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $totalDebt);
|
||||||
|
} elseif ($newCut <= $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $newCut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
notify()->success('Data berhasil diperbarui', 'Berhasil');
|
||||||
|
|
||||||
return redirect('dashboard/finance/payrolls');
|
return redirect('dashboard/finance/payrolls');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete(Payroll $payroll): RedirectResponse
|
public function delete(Payroll $payroll): RedirectResponse
|
||||||
{
|
{
|
||||||
$payroll->delete();
|
$barbershopId = Auth::user()->barbershop_id;
|
||||||
|
|
||||||
|
DB::transaction(function () use ($payroll, $barbershopId) {
|
||||||
|
$cut = $payroll->cut;
|
||||||
|
|
||||||
|
$totalDebt = Debt::where('user_id', $payroll->employee_id)
|
||||||
|
->where('is_paid', '0')
|
||||||
|
->sum('amount');
|
||||||
|
|
||||||
|
$payroll->delete();
|
||||||
|
|
||||||
|
$barbershop = Barbershop::findOrFail($barbershopId);
|
||||||
|
|
||||||
|
if ($cut > $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $totalDebt);
|
||||||
|
} elseif ($cut <= $totalDebt) {
|
||||||
|
$barbershop->increment('cash', $cut);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
notify()->success('Data berhasil dihapus', 'Berhasil');
|
notify()->success('Data berhasil dihapus', 'Berhasil');
|
||||||
|
|
||||||
return back();
|
return redirect('dashboard/finance/payrolls');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSalaryEmployee(string $employeeId): JsonResponse
|
public function getSalaryEmployee(string $employeeId): JsonResponse
|
||||||
@ -108,6 +162,7 @@ public function getSalaryEmployee(string $employeeId): JsonResponse
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
->sum('total');
|
->sum('total');
|
||||||
|
$debt = Debt::where('user_id', $employeeId)->where('is_paid', '0')->sum('amount');
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
@ -115,6 +170,7 @@ public function getSalaryEmployee(string $employeeId): JsonResponse
|
|||||||
'data' => [
|
'data' => [
|
||||||
'baseSalary' => formatToRupiah($employee->base_salary),
|
'baseSalary' => formatToRupiah($employee->base_salary),
|
||||||
'shavingResults' => in_array($employee->role_id, [4, 5]) ? formatToRupiah($shavingResults) : 'Rp0',
|
'shavingResults' => in_array($employee->role_id, [4, 5]) ? formatToRupiah($shavingResults) : 'Rp0',
|
||||||
|
'debt' => formatToRupiah($debt),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ $(document).ready(function () {
|
|||||||
success: function (response) {
|
success: function (response) {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
$('#amount').val(response.data.baseSalary || '0');
|
$('#amount').val(response.data.baseSalary || '0');
|
||||||
|
$('#cut').val(response.data.debt || '0');
|
||||||
$('#shaving_result').val(response.data.shavingResults || '0');
|
$('#shaving_result').val(response.data.shavingResults || '0');
|
||||||
|
|
||||||
shavingResults = parseFloat(unformatRupiah(response.data.shavingResults)) || 0;
|
shavingResults = parseFloat(unformatRupiah(response.data.shavingResults)) || 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user