From 8a617ecb227bbd42cb8bcee95826ac21b37c7f63 Mon Sep 17 00:00:00 2001 From: Gabriele Cimaschi Date: Thu, 27 Aug 2026 15:01:08 +0200 Subject: [PATCH] fix: corretta modifica massiva dall'interfaccia ricerca spudorata. --- public/js/views/ricercaSpudorata.js | 88 +++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/public/js/views/ricercaSpudorata.js b/public/js/views/ricercaSpudorata.js index 687549a..6a7417b 100644 --- a/public/js/views/ricercaSpudorata.js +++ b/public/js/views/ricercaSpudorata.js @@ -496,6 +496,9 @@ const RicercaSpudorataView = { const batchApply = document.getElementById('batch-apply'); if (batchApply) batchApply.addEventListener('click', () => this.applyBatch()); + const batchAddGroup = document.getElementById('batch-add-group'); + if (batchAddGroup) batchAddGroup.addEventListener('click', () => this.addToGroup()); + const batchMerge = document.getElementById('batch-merge'); if (batchMerge) batchMerge.addEventListener('click', () => this.mergeBatch()); @@ -716,10 +719,10 @@ const RicercaSpudorataView = { } try { - const ticketIds = Array.from(this.selectedIds).map(id => parseInt(id)); - const res = await App.api('/api/tickets/batch', { - method: 'POST', - body: JSON.stringify({ ticketIds, updates }) + const ticket_ids = Array.from(this.selectedIds).map(id => parseInt(id, 10)); + const res = await App.api('/api/tickets/batch/update', { + method: 'PATCH', + body: JSON.stringify({ ticket_ids, updates }) }); Toast.success(res.message || 'Ticket aggiornati con successo'); @@ -745,6 +748,12 @@ const RicercaSpudorataView = { t.owner_last = foundUser.last_name; } } + if (updates.responsible_user_id) { + t.responsible_user_id = updates.responsible_user_id; + } + if (updates.type_id) { + t.type_id = updates.type_id; + } } }); } @@ -756,6 +765,77 @@ const RicercaSpudorataView = { } }, + async addToGroup() { + if (this.selectedIds.size === 0) return; + + try { + const groups = await App.api('/api/groups'); + if (!groups || groups.length === 0) { + Toast.warning('non sono presenti gruppi'); + return; + } + + const groupOptions = groups.map(g => ``).join(''); + const dialogHtml = ` +
+
+

Aggiungi a Gruppo

+

Seleziona il gruppo a cui aggiungere i ${this.selectedIds.size} ticket selezionati:

+ +
+ + +
+
+
+ `; + + const modalContainer = document.createElement('div'); + modalContainer.innerHTML = dialogHtml; + document.body.appendChild(modalContainer); + + const closeModal = () => modalContainer.remove(); + + document.getElementById('batch-group-cancel').addEventListener('click', closeModal); + document.getElementById('batch-group-confirm').addEventListener('click', async () => { + const groupId = document.getElementById('batch-group-select').value; + if (!groupId) return; + + const confirmBtn = document.getElementById('batch-group-confirm'); + confirmBtn.disabled = true; + confirmBtn.textContent = 'Aggiunta...'; + + let addedCount = 0; + let errorsCount = 0; + + for (const ticketId of this.selectedIds) { + try { + await App.api(`/api/groups/${groupId}/tickets`, { + method: 'POST', + body: JSON.stringify({ ticket_identifier: ticketId }) + }); + addedCount++; + } catch (err) { + errorsCount++; + } + } + + closeModal(); + + if (addedCount > 0) { + Toast.success(`${addedCount} ticket aggiunti al gruppo!`); + this.cancelBatchSelection(); + } else { + Toast.error('Impossibile aggiungere i ticket al gruppo selezionato.'); + } + }); + } catch (err) { + Toast.error('Errore caricamento gruppi: ' + err.message); + } + }, + async mergeBatch() { if (this.selectedOrder.length < 2) return;