Skip to main content
#P1711

POST /v2/trade/contract

Trade: Contract Generation

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

Request Overview

URL: /v2/trade/contract
Method: POST
Controller: V2TradeController@contractTradeApi

Access Control

  • نیاز به احراز هویت.
  • بررسی دسترسی به `branch` ارسال شده.

Body Parameters

Field Type Description
id integer (الزامی) شماره سریال نمایشی فاکتور.
سیستم به صورت داخلی `ReferenceExtension` را از این عدد کم می‌کند تا سریال واقعی را در دیتابیس بیابد.
branch integer (الزامی) شناسه شعبه.
lang[id] string (الزامی) کد زبان برای انتخاب متن و قالب قرارداد (مثلاً `fa`).

Logic Details

فرآیند تولید قرارداد شامل مراحل زیر است:

  1. واکشی اطلاعات پایه: جستجوی فاکتور با اتصال (Join) به جداول operators و customers بر اساس سریال و شعبه.
  2. اعتبارسنجی‌ها:
    • اگر print == 0 باشد، خطای "عدم قابلیت چاپ" (5006) برمی‌گرداند.
    • اگر status == 5 باشد، خطای وضعیت (5001) همراه با توضیحات فاکتور برمی‌گرداند.
  3. انتخاب قالب (Template Engine):
    • سیستم قالبی را از جدول pages انتخاب می‌کند که type آن برابر با contract_{route} باشد (مثلاً contract_internal).
  4. پردازش هوشمند آیتم‌ها:
    • محاسبه مجموع ارقام با استفاده از ApiTradeController::financial.
    • مدیریت استرداد (Refund Logic): اگر آیتمی از نوع refund باشد، آیتم اصلی متناظر با آن از لیست خدمات قرارداد حذف می‌شود تا سرویس کنسل شده نمایش داده نشود.
  5. تولید جداول HTML: دو جدول به صورت پویا در کد ساخته می‌شوند:
    • %passengers-table%: لیست نام، کدملی و تاریخ تولد مسافران.
    • %services-table%: لیست شرح خدمات باقی‌مانده.
  6. جایگذاری متغیرها: متغیرهایی مانند %leader%, %total%, %company% در متن قالب جایگزین می‌شوند.

Response Structure

در صورت موفقیت، کد HTML قرارداد در فیلد contract و متادیتای مورد نیاز در data قرار می‌گیرد.

{
  "status": true,
  "time": 1715001200,
  "contract": "... HTML CONTENT ...",
  "data": {
    "confirmation": "2024-05-10 12:30:00", // زمان تایید یا null
    "serial_id": 1500,       // شناسه اصلی دیتابیس
    "internal": true,        // وضعیت داخلی/خارجی بودن مسیر
    "leader": {
      "id": 105,
      "firstname_en": "Ali",
      "lastname_en": "Rezaei",
      "firstname_fa": "علی",
      "lastname_fa": "رضایی",
      "mobile": "09121234567"
    },
    "slug": "xYz123",
    "track_code": "02-2500", // فرمت: ماه - (سریال + اکستنشن)
    "created": "2024-05-10 10:00:00"
  }
}

پاسخ‌های خطا

// خطای عدم وجود یا وضعیت نامعتبر
{
  "status": false,
  "code": 5001,
  "message": "قرارداد یافت نشد" 
}
// خطای غیرقابل چاپ بودن
{
  "status": false,
  "code": 5006,
  "message": "رفرنس مورد نظر قابلیت چاپ ندارد."
}

Flowchart

Start
Query Factor (Join Ops/Cus)
Factor Exists?
No
Error 5001
↓ (Yes)
Printable?
No
Error 5006
↓ (Yes)
Fetch Template
From `pages` table
Data Processing
1. Calculate Financials
2. Filter Refunds (Hide Cancelled Items)
3. Build HTML Tables (Pass/Service)
4. Replace %Placeholders%
Return JSON + HTML