# API Documentation - Deploy Detail

## Mục lục
1. [Lấy chi tiết triển khai](#1-lấy-chi-tiết-triển-khai)

---

## 1. Lấy chi tiết triển khai

- **Endpoint**: `POST /api/Deploy/GetDeployDetail`
- **Authorization**: `Deploy.GetDeployDetail`

**Request Body:**
```json
{
  "Pagination": {
    "PageIndex": 1,
    "PageSize": 15
  },
  "Search": {
    "PredicateObject": {
      "PicId": 123,
      "DeployFilter": "Delivering"
    }
  },
  "Sort": {
    "Predicate": "CreatedTime",
    "Reverse": true
  }
}
```

**Request Parameters:**
- `PicId` (int, **required**): ID của lái xe (người phụ trách đơn hàng)
- `DeployFilter` (string/array, optional): Bộ lọc phân loại đơn hàng.
    - Chấp nhận: 1 chuỗi (single value), chuỗi ngăn cách bởi dấu phẩy (comma-separated), hoặc một mảng (JSON array).
    - Ví dụ: `"PickingUp"`, `"PickingUp,Delivering"`, hoặc `["PickingUp", "Delivering"]`.
    - Nếu không truyền sẽ lấy tất cả.

> [!IMPORTANT]
> **Giá trị DeployFilter hợp lệ:**
>
> | Giá trị | Mô tả |
> |---|---|
> | `PickingUp` | Đơn đang lấy hàng (New + OnPicking/PickFailed/AssignedPickup) |
> | `PickedUp` | Đơn đã lấy hàng thành công (Received + Picked) |
> | `Pickup` | Tất cả đơn lấy hàng (PickingUp + PickedUp) |
> | `Delivering` | Đơn đang giao hàng (Received/DeliveryFail + OnDelivery/OutboundForDelivery) |
> | `Delivery` | Tất cả đơn giao hàng đang xử lý (chứa Delivering) |
> | *(không truyền)* | Lấy tất cả đơn đang xử lý (đang lấy hàng + đang giao hàng) |

**Response:**
```json
{
  "Items": [
    {
      "Id": 1,
      "Code": "LD240001",
      "PartnerCode": "PTC001",
      "ProductName": "Hàng hóa A",
      "Note": "Ghi chú đơn hàng",
      "CustomerId": 10,
      "SaleId": 5,
      "SaleUserName": "sale01",
      "RouteName": "HCM - Hà Nội",
      "OrderOps": {
        "Id": 1,
        "Status": 3,
        "PhysicalStatus": 53,
        "PicId": 123,
        "PicUserName": "driver01",
        "DisplayOrder": 1
      },
      "OrderFin": {
        "Id": 1,
        "SourceFee": 50000,
        "DestFee": 30000,
        "CollectAmount": 500000
      },
      "Addresses": [
        {
          "AddressType": 1,
          "Address1": "123 Nguyễn Văn Linh",
          "WardId": 100,
          "FullAddress": "123 Nguyễn Văn Linh, Phường X, Quận Y, TP.HCM"
        }
      ],
      "Packages": [
        {
          "Id": 1,
          "Weight": 5.0,
          "Length": 30,
          "Width": 20,
          "Height": 15
        }
      ],
      "MediaItems": [
        {
          "Id": "guid-media-id",
          "Url": "https://storage/path/to/image.jpg",
          "AltText": "Ảnh đơn hàng",
          "Caption": "",
          "DisplayOrder": 1
        }
      ]
    }
  ],
  "TotalRecord": 50,
  "NumberOfPages": 4
}
```

> [!NOTE]
> **Logic nghiệp vụ**
> - API chỉ trả về đơn hàng mà lái xe (`PicId`) đang phụ trách, loại trừ đơn đã hủy.
> - Kết quả mặc định sắp xếp theo `OrderOps.DisplayOrder` tăng dần.
> - Thông tin địa chỉ đầy đủ (FullAddress) và tuyến (RouteName) được xử lý tự động từ WardId.

---

## 2. Sắp xếp thứ tự hiển thị đơn hàng

- **Endpoint**: `POST /api/Deploy/ReorderOrders`
- **Authorization**: `Deploy.ReorderOrders`

**Request Body:**
```json
{
  "Items": [
    {
      "OrderId": 1,
      "DisplayOrder": 1
    },
    {
      "OrderId": 2,
      "DisplayOrder": 2
    }
  ]
}
```

**Request Parameters:**
- `Items` (array, **required**): Danh sách các đơn hàng cần cập nhật thứ tự.
  - `OrderId` (int, **required**): ID đơn hàng.
  - `DisplayOrder` (int, **required**): Thứ tự hiển thị mới.

**Response:**
```json
{
  "Result": 1,
  "Message": null,
  "Data": null
}
```

> [!NOTE]
> **Logic nghiệp vụ**
> - Tham số `Items` không được để trống.
> - Endpoint này cập nhật trực tiếp trường `DisplayOrder` cho tài xế đang thực hiện dựa trên các `OrderId` truyền vào.
> - Thành công trả về `Result = 1` (Success).

