diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 9e5b62d28..12ede1303 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -43,6 +43,9 @@ switch (post('op')) { $dbo->query('INSERT INTO co_preventivi(idanagrafica, nome, numero, idagente, idstato, idtipointervento, data_bozza, data_conclusione, idiva, idpagamento) VALUES ('.prepare($idanagrafica).', '.prepare($nome).', '.prepare($numero).', '.prepare($idagente).", (SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='Bozza'), ".prepare($idtipointervento).', NOW(), DATE_ADD(NOW(), INTERVAL +1 MONTH), '.prepare($idiva).', '.prepare($idpagamento).')'); $id_record = $dbo->lastInsertedID(); + + //Aggiungo master_revision e default_revision + $dbo->query('UPDATE co_preventivi SET master_revision='.prepare($id_record).', default_revision=1 WHERE id='.$id_record); /* // inserisco righe standard preventivo @@ -192,7 +195,10 @@ switch (post('op')) { // eliminazione preventivo case 'delete': - $dbo->query('DELETE FROM co_preventivi WHERE id='.prepare($id_record)); + $rs_revisioni = $dbo->fetchArray('SELECT master_revision FROM co_preventivi WHERE id='.prepare($id_record)); + + //Cancello preventivo e revisioni + $dbo->query('DELETE FROM co_preventivi WHERE master_revision='.prepare($rs_revisioni[0]['master_revision'])); $dbo->update('in_interventi', [ 'id_preventivo' => null, @@ -299,6 +305,78 @@ switch (post('op')) { } break; + + case 'add_revision': + + //Copio il preventivo + $rs_preventivo = $dbo->fetchArray("SELECT * FROM co_preventivi WHERE id='".$id_record."'"); + + //Tolgo il flag default_revision da tutte le revisioni e dal record_principale + $dbo->query("UPDATE co_preventivi SET default_revision=0 WHERE master_revision=".prepare($rs_preventivo[0]['master_revision'])); + + $preventivo = [ + 'numero' => $rs_preventivo[0]['numero'], + 'nome' => $rs_preventivo[0]['nome'], + 'idagente' => $rs_preventivo[0]['idagente'], + 'data_bozza' => $rs_preventivo[0]['data_bozza'], + 'data_accettazione' => $rs_preventivo[0]['data_accettazione'], + 'data_rifiuto' => $rs_preventivo[0]['data_rifiuto'], + 'data_conclusione' => $rs_preventivo[0]['data_conclusione'], + 'data_pagamento' => $rs_preventivo[0]['data_pagamento'], + 'budget' => $rs_preventivo[0]['budget'], + 'descrizione' => $rs_preventivo[0]['descrizione'], + 'idstato' => $rs_preventivo[0]['idstato'], + 'validita' => $rs_preventivo[0]['validita'], + 'tempi_consegna' => $rs_preventivo[0]['tempi_consegna'], + 'idanagrafica' => $rs_preventivo[0]['idanagrafica'], + 'esclusioni' => $rs_preventivo[0]['esclusioni'], + 'idreferente' => $rs_preventivo[0]['idreferente'], + 'idpagamento' => $rs_preventivo[0]['idpagamento'], + 'idporto' => $rs_preventivo[0]['idporto'], + 'idtipointervento' => $rs_preventivo[0]['idtipointervento'], + 'idiva' => $rs_preventivo[0]['idiva'], + 'costo_diritto_chiamata' => $rs_preventivo[0]['costo_diritto_chiamata'], + 'ore_lavoro' => $rs_preventivo[0]['ore_lavoro'], + 'costo_orario' => $rs_preventivo[0]['costo_orario'], + 'costo_km' => $rs_preventivo[0]['costo_km'], + 'sconto_globale' => $rs_preventivo[0]['sconto_globale'], + 'tipo_sconto_globale' => $rs_preventivo[0]['tipo_sconto_globale'], + 'master_revision' => $rs_preventivo[0]['master_revision'], + 'default_revision' => '1', + ]; + + $dbo->insert('co_preventivi', $preventivo); + $id_record_new = $dbo->lastInsertedID(); + + $rs_righe_preventivo = $dbo->fetchArray("SELECT * FROM co_righe_preventivi WHERE idpreventivo=".prepare($id_record)); + + for($i=0;$i $rs_righe_preventivo[$i]['data_evasione'], + 'idpreventivo' => $id_record_new, + 'idarticolo' => $rs_righe_preventivo[$i]['idarticolo'], + 'is_descrizione' => $rs_righe_preventivo[$i]['is_descrizione'], + 'idiva' => $rs_righe_preventivo[$i]['idiva'], + 'desc_iva' => $rs_righe_preventivo[$i]['desc_iva'], + 'iva' => $rs_righe_preventivo[$i]['iva'], + 'iva_indetraibile' => $rs_righe_preventivo[$i]['iva_indetraibile'], + 'descrizione' => $rs_righe_preventivo[$i]['descrizione'], + 'subtotale' => $rs_righe_preventivo[$i]['subtotale'], + 'sconto' => $rs_righe_preventivo[$i]['sconto'], + 'sconto_unitario' => $rs_righe_preventivo[$i]['sconto_unitario'], + 'tipo_sconto' => $rs_righe_preventivo[$i]['tipo_sconto'], + 'sconto_globale' => $rs_righe_preventivo[$i]['sconto_globale'], + 'um' => $rs_righe_preventivo[$i]['um'], + 'qta' => $rs_righe_preventivo[$i]['qta'], + 'order' => $rs_righe_preventivo[$i]['order'], + ]; + $dbo->insert('co_righe_preventivi', $righe_preventivo); + } + + $id_record = $id_record_new; + + flash()->info(tr('Aggiunta nuova revisione!')); + break; } if (post('op') !== null && post('op') != 'update') { diff --git a/modules/preventivi/ajax/select.php b/modules/preventivi/ajax/select.php index 09ab3ac1d..ed2757f18 100644 --- a/modules/preventivi/ajax/select.php +++ b/modules/preventivi/ajax/select.php @@ -12,6 +12,7 @@ switch ($resource) { } $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); + $where[] = 'co_preventivi.default_revision=1'; $stati = !empty($superselect['stati']) ? $superselect['stati'] : [ 'In attesa di conferma', diff --git a/modules/preventivi/buttons.php b/modules/preventivi/buttons.php index a11019239..d047e88f7 100644 --- a/modules/preventivi/buttons.php +++ b/modules/preventivi/buttons.php @@ -18,4 +18,14 @@ if (!in_array($record['stato'], ['Bozza', 'Rifiutato', 'In attesa di conferma']) '; +}else{ + echo ' +
+ + + + + +
'; } + diff --git a/plugins/revisioni/actions.php b/plugins/revisioni/actions.php new file mode 100644 index 000000000..575e8d84e --- /dev/null +++ b/plugins/revisioni/actions.php @@ -0,0 +1,26 @@ +query("UPDATE co_preventivi SET default_revision=0 WHERE master_revision=".prepare($master_revision)); + $dbo->query("UPDATE co_preventivi SET default_revision=1 WHERE id=".prepare($id_record)); + + flash()->info(tr('Revisione aggiornata!')); + break; + + case 'delete_revision': + + $idrevisione = post('idrevisione'); + $dbo->query("DELETE FROM co_preventivi WHERE id=".prepare($idrevisione)); + + flash()->info(tr('Revisione eliminata!')); + break; +} \ No newline at end of file diff --git a/plugins/revisioni/edit.php b/plugins/revisioni/edit.php new file mode 100644 index 000000000..10315777c --- /dev/null +++ b/plugins/revisioni/edit.php @@ -0,0 +1,62 @@ +"; +echo " "; +echo " "; +echo " "; +echo " "; + +$rs_master_revision = $dbo->fetchArray("SELECT master_revision FROM co_preventivi WHERE id=".prepare($id_record)); + +echo " "; + +$rs_revisioni = $dbo->fetchArray("SELECT * FROM co_preventivi WHERE master_revision=".prepare($rs_master_revision[0]['master_revision'])." OR id=".prepare($rs_master_revision[0]['master_revision'])." ORDER BY created_at"); + +echo "
"; +echo "
"; + +echo "
Seleziona la spunta e clicca salva per cambiare la revisione del preventivo
"; +echo " "; +echo " + + + + "; +for($i=0;$i + + + "; +} +echo "
#Descrizione
+ + + Revisione ".($i+1)." creata il ".Translator::dateToLocale($rs_revisioni[$i]['created_at'])." alle ".date('H:i', strtotime($rs_revisioni[$i]['created_at']))." + "; + ?> + + +
"; + +echo "
"; +echo "
"; +echo "
"; +echo "
"; +echo " "; +echo "
"; +echo "
"; +echo ""; + +echo "
"; +echo " "; +echo " "; +echo " "; +echo " "; +echo " "; +echo "
"; +?> \ No newline at end of file diff --git a/update/2_4_2.sql b/update/2_4_2.sql index a04fc13da..96e11cdf0 100644 --- a/update/2_4_2.sql +++ b/update/2_4_2.sql @@ -543,3 +543,15 @@ ALTER TABLE `zz_segments` CHANGE `predefined` `predefined` boolean NOT NULL DEFA -- Fix colore per fatture senza numero esterno UPDATE `zz_views` SET `query` = 'IF((SELECT COUNT(t.numero_esterno) FROM co_documenti AS t WHERE t.numero_esterno = co_documenti.numero_esterno AND t.numero_esterno != '''' AND t.id_segment = co_documenti.id_segment AND idtipodocumento IN (SELECT id FROM co_tipidocumento WHERE dir = ''entrata'') AND t.data >= ''|period_start|'' AND t.data <= ''|period_end|'') > 1, ''red'', '''')' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') AND `name` = '_bg_'; + +-- Campi per la gestione revisioni +ALTER TABLE `co_preventivi` ADD `master_revision` INT NOT NULL AFTER `tipo_sconto_globale`, ADD `default_revision` TINYINT(1) NOT NULL AFTER `master_revision`; + +-- Plugin revisioni +INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES (NULL, 'Revisioni', 'Revisioni', 13, 13, 'tab', '', 1, 0, 0, '', '', NULL, 'custom', 'revisioni', ''); + +-- Modifica modilo preventivi per revisioni +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_preventivi` WHERE 1=1 AND default_revision=1 HAVING 2=2 AND ((\'|period_start|\' >= `data_bozza` AND \'|period_start|\' <= `data_conclusione`) OR (\'|period_end|\' >= `data_bozza` AND \'|period_end|\' <= `data_conclusione`) OR (`data_bozza` >= \'|period_start|\' AND `data_bozza` <= \'|period_end|\') OR (`data_conclusione` >= \'|period_start|\' AND `data_conclusione` <= \'|period_end|\') OR (`data_bozza` >= \'|period_start|\' AND `data_conclusione` = \'0000-00-00\')) ORDER BY `id` DESC' WHERE `zz_modules`.`name` = 'Preventivi'; + +-- Chiave secondaria per le righe del preventivo +ALTER TABLE `co_righe_preventivi` ADD FOREIGN KEY (`idpreventivo`) REFERENCES `co_preventivi`(`id`) ON DELETE CASCADE; \ No newline at end of file