diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 0f32e7af0..eef234d35 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -586,7 +586,7 @@ switch (post('op')) { $rs2 = $dbo->fetchArray($query2); for ($j = 0; $j < sizeof($rs2); ++$j) { - $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')'); + $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id_preventivo=".prepare($rs2[$j]['idpreventivo'])); } flash()->info(tr('Preventivo _NUM_ aggiunto!', [ @@ -974,7 +974,9 @@ switch (post('op')) { // Aggiornamento seriali dalla riga dell'ordine $serials = is_array(post('serial')[$i]) ? post('serial')[$i] : []; - $serials = array_filter($serials, function ($value) { return !empty($value); }); + $serials = array_filter($serials, function ($value) { + return !empty($value); + }); $dbo->sync('mg_prodotti', ['id_riga_documento' => $idriga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]); } @@ -1055,7 +1057,9 @@ switch (post('op')) { // Aggiornamento seriali dalla riga dell'ordine $serials = is_array(post('serial')[$i]) ? post('serial')[$i] : []; - $serials = array_filter($serials, function ($value) { return !empty($value); }); + $serials = array_filter($serials, function ($value) { + return !empty($value); + }); $dbo->sync('mg_prodotti', ['id_riga_documento' => $riga, 'dir' => $dir, 'id_articolo' => $idarticolo], ['serial' => $serials]); @@ -1279,16 +1283,16 @@ switch (post('op')) { $dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In lavorazione') WHERE id=".prepare($rsp[$i]['idpreventivo'])); // Aggiorno anche lo stato degli interventi collegati ai preventivi - $dbo->query("UPDATE in_interventi SET idstatointervento='OK' WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rsp[$i]['idpreventivo']).')'); + $dbo->query("UPDATE in_interventi SET idstatointervento='OK' WHERE id_preventivo=".prepare($rsp[$i]['idpreventivo'])); } /* Rimuovo tutti gli articoli dalla fattura collegati agli interventi di questo preventivo */ - $rs2 = $dbo->fetchArray('SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo != 0 AND idpreventivo='.prepare($idpreventivo)); + $rs2 = $dbo->fetchArray('SELECT id FROM in_interventi WHERE id_preventivo = '.prepare($idpreventivo)); for ($i = 0; $i < sizeof($rs2); ++$i) { // Leggo gli articoli usati in questo intervento - $rs3 = $dbo->fetchArray('SELECT idarticolo FROM mg_articoli_interventi WHERE idintervento='.prepare($rs2[$i]['idintervento'])); + $rs3 = $dbo->fetchArray('SELECT idarticolo FROM mg_articoli_interventi WHERE idintervento='.prepare($rs2[$i]['id'])); for ($j = 0; $j < sizeof($rs3); ++$j) { // Leggo l'id della riga in fattura di questo articolo $rs4 = $dbo->fetchArray('SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idarticolo='.prepare($rs3[$j]['idarticolo'])); @@ -1541,7 +1545,9 @@ switch (post('op')) { // Aggiornamento seriali dalla riga dell'ordine $serials = is_array(post('serial')[$i]) ? post('serial')[$i] : []; - $serials = array_filter($serials, function ($value) { return !empty($value); }); + $serials = array_filter($serials, function ($value) { + return !empty($value); + }); $dbo->sync('mg_prodotti', ['id_riga_documento' => $riga, 'dir' => 'uscita', 'id_articolo' => $idarticolo], ['serial' => $serials]); $dbo->detach('mg_prodotti', ['id_riga_documento' => $idriga, 'dir' => 'entrata', 'id_articolo' => $idarticolo], ['serial' => $serials]); diff --git a/modules/fatture/add_intervento.php b/modules/fatture/add_intervento.php index 24a929b95..6287c343b 100644 --- a/modules/fatture/add_intervento.php +++ b/modules/fatture/add_intervento.php @@ -45,7 +45,7 @@ $rs = $dbo->fetchArray('SELECT (in_interventi.idanagrafica='.prepare($idanagrafica).' OR in_interventi.idclientefinale='.prepare($idanagrafica).') AND in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) - AND NOT in_interventi.id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) + AND in_interventi.id_preventivo IS NULL AND NOT in_interventi.id IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL)'); foreach ($rs as $key => $value) { $rs[$key]['prezzo'] = get_costi_intervento($value['id'])['totale']; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 92e566989..8424318a6 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -268,13 +268,13 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') { if (empty($record['ref_documento'])) { if ($dir == 'entrata') { // Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti - $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idanagrafica='.prepare($record['idanagrafica']).' AND in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND in_interventi.id NOT IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL)'; + $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idanagrafica='.prepare($record['idanagrafica']).' AND in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id_preventivo IS NULL AND in_interventi.id NOT IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL)'; $interventi = $dbo->fetchArray($int_query)[0]['tot']; // Se non trovo niente provo a vedere se ce ne sono per clienti terzi if (empty($interventi)) { // Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti (clienti terzi) - $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idclientefinale='.prepare($record['idanagrafica']).' AND in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND in_interventi.id NOT IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL)'; + $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idclientefinale='.prepare($record['idanagrafica']).' AND in_statiintervento.completato=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id_preventivo IS NULL AND in_interventi.id NOT IN (SELECT idintervento FROM co_promemoria WHERE idintervento IS NOT NULL)'; $interventi = $dbo->fetchArray($int_query)[0]['tot']; } diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 1448994d9..2a502022b 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -20,18 +20,6 @@ switch (post('op')) { $richiesta = post('richiesta'); $idsede = post('idsede'); - /* - Collegamento intervento a preventivo (se impostato) - */ - // Elimino il collegamento attuale - $dbo->query('DELETE FROM co_preventivi_interventi WHERE idintervento='.prepare($id_record)); - if (!empty($idpreventivo)) { - $dbo->insert('co_preventivi_interventi', [ - 'idintervento' => $id_record, - 'idpreventivo' => $idpreventivo, - ]); - } - /* Collegamento intervento a contratto (se impostato). Oltre al collegamento al contratto, l'intervento è collegato ad una riga di pianificazione, perciò è importante considerarla se è impostata @@ -194,6 +182,7 @@ switch (post('op')) { 'idstatointervento' => post('idstatointervento'), 'idsede' => $idsede, 'idautomezzo' => post('idautomezzo'), + 'id_preventivo' => $idpreventivo, 'sconto_globale' => $sconto, 'tipo_sconto_globale' => $tipo_sconto, @@ -236,6 +225,7 @@ switch (post('op')) { 'idtipointervento' => $idtipointervento, 'idsede' => $idsede ?: 0, 'idautomezzo' => $idautomezzo ?: 0, + 'id_preventivo' => $idpreventivo, 'codice' => $codice, 'data_richiesta' => $data_richiesta, @@ -247,14 +237,6 @@ switch (post('op')) { flash()->info(tr('Aggiunto nuovo intervento!')); } - // Collego l'intervento al preventivo - if (!empty($idpreventivo)) { - $dbo->insert('co_preventivi_interventi', [ - 'idintervento' => $id_record, - 'idpreventivo' => $idpreventivo, - ]); - } - // Collego l'intervento al contratto if (!empty($idcontratto)) { $array = [ @@ -388,10 +370,6 @@ switch (post('op')) { $query = 'DELETE FROM in_interventi_tecnici WHERE idintervento='.prepare($id_record); $dbo->query($query); - // Eliminazione associazioni tra interventi e preventivi - $query = 'DELETE FROM co_preventivi_interventi WHERE idintervento='.prepare($id_record); - $dbo->query($query); - // Eliminazione righe aggiuntive dell'intervento $query = 'DELETE FROM in_righe_interventi WHERE idintervento='.prepare($id_record); $dbo->query($query); diff --git a/modules/interventi/init.php b/modules/interventi/init.php index 11e18cb35..b069be70f 100644 --- a/modules/interventi/init.php +++ b/modules/interventi/init.php @@ -3,7 +3,7 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT *, (SELECT completato FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS flag_completato, IF((in_interventi.idsede = 0), (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi.idanagrafica), (SELECT idzona FROM an_sedi WHERE id = in_interventi.idsede)) AS idzona, (SELECT colore FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS colore, (SELECT idcontratto FROM co_promemoria WHERE idintervento=in_interventi.id LIMIT 0,1) AS idcontratto, (SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id LIMIT 0,1) AS idpreventivo FROM in_interventi WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module)); + $record = $dbo->fetchOne('SELECT *, (SELECT completato FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS flag_completato, IF((in_interventi.idsede = 0), (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi.idanagrafica), (SELECT idzona FROM an_sedi WHERE id = in_interventi.idsede)) AS idzona, (SELECT colore FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS colore, (SELECT idcontratto FROM co_promemoria WHERE idintervento=in_interventi.id LIMIT 0,1) AS idcontratto, in_interventi.id_preventivo as idpreventivo FROM in_interventi WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module)); } $jscript_modules[] = $rootdir.'/modules/interventi/js/interventi_helperjs.js'; diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 5c359476d..9e5b62d28 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -143,9 +143,9 @@ switch (post('op')) { $costo_km = $rs[0]['prezzo_km_unitario']; $costo_orario = $rs[0]['prezzo_ore_unitario']; - $query = 'INSERT INTO co_preventivi_interventi(idpreventivo, idintervento) VALUES('.prepare($id_record).', '.prepare($idintervento).')'; - - $dbo->query($query); + $dbo->update('in_interventi', [ + 'id_preventivo' => $id_record, + ], ['id' => $idintervento]); // Imposto il preventivo nello stato "In lavorazione" se inizio ad aggiungere interventi $dbo->query("UPDATE `co_preventivi` SET idstato=(SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='In lavorazione') WHERE `id`=".prepare($id_record)); @@ -180,8 +180,9 @@ switch (post('op')) { if (isset($_GET['idpreventivo']) && isset($_GET['idintervento'])) { $idintervento = get('idintervento'); - $query = 'DELETE FROM `co_preventivi_interventi` WHERE idpreventivo='.prepare($id_record).' AND idintervento='.prepare($idintervento); - $dbo->query($query); + $dbo->update('in_interventi', [ + 'id_preventivo' => null, + ], ['id' => $idintervento]); flash()->info(tr('Intervento _NUM_ rimosso!', [ '_NUM_' => $idintervento, @@ -192,7 +193,10 @@ switch (post('op')) { // eliminazione preventivo case 'delete': $dbo->query('DELETE FROM co_preventivi WHERE id='.prepare($id_record)); - $dbo->query('DELETE FROM co_preventivi_interventi WHERE idpreventivo='.prepare($id_record)); + + $dbo->update('in_interventi', [ + 'id_preventivo' => null, + ], ['id_preventivo' => $id_record]); flash()->info(tr('Preventivo eliminato!')); diff --git a/modules/preventivi/plugins/preventivi.consuntivo.php b/modules/preventivi/plugins/preventivi.consuntivo.php index 454a442b9..c79a31574 100644 --- a/modules/preventivi/plugins/preventivi.consuntivo.php +++ b/modules/preventivi/plugins/preventivi.consuntivo.php @@ -27,7 +27,7 @@ $totale = 0; $totale_stato = []; // Tabella con riepilogo interventi -$rsi = $dbo->fetchArray('SELECT *, in_interventi.id, in_interventi.codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km FROM co_preventivi_interventi INNER JOIN in_interventi ON co_preventivi_interventi.idintervento=in_interventi.id WHERE co_preventivi_interventi.idpreventivo='.prepare($id_record).' ORDER BY co_preventivi_interventi.idintervento DESC'); +$rsi = $dbo->fetchArray('SELECT *, in_interventi.id, in_interventi.codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km FROM in_interventi WHERE in_interventi.id_preventivo='.prepare($id_record).' ORDER BY in_interventi.id DESC'); if (!empty($rsi)) { echo '