Skip to content

Commit cb2c669

Browse files
committed
fix: selezione banca in aggiunta documenti
1 parent 9e588df commit cb2c669

1 file changed

Lines changed: 75 additions & 24 deletions

File tree

modules/fatture/src/Fattura.php

Lines changed: 75 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -161,30 +161,11 @@ public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data
161161
$model->idpagamento = $id_pagamento;
162162

163163
// Banca predefinita per l'azienda, con ricerca della banca impostata per il pagamento
164-
$id_banca_azienda = $anagrafica->{'idbanca_'.$conto};
165-
if (empty($id_banca_azienda)) {
166-
$azienda = Anagrafica::find(setting('Azienda predefinita'));
167-
$id_banca_azienda = $database->fetchOne('SELECT `id` FROM `co_banche` WHERE `deleted_at` IS NULL AND `predefined`=1 AND `id_pianodeiconti3` = (SELECT idconto_'.$conto.' FROM `co_pagamenti` WHERE `id` = :id_pagamento) AND `id_anagrafica` = :id_anagrafica', [
168-
':id_pagamento' => $id_pagamento,
169-
':id_anagrafica' => $azienda->id,
170-
])['id'];
171-
if (empty($id_banca_azienda)) {
172-
$id_banca_azienda = $database->fetchOne('SELECT `id` FROM `co_banche` WHERE `deleted_at` IS NULL AND `id_pianodeiconti3` = (SELECT idconto_'.$conto.' FROM `co_pagamenti` WHERE `id` = :id_pagamento) AND `id_anagrafica` = :id_anagrafica', [
173-
':id_pagamento' => $id_pagamento,
174-
':id_anagrafica' => $azienda->id,
175-
])['id'];
176-
}
177-
if (empty($id_banca_azienda)) {
178-
$id_banca_azienda = $azienda->{'idbanca_'.$conto};
179-
}
180-
// Fallback finale: banca predefinita dell'azienda
181-
if (empty($id_banca_azienda)) {
182-
$banca_predefinita_azienda = Banca::where('id_anagrafica', $azienda->id)
183-
->where('predefined', 1)
184-
->first();
185-
$id_banca_azienda = $banca_predefinita_azienda?->id;
186-
}
187-
}
164+
$id_banca_azienda = null;
165+
$azienda = Anagrafica::find(setting('Azienda predefinita'));
166+
167+
// Logica unificata per la ricerca della banca dell'azienda
168+
$id_banca_azienda = self::getBancaAzienda($azienda, $id_pagamento, $conto, $direzione, $anagrafica);
188169

189170
$model->id_banca_azienda = $id_banca_azienda;
190171

@@ -871,6 +852,76 @@ public function getBanca()
871852

872853
// Metodi statici
873854

855+
/**
856+
* Determina la banca dell'azienda da utilizzare per il documento.
857+
*
858+
* @param Anagrafica $azienda
859+
* @param int $id_pagamento
860+
* @param string $conto
861+
* @param string $direzione
862+
* @param Anagrafica $anagrafica_controparte
863+
* @return int|null
864+
*/
865+
private static function getBancaAzienda(Anagrafica $azienda, int $id_pagamento, string $conto, string $direzione, Anagrafica $anagrafica_controparte): ?int
866+
{
867+
$database = database();
868+
869+
// Per le fatture di vendita, priorità alla banca dell'azienda
870+
// Per le fatture di acquisto, priorità alla banca del fornitore
871+
$anagrafica_principale = ($direzione == 'entrata') ? $azienda : $anagrafica_controparte;
872+
873+
// 1. Banca predefinita dell'anagrafica principale per il tipo di operazione
874+
$id_banca = $anagrafica_principale->{"idbanca_{$conto}"};
875+
876+
// 2. Banca dell'azienda con conto corrispondente al tipo di pagamento (predefinita)
877+
if (empty($id_banca)) {
878+
$id_banca = self::getBancaByPagamento($database, $azienda->id, $id_pagamento, $conto, true);
879+
}
880+
881+
// 3. Banca dell'azienda con conto corrispondente al tipo di pagamento (qualsiasi)
882+
if (empty($id_banca)) {
883+
$id_banca = self::getBancaByPagamento($database, $azienda->id, $id_pagamento, $conto, false);
884+
}
885+
886+
// 4. Fallback: banca predefinita dell'azienda
887+
if (empty($id_banca)) {
888+
$banca_predefinita = Banca::where('id_anagrafica', $azienda->id)
889+
->where('predefined', 1)
890+
->first();
891+
$id_banca = $banca_predefinita?->id;
892+
}
893+
894+
return $id_banca;
895+
}
896+
897+
/**
898+
* Cerca una banca dell'azienda associata al tipo di pagamento.
899+
*
900+
* @param object $database
901+
* @param int $id_anagrafica
902+
* @param int $id_pagamento
903+
* @param string $conto
904+
* @param bool $solo_predefinita
905+
* @return int|null
906+
*/
907+
private static function getBancaByPagamento($database, int $id_anagrafica, int $id_pagamento, string $conto, bool $solo_predefinita): ?int
908+
{
909+
$where_predefined = $solo_predefinita ? 'AND `predefined`=1' : '';
910+
911+
$query = "SELECT `id` FROM `co_banche`
912+
WHERE `deleted_at` IS NULL
913+
{$where_predefined}
914+
AND `id_pianodeiconti3` = (SELECT idconto_{$conto} FROM `co_pagamenti` WHERE `id` = :id_pagamento)
915+
AND `id_anagrafica` = :id_anagrafica";
916+
917+
$result = $database->fetchOne($query, [
918+
':id_pagamento' => $id_pagamento,
919+
':id_anagrafica' => $id_anagrafica,
920+
]);
921+
922+
return $result['id'] ?? null;
923+
}
924+
874925
/**
875926
* Calcola il nuovo numero di fattura.
876927
*

0 commit comments

Comments
 (0)