fix: la pressione del pulsante di chiusura dei ticket nel gruppo 'chiudi a fine giornata' non provoca più l'attivazione dell'azione di consuntivazione a fine giornata
This commit is contained in:
+79
-1
@@ -1,7 +1,7 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const pool = require('../db');
|
||||
const { db } = require('../activityDb');
|
||||
const { db, logAttivita } = require('../activityDb');
|
||||
|
||||
// Helper to fetch details of a list of tickets from OTRS DB
|
||||
async function fetchTicketsDetails(ticketIds) {
|
||||
@@ -246,5 +246,83 @@ router.delete('/:id/tickets/:ticket_id', (req, res) => {
|
||||
res.status(500).json({ error: 'Errore nella rimozione del ticket', message: err.message });
|
||||
}
|
||||
});
|
||||
// POST /api/groups/close-end-of-day - Close all tickets in 'CHIUDI A FINE GIORNATA' group
|
||||
router.post('/close-end-of-day', async (req, res) => {
|
||||
try {
|
||||
const operatorId = parseInt(req.headers['x-agent-id'] || '1', 10);
|
||||
|
||||
// Find default group 'CHIUDI A FINE GIORNATA'
|
||||
const closeGroup = db.prepare('SELECT id FROM ticket_groups WHERE UPPER(nome) = ?').get('CHIUDI A FINE GIORNATA');
|
||||
if (!closeGroup) {
|
||||
return res.status(404).json({ error: 'Gruppo "CHIUDI A FINE GIORNATA" non trovato' });
|
||||
}
|
||||
|
||||
const groupMembers = db.prepare('SELECT ticket_id FROM ticket_group_members WHERE group_id = ?').all(closeGroup.id);
|
||||
if (groupMembers.length === 0) {
|
||||
return res.json({ success: true, count: 0, message: 'Nessun ticket presente nel gruppo "CHIUDI A FINE GIORNATA"' });
|
||||
}
|
||||
|
||||
const groupTicketIds = groupMembers.map(m => m.ticket_id);
|
||||
const placeholders = groupTicketIds.map((_, i) => `$${i + 1}`).join(', ');
|
||||
|
||||
// Get open tickets in group (not already in a closed state)
|
||||
const openTicketsQuery = `
|
||||
SELECT t.id
|
||||
FROM ticket t
|
||||
JOIN ticket_state ts ON t.ticket_state_id = ts.id
|
||||
JOIN ticket_state_type tst ON ts.type_id = tst.id
|
||||
WHERE t.id IN (${placeholders})
|
||||
AND LOWER(tst.name) NOT LIKE '%closed%'
|
||||
`;
|
||||
const openRes = await pool.query(openTicketsQuery, groupTicketIds);
|
||||
const openTicketIds = openRes.rows.map(r => r.id);
|
||||
|
||||
if (openTicketIds.length === 0) {
|
||||
return res.json({ success: true, count: 0, message: 'Tutti i ticket nel gruppo "CHIUDI A FINE GIORNATA" risultano già chiusi' });
|
||||
}
|
||||
|
||||
// Resolve closed state ID (closed successful / closed fallback)
|
||||
const closedStateRes = await pool.query(
|
||||
`SELECT id FROM ticket_state WHERE name = 'closed successful' OR name = 'chiuso con successo' LIMIT 1`
|
||||
);
|
||||
let stateId;
|
||||
if (closedStateRes.rows.length > 0) {
|
||||
stateId = closedStateRes.rows[0].id;
|
||||
} else {
|
||||
const fallbackRes = await pool.query(
|
||||
`SELECT ts.id FROM ticket_state ts JOIN ticket_state_type tst ON ts.type_id = tst.id WHERE tst.name = 'closed' LIMIT 1`
|
||||
);
|
||||
stateId = fallbackRes.rows[0]?.id || 2;
|
||||
}
|
||||
|
||||
const updatePlaceholders = openTicketIds.map((_, i) => `$${i + 1}`).join(', ');
|
||||
const updateQuery = `
|
||||
UPDATE ticket
|
||||
SET ticket_state_id = $${openTicketIds.length + 1},
|
||||
ticket_lock_id = 1,
|
||||
change_time = NOW(),
|
||||
change_by = $${openTicketIds.length + 2}
|
||||
WHERE id IN (${updatePlaceholders})
|
||||
`;
|
||||
await pool.query(updateQuery, [...openTicketIds, stateId, operatorId]);
|
||||
|
||||
// Log activity
|
||||
logAttivita({
|
||||
agente_id: operatorId,
|
||||
titolo_azione: 'Chiusura ticket gruppo CHIUDI A FINE GIORNATA',
|
||||
azione: { closed_count: openTicketIds.length, ticket_ids: openTicketIds },
|
||||
esito: 'successo',
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
count: openTicketIds.length,
|
||||
message: `${openTicketIds.length} ticket del gruppo "CHIUDI A FINE GIORNATA" chius${openTicketIds.length === 1 ? 'o' : 'i'} con successo!`
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Errore nella chiusura ticket fine giornata:', err);
|
||||
res.status(500).json({ error: 'Errore nella chiusura ticket', message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user