From 9b1f42c4ec0a4652de50bf5e0244e533910323d6 Mon Sep 17 00:00:00 2001 From: RKWojs Date: Fri, 14 Nov 2025 10:01:49 +0100 Subject: [PATCH] feat: add completion_date field to projects and update related functionalities in forms and queries --- migrate-add-completion-date.mjs | 29 +++++++++++++++++++++++++++++ src/app/projects/[id]/page.js | 10 ++++++++++ src/components/ProjectForm.js | 19 ++++++++++++++++++- src/lib/init-db.js | 9 +++++++++ src/lib/queries/projects.js | 8 +++++--- 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 migrate-add-completion-date.mjs diff --git a/migrate-add-completion-date.mjs b/migrate-add-completion-date.mjs new file mode 100644 index 0000000..aeef859 --- /dev/null +++ b/migrate-add-completion-date.mjs @@ -0,0 +1,29 @@ +import db from "./src/lib/db.js"; + +export default function migrateAddCompletionDate() { + try { + // First, check if actual_completion_date exists and rename it to completion_date + const columns = db.prepare("PRAGMA table_info(projects)").all(); + const hasActualCompletionDate = columns.some(col => col.name === 'actual_completion_date'); + const hasCompletionDate = columns.some(col => col.name === 'completion_date'); + + if (hasActualCompletionDate && !hasCompletionDate) { + // Rename the column + db.exec(` + ALTER TABLE projects RENAME COLUMN actual_completion_date TO completion_date; + `); + console.log("Migration completed: Renamed actual_completion_date to completion_date"); + } else if (!hasActualCompletionDate && !hasCompletionDate) { + // Add the column if it doesn't exist + db.exec(` + ALTER TABLE projects ADD COLUMN completion_date TEXT; + `); + console.log("Migration completed: Added completion_date column to projects table"); + } else if (hasCompletionDate) { + console.log("Migration skipped: completion_date column already exists"); + } + } catch (error) { + console.error("Migration failed:", error); + throw error; + } +} \ No newline at end of file diff --git a/src/app/projects/[id]/page.js b/src/app/projects/[id]/page.js index 26ba8dd..a23c89d 100644 --- a/src/app/projects/[id]/page.js +++ b/src/app/projects/[id]/page.js @@ -405,6 +405,16 @@ export default function ProjectViewPage() { currentValue={project.finish_date} label="Termin zakończenia" /> + {project.completion_date && ( +
+ + Data zakończenia projektu + +

+ {formatDate(project.completion_date)} +

+
+ )}
WP diff --git a/src/components/ProjectForm.js b/src/components/ProjectForm.js index 3fa325b..ca6218c 100644 --- a/src/components/ProjectForm.js +++ b/src/components/ProjectForm.js @@ -22,6 +22,7 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref) city: "", investment_number: "", finish_date: "", + completion_date: "", wp: "", contact: "", notes: "", @@ -62,6 +63,7 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref) city: "", investment_number: "", finish_date: "", + completion_date: "", wp: "", contact: "", notes: "", @@ -74,10 +76,13 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref) project_type: initialData.project_type || "design", assigned_to: initialData.assigned_to || "", wartosc_zlecenia: initialData.wartosc_zlecenia || "", - // Format finish_date for input if it exists + // Format dates for input if they exist finish_date: initialData.finish_date ? formatDateForInput(initialData.finish_date) : "", + completion_date: initialData.completion_date + ? formatDateForInput(initialData.completion_date) + : "", }); } }, [initialData]); @@ -295,6 +300,18 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref) onChange={handleChange} />
+ +
+ + +
diff --git a/src/lib/init-db.js b/src/lib/init-db.js index fbd0287..b9ab45d 100644 --- a/src/lib/init-db.js +++ b/src/lib/init-db.js @@ -27,6 +27,7 @@ export default function initializeDatabase() { city TEXT, investment_number TEXT, finish_date TEXT, + completion_date TEXT, wp TEXT, contact TEXT, notes TEXT, @@ -280,6 +281,14 @@ export default function initializeDatabase() { // Column already exists, ignore error } + try { + db.exec(` + ALTER TABLE projects ADD COLUMN completion_date TEXT; + `); + } catch (e) { + // Column already exists, ignore error + } + // Migration: Update task status system - add 'not_started' status // DISABLED: This migration was running on every init and converting legitimate // 'pending' tasks back to 'not_started'. The initial migration has been completed. diff --git a/src/lib/queries/projects.js b/src/lib/queries/projects.js index 960be88..167b622 100644 --- a/src/lib/queries/projects.js +++ b/src/lib/queries/projects.js @@ -75,9 +75,9 @@ export function createProject(data, userId = null) { const stmt = db.prepare(` INSERT INTO projects ( - contract_id, project_name, project_number, address, plot, district, unit, city, investment_number, finish_date, + contract_id, project_name, project_number, address, plot, district, unit, city, investment_number, finish_date, completion_date, wp, contact, notes, wartosc_zlecenia, project_type, project_status, coordinates, created_by, assigned_to, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now', 'localtime'), datetime('now', 'localtime')) + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now', 'localtime'), datetime('now', 'localtime')) `); const result = stmt.run( @@ -91,6 +91,7 @@ export function createProject(data, userId = null) { data.city, data.investment_number, data.finish_date, + data.completion_date, data.wp, data.contact, data.notes, @@ -109,7 +110,7 @@ export function updateProject(id, data, userId = null) { const stmt = db.prepare(` UPDATE projects SET contract_id = ?, project_name = ?, project_number = ?, address = ?, plot = ?, district = ?, unit = ?, city = ?, - investment_number = ?, finish_date = ?, wp = ?, contact = ?, notes = ?, wartosc_zlecenia = ?, project_type = ?, project_status = ?, + investment_number = ?, finish_date = ?, completion_date = ?, wp = ?, contact = ?, notes = ?, wartosc_zlecenia = ?, project_type = ?, project_status = ?, coordinates = ?, assigned_to = ?, updated_at = CURRENT_TIMESTAMP WHERE project_id = ? `); @@ -124,6 +125,7 @@ export function updateProject(id, data, userId = null) { data.city, data.investment_number, data.finish_date, + data.completion_date, data.wp, data.contact, data.notes,