Files
yunhaifinance/fix-last3.js
T

112 lines
4.5 KiB
JavaScript
Raw Normal View History

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();