# 5130 프로젝트 문서

## 프로젝트 개요

**5130**은 (주)경동기업의 방화셔터 및 철강 제조업 관리 시스템입니다. PHP 7.3 기반의 레거시 웹 애플리케이션으로, 견적, 출고, 재고, 전자결재 등 제조업 전반의 업무를 관리합니다.

### 기본 정보

| 항목 | 내용 |
|------|------|
| 도메인 | https://5130.co.kr, https://5130.sam.kr (개발) |
| PHP 버전 | 7.3 |
| 데이터베이스 | MySQL 8.0 (chandj) |
| UI 프레임워크 | Bootstrap 5, jQuery |
| 회사 | (주)경동기업, (주)주일철강 |

### 핵심 기능

- **견적 시스템**: 스크린/스라트 방화셔터 견적 산출
- **출고 관리**: 주문 접수부터 출고 완료까지 전체 프로세스
- **수입검사**: 자재 입고 및 품질 검사
- **전자결재**: 품의서, 지출결의서, 연차신청 등
- **재고 관리**: LOT 관리, 자재 입출고
- **Dashboard**: 실시간 현황 및 통계

---

## 기술 스택

```
Backend:    PHP 7.3
Database:   MySQL 8.0 (PDO)
Frontend:   Bootstrap 5, jQuery, Bootstrap Icons
Charts:     (통계 차트용)
Grid:       AG-Grid (일부 모듈)
```

---

## 프로젝트 구조

```
5130/
├── index.php              # 메인 대시보드
├── session.php            # 세션 관리 (.env 로드 포함)
├── common.php             # 공통 유틸리티 함수
├── proDB.php              # JSON API (CRUD 작업)
├── lib/
│   └── mydb.php           # PDO 데이터베이스 연결
│
├── estimate/              # 견적 모듈
├── output/                # 출고 관리
├── work/                  # 작업/생산 관리
├── instock/               # 수입검사/입고
├── lot/                   # LOT 관리
│
├── account/               # 회계 (경동)
├── account_juil/          # 회계 (주일)
├── account_plan/          # 회계 계획
│
├── annualleave/           # 연차 관리
├── askitem/               # 품의서
├── askitem_ER/            # 지출결의서
│
├── notice/                # 공지사항
├── qna/                   # 자료실
├── rnd/                   # 개발일지
│
├── member/                # 회원 관리
├── login/                 # 로그인
│
├── car/                   # 차량 관리
├── lift/                  # 지게차 관리
│
├── bending/               # 벤딩 관리
├── bendingfee/            # 벤딩 비용
│
├── dbeditor/              # phpMyAdmin (DB 관리 도구)
├── DBcontrol/             # DB 제어 유틸
│
├── img/                   # 이미지 리소스
├── js/                    # JavaScript 파일
├── css/                   # CSS 스타일
└── docs/                  # 문서 (현재 폴더)
```

---

## 핵심 모듈 상세

### 1. 견적 모듈 (`estimate/`)

방화셔터(스크린/스라트) 견적 산출 시스템

**주요 파일:**
- `list.php` - 견적 목록
- `write_form.php` - 견적 작성/수정
- `estimate.php` / `estimateSlat.php` - 견적서 출력
- `get_screen_amount.php` - 스크린 금액 계산
- `get_slat_amount.php` - 스라트 금액 계산

**상세 문서:** [estimate/README.md](../estimate/README.md)

### 2. 출고 모듈 (`output/`)

주문 접수부터 출고까지 전체 프로세스 관리 (136개 파일)

**주요 파일:**
- `list.php` - 출고 목록
- `write_form.php` - 출고 작성/수정
- `delivery.php` - 배송 관리
- `statistics.php` - 출고 통계
- `list_ACI.php` - 인정검사 목록
- `write_ACI.php` / `write_ACI_slat.php` - 인정검사 작성

**주요 테이블:** `output`

### 3. 수입검사 모듈 (`instock/`)

자재 입고 및 품질 검사 관리

**주요 파일:**
- `list.php` - 수입검사 목록
- `write_form.php` - 검사 등록
- `i_*.php` - 품목별 검사 양식 (EGI155, GIplate, SUScoil 등)
- `statistics.php` - 구매 통계

**주요 테이블:** `instock`

### 4. 작업 관리 모듈 (`work/`)

생산 작업 및 인계 관리

**주요 파일:**
- `list.php` - 작업 목록
- `write_form.php` - 작업 등록
- `handover_list.php` / `handover_doc.php` - 인계서 관리
- `accountlist.php` - 정산 목록

### 5. 전자결재 (`annualleave/`, `askitem/`, `askitem_ER/`)

**연차 신청 (`annualleave/`):**
- 연차/반차/조퇴 신청 및 승인
- 결재라인 설정

**품의서 (`askitem/`):**
- 물품 구매 등 품의 신청

**지출결의서 (`askitem_ER/`):**
- 비용 지출 결의

**공통 테이블:** `eworks` (전자결재 통합 테이블)

---

## 데이터베이스 구조

### 주요 테이블

