#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...)submethodstatuspayment_statusoperator_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 مشود.