diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..122aaf4 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(echo:*)", + "Bash(cat:*)" + ] + } +} diff --git a/DB_SYNC_GUIDE.md b/DB_SYNC_GUIDE.md index 02fdc1f..1f0456a 100644 --- a/DB_SYNC_GUIDE.md +++ b/DB_SYNC_GUIDE.md @@ -193,7 +193,7 @@ mysqldump -h 127.0.0.1 -u root -p chandj > /tmp/chandj_backup.sql ### 로컬로 다운로드 (PowerShell) ```powershell -scp pro@114.203.209.83:/tmp/chandj_backup.sql .\chandj_backup.sql +scp pro@114.203.209.83:/chandj_backup.sql .\chandj_backup.sql ``` ### 로컬 Docker에 적용 diff --git a/GIT_AUTO_GUIDE.md b/GIT_AUTO_GUIDE.md new file mode 100644 index 0000000..3dc4149 --- /dev/null +++ b/GIT_AUTO_GUIDE.md @@ -0,0 +1,81 @@ +# Git 자동화 가이드 + +## 개요 + +`g` 명령어를 사용하여 Git 작업(`git add .`, `git commit`, `git push`)을 한 번에 자동화할 수 있습니다. + +## 사용 방법 + +```powershell +g "커밋 메시지" +``` + +### 예시 + +```powershell +g "sales 로컬파일 로그인 수정" +``` + +이 명령어는 다음을 자동으로 실행합니다: +1. `git add .` - 모든 변경사항 스테이징 +2. `git commit -m "sales 로컬파일 로그인 수정"` - 커밋 생성 +3. `git push` - 원격 저장소에 푸시 + +## 설정 완료 확인 + +새로운 PowerShell 창을 열거나 다음 명령어로 함수를 로드하세요: + +```powershell +. $PROFILE +``` + +함수가 제대로 로드되었는지 확인: + +```powershell +Get-Command g +``` + +## 문제 해결 + +### 함수가 인식되지 않는 경우 + +1. **프로필 파일 다시 로드**: + ```powershell + . $PROFILE + ``` + +2. **새 PowerShell 창 열기**: + - 현재 창을 닫고 새 PowerShell 창을 엽니다. + +3. **프로필 파일 위치 확인**: + ```powershell + $PROFILE + ``` + +4. **프로필 파일 내용 확인**: + ```powershell + Get-Content $PROFILE + ``` + +### 실행 정책 오류가 발생하는 경우 + +```powershell +Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser +``` + +## 추가 기능 + +현재 함수는 다음을 포함합니다: +- ✅ 각 단계별 진행 상황 표시 +- ✅ 에러 발생 시 중단 및 메시지 표시 +- ✅ 색상으로 구분된 출력 + +## 파일 위치 + +- **프로필 파일**: `$PROFILE` (일반적으로 `C:\Users\사용자명\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1`) +- **스크립트 파일**: `git-auto.ps1` (프로젝트 루트) + +--- + +**마지막 업데이트**: 2025-01-06 + diff --git a/git-auto.ps1 b/git-auto.ps1 new file mode 100644 index 0000000..87c7776 --- /dev/null +++ b/git-auto.ps1 @@ -0,0 +1,52 @@ +# Git 자동화 스크립트 +# 사용법: g "커밋 메시지" + +function g { + param( + [Parameter(Mandatory=$true)] + [string]$message + ) + + Write-Host "========================================" -ForegroundColor Cyan + Write-Host "Git 자동화 시작" -ForegroundColor Cyan + Write-Host "========================================" -ForegroundColor Cyan + Write-Host "" + + # 1. git add . + Write-Host "▶ git add . 실행 중..." -ForegroundColor Yellow + git add . + if ($LASTEXITCODE -ne 0) { + Write-Host "❌ git add 실패" -ForegroundColor Red + return + } + Write-Host "✅ git add 완료" -ForegroundColor Green + Write-Host "" + + # 2. git commit + Write-Host "▶ git commit 실행 중..." -ForegroundColor Yellow + Write-Host " 메시지: $message" -ForegroundColor Gray + git commit -m "$message" + if ($LASTEXITCODE -ne 0) { + Write-Host "❌ git commit 실패" -ForegroundColor Red + Write-Host " (변경사항이 없거나 이미 커밋된 상태일 수 있습니다)" -ForegroundColor Yellow + return + } + Write-Host "✅ git commit 완료" -ForegroundColor Green + Write-Host "" + + # 3. git push + Write-Host "▶ git push 실행 중..." -ForegroundColor Yellow + git push + if ($LASTEXITCODE -ne 0) { + Write-Host "❌ git push 실패" -ForegroundColor Red + Write-Host " (원격 저장소 설정을 확인하세요)" -ForegroundColor Yellow + return + } + Write-Host "✅ git push 완료" -ForegroundColor Green + Write-Host "" + + Write-Host "========================================" -ForegroundColor Cyan + Write-Host "✅ 모든 작업 완료!" -ForegroundColor Green + Write-Host "========================================" -ForegroundColor Cyan +} + diff --git a/sales_process_plan.md b/sales_process_plan.md index a6a86ab..30f71f0 100644 --- a/sales_process_plan.md +++ b/sales_process_plan.md @@ -1,9 +1,9 @@ -# 영업관리자 프로세스 및 테넌트 등록 관리 계획 +# 영업파트너 프로세스 및 테넌트 등록 관리 계획 -본 문서는 영업관리자가 자신이 관리하는 테넌트를 등록하고, 상품 계약을 통해 발생하는 수익을 체계적으로 관리하며, 영업 프로세스(시나리오)를 기록하기 위한 구현 계획을 담고 있습니다. +본 문서는 영업파트너가 자신이 관리하는 테넌트를 등록하고, 상품 계약을 통해 발생하는 수익을 체계적으로 관리하며, 영업 프로세스(시나리오)를 기록하기 위한 구현 계획을 담고 있습니다. ## 1. 개요 -영업관리자는 자신의 활동 결과인 테넌트와 계약 정보를 시스템에 기록합니다. 이 데이터는 영업관리자의 **수익(Commission)** 근거가 되며, **운영팀(Operator)**은 이를 확인하고 승인함으로써 최종 정산이 이루어집니다. +영업파트너는 자신의 활동 결과인 테넌트와 계약 정보를 시스템에 기록합니다. 이 데이터는 영업파트너의 **수익(Commission)** 근거가 되며, **운영팀(Operator)**은 이를 확인하고 승인함으로써 최종 정산이 이루어집니다. --- @@ -11,7 +11,7 @@ 제공된 SQL 파일을 실행하면 다음과 같은 구조가 생성됩니다. ### 2.1 sales_tenants (테넌트 관리) -- 영업관리자와 1:N 관계로 매칭되는 고객사 정보. +- 영업파트너와 1:N 관계로 매칭되는 고객사 정보. - 상태(status) 변화를 통해 리드(Lead)에서 계약(Active)까지의 단계 관리. ### 2.2 sales_tenant_products (계약 및 수익 관리) @@ -23,11 +23,11 @@ ## 3. 영업 프로세스 기록 관리 계획 (C:\Users\light\sam\sales\sales_scenario) -영업관리자의 프로세스를 `C:\Users\aweso\sam\sales\sales_scenario`에 기록하고 활용하는 상세 계획입니다. +영업파트너의 프로세스를 `C:\Users\aweso\sam\sales\sales_scenario`에 기록하고 활용하는 상세 계획입니다. ### 3.1 시나리오 기반 체크리스트 통합 - 신규 테넌트 등록 시, `sales_scenario_checklist` 테이블에 해당 테넌트용 체크리스트를 자동 생성합니다. -- 영업관리자는 7단계(또는 설정된 단계)의 영업 프로세스를 진행하며 각 체크포인트를 달성할 때마다 체크합니다. +- 영업파트너는 7단계(또는 설정된 단계)의 영업 프로세스를 진행하며 각 체크포인트를 달성할 때마다 체크합니다. ### 3.2 활동 로그 (sales_scenario_logs) - 체크리스트 이외의 구체적인 상담 내역이나 영업 전략을 텍스트로 기록합니다. @@ -42,7 +42,7 @@ - 테넌트 목록에서 '상품/계약 추가' 기능 구현. ### Step 2: 수익 대시보드 구축 -- 영업관리자가 자신의 누적 수익(승인됨/대기중)을 한눈에 볼 수 있는 통계 카드 UI 구현. +- 영업파트너가 자신의 누적 수익(승인됨/대기중)을 한눈에 볼 수 있는 통계 카드 UI 구현. - `sales_tenant_products` 테이블의 금액 합산 연동. ### Step 3: 운영팀 승인 프로세스 diff --git a/salesmanagement/api/company_info.php b/salesmanagement/api/company_info.php index 340919d..d3ab414 100644 --- a/salesmanagement/api/company_info.php +++ b/salesmanagement/api/company_info.php @@ -187,7 +187,7 @@ $roleData = [ ], 'current_user' => [ "id" => "user_sales_admin", - "name" => "영업관리자", + "name" => "영업파트너", "role" => "영업관리", "sub_managers" => [ [ diff --git a/salesmanagement/api/init_db.php b/salesmanagement/api/init_db.php index 07dcbe8..d43de2a 100644 --- a/salesmanagement/api/init_db.php +++ b/salesmanagement/api/init_db.php @@ -53,16 +53,16 @@ try { $stmt->execute(); } - // 기본 영업관리자 계정 생성 + // 기본 영업파트너 계정 생성 $check = $pdo->prepare("SELECT id FROM sales_member WHERE member_id = 'sales'"); $check->execute(); if (!$check->fetch()) { - $stmt = $pdo->prepare("INSERT INTO sales_member (member_id, password, name, role) VALUES ('sales', 'sales', '영업관리자', 'sales_admin')"); + $stmt = $pdo->prepare("INSERT INTO sales_member (member_id, password, name, role) VALUES ('sales', 'sales', '영업파트너', 'sales_admin')"); $stmt->execute(); } $sales_id = $pdo->lastInsertId() ?: 2; - // 기본 매니저 계정 생성 (영업관리자 하위) + // 기본 매니저 계정 생성 (영업파트너 하위) $check = $pdo->prepare("SELECT id FROM sales_member WHERE member_id = 'manager'"); $check->execute(); if (!$check->fetch()) { @@ -77,7 +77,7 @@ try { if (!$check->fetch()) { $stmt = $pdo->prepare("INSERT INTO sales_record (member_id, customer_name, contract_date, amount) VALUES (?, ?, ?, ?)"); - // 영업관리자(sales) 직접 실적 + // 영업파트너(sales) 직접 실적 $stmt->execute([$sales_id, '스타트업 A', '2024-12-01', 25000000]); $stmt->execute([$sales_id, '벤처기업 B', '2024-12-10', 30000000]); diff --git a/salesmanagement/api/sales_members.php b/salesmanagement/api/sales_members.php index f85a207..d2f08f7 100644 --- a/salesmanagement/api/sales_members.php +++ b/salesmanagement/api/sales_members.php @@ -85,7 +85,7 @@ try { return; } if ($member_id === 'sales' && $password === 'sales') { - $pdo->prepare("INSERT IGNORE INTO sales_member (member_id, password, name, role) VALUES ('sales', 'sales', '영업관리자', 'sales_admin')")->execute(); + $pdo->prepare("INSERT IGNORE INTO sales_member (member_id, password, name, role) VALUES ('sales', 'sales', '영업파트너', 'sales_admin')")->execute(); $stmt = $pdo->prepare("SELECT * FROM sales_member WHERE member_id = 'sales'"); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); diff --git a/salesmanagement/api/sales_tenants.php b/salesmanagement/api/sales_tenants.php index 3040945..a3d18da 100644 --- a/salesmanagement/api/sales_tenants.php +++ b/salesmanagement/api/sales_tenants.php @@ -33,7 +33,7 @@ function checkTenantPermission($pdo, $tenant_id, $currentUser) { return $tenant['sales_manager_id'] == $currentUser['id']; } - // 영업관리자는 본인이 등록했거나, 본인이 담당 매니저인 경우 가능 + // 영업파트너는 본인이 등록했거나, 본인이 담당 매니저인 경우 가능 return ($tenant['manager_id'] == $currentUser['id'] || $tenant['sales_manager_id'] == $currentUser['id']); } @@ -41,8 +41,8 @@ function checkTenantPermission($pdo, $tenant_id, $currentUser) { $pdo->exec(" CREATE TABLE IF NOT EXISTS `sales_tenants` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `manager_id` int(11) NOT NULL COMMENT '영업한 영업관리자 ID', - `sales_manager_id` int(11) DEFAULT NULL COMMENT '매칭된 매니저 ID (영업관리자 본인 또는 별도 매니저)', + `manager_id` int(11) NOT NULL COMMENT '영업한 영업파트너 ID', + `sales_manager_id` int(11) DEFAULT NULL COMMENT '매칭된 매니저 ID (영업파트너 본인 또는 별도 매니저)', `tenant_name` varchar(200) NOT NULL, `representative` varchar(100) DEFAULT NULL, `business_no` varchar(20) DEFAULT NULL, @@ -180,7 +180,7 @@ try { switch ($method) { case 'GET': if ($action === 'list_tenants') { - // 운영자는 모든 테넌트, 영업관리/매니저는 본인 소속 테넌트만 + // 운영자는 모든 테넌트, 영업파트너/매니저는 본인 소속 테넌트만 if ($currentUser['role'] === 'operator') { $stmt = $pdo->prepare(" SELECT t.*, m.name as register_name, m.role as register_role, m2.name as manager_name, m2.role as manager_role @@ -203,7 +203,7 @@ try { "); $stmt->execute([$currentUser['id']]); } else { - // 영업관리자는 본인이 영업했거나, 본인이 매니저로 배정된 테넌트 조회 + // 영업파트너는 본인이 영업했거나, 본인이 매니저로 배정된 테넌트 조회 $stmt = $pdo->prepare(" SELECT t.*, m.name as register_name, m.role as register_role, m2.name as manager_name, m2.role as manager_role FROM sales_tenants t @@ -365,7 +365,7 @@ try { $manager_id = $row['manager_id']; $amount = $row['contract_amount']; - // 영업관리자 계층 확인 + // 영업파트너 계층 확인 // 1. 등록자 본인이 sales_admin인지 확인 // 2. 상위(parent)가 sales_admin인지 확인 $sales_admin_count = 0; @@ -600,7 +600,7 @@ try { if (!$tenant_id) throw new Exception("테넌트 ID가 누락되었습니다."); - // 권한 확인: 배지 지정은 운영자 또는 해당 테넌트를 등록한 영업관리자만 가능 + // 권한 확인: 배지 지정은 운영자 또는 해당 테넌트를 등록한 영업파트너만 가능 $stmt = $pdo->prepare("SELECT manager_id FROM sales_tenants WHERE id = ?"); $stmt->execute([$tenant_id]); $t = $stmt->fetch(PDO::FETCH_ASSOC); diff --git a/salesmanagement/index.php b/salesmanagement/index.php index 487c8be..4eb8070 100644 --- a/salesmanagement/index.php +++ b/salesmanagement/index.php @@ -805,7 +805,7 @@ {detailModalUser.name} ({detailModalUser.member_id}) 하위 멤버 -

이 영업관리자에게 소속된 모든 매니저 목록입니다.

+

이 영업파트너에게 소속된 모든 매니저 목록입니다.