Skip to main content
#P1801

GET /b2c/v1/online/flight/class/{calculation_id}

Get Flight Class Data

این اندپوینت برای واکشی اطلاعات کامل یک کلاس پروازی از روی شناسه محاسبه (`calculation_id`) طراحی شده است. داده بازگشتی شامل جزئیات فنی، مالی، مارکاپ‌ها و تخفیف‌ها برای سنین مختلف (Adult/Child/Infant) است. درصورت معتبر بودن شناسه، داده از سرویس AirPlusApi با متد search واکشی می‌شود و پس از بررسی فیلترهای application_filter و پردازش مارکاپ‌ها توسط LibBaseService::checkSearchFlightItem() به صورت JSON بازگردانده می‌شود.



Endpoint Info

URL: /b2c/v1/online/flight/class/{calculation_id}
Method: GET
Controller: V1OnlineController@getFlightClassData
Service: AirPlusApi & LibBaseService::checkSearchFlightItem
Auth: Public (Without JWT)

Path Parameters

پارامتر نوع اجباری توضیح
calculation_id integer شناسه محاسبهٔ نرخ که از جدول charter_calculations_route استخراج می‌شود. مقدار واقعی فیلد در DB برابر calculation_id - 10000 است.

Query Parameters

پارامتر نوع اجباری توضیح
branch string شناسهٔ شعبه فعلی برای تنظیم مسیر فروش (مثل b2c-shiraz).
group string گروه کاربری فعلی. مقادیر مجاز: b2c, b2b, b2e, agency.
level integer سطح کاربر در گروه (پیش‌فرض ۱).

Logic Flow

📩 دریافت ورودی calculation_id و پارامترهای branch, group, level
۱. بررسی وجود رکورد محاسبه:
جستجو در جدول charter_calculations_route با شرط‌های:
id = calculation_id - 10000 و status = 1 → واکشی main_id.
۲. فراخوانی AirPlusApi:
متد sendRequest('search') با پارامترهای زیر:
  • charter_id = main_id
  • calculation_id = calculation_id - 10000
  • all_routes = true
پاسخ در کلید Data.Information[0] شامل کلاس‌های پروازی است.
۳. اجرای منطق پردازش کلاس‌ها:
انتقال داده به LibBaseService::checkSearchFlightItem() برای:
  • مرتب‌سازی کلاس‌ها بر اساس قیمت، ظرفیت، و ویژگی‌های Remarks.
  • اعمال مارکاپ‌ها و تخفیف‌ها بر اساس گروه کاربر و نوع پرواز.
  • بررسی application_filter برای اعتبار مبدا/مقصد، ایرلاین و حالت‌های allowed/unallowed.
✅ در صورت موفقیت، دادهٔ نهایی کلاس‌ها در قالب payload بازگردانده می‌شود.
❌ در صورت عدم پیدا شدن رکورد محاسبه، پاسخ خطا با کد 404 و message "آیتم مورد نظر یافت نشد." برگردانده می‌شود.

Response Samples

✅ موفق (پردازش کلاس‌های پروازی)

{
  "payload": {
    "Airline": { "iata": "W5", "title": "Mahan Air" },
    "Origin": { "iata": "THR" },
    "Destination": { "iata": "MHD" },
    "FlightNumber": "W51234",
    "FlightType": "Charter",
    "Classes": [
      {
        "CabinType": "Economy",
        "Financial": {
          "Adult": {
            "BaseFare": 950000,
            "Tax": 50000,
            "Payable": 1000000,
            "Markup": {
              "percent": 10,
              "price": 100000,
              "final": 1100000,
              "discount": { "percent": 0, "price": 0 }
            }
          }
        },
        "AvailableSeat": 4,
        "Remarks": {
          "Inbound": { "Special": 0, "TourRequirement": false }
        }
      }
    ]
  },
  "meta": { "timestamp": 1733750500 }
}

❌ خطا – آیتم یافت نشد

{
  "error": {
    "code": 1001,
    "message": ".آیتم مورد نظر یافت نشد"
  },
  "meta": { "timestamp": 1733750510 }
}

Technical Notes

  • مارکاپ‌ها از HubController::markups($branch) خوانده می‌شوند و طبق گروه و سطح کاربر اعمال می‌شوند.
  • محاسبات تخفیف شامل فیلدهای discount.percent و discount.value برای هر سن مسافر است.
  • فیلترهای سیستم (جدول application_filter): بسته به نوع پرواز (system/charter/any) و وضعیت (allowed/unallowed) ترتیب اجرا دارند.
  • در صورتی که داده‌ای با شرایط فیلتر تطابق نداشته باشد، تابع checkSearchFlightItem مقدار false بازمی‌گرداند.
  • در خروجی API، مقادیر مالی هر رده سنی شامل BaseFare, Tax, TotalFare, Payable, Markup و Commission است.