diff --git a/include/src/Components/Row.php b/include/src/Components/Row.php index 6130624c4..374d08b9a 100644 --- a/include/src/Components/Row.php +++ b/include/src/Components/Row.php @@ -56,8 +56,12 @@ abstract class Row extends Description } public function getNettoAttribute() - { - return $this->totale - $this->ritenuta_acconto; + { + + if ($this->split_payment) + return $this->totale - $this->ritenuta_acconto - $this->iva; + else + return $this->totale - $this->ritenuta_acconto; } public function getRivalsaINPSAttribute() @@ -82,6 +86,14 @@ abstract class Row extends Description ])['percentuale']; return ($this->imponibile_scontato + $this->rivalsa_inps) * $percentuale / 100; + } + + public function getSplitPaymentAttribute() + { + return database()->fetchOne('SELECT split_payment FROM co_documenti WHERE id = :id', [ + ':id' => $this->iddocumento, + ])['split_payment']; + } public function getIvaDetraibileAttribute() diff --git a/include/src/Document.php b/include/src/Document.php index faa99cb0c..e781629ae 100644 --- a/include/src/Document.php +++ b/include/src/Document.php @@ -143,7 +143,7 @@ abstract class Document extends Model } /** - * Calcola il netto a pagare della fattura. + * Calcola il guadagno della fattura. * * @return float */ diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index eef8cc7d5..6002132e5 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -80,6 +80,7 @@ switch (post('op')) { 'idvettore' => post('idvettore'), 'idsede' => post('idsede'), 'idconto' => post('idconto'), + 'split_payment' => post('split_payment'), 'n_colli' => post('n_colli'), 'tipo_resa' => post('tipo_resa'), diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 59456d389..8808f4350 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -106,7 +106,13 @@ if (empty($record['is_fiscale'])) {
+ {[ "type": "select", "label": "", "name": "codice_stato_fe", "required": 0, "values": "query=SELECT codice as id, descrizione as text FROM fe_stati_documento", "value": "$codice_stato_fe$", "disabled": , "class": "unblockable" ]} +
@@ -168,9 +174,37 @@ if (empty($record['is_fiscale'])) {
- {[ "type": "select", "label": "", "name": "idbanca", "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$", "icon-after": "add|" ]} + {[ "type": "select", "label": "", "name": "idbanca", "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$", "icon-after": "add|||", "extra": " " ]}
+ +
+
+fetchNum('SELECT id FROM co_movimenti WHERE iddocumento='.prepare($id_record).' AND primanota=1'); + + $rs3 = $dbo->fetchArray('SELECT SUM(da_pagare-pagato) AS differenza, SUM(da_pagare) FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($id_record)); + $differenza = isset($rs3[0]) ? $rs3[0]['differenza'] : null; + $da_pagare = isset($rs3[0]) ? $rs3[0]['da_pagare'] : null; + + if (($n2 <= 0 && $record['stato'] == 'Emessa') || $differenza != 0) { + ?> + ...

+ + ... + + +
- - -
-fetchNum('SELECT id FROM co_movimenti WHERE iddocumento='.prepare($id_record).' AND primanota=1'); - - $rs3 = $dbo->fetchArray('SELECT SUM(da_pagare-pagato) AS differenza, SUM(da_pagare) FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($id_record)); - $differenza = isset($rs3[0]) ? $rs3[0]['differenza'] : null; - $da_pagare = isset($rs3[0]) ? $rs3[0]['da_pagare'] : null; - - if (($n2 <= 0 && $record['stato'] == 'Emessa') || $differenza != 0) { - ?> - ...

- - ... - -
-
+
+
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]} + {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
+ +
+ {[ "type": "checkbox", "label": "", "name": "split_payment", "value": "$split_payment$", "help": "", "placeholder": "", "extra" : "" ]} +
+ +
diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 3e9eb2ad6..10b9c1a3e 100755 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -228,13 +228,14 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) $dbo = database(); // Totale marca da bollo, inps, ritenuta, idagente - $query = 'SELECT data, bollo, ritenutaacconto, rivalsainps FROM co_documenti WHERE id='.prepare($iddocumento); + $query = 'SELECT data, bollo, ritenutaacconto, rivalsainps, split_payment FROM co_documenti WHERE id='.prepare($iddocumento); $rs = $dbo->fetchArray($query); $totale_bolli = $rs[0]['bollo']; $totale_ritenutaacconto = $rs[0]['ritenutaacconto']; $totale_rivalsainps = $rs[0]['rivalsainps']; $data_documento = $rs[0]['data']; - + $split_payment = $rs[0]['split_payment']; + $netto_fattura = get_netto_fattura($iddocumento); $totale_fattura = get_totale_fattura($iddocumento); $imponibile_fattura = get_imponibile_fattura($iddocumento); @@ -333,7 +334,13 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) 6) eventuale marca da bollo */ // 1) Aggiungo la riga del conto cliente - $query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_fattura + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )'; + $importo_cliente = $totale_fattura; + + if( $split_payment ){ + $importo_cliente = sum ($importo_cliente, -$iva_fattura, 2); + } + + $query2 = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($importo_cliente + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )'; $dbo->query($query2); // 2) Aggiungo il totale sul conto dei ricavi/spese scelto @@ -350,7 +357,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) // 3) Aggiungo il totale sul conto dell'iva // Lettura id conto iva - if ($iva_fattura != 0) { + if ($iva_fattura != 0 && !$split_payment) { $descrizione_conto_iva = ($dir == 'entrata') ? 'Iva su vendite' : 'Iva su acquisti'; $query = 'SELECT id, descrizione FROM co_pianodeiconti3 WHERE descrizione='.prepare($descrizione_conto_iva); $rs = $dbo->fetchArray($query); @@ -362,7 +369,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) } // Lettura id conto iva indetraibile - if ($iva_indetraibile_fattura != 0) { + if ($iva_indetraibile_fattura != 0 && !$split_payment) { $descrizione_conto_iva2 = 'Iva indetraibile'; $query = 'SELECT id, descrizione FROM co_pianodeiconti3 WHERE descrizione='.prepare($descrizione_conto_iva2); $rs = $dbo->fetchArray($query); @@ -485,7 +492,7 @@ function get_netto_fattura($iddocumento) { $dbo = database(); - $query = 'SELECT ritenutaacconto, bollo FROM co_documenti WHERE id='.prepare($iddocumento); + $query = 'SELECT ritenutaacconto, bollo, split_payment FROM co_documenti WHERE id='.prepare($iddocumento); $rs = $dbo->fetchArray($query); $netto_a_pagare = sum([ @@ -493,6 +500,10 @@ function get_netto_fattura($iddocumento) $rs[0]['bollo'], -$rs[0]['ritenutaacconto'], ], null, 2); + + if ($rs[0]['split_payment']){ + $netto_a_pagare = sum($netto_a_pagare, - (get_ivadetraibile_fattura($iddocumento) + get_ivaindetraibile_fattura($iddocumento)), 2 ); + } return $netto_a_pagare; } diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 8497a669a..c67513e96 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -322,8 +322,13 @@ if (!empty($fattura->rivalsa_inps)) { if (!empty($iva)) { echo ' - - '.tr('Iva', [], ['upper' => true]).': + '; + + if ($records[0]['split_payment']) + echo ''.tr('Iva a carico del destinatario', [], ['upper' => true]).':'; + else + echo ''.tr('Iva', [], ['upper' => true]).':'; + echo ' '.Translator::numberToLocale($iva).' € diff --git a/templates/fatture/footer.php b/templates/fatture/footer.php index e0180e63f..c2b1acfbe 100644 --- a/templates/fatture/footer.php +++ b/templates/fatture/footer.php @@ -160,7 +160,7 @@ echo " // Aggiunta della marca da bollo al totale $totale = sum($totale, $record['bollo']); -// Rivalsa INPS +// Rivalsa INPS (+ bollo) if (!empty($record['rivalsainps'])) { $rs2 = $dbo->fetchArray('SELECT percentuale FROM co_rivalsainps WHERE id=(SELECT idrivalsainps FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idrivalsainps!=0 LIMIT 0,1)'); @@ -218,8 +218,8 @@ if (!empty($record['rivalsainps'])) { '; } -// Ritenuta d'acconto -if ($record['ritenutaacconto'] != 0) { +// Ritenuta d'acconto ( + bollo, se no rivalsa inps) +if (!empty($record['ritenutaacconto']) or (!empty($record['spit_payment']))) { $rs2 = $dbo->fetchArray('SELECT percentuale FROM co_ritenutaacconto WHERE id=(SELECT idritenutaacconto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idritenutaacconto!=0 LIMIT 0,1)'); $first_colspan = 3; @@ -248,11 +248,22 @@ if ($record['ritenutaacconto'] != 0) { '; } + + + echo ' + '; + if (empty($record['split_payment'])) { + echo tr('Netto a pagare', [], ['upper' => true]); + }else{ + echo tr('Totale', [], ['upper' => true]); + } echo ' - - '.tr('Netto a pagare', [], ['upper' => true]).' - - + '; + + + + echo' + @@ -275,7 +286,43 @@ if ($record['ritenutaacconto'] != 0) { '; } -if (empty($record['ritenutaacconto']) && empty($record['rivalsainps']) && abs($record['bollo']) > 0) { + +// Split payment +if (!empty($record['split_payment'])) { + + $first_colspan = 1; + $second_colspan = 2; + + echo ' + + + '.tr('iva a carico del destinatario', [], ['upper' => true]).' + + + + '.tr('Netto a pagare', [], ['upper' => true]).' + + '; + + echo ' + + + '.Translator::numberToLocale($totale_iva).' € + + + + '.Translator::numberToLocale($totale - $totale_iva -$record['ritenutaacconto']).' € + + '; + + +} + + + + +// Solo bollo +if (empty($record['ritenutaacconto']) && empty($record['rivalsainps']) && empty($record['split_payment']) && abs($record['bollo']) > 0) { $first_colspan = 3; $second_colspan = 2; if (empty($sconto)) { diff --git a/update/2_4_5.sql b/update/2_4_5.sql index 1b178345d..a1505a4c4 100644 --- a/update/2_4_5.sql +++ b/update/2_4_5.sql @@ -21,4 +21,8 @@ INSERT INTO `fe_stati_documento`( `codice`, `descrizione`, `icon` ) VALUES ( 'NS', 'Scartata', 'fa fa-times text-danger' ); -- ssl_no_verify -ALTER TABLE `zz_smtps` ADD `ssl_no_verify` BOOLEAN NOT NULL DEFAULT FALSE AFTER `encryption`; \ No newline at end of file +ALTER TABLE `zz_smtps` ADD `ssl_no_verify` BOOLEAN NOT NULL DEFAULT FALSE AFTER `encryption`; + + +-- Introduzione del flag split payment per documenti +ALTER TABLE `co_documenti` ADD `split_payment` BOOLEAN NOT NULL DEFAULT FALSE AFTER `bollo`; \ No newline at end of file