# Function transferCharterReservation

### <a name="func_1"></a>

#### <span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·</span></span><span lang="AR-SA"><span style="mso-spacerun: yes;"> </span>هدف:</span>

این متد برای انتقال یک یا چند رزرو از یک آیتم چارتر (مثلاً یک کلاس پروازی) به آیتم چارتری دیگر (مثلاً کلاس پروازی متفاوت در همان پرواز یا پروازی دیگر) طراحی شده است. منطق اصلی آن بر پایه اعتبارسنجی ظرفیت مقصد استوار است. قبل از هر اقدامی، متد با فراخوانی `ReservationController::capacityItemCharter`، ظرفیت خالی آیتم مقصد (`goal`) را بررسی می‌کند. اگر ظرفیت مقصد برای پذیرش تعداد رزروهای در حال انتقال کافی باشد، متد در یک حلقه، شناسه‌های `main_id` و `item_id` هر رزرو را به شناسه‌های آیتم مقصد به‌روزرسانی می‌کند. این عملیات به صورت اتمیک برای هر رزرو انجام می‌شود. در صورتی که ظرفیت مقصد کافی نباشد، عملیات متوقف شده و یک خطای `422` بازگردانده می‌شود تا از ایجاد وضعیت ناهماهنگ در داده‌ها جلوگیری شود.

<table border="1" class="align-center" id="bkmrk-%D9%88%DB%8C%DA%98%DA%AF%DB%8C%E2%80%8C%D9%87%D8%A7-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA-%D9%87%D8%AF%D9%81" style="border-collapse: collapse; width: 80.9524%; height: 324.297px; background-color: rgb(236, 202, 250); border: 1px inset rgb(206, 212, 217);"><colgroup><col style="width: 50.0736%;"></col><col style="width: 50.0736%;"></col></colgroup><thead><tr style="height: 30.7969px;"><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">ویژگی‌ها</span>**</span></td><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">توضیحات</span>**</span></td></tr></thead><tbody><tr style="height: 29.7969px; background-color: rgb(206, 212, 217);"><td style="height: 29.7969px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">هدف کلی</span>**</span></td><td style="height: 29.7969px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span lang="AR-SA" style="color: rgb(0, 0, 0);">انتقال رزرو(ها) از یک آیتم چارتر به آیتم دیگر.</span></td></tr><tr style="height: 46.5938px; background-color: rgb(206, 212, 217);"><td style="height: 46.5938px; border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">اعتبارسنجی ظرفیت</span>**</span></td><td style="height: 46.5938px; border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span lang="AR-SA" style="color: rgb(0, 0, 0);">بررسی دقیق ظرفیت آیتم مقصد قبل از شروع عملیات انتقال.</span></td></tr><tr style="height: 29.7969px; background-color: rgb(206, 212, 217);"><td style="height: 29.7969px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">انتقال گروهی</span>**</span></td><td style="height: 29.7969px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span style="color: rgb(0, 0, 0);">قابلیت انتقال چندین رزرو در یک درخواست واحد.</span></td></tr><tr style="height: 46.9062px; background-color: rgb(206, 212, 217);"><td style="height: 46.9062px; border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">عملیات اصلی</span>**</span></td><td style="height: 46.9062px; border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span style="color: rgb(0, 0, 0);">به‌روزرسانی فیلدهای `main_id` و `item_id` در رکوردهای جدول رزرو.</span></td></tr><tr style="height: 46.5938px;"><td style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250); height: 46.5938px;"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">ایمنی</span>**</span></td><td style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250); height: 46.5938px;"><span style="color: rgb(0, 0, 0);">جلوگیری از انتقال در صورت عدم وجود ظرفیت کافی در مقصد.</span></td></tr><tr style="height: 46.9062px;"><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 46.9062px;"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">خطایابی</span>**</span></td><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 46.9062px;"><span style="color: rgb(0, 0, 0);">بازگرداندن پاسخ `422 Unprocessable Entity` با پیام واضح در صورت کمبود ظرفیت.</span></td></tr><tr style="height: 46.9062px;"><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 46.9062px;"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">پاسخ موفقیت</span>**</span></td><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 46.9062px;"><span style="color: rgb(0, 0, 0);">بازگرداندن پاسخ `204 No Content` در صورت انتقال موفقیت‌آمیز.</span></td></tr></tbody></table>

<div align="right" id="bkmrk-"></div>---

#### <span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="AR-SA">ورودی</span><span lang="FA" style="font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-language: FA;">‌ها (پارامتر‌ها):</span>

<span dir="LTR"> </span>

