This commit is contained in:
sebseb7
2025-08-01 09:26:47 +02:00
parent be7a928ce2
commit 1ec1e1e5f6
7 changed files with 763 additions and 24 deletions

View File

@@ -558,4 +558,183 @@ router.get('/pdf/pdfobject/:kPdfObjekt', authenticateToken, async (req, res) =>
}
});
// Kreditor API endpoints
// Get all kreditors
router.get('/kreditors', authenticateToken, async (req, res) => {
try {
const { executeQuery } = require('../config/database');
const query = `
SELECT id, iban, name, kreditorId, created_at, updated_at
FROM Kreditor
WHERE is_active = 1
ORDER BY name ASC
`;
const result = await executeQuery(query);
res.json(result.recordset || []);
} catch (error) {
console.error('Error fetching kreditors:', error);
res.status(500).json({ error: 'Failed to fetch kreditors' });
}
});
// Get kreditor by ID
router.get('/kreditors/:id', authenticateToken, async (req, res) => {
try {
const { executeQuery } = require('../config/database');
const { id } = req.params;
const query = `
SELECT id, iban, name, kreditorId, created_at, updated_at
FROM Kreditor
WHERE id = @id AND is_active = 1
`;
const result = await executeQuery(query, [
{ name: 'id', type: 'int', value: parseInt(id) }
]);
if (result.recordset.length === 0) {
return res.status(404).json({ error: 'Kreditor not found' });
}
res.json(result.recordset[0]);
} catch (error) {
console.error('Error fetching kreditor:', error);
res.status(500).json({ error: 'Failed to fetch kreditor' });
}
});
// Create new kreditor
router.post('/kreditors', authenticateToken, async (req, res) => {
try {
const { executeQuery } = require('../config/database');
const { iban, name, kreditorId } = req.body;
// Validate required fields
if (!iban || !name || !kreditorId) {
return res.status(400).json({ error: 'IBAN, name, and kreditorId are required' });
}
// Check if kreditor with same IBAN or kreditorId already exists
const checkQuery = `
SELECT id FROM Kreditor
WHERE (iban = @iban OR kreditorId = @kreditorId) AND is_active = 1
`;
const checkResult = await executeQuery(checkQuery, [
{ name: 'iban', type: 'nvarchar', value: iban },
{ name: 'kreditorId', type: 'nvarchar', value: kreditorId }
]);
if (checkResult.recordset.length > 0) {
return res.status(409).json({ error: 'Kreditor with this IBAN or kreditorId already exists' });
}
const insertQuery = `
INSERT INTO Kreditor (iban, name, kreditorId, created_at, updated_at)
OUTPUT INSERTED.id, INSERTED.iban, INSERTED.name, INSERTED.kreditorId, INSERTED.created_at, INSERTED.updated_at
VALUES (@iban, @name, @kreditorId, GETDATE(), GETDATE())
`;
const result = await executeQuery(insertQuery, [
{ name: 'iban', type: 'nvarchar', value: iban },
{ name: 'name', type: 'nvarchar', value: name },
{ name: 'kreditorId', type: 'nvarchar', value: kreditorId }
]);
res.status(201).json(result.recordset[0]);
} catch (error) {
console.error('Error creating kreditor:', error);
res.status(500).json({ error: 'Failed to create kreditor' });
}
});
// Update kreditor
router.put('/kreditors/:id', authenticateToken, async (req, res) => {
try {
const { executeQuery } = require('../config/database');
const { id } = req.params;
const { iban, name, kreditorId } = req.body;
// Validate required fields
if (!iban || !name || !kreditorId) {
return res.status(400).json({ error: 'IBAN, name, and kreditorId are required' });
}
// Check if kreditor exists
const checkQuery = `SELECT id FROM Kreditor WHERE id = @id AND is_active = 1`;
const checkResult = await executeQuery(checkQuery, [
{ name: 'id', type: 'int', value: parseInt(id) }
]);
if (checkResult.recordset.length === 0) {
return res.status(404).json({ error: 'Kreditor not found' });
}
// Check for conflicts with other kreditors
const conflictQuery = `
SELECT id FROM Kreditor
WHERE (iban = @iban OR kreditorId = @kreditorId) AND id != @id AND is_active = 1
`;
const conflictResult = await executeQuery(conflictQuery, [
{ name: 'iban', type: 'nvarchar', value: iban },
{ name: 'kreditorId', type: 'nvarchar', value: kreditorId },
{ name: 'id', type: 'int', value: parseInt(id) }
]);
if (conflictResult.recordset.length > 0) {
return res.status(409).json({ error: 'Another kreditor with this IBAN or kreditorId already exists' });
}
const updateQuery = `
UPDATE Kreditor
SET iban = @iban, name = @name, kreditorId = @kreditorId, updated_at = GETDATE()
OUTPUT INSERTED.id, INSERTED.iban, INSERTED.name, INSERTED.kreditorId, INSERTED.created_at, INSERTED.updated_at
WHERE id = @id
`;
const result = await executeQuery(updateQuery, [
{ name: 'iban', type: 'nvarchar', value: iban },
{ name: 'name', type: 'nvarchar', value: name },
{ name: 'kreditorId', type: 'nvarchar', value: kreditorId },
{ name: 'id', type: 'int', value: parseInt(id) }
]);
res.json(result.recordset[0]);
} catch (error) {
console.error('Error updating kreditor:', error);
res.status(500).json({ error: 'Failed to update kreditor' });
}
});
// Delete kreditor (soft delete)
router.delete('/kreditors/:id', authenticateToken, async (req, res) => {
try {
const { executeQuery } = require('../config/database');
const { id } = req.params;
const query = `
UPDATE Kreditor
SET is_active = 0, updated_at = GETDATE()
WHERE id = @id AND is_active = 1
`;
const result = await executeQuery(query, [
{ name: 'id', type: 'int', value: parseInt(id) }
]);
if (result.rowsAffected[0] === 0) {
return res.status(404).json({ error: 'Kreditor not found' });
}
res.json({ message: 'Kreditor deleted successfully' });
} catch (error) {
console.error('Error deleting kreditor:', error);
res.status(500).json({ error: 'Failed to delete kreditor' });
}
});
module.exports = router;