#P1664
POST /v2/charter
Charter: Create Inventory (Store)
این اندپوینت قلب تپنده سیستم تعریف موجودی (Inventory) است. وظیفه آن دریافت یک الگوی زمانی و قیمتی، و تبدیل آن به صدها رکورد فیزیکی در دیتابیس است. این متد از یک Replication Engine داخلی استفاده میکند تا تاریخهای پرواز یا رزرو هتل را بر اساس الگوهای هفتگی، دورهای یا تاریخهای خاص تولید کرده و تمام وابستگیهای مالی و قانونی را در قالب تراکنشهای اتمیک ذخیره کند.
Request Overview
URL:
/v2/charterMethod: POST
Controller: CharterController@storeCharter
Middleware: authWithJwt
Key Features & Behavior
- Poly-morphic Creation: پشتیبانی همزمان از پرواز (Route) و هتل (Accommodation) با یک ساختار واحد.
- Auto-Inversion: تولید خودکار مسیر برگشت (Outbound) با جابجایی مبدا/مقصد و محاسبه اختلاف روز.
- Smart Replication: تولید انبوه رکوردها بر اساس روزهای هفته (شمسی) یا بازههای زمانی.
- Financial Complexity: مدیریت پلکانی قیمتها، مارکآپ (Markup)، کمیسیون و قوانین ملیت.
- Data Integrity: استفاده از تراکنش دیتابیس برای هر تاریخ (Fail-safe per date).
Payload Schema (Root Level)
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | نوع موجودی:
route | accommodation
|
| subtype | string | Cond. | برای route الزامی است:
aircraft | train | bus
|
| branch | integer | Yes | شناسه شعبه ایجاد کننده |
| items | array | Yes | اطلاعات فیزیکی (شماره پرواز، ترمینال، هتل) و مسیر برگشت |
| repeat | object | No | تنظیمات موتور تولید تاریخ (اگر نرسد، فقط یک رکورد ثبت میشود) |
| calculations | array | Yes | آرایهای از کلاسهای نرخی، قیمت پایه، مالیات و قوانین مالی |
| rules | object | No | قوانین استرداد (Refund) و قوانین عمومی (Public Rules) |
Logic 1: Route & Object Resolution
سیستم ابتدا دادههای ورودی را نرمالسازی میکند:
IF type == 'route':
IF subtype == 'aircraft':
Origin/Dest IDs -> Look up 'airports' table -> Fetch City Name
ELSE (train/bus):
Origin/Dest IDs -> Used directly as City Name
IF type == 'accommodation':
Object -> Hotel ID -> Look up 'hotels' table -> Fetch City Name
Origin = Destination = City Name
Start/End Time -> Set strictly to 00:00:00 / 23:59:59
Logic 2: Outbound Handling (Round Trip)
اگر در اولین آیتم آرایه items، کلید outbound وجود داشته باشد:
- مسیر برگشت به عنوان یک موجودیت جداگانه اما وابسته (Linked) ساخته میشود.
- جای
originوdestinationتعویض (Swap) میشود. - پارامتر
diffمحاسبه میشود: فاصله زمانی بین رفت و برگشت (برای استفاده در تولید تاریخهای بعدی).
Logic 3: The Replication Engine
متغیر کلیدی $charterDates بر اساس آبجکت repeat پر میشود. این بخش هوشمند سیستم است:
Type: Dates (Manual)
{ "type": "dates", "dates": ["2024-01-01", "2024-01-05"] }
// دقیقاً برای همین تاریخها رکورد تولید میشود.
Type: Weekly (Pattern)
{
"type": "weekly",
"days": [1, 3, 5], // 1=شنبه, 3=دوشنبه ...
"from": "2024-01-01",
"to": "2024-03-01"
}
// حلقه روی بازه زمانی میچرخد و روزهای هفته شمسی را چک میکند.
Type: Periodic (Interval)
{
"type": "periodic",
"repeat_day": 2, // یک روز در میان
"from": "...", "to": "..."
}
Logic 4: Financial Calculations
دادههای مالی در جداول جداگانه بر اساس type ذخیره میشوند. همچنین جداول واسط زیر پر میشوند:
| Table | Description |
|---|---|
| charter_taxes | مالیاتها به تفکیک بزرگسال، کودک و نوزاد. |
| charter_financial_handling | مدیریت سه نوع داده: Markup, Commission, Citizenship rules. |
| charter_accommodation_rooms | (فقط هتل) نگاشت شماره اتاقها و طبقات به کلاس نرخی. |
| mapping_accommodations | (فقط هتل) اتصال شناسه هتل لوکال به شناسه چارتر تولید شده (Airplus ID). |
Execution Flowchart
Start Request
↓
Resolve Cities & Objects
↓
Replication Engine
Generate List of Dates
Generate List of Dates
↓
Main Loop (Foreach Date)
↓
Begin Transaction
↓
Insert 'Charters' (Header)
↓
Insert 'Scheduled Notifications'
↓
Insert 'Charter Items'
↓
Financial Loop
Calc / Tax / Markup / Rooms
Calc / Tax / Markup / Rooms
↓
Insert Rules (Refund/Public)
↓
Commit Transaction
↓
Return Success Response
Response Example
// Success
{
"status": true,
"time": 1715432100
}
// Error (Exception handled)
{
"status": false,
"time": 1715432105,
"message": "SQL Error: Column 'x' not found...",
"trace": [...]
}