diff --git a/ajax_dataload.php b/ajax_dataload.php index 92178f71c..c8c9741bd 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -80,7 +80,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 @@ -126,7 +126,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom } // Allineamento al centro se il valore della prima riga risulta relativo a date o icone - elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icontr(.+?)$/', $field)) { + elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icon_(.+?)$/', $field)) { $align[$field] = 'text-center'; } } @@ -162,7 +162,7 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom } // Icona - if (preg_match('/^colortr(.+?)$/', $field, $m)) { + if (preg_match('/^color_(.+?)$/', $field, $m)) { $value = $r['color_title_'.$m[1]] ?: ''; $column['class'] = 'text-center small'; diff --git a/ajax_select.php b/ajax_select.php index 366e76edf..4ca1eaa1d 100644 --- a/ajax_select.php +++ b/ajax_select.php @@ -231,9 +231,9 @@ switch ($op) { $filter[] = 'mg_articoli.id='.prepare($element); } - $where[] = 'attivo=1'; + $where[] = 'attivo = 1'; if (!empty($superselect['dir']) && $superselect['dir'] == 'entrata') { - //$where[] = 'qta>0'; + //$where[] = '(qta > 0 OR servizio = 1)'; } if (!empty($search)) { @@ -241,7 +241,6 @@ switch ($op) { $search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%'); } - $wh = ''; if (!empty($search_fields)) { $where[] = '('.implode(' OR ', $search_fields).')'; } @@ -250,6 +249,7 @@ switch ($op) { $where[] = '('.implode(' OR ', $filter).')'; } + $wh = ''; if (count($where) != 0) { $wh = 'WHERE '.implode(' AND ', $where); } 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/editor.php b/editor.php index 13aaa7854..8ce69adf9 100755 --- a/editor.php +++ b/editor.php @@ -73,7 +73,7 @@ if (empty($records)) { '.tr("Torna all'elenco").' '; - $plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1"); + $plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab' AND enabled = 1 ORDER BY zz_plugins.order DESC"); foreach ($plugins as $plugin) { echo ' diff --git a/files/.htaccess b/files/.htaccess index 521aa7bf2..5520a48f5 100644 --- a/files/.htaccess +++ b/files/.htaccess @@ -1,5 +1,7 @@ # Disable PHP rendering -php_flag engine off - -## Options -ExecCGI -AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi + + php_flag engine off + + + php_flag engine off + diff --git a/modules/articoli/modutil.php b/modules/articoli/modutil.php index 73f71e13f..dabab38f7 100644 --- a/modules/articoli/modutil.php +++ b/modules/articoli/modutil.php @@ -12,7 +12,7 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = ' if (empty($qta)) { return false; } - + //Info Articolo $rs_art = $dbo->fetchArray("SELECT * FROM mg_articoli WHERE id='".$idarticolo."'"); @@ -79,9 +79,9 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = ' $movimento = str_replace(['_NAME_', '_TYPE_', '_NUM_'], [$nome, $tipo, $numero], $movimento); $new = ($qta > 0 ? '+' : '').$qta; - + //Movimento il magazzino solo se l'articolo non è un servizio - if($rs_art[0]['servizio']==0){ + if ($rs_art[0]['servizio'] == 0) { // Movimentazione effettiva if (empty($array['idintervento']) || empty($array['idautomezzo'])) { $dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($idarticolo)); diff --git a/modules/contratti/plugins/addpianficazione.php b/modules/contratti/plugins/addpianficazione.php new file mode 100644 index 000000000..f7b995bf1 --- /dev/null +++ b/modules/contratti/plugins/addpianficazione.php @@ -0,0 +1,134 @@ + + +$idcontratto_riga = $get['idcontratto_riga']; +$qp = 'SELECT *, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga; +$rsp = $dbo->fetchArray($qp); + +$data_richiesta = readDate($rsp[0]['data_richiesta']); + +$orario_inizio = '09:00'; +$orario_fine = '17:00'; + +echo ' +
+ + + +
+ + +
+ {[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "disabled" ]} +
+ + +
+ {[ "type": "number", "label": "'.tr('Intervallo').'", "name": "intervallo", "class": "", "decimals": 0, "required": 1, "icon-after": "GG", "min-value": "1" ]} +
+ + + +
+ +
+ +
+ {[ "type": "textarea", "label": "'.tr('Descrizione').'", "placeholder": "'.tr('Descrizione').'", "name": "richiesta", "extra": "readonly", "value": "'.$rsp[0]['richiesta'].'" ]} +
+ +
+ + +
+ + + + + +'; + +?> + +
+ {[ "type": "select", "label": "", "name": "parti_da_oggi", "values": "list= \"0\":\"\", \"1\":\"\"", "value": "" ]} +
+ + + {[ "type": "date", "label": "'.tr('Fine pianificazione (Data conclusione contratto)').'", "name": "data_conclusione", "extra": "readonly", "value": "'.$rsp[0]['data_conclusione'].'" ]} +
+ + + + +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Pianifica intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare anche gli interventi ').'" ]} +
+ +
+ {[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "value": "", "extra": "disabled" ]} +
+ + +
+ {[ "type": "time", "label": "'.tr('Orario inizio').'", "name": "orario_inizio", "required": 0, "value": "'.$orario_inizio.'", "extra": "disabled" ]} +
+ +
+ {[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "required": 0, "value": "'.$orario_fine.'", "extra": "disabled" ]} +
+ + + + +
+ + + + + +
+
+ +
+
+ + +
'; + +echo ' + '; + +echo ' + '; \ No newline at end of file diff --git a/modules/contratti/plugins/contratti.pianificazioneinterventi.php b/modules/contratti/plugins/contratti.pianificazioneinterventi.php index f24eca427..03cdef60c 100644 --- a/modules/contratti/plugins/contratti.pianificazioneinterventi.php +++ b/modules/contratti/plugins/contratti.pianificazioneinterventi.php @@ -31,6 +31,170 @@ switch (filter('op')) { redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin); break; + + + + //pianificazione + case 'pianificazione': + + $idcontratto_riga = filter('idcontratto_riga'); + $intervallo = filter('intervallo'); + $parti_da_oggi = post('parti_da_oggi'); + + if (!empty($idcontratto_riga) and !empty($intervallo) ){ + + $qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga; + $rsp = $dbo->fetchArray($qp); + + $idtipointervento = $rsp[0]['idtipointervento']; + $idsede = $rsp[0]['idsede']; + $richiesta = $rsp[0]['richiesta']; + + //mi serve per la pianificazione interventi + $idanagrafica = $rsp[0]['idanagrafica']; + + $data_conclusione = $rsp[0]['data_conclusione']; + $data_richiesta = $rsp[0]['data_richiesta']; + + + //se voglio pianificare anche le date precedenti ad oggi (parto da questo promemoria) + if ($parti_da_oggi){ + + //oggi + $min_date = date('Y-m-d'); + + + }else{ + + $min_date = date('Y-m-d', strtotime($data_richiesta)); + + } + + //inizio controllo data_conclusione, data valida e maggiore della $min_date + if ( (date('Y', strtotime($data_conclusione)) > 1970) and (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione))) ) { + + //Ciclo partendo dalla data_richiesta fino all data conclusione del contratto + while ( date('Y-m-d', strtotime($data_richiesta)) < date('Y-m-d', strtotime($data_conclusione)) ){ + + //calcolo nuova data richiesta + $data_richiesta = date('Y-m-d', strtotime($data_richiesta. " + ".intval($intervallo)." days") ); + + + //controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto + if ( (date('Y-m-d', strtotime($data_richiesta)) >= $min_date ) and (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) ){ + + //Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta. + if ( count($dbo->fetchArray("SELECT id FROM co_righe_contratti WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0 ){ + + $query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')'; + + if ($dbo->query($query)) { + + $idriga = $dbo->lastInsertedID(); + + $_SESSION['infos'][] = tr('Promemoria intervento pianificato!'); + + + //pianificare anche l' intervento? + if ($post['pianifica_intervento']){ + + /*$orario_inizio = post('orario_inizio'); + $orario_fine = post('orario_fine');*/ + + //$idanagrafica = 2; + + //intervento sempre nello stato "In programmazione" + $idstatointervento = 'WIP'; + + //calcolo codice intervento + $formato = get_var('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'); + $codice = get_next_code($rs[0]['codice'], 1, $formato); + + if (empty($codice)) { + $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); + + $codice = get_next_code($rs[0]['codice'], 1, $formato); + } + + + + // Creo intervento + $dbo->insert('in_interventi', [ + 'idanagrafica' => $idanagrafica, + 'idclientefinale' => post('idclientefinale') ?: 0, + 'idstatointervento' => $idstatointervento, + 'idtipointervento' => $idtipointervento, + 'idsede' => $idsede ?: 0, + 'idautomezzo' => $idautomezzo ?: 0, + + 'codice' => $codice, + 'data_richiesta' => $data_richiesta, + 'richiesta' => $richiesta, + ]); + + $idintervento = $dbo->lastInsertedID(); + + + + $idtecnici = post('idtecnico'); + + //aggiungo i tecnici + foreach ($idtecnici as $idtecnico) { + add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record); + } + + //collego l'intervento ai promemoria + $dbo->query('UPDATE co_righe_contratti SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga)); + + // $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.'); + + $_SESSION['infos'][] = tr('Interventi pianificati correttamente.'); + + + } + //fine if pianificazione intervento + + + }else{ + + $_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga); + + } + + }else{ + + $_SESSION['warnings'][] = tr("Esiste già un promemoria pianificato per il ".readDate($data_richiesta)."."); + + + } + + } + //fine controllo nuova data richiesta + + } + //fine ciclo while + + }else{ + + $_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.'); + + } + //fine controllo data_conclusione + + + }else{ + + $_SESSION['errors'][] = tr('Errore durante la pianificazione. #'.$idcontratto_riga); + + } + + redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin); + break; + + } // Righe già inserite @@ -84,27 +248,44 @@ if (count($rsp) != 0) { '_NUM_' => $rsp2[0]['codice'], '_DATE_' => Translator::dateToLocale($rsp2[0]['data']), ])); + + $disabled = 'disabled'; + } else { $info_intervento = '- '.('Nessuno').' -'; + $disabled = ''; } + + + if (date('Y', strtotime($records[0]['data_conclusione']))<1971){ + $records[0]['data_conclusione'] = ''; + } echo ' - '.Translator::dateToLocale($rsp[$i]['data_richiesta']).' + '.Translator::dateToLocale($rsp[$i]['data_richiesta']).' '.$rsp[$i]['tipointervento'].' '.nl2br($rsp[$i]['richiesta']).' '.$info_intervento.' '.$info_sede.' '; + + + + echo ' + '; + + + + + + echo ' + '; - if (empty($rsp[$i]['idintervento'])) { - echo ' - '; + echo ' + '; - echo ' - '; - } echo ' '; diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index e60aa59b8..acab2ca95 100755 --- 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 2b24704c2..1d30d5e39 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -7,6 +7,7 @@ $dir = $rs[0]['dir']; $tipodoc = $rs[0]['descrizione']; $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica']; +$_SESSION['superselect']['ddt'] = $dir; ?>
@@ -17,20 +18,54 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica']; - +
-

+

+ + 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).'
'; + } + } + ?> + +
+ +
+
@@ -42,7 +77,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
'; $label = tr('Numero secondario'); } else { - $label = tr('Numero fattura'); + $label = tr('Numero fattura'); } ?>
@@ -109,7 +144,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
- {[ "type": "select", "label": "", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, descrizione FROM co_tipidocumento WHERE dir=''", "value": "$idtipodocumento$" ]} + {[ "type": "select", "label": "", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, descrizione FROM co_tipidocumento WHERE dir=''", "value": "$idtipodocumento$" ]}
@@ -120,7 +155,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica']; $ajaxsource = 'conti-acquisti'; } ?> - {[ "type": "select", "label": "", "name": "idconto", "required": 1, "value": "$idconto$", "ajax-source": "" ]} + {[ "type": "select", "label": "", "name": "idconto", "required": 1, "value": "$idconto$", "ajax-source": "" ]}
@@ -191,13 +226,13 @@ $da_pagare = $rs3[0]['da_pagare']; if (($n2 <= 0 && $records[0]['stato'] == 'Emessa') || $differenza != 0) { ?> - Aggiungi prima nota...

+ ...

- Riapri fattura... + ... @@ -206,7 +241,7 @@ if ($records[0]['stato'] == 'Pagato') {
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"fetchNum($qi); + $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND 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) - $qi = 'SELECT id FROM in_interventi WHERE idclientefinale='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)"; - $interventi = $dbo->fetchNum($qi); + $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi WHERE idclientefinale='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)"; + $interventi = $dbo->fetchArray($int_query)[0]['tot']; } echo ' @@ -266,16 +301,16 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { '; // Lettura preventivi accettati, in attesa di conferma o in lavorazione - $qp = 'SELECT id FROM co_preventivi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')"; - $preventivi = $dbo->fetchNum($qp); + $prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')"; + $preventivi = $dbo->fetchArray($prev_query)[0]['tot']; echo ' Preventivo '; // Lettura contratti accettati, in attesa di conferma o in lavorazione - $qc = 'SELECT id FROM co_contratti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)'; - $contratti = $dbo->fetchNum($qc); + $contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)'; + $contratti = $dbo->fetchArray($contr_query)[0]['tot']; echo ' @@ -283,8 +318,8 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { '; // Lettura ddt - $qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; - $ddt = $dbo->fetchNum($qd); + $ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; + $ddt = $dbo->fetchArray($ddt_query)[0]['tot']; echo ' Ddt @@ -292,7 +327,12 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { } // Lettura articoli - $articoli = $dbo->fetchNum('SELECT * FROM mg_articoli WHERE qta > 0'); + $art_query = 'SELECT COUNT(*) AS tot FROM mg_articoli WHERE attivo = 1'; + if ($dir == 'entrata') { + $art_query .= ' AND (qta > 0 OR servizio = 1)'; + } + + $articoli = $dbo->fetchArray($art_query)[0]['tot']; echo ' Articolo @@ -302,7 +342,7 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { Riga generica '; - + echo ' Descrizione @@ -314,42 +354,23 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') { @@ -368,7 +389,7 @@ include $docroot.'/modules/fatture/row-list.php';
-{( "name": "filelist_and_upload", "id_module": "", "id_record": "" )} +{( "name": "filelist_and_upload", "id_module": "", "id_record": "" )} '; // 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 6869a5ee9..50b33a104 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,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 854fc9ec6..abbdc8dcd 100755 --- 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/info.php b/templates/info.php index 7b26d36a9..d9ec66706 100644 --- a/templates/info.php +++ b/templates/info.php @@ -33,19 +33,7 @@ $keys = []; // Predisposizione delle informazioni delle anagrafiche per la sostituzione automatica foreach ($replace as $prefix => $values) { - // Individuazione dei campi minimi $values = (array) $values; - if ($prefix == 'c_') { - $keys = array_keys($values); - } - - // Se l'azienda predefinita non è impostata - if (empty($values) && $prefix == 'f_') { - $values = []; - foreach ($keys as $key) { - $values[$key] = ''; - } - } // Rinominazione dei campi foreach ($rename as $key => $value) { @@ -53,11 +41,6 @@ foreach ($replace as $prefix => $values) { unset($values[$key]); } - // Salvataggio dei campi come variabili PHP - foreach ($values as $key => $value) { - ${$prefix.$key} = $value; - } - // Eventuali estensioni dei contenuti $citta = ''; if (!empty($values['cap'])) { @@ -72,23 +55,37 @@ foreach ($replace as $prefix => $values) { $values['citta_full'] = $citta; - // Completamento dei campi minimi - if ($key == 'c_') { - $keys = array_unique(array_merge($keys, array_keys($values))); + $replace[$prefix] = $values; + + // Individuazione dei campi minimi + $keys = array_merge($keys, array_keys($values)); +} + +$keys = array_unique($keys); + +foreach ($replace as $prefix => $values) { + // Impostazione di default per le informazioni mancanti + foreach ($keys as $key) { + if (!isset($values[$key])) { + $values[$key] = ''; + } } - // Aggiunta delle informazioni per la sostituzione automatica + // Salvataggio dei campi come variabili PHP e aggiunta delle informazioni per la sostituzione automatica foreach ($values as $key => $value) { + ${$prefix.$key} = $value; $replaces[$prefix.$key] = $value; } } // Valori aggiuntivi per la sostituzione $replaces = array_merge($replaces, [ + 'default_header' => include DOCROOT.'/templates/base/header.php', + 'default_footer' => include DOCROOT.'/templates/base/footer.php', 'docroot' => DOCROOT, 'rootdir' => ROOTDIR, 'footer' => !empty($footer) ? $footer : '', 'dicitura_fissa_fattura' => get_var('Dicitura fissa fattura'), - 'default_header' => include DOCROOT.'/templates/base/header.php', - 'default_footer' => include DOCROOT.'/templates/base/footer.php', ]); + +unset($replace); diff --git a/templates/ordini/body.php b/templates/ordini/body.php index 3fdcf613b..171e145df 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 2d19fcd99..007078965 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($idordine)); 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 old mode 100644 new mode 100755 index fa059465e..137ea3e6b --- a/templates/partitario_mastrino/pdfgen.partitario_mastrino.php +++ b/templates/partitario_mastrino/pdfgen.partitario_mastrino.php @@ -51,11 +51,11 @@ if (get('lev') == '3') { \n"; - // Inizializzo saldo finale - $saldo_finale = 0; + // Inizializzo saldo finale + $saldo_finale = []; - // Calcolo saldo iniziale - $rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$idconto.'" AND data < "'.$_SESSION['period_start'].'"'); + // Calcolo saldo iniziale + $rs = $dbo->fetchArray('SELECT SUM(totale) AS totale FROM co_movimenti WHERE idconto="'.$idconto.'" AND data < "'.$_SESSION['period_start'].'"'); $saldo_iniziale = $rs[0]['totale']; $saldo_finale = $saldo_iniziale; @@ -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"; + // Mostro il saldo finale + $body .= " SALDO FINALE".Translator::numberToLocale( abs( sum($dare) ) )."".Translator::numberToLocale( abs( sum($avere) ) )."\n"; $body .= " \n"; @@ -106,37 +106,38 @@ elseif (get('lev') == '2') { \n"; - // Ciclo fra i sotto-conti di livello 2 - $rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$idconto.'"'); + // Ciclo fra i sotto-conti di livello 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'].'"'); + // 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)); @@ -146,8 +147,8 @@ elseif (get('lev') == '2') { $avere = Translator::numberToLocale(abs($totale)); } - // Mostro il saldo finale del conto di livello 3 - $body .= " ".$rs3[$z]['numero'].' '.$rs3[$z]['descrizione']."".$dare."".$avere."\n"; + // Mostro il saldo finale del conto di livello 3 + $body .= " ".$rs3[$z]['numero'].' '.$rs3[$z]['descrizione']."".$dare."".$avere."\n"; } $body .= " @@ -156,73 +157,73 @@ elseif (get('lev') == '2') { // Stampa completa bilancio elseif (get('lev') == '1') { - $ricavi = 0; - $costi = 0; - $totale_attivita = 0; - $totale_passivita = 0; + $ricavi = []; + $costi = []; + $totale_attivita = []; + $totale_passivita = []; $body .= "\n"; - // Ciclo fra il conto principale scelto (Economico o Patrimoniale) - $rs1 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti1 WHERE id="'.$idconto.'" ORDER BY numero DESC'); + // Ciclo fra il conto principale scelto (Economico o Patrimoniale) + $rs1 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti1 WHERE id="'.$idconto.'" ORDER BY numero DESC'); for ($x = 0; $x < sizeof($rs1); ++$x) { // Ciclo fra i sotto-conti di livello 1 - $rs2 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti2 WHERE idpianodeiconti1="'.$rs1[$x]['id'].'"'); + $rs2 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti2 WHERE idpianodeiconti1="'.$rs1[$x]['id'].'"'); for ($y = 0; $y < sizeof($rs2); ++$y) { $body .= " \n"; - // Ciclo fra i sotto-conti di livello 2 - $rs3 = $dbo->fetchArray('SELECT id, numero, descrizione FROM co_pianodeiconti3 WHERE idpianodeiconti2="'.$rs2[$y]['id'].'"'); + // Ciclo fra i sotto-conti di livello 2 + $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 - $body .= " \n"; + // Mostro il saldo finale del conto di livello 3 + $body .= " \n"; } } } // 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 .= "
".$rs2[$y]['numero'].' '.$rs2[$y]['descrizione']."
".$rs3[$z]['numero'].' '.$rs3[$z]['descrizione']."".Translator::numberToLocale(abs($dare))."".Translator::numberToLocale(abs($avere))."
".$rs3[$z]['numero'].' '.$rs3[$z]['descrizione']."".Translator::numberToLocale(abs($dare))."".Translator::numberToLocale(abs($avere))."
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/pdfgen_variables.php b/templates/pdfgen_variables.php index e0780c61a..8f16613dd 100644 --- a/templates/pdfgen_variables.php +++ b/templates/pdfgen_variables.php @@ -3,7 +3,10 @@ include_once __DIR__.'/info.php'; // Retrocompatibilità con le stampe gestite da HTML2PDF -$replaces['pagination'] = str_replace(['{PAGENO}', '{nb}'], ['[[page_cu]]', '[[page_nb]]'], $replaces['pagination']); +$replaces['default_header'] = str_replace(['{PAGENO}', '{nb}'], ['[[page_cu]]', '[[page_nb]]'], $replaces['default_header']); + +$replaces['footer'] = str_replace(['{PAGENO}', '{nb}'], ['[[page_cu]]', '[[page_nb]]'], $replaces['footer']); +$replaces['default_footer'] = str_replace(['{PAGENO}', '{nb}'], ['[[page_cu]]', '[[page_nb]]'], $replaces['default_footer']); $prefixes = [ 'c_', diff --git a/templates/preventivi_cons/body.php b/templates/preventivi_cons/body.php index 41791aa77..177ae5767 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';