diff --git a/assets/src/css/style.css b/assets/src/css/style.css
index 84a4ad083..4adfde818 100644
--- a/assets/src/css/style.css
+++ b/assets/src/css/style.css
@@ -526,12 +526,13 @@ span.form-control {
.main-header .logo {
display: none;
}
+ /*
.content-wrapper,
.right-side,
.left-side,
.main-sidebar {
padding-top: 50px;
- }
+ }*/
}
@media screen and (max-width:1023px) {
diff --git a/include/top.php b/include/top.php
index 0b66c41b3..b5ba85e63 100644
--- a/include/top.php
+++ b/include/top.php
@@ -52,9 +52,12 @@ if (Auth::check()) {
'week' => tr('Settimana'),
'month' => tr('Mese'),
'today' => tr('Oggi'),
- 'yesterday' => tr('Ieri'),
- 'last7Days' => tr('Ultimi 7 giorni'),
- 'last30Days' => tr('Ultimi 30 giorni'),
+ 'firstThreemester' => tr('I trimestre'),
+ 'secondThreemester' => tr('II trimestre'),
+ 'thirdThreemester' => tr('III trimestre'),
+ 'fourthThreemester' => tr('IV trimestre'),
+ 'firstSemester' => tr('I semestre'),
+ 'secondSemester' => tr('II semestre'),
'thisMonth' => tr('Questo mese'),
'lastMonth' => tr('Mese scorso'),
'thisYear' => tr("Quest'anno"),
@@ -161,8 +164,12 @@ if (Auth::check()) {
-
-
+
+
+ '.Translator::dateToLocale($_SESSION['period_start']).' - '.Translator::dateToLocale($_SESSION['period_end']).'
+
+
+
';
-// Nelle fatture di acquisto leggo l'iva di acquisto dal fornitore
-if ($dir == 'uscita') {
- $rsf = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
- $idiva = $rsf[0]['idiva'];
-}
-
-// Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
-$idiva = $idiva ?: get_var('Iva predefinita');
+// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$idiva = $iva[0]['idiva'] ?: get_var('Iva predefinita');
// Iva
echo '
diff --git a/modules/fatture/add_riga.php b/modules/fatture/add_riga.php
index fcf1fee33..e1e16bb29 100644
--- a/modules/fatture/add_riga.php
+++ b/modules/fatture/add_riga.php
@@ -63,14 +63,9 @@ if (get_var('Percentuale rivalsa INPS') != '' || get_var("Percentuale ritenuta d
';
}
-// Nelle fatture di acquisto leggo l'iva di acquisto dal fornitore
-if ($dir == 'uscita') {
- $rsf = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
- $idiva_predefinita = $rsf[0]['idiva'];
-}
-
-// Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
-$idiva = $idiva ?: get_var('Iva predefinita');
+// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$idiva = $iva[0]['idiva'] ?: get_var('Iva predefinita');
// Iva
echo '
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php
index 304d24f27..7db277a92 100644
--- a/modules/interventi/actions.php
+++ b/modules/interventi/actions.php
@@ -130,7 +130,7 @@ switch (post('op')) {
'km' => $km,
'prezzo_ore_unitario' => $prezzo_ore_unitario,
- 'prezzo_km_unitario' => $prezzo_km_unitari,
+ 'prezzo_km_unitario' => $prezzo_km_unitario,
'prezzo_dirittochiamata' => $prezzo_dirittochiamata,
'prezzo_ore_unitario_tecnico' => $prezzo_ore_unitario_tecnico,
'prezzo_km_unitario_tecnico' => $prezzo_km_unitario_tecnico,
diff --git a/modules/interventi/ajax_tecnici.php b/modules/interventi/ajax_tecnici.php
index a786273e7..93db8f2c5 100644
--- a/modules/interventi/ajax_tecnici.php
+++ b/modules/interventi/ajax_tecnici.php
@@ -39,7 +39,7 @@ if ($user['gruppo'] == 'Tecnici') {
$rss = $dbo->fetchArray('SELECT idtipointervento FROM in_interventi WHERE id='.prepare($id_record));
$idtipointervento = $rs[0]['idtipointervento'];
-$query = 'SELECT * FROM an_anagrafiche JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica WHERE deleted=0 AND idintervento='.prepare($id_record)." AND idanagrafica IN (SELECT idanagrafica FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica = (SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione = 'Tecnico')) ORDER BY ragione_sociale ASC, in_interventi_tecnici.orario_inizio ASC";
+$query = 'SELECT * FROM an_anagrafiche JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica WHERE deleted=0 AND idintervento='.prepare($id_record)." AND idanagrafica IN (SELECT idanagrafica FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica = (SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione = 'Tecnico')) ORDER BY ragione_sociale ASC, in_interventi_tecnici.orario_inizio ASC, in_interventi_tecnici.id ASC";
$rs2 = $dbo->fetchArray($query);
$prev_tecnico = '';
@@ -49,9 +49,11 @@ if (!empty($rs2)) {
// Intestazione tecnico
if ($prev_tecnico != $r['ragione_sociale']) {
+ $prev_tecnico = $r['ragione_sociale'];
+
echo '
-
+
'.$r['ragione_sociale'].'
'.tr('Orario inizio').'
@@ -108,7 +110,7 @@ if (!empty($rs2)) {
';
echo '
-
+
';
if ($rs[0]['stato'] != 'Fatturato') {
diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php
index 9e63776c5..ea00bd212 100644
--- a/modules/interventi/modutil.php
+++ b/modules/interventi/modutil.php
@@ -124,6 +124,13 @@ function add_tecnico($idintervento, $idtecnico, $inizio, $fine, $idcontratto)
}
}
+ // Azzeramento forzato del diritto di chiamata nel caso questa non sia la prima sessione dell'intervento per il giorno di inizio [Luca]
+ $rs = $dbo->fetchArray('SELECT id FROM in_interventi_tecnici WHERE (DATE(orario_inizio)=DATE('.prepare($inizio).') OR DATE(orario_fine)=DATE('.prepare($inizio).')) AND idintervento='.prepare($idintervento));
+ if (!empty($rs)) {
+ $costo_dirittochiamata_tecnico = 0;
+ $costo_dirittochiamata = 0;
+ }
+
// Inserisco le ore dei tecnici nella tabella "in_interventi_tecnici"
$dbo->insert('in_interventi_tecnici', [
'idintervento' => $idintervento,
diff --git a/modules/ordini/add_articolo.php b/modules/ordini/add_articolo.php
index 03e184b2e..a86ec03c2 100644
--- a/modules/ordini/add_articolo.php
+++ b/modules/ordini/add_articolo.php
@@ -56,14 +56,9 @@ echo '
';
-// Nelle fatture di acquisto leggo l'iva di acquisto dal fornitore
-if ($dir == 'uscita') {
- $rsf = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
- $idiva_predefinita = $rsf[0]['idiva'];
-}
-
-// Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
-$idiva = $idiva ?: get_var('Iva predefinita');
+// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+$idiva = $iva[0]['idiva'] ?: get_var('Iva predefinita');
// Iva
echo '
diff --git a/modules/ordini/add_riga.php b/modules/ordini/add_riga.php
index ae9858bc3..fa9232697 100644
--- a/modules/ordini/add_riga.php
+++ b/modules/ordini/add_riga.php
@@ -29,14 +29,9 @@ if (empty($idriga)) {
$prezzo = 0;
$sconto = 0;
- // Nelle fatture di acquisto leggo l'iva di acquisto dal fornitore
- if ($dir == 'uscita') {
- $rsf = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
- $idiva = $rsf[0]['idiva'];
- }
-
- // Leggo l'iva predefinita dall'articolo e se non c'è leggo quella predefinita generica
- $idiva = $idiva ?: get_var('Iva predefinita');
+ // Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+ $iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
+ $idiva = $iva[0]['idiva'] ?: get_var('Iva predefinita');
} else {
$op = 'editriga';
$button = tr('Modifica');
diff --git a/modules/preventivi/plugins/preventivi.consuntivo.php b/modules/preventivi/plugins/preventivi.consuntivo.php
index 2b8573d22..1ee5db18b 100644
--- a/modules/preventivi/plugins/preventivi.consuntivo.php
+++ b/modules/preventivi/plugins/preventivi.consuntivo.php
@@ -64,15 +64,15 @@ if (!empty($rsi)) {
- '.Translator::numberToLocale($int['manodopera_costo']).'
+ '.Translator::numberToLocale($int['manodopera_costo'] + $int['viaggio_costo']).'
- '.Translator::numberToLocale($int['manodopera_addebito']).'
+ '.Translator::numberToLocale($int['manodopera_addebito'] + $int['viaggio_addebito']).'
- '.Translator::numberToLocale($int['manodopera_scontato']).'
+ '.Translator::numberToLocale($int['manodopera_scontato'] + $int['viaggio_scontato']).'
';
@@ -197,9 +197,9 @@ if (!empty($rsi)) {
$totale_ore += $int['ore'];
$totale_km += $int['km'];
- $totale_costo += $int['manodopera_costo'];
- $totale_addebito += $int['manodopera_addebito'];
- $totale_scontato += $int['manodopera_scontato'];
+ $totale_costo += $int['manodopera_costo'] + $int['viaggio_costo'];
+ $totale_addebito += $int['manodopera_addebito'] + $int['viaggio_addebito'];
+ $totale_scontato += $int['manodopera_scontato'] + $int['viaggio_scontato'];
}
// Totali
diff --git a/modules/stampe_contabili/edit.php b/modules/stampe_contabili/edit.php
new file mode 100644
index 000000000..1b5a3cf3c
--- /dev/null
+++ b/modules/stampe_contabili/edit.php
@@ -0,0 +1,26 @@
+
+
+
'.tr('Registri iva').'
+
+
+
+';
diff --git a/templates/registro_iva/logo_azienda.jpg b/templates/registro_iva/logo_azienda.jpg
new file mode 100644
index 000000000..3fd391452
Binary files /dev/null and b/templates/registro_iva/logo_azienda.jpg differ
diff --git a/templates/registro_iva/pdfgen.registro_iva.php b/templates/registro_iva/pdfgen.registro_iva.php
new file mode 100644
index 000000000..78c87ff04
--- /dev/null
+++ b/templates/registro_iva/pdfgen.registro_iva.php
@@ -0,0 +1,154 @@
+='".$date_start."' AND co_documenti.data<='".$date_end."' GROUP BY co_documenti.id, co_righe_documenti.idiva";
+} elseif ($dir == 'uscita') {
+ $query = "SELECT *, SUM(subtotale-co_righe_documenti.sconto) AS subtotale, SUM(iva) AS iva, (SELECT ragione_sociale FROM an_anagrafiche WHERE an_anagrafiche.idanagrafica=co_documenti.idanagrafica) AS ragione_sociale FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id=co_righe_documenti.iddocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE dir='uscita' AND co_documenti.data>='".$date_start."' AND co_documenti.data<='".$date_end."' GROUP BY co_documenti.id, co_righe_documenti.idiva";
+}
+
+$rs = $dbo->fetchArray($query);
+
+if ($dir == 'entrata') {
+ $body .= "REGISTRO IVA VENDITA ";
+} elseif ($dir == 'uscita') {
+ $body .= "REGISTRO IVA ACQUISTO ";
+}
+
+$body .= "
+
+
+
+
+ Prot.
+ Data
+ N° Documento
+ Causale Ragione sociale
+ Aliquota
+ Imponibile
+ Imposta
+
+
+ ";
+
+for ($i = 0; $i < sizeof($rs); ++$i) {
+ $body .= '';
+ if ($rs[$i]['numero'] == $rs[$i - 1]['numero']) {
+ $body .= " ";
+ $body .= " ";
+ } else {
+ $body .= " ".$rs[$i]['numero'].' ';
+ $body .= " ".date('d/m/Y', strtotime($rs[$i]['data'])).' ';
+ }
+ $body .= " ".$rs[$i]['numero_esterno'].' ';
+ if ($dir == 'entrata') {
+ $body .= "
+ Fattura di vendita
+ ".$rs[$i]['ragione_sociale'].'
+ ';
+ } elseif ($dir == 'uscita') {
+ $body .= "
+ Fattura di acquisto
+ ".$rs[$i]['ragione_sociale'].'
+ ';
+ }
+ $body .= " ".$rs[$i]['desc_iva'].' ';
+ $body .= " ".Translator::numberToLocale($rs[$i]['subtotale'], 2).' € ';
+ $body .= " ".Translator::numberToLocale($rs[$i]['iva'], 2).' € ';
+ $body .= ' ';
+
+ $v_iva[$rs[$i]['desc_iva']] += $rs[$i]['iva'];
+ $v_totale[$rs[$i]['desc_iva']] += $rs[$i]['subtotale'];
+
+ $totale_iva += $rs[$i]['iva'];
+ $totale_subtotale += $rs[$i]['subtotale'];
+}
+
+$body .= '
+
+ ';
+
+$body .= "RIEPILOGO IVA ";
+
+$body .= "
+
+
+
+ Cod. IVA
+ Imponibile
+ Imposta
+
+
+ ";
+
+foreach ($v_iva as $desc_iva => $tot_iva) {
+ if ($desc_iva != '') {
+ $body .= "\n";
+ $body .= $desc_iva."\n";
+ $body .= " \n";
+
+ $body .= "\n";
+ $body .= Translator::numberToLocale($v_totale[$desc_iva], 2)." €\n";
+ $body .= " \n";
+
+ $body .= "\n";
+ $body .= Translator::numberToLocale($v_iva[$desc_iva], 2)." €\n";
+ $body .= " \n";
+ }
+}
+
+$body .= "
+ TOTALE
+ ".Translator::numberToLocale($totale_subtotale, 2)." €
+ ".Translator::numberToLocale($totale_iva, 2).' €
+ ';
+
+$body .= '
+
+ ';
+
+$orientation = 'L';
+$report_name = 'registro_iva.pdf';
diff --git a/templates/registro_iva/registroiva.html b/templates/registro_iva/registroiva.html
new file mode 100644
index 000000000..c311fc99a
--- /dev/null
+++ b/templates/registro_iva/registroiva.html
@@ -0,0 +1,59 @@
+
+
+
+ $body$
+
diff --git a/templates/registro_iva/registroiva_body.html b/templates/registro_iva/registroiva_body.html
new file mode 100644
index 000000000..cf0eca607
--- /dev/null
+++ b/templates/registro_iva/registroiva_body.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+ $f_ragionesociale$
+
+ $f_indirizzo$
+ $f_citta$
+ $f_piva$
+ $f_codicefiscale$
+ $f_capsoc$
+ $f_telefono$
+
+
+
+
+
+
+
+
+
+
diff --git a/update/2_3.sql b/update/2_3.sql
index 6dd12cea7..acb2fc1b6 100644
--- a/update/2_3.sql
+++ b/update/2_3.sql
@@ -757,9 +757,6 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`,
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), '_link_record_', 'mg_movimenti.idarticolo', 7, 1, 0, 0, 1),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Movimenti'), '_link_hash_', 'CONCAT(\'tab_\', (SELECT `id` FROM `zz_plugins` WHERE `name` = \'Movimenti\' AND idmodule_to = (SELECT `id` FROM `zz_modules` WHERE `name` = \'Articoli\')))', 7, 1, 0, 0, 1);
--- Impostazione dei titoli di default
-UPDATE `zz_modules` SET `title` = `name` WHERE `title` = '';
-
-- Aggiunta del campo di dicitura fissa per la fatturazione
ALTER TABLE `co_iva` ADD `dicitura` varchar(255);
@@ -773,6 +770,11 @@ ALTER TABLE `an_anagrafiche` CHANGE `idlistino` `idlistino_vendite` int(11), ADD
UPDATE `an_anagrafiche` SET `idlistino_vendite` = NULL WHERE `idlistino_vendite` = 0;
UPDATE `an_anagrafiche` SET `idlistino_acquisti` = `idlistino_vendite` WHERE `idlistino_vendite` IS NOT NULL;
+-- Miglioramento della gestione dell'iva predefinita
+ALTER TABLE `an_anagrafiche` CHANGE `idiva` `idiva_vendite` int(11), ADD `idiva_acquisti` int(11) AFTER `idiva_vendite`;
+UPDATE `an_anagrafiche` SET `idiva_vendite` = NULL WHERE `idiva_vendite` = 0;
+UPDATE `an_anagrafiche` SET `idiva_acquisti` = `idiva_vendite` WHERE `idiva_vendite` IS NOT NULL;
+
-- Rimozione data_sla e ora_sla
ALTER TABLE `in_interventi` DROP `data_sla`, DROP `ora_sla`;
@@ -933,3 +935,10 @@ UPDATE `co_iva` SET `dicitura` = 'Operazione soggetta a reverse charge ex art. 1
-- Aggiunta campi in co_pagamenti per la selezione del conto di default
ALTER TABLE `co_pagamenti` ADD `idconto_vendite` int(11), ADD `idconto_acquisti` int(11);
+
+-- Aggiunta del modulo Stampe contabili
+INSERT INTO `zz_modules` (`id`, `name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Stampe contabili', 'stampe_contabili', 'custom', '', 'fa fa-angle-right', '2.3', '2.3', '1', 1, '1', '1');
+UPDATE `zz_modules` `t1` INNER JOIN `zz_modules` `t2` ON (`t1`.`name` = 'Stampe contabili' AND `t2`.`name` = 'Contabilità') SET `t1`.`parent` = `t2`.`id`;
+
+-- Impostazione dei titoli di default
+UPDATE `zz_modules` SET `title` = `name` WHERE `title` = '';