add refund and event logic

This commit is contained in:
root
2026-03-10 23:12:49 -04:00
parent ba1206e314
commit f6be51576c
67 changed files with 4808 additions and 1000 deletions
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
use App\Models\Refund;
class RefundDecisionRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'status' => ['required', 'string', 'in:' . implode(',', [
Refund::STATUS_APPROVED,
Refund::STATUS_REJECTED,
])],
'reason' => ['required', 'string', 'max:2000'],
];
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
use App\Models\Refund;
class RefundIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'status' => ['nullable', 'string', 'in:' . implode(',', [
Refund::STATUS_PENDING,
Refund::STATUS_APPROVED,
Refund::STATUS_PARTIAL,
Refund::STATUS_PAID,
Refund::STATUS_REJECTED,
Refund::STATUS_CANCELED,
])],
'request' => ['nullable', 'string', 'in:tuition,overpayment,duplicate,extra'],
'parent_id' => ['nullable', 'integer', 'min:1'],
'invoice_id' => ['nullable', 'integer', 'min:1'],
'school_year' => ['nullable', 'string', 'max:20'],
'semester' => ['nullable', 'string', 'max:20'],
'q' => ['nullable', 'string', 'max:200'],
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:200'],
'sort_by' => ['nullable', 'string', 'in:created_at,updated_at,refund_amount,status,parent_id,invoice_id'],
'sort_dir' => ['nullable', 'string', 'in:asc,desc'],
];
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
class RefundPaymentRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'paid_amount' => ['required', 'numeric', 'min:0.01'],
'payment_method' => ['required', 'string', 'max:50', 'in:Check,Online,Cash'],
'check_number' => ['nullable', 'string', 'max:80'],
'check_file' => ['nullable', 'file', 'mimes:pdf,jpg,jpeg,png'],
];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
class RefundRecalculateRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'invoice_number' => ['nullable', 'string', 'max:100'],
];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
class RefundRejectRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'reason' => ['required', 'string', 'max:2000'],
];
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests\Refunds;
use App\Http\Requests\ApiFormRequest;
class RefundStoreRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'parent_id' => ['required', 'integer', 'min:1'],
'request_type' => ['required', 'string', 'in:tuition,overpayment,duplicate,extra'],
'amount' => ['required_unless:request_type,tuition', 'numeric', 'min:0.01'],
'invoice_id' => ['nullable', 'integer', 'min:1'],
'payment_id' => ['nullable', 'integer', 'min:1'],
'reason' => ['nullable', 'string', 'max:2000'],
'school_year' => ['nullable', 'string', 'max:20'],
'semester' => ['nullable', 'string', 'max:20'],
];
}
}