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;