#P1113
Function storeRefundCharterReservation
· هدف:
این متد فرآیند استرداد (Refund) یک یا چند رزرو را مدیریت میکند. این تابع به صورت دستهای عمل کرده و میتواند لیستی از رزروها را دریافت و برای هر یک، عملیات استرداد را بر اساس قوانین و جریمههای تعریف شده انجام دهد. این تابع با محاسبه مبلغ جریمه، بهروزرسانی وضعیت رزرو به “مسترد شده” (status=3) و ثبت یک رکورد در جدول charter_refunds، فرآیند استرداد را به صورت کامل و اتمی پیادهسازی میکند.
| ویژگیها | توضیحات |
| هدف کلی | ثبت درخواست استرداد برای یک یا چند رزرو چارتر. |
| پردازش دستهای | قابلیت استرداد چندین رزرو با یک درخواست واحد. |
| محاسبه جریمه | محاسبه خودکار مبلغ جریمه بر اساس درصد (percent) یا مبلغ ثابت (amount). |
| ثبت تراکنش | ثبت تمام جزئیات استرداد شامل مبلغ جریمه و مبلغ قابل بازگشت در جدول charter_refunds. |
| بهروزرسانی وضعیت | تغییر وضعیت رزروهای مسترد شده به 3 (Refund) و ثبت refund_id. |
| اعتبارسنجی | بررسی میکند که آیا رزرو قبلاً مسترد شده است یا خیر. |
· ورودیها (پارامترها):
| توضیحات | موقعیت | نوع داده | نام پارمتر |
| (اجباری) آرایهای از آبجکتها. هر آبجکت نماینده یک رزرو برای استرداد است. | Body |
array |
$request->items |
(اجباری) شناسه رزرو (charter_reservations.id) که باید مسترد شود. |
Body (items) |
integer |
item.id |
(اجباری) نوع جریمه. باید یکی از مقادیر percent (درصدی) یا amount (مبلغی) باشد. |
Body (items) |
string |
item.penalty_type |
(اجباری) مقدار جریمه. اگر penalty_type برابر percent باشد، این مقدار یک عدد بین ۰ تا ۱۰۰ است. اگر amount باشد، یک مبلغ ثابت است. |
Body (items) |
numeric |
item.penalty |
| (اختیاری) توضیحات مربوط به دلیل استرداد. | Body (items) |
string |
item.description |
· خروجی (Return):
| توضیحات | نوع داده |
در صورت موفقیت کامل، یک پاسخ خالی با کد وضعیت 204 No Content برمیگرداند. |
Illuminate\Http\JsonResponse |
در صورت بروز خطا (مانند یافت نشدن رزرو یا استرداد تکراری)، یک پاسخ با کد 400 Bad Request یا 409 Conflict به همراه پیام خطا برمیگرداند. |
Illuminate\Http\JsonResponse |
· مثال استفاده / سناریو:
سناریو: استرداد دو رزرو با شناسههای ۵۰۱ و ۵۰۲.
-
رزرو ۵۰۱ با ۱۰٪ جریمه.
-
رزرو ۵۰۲ با جریمه ثابت ۵۰۰,۰۰۰ ریال.
-
Request Body:
json
{
"items": [
{
"id": 501,
"penalty_type": "percent",
"penalty": 10,
"description": "کنسلی توسط مسافر"
},
{
"id": 502,
"penalty_type": "amount",
"penalty": 500000,
"description": "تغییر برنامه پرواز"
}
]
}
- Action:
- تابع یک حلقه روی آرایه
itemsاجرا میکند. - برای
id: 501، رزرو را از دیتابیس میخواند، مبلغ کل آن را برمیدارد و ۱۰٪ آن را به عنوان جریمه محاسبه میکند. - برای
id: 502، رزرو را میخواند و مبلغ ۵۰۰,۰۰۰ را مستقیماً به عنوان جریمه در نظر میگیرد. - برای هر دو، یک رکورد در جدول
charter_refundsایجاد میکند و جزئیات مالی و جریمه را ثبت میکند. - وضعیت هر دو رزرو را در جدول
charter_reservationsبه3تغییر داده وrefund_idمربوطه را در آن ذخیره میکند.
- Response:
- کد وضعیت:
204 No Content