Skip to content

Commit 69fa5a1

Browse files
committed
fix: selezione banca
1 parent ecdaf12 commit 69fa5a1

5 files changed

Lines changed: 67 additions & 2 deletions

File tree

modules/fatture/src/Fattura.php

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ public function getBanca()
842842
$pagamento = $this->pagamento;
843843

844844
if ($pagamento->isRiBa()) {
845-
$banca = Banca::find($this->id_banca_controparte) ?: Banca::where('id_anagrafica', $this->idanagrafica)->where('predefined', 1)->first();
845+
$banca = Banca::find($this->id_banca_controparte) ?: Banca::where('id_anagrafica', $this->idanagrafica)->where('predefined', 1)->whereNull('deleted_at')->first();
846846
} else {
847847
$banca = Banca::find($this->id_banca_azienda);
848848
}
@@ -1040,4 +1040,65 @@ public function getTotaleCSVAttribute()
10401040
return $totale;
10411041
}
10421042
}
1043+
1044+
// Metodi statici
1045+
1046+
/**
1047+
* Determina la banca dell'azienda da utilizzare per il documento.
1048+
*/
1049+
private static function getBancaAzienda(Anagrafica $azienda, int $id_pagamento, string $conto, string $direzione, Anagrafica $anagrafica_controparte): ?int
1050+
{
1051+
$database = database();
1052+
1053+
// Per le fatture di vendita, priorità alla banca dell'azienda
1054+
// Per le fatture di acquisto, priorità alla banca del fornitore
1055+
$anagrafica_principale = ($direzione == 'entrata') ? $azienda : $anagrafica_controparte;
1056+
1057+
// 1. Banca predefinita dell'anagrafica principale per il tipo di operazione
1058+
$id_banca = $anagrafica_principale->{"idbanca_{$conto}"};
1059+
1060+
// 2. Banca dell'azienda con conto corrispondente al tipo di pagamento (predefinita)
1061+
if (empty($id_banca)) {
1062+
$id_banca = self::getBancaByPagamento($database, $azienda->id, $id_pagamento, $conto, true);
1063+
}
1064+
1065+
// 3. Banca dell'azienda con conto corrispondente al tipo di pagamento (qualsiasi)
1066+
if (empty($id_banca)) {
1067+
$id_banca = self::getBancaByPagamento($database, $azienda->id, $id_pagamento, $conto, false);
1068+
}
1069+
1070+
// 4. Fallback: banca predefinita dell'azienda
1071+
if (empty($id_banca)) {
1072+
$banca_predefinita = Banca::where('id_anagrafica', $azienda->id)
1073+
->where('predefined', 1)
1074+
->whereNull('deleted_at')
1075+
->first();
1076+
$id_banca = $banca_predefinita?->id;
1077+
}
1078+
1079+
return $id_banca;
1080+
}
1081+
1082+
/**
1083+
* Cerca una banca dell'azienda associata al tipo di pagamento.
1084+
*
1085+
* @param object $database
1086+
*/
1087+
private static function getBancaByPagamento($database, int $id_anagrafica, int $id_pagamento, string $conto, bool $solo_predefinita): ?int
1088+
{
1089+
$where_predefined = $solo_predefinita ? 'AND `predefined`=1' : '';
1090+
1091+
$query = "SELECT `id` FROM `co_banche`
1092+
WHERE `deleted_at` IS NULL
1093+
{$where_predefined}
1094+
AND `id_pianodeiconti3` = (SELECT idconto_{$conto} FROM `co_pagamenti` WHERE `id` = :id_pagamento)
1095+
AND `id_anagrafica` = :id_anagrafica";
1096+
1097+
$result = $database->fetchOne($query, [
1098+
':id_pagamento' => $id_pagamento,
1099+
':id_anagrafica' => $id_anagrafica,
1100+
]);
1101+
1102+
return $result['id'] ?? null;
1103+
}
10431104
}

modules/preventivi/src/Preventivo.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ public function getBanca()
236236
$pagamento = $this->pagamento;
237237

238238
if ($pagamento && $pagamento->isRiBa()) {
239-
$banca = \Modules\Banche\Banca::find($this->id_banca_controparte) ?: \Modules\Banche\Banca::where('id_anagrafica', $this->idanagrafica)->where('predefined', 1)->first();
239+
$banca = \Modules\Banche\Banca::find($this->id_banca_controparte) ?: \Modules\Banche\Banca::where('id_anagrafica', $this->idanagrafica)->where('predefined', 1)->whereNull('deleted_at')->first();
240240
} else {
241241
$banca = \Modules\Banche\Banca::find($this->id_banca_azienda);
242242
}

plugins/presentazioni_bancarie/edit.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
} else {
1313
$banca_azienda = Banca::where('id_anagrafica', Gestore::getAzienda()->id)
1414
->where('predefined', 1)
15+
->whereNull('deleted_at')
1516
->first();
1617

1718
try {

plugins/presentazioni_bancarie/src/Gestore.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ public static function getBancaControparte(Scadenza $scadenza): ?Banca
423423
if (empty($banca_controparte)) {
424424
$banca_controparte = Banca::where('id_anagrafica', $scadenza->idanagrafica)
425425
->where('predefined', 1)
426+
->whereNull('deleted_at')
426427
->first();
427428
}
428429

@@ -449,6 +450,7 @@ public static function getBancaPredefinitaAzienda(): Banca
449450
if (!isset(self::$banca_predefinita_azienda)) {
450451
self::$banca_predefinita_azienda = Banca::where('id_anagrafica', self::getAzienda()->id)
451452
->where('predefined', 1)
453+
->whereNull('deleted_at')
452454
->first();
453455
}
454456

templates/azienda/body.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
$banca = Banca::where('id_anagrafica', $anagrafica->idanagrafica)
2626
->where('predefined', 1)
27+
->whereNull('deleted_at')
2728
->first();
2829

2930
/*

0 commit comments

Comments
 (0)