diff --git a/ajax.php b/ajax.php index 94c1d0fb0..0ea57078a 100644 --- a/ajax.php +++ b/ajax.php @@ -42,7 +42,7 @@ switch (get('op')) { if ($clear == 1 || $value == '') { unset($_SESSION[$array[0]][$array[1]]); } else { - $_SESSION[$array[0]][$array[1]] = $value; + $_SESSION[$array[0]][$array[1]] = $value; } break; diff --git a/assets/src/css/style.css b/assets/src/css/style.css index 0bbfbeedc..2a35e0f5d 100644 --- a/assets/src/css/style.css +++ b/assets/src/css/style.css @@ -590,4 +590,7 @@ input.small-width { min-height: 140px; margin: 5%; } +} +.callout a{ + text-decoration: none; } \ No newline at end of file diff --git a/core.php b/core.php index 631db4b05..7cab4cddd 100644 --- a/core.php +++ b/core.php @@ -174,7 +174,7 @@ if (!API::isAPIRequest()) { } elseif (!isset($_SESSION['period_start'])) { $_SESSION['period_start'] = date('Y').'-01-01'; $_SESSION['period_end'] = date('Y').'-12-31'; - } + } // Impostazione del tema grafico di default $theme = !empty($theme) ? $theme : 'default'; diff --git a/include/top.php b/include/top.php index dd7b58543..cdd2413e8 100644 --- a/include/top.php +++ b/include/top.php @@ -116,7 +116,7 @@ if (Auth::check()) { search: search, translations: translations, locale: \''.$lang.'\', - scayt_sLang: \''.$lang."_".strtoupper($lang).'\', + scayt_sLang: \''.$lang.'_'.strtoupper($lang).'\', start_date: \''.Translator::dateToLocale($_SESSION['period_start']).'\', end_date: \''.Translator::dateToLocale($_SESSION['period_end']).'\', diff --git a/modules/aggiornamenti/edit.php b/modules/aggiornamenti/edit.php index b744634a4..f1b8bff60 100644 --- a/modules/aggiornamenti/edit.php +++ b/modules/aggiornamenti/edit.php @@ -134,7 +134,7 @@ foreach ($modules as $module) { if ($comp) { $compatible = ''; - $class = 'success'; + ($module['enabled']) ? $class = 'success': $class = 'warning'; } else { $compatible = ''; $class = 'danger'; @@ -198,7 +198,7 @@ foreach ($modules as $module) { if ($comp) { $compatible = ''; - $class = 'success'; + ($sub['enabled']) ? $class = 'success': $class = 'warning'; } else { $compatible = ''; $class = 'danger'; diff --git a/modules/backup/edit.php b/modules/backup/edit.php index 34937d03e..2c39c3d5e 100644 --- a/modules/backup/edit.php +++ b/modules/backup/edit.php @@ -2,16 +2,33 @@ include_once __DIR__.'/../../core.php'; -echo '

'.tr('Il backup è molto importante perchè permette di creare una copia della propria installazione con relativi dati per poterla ripristinare in seguito a errori, cancellazione di dati accidentale o guasti hardware').'.

'; +echo '

'.tr('Il backup è molto importante perché permette di creare una copia della propria installazione e relativi dati per poterla poi ripristinare in seguito a errori, cancellazioni accidentali o guasti hardware').'.

'; if (!extension_loaded('zip')) { echo "
- ".tr('Estensione zip non supportata!').' - '.tr('Il backup verrà eseguito ma non in formato zip e quindi scaricabile solo tramite ftp o con copia-incolla').'. + ".tr('Estensione ZIP non supportata!').' + '.tr('Il backup verrà eseguito, ma non in formato ZIP. Sarà quindi scaricabile solo tramite FTP o con copia-incolla').'.
'; } + +if (starts_with($backup_dir, $docroot)) { + echo ' +
+ '.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori della cartella di OSM, possibilmente in una unità esterna').'. +
'; +} + +if (!is_writable($backup_dir)) { + echo ' +
+ '.tr('La cartella di backup presente nella configurazione non è utilizzabile dal gestionale').'. + '.tr('Verificare che la cartella abbia i permessi di scrittura abilitati').'. +
'; +} + + echo '

'; @@ -28,32 +45,16 @@ echo ' '_FILE_' => 'config.inc.php', ]).'

'; -if (starts_with($backup_dir, $docroot)) { - echo ' -
- '.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori delle cartelle di OSM, possibilmente in una unità esterna').'. -
'; -} - -if (!is_writable($backup_dir)) { - echo ' -
- '.tr('La cartella di backup presente nella configurazione non è utilizzabile dal gestionale!').'. - '.tr('Verificare che la cartella abbia i permessi di scrittura abilitati').'. -
'; -} echo '
-
+'; -
-
'; //Lettura file di backup if (file_exists($backup_dir)) { @@ -100,7 +101,7 @@ if (file_exists($backup_dir)) { '.tr('Dimensione').': '.Translator::numberToLocale(filesize($backup) / 1024 / 1024).'MB

