#P1095
Function getAgeTitle 18
· هدف:
این متد یک ابزار کمکی ساده و کاربردی برای تعیین گروه سنی (adult, child, infant) یک شخص بر اساس تاریخ تولد و یک تاریخ مبنا (معمولاً تاریخ پرواز یا شروع اقامت) است. منطق آن بر اساس محاسبه اختلاف تعداد روزها بین دو تاریخ کار میکند. ابتدا تاریخ تولد را با استفاده از Functions::checkDatetime به فرمت استاندارد تبدیل کرده و سپس اختلاف آن با تاریخ مبنا را بر حسب روز محاسبه میکند. در نهایت، بر اساس قوانین استاندارد صنعت هوانوردی و گردشگری، گروه سنی را مشخص میکند: کمتر یا مساوی ۷۳۰ روز (۲ سال) به عنوان infant (نوزاد)، بین ۷۳۰ و ۴۳۸۰ روز (۲ تا ۱۲ سال) به عنوان child (کودک)، و بیشتر از ۴۳۸۰ روز (۱۲ سال) به عنوان adult (بزرگسال) در نظر گرفته میشود.
| ویژگیها | توضیحات |
| هدف کلی | ایجاد یک یا چند چارتر بر اساس تنظیمات ورودی، شامل نوع، جزئیات مسیر/اقامتگاه و الگوی تکرار. |
| عملیات اتمی (Atomic) | استفاده از DB::transaction برای تضمین یکپارچگی دادهها؛ تمام عملیات یا با هم موفق میشوند یا با هم لغو میگردند. |
| پشتیبانی از انواع چارتر | مدیریت منطق متفاوت برای چارترهای route (پرواز، قطار، اتوبوس) و accommodation (هتل). |
| موتور تکرار (Repeat Engine) | قابلیت ایجاد چارترها بر اساس یک الگوی تکرار: لیست تاریخهای مشخص (dates)، روزهای هفتگی (weekly) یا دورههای زمانی متناوب (periodic). |
| ساختار داده پیچیده | پردازش ساختارهای تو در تو برای جزئیات مسیر، کلاسهای قیمتی (calculations)، مالیاتها (taxes) و اطلاعات مالی (financial). |
| پاکسازی کش | پس از ایجاد موفقیتآمیز، کلیدهای مرتبط در Redis را حذف میکند تا اطمینان حاصل شود که دادههای جدید در پاسخهای بعدی لحاظ میشوند. |
· ورودیها (پارامترها):
| توضیحات | نوع داده | نام پارمتر |
| آبجکت اصلی درخواست حاوی تمام دادههای لازم برای ایجاد چارتر. | Illuminate\Http\Request |
$request |
کلید اصلی. نوع چارتر را مشخص میکند. مقادیر معتبر: 'route' یا 'accommodation'. |
string |
$request->type |
(برای type: 'route') نوع وسیله نقلیه را مشخص میکند: 'aircraft', 'train', 'bus'. |
string |
$request->subtype |
| آرایهای حاوی جزئیات اصلی چارتر، مانند مبدأ، مقصد، تاریخ و اطلاعات وسیله نقلیه. | array |
$request->items |
| مهم. آرایهای از آبجکتها که کلاسهای مختلف قیمتی و ظرفیتی چارتر را تعریف میکنند. | array |
$request->calculations |
(اختیاری) آبجکتی که منطق تکرار چارتر را مشخص میکند. شامل type (مانند 'weekly') و جزئیات مربوطه. |
object |
$request->repeat |
(برای type: 'accommodation') شامل start و end برای محدوده تاریخ اقامت. |
object |
$request->date_range |
سایر فیلدها مانند capacity, description, permissions و غیره. |
... |
... |
· خروجی (Return):
| توضیحات | نوع داده |
یک پاسخ JSON که در صورت موفقیت، حاوی یک آرایه با کلیدهای main، calculations، taxes و financial است. این کلیدها به ترتیب شناسههای ایجاد شده برای چارتر اصلی، کلاسهای قیمتی، مالیاتها و اطلاعات مالی را در خود جای دادهاند. در صورت بروز خطا، یک پاسخ با کد وضعیت 500 و پیام خطا برگردانده میشود. |
Illuminate\Http\JsonResponse |
· مثال استفاده:
// سناریو: ایجاد یک چارتر پرواز هفتگی برای روزهای شنبه و دوشنبه
// POST /api/panel/v2/charter/store
// Body (JSON):
{
"type": "route",
"subtype": "aircraft",
"capacity": 180,
"description": "چارتر هفتگی تهران-مشهد",
"permissions": { /* ... */ },
"repeat": {
"type": "weekly",
"from": "1404/08/01",
"to": "1404/08/30",
"days": [6, 1] // شنبه و دوشنبه
},
"items": [
{
"details": {
"origin": { "id": 1, "name": "THR" },
"destination": { "id": 2, "name": "MHD" },
"datetime": "1404/08/04 10:30", // تاریخ یکی از روزهای الگو (یکشنبه)
"vehicle": { /* ... */ }
}
}
],
"calculations": [
{
"name": "اکونومی",
"capacity": 150,
"financial": { /* ... */ }
},
{
"name": "بیزنس",
"capacity": 30,
"financial": { /* ... */ }
}
]
}
// خروجی مورد انتظار (در صورت موفقیت):
{
"main": [101, 102, 103, ...], // شناسههای چارترهای اصلی ایجاد شده برای هر تاریخ
"calculations": [201, 202, 203, ...], // شناسههای کلاسهای قیمتی
"taxes": [301, 302, ...], // شناسههای مالیاتها
"financial": [401, 402, ...] // شناسههای اطلاعات مالی
}