Update 2026-06-24 10:47:45
This commit is contained in:
@@ -23,7 +23,7 @@ router.get('/', async (req, res) => {
|
||||
const { purchase_order_id, status } = req.query;
|
||||
let query = `
|
||||
SELECT pp.*,
|
||||
po.order_code,
|
||||
po.code AS order_code,
|
||||
po.supplier_id,
|
||||
s.name as supplier_name,
|
||||
pr.status as request_status
|
||||
@@ -36,12 +36,12 @@ router.get('/', async (req, res) => {
|
||||
const conditions = [];
|
||||
|
||||
if (purchase_order_id) {
|
||||
conditions.push('pp.purchase_order_id = $1');
|
||||
params.push(purchase_order_id);
|
||||
conditions.push(`pp.purchase_order_id = $${params.length}`);
|
||||
}
|
||||
if (status) {
|
||||
conditions.push('pp.status = $1');
|
||||
params.push(status);
|
||||
conditions.push(`pp.status = $${params.length}`);
|
||||
}
|
||||
|
||||
if (conditions.length > 0) {
|
||||
@@ -76,7 +76,7 @@ router.get('/:id', async (req, res) => {
|
||||
|
||||
const result = await db.query(`
|
||||
SELECT pp.*,
|
||||
po.order_code,
|
||||
po.code AS order_code,
|
||||
po.supplier_id,
|
||||
s.name as supplier_name,
|
||||
pr.status as request_status,
|
||||
@@ -85,7 +85,7 @@ router.get('/:id', async (req, res) => {
|
||||
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
|
||||
LEFT JOIN suppliers s ON po.supplier_id = s.id
|
||||
LEFT JOIN payment_requests pr ON pp.payment_request_id = pr.id
|
||||
WHERE pp.id = ?
|
||||
WHERE pp.id = $1
|
||||
`, [id]);
|
||||
|
||||
if (result.rows.length === 0) {
|
||||
@@ -155,8 +155,8 @@ router.put('/:id', async (req, res) => {
|
||||
|
||||
const result = await db.query(`
|
||||
UPDATE payment_plans
|
||||
SET stage = ?, planned_date = ?, planned_amount = ?, planned_percentage = ?, remark = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
SET stage = $1, planned_date = $2, planned_amount = $3, planned_percentage = $4, remark = $5, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $6
|
||||
`, [stage, planned_date, planned_amount, planned_percentage, remark, id]);
|
||||
|
||||
res.json({
|
||||
@@ -216,7 +216,7 @@ router.post('/:id/create-request', async (req, res) => {
|
||||
SELECT pp.*, po.supplier_id, po.currency, po.project_id
|
||||
FROM payment_plans pp
|
||||
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
|
||||
WHERE pp.id = ?
|
||||
WHERE pp.id = $1
|
||||
`, [id]);
|
||||
|
||||
if (planResult.rows.length === 0) {
|
||||
@@ -229,7 +229,7 @@ router.post('/:id/create-request', async (req, res) => {
|
||||
return res.status(400).json({ success: false, message: '只能对待付款状态的计划创建付款申请' });
|
||||
}
|
||||
|
||||
await db.query('BEGIN TRANSACTION');
|
||||
await db.query('BEGIN');
|
||||
|
||||
try {
|
||||
const requestCode = 'PAY' + new Date().toISOString().slice(0, 10).replace(/-/g, '') +
|
||||
@@ -237,23 +237,25 @@ router.post('/:id/create-request', async (req, res) => {
|
||||
|
||||
const requestResult = await db.query(`
|
||||
INSERT INTO payment_requests
|
||||
(code, payment_type, purchase_order_id, amount, currency, applicant, request_date, status, created_at)
|
||||
(request_code, payment_type, purchase_order_id, amount, currency, applicant, payment_date, status, created_at)
|
||||
VALUES ($1, 'material', $2, $3, $4, '系统管理员', CURRENT_DATE, 'pending', CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[requestCode, plan.purchase_order_id, plan.planned_amount, plan.currency || 'CNY']);
|
||||
|
||||
const requestId = requestResult.rows[0].id;
|
||||
|
||||
await db.query(`
|
||||
UPDATE payment_plans
|
||||
SET status = 'requested', payment_request_id = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
`, [requestResult.lastID, id]);
|
||||
SET status = 'requested', payment_request_id = $1, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $2
|
||||
`, [requestId, id]);
|
||||
|
||||
await db.query('COMMIT');
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '付款申请创建成功',
|
||||
data: { request_id: requestResult.lastID, request_code: requestCode }
|
||||
data: { request_id: requestId, request_code: requestCode }
|
||||
});
|
||||
} catch (innerError) {
|
||||
await db.query('ROLLBACK');
|
||||
@@ -290,20 +292,20 @@ router.post('/:id/mark-paid', async (req, res) => {
|
||||
return res.status(400).json({ success: false, message: '只能对已申请或已批准的计划标记为已支付' });
|
||||
}
|
||||
|
||||
await db.query('BEGIN TRANSACTION');
|
||||
await db.query('BEGIN');
|
||||
|
||||
try {
|
||||
await db.query(`
|
||||
UPDATE payment_plans
|
||||
SET status = 'paid', actual_amount = ?, actual_date = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
SET status = 'paid', actual_amount = $1, actual_date = $2, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $3
|
||||
`, [actual_amount || plan.planned_amount, actual_date || new Date().toISOString().slice(0, 10), id]);
|
||||
|
||||
if (plan.payment_request_id) {
|
||||
await db.query(`
|
||||
UPDATE payment_requests
|
||||
SET status = 'paid', updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
WHERE id = $1
|
||||
`, [plan.payment_request_id]);
|
||||
}
|
||||
|
||||
@@ -311,7 +313,7 @@ router.post('/:id/mark-paid', async (req, res) => {
|
||||
SELECT SUM(CASE WHEN status = 'paid' THEN actual_amount ELSE 0 END) as paid_amount,
|
||||
SUM(planned_amount) as total_amount
|
||||
FROM payment_plans
|
||||
WHERE purchase_order_id = ?
|
||||
WHERE purchase_order_id = $1
|
||||
`, [plan.purchase_order_id]);
|
||||
|
||||
const { paid_amount, total_amount } = orderResult.rows[0];
|
||||
@@ -325,8 +327,8 @@ router.post('/:id/mark-paid', async (req, res) => {
|
||||
|
||||
await db.query(`
|
||||
UPDATE purchase_orders
|
||||
SET paid_amount = ?, status = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
SET paid_amount = $1, status = $2, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $3
|
||||
`, [paid_amount, newOrderStatus, plan.purchase_order_id]);
|
||||
|
||||
await db.query('COMMIT');
|
||||
@@ -360,13 +362,13 @@ router.get('/reminders/upcoming', async (req, res) => {
|
||||
|
||||
const result = await db.query(`
|
||||
SELECT pp.*,
|
||||
po.order_code,
|
||||
po.code AS order_code,
|
||||
s.name as supplier_name
|
||||
FROM payment_plans pp
|
||||
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
|
||||
LEFT JOIN suppliers s ON po.supplier_id = s.id
|
||||
WHERE pp.status = 'pending'
|
||||
AND pp.planned_date <= date('now', '+' || ? || ' days')
|
||||
AND pp.planned_date <= CURRENT_DATE + ($1 || ' days')::interval
|
||||
AND pp.planned_date >= CURRENT_DATE
|
||||
ORDER BY pp.planned_date ASC
|
||||
`, [days]);
|
||||
|
||||
Reference in New Issue
Block a user