@@ -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}
0 commit comments