134 lines
5.8 KiB
JavaScript
134 lines
5.8 KiB
JavaScript
const db = require('./db-sqlite');
|
|||
|
|
|
||
|
|
// 测试报销申请功能
|
||
|
|
async function testReimbursements() {
|
||
|
|
console.log('=== 测试报销申请功能 ===');
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 测试创建公司支出报销
|
||
|
|
console.log('1. 测试创建公司支出报销');
|
||
|
|
const companyResult = await db.query(
|
||
|
|
`INSERT INTO reimbursements (user_id, project_id, amount, currency, amount_cny, reason, reimbursement_date, reimbursement_code, status, applicant, expense_type, detail_items, attachments)
|
||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||
|
|
[1, null, 1000, 'CNY', 1000, '测试公司报销', new Date().toISOString().split('T')[0], 'REIM' + Date.now(), 'pending', '测试申请人', 'company', JSON.stringify([{ description: '测试明细', amount: 1000, category: 'general_operations' }]), JSON.stringify([])]
|
||
|
|
);
|
||
|
|
console.log('✓ 公司支出报销创建成功');
|
||
|
|
|
||
|
|
// 测试创建项目支出报销
|
||
|
|
console.log('2. 测试创建项目支出报销');
|
||
|
|
const projectResult = await db.query(
|
||
|
|
`INSERT INTO reimbursements (user_id, project_id, amount, currency, amount_cny, reason, reimbursement_date, reimbursement_code, status, applicant, expense_type, detail_items, attachments)
|
||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||
|
|
[1, 1, 1000, 'CNY', 1000, '测试项目报销', new Date().toISOString().split('T')[0], 'REIM' + Date.now(), 'pending', '测试申请人', 'project', JSON.stringify([{ description: '测试明细', amount: 1000, category: 'accommodation' }]), JSON.stringify([])]
|
||
|
|
);
|
||
|
|
console.log('✓ 项目支出报销创建成功');
|
||
|
|
|
||
|
|
// 测试查询报销列表
|
||
|
|
console.log('3. 测试查询报销列表');
|
||
|
|
const listResult = await db.query('SELECT * FROM reimbursements ORDER BY created_at DESC LIMIT 5');
|
||
|
|
console.log('✓ 报销列表查询成功,共', listResult.rows.length, '条记录');
|
||
|
|
|
||
|
|
// 测试撤回功能
|
||
|
|
if (listResult.rows.length > 0) {
|
||
|
|
console.log('4. 测试撤回功能');
|
||
|
|
const reimbursementId = listResult.rows[0].id;
|
||
|
|
await db.query('UPDATE reimbursements SET status = ? WHERE id = ?', ['withdrawn', reimbursementId]);
|
||
|
|
console.log('✓ 报销撤回成功');
|
||
|
|
}
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('✗ 测试失败:', error.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 测试付款申请功能
|
||
|
|
async function testPaymentRequests() {
|
||
|
|
console.log('\n=== 测试付款申请功能 ===');
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 测试创建付款申请
|
||
|
|
console.log('1. 测试创建付款申请');
|
||
|
|
const result = await db.query(
|
||
|
|
`INSERT INTO payment_requests (request_code, applicant, payee, bank_account, bank_name, amount, amount_cny, currency, payment_date, reason, detail_items, attachments, status)
|
||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||
|
|
['PAY' + Date.now(), '测试申请人', '测试收款人', '1234567890', '测试银行', 1000, 1000, 'CNY', new Date().toISOString().split('T')[0], '测试付款', JSON.stringify([{ description: '测试明细', amount: 1000, category: 'general_operations' }]), JSON.stringify([]), 'pending']
|
||
|
|
);
|
||
|
|
console.log('✓ 付款申请创建成功');
|
||
|
|
|
||
|
|
// 测试查询付款申请列表
|
||
|
|
console.log('2. 测试查询付款申请列表');
|
||
|
|
const listResult = await db.query('SELECT * FROM payment_requests ORDER BY created_at DESC LIMIT 5');
|
||
|
|
console.log('✓ 付款申请列表查询成功,共', listResult.rows.length, '条记录');
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('✗ 测试失败:', error.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 测试核销申请功能
|
||
|
|
async function testVerifications() {
|
||
|
|
console.log('\n=== 测试核销申请功能 ===');
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 测试创建核销申请
|
||
|
|
console.log('1. 测试创建核销申请');
|
||
|
|
const result = await db.query(
|
||
|
|
`INSERT INTO verifications (verification_code, applicant, advance_code, advance_amount, amount, amount_cny, currency, verification_date, reason, detail_items, attachments, status)
|
||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||
|
|
['VER' + Date.now(), '测试申请人', 'ADV20240101001', 1000, 800, 800, 'CNY', new Date().toISOString().split('T')[0], '测试核销', JSON.stringify([{ description: '测试明细', amount: 800, category: 'general_operations' }]), JSON.stringify([]), 'pending']
|
||
|
|
);
|
||
|
|
console.log('✓ 核销申请创建成功');
|
||
|
|
|
||
|
|
// 测试查询核销申请列表
|
||
|
|
console.log('2. 测试查询核销申请列表');
|
||
|
|
const listResult = await db.query('SELECT * FROM verifications ORDER BY created_at DESC LIMIT 5');
|
||
|
|
console.log('✓ 核销申请列表查询成功,共', listResult.rows.length, '条记录');
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('✗ 测试失败:', error.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 测试支出分类
|
||
|
|
async function testExpenseCategories() {
|
||
|
|
console.log('\n=== 测试支出分类 ===');
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 测试项目支出分类
|
||
|
|
console.log('1. 测试项目支出分类');
|
||
|
|
const projectCategories = [
|
||
|
|
'住宿', '餐饮', '加油', '零散材料', '客户关系', '分包关系', 'EDL关系', '额外施工', '其他'
|
||
|
|
];
|
||
|
|
console.log('✓ 项目支出分类:', projectCategories.join(', '));
|
||
|
|
|
||
|
|
// 测试公司支出分类
|
||
|
|
console.log('2. 测试公司支出分类');
|
||
|
|
const companyCategories = [
|
||
|
|
'通用运营(房租/耗材)', '交通通勤', '业扩营销', '电力系统关系', '员工福利', '快递物流', '其他'
|
||
|
|
];
|
||
|
|
console.log('✓ 公司支出分类:', companyCategories.join(', '));
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('✗ 测试失败:', error.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 运行所有测试
|
||
|
|
async function runAllTests() {
|
||
|
|
console.log('开始测试轻远电力老挝ERP财务功能...\n');
|
||
|
|
|
||
|
|
await testExpenseCategories();
|
||
|
|
await testReimbursements();
|
||
|
|
await testPaymentRequests();
|
||
|
|
await testVerifications();
|
||
|
|
|
||
|
|
console.log('\n=== 测试完成 ===');
|
||
|
|
console.log('所有功能测试已完成,请检查测试结果。');
|
||
|
|
|
||
|
|
// 关闭数据库连接
|
||
|
|
db.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
// 运行测试
|
||
|
|
runAllTests();
|