Skip to main content
#P1815

RESOURCE /b2c/v1/travel_requests

Travel Requests API

مجموعه اندپوینت‌های /b2c/v1/travel_requests برای ثبت، مشاهده، و مدیریت درخواست‌های سفر طراحی شده است. این مجموعه از ساختار Route::resource لاراول استفاده می‌کند و زیر مجموعه‌ای از کنترلر TravelRequestsController می‌باشد. تمام مسیرها از طریق middleware: authWithJwt محافظت می‌شوند.


Endpoints Overview

Method Endpoint Action Description
GET /b2c/v1/travel_requests index لیست درخواست‌های سفر با فیلتر و صفحه‌بندی
POST /b2c/v1/travel_requests store ثبت درخواست جدید سفر
GET /b2c/v1/travel_requests/{id} show دریافت جزئیات یک درخواست مشخص
PUT/PATCH /b2c/v1/travel_requests/{id} update ویرایش اطلاعات درخواست
DELETE /b2c/v1/travel_requests/{id} destroy حذف درخواست
POST /b2c/v1/travel_requests/{id}/change-status changeStatus تغییر وضعیت (status) با امکان ثبت reference

۱. لیست درخواست‌ها — GET /b2c/v1/travel_requests

  • صفحه‌بندی: در فیلد paginate.length (پیش‌فرض 30)، paginate.start (پیش‌فرض 0)
  • فیلترهای پشتیبانی‌شده:
    • method (accommodation, flight, tour...)
    • submethod
    • status
    • payment_status
    • operator_id
  • دسترسی به داده‌ها محدود به گروه کاربر است:
    • B2C/Agent: فقط درخواست‌های خودش
    • B2B/Colleague: درخواست‌های اپراتور جاری
    • Base/B2E: از فیلد requester_id در ورودی

پاسخ نمونه

{
  "items": [
    {
      "id": 45,
      "title": "اصفهان به مشهد هتل آوازه مشهد از ‎2025/12/14‎ تا ‎2025/12/18‎",
      "method": "accommodation",
      "budget": 5000000,
      "status": 1,
      "operator_group": "b2c",
      "origin": { "id": 37, "fa_name": "اصفهان", "en_name": "Isfahan" },
      "destination": { "id": 396, "fa_name": "مشهد", "en_name": "Mashhad" },
      "accommodation": { "title": { "fa": "هتل آوازه مشهد" }, "category": { "title": "hotel" } },
      "details": { "rooms": 2, "adults": 3 },
      "requester_id": { "id": 12, "first_name": "علیرضا", "last_name": "احمدی" }
    }
  ],
  "meta": {
    "timestamp": 1733821800,
    "table": { "total": 25, "per_page": 30, "current_page": 1, "last_page": 1 }
  }
}

۲. ایجاد درخواست — POST /b2c/v1/travel_requests

در این درخواست، اپراتور با استفاده از JWT خود به عنوان operator، رکوردی جدید در جدول travel_requests ایجاد می‌کند.

پارامترهای ورودی (JSON Body)

{
  "method": "accommodation",
  "origin": {"id": 37},
  "destination": {"id": 396},
  "accommodation": {"id": 52, "type": "accommodation"},
  "from_date": "2025-12-14",
  "to_date": "2025-12-18",
  "budget": 5000000,
  "cost_center": 8,
  "trip_type": "business",
  "description": "سفر کاری به مشهد",
  "details": { "adults": 3, "children": 1 }
}
  • method الزامی است (مانند accommodation, flight, tour).
  • اگر فیلد accommodation.type = "destination" باشد، مقدار آن جایگزین مقصد می‌شود.
  • در تمام حالات، branch و group از JWT استخراج می‌شوند.

خروجی موفق (201 Created)

{
  "payload": {
    "id": 45,
    "title": "اصفهان به مشهد هتل آوازه مشهد از ‎2025/12/14‎ تا ‎2025/12/18‎",
    "budget": 5000000,
    "method": "accommodation"
  },
  "meta": { "timestamp": 1733821800 }
}

۳. مشاهده جزئیات — GET /b2c/v1/travel_requests/{id}

کلیه روابط مرتبط (origin، destination، accommodation، requester و غیره) از جداول مجزا خوانده می‌شوند.

  • درخواست‌کننده (B2C → customers، B2B → colleagues).
  • رفرنس فاکتور در صورت اتصال به factors با offest +10000 بازگردانده می‌شود.
  • عنوان اصلی مبتنی بر مسیر + تاریخ + اقامتگاه تولید می‌شود.

۴. ویرایش — PUT /b2c/v1/travel_requests/{id}

  • تمامی فیلدها مشابه Store هستند؛ فقط نیاز به شناسه مسیر دارد.
  • در بروزرسانی، status و payment_status نیز می‌توانند تغییر کنند.

پاسخ نمونه

{
  "payload": {
    "id": 45,
    "status": 3,
    "payment_status": 1,
    "title": "اصفهان به مشهد هتل آوازه مشهد از ‎2025/12/14‎ تا ‎2025/12/18‎"
  },
  "meta": { "timestamp": 1733821880 }
}

۵. حذف — DELETE /b2c/v1/travel_requests/{id}

درخواست با شناسه مشخص حذف می‌شود و مقدار حذف (true/false) بازگردانده می‌شود.


۶. تغییر وضعیت — POST /b2c/v1/travel_requests/{id}/change-status

  • برای به‌روزرسانی سریع وضعیت (status) و تخصیص اپراتور یا فاکتور مرجع به کار می‌رود.
  • اگر مقدار status = 4 و reference_id ارسال شود → فاکتور مرتبط ثبت می‌شود.
{
  "operator_id": 5,
  "status": 4,
  "reference_id": 999
}

خروجی موفق

{
  "payload": { "status": true },
  "meta": { "timestamp": 1733821930 }
}

نکات فنی و عملکردی

  • عنوان ترکیبی از مبدأ، مقصد، اقامتگاه و بازه تاریخ به‌شکل داینامیک ساخته می‌شود.
  • روابط داده‌ای:
    • Customers ↔ Requester (برای B2C)
    • Colleagues ↔ Requester (برای B2B)
    • Cities ↔ Origin/Destination
    • Hotels ↔ Accommodation
  • تمامی تاریخ‌ها در فرمت شمسی-لاتین با LTR Markers جلوگیری از بهم‌ریختگی نمایش دارند.
  • فیلد details به‌صورت JSON ذخیره و در خروجی decode م‌شود.