# 파트너관리

## 개요

파트너관리는 영업파트너(판매자/매니저)의 등록, 수정, 역할 관리, 서류 관리를 수행하는 기능입니다.
파트너 등록 신청, 서류 업로드, 역할 부여/위임, 계층 구조(추천인) 관리를 지원합니다.

- **라우트**: `GET /sales/managers`
- **미들웨어**: `auth`, `hq.member`
- **UI 기술**: Blade + HTMX + Alpine.js + Tailwind CSS

## 파일 구조

```
mng/
├── app/Http/Controllers/Sales/
│   └── SalesManagerController.php        # 메인 컨트롤러 (425줄)
├── app/Services/Sales/
│   └── SalesManagerService.php           # 비즈니스 로직 서비스
├── app/Models/Sales/
│   ├── SalesPartner.php                  # 영업파트너 모델
│   └── SalesManagerDocument.php          # 파트너 서류 모델
└── resources/views/sales/managers/
    ├── index.blade.php                   # 파트너 목록
    ├── create.blade.php                  # 등록 폼
    ├── show.blade.php                    # 상세 페이지
    ├── edit.blade.php                    # 수정 폼
    └── partials/
        ├── show-modal.blade.php          # 상세 모달
        └── edit-modal.blade.php          # 수정 모달

api/
└── database/migrations/
    └── 2026_01_29_100000_create_sales_partners_table.php
```

## 라우트

```php
// routes/web.php (sales prefix 그룹 내)

// Resource 라우트
GET    /managers                         → index()     파트너 목록
GET    /managers/create                  → create()    등록 폼
POST   /managers                         → store()     등록 처리
GET    /managers/{id}                    → show()      상세 페이지
GET    /managers/{id}/edit               → edit()      수정 폼
PUT    /managers/{id}                    → update()    수정 처리
DELETE /managers/{id}                    → destroy()   비활성화 (관리자)

// 추가 라우트
GET    /managers/{id}/modal-show         → modalShow()        상세 모달
GET    /managers/{id}/modal-edit         → modalEdit()        수정 모달
POST   /managers/{id}/approve            → approve()          승인
POST   /managers/{id}/reject             → reject()           반려
POST   /managers/{id}/delegate-role      → delegateRole()     역할 위임
POST   /managers/{id}/assign-role        → assignRole()       역할 부여
POST   /managers/{id}/remove-role        → removeRole()       역할 제거
GET    /managers/{id}/documents/{docId}/download → downloadDocument() 서류 다운로드
DELETE /managers/{id}/documents/{docId}  → deleteDocument()   서류 삭제
```

## 컨트롤러

### SalesManagerController

| 메서드 | HTTP | 설명 |
|--------|------|------|
| `index()` | GET | 파트너 목록 (현재 사용자 유치분) |
| `create()` | GET | 등록 폼 |
| `store()` | POST | 파트너 등록 (서류 업로드 포함) |
| `show()` | GET | 상세 페이지 |
| `edit()` | GET | 수정 폼 |
| `update()` | PUT | 정보 수정 |
| `destroy()` | DELETE | 비활성화 (관리자 전용) |
| `modalShow()` | GET | 상세 모달 (HTMX) |
| `modalEdit()` | GET | 수정 모달 (HTMX) |
| `delegateRole()` | POST | 상담매니저 역할 위임 |
| `assignRole()` | POST | 역할 부여 (sales/manager) |
| `removeRole()` | POST | 역할 제거 |
| `downloadDocument()` | GET | 서류 파일 다운로드 |
| `deleteDocument()` | DELETE | 서류 파일 삭제 |

### SalesManagerService

| 메서드 | 설명 |
|--------|------|
| `getSalesPartners()` | 필터 적용 파트너 목록 조회 |
| `getStats()` | 파트너 통계 계산 |
| `getApprovalStats()` | 승인 관련 통계 |
| `createSalesPartner()` | 파트너 생성 |
| `updateSalesPartner()` | 파트너 수정 |
| `approve()` | 승인 처리 |
| `reject()` | 반려 처리 |

## 모델

### SalesPartner

**테이블**: `sales_partners`

| 필드 | 타입 | 설명 |
|------|------|------|
| `user_id` | bigint (FK) | 연결된 사용자 ID |
| `partner_code` | string | 파트너 고유 코드 (SP + 연도 + 순번) |
| `partner_type` | string | individual(개인) / corporate(법인) |
| `commission_rate` | decimal(5,2) | 기본 수수료율 |
| `manager_commission_rate` | decimal(5,2) | 관리자 수수료율 |
| `bank_name` | string | 은행명 |
| `account_number` | string | 계좌번호 |
| `account_holder` | string | 예금주 |
| `status` | string | pending / active / inactive / suspended |
| `approved_at` | timestamp | 승인 일시 |
| `approved_by` | bigint (FK) | 승인자 ID |
| `total_contracts` | int | 총 계약 건수 (캐시) |
| `total_commission` | decimal | 총 수당 (캐시) |

- SoftDeletes 적용

### SalesManagerDocument

**테이블**: `sales_manager_documents`

- 파트너 등록 시 필수 서류 관리 (신분증, 통장사본 등)
- `DOCUMENT_TYPES` 상수로 서류 타입 정의

### 파트너 계층 구조

```
User 모델의 parent_id를 통한 다단계 구조:

추천인 (parent)
  └── 영업파트너 (children)
       └── 하위 파트너 (children)
```

## 뷰 구성

```
┌─ 페이지 헤더 ──────────────────────
│  제목: "파트너관리"
│  [등록] 버튼
│
├─ 통계 카드 ────────────────────────
│  전체 | 활성 | 대기중 | 비활성
│
├─ 필터 영역 ────────────────────────
│  검색 (이름, 아이디) | 상태 필터 | 타입 필터
│
├─ 파트너 목록 테이블 ───────────────
│  이름 | 파트너코드 | 타입 | 수수료율 | 계약수 | 상태 | 작업
│  └─ 작업: 상세, 수정, 역할관리, 승인/반려
│
├─ 등록 폼 ─────────────────────────
│  사용자 정보, 파트너 타입, 수수료율
│  계좌 정보, 서류 업로드
│
└─ 상세/수정 모달 ──────────────────
   파트너 정보, 계층, 서류 목록, 역할 관리
```

## HTMX 호환성

- Blade + HTMX 기반으로 **HX-Redirect 불필요**
- 모달로 상세/수정 처리
- HTMX 또는 JavaScript AJAX 호출
