fix: daily_work_reports 테이블명 충돌 → partner_work_reports로 변경
기존 TBM 시스템의 daily_work_reports 테이블과 이름 충돌. 협력업체 업무현황 테이블을 partner_work_reports로 분리. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,27 @@
|
||||
ALTER TABLE partner_work_checkins
|
||||
MODIFY check_in_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- 4-b. 일정당 하루 1건 업무보고 보장
|
||||
ALTER TABLE daily_work_reports
|
||||
ADD UNIQUE INDEX uq_schedule_report_date (schedule_id, report_date);
|
||||
-- 4-b. partner_work_reports 테이블 생성 (daily_work_reports 이름 충돌 → 별도 이름)
|
||||
CREATE TABLE IF NOT EXISTS partner_work_reports (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
schedule_id INT NOT NULL,
|
||||
checkin_id INT NOT NULL,
|
||||
company_id INT NOT NULL,
|
||||
report_date DATE NOT NULL,
|
||||
reporter_id INT NOT NULL,
|
||||
actual_workers INT,
|
||||
work_content TEXT,
|
||||
progress_rate TINYINT,
|
||||
issues TEXT,
|
||||
next_plan TEXT,
|
||||
confirmed_by INT,
|
||||
confirmed_at DATETIME,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_pwr_report_date (report_date),
|
||||
INDEX idx_pwr_schedule (schedule_id),
|
||||
UNIQUE INDEX uq_pwr_schedule_report_date (schedule_id, report_date),
|
||||
CONSTRAINT fk_pwr_schedule FOREIGN KEY (schedule_id) REFERENCES partner_schedules(id),
|
||||
CONSTRAINT fk_pwr_checkin FOREIGN KEY (checkin_id) REFERENCES partner_work_checkins(id),
|
||||
CONSTRAINT fk_pwr_company FOREIGN KEY (company_id) REFERENCES partner_companies(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
@@ -98,9 +98,9 @@ CREATE TABLE IF NOT EXISTS partner_work_checkins (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- ============================================================
|
||||
-- 5. daily_work_reports (일일 작업 보고)
|
||||
-- 5. partner_work_reports (협력업체 일일 작업 보고)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS daily_work_reports (
|
||||
CREATE TABLE IF NOT EXISTS partner_work_reports (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
schedule_id INT NOT NULL,
|
||||
checkin_id INT NOT NULL,
|
||||
|
||||
@@ -30,7 +30,7 @@ async function findTodayByCompany(companyId) {
|
||||
(dwr.id IS NOT NULL) AS has_work_report
|
||||
FROM partner_work_checkins pc
|
||||
LEFT JOIN partner_schedules ps ON pc.schedule_id = ps.id
|
||||
LEFT JOIN daily_work_reports dwr ON dwr.checkin_id = pc.id
|
||||
LEFT JOIN partner_work_reports dwr ON dwr.checkin_id = pc.id
|
||||
WHERE pc.company_id = ? AND DATE(pc.check_in_time) = CURDATE()
|
||||
ORDER BY pc.check_in_time DESC`, [companyId]);
|
||||
return rows;
|
||||
|
||||
@@ -4,7 +4,7 @@ async function findAll({ company_id, date_from, date_to, schedule_id, confirmed,
|
||||
const db = getPool();
|
||||
let sql = `SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
|
||||
su_reporter.name AS reporter_name, su_confirmer.name AS confirmed_by_name
|
||||
FROM daily_work_reports wr
|
||||
FROM partner_work_reports wr
|
||||
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
|
||||
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.id
|
||||
LEFT JOIN sso_users su_reporter ON wr.reporter_id = su_reporter.user_id
|
||||
@@ -30,7 +30,7 @@ async function findById(id) {
|
||||
const [rows] = await db.query(
|
||||
`SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
|
||||
su_reporter.name AS reporter_name, su_confirmer.name AS confirmed_by_name
|
||||
FROM daily_work_reports wr
|
||||
FROM partner_work_reports wr
|
||||
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
|
||||
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.id
|
||||
LEFT JOIN sso_users su_reporter ON wr.reporter_id = su_reporter.user_id
|
||||
@@ -43,7 +43,7 @@ async function findByCheckin(checkinId) {
|
||||
const db = getPool();
|
||||
const [rows] = await db.query(
|
||||
`SELECT wr.*, pc.company_name
|
||||
FROM daily_work_reports wr
|
||||
FROM partner_work_reports wr
|
||||
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
|
||||
WHERE wr.checkin_id = ?`, [checkinId]);
|
||||
return rows[0] || null;
|
||||
@@ -52,7 +52,7 @@ async function findByCheckin(checkinId) {
|
||||
async function create(data) {
|
||||
const db = getPool();
|
||||
const [result] = await db.query(
|
||||
`INSERT INTO daily_work_reports (schedule_id, checkin_id, company_id, report_date, reporter_id, actual_workers, work_content, progress_rate, issues, next_plan)
|
||||
`INSERT INTO partner_work_reports (schedule_id, checkin_id, company_id, report_date, reporter_id, actual_workers, work_content, progress_rate, issues, next_plan)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
[data.schedule_id || null, data.checkin_id || null, data.company_id,
|
||||
data.report_date, data.reporter_id, data.actual_workers || null,
|
||||
@@ -72,14 +72,14 @@ async function update(id, data) {
|
||||
if (data.next_plan !== undefined) { fields.push('next_plan = ?'); values.push(data.next_plan || null); }
|
||||
if (fields.length === 0) return findById(id);
|
||||
values.push(id);
|
||||
await db.query(`UPDATE daily_work_reports SET ${fields.join(', ')} WHERE id = ?`, values);
|
||||
await db.query(`UPDATE partner_work_reports SET ${fields.join(', ')} WHERE id = ?`, values);
|
||||
return findById(id);
|
||||
}
|
||||
|
||||
async function confirm(id, confirmedBy) {
|
||||
const db = getPool();
|
||||
await db.query(
|
||||
'UPDATE daily_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL',
|
||||
'UPDATE partner_work_reports SET confirmed_by = ?, confirmed_at = NOW() WHERE id = ? AND confirmed_by IS NULL',
|
||||
[confirmedBy, id]);
|
||||
return findById(id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user