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