Files
kulakpos_web/Modules/HrmAddon/App/Http/Controllers/Api/PayrollController.php
eko54r 3e1b64e008
Some checks failed
Build, Push and Deploy / build-and-push (push) Failing after 3m30s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 15s
Build, Push and Deploy / deploy-staging (push) Has been skipped
Build, Push and Deploy / deploy-production (push) Has been skipped
update addon HRM
2026-05-04 23:04:09 +07:00

138 lines
4.4 KiB
PHP

<?php
namespace Modules\HrmAddon\App\Http\Controllers\Api;
use App\Events\MultiPaymentProcessed;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Modules\HrmAddon\App\Models\Payroll;
use Modules\HrmAddon\App\Models\Employee;
class PayrollController extends Controller
{
public function index()
{
$payrolls = Payroll::with(['employee:id,name', 'branch:id,name', 'transactions:id,platform,transaction_type,amount,date,invoice_no,reference_id,payment_type_id,meta', 'transactions.paymentType:id,name'])->where('business_id', auth()->user()->business_id)->latest()->get();
return response()->json([
'message' => __('Data fetched successfully.'),
'data' => $payrolls,
]);
}
public function show($id)
{
$data = Payroll::with(['employee:id,name', 'branch:id,name', 'transactions:id,platform,transaction_type,amount,date,invoice_no,reference_id,payment_type_id,meta', 'transactions.paymentType:id,name'])->where('business_id', auth()->user()->business_id)->find($id);
return response()->json([
'message' => __('Data fetched successfully.'),
'data' => $data,
]);
}
public function store(Request $request)
{
$request->validate([
'employee_id' => 'required|integer|exists:employees,id',
'month' => 'required|string',
'date' => 'nullable|date',
'note' => 'nullable|string',
'payemnt_year' => 'required|string',
]);
$exists = Payroll::where('employee_id', $request->employee_id)
->where('month', $request->month)
->where('payemnt_year', $request->payemnt_year)
->where('business_id', auth()->user()->business_id)
->exists();
if ($exists) {
return response()->json([
'message' => __('This employee has already been paid for this month and year.'),
], 422);
}
$employee = Employee::where('business_id', auth()->user()->business_id)->findOrFail($request->employee_id);
$data = Payroll::create($request->except(['business_id', 'amount']) + [
'business_id' => auth()->user()->business_id,
'amount' => $employee->amount,
]);
// Handle payments
$payments = collect($request->payments ?? [])->map(function ($payment) use ($employee) {
$payment['amount'] = $employee->amount;
return $payment;
})->toArray();
// Trigger multipayment event
event(new MultiPaymentProcessed(
$payments,
$data->id,
'payroll',
$employee->amount ?? 0,
));
return response()->json([
'message' => __('Data saved successfully.'),
'data' => $data,
]);
}
public function update(Request $request, string $id)
{
$request->validate([
'employee_id' => 'required|integer|exists:employees,id',
'date' => 'nullable|date',
'month' => 'required|string',
'note' => 'nullable|string',
'payemnt_year' => 'required|string',
]);
$Payroll = Payroll::find($id);
if (!$Payroll) {
return response()->json([
'message' => __('Data not found.'),
], 404);
}
$exists = Payroll::where('employee_id', $request->employee_id)
->where('month', $request->month)
->where('payemnt_year', $request->payemnt_year)
->where('business_id', auth()->user()->business_id)
->where('id', '!=', $id)
->exists();
if ($exists) {
return response()->json([
'message' => __('This employee has already been paid for this month and year.'),
], 422);
}
$Payroll->update($request->except(['business_id', 'amount']));
return response()->json([
'message' => __('Data update successfully.'),
'data' => $Payroll,
]);
}
public function destroy(string $id)
{
$Payroll = Payroll::where('business_id', auth()->user()->business_id)->find($id);
if (!$Payroll) {
return response()->json([
'message' => __('Data not found.'),
], 404);
}
$Payroll->delete();
return response()->json([
'message' => __('Data deleted successfully.'),
]);
}
}