Skip to main content
#P1664

POST /v2/charter

Charter: Create Inventory (Store)

این اندپوینت موتورقلب قدرتمندتپنده تولیدسیستم تعریف موجودی (Inventory) است. وظیفه آن تنهادریافت یک درجالگوی سادهزمانی نیست،و بلکهقیمتی، باو استفادهتبدیل آن به صدها رکورد فیزیکی در دیتابیس است. این متد از یک موتور تکرار (Replication Engine)،Engine داخلی استفاده می‌تواندکند تا تاریخ‌های پرواز یا رزرو هتل را بر اساس الگوهای زمانی،هفتگی، صدها رکورد پروازدوره‌ای یا هتلتاریخ‌های خاص تولید کرده و تمام وابستگی‌های مالی و قانونی را بادر قوانین مالی، سیاست‌های کنسلی و تنظیمات قیمت‌گذاری پیچیده، به‌صورتقالب تراکنش‌های اتمیک تولیدذخیره کند.

Request Overview

URL: /v2/charter
Method: POST
Controller: CharterController@storeCharter
Middleware: authWithJwt

Key Features & Behavior Summary

  • شناساییPoly-morphic هوشمندCreation: نوعپشتیبانی محصولهمزمان از پرواز (RouteRoute) vsو هتل (Accommodation) با یک ساختار واحد.
  • مدیریتAuto-Inversion: تولید خودکار مسیر برگشت (RoundOutbound) Tripبا Logic)جابجایی مبدا/مقصد و محاسبه اختلاف روز.
  • Smart Replication: تولید انبوه تاریخ‌هارکوردها بر اساس الگویروزهای تکرارهفته (Repeatشمسی) Pattern)یا بازه‌های زمانی.
  • Financial Complexity: مدیریت پلکانی قیمت‌ها، مارک‌آپ (Markup)، کمیسیون و قوانین ملیت.
  • Data Integrity: استفاده از DB::transactionتراکنش دیتابیس برای هر تاریخ تولید(Fail-safe شده
  • per
  • درج همزمان جداول وابسته (Items, Financials, Rules, Taxes)date).

Payload Schema (Root Parameters)Level)

Field Type Required Description
type string yesYes نوع محصول:موجودی:
route | accommodation
subtype string conditionalCond. فقط برای route:route الزامی است:
aircraft | train | bus
branchintegerYesشناسه شعبه ایجاد کننده
items array yesYes آرایه‌ای از مشخصاتاطلاعات فیزیکی (جزئیاتشماره پروازپرواز، یاترمینال، هتل) و مسیر برگشت
repeat object noNo تنظیمات موتور تولید تاریخ (بسیاراگر مهم)نرسد، فقط یک رکورد ثبت می‌شود)
calculations array yesYes قوانینآرایه‌ای مالی،از قیمت‌گذاری،کلاس‌های کلاسنرخی، نرخیقیمت پایه، مالیات و ویژگی‌هاقوانین مالی
rules object noNo قوانین استرداد (refund)Refund) و قوانین عمومی (Public Rules)

Logic 1: InitializationRoute & Object Resolution

سیستم ابتدا نوعداده‌های دادهورودی را تشخیص می‌دهد و داده‌های خام را به شناسه‌های دیتابیس تبدیلنرمال‌سازی می‌کند:

//IF Routetype (Aircraft)== 'route':
   IF subtype == 'aircraft':
       Origin/Dest IDs -> LookupLook up 'airports' table -> GetFetch City IDName
   // RouteELSE (Train/Bus)train/bus):
       Origin/Dest IDs -> Used directly as City IDName

//IF Accommodationtype == 'accommodation':
   Object -> Hotel ID -> LookupLook up 'hotels' table -> GetFetch City IDName
   Origin = Destination = City Name
   Start/End Time -> Set strictly to 00:00:00 and/ 23:59:59
  

Logic 2: Outbound Handling (Round Trip HandlingTrip)

