diff --git a/ajax_dataload.php b/ajax_dataload.php index f9617a2ef..c6fa6f064 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -170,15 +170,11 @@ if (!empty($result_query) && $result_query != 'menu' && $result_query != 'custom // Icona di stampa elseif ($field == '_print_') { - $print_url = $r['_print_']; + $print = $r['_print_']; - preg_match_all('/\$(.+?)\$/', $print_url, $matches); + $print_url = Prints::getHref($print, $r['id']); - for ($m = 0; $m < sizeof($matches[0]); ++$m) { - $print_url = str_replace($matches[0][$m], $r[$matches[1][$m]], $print_url); - } - - $value = ''; + $value = ''; } // Icona diff --git a/modules/contratti/plugins/contratti.consuntivo.php b/modules/contratti/plugins/contratti.consuntivo.php index 57f5f37b7..8553c543e 100644 --- a/modules/contratti/plugins/contratti.consuntivo.php +++ b/modules/contratti/plugins/contratti.consuntivo.php @@ -71,7 +71,7 @@ if (!empty($rsi)) { - '.Translator::numberToLocale($int['totale']).' + '.Translator::numberToLocale($int['totale_scontato']).' '; @@ -203,7 +203,7 @@ if (!empty($rsi)) { $totale_km += $int['km']; $totale_costo += $int['totale_costo']; $totale_addebito += $int['totale_addebito']; - $totale += $int['totale']; + $totale += $int['totale_scontato']; } // Totali diff --git a/modules/contratti/plugins/contratti.pianificazioneinterventi.php b/modules/contratti/plugins/contratti.pianificazioneinterventi.php index 794f5dded..ae1ae928d 100644 --- a/modules/contratti/plugins/contratti.pianificazioneinterventi.php +++ b/modules/contratti/plugins/contratti.pianificazioneinterventi.php @@ -165,7 +165,7 @@ switch (filter('op')) { $idstatointervento = 'WIP'; //calcolo codice intervento - $formato = get_var('Formato codice intervento'); + $formato = setting('Formato codice intervento'); $template = str_replace('#', '%', $formato); $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php index 81c913530..b72ab0f8f 100644 --- a/modules/ddt/bulk.php +++ b/modules/ddt/bulk.php @@ -10,13 +10,21 @@ switch (post('op')) { $totale_n_ddt = 0; // Informazioni della fattura - $tipo_documento = $dbo->selectOne('co_tipidocumento', 'id', ['descrizione' => 'Fattura immediata di vendita'])['id']; - $dir = 'entrata'; + if( $dir == 'entrata' ){ + $tipo_documento = $dbo->selectOne('co_tipidocumento', 'id', ['descrizione' => 'Fattura immediata di vendita'])['id']; + $module_name = 'Fatture di vendita'; + $idconto = setting('Conto predefinito fatture di vendita'); + } else { + $tipo_documento = $dbo->selectOne('co_tipidocumento', 'id', ['descrizione' => 'Fattura immediata di acquisto'])['id']; + $module_name = 'Fatture di acquisto'; + $idconto = setting('Conto predefinito fatture di acquisto'); + } + $idiva = setting('Iva predefinita'); $data = date('Y-m-d'); // Segmenti - $id_fatture = Modules::get('Fatture di vendita')['id']; + $id_fatture = Modules::get($module_name)['id']; if (!isset($_SESSION['module_'.$id_fatture]['id_segment'])) { $segments = Modules::getSegments($id_fatture); $_SESSION['module_'.$id_fatture]['id_segment'] = isset($segments[0]['id']) ? $segments[0]['id'] : null; @@ -68,12 +76,11 @@ switch (post('op')) { $id_documento = $dbo->lastInsertedID(); $id_documento_cliente[$id_anagrafica] = $id_documento; + ++$totale_n_ddt; } // Inserimento righe foreach ($righe as $riga) { - ++$totale_n_ddt; - $qta = $riga['qta'] - $riga['qta_evasa']; if ($qta > 0) { @@ -145,10 +152,7 @@ switch (post('op')) { $operations = [ 'delete-bulk' => tr('Elimina selezionati'), -]; - -if (Modules::get('Ddt di vendita')['id'] == $id_module) { - $operations['crea_fattura'] = [ + 'crea_fattura' => [ 'text' => tr('Crea fattura'), 'data' => [ 'msg' => tr('Vuoi davvero creare una fattura per questi interventi?'), @@ -156,7 +160,7 @@ if (Modules::get('Ddt di vendita')['id'] == $id_module) { 'class' => 'btn btn-lg btn-warning', 'blank' => false, ], - ]; -} + ] +]; return $operations; diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index aed6e3438..e11fc7a2e 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -122,16 +122,21 @@ switch (post('op')) { } // Elimino la scadenza e tutti i movimenti, poi se la fattura è emessa le ricalcolo - if ($rs[0]['descrizione'] == 'Bozza') { + if ($rs[0]['descrizione'] == 'Bozza' or $rs[0]['descrizione'] == 'Annullata') { elimina_scadenza($id_record); elimina_movimento($id_record, 0); + //elimino movimento anche prima nota (se pagata o parzialmente pagata) elimina_movimento($id_record, 1); } elseif ($rs[0]['descrizione'] == 'Emessa') { elimina_scadenza($id_record); elimina_movimento($id_record, 0); + } elseif (($rs[0]['descrizione'] == 'Pagato' or $rs[0]['descrizione'] == 'Parzialmente pagato') and ($dbo->fetchNum('SELECT id FROM co_scadenziario WHERE iddocumento = '.prepare($id_record)) == 0)) { + //aggiungo la scadenza come già pagata + aggiungi_scadenza($id_record, $pagamento, 1); + aggiungi_movimento($id_record, $dir); } - // Se la fattura è in stato "Emessa" posso inserirla in scadenziario e aprire il mastrino cliente + // Se la fattura è in stato "Emessa" posso inserirla in scadenzario e aprire il mastrino cliente if ($rs[0]['descrizione'] == 'Emessa') { aggiungi_scadenza($id_record, $pagamento); aggiungi_movimento($id_record, $dir); @@ -1482,6 +1487,7 @@ switch (post('op')) { // Nota di credito case 'nota_credito': $id_segment = post('id_segment'); + $data = post('data'); $numero = get_new_numerofattura($record['data']); $numero_esterno = get_new_numerosecondariofattura($record['data']); @@ -1490,7 +1496,7 @@ switch (post('op')) { $idconto = $rs[0]['idconto']; $ref_documento = $id_record; - $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($ref_documento).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di credito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, '.prepare($id_segment).' FROM co_documenti AS t WHERE id = '.prepare($id_record)); + $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($ref_documento).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di accredito\' AND dir = \'entrata\'), idpagamento, idbanca, '.prepare($data).', (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, '.prepare($id_segment).' FROM co_documenti AS t WHERE id = '.prepare($id_record)); $id_record = $dbo->lastInsertedID(); // Lettura di tutte le righe della tabella in arrivo @@ -1561,12 +1567,17 @@ switch (post('op')) { // Nota di debito if (get('op') == 'nota_addebito') { - $id_segment = $record['id_segment']; + $rs_segment = $dbo->fetchArray("SELECT * FROM zz_segments WHERE predefined_addebito='1'"); + if (sizeof($rs_segment) > 0) { + $id_segment = $rs_segment[0]['id']; + } else { + $id_segment = $record['id_segment']; + } $numero = get_new_numerofattura($record['data']); $numero_esterno = get_new_numerosecondariofattura($record['data']); - $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($id_record).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di debito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, id_segment FROM co_documenti AS t WHERE id = '.prepare($id_record)); + $dbo->query('INSERT INTO co_documenti (numero, numero_esterno, ref_documento, idanagrafica, idconto, idtipodocumento, idpagamento, idbanca, data, idstatodocumento, idsede, id_segment) SELECT '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($id_record).', idanagrafica, idconto, (SELECT `id` FROM `co_tipidocumento` WHERE `descrizione`=\'Nota di addebito\' AND dir = \'entrata\'), idpagamento, idbanca, data, (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`=\'Bozza\'), idsede, '.prepare($id_segment).' FROM co_documenti AS t WHERE id = '.prepare($id_record)); $id_record = $dbo->lastInsertedID(); } diff --git a/modules/fatture/crea_documento.php b/modules/fatture/crea_documento.php index 85e552576..e25d32ec6 100644 --- a/modules/fatture/crea_documento.php +++ b/modules/fatture/crea_documento.php @@ -113,12 +113,20 @@ if (!empty($rs)) {
{[ "type": "date", "label": "'.tr('Data del documento').'", "name": "data", "required": 1, "value": "-now-" ]}
'; - + if ($module_name == 'Fatture di vendita' || $module_name == 'Fatture di acquisto') { - echo ' + $rs_segment = $dbo->fetchArray("SELECT * FROM zz_segments WHERE predefined_accredito='1'"); + if($op=='nota_accredito' && sizeof($rs_segment)>0){ + echo ' +
+ {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.prepare(Modules::get($module_name)['id']).' ORDER BY name", "value": "'.$rs_segment[0]['id'].'" ]} +
'; + } else { + echo '
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.prepare(Modules::get($module_name)['id']).' ORDER BY name", "value": "'.$_SESSION['module_'.Modules::get($module_name)['id']]['id_segment'].'" ]}
'; + } } echo diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index b72edbe80..f8de2faa8 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -84,7 +84,8 @@ if ($dir == 'entrata') {
- {[ "type": "select", "label": "", "name": "idstatodocumento", "required": 1, "values": "query=SELECT * FROM co_statidocumento", "value": "$idstatodocumento$", "class": "unblockable", "extra": " onchange = \"if ($('#idstatodocumento option:selected').text()=='Pagato'){if( confirm('Sicuri di voler impostare manualmente la fattura come pagata senza aggiungerla in prima nota?') ){ return true; }else{ $('#idstatodocumento').selectSet(); }}\" " ]} + + {[ "type": "select", "label": "", "name": "idstatodocumento", "required": 1, "values": "query=SELECT * FROM co_statidocumento", "value": "$idstatodocumento$", "class": "unblockable", "extra": " onchange = \"if ($('#idstatodocumento option:selected').text()=='Pagato' || $('#idstatodocumento option:selected').text()=='Parzialmente pagato' ){if( confirm('') ){ return true; }else{ $('#idstatodocumento').selectSet(); }}\" " ]}
diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 41ad49f8c..7dfc3f602 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -10,33 +10,33 @@ function get_new_numerofattura($data) $dbo = Database::getConnection(); - if ($dir == 'uscita') { - // recupero maschera per questo segmento - $rs_maschera = $dbo->fetchArray('SELECT pattern FROM zz_segments WHERE id = '.prepare($id_segment)); - // esempio: ####/YY - $maschera = $rs_maschera[0]['pattern']; + // recupero maschera per questo segmento + $rs_maschera = $dbo->fetchArray('SELECT pattern FROM zz_segments WHERE id = '.prepare($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); + // estraggo blocchi di caratteri standard da sostituire + 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 = '.prepare($id_segment); + $query = "SELECT numero FROM co_documenti WHERE DATE_FORMAT(data,'%Y') = ".prepare(date('Y', strtotime($data))).' AND id_segment = '.prepare($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'; + } - $rs_ultima_fattura = $dbo->fetchArray($query); + $rs_ultima_fattura = $dbo->fetchArray($query); + if ($dir == 'uscita') { $numero = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero']); } 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; + // NB: Fatture di vendita ($dir = entrata) + // il campo numero per questa tipologia di documento è nascosto nel modulo, ma poi viene utilizzato + // come numero di protocollo nelle stampe fiscali, calcolo quindi un progressivo semplice (es. 1, 2, 3, etc) + $numero = Util\Generator::generate('#', $rs_ultima_fattura[0]['numero']); } return $numero; @@ -95,8 +95,9 @@ function elimina_scadenza($iddocumento) * Funzione per ricalcolare lo scadenzario di una determinata fattura * $iddocumento string E' l'id del documento di cui ricalcolare lo scadenzario * $pagamento string Nome del tipo di pagamento. Se è vuoto lo leggo da co_pagamenti_documenti, perché significa che devo solo aggiornare gli importi. + * $pagato boolean Indica se devo segnare l'importo come pagato */ -function aggiungi_scadenza($iddocumento, $pagamento = '') +function aggiungi_scadenza($iddocumento, $pagamento = '', $pagato = 0) { $dbo = Database::getConnection(); @@ -176,11 +177,29 @@ function aggiungi_scadenza($iddocumento, $pagamento = '') } $dbo->query('INSERT INTO co_scadenziario(iddocumento, data_emissione, scadenza, da_pagare, pagato, tipo) VALUES('.prepare($iddocumento).', '.prepare($data).', '.prepare($scadenza).', '.prepare($da_pagare).", 0, 'fattura')"); + + if ($pagato){ + $id_scadenza = $dbo->lastInsertedID(); + $dbo->update('co_scadenziario', [ + 'pagato' => $da_pagare, + 'data_pagamento' => $data, + ], ['id' => $id_scadenza]); + } + } // Se c'è una ritenuta d'acconto, la aggiungo allo scadenzario if ($dir == 'uscita' && $ritenutaacconto > 0) { $dbo->query('INSERT INTO co_scadenziario(iddocumento, data_emissione, scadenza, da_pagare, pagato, tipo) VALUES('.prepare($iddocumento).', '.prepare($data).', '.prepare(date('Y-m', strtotime($data.' +1 month')).'-15').', '.prepare(-$ritenutaacconto).", 0, 'ritenutaacconto')"); + + if ($pagato){ + $id_scadenza = $dbo->lastInsertedID(); + $dbo->update('co_scadenziario', [ + 'pagato' => -$ritenutaacconto, + 'data_pagamento' => $data, + ], ['id' => $id_scadenza]); + } + } return true; @@ -481,7 +500,7 @@ function get_imponibile_fattura($iddocumento) $query = 'SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS imponibile FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento); $rs = $dbo->fetchArray($query); - return $rs[0]['imponibile']; + return sum($rs[0]['imponibile'], null, 2); } /** @@ -516,7 +535,7 @@ function get_totale_fattura($iddocumento) get_imponibile_fattura($iddocumento), $rs2[0]['rivalsainps'], $totale_iva, - ]); + ], null, 2); return $totale; } @@ -535,7 +554,7 @@ function get_netto_fattura($iddocumento) get_totale_fattura($iddocumento), $rs[0]['bollo'], -$rs[0]['ritenutaacconto'], - ]); + ], null, 2); return $netto_a_pagare; } @@ -855,11 +874,13 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir) if (!empty($riga['idordine'])) { $dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$riga['qta'].' WHERE qta='.prepare($riga['qta']).' AND idarticolo='.prepare($riga['idarticolo']).' AND idordine='.prepare($riga['idordine'])); } + } - // Nota di credito - if (!empty($riga['ref_riga_documento'])) { - $dbo->query('UPDATE co_righe_documenti SET qta_evasa = qta_evasa+'.$riga['qta'].' WHERE id='.prepare($riga['ref_riga_documento'])); + // Nota di accredito + if (!empty($riga['ref_riga_documento'])) { + $dbo->query('UPDATE co_righe_documenti SET qta_evasa = qta_evasa+'.$riga['qta'].' WHERE id='.prepare($riga['ref_riga_documento'])); + if (!empty($riga['idarticolo'])) { $serials = array_column($serials, 'serial'); $serials = array_filter($serials, function ($value) { return !empty($value); }); diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index 1dec0abae..93b11799c 100644 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -59,14 +59,14 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
fetchArray('SELECT id, idcontratto FROM co_contratti_promemoria WHERE idintervento='.prepare($id_record)); + /*$rs = $dbo->fetchArray('SELECT id, idcontratto FROM co_contratti_promemoria WHERE idintervento='.prepare($id_record)); if (count($rs) == 1) { $idcontratto = $rs[0]['idcontratto']; $idcontratto_riga = $rs[0]['id']; } else { $idcontratto = ''; $idcontratto_riga = ''; - } + }*/ if (($idcontratto != '')) { echo ' @@ -74,7 +74,7 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica']; } ?> - {[ "type": "select", "label": "", "name": "idcontratto", "value": "", "ajax-source": "contratti", "readonly": "" ]} + {[ "type": "select", "label": "", "name": "idcontratto", "value": "", "ajax-source": "contratti", "readonly": "" ]}
diff --git a/modules/interventi/init.php b/modules/interventi/init.php index 143724fe0..2894a8a09 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 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_contratti_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)); } $jscript_modules[] = $rootdir.'/modules/interventi/js/interventi_helperjs.js'; diff --git a/modules/interventi/plugins/my_impianti.interventi.php b/modules/interventi/plugins/my_impianti.interventi.php index 4921488f7..8347c15fe 100644 --- a/modules/interventi/plugins/my_impianti.interventi.php +++ b/modules/interventi/plugins/my_impianti.interventi.php @@ -53,7 +53,7 @@ if (!empty($results)) { '; } else { echo ' -

'.tr('Nessun intervento su questo impianto').'...

'; +
'.tr('Nessun intervento su questo impianto').'.
'; } echo ' diff --git a/modules/my_impianti/edit.php b/modules/my_impianti/edit.php index 9ccce4838..26fbaf161 100644 --- a/modules/my_impianti/edit.php +++ b/modules/my_impianti/edit.php @@ -43,6 +43,9 @@ if (!empty($record['immagine'])) {
+ {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted_at IS NULL ORDER BY ragione_sociale", "value": "$idanagrafica$", "extra": "", "ajax-source": "clienti" ]}
diff --git a/modules/my_impianti/plugins/my_impianti.componenti.php b/modules/my_impianti/plugins/my_impianti.componenti.php index d1b366af7..af3a837ac 100644 --- a/modules/my_impianti/plugins/my_impianti.componenti.php +++ b/modules/my_impianti/plugins/my_impianti.componenti.php @@ -235,7 +235,7 @@ if (!empty($rs2)) { echo '
-
'.tr('Nessun intervento collegato a questo componente!').'
+
'.tr('Nessun intervento collegato a questo componente!').'
'; } @@ -254,27 +254,30 @@ if (!empty($rs2)) { // Pulsante Salva/Elimina echo '
- + + '; - + + + // Sostituisci componente con un altro dello stesso tipo, posso sostituire solo i componenti installati + if (empty($rs2[$j]['data_sostituzione'])) { + echo " + '; + } else { + echo ' + '; + } + + + echo ' + '.tr('Elimina').' - -
'; + '; - // Sostituisci componente con un altro dello stesso tipo, posso sostituire solo i componenti installati - echo ' -
'; - if (empty($rs2[$j]['data_sostituzione'])) { - echo " - ".tr('Sostituisci questo componente').'

'; - } else { - echo ' -

'.tr('Componente già sostituito').'

'; - } - - echo ' + + + echo '
- @@ -285,7 +288,7 @@ if (!empty($rs2)) { '; } else { echo ' -

'.tr('Nessun componente inserito').'.

'; +
'.tr('Nessun componente inserito').'.
'; } echo ' diff --git a/modules/ordini/modutil.php b/modules/ordini/modutil.php index 25db3fd59..7e7e766e5 100644 --- a/modules/ordini/modutil.php +++ b/modules/ordini/modutil.php @@ -27,19 +27,20 @@ function get_new_numerosecondarioordine($data) $dbo = Database::getConnection(); - $query = "SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = ".prepare(date('Y', strtotime($data))).' AND idtipoordine IN(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1'; + // Calcolo il numero secondario se stabilito dalle impostazioni e se documento di vendita + $formato_numero_secondario = setting('Formato numero secondario ordine'); + $formato_numero_secondario = str_replace('#', '%', $formato_numero_secondario); + + $query = 'SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, "%Y" ) = '.prepare(date('Y', strtotime($data))).' AND idtipoordine IN(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND numero_esterno LIKE('.prepare(Util\Generator::complete($formato_numero_secondario)).') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1'; $rs = $dbo->fetchArray($query); $numero_secondario = $rs[0]['numero_esterno']; - // Calcolo il numero secondario se stabilito dalle impostazioni e se documento di vendita - $formato_numero_secondario = setting('Formato numero secondario ordine'); - if ($numero_secondario == '') { - $numero_secondario = $formato_numero_secondario; + $numero_secondario = setting('Formato numero secondario ordine'); } if ($formato_numero_secondario != '' && $dir == 'entrata') { - $numero_esterno = Util\Generator::generate($formato_numero_secondario, $numero_secondario); + $numero_esterno = Util\Generator::generate(setting('Formato numero secondario ordine'), $numero_secondario); } else { $numero_esterno = ''; } diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 6fc635f5c..5c359476d 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -25,11 +25,11 @@ switch (post('op')) { $numeropreventivo_template = str_replace('#', '%', $numeropreventivo_template); // Codice preventivo: calcolo il successivo in base al formato specificato - $rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero=(SELECT MAX(CAST(numero AS SIGNED)) FROM co_preventivi) AND numero LIKE('.prepare($numeropreventivo_template).') ORDER BY numero DESC LIMIT 0,1'); + $rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero=(SELECT MAX(CAST(numero AS SIGNED)) FROM co_preventivi) AND numero LIKE('.prepare(Util\Generator::complete($numeropreventivo_template)).') ORDER BY numero DESC LIMIT 0,1'); $numero = Util\Generator::generate(setting('Formato codice preventivi'), $rs[0]['numero']); if (!is_numeric($numero)) { - $rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero LIKE('.prepare($numeropreventivo_template).') ORDER BY numero DESC LIMIT 0,1'); + $rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero LIKE('.prepare(Util\Generator::complete($numeropreventivo_template)).') ORDER BY numero DESC LIMIT 0,1'); $numero = Util\Generator::generate(setting('Formato codice preventivi'), $rs[0]['numero']); } diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index 781fb1c6d..4855c7b9f 100644 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -87,13 +87,10 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
{[ "type": "select", "label": "", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione", "value": "$idtipointervento$" ]}
- -
+
diff --git a/modules/preventivi/plugins/preventivi.consuntivo.php b/modules/preventivi/plugins/preventivi.consuntivo.php index 1d5e8be73..e57df6142 100644 --- a/modules/preventivi/plugins/preventivi.consuntivo.php +++ b/modules/preventivi/plugins/preventivi.consuntivo.php @@ -73,7 +73,7 @@ if (!empty($rsi)) { - '.Translator::numberToLocale($int['totale']).' + '.Translator::numberToLocale($int['totale_scontato']).' '; @@ -205,7 +205,7 @@ if (!empty($rsi)) { $totale_km += $int['km']; $totale_costo += $int['totale_costo']; $totale_addebito += $int['totale_addebito']; - $totale += $int['totale']; + $totale += $int['totale_scontato']; } // Totali diff --git a/modules/primanota/add.php b/modules/primanota/add.php index 300500ce1..810197406 100644 --- a/modules/primanota/add.php +++ b/modules/primanota/add.php @@ -317,10 +317,12 @@ include_once __DIR__.'/../../core.php'; if(bilancio == 0){ $("#testo_aggiuntivo").removeClass('text-danger').html(""); $("#btn_submit").removeClass('hide'); + $('#btn_crea_modello').removeClass('hide'); } else{ $("#testo_aggiuntivo").addClass('text-danger').html("sbilancio di " + bilancio.toLocale() + " €" ); $("#btn_submit").addClass('hide'); + $('#btn_crea_modello').addClass('hide'); } } @@ -336,7 +338,7 @@ include_once __DIR__.'/../../core.php'; var idmastrino = $(this).val(); if(idmastrino!=''){ - $('#btn_crea_modello').hide(); + $('#btn_crea_modello').addClass('hide'); var causale = $(this).find('option:selected').text(); $('#desc').val(causale); @@ -351,7 +353,7 @@ include_once __DIR__.'/../../core.php'; } }); }else{ - $('#btn_crea_modello').show(); + $('#btn_crea_modello').removeClass('hide'); } }); diff --git a/modules/segmenti/actions.php b/modules/segmenti/actions.php index d2312b756..de7ae9a44 100644 --- a/modules/segmenti/actions.php +++ b/modules/segmenti/actions.php @@ -14,6 +14,16 @@ switch (post('op')) { if ($predefined) { $dbo->query('UPDATE zz_segments SET predefined = 0 WHERE id_module = '.prepare($id_module)); } + + $predefined_accredito = post('predefined_accredito'); + if ($predefined_accredito) { + $dbo->query('UPDATE zz_segments SET predefined_accredito = 0 WHERE id_module = '.prepare($id_module)); + } + + $predefined_addebito = post('predefined_addebito'); + if ($predefined_addebito) { + $dbo->query('UPDATE zz_segments SET predefined_addebito = 0 WHERE id_module = '.prepare($id_module)); + } $dbo->update('zz_segments', [ 'id_module' => post('module'), @@ -23,6 +33,8 @@ switch (post('op')) { 'note' => post('note'), 'position' => post('position'), 'predefined' => $predefined, + 'predefined_accredito' => $predefined_accredito, + 'predefined_addebito' => $predefined_addebito, ], ['id' => $id_record]); flash()->info(tr('Modifiche salvate correttamente')); diff --git a/modules/segmenti/edit.php b/modules/segmenti/edit.php index b417e2ca4..9a61d112a 100644 --- a/modules/segmenti/edit.php +++ b/modules/segmenti/edit.php @@ -33,6 +33,17 @@ include_once __DIR__.'/../../core.php';
+
+ +
+ {[ "type": "checkbox", "label": "", "name": "predefined_accredito", "value": "$predefined_accredito$", "help": "", "placeholder": "" ]} +
+
+ {[ "type": "checkbox", "label": "", "name": "predefined_addebito", "value": "$predefined_addebito$", "help": "", "placeholder": "" ]} +
+ +
+
diff --git a/modules/smtp/ajax/select.php b/modules/smtp/ajax/select.php index 4a6b32091..de1ce4a04 100644 --- a/modules/smtp/ajax/select.php +++ b/modules/smtp/ajax/select.php @@ -9,6 +9,9 @@ switch ($resource) { foreach ($elements as $element) { $filter[] = 'id = '.prepare($element); } + if (empty($filter)) { + $where[] = 'deleted_at IS NULL'; + } if (!empty($search)) { $search_fields[] = 'name LIKE '.prepare('%'.$search.'%'); } diff --git a/modules/utenti/actions.php b/modules/utenti/actions.php index db9c4b9c5..b4d0df57d 100644 --- a/modules/utenti/actions.php +++ b/modules/utenti/actions.php @@ -122,12 +122,17 @@ switch (filter('op')) { } break; - // Disabilita API utente - case 'token': - $token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($id_record)); + // Abilita API utente + case 'token_enable': + if ($dbo->query('UPDATE zz_tokens SET enabled = 1 WHERE id_utente = '.prepare($id_utente))) { + flash()->info(tr('Token abilitato!')); + } + break; - if ($dbo->query('UPDATE zz_tokens SET enabled = '.(empty($token['enabled']) ? 1 : 0).' WHERE id_utente = '.prepare($id_utente))) { - flash()->info(tr('Utente eliminato!')); + // Disabilita API utente + case 'token_disable': + if ($dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id_utente = '.prepare($id_utente))) { + flash()->info(tr('Token disabilitato!')); } break; @@ -149,6 +154,39 @@ switch (filter('op')) { break; + // Impostazione/reimpostazione dei permessi di accesso di default + case 'restore_permission': + + //Gruppo Tecnici + if ($dbo->fetchArray('SELECT `nome` FROM `zz_groups` WHERE `id` = '.prepare($id_record))[0]['nome']=='Tecnici'){ + + $permessi = array (); + $permessi['Dashboard'] = 'rw'; + $permessi['Anagrafiche'] = 'rw'; + $permessi['Interventi'] = 'rw'; + $permessi['Magazzino'] = 'rw'; + $permessi['Articoli'] = 'rw'; + + $dbo->query('DELETE FROM zz_permissions WHERE idgruppo='.prepare($id_record)); + + foreach ($permessi as $module_name => $permesso) { + + $module_id = $dbo->fetchArray('SELECT `id` FROM `zz_modules` WHERE `name` = "'.$module_name.'"')[0]['id']; + + $dbo->insert('zz_permissions', [ + 'idgruppo' => $id_record, + 'idmodule' => $module_id, + 'permessi' => $permesso, + ]); + } + + $_SESSION['infos'][] = tr('Permessi reimpostati.'); + + + } + + break; + // Aggiornamento dei permessi di accesso case 'update_permission': $permessi = filter('permesso'); diff --git a/modules/utenti/edit.php b/modules/utenti/edit.php index cb43ad88d..4ae97713e 100644 --- a/modules/utenti/edit.php +++ b/modules/utenti/edit.php @@ -66,13 +66,12 @@ if (!empty($utenti)) { // Disabilitazione token API, se diverso da id_utente #1 (admin) if ($utente['id'] != '1') { $token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($utente['id'])); - if (!empty($token['enabled'])) { echo ' - '; + '; } else { echo ' - '; + '; } } else { echo ' @@ -97,7 +96,7 @@ if (!empty($utenti)) { '; } else { echo ' -

'.tr('Non ci sono utenti in questo gruppo').'...

'; +
'.tr('Non ci sono utenti in questo gruppo').'.
'; } echo ' '.tr('Aggiungi utente').' @@ -113,7 +112,8 @@ echo '

'.tr('Permessi _GROUP_', [ '_GROUP_' => $record['nome'], - ]).'

+ ]).((empty($record['editable'])) ? '' : '').' +
'; @@ -141,7 +141,7 @@ if ($record['nome'] != 'Amministratori') { '; } else { echo ' -

'.tr('Gli amministratori hanno accesso a qualsiasi modulo').'.

'; +
'.tr('Gli amministratori hanno accesso a qualsiasi modulo').'.
'; } echo '
diff --git a/plugins/sedi/actions.php b/plugins/sedi/actions.php index 51958d580..e83588937 100644 --- a/plugins/sedi/actions.php +++ b/plugins/sedi/actions.php @@ -13,6 +13,7 @@ switch ($operazione) { 'indirizzo2' => post('indirizzo2'), 'citta' => post('citta'), 'cap' => post('cap'), + 'provincia' => post('provincia'), 'km' => post('km'), 'cellulare' => post('cellulare'), 'telefono' => post('telefono'), diff --git a/plugins/sedi/add.php b/plugins/sedi/add.php index 062deb26b..84635a649 100644 --- a/plugins/sedi/add.php +++ b/plugins/sedi/add.php @@ -18,24 +18,24 @@ echo '
- {[ "type": "text", "label": "'.tr('Secondo indirizzo').'", "name": "indirizzo2" ]} + {[ "type": "text", "label": "'.tr('Indirizzo2').'", "name": "indirizzo2" ]}
-
+
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta", "required": 1 ]}
-
+
{[ "type": "text", "label": "'.tr('C.A.P.').'", "name": "cap" ]}
-
- {[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia" ]} +
+ {[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia", "maxlength": 2, "class": "text-center" ]}
-
+
{[ "type": "text", "label": "'.tr('Km').'", "name": "km" ]}
diff --git a/plugins/sedi/edit.php b/plugins/sedi/edit.php index 2bdce8ab0..0d209fb5a 100644 --- a/plugins/sedi/edit.php +++ b/plugins/sedi/edit.php @@ -31,7 +31,7 @@ echo '
- {[ "type": "text", "label": "'.tr('Secondo indirizzo').'", "name": "indirizzo2", "value": "$indirizzo2$" ]} + {[ "type": "text", "label": "'.tr('Indirizzo2').'", "name": "indirizzo2", "value": "$indirizzo2$" ]}
@@ -46,19 +46,19 @@ echo '
-
+
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta", "id": "citta_", "value": "$citta$" ]}
-
+
{[ "type": "text", "label": "'.tr('C.A.P.').'", "name": "cap", "value": "$cap$" ]}
-
- {[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia", "value": "$provincia$" ]} +
+ {[ "type": "text", "label": "'.tr('Provincia').'", "name": "provincia", "value": "$provincia$", "maxlength": 2, "class": "text-center" ]}
-
+
{[ "type": "number", "label": "'.tr('Km').'", "name": "km", "value": "$km$" ]}
diff --git a/src/Util/Generator.php b/src/Util/Generator.php index 6f8fa67c4..1cf002c22 100644 --- a/src/Util/Generator.php +++ b/src/Util/Generator.php @@ -70,7 +70,7 @@ class Generator * * @return string */ - protected static function complete($pattern) + public static function complete($pattern) { // Costruzione del pattern $replaces = self::getReplaces(); diff --git a/templates/fatturato/pdfgen.fatturato.php b/templates/fatturato/pdfgen.fatturato.php index 1ad55324a..2fea296f8 100644 --- a/templates/fatturato/pdfgen.fatturato.php +++ b/templates/fatturato/pdfgen.fatturato.php @@ -69,4 +69,4 @@ $body .= "\n"; $body .= "\n"; -$report_name = 'inventario.pdf'; +$report_name = 'fatturato.pdf'; diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index 1426e89ef..b2c80b149 100644 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -29,7 +29,8 @@ echo '

'.tr('Spett.le', [], ['upper' => true]).'

$c_ragionesociale$

-

$c_indirizzo$ $c_citta_full$

+

$c_indirizzo$

+

$c_citta_full$

@@ -185,7 +186,7 @@ foreach ($righe as $r) { $sconto = sum($sconto); $imponibile = sum($imponibile); -$iva = sum($iva, null, 2); +$iva = sum($iva); $totale = $imponibile - $sconto; @@ -269,8 +270,9 @@ $rs = $dbo->fetchArray('SELECT * FROM co_pagamenti WHERE id = '.$records[0]['idp $pagamento = $rs[0]['descrizione']; // Lettura resa -$rs = $dbo->fetchArray('SELECT * FROM dt_porto WHERE id = '.$records[0]['idporto']); -$resa_materiale = $rs[0]['descrizione']; + +//$rs = $dbo->fetchArray('SELECT * FROM dt_porto WHERE id = '.$records[0]['idporto']); +//$resa_materiale = $rs[0]['descrizione']; echo ' @@ -290,7 +292,7 @@ echo ' - +
diff --git a/update/2_4.sql b/update/2_4.sql index 6437d8a15..62b1d7961 100644 --- a/update/2_4.sql +++ b/update/2_4.sql @@ -206,7 +206,10 @@ UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare))), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE dir=''uscita'' |segment| AND data_emissione >= "|period_start|" AND data_emissione <= "|period_end|"' WHERE `zz_widgets`.`name` = 'Acquisti'; -- Aggiorno widget Crediti da clienti con i sezionali -UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT(SUM((SELECT SUM(subtotale+iva-sconto) FROM co_righe_documenti WHERE iddocumento=co_documenti.id)+iva_rivalsainps+rivalsainps+bollo-ritenutaacconto), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM co_documenti WHERE idtipodocumento IN (SELECT id FROM co_tipidocumento WHERE dir="entrata") AND idstatodocumento = (SELECT id FROM co_statidocumento WHERE descrizione="Emessa") |segment| AND data >= "|period_start|" AND data <= "|period_end|" AND 1=1' WHERE `zz_widgets`.`name` = 'Crediti da clienti' ; +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT(SUM((SELECT SUM(subtotale+iva-sconto) FROM co_righe_documenti WHERE iddocumento=co_documenti.id)+iva_rivalsainps+rivalsainps+bollo-ritenutaacconto), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM co_documenti WHERE idtipodocumento IN (SELECT id FROM co_tipidocumento WHERE dir="entrata") AND idstatodocumento = (SELECT id FROM co_statidocumento WHERE descrizione="Emessa") |segment| AND data >= "|period_start|" AND data <= "|period_end|" AND 1=1' WHERE `zz_widgets`.`name` = 'Crediti da clienti' ; + +-- Aggiorno widget Debiti verso fornitori con i sezionali +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare-pagato))), 2), '','', ''#''), ''.'', '',''),''#'', ''.''), ''€'') AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''uscita'' |segment| AND data_emissione >= "|period_start|" AND data_emissione <= "|period_end|"' WHERE `zz_widgets`.`name` = 'Debiti verso fornitori'; -- Aggiorno i moduli Fattura con i sezionali UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` WHERE 1=1 AND `dir` = ''uscita'' |segment| AND `data` >= ''|period_start|'' AND `data` <= ''|period_end|'' HAVING 2=2 ORDER BY `data` DESC, CAST(IF(numero_esterno='''', numero, numero_esterno) AS UNSIGNED) DESC' WHERE `name` = 'Fatture di acquisto'; diff --git a/update/2_4_1.sql b/update/2_4_1.sql index 8cbef8c35..fa92eae9a 100644 --- a/update/2_4_1.sql +++ b/update/2_4_1.sql @@ -339,7 +339,7 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, -- Aggiunto supporto a Note di accredito e addebito ALTER TABLE `co_documenti` ADD `ref_documento` int(11) AFTER `idagente`, ADD FOREIGN KEY (`ref_documento`) REFERENCES `co_documenti`(`id`) ON DELETE CASCADE; -ALTER TABLE `co_righe_documenti` ADD `qta_evasa` int(11) NOT NULL AFTER `qta`, ADD `ref_riga_documento` int(11) AFTER `idcontratto`, ADD FOREIGN KEY (`ref_riga_documento`) REFERENCES `co_righe_documenti`(`id`) ON DELETE CASCADE; +ALTER TABLE `co_righe_documenti` ADD `qta_evasa` decimal(12,4) NOT NULL AFTER `qta`, ADD `ref_riga_documento` int(11) AFTER `idcontratto`, ADD FOREIGN KEY (`ref_riga_documento`) REFERENCES `co_righe_documenti`(`id`) ON DELETE CASCADE; ALTER TABLE `co_tipidocumento` ADD `reversed` BOOLEAN NOT NULL DEFAULT FALSE AFTER `dir`; UPDATE `co_tipidocumento` SET `reversed` = 1 WHERE `descrizione` = 'Nota di accredito'; @@ -357,9 +357,15 @@ ALTER TABLE `my_impianti` CHANGE `immagine` `immagine` varchar(255); UPDATE `my_impianti` SET `immagine` = NULL WHERE `immagine` = ''; INSERT INTO `zz_files` (`id_module`, `id_record`, `nome`, `filename`, `original`) SELECT (SELECT `id` FROM `zz_modules` WHERE `name` = 'MyImpianti'), `id`, 'Immagine', `immagine`, `immagine` FROM `my_impianti` WHERE `immagine` IS NOT NULL; --- Fix widgets fatturato -UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT(SUM((SELECT SUM(subtotale+iva-sconto) FROM co_righe_documenti WHERE iddocumento=co_documenti.id)+iva_rivalsainps+rivalsainps+bollo-ritenutaacconto), 2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"€\") AS dato FROM co_documenti WHERE idtipodocumento IN (SELECT id FROM co_tipidocumento WHERE dir=\"entrata\") AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione=\"Bozza\" OR descrizione=\"Annullata\") |segment| AND data >= \"|period_start|\" AND data <= \"|period_end|\" AND 1=1' WHERE `zz_widgets`.`name` = 'Fatturato'; -UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(\" \", REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare))), 2), \",\", \"#\"), \".\", \",\"), \"#\", \".\"), \"€\") AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE dir=\'uscita\' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione=\"Bozza\" OR descrizione=\"Annullata\") |segment| AND data_emissione >= \"|period_start|\" AND data_emissione <= \"|period_end|\"' WHERE `zz_widgets`.`name` = 'Acquisti'; +-- Fix widgets fatturato, prendo importi dallo scadenzario +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare))), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''entrata'' |segment| AND data_emissione >= "|period_start|" AND data_emissione <= "|period_end|" AND 1=1' WHERE `zz_widgets`.`name` = 'Fatturato'; + +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare))), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''uscita'' |segment| AND data_emissione >= "|period_start|" AND data_emissione <= "|period_end|" AND 1=1', `help` = 'Fatturato IVA inclusa.' WHERE `zz_widgets`.`name` = 'Acquisti'; + +-- Per i crediti / debiti considero o no il periodo temporale? +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS(" ", REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare-pagato))), 2), ",", "#"), ".", ","), "#", "."), "€") AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''entrata'' |segment| AND 1=1', `help` = 'Crediti IVA inclusa.' WHERE `zz_widgets`.`name` = 'Crediti da clienti'; + +UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLACE(FORMAT((SELECT ABS(SUM(da_pagare-pagato))), 2), '','', ''#''), ''.'', '',''),''#'', ''.''), ''€'') AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=''uscita'' |segment| AND 1=1', `help` = 'Debiti IVA inclusa.' WHERE `zz_widgets`.`name` = 'Debiti verso fornitori'; -- Introduzione del tipo documento nelle tabelle Fatture INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `enabled`, `default`) VALUES @@ -473,4 +479,11 @@ INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, ` INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `enabled`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi di intervento'), 'Tempo standard', 'in_tipiintervento.tempo_standard', 10, 1, 0, 1, '', '', 0, 0, 0); +-- Disabilito temporaneamente le stampe degli ordini di servizio, plugins disabilitati +UPDATE `zz_prints` SET `enabled` = 0 WHERE `name` IN( 'Ordine di servizio', 'Ordine di servizio (senza costi)' ); +-- Fix colonna delle stampe +UPDATE `zz_views` SET `query` = '\'Intervento\'' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi') AND `name` = '_print_'; + +-- Flag per definire i segmenti di note di accredito e di addebito +ALTER TABLE `zz_segments` ADD `predefined_accredito` TINYINT(1) NOT NULL AFTER `predefined`, ADD `predefined_addebito` TINYINT(1) NOT NULL AFTER `predefined_accredito`; \ No newline at end of file