112 lines
4.5 KiB
JavaScript
112 lines
4.5 KiB
JavaScript
const db = require('./backend/db-sqlite');
|
|||
|
|
async function fix() {
|
||
|
|
const fixes = [
|
||
|
|
// projects - missing columns
|
||
|
|
"ALTER TABLE projects ADD COLUMN code TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE projects ADD COLUMN location TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE projects ADD COLUMN contract_amount REAL DEFAULT 0",
|
||
|
|
"ALTER TABLE projects ADD COLUMN start_date TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE projects ADD COLUMN end_date TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE projects ADD COLUMN description TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE projects ADD COLUMN manager_id INTEGER DEFAULT 0",
|
||
|
|
"ALTER TABLE projects ADD COLUMN customer_id INTEGER DEFAULT 0",
|
||
|
|
|
||
|
|
// budget_quotations table
|
||
|
|
`CREATE TABLE IF NOT EXISTS budget_quotations (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
project_id INTEGER,
|
||
|
|
version INTEGER DEFAULT 1,
|
||
|
|
quotation_date TEXT DEFAULT '',
|
||
|
|
amount REAL DEFAULT 0,
|
||
|
|
currency TEXT DEFAULT 'CNY',
|
||
|
|
status TEXT DEFAULT 'draft',
|
||
|
|
file_url TEXT DEFAULT '',
|
||
|
|
remark TEXT DEFAULT '',
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
)`,
|
||
|
|
|
||
|
|
// budget_projects - missing columns
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN manager_id INTEGER DEFAULT 0",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN location TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN survey_date TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN intermediary TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN intermediary_fee_type TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN intermediary_fee_value REAL DEFAULT 0",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN customer_requirements TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN project_overview TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN attachments TEXT DEFAULT '[]'",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN survey_photos TEXT DEFAULT '[]'",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN status TEXT DEFAULT 'negotiating'",
|
||
|
|
"ALTER TABLE budget_projects ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP",
|
||
|
|
|
||
|
|
// exchange_rates - missing columns
|
||
|
|
"ALTER TABLE exchange_rates ADD COLUMN pair_key TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE exchange_rates ADD COLUMN effective_date TEXT DEFAULT ''",
|
||
|
|
"ALTER TABLE exchange_rates ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP",
|
||
|
|
|
||
|
|
// project_contracts table
|
||
|
|
`CREATE TABLE IF NOT EXISTS project_contracts (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
project_id INTEGER,
|
||
|
|
contract_code TEXT DEFAULT '',
|
||
|
|
contract_amount REAL DEFAULT 0,
|
||
|
|
currency TEXT DEFAULT 'CNY',
|
||
|
|
settlement_method TEXT DEFAULT 'lump_sum',
|
||
|
|
contract_period INTEGER DEFAULT 180,
|
||
|
|
start_date TEXT DEFAULT '',
|
||
|
|
end_date TEXT DEFAULT '',
|
||
|
|
warranty_deposit_percentage REAL DEFAULT 5,
|
||
|
|
warranty_period INTEGER DEFAULT 12,
|
||
|
|
contract_file TEXT DEFAULT '',
|
||
|
|
other_info TEXT DEFAULT '',
|
||
|
|
tax_included INTEGER DEFAULT 1,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
)`,
|
||
|
|
|
||
|
|
// project_milestones table
|
||
|
|
`CREATE TABLE IF NOT EXISTS project_milestones (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
project_id INTEGER,
|
||
|
|
milestone_name TEXT DEFAULT '',
|
||
|
|
condition TEXT DEFAULT '',
|
||
|
|
percentage REAL DEFAULT 0,
|
||
|
|
amount REAL DEFAULT 0,
|
||
|
|
expected_date TEXT DEFAULT '',
|
||
|
|
status TEXT DEFAULT 'pending',
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
)`,
|
||
|
|
|
||
|
|
// project_materials table
|
||
|
|
`CREATE TABLE IF NOT EXISTS project_materials (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
project_id INTEGER,
|
||
|
|
product_name TEXT DEFAULT '',
|
||
|
|
unit TEXT DEFAULT '',
|
||
|
|
budget_quantity REAL DEFAULT 0,
|
||
|
|
average_price REAL DEFAULT 0,
|
||
|
|
total_amount REAL DEFAULT 0,
|
||
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
|
|
)`,
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const sql of fixes) {
|
||
|
|
try {
|
||
|
|
await db.query(sql);
|
||
|
|
console.log('OK:', sql.substring(0, 70));
|
||
|
|
} catch(e) {
|
||
|
|
const msg = e.message || '';
|
||
|
|
if (msg.includes('duplicate') || msg.includes('already exists')) {
|
||
|
|
console.log('SKIP:', sql.substring(0, 70));
|
||
|
|
} else {
|
||
|
|
console.log('ERR:', msg.substring(0, 100));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
console.log('\nDone!');
|
||
|
|
process.exit();
|
||
|
|
}
|
||
|
|
fix();
|