اگر در `items`اولین پارامترآیتم آرایه items، کلید outbound وجود داشته باشد:

  • یک آبجکت جدید برای مسیر برگشت به عنوان یک موجودیت جداگانه اما وابسته (Linked) ساخته می‌شود.
  • مبداجای origin و مقصدdestination جابجاتعویض (Swap) می‌شوند.شود.
  • اختلافپارامتر روزdiff (Diff)محاسبه می‌شود: فاصله زمانی بین رفت و برگشت محاسبه(برای می‌شود تااستفاده در تولید انبوهتاریخ‌های تاریخ‌ها لحاظ گردد.بعدی).

Logic 3: DateThe Replication Engine

متغیر کلیدی $charterDates بر اساس آبجکت repeat، متغیر $charterDates پر می‌شود:شود. این بخش هوشمند سیستم است:

Mode:Type: Dates (Manual)

{ "type": "dates", "dates": ["2025-10-2024-01-01", "2025-10-2024-01-05"] }
// تکراردقیقاً دقیق رویبرای همین تاریخ‌ها رکورد تولید می‌شود.
  

Mode: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": "..."
// چک کردن روز هفته با Jalalian::getDayOfWeek()
  

Mode: Periodic

"type": "periodic",
"repeat_day": 3, // هر 3 روز یکبار
"from": "...", "to": "..."}
  

Logic 4: The Transaction Loop

برای هر تاریخ تولید شده، مراحل زیر در یک DB::transaction اجرا می‌شود:

  • Charters Table: درج هدر اصلی، تولید سریال نامبر، تنظیم پرمیشن‌ها.
  • Notifications: درج در `scheduled_notifications` (اگر `schedule` ارسال شده باشد).
  • Items: درج در `charter_items` (انکود کردن جزئیات پرواز/هتل).

Logic 5: Financial & Calculations

پیچیده‌ترینداده‌های بخشمالی کهدر جداول مالیجداگانه رابر پر می‌کند. داده‌ها دراساس {type}_calculationtype ذخیره می‌شوند.

//همچنین Loopجداول throughواسط request->calculationsزیر if (type == 'route') {
   // Insert Base Pricing (Adult/Child/Infant)
   // Insert Taxes, Baggage, Features (is_round_trip)
}

if (type == 'accommodation') {
   // Insert Room Rates, Capacity, Facilities
   // Handle 'mapping_roomtypes' logic
}
  

Financial Handling Table:

شامل سه نوع داده است که با فیلد type تفکیکپر می‌شوند:

  • Commission
  • (کمیسیون)
  • Citizenship (قوانین ملیت)
  • TableDescription
    charter_taxesمالیات‌ها به تفکیک بزرگسال، کودک و نوزاد.
    charter_financial_handlingمدیریت سه نوع داده: Markup, Commission, Citizenship rules.
    charter_accommodation_rooms(فقط هتل) نگاشت شماره اتاق‌ها و طبقات به کلاس نرخی.
    mapping_accommodations(فقط هتل) اتصال شناسه هتل لوکال به شناسه چارتر تولید شده (افزایشAirplus نرخ)ID).

LogicExecution 6: Rules Insertion

// Refund Rules
تبدیل زمان به "دقیقه" و درج در charter_refund_rules

// Public Rules
درج توضیحات عمومی در charter_public_rules
  

Response Structure

در صورت موفقیت:

{
  "status": true,
  "time": 1733221456
}
  

در صورت خطا (Exception Caught):

{
  "status": false,
  "time": 1733221456,
  "message": "SQL Error...",
  "trace": [...]
}
  

Flowchart

Start Request
Check Type (Route/Hotel)
Resolve IDsCities & Round Trip Logic
Generate Date List (Repeat Engine)Objects
Replication Engine
Generate List of Dates
Main Loop Through(Foreach DatesDate)
Begin DB Transaction
Insert Charter'Charters' & Items(Header)
Insert Financials'Scheduled (Calc/Tax/Comms)Notifications'
Insert 'Charter Items'
Financial Loop
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": [...]
}