feat: add completion_date field to projects and update related functionalities in forms and queries

This commit is contained in:
2025-11-14 10:01:49 +01:00
parent 6b205f36bb
commit 9b1f42c4ec
5 changed files with 71 additions and 4 deletions

View File

@@ -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;
}
}

View File

@@ -405,6 +405,16 @@ export default function ProjectViewPage() {
currentValue={project.finish_date} currentValue={project.finish_date}
label="Termin zakończenia" label="Termin zakończenia"
/> />
{project.completion_date && (
<div>
<span className="text-sm font-medium text-gray-500 block mb-1">
Data zakończenia projektu
</span>
<p className="text-gray-900 font-medium">
{formatDate(project.completion_date)}
</p>
</div>
)}
<div> <div>
<span className="text-sm font-medium text-gray-500 block mb-1"> <span className="text-sm font-medium text-gray-500 block mb-1">
WP WP

View File

@@ -22,6 +22,7 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref)
city: "", city: "",
investment_number: "", investment_number: "",
finish_date: "", finish_date: "",
completion_date: "",
wp: "", wp: "",
contact: "", contact: "",
notes: "", notes: "",
@@ -62,6 +63,7 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref)
city: "", city: "",
investment_number: "", investment_number: "",
finish_date: "", finish_date: "",
completion_date: "",
wp: "", wp: "",
contact: "", contact: "",
notes: "", notes: "",
@@ -74,10 +76,13 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref)
project_type: initialData.project_type || "design", project_type: initialData.project_type || "design",
assigned_to: initialData.assigned_to || "", assigned_to: initialData.assigned_to || "",
wartosc_zlecenia: initialData.wartosc_zlecenia || "", 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 finish_date: initialData.finish_date
? formatDateForInput(initialData.finish_date) ? formatDateForInput(initialData.finish_date)
: "", : "",
completion_date: initialData.completion_date
? formatDateForInput(initialData.completion_date)
: "",
}); });
} }
}, [initialData]); }, [initialData]);
@@ -295,6 +300,18 @@ const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref)
onChange={handleChange} onChange={handleChange}
/> />
</div> </div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
Data zakończenia projektu
</label>
<Input
type="date"
name="completion_date"
value={formatDateForInput(form.completion_date)}
onChange={handleChange}
/>
</div>
</div> </div>
</div> </div>

View File

@@ -27,6 +27,7 @@ export default function initializeDatabase() {
city TEXT, city TEXT,
investment_number TEXT, investment_number TEXT,
finish_date TEXT, finish_date TEXT,
completion_date TEXT,
wp TEXT, wp TEXT,
contact TEXT, contact TEXT,
notes TEXT, notes TEXT,
@@ -280,6 +281,14 @@ export default function initializeDatabase() {
// Column already exists, ignore error // 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 // Migration: Update task status system - add 'not_started' status
// DISABLED: This migration was running on every init and converting legitimate // DISABLED: This migration was running on every init and converting legitimate
// 'pending' tasks back to 'not_started'. The initial migration has been completed. // 'pending' tasks back to 'not_started'. The initial migration has been completed.

View File

@@ -75,9 +75,9 @@ export function createProject(data, userId = null) {
const stmt = db.prepare(` const stmt = db.prepare(`
INSERT INTO projects ( 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 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( const result = stmt.run(
@@ -91,6 +91,7 @@ export function createProject(data, userId = null) {
data.city, data.city,
data.investment_number, data.investment_number,
data.finish_date, data.finish_date,
data.completion_date,
data.wp, data.wp,
data.contact, data.contact,
data.notes, data.notes,
@@ -109,7 +110,7 @@ export function updateProject(id, data, userId = null) {
const stmt = db.prepare(` const stmt = db.prepare(`
UPDATE projects SET UPDATE projects SET
contract_id = ?, project_name = ?, project_number = ?, address = ?, plot = ?, district = ?, unit = ?, city = ?, 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 coordinates = ?, assigned_to = ?, updated_at = CURRENT_TIMESTAMP
WHERE project_id = ? WHERE project_id = ?
`); `);
@@ -124,6 +125,7 @@ export function updateProject(id, data, userId = null) {
data.city, data.city,
data.investment_number, data.investment_number,
data.finish_date, data.finish_date,
data.completion_date,
data.wp, data.wp,
data.contact, data.contact,
data.notes, data.notes,