- 월별 캘린더 UI로 작업 현황을 한눈에 확인 가능 - 미입력(빨강), 부분입력(주황), 확인필요(보라), 이상없음(초록) 상태 표시 - 범례 아이콘(●)을 사용한 직관적인 상태 표시 - 날짜 클릭 시 해당일 작업자별 상세 현황 모달 - 작업자 클릭 시 개별 작업 입력/수정 모달 - 휴가 처리 기능 (연차, 반차, 반반차, 조퇴) - 월별 집계 데이터 최적화로 API 호출 최소화 백엔드: - monthly_worker_status, monthly_summary 테이블 추가 - 자동 집계 stored procedure 및 trigger 구현 - 확인필요(12시간 초과) 상태 감지 로직 - 출석 관리 시스템 확장 프론트엔드: - 캘린더 그리드 UI 구현 - 상태별 색상 및 아이콘 표시 - 모달 기반 상세 정보 표시 - 반응형 디자인 적용
68 lines
3.1 KiB
SQL
68 lines
3.1 KiB
SQL
-- 009_add_overtime_warning_columns.sql
|
|
-- monthly_summary 테이블에 12시간 초과(확인필요) 상태 컬럼 추가
|
|
|
|
-- monthly_summary 테이블에 컬럼 추가
|
|
ALTER TABLE monthly_summary
|
|
ADD COLUMN overtime_warning_workers INT DEFAULT 0 COMMENT '확인필요(12시간초과) 작업자 수' AFTER error_workers,
|
|
ADD COLUMN has_overtime_warning BOOLEAN DEFAULT FALSE COMMENT '확인필요 상태 있음' AFTER has_errors;
|
|
|
|
-- UpdateDailySummary 프로시저 업데이트
|
|
DROP PROCEDURE IF EXISTS UpdateDailySummary;
|
|
DELIMITER //
|
|
CREATE PROCEDURE UpdateDailySummary(
|
|
IN p_date DATE
|
|
)
|
|
BEGIN
|
|
DECLARE v_year INT;
|
|
DECLARE v_month INT;
|
|
|
|
SET v_year = YEAR(p_date);
|
|
SET v_month = MONTH(p_date);
|
|
|
|
INSERT INTO monthly_summary (
|
|
year, month, date,
|
|
total_workers, working_workers,
|
|
incomplete_workers, partial_workers, complete_workers,
|
|
overtime_workers, vacation_workers, error_workers, overtime_warning_workers,
|
|
total_work_hours, total_work_count, total_error_count,
|
|
has_issues, has_errors, has_overtime_warning
|
|
)
|
|
SELECT
|
|
v_year, v_month, p_date,
|
|
COUNT(*) as total_workers,
|
|
COUNT(CASE WHEN work_status != 'incomplete' THEN 1 END) as working_workers,
|
|
COUNT(CASE WHEN work_status = 'incomplete' THEN 1 END) as incomplete_workers,
|
|
COUNT(CASE WHEN work_status = 'partial' THEN 1 END) as partial_workers,
|
|
COUNT(CASE WHEN work_status IN ('complete', 'overtime', 'vacation-full', 'vacation-half', 'vacation-quarter', 'vacation-half-half') THEN 1 END) as complete_workers,
|
|
COUNT(CASE WHEN work_status = 'overtime' THEN 1 END) as overtime_workers,
|
|
COUNT(CASE WHEN work_status LIKE 'vacation%' THEN 1 END) as vacation_workers,
|
|
COUNT(CASE WHEN work_status = 'error' THEN 1 END) as error_workers,
|
|
COUNT(CASE WHEN work_status = 'overtime-warning' THEN 1 END) as overtime_warning_workers,
|
|
SUM(total_work_hours) as total_work_hours,
|
|
SUM(total_work_count) as total_work_count,
|
|
SUM(error_work_count) as total_error_count,
|
|
MAX(has_issues) as has_issues,
|
|
MAX(has_error) as has_errors,
|
|
MAX(CASE WHEN work_status = 'overtime-warning' THEN 1 ELSE 0 END) as has_overtime_warning
|
|
FROM monthly_worker_status
|
|
WHERE date = p_date
|
|
ON DUPLICATE KEY UPDATE
|
|
total_workers = VALUES(total_workers),
|
|
working_workers = VALUES(working_workers),
|
|
incomplete_workers = VALUES(incomplete_workers),
|
|
partial_workers = VALUES(partial_workers),
|
|
complete_workers = VALUES(complete_workers),
|
|
overtime_workers = VALUES(overtime_workers),
|
|
vacation_workers = VALUES(vacation_workers),
|
|
error_workers = VALUES(error_workers),
|
|
overtime_warning_workers = VALUES(overtime_warning_workers),
|
|
total_work_hours = VALUES(total_work_hours),
|
|
total_work_count = VALUES(total_work_count),
|
|
total_error_count = VALUES(total_error_count),
|
|
has_issues = VALUES(has_issues),
|
|
has_errors = VALUES(has_errors),
|
|
has_overtime_warning = VALUES(has_overtime_warning),
|
|
last_updated = CURRENT_TIMESTAMP;
|
|
END //
|
|
DELIMITER ;
|