<table border="1" class="align-center" id="bkmrk-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D9%86%D8%A7%D9%85" style="border-collapse: collapse; width: 80.9697%; height: 286.906px; background-color: rgb(236, 202, 250); border: 1px inset rgb(206, 212, 217);"><colgroup><col style="width: 49.9367%;"></col><col style="width: 12.4467%;"></col><col style="width: 12.4467%;"></col><col style="width: 25.0433%;"></col></colgroup><thead><tr style="height: 30.7969px;"><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">توضیحات</span>**</span></td><td style="border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">  
</span>**</span></td><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">نوع داده</span>**</span></td><td style="border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161); height: 30.7969px;"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">نام پارمتر</span>**</span></td></tr></thead><tbody><tr style="height: 47.2188px;"><td style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250); height: 47.2188px;"><span style="color: rgb(0, 0, 0);">**آرایه‌ای از شناسه‌های رزروهایی که باید منتقل شوند.**</span></td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);">**<span style="color: black; mso-color-alt: windowtext;">`Body`</span>**</td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250); height: 47.2188px;">**<span style="color: black; mso-color-alt: windowtext;">`array`</span>**</td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250); height: 47.2188px;"><span style="color: rgb(0, 0, 0);">**`$request->items`**</span></td></tr><tr style="height: 30.1094px;"><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 30.1094px;"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA">آبجکتی که آیتم مقصد را مشخص می‌کند.</span>**</span></td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);">**<span style="color: black; mso-color-alt: windowtext;">`Body`</span>**</td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 30.1094px;">**<span style="color: black; mso-color-alt: windowtext;">`array`</span>**</td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255); height: 30.1094px;"><span lang="AR-SA" style="color: rgb(0, 0, 0);">**<span style="color: black; mso-color-alt: windowtext;">`$request->goal`</span>**</span></td></tr></tbody></table>

<div align="right" id="bkmrk--2"></div>---

#### <span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="AR-SA">خروجی</span><span dir="LTR"> (Return)</span><span lang="FA" style="font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-language: FA;">:</span>

<span dir="LTR"> </span>

<div align="right" id="bkmrk-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%B1%D8%B4%D8%AA"></div><table border="1" class="align-center" id="bkmrk-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%B1%D8%B4%D8%AA-1" style="border-collapse: collapse; width: 80.9524%; height: 127.734px; background-color: rgb(236, 202, 250); border: 1px inset rgb(206, 212, 217);"><colgroup><col style="width: 50.0736%;"></col><col style="width: 50.0736%;"></col></colgroup><thead><tr style="height: 30.7969px;"><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">توضیحات</span>**</span></td><td style="height: 30.7969px; border-color: rgb(206, 212, 217); background-color: rgb(132, 63, 161);"><span style="color: rgb(255, 255, 255);">**<span lang="AR-SA" style="font-family: 'B Titr';">نوع داده</span>**</span></td></tr></thead><tbody><tr style="height: 48.4688px; background-color: rgb(206, 212, 217);"><td style="height: 48.4688px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA"><span dir="RTL" lang="AR-SA" style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">در صورت موفقیت، یک پاسخ خالی با کد `204 No Content`.</span></span>**</span></td><td dir="ltr" style="height: 48.4688px; border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span lang="AR-SA" style="color: rgb(0, 0, 0);">**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">`Illuminate\Http\JsonResponse`</span>**</span></td></tr><tr><td style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA"><span dir="RTL" lang="AR-SA" style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">در صورت کمبود ظرفیت در مقصد، یک پاسخ با کد `422 Unprocessable Entity` و پیام خطا.</span></span>**</span></td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(255, 255, 255);"><span lang="AR-SA" style="color: rgb(0, 0, 0);">**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">`Illuminate\Http\JsonResponse`</span>**</span></td></tr><tr><td style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span style="color: rgb(0, 0, 0);">**<span lang="AR-SA"><span dir="RTL" lang="AR-SA" style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">در صورت بروز خطای عمومی، یک پاسخ با کد `400 Bad Request` و جزئیات استثناء.</span></span>**</span></td><td dir="ltr" style="border-color: rgb(206, 212, 217); background-color: rgb(236, 202, 250);"><span lang="AR-SA" style="color: rgb(0, 0, 0);">**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'B Nazanin'; mso-ascii-font-family: 'B Nazanin'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: 'B Nazanin'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">`Illuminate\Http\JsonResponse`</span>**</span></td></tr></tbody></table>

---

#### <span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·</span></span><span lang="AR-SA"><span style="mso-spacerun: yes;"> </span>مثال استف</span>اده / سناریو:

**<span style="text-decoration: underline; background-color: rgb(251, 238, 184);"><span style="color: rgb(0, 0, 0); text-decoration: underline;">سناریو</span></span>: انتقال دو مسافر از کلاس اکونومی به بیزنس در یک پرواز**

- **Request Body:**

<div class="code-header" dir="ltr" id="bkmrk-json"><span class="language-label">json</span></div>```
    {
        "items": [5432, 5433],
        "goal": {
            "main_id": 450,
            "item_id": 981
        }
    }

```

- **Action:**

1. متد ظرفیت آیتم `981` (کلاس بیزنس) از چارتر `450` را بررسی می‌کند.
2. **فرض:** ظرفیت خالی بیشتر از ۲ نفر است.
3. متد یک حلقه روی `items` اجرا می‌کند.
4. برای رزرو `5432`: `UPDATE charter_route_reservation SET main_id=450, item_id=981 WHERE id=5432`.
5. برای رزرو `5433`: `UPDATE charter_route_reservation SET main_id=450, item_id=981 WHERE id=5433`.

- **Response:**
- `HTTP Status`: `204 No Content`