167 lines
6.2 KiB
Markdown
167 lines
6.2 KiB
Markdown
|
|
# 파트너관리
|
||
|
|
|
||
|
|
## 개요
|
||
|
|
|
||
|
|
파트너관리는 영업파트너(판매자/매니저)의 등록, 수정, 역할 관리, 서류 관리를 수행하는 기능입니다.
|
||
|
|
파트너 등록 신청, 서류 업로드, 역할 부여/위임, 계층 구조(추천인) 관리를 지원합니다.
|
||
|
|
|
||
|
|
- **라우트**: `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 호출
|