# Báo cáo công nợ chuyển khoản ngân hàng theo Sale

## Tổng quan

Trang báo cáo công nợ chuyển khoản ngân hàng theo Sale cung cấp thông tin chi tiết về tình hình thu tiền chuyển khoản của các đơn hàng được phân bổ theo từng sale.

## Đường dẫn

- **Route name**: `report-bankTransferSummaryBySale`
- **Path**: `/bao-cao-cong-no-chuyen-khoan`
- **Component**: `src/views/reports/bankTransferSummaryBySale.vue`

## Quyền truy cập

Cần có quyền: `OrderFinReport.GetBankTransferSummaryBySale`

## Tính năng

### 1. Form tìm kiếm

- **Thời gian** (bắt buộc): Chọn khoảng thời gian để xem báo cáo (theo ngày tạo đơn hàng)
- **Sale** (chỉ Founder): Lọc theo sale cụ thể (nếu không chọn sẽ hiển thị tất cả)
- **Khách hàng**: Lọc theo khách hàng cụ thể

### 2. Tổng quan (Summary Cards)

Hiển thị các thông số tổng hợp:
- **Tổng số đơn**: Tổng số đơn hàng chuyển khoản
- **Tổng tiền cước**: Tổng tiền cước và phí chuyển khoản
- **Chưa thu**: Số tiền và số lượng đơn chưa thu (TransferFeeStage = 1)
- **Đã tạo phiếu**: Số tiền và số lượng đơn đã tạo phiếu thu (TransferFeeStage = 4)
- **Đã thu**: Số tiền và số lượng đơn đã thu tiền (TransferFeeStage = 9)

### 3. Bảng chi tiết theo Sale

Hiển thị chi tiết từng sale với các cột:
- **Sale**: Tên, ID và số điện thoại
- **Tổng đơn**: Tổng số đơn hàng
- **Tổng cước**: Tổng tiền cước (bao gồm tất cả các loại phí)
- **Phí CK**: Phí chuyển khoản
- **Chưa thu**: Số tiền chưa thu và số lượng đơn
- **Đã tạo phiếu**: Số tiền đã tạo phiếu và số lượng đơn
- **Đã thu**: Số tiền đã thu và số lượng đơn
- **Tỷ lệ thu**: Progress bar hiển thị tỷ lệ thu tiền

### 4. Phân trang

Hỗ trợ phân trang với số lượng bản ghi có thể điều chỉnh (mặc định 25 bản ghi/trang)

## API

### Endpoint
```
POST /api/OrderFinReport/GetBankTransferSummaryBySale
```

### Request Body
```json
{
  "pagination": {
    "start": 0,
    "number": 25
  },
  "search": {
    "predicateObject": {
      "startDate": "2024-01-01T00:00:00.000Z",
      "endDate": "2024-12-31T23:59:59.999Z",
      "customerId": null,
      "saleId": null
    }
  },
  "sort": {
    "predicate": "SaleName",
    "reverse": false
  }
}
```

### Response
```json
[
  {
    "SaleId": 123,
    "SaleName": "Nguyễn Văn A",
    "SalePhoneNumber": "0123456789",
    "TotalOrders": 150,
    "SumTotalFee": 15000000.00,
    "TotalTransferFee": 750000.00,
    "NotCollectAmount": 250000.00,
    "NotCollectedCount": 25,
    "CreatedBillAmount": 300000.00,
    "CountCreatedBill": 30,
    "TotalCollected": 200000.00,
    "CountCollected": 20
  }
]
```

## Điều kiện lọc dữ liệu

API chỉ trả về các đơn hàng thỏa mãn:
1. **PayFeeType = 3** (Chuyển khoản ngân hàng)
2. **Status ≠ 8** (Không phải đơn hàng đã hủy)
3. **IsDeleted = 0** (Đơn hàng chưa bị xóa)
4. **Thời gian tạo đơn** trong khoảng StartDate và EndDate
5. **CustomerId** (nếu được chỉ định)
6. **SaleId** (nếu được chỉ định và user là Founder)

## Trạng thái TransferFeeStage

| Giá trị | Mô tả | Màu hiển thị |
|---------|-------|--------------|
| 1 | Chưa thu tiền | Warning (Vàng) |
| 4 | Đã tạo phiếu | Secondary (Xám) |
| 9 | Đã thu tiền | Success (Xanh lá) |

## Phân quyền dữ liệu

- **Founder**: Có thể xem dữ liệu của tất cả sale, có thể lọc theo SaleId
- **Sale**: Chỉ có thể xem dữ liệu của chính mình, tham số SaleId sẽ bị bỏ qua

## Tính toán

### Tỷ lệ thu tiền
```javascript
Tỷ lệ thu = (Đã thu / (Chưa thu + Đã tạo phiếu + Đã thu)) * 100%
```

### Màu sắc Progress Bar
- >= 80%: Success (Xanh lá)
- >= 50%: Info (Xanh dương)
- >= 30%: Warning (Vàng)
- < 30%: Danger (Đỏ)

## Services sử dụng

- `reportService.getBankTransferSummaryBySale()`: Gọi API lấy dữ liệu báo cáo
- `customerService.search()`: Lấy danh sách khách hàng
- `userService.listStaff()`: Lấy danh sách sale (chỉ Founder)

## Dependencies

- `VueDatePicker`: Date range picker
- `DateRangeSidebar`: Component chọn nhanh khoảng thời gian
- `v-select`: Dropdown select component
- `pager`: Pagination component
- `moment`: Xử lý date/time

## Cách sử dụng

1. Truy cập trang qua menu hoặc URL `/bao-cao-cong-no-chuyen-khoan`
2. Chọn khoảng thời gian cần xem (mặc định là tháng hiện tại)
3. (Founder) Chọn sale cụ thể hoặc để trống để xem tất cả
4. (Tùy chọn) Chọn khách hàng cụ thể
5. Nhấn "Tìm kiếm" để xem báo cáo
6. Xem tổng quan và chi tiết theo sale
7. Sử dụng phân trang nếu có nhiều kết quả

## Lưu ý

- Thời gian tìm kiếm là bắt buộc
- Dữ liệu được tính theo múi giờ UTC
- Chỉ hiển thị các đơn hàng có phương thức thanh toán là chuyển khoản ngân hàng
- Sale thông thường chỉ có thể xem dữ liệu của chính mình
- Founder có thể xem dữ liệu của tất cả sale