| 테이블명 | 설명 |
|----------|------|
| `output` | 출고/주문 정보 |
| `estimate` | 견적 정보 |
| `instock` | 수입검사/입고 |
| `eworks` | 전자결재 (연차, 품의서, 지출결의서) |
| `notice` | 공지사항 |
| `qna` | 자료실 |
| `rnd` | 개발일지 |
| `member` | 회원 정보 |
| `car` | 차량 정보 |
| `lift` | 지게차 정보 |
| `lot` | LOT 정보 |

### 데이터베이스 연결

```php
// lib/mydb.php
function db_connect(){
    loadEnv();
    $db_host = $_ENV['DB_HOST'] ?? 'localhost';
    $db_name = $_ENV['DB_NAME'] ?? 'chandj';
    $db_user = $_ENV['DB_USER'] ?? 'chandj';
    $db_pass = $_ENV['DB_PASS'] ?? '';

    $dsn = "mysql:host=".$db_host.";dbname=".$db_name.";charset=utf8mb4";
    $pdo = new PDO($dsn, $db_user, $db_pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);
    return $pdo;
}
```

---

## 세션 및 인증

### 세션 변수

```php
// session.php에서 관리
$_SESSION["level"]         // 권한 레벨 (1: 관리자)
$_SESSION["name"]          // 사용자 이름
$_SESSION["userid"]        // 사용자 ID
$_SESSION["DB"]            // 데이터베이스명 (기본: chandj)
$_SESSION["eworks_lv"]     // 결재 레벨
$_SESSION["eworks_level"]  // 결재 단계
$_SESSION["position"]      // 직급
$_SESSION["mycompany"]     // 회사 (경동/주일)
$_SESSION["mypart"]        // 부서
$_SESSION["authority"]     // 특수 권한 (ACCOUNT: 회계권한)
```

### 권한 체크

```php
// index.php 예시
if(!isset($_SESSION["level"]) || intval($_SESSION["level"]) > 7) {
    header("Location:" . $WebSite . "login/login_form.php");
    exit;
}
```

---

## API 엔드포인트

### proDB.php - 범용 CRUD API

```
POST /proDB.php
Content-Type: application/json

Parameters:
- table: 테이블명
- command: insert | update | delete
- field: 필드명
- strtmp: 값
- recnum: 레코드 번호 (update/delete 시)

Response: JSON
```

---

## 환경 설정

### .env 파일

```env
DB_HOST=localhost
DB_NAME=chandj
DB_USER=chandj
DB_PASS=password
APP_URL=https://5130.co.kr
```

### Docker 설정 (개발 환경)

- 도메인: `5130.sam.kr`
- PHP 컨테이너: `php73:9000`
- Nginx 프록시 설정 참조: `docker/nginx/nginx.conf`

---

## 코드 패턴

### 목록 페이지 패턴

```php
// list.php 일반 구조
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");

$pdo = db_connect();

// 검색 조건
$where = " WHERE 1=1 ";
if(!empty($search)) {
    $where .= " AND field LIKE '%$search%' ";
}

// 페이징
$sql = "SELECT COUNT(*) FROM table" . $where;
$total = $pdo->query($sql)->fetchColumn();

// 데이터 조회
$sql = "SELECT * FROM table" . $where . " ORDER BY num DESC LIMIT $start, $limit";
$stmh = $pdo->query($sql);
```

### 등록/수정 페이지 패턴

```php
// write_form.php 일반 구조
$mode = $_REQUEST['mode'] ?? 'write';
$num = $_REQUEST['num'] ?? '';

if($mode == 'modify' || $mode == 'view') {
    // 기존 데이터 조회
    $sql = "SELECT * FROM table WHERE num = ?";
    $stmh = $pdo->prepare($sql);
    $stmh->execute([$num]);
    $row = $stmh->fetch();
}

// 폼 처리는 update.php에서
```

---

## 주요 공통 함수

### common.php

```php
// 날짜 관련
specialDate($date)           // 특수 날짜 변환
NullCheckDate($date)         // NULL 날짜 체크
trans_date($date)            // 날짜 형식 변환

// 연차 계산
calculateAnnualLeave($info)  // 연차 계산

// 카테고리
getCategoryByName($name)     // 카테고리 조회

// 모델 선택
selectModel($code)           // 제품 모델 선택
```

---

## 보안 고려사항

### 현재 구현

1. 세션 기반 인증
2. 권한 레벨 체크 (`$_SESSION["level"]`)
3. PDO Prepared Statements (일부)

### 개선 필요 사항

1. CSRF 토큰 미적용
2. 일부 SQL 인젝션 취약점 (직접 쿼리 문자열 연결)
3. XSS 필터링 불완전
4. 입력값 검증 강화 필요

---

## 관련 문서

- [견적 모듈 상세](../estimate/README.md)
- [동적 행 생성 시스템](../README.md)

---

## 변경 이력

| 날짜 | 내용 |
|------|------|
| 2025-12-13 | 초기 문서 작성 (Claude Code 분석) |

---

*이 문서는 코드 분석을 통해 자동 생성되었습니다.*