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
|
ALTER TABLE partner_work_checkins
|
||||||
MODIFY check_in_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
MODIFY check_in_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
-- 4-b. 일정당 하루 1건 업무보고 보장
|
-- 4-b. partner_work_reports 테이블 생성 (daily_work_reports 이름 충돌 → 별도 이름)
|
||||||
ALTER TABLE daily_work_reports
|
CREATE TABLE IF NOT EXISTS partner_work_reports (
|
||||||
ADD UNIQUE INDEX uq_schedule_report_date (schedule_id, report_date);
|
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;
|
) 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,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
schedule_id INT NOT NULL,
|
schedule_id INT NOT NULL,
|
||||||
checkin_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
|
(dwr.id IS NOT NULL) AS has_work_report
|
||||||
FROM partner_work_checkins pc
|
FROM partner_work_checkins pc
|
||||||
LEFT JOIN partner_schedules ps ON pc.schedule_id = ps.id
|
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()
|
WHERE pc.company_id = ? AND DATE(pc.check_in_time) = CURDATE()
|
||||||
ORDER BY pc.check_in_time DESC`, [companyId]);
|
ORDER BY pc.check_in_time DESC`, [companyId]);
|
||||||
return rows;
|
return rows;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ async function findAll({ company_id, date_from, date_to, schedule_id, confirmed,
|
|||||||
const db = getPool();
|
const db = getPool();
|
||||||
let sql = `SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
|
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
|
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_companies pc ON wr.company_id = pc.id
|
||||||
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.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
|
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(
|
const [rows] = await db.query(
|
||||||
`SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
|
`SELECT wr.*, pc.company_name, ps.work_description AS schedule_description,
|
||||||
su_reporter.name AS reporter_name, su_confirmer.name AS confirmed_by_name
|
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_companies pc ON wr.company_id = pc.id
|
||||||
LEFT JOIN partner_schedules ps ON wr.schedule_id = ps.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
|
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 db = getPool();
|
||||||
const [rows] = await db.query(
|
const [rows] = await db.query(
|
||||||
`SELECT wr.*, pc.company_name
|
`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
|
LEFT JOIN partner_companies pc ON wr.company_id = pc.id
|
||||||
WHERE wr.checkin_id = ?`, [checkinId]);
|
WHERE wr.checkin_id = ?`, [checkinId]);
|
||||||
return rows[0] || null;
|
return rows[0] || null;
|
||||||
@@ -52,7 +52,7 @@ async function findByCheckin(checkinId) {
|
|||||||
async function create(data) {
|
async function create(data) {
|
||||||
const db = getPool();
|
const db = getPool();
|
||||||
const [result] = await db.query(
|
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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||||
[data.schedule_id || null, data.checkin_id || null, data.company_id,
|
[data.schedule_id || null, data.checkin_id || null, data.company_id,
|
||||||
data.report_date, data.reporter_id, data.actual_workers || null,
|
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 (data.next_plan !== undefined) { fields.push('next_plan = ?'); values.push(data.next_plan || null); }
|
||||||
if (fields.length === 0) return findById(id);
|
if (fields.length === 0) return findById(id);
|
||||||
values.push(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);
|
return findById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function confirm(id, confirmedBy) {
|
async function confirm(id, confirmedBy) {
|
||||||
const db = getPool();
|
const db = getPool();
|
||||||
await db.query(
|
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]);
|
[confirmedBy, id]);
|
||||||
return findById(id);
|
return findById(id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user