fix: [payroll] 급여 등록 500 에러 수정
- 중복 급여 등록 시 유니크 제약 위반 대신 422 응답 반환 - tenant_id null 방어 처리 (세션 값이 null인 경우 기본값 적용)
This commit is contained in:
@@ -91,6 +91,11 @@ public function store(Request $request): JsonResponse
|
||||
'message' => '급여가 등록되었습니다.',
|
||||
'data' => $payroll,
|
||||
], 201);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => $e->getMessage(),
|
||||
], 422);
|
||||
} catch (\Throwable $e) {
|
||||
report($e);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ class PayrollSetting extends Model
|
||||
|
||||
public function scopeForTenant($query, ?int $tenantId = null)
|
||||
{
|
||||
$tenantId = $tenantId ?? session('selected_tenant_id', 1);
|
||||
$tenantId = $tenantId ?? session('selected_tenant_id') ?? 1;
|
||||
|
||||
return $query->where('tenant_id', $tenantId);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public function scopeForTenant($query, ?int $tenantId = null)
|
||||
|
||||
public static function getOrCreate(?int $tenantId = null): self
|
||||
{
|
||||
$tenantId = $tenantId ?? session('selected_tenant_id', 1);
|
||||
$tenantId = $tenantId ?? session('selected_tenant_id') ?? 1;
|
||||
|
||||
return self::firstOrCreate(
|
||||
['tenant_id' => $tenantId],
|
||||
|
||||
@@ -136,6 +136,19 @@ public function storePayroll(array $data): Payroll
|
||||
{
|
||||
$tenantId = session('selected_tenant_id', 1);
|
||||
|
||||
// 동일 대상/기간 중복 체크
|
||||
$exists = Payroll::where('tenant_id', $tenantId)
|
||||
->where('user_id', $data['user_id'])
|
||||
->where('pay_year', $data['pay_year'])
|
||||
->where('pay_month', $data['pay_month'])
|
||||
->exists();
|
||||
|
||||
if ($exists) {
|
||||
throw new \InvalidArgumentException(
|
||||
"해당 직원의 {$data['pay_year']}년 {$data['pay_month']}월 급여가 이미 등록되어 있습니다."
|
||||
);
|
||||
}
|
||||
|
||||
return DB::transaction(function () use ($data, $tenantId) {
|
||||
$calculated = $this->calculateAmounts($data);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user