diff --git a/ajax_dataload.php b/ajax_dataload.php index 737468b1f..d016c8f16 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -96,7 +96,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom unset($pieces[$cont - 1]); } - $module_query = implode('ORDER', $pieces).' ORDER BY `'.$total['order_by'][$order['column']].'` '.$order['dir']; + $module_query = implode('ORDER', $pieces).' ORDER BY '.$total['order_by'][$order['column']].' '.$order['dir']; } // Calcolo di eventuali somme diff --git a/composer.json b/composer.json index 8353bf9a3..c22a5ac6a 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,10 @@ "type": "project", "require": { "php": ">=5.6", + + "ext-mbstring": "*", + "ext-pdo_mysql": "*", + "aluguest/ical-easy-reader": "^1.5", "danielstjules/stringy": "^3.1", "ezyang/htmlpurifier": "^4.8", @@ -41,6 +45,9 @@ "symfony/translation": "^3.3", "symfony/var-dumper": "^3.3" }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.10" + }, "autoload": { "psr-4": { "": "src/" diff --git a/couscous.yml b/couscous.yml index b01269b14..423fa6d15 100644 --- a/couscous.yml +++ b/couscous.yml @@ -40,6 +40,9 @@ menu: api: text: API relativeUrl: api.html + contribuire: + text: Contribuire + relativeUrl: contributing.html structure: name: Approfondimenti items: diff --git a/.github/CONTRIBUTING.md b/docs/CONTRIBUTING.md similarity index 95% rename from .github/CONTRIBUTING.md rename to docs/CONTRIBUTING.md index 21bdc7f6e..49625e5b9 100644 --- a/.github/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,3 +1,7 @@ +--- +currentMenu: contribuire +--- + # Contribuire Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto! @@ -28,7 +32,7 @@ PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aum La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs). EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto. -La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig). +La configurazione può essere trovata nel file [.editorconfig](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig). Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti. diff --git a/docs/Contribuire.md b/docs/Contribuire.md deleted file mode 100644 index 9a19cb6cc..000000000 --- a/docs/Contribuire.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -currentMenu: contribuire ---- - -# Contribuire - -Sei interessato a contribuire allo sviluppo di OpenSTAManger? Ottimo, sei il benvenuto! - -Siamo entusiasti di ogni nuova contribuzione che otteniamo dalla nostra community. -Ci sono molti modi per contribuire: segnalare bug, richiedere miglioramenti, scrivere tutorial, migliorare la documentazione... - -Non serve essere degli esperti programmatori per aiutarci! :smile_cat: - -Leggi le seguenti sezioni per scoprire come ti consigliamo di procedere. -Se ti serve un aiuto, crea una issue su GitHub. - - - -- [Linee guida](#linee-guida) - - [Codice di condotta](#codice-di-condotta) - - [Stile del codice](#stile-del-codice) -- [Prima contribuzione](#prima-contribuzione) -- [Problemi di sicurezza](#problemi-di-sicurezza) -- [Segnalare un bug](#segnalare-un-bug) -- [Pull Request](#pull-request) -- [Community](#community) - - - -## Linee guida - -Per migliorare il sistema con cui sviluppiamo il codice, abbiamo deciso di adottare alcune linee guida per facilitare la collaborazione tra più persone. - -### Codice di condotta - -Per il momento non abbiamo adottato un vero e proprio codice di condotta, ma ti chiediamo di essere il più civile possibile nel comunicare con gli altri per questo progetto. - -### Stile del codice - -Utilizziamo principalmente due strumenti per mantenere consistente nel tempo lo stile del codice: -- [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) -- [EditorConfig](http://editorconfig.org>) - -PHP CS Fixer viene utilizzato per formattare automaticamente il codice PHP e aumentare la sua comprensibilità. -La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.php_cs). - -EditorConfig viene sfruttato per mantenere la consistenza nella formattazione di base dei diversi altri file utilizzati nel progetto. -La configurazione può essere trovata nel file [.php_cs](https://github.com/devcode-it/openstamanager/blob/master/.editorconfig). - -Maggiori informazioni sui plugin che permettono di integrare questi strumenti sono disponibili nei relativi siti. - -## Prima contribuzione - -Sei insicuro su cosa potresti lavorare per contribuire al progetto? - -Prova a dare un'occhiata alle issue sotto la label [nuovi contributori](https://github.com/devcode-it/openstamanager/labels/nuovi%20contributori), dove sono indicate le migliorie più semplici da applicare. - -## Problemi di sicurezza - -Se trovi un problema di sicurezza, NON aprire una issue. Inviaci un'email all'indirizzo `info at openstamanager dot com`. - -Per capire se hai individuato un problema di sicurezza, prova a farti queste domande: - -* Posso accedere a qualcosa a cui non dovrei avere accesso? -* Posso disabilitare qualcosa per altre persone? - -Se la risposta a una di queste domande è positiva, allora probabilmente hai individuato un problema di sicurezza. -Considera però che anche in caso negativo potrebbe trattarsi di un problema di questo tipo, quindi se sei insicuro contattaci comunque via email. - -## Segnalare un bug - -Se hai individuato un bug e desideri segnalarlo, apri una nuova issue provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/ISSUE_TEMPLATE.md). - -Se vuoi suggerire una miglioramento di qualche tipo oppure una nuova funzionalità, sentiti libero di aprire una issue apposita dove spieghi dettagliatamente la modifica che vorresti, la sua utilità e il suo funzionamento generale - -## Pull Request - -Se sei in grado di risolvere uno dei bug segnalati oppure vuoi completare una nuova funzionalità, apri una nuova Pull Request provando a mantenerti sulla base del [file di template su GitHub](https://github.com/devcode-it/openstamanager/blob/master/.github/PULL_REQUEST_TEMPLATE.md). - -## Community - -Siamo presenti su [Facebook](https://www.facebook.com/openstamanager), e il nostro forum ufficiale è disponibile all'indirizzo . - -Cerchiamo di essere disponibili quanto possibile, ma non sempre riusciamo a rispondere tempestivamente. diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index e60aa59b8..acab2ca95 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -170,7 +170,7 @@ switch (post('op')) { $rs = $dbo->fetchArray($query); foreach ($rs as $value) { - $non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir); + $non_rimovibili = seriali_non_rimuovibili('id_riga_documento', $value['id'], $dir); if (!empty($non_rimovibili)) { $_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!'); @@ -293,14 +293,14 @@ switch (post('op')) { $idanagrafica = $rs[0]['idanagrafica']; $data = $rs[0]['data']; $codice = $rs[0]['codice']; - + //Fatturo le ore di lavoro raggruppate per costo orario $rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario'); - + //Aggiunta riga intervento sul documento - for( $i=0; $ifetchArray($query); @@ -320,7 +320,7 @@ switch (post('op')) { $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $rs = $dbo->fetchArray($query); $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; - + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $dbo->query($query); } diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 74d2e75d3..9e3f8af32 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -27,11 +27,43 @@ $_SESSION['superselect']['ddt'] = $dir;
+ + fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia FROM an_anagrafiche WHERE idanagrafica='.prepare($records[0]['idanagrafica'])); + $campi_mancanti = []; + + if ($rs2[0]['piva'] == '') { + if ($rs2[0]['codice_fiscale'] == '') { + array_push($campi_mancanti, 'codice fiscale'); + } + } + if ($rs2[0]['citta'] == '') { + array_push($campi_mancanti, 'citta'); + } + if ($rs2[0]['indirizzo'] == '') { + array_push($campi_mancanti, 'indirizzo'); + } + if ($rs2[0]['cap'] == '') { + array_push($campi_mancanti, 'C.A.P.'); + } + + if (sizeof($campi_mancanti) > 0) { + echo "
Prima di procedere alla stampa completa i seguenti campi dell'anagrafica:
".implode(', ', $campi_mancanti).'
+ '.Modules::link('Anagrafiche', $records[0]['idanagrafica'], tr('Vai alla scheda anagrafica'), null).'
'; + } + } + ?> + +
+ +
+
@@ -320,33 +352,12 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
fetchArray('SELECT piva, codice_fiscale, citta, indirizzo, cap, provincia FROM an_anagrafiche WHERE idanagrafica='.prepare($records[0]['idanagrafica'])); - $campi_mancanti = []; - - if ($rs2[0]['piva'] == '') { - if ($rs2[0]['codice_fiscale'] == '') { - array_push($campi_mancanti, 'codice fiscale'); - } - } - if ($rs2[0]['citta'] == '') { - array_push($campi_mancanti, 'citta'); - } - if ($rs2[0]['indirizzo'] == '') { - array_push($campi_mancanti, 'indirizzo'); - } - if ($rs2[0]['cap'] == '') { - array_push($campi_mancanti, 'C.A.P.'); - } - - if ($dir == 'entrata') { - if (sizeof($campi_mancanti) > 0) { - echo "
Prima di procedere alla stampa completa i seguenti campi dell'anagrafica:
".implode(', ', $campi_mancanti).'
- '.Modules::link('Anagrafiche', $records[0]['idanagrafica'], tr('Vai alla scheda anagrafica'), null).'
'; - } else { - echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'" )}'; - } + if (sizeof($campi_mancanti) > 0) { + echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "class": "btn-info disabled" )}'; + } else { + echo '{( "name": "button", "type": "print", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'" )}'; } } ?> diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index e708fa2dd..77d752d15 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -563,7 +563,7 @@ switch (post('op')) { if (directory($docroot.'/files/interventi')) { if (post('firma_base64') != '') { // Salvataggio firma - $firma_file = 'firma_'.time().'.png'; + $firma_file = 'firma_'.time().'.jpg'; $firma_nome = post('firma_nome'); $data = explode(',', post('firma_base64')); diff --git a/modules/interventi/add_firma.php b/modules/interventi/add_firma.php index 45af3bf39..2445b24ef 100644 --- a/modules/interventi/add_firma.php +++ b/modules/interventi/add_firma.php @@ -33,7 +33,7 @@ if (get('anteprima') !== null) { } ?> -
+ @@ -74,7 +74,9 @@ if (get('anteprima') !== null) { saveButton = document.querySelector("[data-action=save]"), canvas = document.getElementById("canvas"); - var signaturePad = new SignaturePad(canvas); + var signaturePad = new SignaturePad(canvas, { + backgroundColor: 'rgb(255,255,255)' + }); function resizeCanvas() { image_data = signaturePad.toDataURL(); @@ -99,7 +101,7 @@ if (get('anteprima') !== null) { if (signaturePad.isEmpty()) { alert("Please provide signature first."); } else { - image_data = signaturePad.toDataURL(); + image_data = signaturePad.toDataURL("image/jpeg", 100); $('#firma_base64').val(image_data); } }); diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php new file mode 100644 index 000000000..0b0cef053 --- /dev/null +++ b/modules/interventi/bulk.php @@ -0,0 +1,67 @@ +fetchArray('SELECT in_interventi.id, in_interventi.codice, data_richiesta, ragione_sociale FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id IN('.implode(',', $id_records).')'); + + if (!empty($records)) { + foreach ($records as $r) { + //$numero = !empty($r['numero_esterno']) ? $r['numero_esterno'] : $r['numero']; + $numero = $r['codice']; + + $numero = str_replace(['/', '\\'], '-', $numero); + + // Gestione della stampa + $rapportino_nome = sanitizeFilename($numero.' '.date('Y_m_d', strtotime($r['data_richiesta'])).' '.$r['ragione_sociale'].'.pdf'); + $filename = slashes($dir.'tmp/'.$rapportino_nome); + + $_GET['idintervento'] = $r['id']; // Fix temporaneo per la stampa + $idintervento = $r['id']; // Fix temporaneo per la stampa + //$ptype = ($r['descrizione'] == 'Fattura accompagnatoria di vendita') ? 'fatture_accompagnatorie' : 'fatture'; + + $ptype = 'interventi'; + + require DOCROOT.'/pdfgen.php'; + } + + $dir = slashes($dir); + $file = slashes($dir.'interventi_'.time().'.zip'); + + // Creazione zip + if (extension_loaded('zip')) { + create_zip($dir.'tmp/', $file); + + // Invio al browser dello zip + download($file); + + // Rimozione dei contenuti + delete($dir.'tmp/'); + } + } + + break; +} + +return [ + 'export-bulk' => [ + 'text' => tr('Esporta stampe'), + 'data' => [ + 'msg' => tr('Vuoi davvero esportare tutte le stampe in un archivio?'), + 'button' => tr('Procedi'), + 'class' => 'btn btn-lg btn-warning', + 'blank' => true, + ], + ], +]; diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index fc8029b1e..eea392709 100644 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -189,12 +189,12 @@ switch (post('op')) { } } break; - + case 'adddescrizione': if (!empty($id_record)) { $descrizione = post('descrizione'); $query = 'INSERT INTO or_righe_ordini(idordine, descrizione, is_descrizione) VALUES('.prepare($id_record).', '.prepare($descrizione).', 1)'; - + if ($dbo->query($query)) { $_SESSION['infos'][] = tr('Riga descrittiva aggiunta!'); } @@ -287,10 +287,10 @@ switch (post('op')) { $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; $desc_iva = $rs[0]['descrizione']; - if($is_descrizione==0){ + if ($is_descrizione == 0) { // Modifica riga generica sul documento $query = 'UPDATE or_righe_ordini SET idiva='.prepare($idiva).', desc_iva='.prepare($rs[0]['descrizione']).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga); - }else{ + } else { $query = 'UPDATE or_righe_ordini SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga); } if ($dbo->query($query)) { @@ -313,7 +313,7 @@ switch (post('op')) { $rs = $dbo->fetchArray($query); foreach ($rs as $value) { - $non_rimovibili = seriali_non_rimuovibili('id_riga_documenti', $value['id'], $dir); + $non_rimovibili = seriali_non_rimuovibili('id_riga_documento', $value['id'], $dir); if (!empty($non_rimovibili)) { $_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!'); diff --git a/modules/partitario/edit.php b/modules/partitario/edit.php index c3f7299a3..6ef8ce081 100644 --- a/modules/partitario/edit.php +++ b/modules/partitario/edit.php @@ -11,11 +11,11 @@ $n1 = sizeof($rs1); // Livello 1 for ($x = 0; $x < $n1; ++$x) { - $totale_attivita = 0.00; - $totale_passivita = 0.00; + $totale_attivita = []; + $totale_passivita = []; - $costi = 0.00; - $ricavi = 0.00; + $costi = []; + $ricavi = []; if ($rs1[$x]['descrizione'] == 'Economico') { echo "

Conto economico

\n"; @@ -55,7 +55,7 @@ for ($x = 0; $x < $n1; ++$x) { echo " \n"; for ($z = 0; $z < $n3; ++$z) { - $totale_conto_liv3 = 0.00; + $totale_conto_liv3 = []; echo " \n"; echo " \n"; } // Fine livello3 @@ -194,9 +194,9 @@ for ($x = 0; $x < $n1; ++$x) { if ($rs1[$x]['descrizione'] == 'Patrimoniale') { // Riepilogo - $attivita = abs($totale_attivita); - $passivita = abs($totale_passivita); - $utile_perdita = abs($totale_ricavi) - abs($totale_costi); + $attivita = abs(sum($totale_attivita)); + $passivita = abs(sum($totale_passivita)); + $utile_perdita = abs(sum($totale_ricavi)) - abs(sum($totale_costi)); if ($utile_perdita < 0) { $pareggio1 = $attivita + abs($utile_perdita); $pareggio2 = abs($passivita); @@ -231,7 +231,7 @@ for ($x = 0; $x < $n1; ++$x) { echo "

Perdita d'esercizio:

\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; @@ -240,7 +240,7 @@ for ($x = 0; $x < $n1; ++$x) { echo "

Utile:

\n"; echo "\n"; echo "\n"; } @@ -249,7 +249,7 @@ for ($x = 0; $x < $n1; ++$x) { echo "

Totale a pareggio:

\n"; echo "\n"; echo "\n"; echo "\n"; @@ -258,13 +258,13 @@ for ($x = 0; $x < $n1; ++$x) { echo "

Totale a pareggio:

\n"; echo "\n"; echo "\n"; echo '
\n"; @@ -103,7 +103,7 @@ for ($x = 0; $x < $n1; ++$x) { echo '
\n"; if (sizeof($rs) > 0) { - $totale_conto_liv3 = 0.00; + $totale_conto_liv3 = []; echo " \n"; echo " \n"; @@ -118,7 +118,7 @@ for ($x = 0; $x < $n1; ++$x) { if ($rs[$i]['iddocumento'] != '') { $module = ($rs[$i]['dir'] == 'entrata') ? Modules::get('Fatture di vendita')['id'] : Modules::get('Fatture di acquisto')['id']; echo "".$rs[$i]['descrizione']."\n"; - // echo " ".$rs[$i]['descrizione']."\n"; + // echo " ".$rs[$i]['descrizione']."\n"; } else { echo ' '.$rs[$i]['descrizione']."\n"; } @@ -138,9 +138,9 @@ for ($x = 0; $x < $n1; ++$x) { echo " \n"; if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - $totale_conto_liv3 += $rs[$i]['totale']; + $totale_conto_liv3[] = $rs[$i]['totale']; } else { - $totale_conto_liv3 -= $rs[$i]['totale']; + $totale_conto_liv3[] = -$rs[$i]['totale']; } } @@ -151,9 +151,9 @@ for ($x = 0; $x < $n1; ++$x) { echo " \n"; if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - $totale_conto_liv3 += $rs[$i]['totale']; + $totale_conto_liv3[] = $rs[$i]['totale']; } else { - $totale_conto_liv3 -= $rs[$i]['totale']; + $totale_conto_liv3[] = -$rs[$i]['totale']; } } echo " \n"; @@ -161,16 +161,16 @@ for ($x = 0; $x < $n1; ++$x) { // Somma dei totali if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - if ($totale_conto_liv3 > 0) { - $totale_attivita += $totale_conto_liv3; + if (sum($totale_conto_liv3) > 0) { + $totale_attivita[] = abs(sum($totale_conto_liv3)); } else { - $totale_passivita += $totale_conto_liv3; + $totale_passivita[] = abs(sum($totale_conto_liv3)); } } else { - if ($totale_conto_liv3 > 0) { - $totale_ricavi += $totale_conto_liv3; + if (sum($totale_conto_liv3) > 0) { + $totale_ricavi[] = abs(sum($totale_conto_liv3)); } else { - $totale_costi += $totale_conto_liv3; + $totale_costi[] = abs(sum($totale_conto_liv3)); } } echo "
Causale
\n"; @@ -179,7 +179,7 @@ for ($x = 0; $x < $n1; ++$x) { echo "
\n"; - echo Translator::numberToLocale($totale_conto_liv3)." €\n"; + echo Translator::numberToLocale(sum($totale_conto_liv3))." €\n"; echo "
\n"; - echo "

".Translator::numberToLocale($utile_perdita)." €

\n"; + echo "

".Translator::numberToLocale(sum($utile_perdita))." €

\n"; echo "
\n"; - echo "

".Translator::numberToLocale($utile_perdita)." €

\n"; + echo "

".Translator::numberToLocale(sum($utile_perdita))." €

\n"; echo "
\n"; - echo "

".Translator::numberToLocale($pareggio1)." €

\n"; + echo "

".Translator::numberToLocale(sum($pareggio1))." €

\n"; echo "
\n"; - echo "

".Translator::numberToLocale($pareggio2)." €

\n"; + echo "

".Translator::numberToLocale(sum($pareggio2))." €

\n"; echo "
'; } else { - echo "

RICAVI: ".Translator::numberToLocale($totale_ricavi)." €

\n"; - echo "

COSTI: ".Translator::numberToLocale(abs($totale_costi))." €

\n"; - echo "

UTILE/PERDITA: ".Translator::numberToLocale($totale_ricavi - abs($totale_costi))." €

\n"; + echo "

RICAVI: ".Translator::numberToLocale(sum($totale_ricavi))." €

\n"; + echo "

COSTI: ".Translator::numberToLocale(sum(abs($totale_costi)))." €

\n"; + echo "

UTILE/PERDITA: ".Translator::numberToLocale(sum($totale_ricavi) - sum(abs($totale_costi)))." €

\n"; } } diff --git a/modules/statistiche/edit.php b/modules/statistiche/edit.php index 3aa58c355..09f49cdf2 100644 --- a/modules/statistiche/edit.php +++ b/modules/statistiche/edit.php @@ -38,8 +38,8 @@ $d1 = new DateTime($start); $d2 = new DateTime($end); $count = $d1->diff($d2)->m + ($d1->diff($d2)->y * 12) + 1; -$fatturato = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC'); -$acquisti = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC'); +$fatturato = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC'); +$acquisti = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC'); $month = intval($d1->format('m')) - 1; for ($i = 0; $i < $count; ++$i) { @@ -111,9 +111,9 @@ $(document).ready(function() { '; // Clienti top -$clienti = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale, (SELECT COUNT(*) FROM co_documenti WHERE co_documenti.idanagrafica =an_anagrafiche.idanagrafica) AS qta, an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY an_anagrafiche.idanagrafica ORDER BY SUM(subtotale - sconto) DESC LIMIT 15'); +$clienti = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, (SELECT COUNT(*) FROM co_documenti WHERE co_documenti.idanagrafica =an_anagrafiche.idanagrafica) AS qta, an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY an_anagrafiche.idanagrafica ORDER BY SUM(subtotale - sconto) DESC LIMIT 15'); -$totale = $dbo->fetchArray("SELECT SUM(subtotale - sconto) AS totale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end)); +$totale = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end)); echo '
diff --git a/package.json b/package.json index 20cfd1c1a..81681f496 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ }, "scripts": { "gulp": "gulp", - "release-OSM": "yarn run develop-OSM && gulp release", + "release-OSM": "yarn run develop-OSM && php composer.phar install --no-dev && gulp release", "develop-OSM": "yarn install && yarn run install-OSM && yarn run assets-OSM", "install-OSM": "php composer.phar update", "assets-OSM": "yarn upgrade && yarn run build-OSM", diff --git a/templates/ddt/header.php b/templates/ddt/header.php index 6bf72c539..4d69c7d4c 100644 --- a/templates/ddt/header.php +++ b/templates/ddt/header.php @@ -6,7 +6,7 @@ $default_header$
- +
$tipo_doc$ @@ -61,7 +61,7 @@ $default_header$

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

$c_ragionesociale$

-

$c_indirizzo$ $c_citta_full$

+

$c_indirizzo$
$c_citta_full$

diff --git a/templates/fatture/header.php b/templates/fatture/header.php index a7e11d845..5c4fe0934 100644 --- a/templates/fatture/header.php +++ b/templates/fatture/header.php @@ -65,7 +65,7 @@ $default_header$

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

$c_ragionesociale$

-

$c_indirizzo$ $c_citta_full$

+

$c_indirizzo$
$c_citta_full$

diff --git a/templates/ordini/body.php b/templates/ordini/body.php index 626715210..b16f43c1f 100644 --- a/templates/ordini/body.php +++ b/templates/ordini/body.php @@ -24,7 +24,7 @@ echo " ".tr('Descrizione', [], ['upper' => true])." ".tr('Q.tà', [], ['upper' => true])." ".tr('Prezzo unitario', [], ['upper' => true])." - ".tr('Imponibile', [], ['upper' => true])." + ".tr('Importo', [], ['upper' => true])." ".tr('IVA', [], ['upper' => true]).' (%) diff --git a/templates/ordini/header.php b/templates/ordini/header.php index 559c580f7..cc09cc054 100644 --- a/templates/ordini/header.php +++ b/templates/ordini/header.php @@ -4,30 +4,51 @@ echo ' $default_header$
-
- $tipo_doc$ -
+
- - - + +
+
+ $tipo_doc$ +
-
+
-

'.tr('Nr. documento', [], ['upper' => true]).'

-

$numero_doc$

-
-

'.tr('Data documento', [], ['upper' => true]).'

-

$data$

-
+ + - + - - -
+

'.tr('Nr. documento', [], ['upper' => true]).'

+

$numero_doc$

+
-

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

-

$pagamento$

-
+

'.tr('Data documento', [], ['upper' => true]).'

+

$data$

+
-

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

-

{PAGENO}/{nb}

-
'; + +

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

+

$pagamento$

+ + + +

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

+

{PAGENO}/{nb}

+ + + +
+ + +
+ + + + +
+

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

+

$c_ragionesociale$

+

$c_indirizzo$
$c_citta_full$

+
+
+ + +
'; diff --git a/templates/ordini/init.php b/templates/ordini/init.php index 405ff1be6..0c7b56db7 100644 --- a/templates/ordini/init.php +++ b/templates/ordini/init.php @@ -2,7 +2,7 @@ include_once __DIR__.'/../../core.php'; -$module_name = 'Preventivi'; +$module_name = 'Ordini'; // Lettura info fattura $records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM or_tipiordine WHERE or_tipiordine.id=idtipoordine) AS tipo_doc, (SELECT descrizione FROM co_pagamenti WHERE id=idpagamento) AS tipo_pagamento FROM or_ordini WHERE id='.prepare($id_record)); diff --git a/templates/ordini/settings.php b/templates/ordini/settings.php index 4439efc69..acd80b57a 100644 --- a/templates/ordini/settings.php +++ b/templates/ordini/settings.php @@ -1,5 +1,5 @@ 55, + 'header-height' => 65, ]; diff --git a/templates/partitario_mastrino/pdfgen.partitario_mastrino.php b/templates/partitario_mastrino/pdfgen.partitario_mastrino.php index 8c777110b..7221e8431 100644 --- a/templates/partitario_mastrino/pdfgen.partitario_mastrino.php +++ b/templates/partitario_mastrino/pdfgen.partitario_mastrino.php @@ -52,7 +52,7 @@ if ($_GET['lev'] == '3') { \n"; // Inizializzo saldo finale - $saldo_finale = 0; + $saldo_finale = []; // Calcolo saldo iniziale $rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$idconto.'" AND data < "'.$_SESSION['period_start'].'"'); @@ -82,19 +82,19 @@ if ($_GET['lev'] == '3') { $body .= " ".Translator::dateToLocale($rs[$i]['data'])."".$rs[$i]['descrizione']."".$dare."".$avere."\n"; - $saldo_finale += $rs[$i]['totale']; + $saldo_finale[] = $rs[$i]['totale']; } - if ($saldo_finale < 0) { + if ( sum($saldo_finale) < 0) { $dare = ''; - $avere = abs($saldo_finale); + $avere = abs( sum($saldo_finale) ); } else { - $dare = abs($saldo_finale); + $dare = abs( sum($saldo_finale) ); $avere = ''; } // Mostro il saldo finale - $body .= " SALDO FINALE".Translator::numberToLocale(abs($dare))."".Translator::numberToLocale(abs($avere))."\n"; + $body .= " SALDO FINALE".Translator::numberToLocale( abs( sum($dare) ) )."".Translator::numberToLocale( abs( sum($avere) ) )."\n"; $body .= " \n"; @@ -110,33 +110,34 @@ elseif ($_GET['lev'] == '2') { $rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$idconto.'"'); for ($z = 0; $z < sizeof($rs3); ++$z) { + $v_dare = []; + $v_avere = []; + // Inizializzo saldo finale - $saldo_finale = 0; + $saldo_finale = []; // Calcolo saldo iniziale $rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data < "'.$_SESSION['period_start'].'"'); $saldo_iniziale = $rs[0]['totale']; - $saldo_finale = $saldo_iniziale; + $saldo_finale[] = $saldo_iniziale; - if ($saldo_iniziale < 0) { - $dare = ''; - $avere = abs($saldo_iniziale); + if ( $saldo_iniziale < 0) { + $v_avere[] = abs( $saldo_iniziale ); } else { - $dare = abs($saldo_iniziale); - $avere = ''; + $v_dare[] = abs( $saldo_iniziale ); } $rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC'); for ($i = 0; $i < sizeof($rs); ++$i) { if ($rs[$i]['totale'] >= 0) { - $dare += abs($rs[$i]['totale']); + $v_dare[] = abs($rs[$i]['totale']); } else { - $avere += abs($rs[$i]['totale']); + $v_avere[] = abs($rs[$i]['totale']); } } - $totale = $dare - $avere; + $totale = sum($v_dare) - sum($v_avere); if ($totale >= 0) { $dare = Translator::numberToLocale(abs($totale)); @@ -155,11 +156,11 @@ elseif ($_GET['lev'] == '2') { } // Stampa completa bilancio -elseif ($_GET['lev'] == '1') { - $ricavi = 0; - $costi = 0; - $totale_attivita = 0; - $totale_passivita = 0; +elseif (get('lev') == '1') { + $ricavi = []; + $costi = []; + $totale_attivita = []; + $totale_passivita = []; $body .= "@@ -179,31 +180,31 @@ elseif ($_GET['lev'] == '1') { $rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$rs2[$y]['id'].'"'); for ($z = 0; $z < sizeof($rs3); ++$z) { - $dare = 0; - $avere = 0; + $v_dare = []; + $v_avere = []; $rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC'); for ($i = 0; $i < sizeof($rs); ++$i) { if ($rs[$i]['totale'] >= 0) { - $dare += abs($rs[$i]['totale']); + $v_dare[] = abs($rs[$i]['totale']); } else { - $avere += abs($rs[$i]['totale']); + $v_avere[] = abs($rs[$i]['totale']); } } - $totale = $dare - $avere; + $totale = sum($v_dare) - sum($v_avere); if ($totale >= 0) { $dare = abs($totale); $avere = 0; - $totale_attivita += $dare; - $costi += abs($dare); + $totale_attivita[] = $dare; + $costi[] = abs($dare); } else { $dare = 0; $avere = abs($totale); - $totale_passivita += $avere; - $ricavi += abs($avere); + $totale_passivita[] = $avere; + $ricavi[] = abs($avere); } // Mostro il saldo finale del conto di livello 3 @@ -214,15 +215,15 @@ elseif ($_GET['lev'] == '1') { // Stampa "Costi/Ricavi" se conto economico if ($rs1[0]['descrizione'] == 'Economico') { - $body .= " \n"; - $body .= " \n"; - $body .= " \n"; + $body .= " \n"; + $body .= " \n"; + $body .= " \n"; } // Stampa "Attività/Passività" se stato patrimoniale else { - $costi = 0; - $ricavi = 0; + $costi = []; + $ricavi = []; // Ciclo fra il conto economico per calcolare l'utile o la perdita $rs1 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti1 WHERE NOT id="'.$idconto.'" ORDER BY numero DESC'); @@ -237,29 +238,29 @@ elseif ($_GET['lev'] == '1') { for ($z = 0; $z < sizeof($rs3); ++$z) { // Inizializzo saldo finale - $saldo_finale = 0; + $saldo_finale = []; // Calcolo saldo iniziale $rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$rs2[$y]['id'].'" AND data < "'.$_SESSION['period_start'].'"'); - $dare = 0; - $avere = 0; + $dare = []; + $avere = []; $rs = $dbo->fetchArray('SELECT * FROM co_movimenti WHERE idconto="'.$rs3[$z]['id'].'" AND data >= "'.$_SESSION['period_start'].'" AND data <= "'.$_SESSION['period_end'].'" ORDER BY data ASC'); for ($i = 0; $i < sizeof($rs); ++$i) { if ($rs[$i]['totale'] >= 0) { - $dare += abs($rs[$i]['totale']); + $dare[] = abs($rs[$i]['totale']); } else { - $avere += abs($rs[$i]['totale']); + $avere[] = abs($rs[$i]['totale']); } } - $totale = $dare - $avere; + $totale = sum($dare) - sum($avere); if ($totale >= 0) { - $costi += abs($totale); + $costi[] = abs($totale); } else { - $ricavi += abs($totale); + $ricavi[] = abs($totale); } } } @@ -269,9 +270,9 @@ elseif ($_GET['lev'] == '1') { $body .= "
RICAVI".Translator::numberToLocale($ricavi)."
COSTI".Translator::numberToLocale($costi)."
UTILE".Translator::numberToLocale($ricavi - $costi)."
RICAVI".Translator::numberToLocale( sum($ricavi) )."
COSTI".Translator::numberToLocale( sum($costi) )."
UTILE".Translator::numberToLocale( sum($ricavi) - sum($costi) )."
\n"; // Tabella di riepilogo finale - $totale_attivita = abs($totale_attivita); - $totale_passivita = abs($totale_passivita); - $utile_perdita = abs($ricavi) - abs($costi); + $totale_attivita = abs( sum($totale_attivita) ); + $totale_passivita = abs( sum($totale_passivita) ); + $utile_perdita = abs( sum($ricavi) ) - abs( sum($costi) ); if ($utile_perdita < 0) { $pareggio1 = $totale_attivita + abs($utile_perdita); diff --git a/templates/preventivi_cons/body.php b/templates/preventivi_cons/body.php index 8b0470d9e..5ed938caf 100644 --- a/templates/preventivi_cons/body.php +++ b/templates/preventivi_cons/body.php @@ -86,6 +86,7 @@ if (!empty($interventi)) { $int = array_merge($int, get_costi_intervento($int['id'])); $int['sconto'] = ($int['manodopera_addebito'] - $int['manodopera_scontato']) + ($int['viaggio_addebito'] - $int['viaggio_scontato']); $int['subtotale'] = $int['manodopera_scontato'] + $int['viaggio_scontato']; + $sconto[] = $int['sconto_globale']; echo ' @@ -205,7 +206,7 @@ if (!empty($interventi)) { // Articoli per intervento foreach ($interventi as $int) { - $righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC'); + $righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo AND mg_prodotti.id_riga_intervento = mg_articoli_interventi.idintervento) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC'); foreach ($righe as $r) { echo ' diff --git a/update/2_3_1.sql b/update/2_3_1.sql index d7464a51e..48075dbe8 100644 --- a/update/2_3_1.sql +++ b/update/2_3_1.sql @@ -7,3 +7,13 @@ ALTER TABLE `zz_files` ADD `id_plugin` int(11) AFTER `id_module`; -- Aggiunto valore NULL a idarticolo in co_righe2_contratti -- ALTER TABLE `co_righe2_contratti` CHANGE `idarticolo` `idarticolo` int(11); -- UPDATE `co_righe2_contratti` SET `idarticolo` = NULL WHERE `idarticolo` = 0; + +-- Aggiornamento ORDER BY nei moduli Fatture, DDT, Ordini, Preventivi, Contratti e Interventi +UPDATE `zz_views` SET `order_by` = 'CAST(numero_esterno AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN ('Fatture di vendita', 'Fatture di acquisto', 'Ordini cliente', 'Ordini fornitore', 'Ddt di vendita', 'Ddt di acquisto')); + +UPDATE `zz_views` SET `order_by` = 'CAST(in_interventi.codice AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi'); + +UPDATE `zz_views` SET `order_by` = 'CAST(numero AS UNSIGNED)' WHERE `name` = 'Numero' AND `id_module` IN (SELECT `id` FROM `zz_modules` WHERE `name` IN ('Ordini Preventivi', 'Contratti')); + +-- Query per ignorare i punti nella ricerca in Ragione sociale +-- UPDATE `zz_views` SET `search_inside` = CONCAT('REPLACE(', `query`, ', ''.'', '''') LIKE |search|') WHERE `name` = 'Ragione sociale';