diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index f8e557d9e..0cd85c649 100755
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -89,7 +89,8 @@ switch (post('op')) {
$fattura->idanagrafica = post('idanagrafica');
$fattura->idagente = post('idagente');
$fattura->idpagamento = post('idpagamento');
- $fattura->idbanca = post('idbanca');
+ $fattura->id_banca_azienda = post('id_banca_azienda');
+ $fattura->id_banca_controparte = post('id_banca_controparte');
$fattura->idcausalet = post('idcausalet');
$fattura->idspedizione = post('idspedizione');
$fattura->idporto = post('idporto');
@@ -753,7 +754,8 @@ switch (post('op')) {
$nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento;
- $nota->idbanca = $fattura->idbanca;
+ $nota->id_banca_azienda = $fattura->id_banca_azienda;
+ $nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->split_payment = $fattura->split_payment;
@@ -809,7 +811,8 @@ if (get('op') == 'nota_addebito') {
$nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento;
- $nota->idbanca = $fattura->idbanca;
+ $nota->id_banca_azienda = $fattura->id_banca_azienda;
+ $nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->save();
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php
index 0c690cd50..6b7e5c878 100755
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -268,11 +268,11 @@ elseif ($record['stato'] == 'Bozza') {
- {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#idbanca').val($(this).selectData().id_banca_).change(); \" " ]}
+ {[ "type": "select", "label": "", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#id_banca_azienda').val($(this).selectData().id_banca_).change(); \" " ]}
- {[ "type": "select", "label": "", "name": "idbanca", "ajax-source": "banche", "select-options": $anagrafica_azienda->id]); ?>, "value": "$idbanca$", "icon-after": "add|||", "extra": " " ]}
+ {[ "type": "select", "label": "", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|||", "extra": " " ]}
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index c21318877..e470cdde9 100755
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -88,14 +88,14 @@ class Fattura extends Document
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null)
{
$model = parent::build();
-
$user = Auth::user();
+ $database = database();
+ // Individuazione dello stato predefinito per il documento
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
$direzione = $tipo_documento->dir;
- $database = database();
-
+ // Conto predefinito sulla base del flusso di denaro
if ($direzione == 'entrata') {
$id_conto = setting('Conto predefinito fatture di vendita');
$conto = 'vendite';
@@ -104,6 +104,7 @@ class Fattura extends Document
$conto = 'acquisti';
}
+ // Informazioni di base
$model->anagrafica()->associate($anagrafica);
$model->tipo()->associate($tipo_documento);
$model->stato()->associate($stato_documento);
@@ -115,55 +116,62 @@ class Fattura extends Document
$model->data_registrazione = $data;
$model->data_competenza = $data;
$model->id_segment = $id_segment;
+ $model->idconto = $id_conto;
if ($numero_esterno) {
$model->numero_esterno = $numero_esterno;
}
- $model->idconto = $id_conto;
-
- // Imposto, come sede aziendale, la prima sede disponibile come utente
+ // Sede aziendale scelta tra le sedi disponibili per l'utente
+ $id_sede = $user->sedi[0];
if ($direzione == 'entrata') {
- $model->idsede_destinazione = $user->sedi[0];
+ $model->idsede_destinazione = $id_sede;
} else {
- $model->idsede_partenza = $user->sedi[0];
+ $model->idsede_partenza = $id_sede;
}
+
+ // Gestione della marca da bollo predefinita
$model->addebita_bollo = setting('Addebita marca da bollo al cliente');
+ // Ritenuta contributi predefinita
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null;
$model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null;
- // Tipo di pagamento e banca predefinite dall'anagrafica
+ // Banca predefinita per l'anagrafica controparte
+ $model->id_banca_controparte = $anagrafica->{'idbanca_'.$conto};
+
+ // Tipo di pagamento dall'anagrafica controparte
$id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [
':id_pagamento' => $anagrafica->{'idpagamento_'.$conto},
])['id'];
- $id_banca = $anagrafica->{'idbanca_'.$conto};
- // Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni
+ // Per Fatture di Vendita senza pagamento predefinito per il Cliente, si utilizza il pagamento predefinito dalle Impostazioni
if ($direzione == 'entrata' && empty($id_pagamento)) {
$id_pagamento = setting('Tipo di pagamento predefinito');
}
- // Se non è impostata la banca dell'anagrafica, uso quella del pagamento.
- if (empty($id_banca)) {
- $id_banca = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento)', [
- ':id_pagamento' => $id_pagamento,
- ])['id'];
- }
-
+ // Salvataggio del pagamento
if (!empty($id_pagamento)) {
$model->idpagamento = $id_pagamento;
}
- if (!empty($id_banca)) {
- $model->idbanca = $id_banca;
- }
- // Split Payment
+ // Banca predefinita per l'azienda, con ricerca della banca impostata per il pagamento
+ $azienda = Anagrafica::find(setting('Azienda predefinita'));
+ $id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [
+ ':id_pagamento' => $id_pagamento,
+ ':id_anagrafica' => $azienda->id,
+ ])['id'];
+ if (empty($id_banca_azienda)) {
+ $id_banca_azienda = $azienda->{'idbanca_'.$conto};
+ }
+ $model->id_banca_azienda = $id_banca_azienda;
+
+ // Gestione dello Split Payment sulla base dell'anagrafica Controparte
$split_payment = $anagrafica->split_payment;
if (!empty($split_payment)) {
$model->split_payment = $split_payment;
}
- // Dichiarazione d'Intento
+ // Gestione della Dichiarazione d'Intento associata all'anargafica Controparte
$now = new Carbon();
$dichiarazione = $anagrafica->dichiarazioni()
->where('massimale', '>', 'totale')
@@ -173,6 +181,7 @@ class Fattura extends Document
if (!empty($dichiarazione)) {
$model->dichiarazione()->associate($dichiarazione);
+ // Registrazione dell'operazione nelle note
$model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [
'_PROT_' => $dichiarazione->numero_protocollo,
'_PROT_DATE_' => $dichiarazione->data_protocollo,
@@ -644,7 +653,7 @@ class Fattura extends Document
if ($riba['riba'] == 1) {
$id_banca = $this->anagrafica->idbanca_vendite;
} else {
- $id_banca = $this->idbanca;
+ $id_banca = $this->id_banca_azienda;
}
$result = Banca::find($id_banca);
diff --git a/templates/fatture/init.php b/templates/fatture/init.php
index ba71b5885..36d7297c4 100755
--- a/templates/fatture/init.php
+++ b/templates/fatture/init.php
@@ -35,7 +35,7 @@ $record = $dbo->fetchOne('SELECT *,
(SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni,
(SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore,
- (SELECT id FROM co_banche WHERE id=idbanca) AS id_banca,
+ (SELECT id FROM co_banche WHERE id = id_banca_azienda) AS id_banca,
(SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale
FROM co_documenti WHERE id='.prepare($id_record));
diff --git a/update/2_4_18.sql b/update/2_4_18.sql
index d04283a69..3d476fc78 100644
--- a/update/2_4_18.sql
+++ b/update/2_4_18.sql
@@ -201,3 +201,18 @@ UPDATE `an_anagrafiche` SET `idbanca_vendite` = (SELECT `id` FROM `co_banche` WH
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_banche` INNER JOIN an_anagrafiche ON `an_anagrafiche`.`idanagrafica` = `co_banche`.`id_anagrafica` WHERE 1=1 AND `co_banche`.`deleted_at` IS NULL AND `an_anagrafiche`.`deleted_at` IS NULL HAVING 2=2' WHERE `name` = 'Banche';
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `visible`, `summable`, `default`) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche'), 'Anagrafica', 'an_anagrafiche.ragione_sociale', 0, 1, 0, 0, 1, 0, 1);
+
+-- Campo id_banca_controparte e id_banca_azienda per i Documenti
+ALTER TABLE `co_documenti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
+ALTER TABLE `co_preventivi` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
+ALTER TABLE `co_contratti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
+ALTER TABLE `dt_ddt` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
+ALTER TABLE `or_ordini` ADD `id_banca_controparte` INT(11) NOT NULL AFTER `idpagamento`;
+
+ALTER TABLE `co_documenti` CHANGE `idbanca` `id_banca_azienda` INT(11) AFTER `idpagamento`;
+ALTER TABLE `co_preventivi` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
+ALTER TABLE `co_contratti` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
+ALTER TABLE `dt_ddt` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
+ALTER TABLE `or_ordini` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
+
+UPDATE `co_documenti` SET `id_banca_azienda` = NULL WHERE `id_banca_azienda` = 0;