- '.tr('Scarica').' + '.tr('Scarica').' @@ -165,7 +166,7 @@ if (file_exists($backup_dir)) { if (!empty($backup_dir)) { echo ' - +
- + @@ -74,7 +74,7 @@ include_once __DIR__.'/../../core.php'; fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT id FROM `mg_categorie` WHERE `parent`='.prepare($id).')'); +$res = $dbo->fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepare($id_record).' OR `id_sottocategoria`='.prepare($id_record).' OR `id_sottocategoria` IN (SELECT id FROM `mg_categorie` WHERE `parent`='.prepare($id_record).')'); if ($res) { echo ' diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php index 8974b665b..27923404e 100644 --- a/modules/ddt/bulk.php +++ b/modules/ddt/bulk.php @@ -38,17 +38,13 @@ switch (post('op')) { $data = date('Y-m-d'); $dir = 'entrata'; $idtipodocumento = '2'; - - - - if (empty($_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'])){ - $rs = $dbo->fetchArray("SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = ".prepare(Modules::get('Fatture di vendita')['id'])."LIMIT 0,1"); - $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'] = $rs[0]['id']; - } - $id_segment = $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment']; - - + if (empty($_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'])) { + $rs = $dbo->fetchArray('SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = '.prepare(Modules::get('Fatture di vendita')['id']).'LIMIT 0,1'); + $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'] = $rs[0]['id']; + } + + $id_segment = $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment']; $numero = get_new_numerofattura($data); @@ -147,32 +143,29 @@ switch (post('op')) { } break; - - - - - case 'delete-bulk': + case 'delete-bulk': - foreach ($id_records as $id) { - - $dbo->query('DELETE FROM dt_ddt WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM dt_righe_ddt WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM mg_movimenti WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); - - } + if ($debug){ + + foreach ($id_records as $id) { + $dbo->query('DELETE FROM dt_ddt WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); + $dbo->query('DELETE FROM dt_righe_ddt WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); + $dbo->query('DELETE FROM mg_movimenti WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); + } - $_SESSION['infos'][] = tr('Ddt eliminati!'); + $_SESSION['infos'][] = tr('Ddt eliminati!'); + + }else{ + $_SESSION['warnings'][] = tr('Procedura in fase di sviluppo. Nessuna modifica apportata.'); + } - break; - - + break; } return [ - 'delete-bulk' => tr('Elimina selezionati'), - + 'export-bulk' => [ 'text' => tr('Esporta stampe'), 'data' => [ diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 20ce89a84..e519a0ce5 100644 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -55,13 +55,13 @@ if ($module['name'] == 'Ddt di vendita') {
{[ "type": "span", "label": "'.tr('Numero ddt').'", "class": "text-center", "value": "$numero$" ]}
'; - } - ?> + } + ?>
{[ "type": "text", "label": "", "name": "numero_esterno", "class": "text-center", "value": "$numero_esterno$" ]} diff --git a/modules/ddt/modutil.php b/modules/ddt/modutil.php index 09954c83c..ffcf90cd7 100644 --- a/modules/ddt/modutil.php +++ b/modules/ddt/modutil.php @@ -23,13 +23,12 @@ function get_new_numerosecondarioddt($data) { global $dbo; global $dir; - - + // Calcolo il numero secondario se stabilito dalle impostazioni e se documento di vendita $formato_numero_secondario = get_var('Formato numero secondario ddt'); - + $query = "SELECT numero_esterno FROM dt_ddt WHERE DATE_FORMAT( data, '%Y' ) = '".date('Y', strtotime($data))."' AND idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir='".$dir."') ORDER BY numero_esterno DESC LIMIT 0,1"; - + $rs = $dbo->fetchArray($query); $numero_secondario = $rs[0]['numero_esterno']; @@ -39,7 +38,7 @@ function get_new_numerosecondarioddt($data) if ($formato_numero_secondario != '' && $dir == 'entrata') { //$numero_esterno = get_next_code($numero_secondario, 1, $formato_numero_secondario); - $numero_esterno = Util\Generator::generate($formato_numero_secondario, $numero_secondario); + $numero_esterno = Util\Generator::generate($formato_numero_secondario, $numero_secondario); } else { $numero_esterno = ''; } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 855959330..aa743aba9 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -25,7 +25,7 @@ switch (post('op')) { $id_segment = post('id_segment'); $numero = get_new_numerofattura($data); - + if ($dir == 'entrata') { $numero_esterno = get_new_numerosecondariofattura($data); $idconto = get_var('Conto predefinito fatture di vendita'); @@ -78,7 +78,6 @@ switch (post('op')) { $totale_imponibile = get_imponibile_fattura($id_record); $totale_fattura = get_totale_fattura($id_record); - if ($dir == 'uscita') { $idrivalsainps = post('idrivalsainps'); $idritenutaacconto = post('idritenutaacconto'); @@ -409,7 +408,7 @@ switch (post('op')) { // Collego in fattura eventuali articoli collegati all'intervento $rs2 = $dbo->fetchArray('SELECT mg_articoli_interventi.*, idarticolo FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento='.prepare($idintervento).' AND (idintervento NOT IN(SELECT idintervento FROM co_righe_preventivi WHERE idpreventivo IN(SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) AND idintervento NOT IN(SELECT idintervento FROM co_righe_contratti WHERE idcontratto IN(SELECT idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).')) )'); for ($i = 0; $i < sizeof($rs2); ++$i) { - $riga = add_articolo_infattura($id_record, $rs2[$i]['idarticolo'], $rs2[$i]['descrizione'], $idiva, $rs2[$i]['qta'], $rs2[$i]['prezzo_vendita'] * $rs2[$i]['qta'], $rs2[$i]['sconto'], $rs2[$i]['sconto_unitario'], $rs2[$i]['tipo_sconto'], $idintervento, 0, $rs2[$i]['um']); + $riga = add_articolo_infattura($id_record, $rs2[$i]['idarticolo'], $rs2[$i]['descrizione'], $rs2[$i]['idiva'], $rs2[$i]['qta'], $rs2[$i]['prezzo_vendita'] * $rs2[$i]['qta'], $rs2[$i]['sconto'], $rs2[$i]['sconto_unitario'], $rs2[$i]['tipo_sconto'], $idintervento, 0, $rs2[$i]['um']); // Lettura lotto, serial, altro dalla riga dell'ordine $dbo->query('INSERT INTO mg_prodotti (id_riga_documento, id_articolo, dir, serial, lotto, altro) SELECT '.prepare($riga).', '.prepare($rs2[$i]['idarticolo']).', '.prepare($dir).', serial, lotto, altro FROM mg_prodotti AS t WHERE id_riga_intervento='.prepare($rs2[$i]['id'])); @@ -421,7 +420,7 @@ switch (post('op')) { if (sizeof($rsr) > 0) { for ($i = 0; $i < sizeof($rsr); ++$i) { // Calcolo iva - $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); + $query = 'SELECT * FROM co_iva WHERE id='.prepare($rsr[$i]['idiva']); $rs = $dbo->fetchArray($query); $desc_iva = $rs[0]['descrizione']; @@ -968,7 +967,7 @@ switch (post('op')) { $id_segment = post('id_segment'); $numero = get_new_numerofattura($data); $numero_esterno = get_new_numerosecondariofattura($data); - + $tipo_documento = ($dir == 'entrata') ? 'Fattura immediata di vendita' : 'Fattura immediata di acquisto'; // Creazione nuova fattura @@ -1130,17 +1129,17 @@ switch (post('op')) { // Se ci sono degli interventi collegati li rimetto nello stato "Completato" //for ($i = 0; $i < sizeof($rs); ++$i) { - $dbo->query("UPDATE in_interventi SET idstatointervento='OK' WHERE id=".prepare($idintervento)); + $dbo->query("UPDATE in_interventi SET idstatointervento='OK' WHERE id=".prepare($idintervento)); - // Rimuovo dalla fattura gli articoli collegati all'intervento - $rs2 = $dbo->fetchArray('SELECT idarticolo FROM mg_articoli_interventi WHERE idintervento='.prepare($idintervento)); - for ($j = 0; $j < sizeof($rs2); ++$j) { - rimuovi_articolo_dafattura($rs[0]['idarticolo'], $id_record, $rs[0]['idrigadocumento']); - } + // Rimuovo dalla fattura gli articoli collegati all'intervento + $rs2 = $dbo->fetchArray('SELECT idarticolo FROM mg_articoli_interventi WHERE idintervento='.prepare($idintervento)); + for ($j = 0; $j < sizeof($rs2); ++$j) { + rimuovi_articolo_dafattura($rs[0]['idarticolo'], $id_record, $rs[0]['idrigadocumento']); + } //} - - //rimuovo riga da co_righe_documenti - $query = 'DELETE FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga); + + //rimuovo riga da co_righe_documenti + $query = 'DELETE FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga); $dbo->query($query); $_SESSION['infos'][] = tr('Intervento _NUM_ rimosso!', [ diff --git a/modules/fatture/add_serial.php b/modules/fatture/add_serial.php index 83ec496a5..b2c4cd7bc 100644 --- a/modules/fatture/add_serial.php +++ b/modules/fatture/add_serial.php @@ -78,7 +78,7 @@ if ($dir == 'entrata') { echo '
- {[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT DISTINCT serial AS id, serial AS descrizione FROM mg_prodotti WHERE dir=\'uscita\' AND mg_prodotti.id_articolo = '.prepare($rs[0]['idarticolo']).' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir=\'entrata\' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE '.$riga.' = \''.$idriga.'\'))'.(!empty($in) ? ' OR serial IN ('.$in.')' : '' ).'", "extra": "data-maximum=\"'.intval($rs[0]['qta']).'\"" ]} + {[ "type": "select", "label": "'.tr('Serial').'", "name": "serial[]", "multiple": 1, "value": "'.implode(',', $serials).'", "values": "query=SELECT DISTINCT serial AS id, serial AS descrizione FROM mg_prodotti WHERE dir=\'uscita\' AND mg_prodotti.id_articolo = '.prepare($rs[0]['idarticolo']).' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir=\'entrata\' AND serial NOT IN (SELECT serial FROM mg_prodotti WHERE '.$riga.' = \''.$idriga.'\'))'.(!empty($in) ? ' OR serial IN ('.$in.')' : '').'", "extra": "data-maximum=\"'.intval($rs[0]['qta']).'\"" ]}
'; } else { diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php index 78cd0c801..6a0b91909 100644 --- a/modules/fatture/bulk.php +++ b/modules/fatture/bulk.php @@ -48,30 +48,29 @@ switch (post('op')) { } break; - - - case 'delete-bulk': - - foreach ($id_records as $id) { - - - $dbo->query('DELETE FROM co_documenti WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM mg_movimenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - - } + case 'delete-bulk': + + if ($debug){ + foreach ($id_records as $id) { + $dbo->query('DELETE FROM co_documenti WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); + $dbo->query('DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); + $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); + $dbo->query('DELETE FROM mg_movimenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); + } - $_SESSION['infos'][] = tr('Fatture eliminate!'); - - break; + $_SESSION['infos'][] = tr('Fatture eliminate!'); + }else{ + $_SESSION['warnings'][] = tr('Procedura in fase di sviluppo. Nessuna modifica apportata.'); + } + + break; } return [ - + 'delete-bulk' => tr('Elimina selezionati'), - + 'export-bulk' => [ 'text' => tr('Esporta stampe'), 'data' => [ diff --git a/modules/fatture/controller_before.php b/modules/fatture/controller_before.php index 884dcc147..58fd631a7 100644 --- a/modules/fatture/controller_before.php +++ b/modules/fatture/controller_before.php @@ -1,12 +1,12 @@ fetchArray("SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = ".prepare($id_module)."LIMIT 0,1"); - $_SESSION['m'.$id_module]['id_segment'] = $rs[0]['id']; - } - - if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module\""))>1){ -?> + /*deve sempre essere impostato almeno un sezionale*/ + if (empty($_SESSION['m'.$id_module]['id_segment'])) { + $rs = $dbo->fetchArray('SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = '.prepare($id_module).'LIMIT 0,1'); + $_SESSION['m'.$id_module]['id_segment'] = $rs[0]['id']; + } + + if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module\"")) > 1) { + ?>
@@ -32,5 +32,5 @@ $(document).ready(function () { \ No newline at end of file diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 36173d38e..4c3de260d 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -262,13 +262,13 @@ if ($records[0]['stato'] == 'Emessa') { if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { 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($records[0]['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_righe_contratti 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($records[0]['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_righe_contratti 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($records[0]['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_righe_contratti 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($records[0]['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_righe_contratti WHERE idintervento IS NOT NULL)'; $interventi = $dbo->fetchArray($int_query)[0]['tot']; } diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 5663d43a7..2133f3280 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -9,47 +9,42 @@ function get_new_numerofattura($data) global $dir; global $id_segment; - if ($dir == 'uscita'){ - + if ($dir == 'uscita') { // recupero maschera per questo segmento $rs_maschera = $dbo->fetchArray("SELECT pattern FROM zz_segments WHERE id = '".$id_segment."'"); // esempio: ####/YY $maschera = $rs_maschera[0]['pattern']; // estraggo blocchi di caratteri standard da sostituire - preg_match('/[#]+/', $maschera, $m1 ); - preg_match('/[Y]+/', $maschera, $m2 ); + preg_match('/[#]+/', $maschera, $m1); + preg_match('/[Y]+/', $maschera, $m2); $query = "SELECT numero FROM co_documenti WHERE DATE_FORMAT(data,'%Y') = ".prepare(date('Y', strtotime($data)))." AND id_segment = '".$id_segment."'"; - - $pos1 = strpos( $maschera, $m1[0] ); - if( $pos1==0 ): - $query .= " ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1"; - else: - $query .= " ORDER BY numero DESC LIMIT 0,1"; + + $pos1 = strpos($maschera, $m1[0]); + if ($pos1 == 0): + $query .= ' ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1'; else: + $query .= ' ORDER BY numero DESC LIMIT 0,1'; endif; - - $rs_ultima_fattura = $dbo->fetchArray( $query ); + + $rs_ultima_fattura = $dbo->fetchArray($query); //$numero = get_next_code( $rs_ultima_fattura[0]['numero'], 1, $maschera ); $numero = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero']); // sostituisco anno nella maschera - $anno = substr( date('Y', strtotime($data)), -strlen($m2[0]) ); // nel caso ci fosse YY - $numero = str_replace( $m2[0], $anno, $numero ); + $anno = substr(date('Y', strtotime($data)), -strlen($m2[0])); // nel caso ci fosse YY + $numero = str_replace($m2[0], $anno, $numero); - /*echo $numero; - echo $maschera; - echo $query; - exit;*/ - - }else{ - - $query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = ".prepare(date('Y', strtotime($data)))." AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir = ".prepare($dir).") ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0, 1"; + /*echo $numero; + echo $maschera; + echo $query; + exit;*/ + } else { + $query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = ".prepare(date('Y', strtotime($data))).' AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir = '.prepare($dir).') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0, 1'; $rs = $dbo->fetchArray($query); $numero = $rs[0]['max_numerofattura'] + 1; - } return $numero; @@ -71,37 +66,36 @@ function get_new_numerosecondariofattura($data) $maschera = $rs_maschera[0]['pattern']; // estraggo blocchi di caratteri standard da sostituire - preg_match('/[#]+/', $maschera, $m1 ); - preg_match('/[Y]+/', $maschera, $m2 ); + preg_match('/[#]+/', $maschera, $m1); + preg_match('/[Y]+/', $maschera, $m2); $query = "SELECT numero_esterno FROM co_documenti WHERE DATE_FORMAT(data,'%Y') = ".prepare(date('Y', strtotime($data)))." AND id_segment='".$id_segment."'"; // Marzo 2017 // nel caso ci fossero lettere prima della maschera ### per il numero (es. FT-0001-2017) - // è necessario l'ordinamento alfabetico "ORDER BY numero_esterno" altrimenti + // è necessario l'ordinamento alfabetico "ORDER BY numero_esterno" altrimenti // nel caso di maschere del tipo 001-2017 è necessario l'ordinamento numerico "ORDER BY CAST(numero_esterno AS UNSIGNED)" - $pos1 = strpos( $maschera, $m1[0] ); - if( $pos1==0 ): - $query .= " ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1"; - else: - $query .= " ORDER BY numero_esterno DESC LIMIT 0,1"; + $pos1 = strpos($maschera, $m1[0]); + if ($pos1 == 0): + $query .= ' ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1'; else: + $query .= ' ORDER BY numero_esterno DESC LIMIT 0,1'; endif; - - $rs_ultima_fattura = $dbo->fetchArray( $query ); + + $rs_ultima_fattura = $dbo->fetchArray($query); //$numero_esterno = get_next_code( $rs_ultima_fattura[0]['numero_esterno'], 1, $maschera ); - $numero_esterno = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero_esterno']); - - /*echo $id_segment."
"; - echo $query."
"; - echo $rs_ultima_fattura[0]['numero_esterno']."
"; - echo $maschera."
"; - echo $numero_esterno."
"; - exit;*/ + $numero_esterno = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero_esterno']); + + /*echo $id_segment."
"; + echo $query."
"; + echo $rs_ultima_fattura[0]['numero_esterno']."
"; + echo $maschera."
"; + echo $numero_esterno."
"; + exit;*/ // sostituisco anno nella maschera - $anno = substr( date('Y', strtotime($data)), -strlen($m2[0]) ); // nel caso ci fosse YY - $numero_esterno = str_replace( $m2[0], $anno, $numero_esterno ); - + $anno = substr(date('Y', strtotime($data)), -strlen($m2[0])); // nel caso ci fosse YY + $numero_esterno = str_replace($m2[0], $anno, $numero_esterno); + return $numero_esterno; } diff --git a/modules/import/actions.php b/modules/import/actions.php index 3ff03cb6e..f6cc18e5b 100644 --- a/modules/import/actions.php +++ b/modules/import/actions.php @@ -17,7 +17,7 @@ switch (post('op')) { $fields = Import::getFields($id_record); $csv = Import::getFile($id_record, $records[0]['id'], [ - 'headers' => $first_row, + 'headers' => $first_row, ]); // Interpretazione dei dati diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index c04c91fc2..e49707519 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -402,6 +402,7 @@ switch (post('op')) { $descrizione = post('descrizione'); $qta = post('qta'); $um = post('um'); + $idiva = post('idiva'); $prezzo_vendita = post('prezzo_vendita'); $prezzo_acquisto = post('prezzo_acquisto'); @@ -409,8 +410,14 @@ switch (post('op')) { $tipo_sconto = $post['tipo_sconto']; $sconto = ($tipo_sconto == 'PRC') ? ($prezzo_vendita * $sconto_unitario) / 100 : $sconto_unitario; $sconto = $sconto * $qta; + + //Calcolo iva + $rs_iva = $dbo->fetchArray("SELECT * FROM co_iva WHERE id=".prepare($idiva).""); + $desc_iva = $rs_iva[0]['descrizione']; + + $iva = (($prezzo_vendita*$qta)-$sconto)*$rs_iva[0]['percentuale']/100; - $dbo->query('INSERT INTO in_righe_interventi(descrizione, qta, um, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idintervento) VALUES ('.prepare($descrizione).', '.prepare($qta).', '.prepare($um).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($id_record).')'); + $dbo->query('INSERT INTO in_righe_interventi(descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto, idintervento) VALUES ('.prepare($descrizione).', '.prepare($qta).', '.prepare($um).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($id_record).')'); break; @@ -419,6 +426,7 @@ switch (post('op')) { $descrizione = post('descrizione'); $qta = post('qta'); $um = post('um'); + $idiva = post('idiva'); $prezzo_vendita = post('prezzo_vendita'); $prezzo_acquisto = post('prezzo_acquisto'); @@ -426,6 +434,12 @@ switch (post('op')) { $tipo_sconto = $post['tipo_sconto']; $sconto = ($tipo_sconto == 'PRC') ? ($prezzo_vendita * $sconto_unitario) / 100 : $sconto_unitario; $sconto = $sconto * $qta; + + //Calcolo iva + $rs_iva = $dbo->fetchArray("SELECT * FROM co_iva WHERE id=".prepare($idiva).""); + $desc_iva = $rs_iva[0]['descrizione']; + + $iva = (($prezzo_vendita*$qta)-$sconto)*$rs_iva[0]['percentuale']/100; $dbo->query('UPDATE in_righe_interventi SET '. ' descrizione='.prepare($descrizione).','. @@ -433,6 +447,9 @@ switch (post('op')) { ' um='.prepare($um).','. ' prezzo_vendita='.prepare($prezzo_vendita).','. ' prezzo_acquisto='.prepare($prezzo_acquisto).','. + ' idiva='.prepare($idiva).','. + ' desc_iva='.prepare($desc_iva).','. + ' iva='.prepare($iva).','. ' sconto='.prepare($sconto).','. ' sconto_unitario='.prepare($sconto_unitario).','. ' tipo_sconto='.prepare($tipo_sconto). @@ -487,6 +504,7 @@ switch (post('op')) { $qta = post('qta'); $um = post('um'); $prezzo_vendita = post('prezzo_vendita'); + $idiva = post('idiva'); $sconto_unitario = $post['sconto']; $tipo_sconto = $post['tipo_sconto']; @@ -501,9 +519,15 @@ switch (post('op')) { $rsart = $dbo->fetchArray('SELECT abilita_serial, prezzo_acquisto FROM mg_articoli WHERE id='.prepare($idarticolo)); $prezzo_acquisto = $rsart[0]['prezzo_acquisto']; + + //Calcolo iva + $rs_iva = $dbo->fetchArray("SELECT * FROM co_iva WHERE id=".prepare($idiva).""); + $desc_iva = $rs_iva[0]['descrizione']; + + $iva = (($prezzo_vendita*$qta)-$sconto)*$rs_iva[0]['percentuale']/100; // Aggiunto il collegamento fra l'articolo e l'intervento - $idriga = $dbo->query('INSERT INTO mg_articoli_interventi(idarticolo, idintervento, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva_vendita, qta, um, abilita_serial) VALUES ('.prepare($idarticolo).', '.prepare($id_record).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT idiva_vendita FROM mg_articoli WHERE id='.prepare($idarticolo).'), '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).')'); + $idriga = $dbo->query('INSERT INTO mg_articoli_interventi(idarticolo, idintervento, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva, desc_iva, iva, qta, um, abilita_serial) VALUES ('.prepare($idarticolo).', '.prepare($id_record).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).')'); if (!empty($serials)) { if ($old_qta > $qta) { diff --git a/modules/interventi/add.php b/modules/interventi/add.php index c33fc1d4a..0a135716b 100644 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -19,7 +19,7 @@ $impianti = []; if (!empty($idanagrafica)) { $rs = $dbo->fetchArray('SELECT idtipointervento_default, idzona FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica)); $idtipointervento = $rs[0]['idtipointervento_default']; - $idzona = $rs[0]['idzona']; + $idzona = $rs[0]['idzona']; $idstatointervento = 'WIP'; $richiesta = filter('richiesta'); } @@ -41,8 +41,8 @@ $idcontratto_riga = filter('idcontratto_riga'); if (!empty($idcontratto) && !empty($idordineservizio)) { $rs = $dbo->fetchArray('SELECT *, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS idzona FROM co_contratti WHERE id='.prepare($idcontratto)); $idanagrafica = $rs[0]['idanagrafica']; - $idzona = $rs[0]['idzona']; - + $idzona = $rs[0]['idzona']; + // Info riga pianificata $rs = $dbo->fetchArray('SELECT * FROM co_ordiniservizio WHERE idcontratto='.prepare($idcontratto).' AND id='.prepare($idordineservizio)); $data = $rs[0]['data_scadenza']; @@ -61,7 +61,7 @@ if (!empty($idcontratto) && !empty($idordineservizio)) { elseif (!empty($idcontratto) && !empty($idcontratto_riga)) { $rs = $dbo->fetchArray('SELECT *, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS idzona FROM co_contratti WHERE id='.prepare($idcontratto)); $idanagrafica = $rs[0]['idanagrafica']; - $idzona = $rs[0]['idzona']; + $idzona = $rs[0]['idzona']; // Info riga pianificata $rs = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto).' AND id='.prepare($idcontratto_riga)); @@ -202,7 +202,7 @@ if (empty($new_codice)) {
- {[ "type": "select", "label": "", "multiple": "1", "name": "idtecnico[]", "required": , "ajax-source": "tecnici", "value": "" ]} + {[ "type": "select", "label": "", "multiple": "1", "name": "idtecnico[]", "required": , "ajax-source": "tecnici", "value": "" ]}
diff --git a/modules/interventi/add_articolo.php b/modules/interventi/add_articolo.php index f1f254115..59c0254c9 100644 --- a/modules/interventi/add_articolo.php +++ b/modules/interventi/add_articolo.php @@ -50,7 +50,8 @@ if (empty($idriga)) { $descrizione = $rsr[0]['descrizione']; $qta = $rsr[0]['qta']; $um = $rsr[0]['um']; - + $idiva = $rsr[0]['idiva']; + $prezzo_vendita = $rsr[0]['prezzo_vendita']; $sconto_unitario = $rsr[0]['sconto_unitario']; @@ -111,17 +112,23 @@ echo ' {[ "type": "select", "label": "'.tr('Impianto su cui installare').'", "name": "idimpianto", "value": "'.$idimpianto.'", "ajax-source": "impianti" ]}
'; + +// Iva +echo ' +
+
+ {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]} +
'; // Prezzo di vendita echo ' -
-
+
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo_vendita", "required": 1, "value": "'.$prezzo_vendita.'", "icon-after": "€" ]}
'; // Sconto echo ' -
+
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc|'.$tipo_sconto.'", "value": "'.$sconto_unitario.'" ]}
'; @@ -165,6 +172,7 @@ echo ' $("#prezzo_vendita").val($data.prezzo_vendita); $("#descrizione_articolo").val($data.descrizione); + $("#idiva").selectSet($data.idiva_vendita, $data.iva_vendita); $("#um").selectSetNew($data.um, $data.um); }else{ $("#prezzi_articolo button").addClass("disabled"); diff --git a/modules/interventi/add_righe.php b/modules/interventi/add_righe.php index 6de780d1b..54a77958c 100644 --- a/modules/interventi/add_righe.php +++ b/modules/interventi/add_righe.php @@ -35,9 +35,10 @@ if (empty($idriga)) { $descrizione = $rsr[0]['descrizione']; $qta = $rsr[0]['qta']; $um = $rsr[0]['um']; + $idiva = $rsr[0]['idiva']; $prezzo_vendita = $rsr[0]['prezzo_vendita']; $prezzo_acquisto = $rsr[0]['prezzo_acquisto']; - + $sconto_unitario = $rsr[0]['sconto_unitario']; $tipo_sconto = $rsr[0]['tipo_sconto']; } @@ -70,6 +71,12 @@ echo ' echo '
{[ "type": "select", "label": "'.tr('Unità di misura').'", "icon-after": "add|'.Modules::get('Unità di misura')['id'].'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]} +
'; + +// Iva +echo ' +
+ {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC" ]}
'; diff --git a/modules/interventi/ajax_articoli.php b/modules/interventi/ajax_articoli.php index 871be388e..3670dd755 100644 --- a/modules/interventi/ajax_articoli.php +++ b/modules/interventi/ajax_articoli.php @@ -22,7 +22,8 @@ if (!empty($rs)) { if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') { echo ' '.tr('Prezzo di vendita').' - '.tr('Subtotale').''; + '.tr('Iva').' + '.tr('Imponibile').''; } if (!$records[0]['flg_completato']) { @@ -100,6 +101,12 @@ if (!empty($rs)) { '; } + echo ' + '; + + echo ' + + '.Translator::numberToLocale($r['iva']).' €'; echo ' '; diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php index bc9a27dcb..8013da574 100644 --- a/modules/interventi/ajax_costi.php +++ b/modules/interventi/ajax_costi.php @@ -76,22 +76,22 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') { '.tr('Imponibile', [], ['upper' => true]).' '.Translator::numberToLocale($costi['totale_costo']).' € '.Translator::numberToLocale($costi['totale_addebito']).' € - '.Translator::numberToLocale($costi['totale']).' € + '.Translator::numberToLocale($costi['totale_scontato']).' € - '.tr('IVA (_DESC_)', [_DESC_ => $rs_iva[0]['descrizione']], ['upper' => true]).' - '.Translator::numberToLocale(($costi['totale_costo'] / 100 * $rs_iva[0]['percentuale'])).' € - '.Translator::numberToLocale(($costi['totale_addebito'] / 100 * $rs_iva[0]['percentuale'])).' € - '.Translator::numberToLocale(($costi['totale'] / 100 * $rs_iva[0]['percentuale'])).' € + '.tr('IVA', [], ['upper' => true]).' + '.Translator::numberToLocale($costi['iva_costo']).' € + '.Translator::numberToLocale($costi['iva_addebito']).' € + '.Translator::numberToLocale($costi['iva_totale']).' € '.tr('Totale', [], ['upper' => true]).' - '.Translator::numberToLocale($costi['totale_costo'] + ($costi['totale_costo'] / 100 * $rs_iva[0]['percentuale'])).' € - '.Translator::numberToLocale($costi['totale_addebito'] + ($costi['totale_addebito'] / 100 * $rs_iva[0]['percentuale'])).' € - '.Translator::numberToLocale($costi['totale'] + ($costi['totale'] / 100 * $rs_iva[0]['percentuale'])).' € + '.Translator::numberToLocale($costi['totaleivato_costo']).' € + '.Translator::numberToLocale($costi['totaleivato_addebito']).' € + '.Translator::numberToLocale($costi['totale']).' € '; } diff --git a/modules/interventi/ajax_righe.php b/modules/interventi/ajax_righe.php index 05951849a..494a906c5 100644 --- a/modules/interventi/ajax_righe.php +++ b/modules/interventi/ajax_righe.php @@ -16,6 +16,7 @@ if (count($rs2) > 0) { if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') { echo ' '.tr('Prezzo di vendita').' + '.tr('Iva').' '.tr('Subtotale').''; } @@ -64,6 +65,12 @@ if (count($rs2) > 0) { '; } + echo ' + '; + + echo ' + + '.Translator::numberToLocale($r['iva']).' €'; echo ' '; diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php index 639635145..2db847559 100644 --- a/modules/interventi/bulk.php +++ b/modules/interventi/bulk.php @@ -1,12 +1,11 @@ fetchArray("SELECT idanagrafica FROM in_interventi WHERE id='".$id_records[0]."'"); - + $idanagrafica = $rs_idanagrafica[0]['idanagrafica']; $data = date('Y-m-d'); $dir = 'entrata'; $idtipodocumento = '2'; - - if (empty($_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'])){ - $rs = $dbo->fetchArray("SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = ".prepare(Modules::get('Fatture di vendita')['id'])."LIMIT 0,1"); - $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'] = $rs[0]['id']; - } + if (empty($_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'])) { + $rs = $dbo->fetchArray('SELECT id FROM zz_segments WHERE predefined = 1 AND id_module = '.prepare(Modules::get('Fatture di vendita')['id']).'LIMIT 0,1'); + $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment'] = $rs[0]['id']; + } $id_segment = $_SESSION['m'.Modules::get('Fatture di vendita')['id']]['id_segment']; @@ -89,16 +87,14 @@ switch (post('op')) { if ($dir == 'entrata' && $idpagamento == '') { $idpagamento = get_var('Tipo di pagamento predefinito'); } - - - $n_interventi = 0; - - //inserisco righe - for( $i=0; $ifetchArray($q); - - if (count($rs)>0){ - - //al primo ciclo preparo la fattura - if ($n_interventi == 0){ - //preparo fattura - $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, idanagrafica, idconto, idtipodocumento, idpagamento, data, idstatodocumento, idsede, id_segment) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idconto).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica=".prepare($idanagrafica).'), '.$id_segment.' )'); - $iddocumento = $dbo->lastInsertedID(); - } - - $n_interventi++; - - $subtot_consuntivo = $rs[0]['tot_ore_consuntivo'] + $rs[0]['tot_km_consuntivo']; - //Calcolo sconto se è stato arrotondato il prezzo - $subtot = $subtot_consuntivo; - $sconto = 0; + if (count($rs) > 0) { + //al primo ciclo preparo la fattura + if ($n_interventi == 0) { + //preparo fattura + $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, idanagrafica, idconto, idtipodocumento, idpagamento, data, idstatodocumento, idsede, id_segment) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idconto).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica=".prepare($idanagrafica).'), '.$id_segment.' )'); + $iddocumento = $dbo->lastInsertedID(); + } - //Aggiungo un'eventuale sconto in base al listino del cliente - if( $prc_sconto < 0 ){ - $sconto += $subtot/100*abs($prc_sconto); - } + ++$n_interventi; - $descrizione = "Intervento numero ".$rs[0]['id']." del ".date( "d/m/Y", strtotime($rs[0]['data']) )."\n".html_entity_decode ( $rs[0]['descrizione'] ); + $subtot_consuntivo = $rs[0]['tot_ore_consuntivo'] + $rs[0]['tot_km_consuntivo']; - //Aggiunta impianti - $rsi = $dbo->fetchArray("SELECT * FROM my_impianti_interventi INNER JOIN my_impianti ON my_impianti.id=my_impianti_interventi.idimpianto WHERE idintervento=\"".$rs[0]['id']."\""); - if( sizeof($rsi) > 0 ){ - $descrizione .= "\nIMPIANTI:\n"; + //Calcolo sconto se è stato arrotondato il prezzo + $subtot = $subtot_consuntivo; + $sconto = 0; - for( $b=0; $bfetchArray("SELECT mg_articoli.descrizione, mg_articoli.codice, mg_articoli.prezzo_vendita, mg_articoli_interventi.qta, mg_articoli_interventi.sconto FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento=\"".$rs[0]['id']."\""); + //Aggiungo un'eventuale sconto in base al listino del cliente + if ($prc_sconto < 0) { + $sconto += $subtot / 100 * abs($prc_sconto); + } - if( sizeof($rsa) > 0 ){ - $descrizione .= "\nARTICOLI UTILIZZATI:\n"; + $descrizione = 'Intervento numero '.$rs[0]['id'].' del '.date('d/m/Y', strtotime($rs[0]['data']))."\n".html_entity_decode($rs[0]['descrizione']); - for( $a=0; $afetchArray('SELECT * FROM my_impianti_interventi INNER JOIN my_impianti ON my_impianti.id=my_impianti_interventi.idimpianto WHERE idintervento="'.$rs[0]['id'].'"'); + if (sizeof($rsi) > 0) { + $descrizione .= "\nIMPIANTI:\n"; - //Aggiunta spese aggiuntive - $rsa = $dbo->fetchArray("SELECT descrizione, qta, prezzo_vendita FROM in_righe_interventi WHERE idintervento=\"".$rs[0]['id']."\""); + for ($b = 0; $b < sizeof($rsi); ++$b) { + $descrizione .= $rsi[$b]['matricola'].' - '.str_replace('"', '&quot;', $rsi[$b]['nome'])."\n"; + } + } + //Aggiunta articoli utilizzati + $rsa = $dbo->fetchArray('SELECT mg_articoli.descrizione, mg_articoli.codice, mg_articoli.prezzo_vendita, mg_articoli_interventi.qta, mg_articoli_interventi.sconto FROM mg_articoli_interventi INNER JOIN mg_articoli ON mg_articoli_interventi.idarticolo=mg_articoli.id WHERE idintervento="'.$rs[0]['id'].'"'); - if( sizeof($rsa) > 0 ){ - $descrizione .= "\nALTRI COSTI:\n"; + if (sizeof($rsa) > 0) { + $descrizione .= "\nARTICOLI UTILIZZATI:\n"; - for( $a=0; $afetchArray("SELECT idanagrafica, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='".$rs[0]['id']."') AS data FROM `in_interventi` WHERE id='".$rs[0]['id']."'"); - $idanagrafica = $rs[0]['idanagrafica']; - $data = $rs[0]['data']; + //Aggiunta spese aggiuntive + $rsa = $dbo->fetchArray('SELECT descrizione, qta, prezzo_vendita FROM in_righe_interventi WHERE idintervento="'.$rs[0]['id'].'"'); + if (sizeof($rsa) > 0) { + $descrizione .= "\nALTRI COSTI:\n"; - //Calcolo iva - $idiva = get_var("Iva predefinita"); - $query = "SELECT * FROM co_iva WHERE id='".$idiva."'"; - $rs = $dbo->fetchArray($query); + for ($a = 0; $a < sizeof($rsa); ++$a) { + $descrizione .= $rsa[$a]['descrizione'].' (x'.number_format($rsa[$a]['qta'], 2, ',', '.').")\n"; + $subtot += $rsa[$a]['prezzo'] * $rsa[$a]['qta']; + $sconto += $rsa[$a]['sconto']; + } + } - $iva = ($subtot-$sconto)/100*$rs[0]['percentuale']; - $iva_indetraibile = $iva/100*$rs[0]['indetraibile']; - $desc_iva = $rs[0]['descrizione']; + //Leggo l'anagrafica del cliente + $rs = $dbo->fetchArray("SELECT idanagrafica, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='".$rs[0]['id']."') AS data FROM `in_interventi` WHERE id='".$rs[0]['id']."'"); + $idanagrafica = $rs[0]['idanagrafica']; + $data = $rs[0]['data']; - //Calcolo rivalsa inps - $query = "SELECT * FROM co_rivalsainps WHERE id='".get_var("Percentuale rivalsa INPS")."'"; - $rs = $dbo->fetchArray($query); - $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + //Calcolo iva + $idiva = get_var('Iva predefinita'); + $query = "SELECT * FROM co_iva WHERE id='".$idiva."'"; + $rs = $dbo->fetchArray($query); - //Calcolo ritenuta d'acconto - $query = "SELECT * FROM co_ritenutaacconto WHERE id='".get_var("Percentuale ritenuta d'acconto")."'"; - $rs = $dbo->fetchArray($query); - $ritenutaacconto = ($subtot+$rivalsainps) / 100 * $rs[0]['percentuale']; + $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; + $desc_iva = $rs[0]['descrizione']; + //Calcolo rivalsa inps + $query = "SELECT * FROM co_rivalsainps WHERE id='".get_var('Percentuale rivalsa INPS')."'"; + $rs = $dbo->fetchArray($query); + $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; - //Aggiunta riga intervento sul documento - $query1 = "INSERT INTO co_righe_documenti( iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto ) VALUES( \"$iddocumento\", \"$idintervento\", \"".$idiva."\", \"$desc_iva\", \"$iva\", \"$iva_indetraibile\", \"$descrizione\", \"$subtot\", \"".$sconto."\", \"ore\", \"1\", \"".get_var("Percentuale rivalsa INPS")."\", \"".$rivalsainps."\", \"".get_var("Percentuale ritenuta d'acconto")."\", \"".$ritenutaacconto."\" )"; - if( $dbo->query( $query1 ) ){ - - //Ricalcolo inps, ritenuta e bollo - if( $dir=='entrata' ){ - ricalcola_costiagg_fattura($iddocumento); - }else{ - ricalcola_costiagg_fattura($iddocumento, 0, 0, 0); - } + //Calcolo ritenuta d'acconto + $query = "SELECT * FROM co_ritenutaacconto WHERE id='".get_var("Percentuale ritenuta d'acconto")."'"; + $rs = $dbo->fetchArray($query); + $ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; - //Metto l'intervento in stato "Fatturato" - $dbo->query("UPDATE in_interventi SET idstatointervento='FAT' WHERE id='$idintervento'"); + //Aggiunta riga intervento sul documento + $query1 = "INSERT INTO co_righe_documenti( iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto ) VALUES( \"$iddocumento\", \"$idintervento\", \"".$idiva."\", \"$desc_iva\", \"$iva\", \"$iva_indetraibile\", \"$descrizione\", \"$subtot\", \"".$sconto.'", "ore", "1", "'.get_var('Percentuale rivalsa INPS').'", "'.$rivalsainps.'", "'.get_var("Percentuale ritenuta d'acconto").'", "'.$ritenutaacconto.'" )'; + if ($dbo->query($query1)) { + //Ricalcolo inps, ritenuta e bollo + if ($dir == 'entrata') { + ricalcola_costiagg_fattura($iddocumento); + } else { + ricalcola_costiagg_fattura($iddocumento, 0, 0, 0); + } - } - - } + //Metto l'intervento in stato "Fatturato" + $dbo->query("UPDATE in_interventi SET idstatointervento='FAT' WHERE id='$idintervento'"); + } + } } - - - if ($n_interventi>0) { - - $_SESSION['infos'][] = tr('Fattura _NUM_ creata!', [ - '_NUM_' => $numero_esterno, - ]); - - $_SESSION['infos'][] = tr('_NUM_ interventi fatturati!', [ - '_NUM_' => $n_interventi, - ]); - - }else{ - $_SESSION['warnings'][] = tr('Nessuna attività fatturata!'); - } - - - break; + + if ($n_interventi > 0) { + $_SESSION['infos'][] = tr('Fattura _NUM_ creata!', [ + '_NUM_' => $numero_esterno, + ]); + + $_SESSION['infos'][] = tr('_NUM_ interventi fatturati!', [ + '_NUM_' => $n_interventi, + ]); + } else { + $_SESSION['warnings'][] = tr('Nessuna attività fatturata!'); + } + + break; } return [ - - 'export-bulk' => [ + 'export-bulk' => [ 'text' => tr('Esporta stampe'), 'data' => [ 'msg' => tr('Vuoi davvero esportare queste stampe in un archivio?'), @@ -245,7 +230,7 @@ return [ 'blank' => true, ], ], - + 'creafatturavendita' => [ 'text' => tr('Crea fattura'), 'data' => [ @@ -255,7 +240,4 @@ return [ 'blank' => false, ], ], - ]; - -?> \ No newline at end of file diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index f1fdfb57d..eb4f1e5cc 100644 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -160,6 +160,9 @@ function get_costi_intervento($id_intervento) $dbo = Database::getConnection(); $decimals = Settings::get('Cifre decimali per importi'); + + $idiva = get_var('Iva predefinita'); + $rs_iva = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva)); $tecnici = $dbo->fetchArray('SELECT COALESCE(SUM( @@ -203,7 +206,10 @@ function get_costi_intervento($id_intervento) ), 0) AS ricambi_addebito, COALESCE(SUM( ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') - ), 0) AS ricambi_scontato + ), 0) AS ricambi_scontato, + ROUND( + (SELECT percentuale FROM co_iva WHERE co_iva.id=mg_articoli_interventi.idiva), '.$decimals.' + ) AS ricambi_iva FROM mg_articoli_interventi WHERE idintervento='.prepare($id_intervento)); @@ -216,7 +222,10 @@ function get_costi_intervento($id_intervento) ), 0) AS altro_addebito, COALESCE(SUM( ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') - ), 0) AS altro_scontato + ), 0) AS altro_scontato, + ROUND( + (SELECT percentuale FROM co_iva WHERE co_iva.id=in_righe_interventi.idiva), '.$decimals.' + ) AS altro_iva FROM in_righe_interventi WHERE idintervento='.prepare($id_intervento)); @@ -245,13 +254,63 @@ function get_costi_intervento($id_intervento) $result['ricambi_scontato'], $result['altro_scontato'], ]); + + $result['iva_costo'] = sum([ + $result['manodopera_costo']*$rs_iva[0]['percentuale']/100, + $result['dirittochiamata_costo']*$rs_iva[0]['percentuale']/100, + $result['viaggio_costo']*$rs_iva[0]['percentuale']/100, + $result['ricambi_costo']*$result['ricambi_iva']/100, + $result['altro_costo']*$result['altro_iva']/100, + ]); + + $result['iva_addebito'] = sum([ + $result['manodopera_addebito']*$rs_iva[0]['percentuale']/100, + $result['dirittochiamata_addebito']*$rs_iva[0]['percentuale']/100, + $result['viaggio_addebito']*$rs_iva[0]['percentuale']/100, + $result['ricambi_addebito']*$result['ricambi_iva']/100, + $result['altro_addebito']*$result['altro_iva']/100, + ]); + + $result['iva_totale'] = sum([ + $result['manodopera_scontato']*$rs_iva[0]['percentuale']/100, + $result['dirittochiamata_scontato']*$rs_iva[0]['percentuale']/100, + $result['viaggio_scontato']*$rs_iva[0]['percentuale']/100, + $result['ricambi_scontato']*$result['ricambi_iva']/100, + $result['altro_scontato']*$result['altro_iva']/100, + ]); + + $result['totaleivato_costo'] = sum([ + $result['manodopera_costo']+($result['manodopera_costo']*$rs_iva[0]['percentuale']/100), + $result['dirittochiamata_costo']+($result['dirittochiamata_costo']*$rs_iva[0]['percentuale']/100), + $result['viaggio_costo']+($result['viaggio_costo']*$rs_iva[0]['percentuale']/100), + $result['ricambi_costo']+($result['ricambi_costo']*$result['ricambi_iva']/100), + $result['altro_costo']+($result['altro_costo']*$result['altro_iva']/100), + ]); + + $result['totaleivato_addebito'] = sum([ + $result['manodopera_addebito']+($result['manodopera_addebito']*$rs_iva[0]['percentuale']/100), + $result['dirittochiamata_addebito']+($result['dirittochiamata_addebito']*$rs_iva[0]['percentuale']/100), + $result['viaggio_addebito']+($result['viaggio_addebito']*$rs_iva[0]['percentuale']/100), + $result['ricambi_addebito']+($result['ricambi_addebito']*$result['ricambi_iva']/100), + $result['altro_addebito']+($result['altro_addebito']*$result['altro_iva']/100), + ]); + + $result['totale'] = sum([ + $result['manodopera_scontato']+($result['manodopera_scontato']*$rs_iva[0]['percentuale']/100), + $result['dirittochiamata_scontato']+($result['dirittochiamata_scontato']*$rs_iva[0]['percentuale']/100), + $result['viaggio_scontato']+($result['viaggio_scontato']*$rs_iva[0]['percentuale']/100), + $result['ricambi_scontato']+($result['ricambi_scontato']*$result['ricambi_iva']/100), + $result['altro_scontato']+($result['altro_scontato']*$result['altro_iva']/100), + ]); // Calcolo dello sconto incondizionato $sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_intervento))[0]; - $result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $result['totale_scontato'] * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale']; + $result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $result['totale'] * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale']; $result['sconto_globale'] = round($result['sconto_globale'], $decimals); - - $result['totale'] = sum($result['totale_scontato'], -$result['sconto_globale']); + + $result['totale_scontato'] = sum($result['totale_scontato'], -$result['sconto_globale']); + $result['iva_totale'] = sum($result['iva_totale'], -($result['sconto_globale']*$rs_iva[0]['percentuale']/100)); + $result['totale'] = sum($result['totale'], -($result['sconto_globale']+($result['sconto_globale']*$rs_iva[0]['percentuale']/100))); return $result; } diff --git a/modules/my_impianti/plugins/my_impianti.interventi.php b/modules/my_impianti/plugins/my_impianti.interventi.php index 05af81e17..82a0cea1e 100644 --- a/modules/my_impianti/plugins/my_impianti.interventi.php +++ b/modules/my_impianti/plugins/my_impianti.interventi.php @@ -176,7 +176,7 @@ echo '
- {[ "type": "select", "name": "matricole[]", "multiple": 1, "value": "'.implode(',', $impianti).'", "values": "query=SELECT my_impianti.id, CONCAT(matricola, \' - \', nome) AS descrizione, CONCAT(nomesede, IF(citta IS NULL OR citta = \'\', \'\', CONCAT(\' (\', citta, \')\'))) AS optgroup FROM my_impianti JOIN (SELECT id, nomesede, citta FROM an_sedi UNION SELECT 0, \'Sede legale\', \'\') AS t ON t.id = my_impianti.idsede WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' ORDER BY idsede ASC, matricola ASC", "extra": "'.$readonly.'" ]} + {[ "type": "select", "name": "matricole[]", "multiple": 1, "value": "'.implode(',', $impianti).'", "values": "query=SELECT my_impianti.id, CONCAT(matricola, \' - \', nome) AS descrizione, CONCAT(nomesede, IF(citta IS NULL OR citta = \'\', \'\', CONCAT(\' (\', citta, \')\'))) AS optgroup FROM my_impianti JOIN (SELECT id, nomesede, citta FROM an_sedi UNION SELECT 0 AS id, \'Sede legale\' AS nomesede, \'\' AS citta) AS t ON t.id = my_impianti.idsede WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' ORDER BY idsede ASC, matricola ASC", "extra": "'.$readonly.'" ]}


diff --git a/modules/segmenti/actions.php b/modules/segmenti/actions.php index 65e474ffd..36da7b3cc 100644 --- a/modules/segmenti/actions.php +++ b/modules/segmenti/actions.php @@ -6,20 +6,22 @@ switch (post('op')) { case 'update': $name = post('name'); - $category = post('category'); + $category = post('category'); (strpos(post('pattern'), '#') !== false) ? $pattern = post('pattern') : $maschera = '####'; $id_module_ = post('id_module_'); $note = post('note'); - $clause = post('clause'); - $predefined = $post['predefined']; - $position = post('position'); - - if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module_\""))==0) - $predefined = 1; - - if ($predefined) - $dbo->query("UPDATE zz_segments SET predefined = 0 WHERE id_module = \"$id_module_\""); - + $clause = post('clause'); + $predefined = $post['predefined']; + $position = post('position'); + + if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module_\"")) == 0) { + $predefined = 1; + } + + if ($predefined) { + $dbo->query("UPDATE zz_segments SET predefined = 0 WHERE id_module = \"$id_module_\""); + } + $query = "UPDATE zz_segments SET name=\"$name\", clause=\"$clause\", position=\"$position\", pattern=\"$pattern\", id_module=\"$id_module_\", note=\"$note\", predefined=\"$predefined\" WHERE id=\"$id_record\""; $rs = $dbo->query($query); @@ -31,19 +33,21 @@ switch (post('op')) { case 'add': $name = post('name'); - $category = post('category'); + $category = post('category'); (strpos(post('pattern'), '#') !== false) ? $pattern = post('pattern') : $pattern = '####'; $id_module_ = post('id_module_'); $note = post('note'); - $predefined = $post['predefined']; - $clause = '1=1'; - - if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module_\""))==0) - $predefined = 1; + $predefined = $post['predefined']; + $clause = '1=1'; + + if (count($dbo->fetchArray("SELECT id FROM zz_segments WHERE id_module = \"$id_module_\"")) == 0) { + $predefined = 1; + } + + if ($predefined) { + $dbo->query("UPDATE zz_segments SET predefined = 0 WHERE id_module = \"$id_module_\""); + } - if ($predefined) - $dbo->query("UPDATE zz_segments SET predefined = 0 WHERE id_module = \"$id_module_\""); - $dbo->query("INSERT INTO zz_segments( name, clause, pattern, id_module, note, predefined ) VALUES ( \"$name\", \"$clause\", \"$pattern\", \"$id_module_\", \"$note\", \"$predefined\" )"); $id_record = $dbo->last_inserted_id(); diff --git a/modules/segmenti/edit.php b/modules/segmenti/edit.php index 76caa3198..8e671412a 100644 --- a/modules/segmenti/edit.php +++ b/modules/segmenti/edit.php @@ -17,13 +17,13 @@
- {[ "type": "select", "label": "", "name": "id_module_", "required": 1, "class": "", "values": "query=SELECT id, name AS descrizione FROM zz_modules WHERE ( enabled = 1 AND options != 'custom' ) OR id = ORDER BY name ASC", "value": "$id_module$", "extra": "" ]} + {[ "type": "select", "label": "", "name": "id_module_", "required": 1, "class": "", "values": "query=SELECT id, name AS descrizione FROM zz_modules WHERE ( enabled = 1 AND options != 'custom' ) OR id = ORDER BY name ASC", "value": "$id_module$", "extra": "" ]}
+ //($records[0]['n_sezionali']<2) ? $records[0]['predefined']=1 : ''; + ?> {[ "type": "checkbox", "label": "", "name": "predefined", "value": "$predefined$", "help": "", "placeholder": "", "extra": "" ]}
@@ -63,15 +63,15 @@
fetchArray("SELECT COUNT(*) AS tot FROM ".$table[0]." WHERE id_segment = ".prepare($id_record)); - $tot = $righe[0]['tot']; - } - ?> + $array = preg_match('/(?<=FROM)\s([^\s]+)\s/', $records[0]['options'], $table); + if (strpos($table[0], 'co_documenti') !== false) { + $righe = $dbo->fetchArray('SELECT COUNT(*) AS tot FROM '.$table[0].' WHERE id_segment = '.prepare($id_record)); + $tot = $righe[0]['tot']; + } + ?>
- {[ "type": "text", "label": "", "name": "pattern", "required": 1, "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/YY", "extra": "0) ? 'readonly' : ''; ?>" ]} + {[ "type": "text", "label": "", "name": "pattern", "required": 1, "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/YY", "extra": " 0) ? 'readonly' : ''; ?>" ]}
@@ -110,46 +110,37 @@ 0) { - echo "
"; - - echo tr("Ci sono _TOT_ righe collegate al segmento per il modulo '_MODULO_'. Il comando elimina è stato disattivato, eliminare le righe per attivare il comando 'Elimina segmento'.", [ - '_TOT_' => $tot, - '_MODULO_' => $records[0]['modulo'], - ]); - echo "
"; + if ($tot > 0) { + echo "
"; - } - else if ($records[0]['predefined']) { + echo tr("Ci sono _TOT_ righe collegate al segmento per il modulo '_MODULO_'. Il comando elimina è stato disattivato, eliminare le righe per attivare il comando 'Elimina segmento'.", [ + '_TOT_' => $tot, + '_MODULO_' => $records[0]['modulo'], + ]); - echo "
"; - - echo tr("Questo è il segmento predefinito per il modulo '_MODULO_'. Il comando elimina è stato disattivato.", [ - '_MODULO_' => $records[0]['modulo'], - ]); + echo '
'; + } elseif ($records[0]['predefined']) { + echo "
"; - echo "
"; + echo tr("Questo è il segmento predefinito per il modulo '_MODULO_'. Il comando elimina è stato disattivato.", [ + '_MODULO_' => $records[0]['modulo'], + ]); - } - else if ($records[0]['n_sezionali']<2) { + echo '
'; + } elseif ($records[0]['n_sezionali'] < 2) { + echo "
"; - echo "
"; - - echo tr("Questo è l'unico segmento per il modulo '_MODULO_'. Il comando elimina è stato disattivato.", [ - '_MODULO_' => $records[0]['modulo'], - ]); + echo tr("Questo è l'unico segmento per il modulo '_MODULO_'. Il comando elimina è stato disattivato.", [ + '_MODULO_' => $records[0]['modulo'], + ]); - echo "
"; - } - else{ - echo ' + echo '
'; + } else { + echo '
'.tr('Elimina').' '; - } ?> \ No newline at end of file diff --git a/modules/segmenti/init.php b/modules/segmenti/init.php index b73f01b3b..ffbe4593a 100644 --- a/modules/segmenti/init.php +++ b/modules/segmenti/init.php @@ -2,4 +2,4 @@ if ($docroot == '') { die(_('Accesso negato!')); } - $records = $dbo->fetchArray("SELECT *, (SELECT options FROM zz_modules WHERE id = zz_segments.id_module) options, (SELECT name FROM zz_modules WHERE id = zz_segments.id_module) AS modulo, (SELECT COUNT(t.id) FROM zz_segments t WHERE t.id_module = zz_segments.id_module) AS n_sezionali FROM zz_segments WHERE id='$id_record'"); \ No newline at end of file + $records = $dbo->fetchArray("SELECT *, (SELECT options FROM zz_modules WHERE id = zz_segments.id_module) options, (SELECT name FROM zz_modules WHERE id = zz_segments.id_module) AS modulo, (SELECT COUNT(t.id) FROM zz_segments t WHERE t.id_module = zz_segments.id_module) AS n_sezionali FROM zz_segments WHERE id='$id_record'"); diff --git a/modules/utenti/add.php b/modules/utenti/add.php index 4437a4bfd..cab758874 100644 --- a/modules/utenti/add.php +++ b/modules/utenti/add.php @@ -7,7 +7,7 @@ include_once __DIR__.'/../../core.php';
-
+
{[ "type": "text", "label": "", "name": "nome", "required": 1, "value": "" ]}
diff --git a/modules/utenti/info.php b/modules/utenti/info.php index e8bee227e..e1efacc23 100644 --- a/modules/utenti/info.php +++ b/modules/utenti/info.php @@ -11,6 +11,10 @@ if (file_exists($docroot.'/include/custom/top.php')) { include $docroot.'/include/top.php'; } +if (post('op') == 'change_pwd') { + include __DIR__.'/actions.php'; +} + $user = Auth::user(); $token = Auth::getInstance()->getToken(); diff --git a/modules/utenti/user.php b/modules/utenti/user.php index e4363bde4..a4147ca61 100644 --- a/modules/utenti/user.php +++ b/modules/utenti/user.php @@ -6,15 +6,15 @@ include_once __DIR__.'/../../core.php'; $min_length = 8; $min_length_username = 4; -$self_edit = Modules::getPermission('Utenti e permessi') == 'rw' && filter('id_utente') != null; +$self_edit = Modules::getPermission('Utenti e permessi') != 'rw' || (filter('id_utente') == null && filter('idgruppo') == null); if ($self_edit) { - $idgruppo = intval(filter('idgruppo')); - $id_utente = filter('id_utente'); -} else { $user = Auth::user(); $id_utente = $user['id']; +} else { + $idgruppo = intval(filter('idgruppo')); + $id_utente = filter('id_utente'); } if (!empty($id_utente)) { @@ -33,7 +33,7 @@ if (!empty($id_utente)) { } echo ' -
'; -if ($self_edit) { +if (!$self_edit) { echo '
-
+
{[ "type": "select", "label": "'.tr('Collega ad una anagrafica').'", "name": "idanag", "values": "query=SELECT CONCAT(`an_tipianagrafiche`.`idtipoanagrafica`, \'-\', `an_anagrafiche`.`idanagrafica`) AS \'id\', `ragione_sociale` AS \'descrizione\', `descrizione` AS \'optgroup\' FROM `an_tipianagrafiche` INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_tipianagrafiche`.`idtipoanagrafica`=`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica` INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica` WHERE an_anagrafiche.deleted= 0 ORDER BY `descrizione` ASC", "value": "'.$id_anagrafica.'" ]}
'; diff --git a/modules/viste/edit.php b/modules/viste/edit.php index 1b6c787b2..bddd458b2 100644 --- a/modules/viste/edit.php +++ b/modules/viste/edit.php @@ -150,9 +150,7 @@ if (!empty($options) && $options != 'custom') { $results = $dbo->fetchArray('SELECT GROUP_CONCAT(DISTINCT id_gruppo SEPARATOR \',\') AS gruppi FROM zz_group_view WHERE id_vista='.prepare($field['id'])); echo $results[0]['gruppi'].'"'; - if (!$editable) { - echo ', "readonly": "1"'; - } + echo ', "help": "'.tr('Gruppi di utenti in grado di visualizzare questo campo').'" ]}
diff --git a/modules/zone/actions.php b/modules/zone/actions.php index e5348c92f..2e3004db1 100644 --- a/modules/zone/actions.php +++ b/modules/zone/actions.php @@ -40,12 +40,11 @@ switch (post('op')) { $_SESSION['infos'][] = tr('Aggiunta una nuova zona!'); } - - - if (isAjaxRequest()) { + + if (isAjaxRequest()) { echo json_encode(['id' => $id_record, 'text' => $nome.' - '.$descrizione]); } - + break; case 'delete': diff --git a/src/App.php b/src/App.php index 580bd8b1d..e603967b3 100644 --- a/src/App.php +++ b/src/App.php @@ -326,7 +326,7 @@ class App public static function replacePlaceholder($query, $custom = null) { - $id_module = filter('id_module'); + $id_module = filter('id_module'); $user = Auth::user(); // Sostituzione degli identificatori @@ -337,8 +337,8 @@ class App $query = str_replace(['|period_start|', '|period_end|'], [$_SESSION['period_start'], $_SESSION['period_end']], $query); // Sostituzione dei segmenti - $query = str_replace('|segment|', !empty($_SESSION['m'.$id_module]['id_segment']) ? ' AND id_segment = '.prepare($_SESSION['m'.$id_module]['id_segment']) : '', $query); - + $query = str_replace('|segment|', !empty($_SESSION['m'.$id_module]['id_segment']) ? ' AND id_segment = '.prepare($_SESSION['m'.$id_module]['id_segment']) : '', $query); + return $query; } diff --git a/templates/contratti/body.php b/templates/contratti/body.php index 1fc09bca0..80d731c32 100644 --- a/templates/contratti/body.php +++ b/templates/contratti/body.php @@ -293,7 +293,6 @@ echo '

'.tr('Il tutto S.E. & O.').'

'.tr("In attesa di un Vostro Cortese riscontro, colgo l'occasione per porgere Cordiali Saluti").'

'; - //Firma echo '
diff --git a/update/2_3_2.sql b/update/2_3_2.sql index c57f50db9..7eb9450c4 100644 --- a/update/2_3_2.sql +++ b/update/2_3_2.sql @@ -1,2 +1,9 @@ -- Lo stato 'FAT' è da considerarsi completato -UPDATE `in_statiintervento` SET `completato` = '1' WHERE `in_statiintervento`.`idstatointervento` = 'FAT'; \ No newline at end of file +UPDATE `in_statiintervento` SET `completato` = '1' WHERE `in_statiintervento`.`idstatointervento` = 'FAT'; + +-- Nuovi campi per iva su righe 'Materiale utilizzato' in interventi +ALTER TABLE `mg_articoli_interventi` CHANGE `idiva_vendita` `idiva` INT(11) NOT NULL; +ALTER TABLE `mg_articoli_interventi` ADD `desc_iva` VARCHAR(255) NOT NULL AFTER `idiva`, ADD `iva` DECIMAL(12,4) NOT NULL AFTER `desc_iva`; + +-- Nuovi campi per iva su righe 'Altre spese' in interventi +ALTER TABLE `in_righe_interventi` ADD `idiva` INT(11) NOT NULL AFTER `prezzo_acquisto`, ADD `desc_iva` VARCHAR(255) NOT NULL AFTER `idiva`, ADD `iva` DECIMAL(12,4) NOT NULL AFTER `desc_iva`; \ No newline at end of file diff --git a/update/2_4.sql b/update/2_4.sql index 955ee21ac..8d33609df 100644 --- a/update/2_4.sql +++ b/update/2_4.sql @@ -287,4 +287,7 @@ DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Destinatario'; DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Destinatario fisso in copia (campo CC)'; -- Conversione numero co_documenti da int(11) a varchar(100) -ALTER TABLE `co_documenti` CHANGE `numero` `numero` VARCHAR(100) NOT NULL; \ No newline at end of file +ALTER TABLE `co_documenti` CHANGE `numero` `numero` VARCHAR(100) NOT NULL; + +-- Disabilito di default filtro tecnici che altrimento vedono solo le anagrafiche per i quali hanno eseguito un intervento (issue #190) +UPDATE `zz_group_module` SET `enabled` = '0' WHERE `zz_group_module`.`id` = 2; \ No newline at end of file