Skip to content

Commit ba32f64

Browse files
committed
fix: dicitura registrazione contabile da bulk
1 parent b6045bb commit ba32f64

1 file changed

Lines changed: 61 additions & 24 deletions

File tree

modules/primanota/add.php

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,10 @@
113113
}
114114

115115
// Fatture
116-
$numeri_fatture = [];
116+
$fatture_per_anagrafica = [];
117117
$counter = 0;
118-
$is_ultimo_importo_avere = false;
119118

120119
$id_documenti = array_unique($id_documenti);
121-
$id_anagrafica_movimenti = null;
122120
foreach ($id_documenti as $id_documento) {
123121
$fattura = Fattura::find($id_documento);
124122
$tipo = $fattura->tipo;
@@ -130,13 +128,7 @@
130128
continue;
131129
}
132130

133-
if ($id_anagrafica_movimenti == null) {
134-
$id_anagrafica_movimenti = $fattura->idanagrafica;
135-
} elseif ($fattura->idanagrafica != $id_anagrafica_movimenti) {
136-
$id_anagrafica_movimenti = 0;
137-
}
138-
139-
$numeri_fatture[] = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'];
131+
$numero_fattura_str = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'];
140132

141133
$is_nota_credito = $tipo->reversed;
142134
$is_importo_avere = ($dir == 'entrata' && !$is_nota_credito && !$is_insoluto) || ($dir == 'uscita' && ($is_nota_credito || $is_insoluto));
@@ -158,6 +150,23 @@
158150
$scadenze = [$scadenze[0]];
159151
}
160152

153+
// Raggruppamento fatture per direzione e anagrafica - solo se ci sono scadenze selezionate
154+
if (!empty($scadenze)) {
155+
$chiave_anagrafica = $dir.'_'.$fattura->idanagrafica;
156+
if (!isset($fatture_per_anagrafica[$chiave_anagrafica])) {
157+
$fatture_per_anagrafica[$chiave_anagrafica] = [
158+
'ragione_sociale' => $fattura->anagrafica['ragione_sociale'],
159+
'direzione' => $dir,
160+
'numeri' => [],
161+
];
162+
}
163+
164+
// Aggiungi il numero di fattura solo se non è già presente
165+
if (!in_array($numero_fattura_str, $fatture_per_anagrafica[$chiave_anagrafica]['numeri'])) {
166+
$fatture_per_anagrafica[$chiave_anagrafica]['numeri'][] = $numero_fattura_str;
167+
}
168+
}
169+
161170
$righe_documento = [];
162171

163172
// Riga controparte
@@ -190,7 +199,6 @@
190199
'avere' => $is_importo_avere ? 0 : $totale,
191200
];
192201

193-
$is_ultimo_importo_avere = $is_importo_avere;
194202
$movimenti = array_merge($movimenti, $righe_documento);
195203
}
196204

@@ -207,19 +215,48 @@
207215
$numero_scadenze = count($id_scadenze);
208216
$numero_documenti = count($id_documenti);
209217
if ($numero_documenti + $numero_scadenze > 1) {
210-
if (!empty($id_anagrafica_movimenti)) {
211-
$anagrafica_movimenti = Anagrafica::find($id_anagrafica_movimenti);
212-
213-
$descrizione = $is_ultimo_importo_avere ? tr('Inc. fatture _NAME_ num. _LIST_') : tr('Pag. fatture _NAME_ num. _LIST_');
214-
$descrizione = replace($descrizione, [
215-
'_NAME_' => $anagrafica_movimenti->ragione_sociale ?: '',
216-
'_LIST_' => implode(', ', $numeri_fatture),
217-
]);
218+
// Conta quante anagrafiche diverse ci sono
219+
$anagrafiche_diverse = count($fatture_per_anagrafica);
220+
221+
if ($anagrafiche_diverse == 1) {
222+
// Una sola anagrafica - estrai i dati
223+
$dati_unica = reset($fatture_per_anagrafica);
224+
225+
// Estrai l'ID anagrafica dalla chiave (formato: direzione_idanagrafica)
226+
$chiave_unica = array_key_first($fatture_per_anagrafica);
227+
$id_anagrafica_unica = (int) substr($chiave_unica, strpos($chiave_unica, '_') + 1);
228+
$anagrafica_movimenti = Anagrafica::find($id_anagrafica_unica);
229+
230+
$numeri_ordinati = $dati_unica['numeri'];
231+
sort($numeri_ordinati);
232+
233+
$operazione = ($dati_unica['direzione'] == 'entrata') ? tr('Inc.') : tr('Pag.');
234+
$descrizione = $operazione.' fatture '.$anagrafica_movimenti->ragione_sociale.' num. '.implode(', ', $numeri_ordinati);
218235
} else {
219-
$descrizione = $is_ultimo_importo_avere ? tr('Inc. fatture num. _LIST_') : tr('Pag. fatture num. _LIST_');
220-
$descrizione = replace($descrizione, [
221-
'_LIST_' => implode(', ', $numeri_fatture),
222-
]);
236+
// Fatture di più fornitori/clienti o più direzioni - raggruppare per direzione, anagrafica e numero
237+
$descrizione_parti = [];
238+
239+
// Ordina per direzione: prima 'uscita' (Pag.), poi 'entrata' (Inc.)
240+
$direzioni_ordinate = ['uscita', 'entrata'];
241+
242+
foreach ($direzioni_ordinate as $dir_ordinata) {
243+
$parti_per_dir = [];
244+
245+
foreach ($fatture_per_anagrafica as $dati) {
246+
if ($dati['direzione'] === $dir_ordinata) {
247+
$numeri_ordinati = $dati['numeri'];
248+
sort($numeri_ordinati);
249+
$parti_per_dir[] = $dati['ragione_sociale'].': '.implode(', ', $numeri_ordinati);
250+
}
251+
}
252+
253+
if (!empty($parti_per_dir)) {
254+
$operazione = ($dir_ordinata == 'entrata') ? tr('Inc.') : tr('Pag.');
255+
$descrizione_parti[] = $operazione.' fatture '.implode('; ', $parti_per_dir);
256+
}
257+
}
258+
259+
$descrizione = implode(' - ', $descrizione_parti);
223260
}
224261
} elseif ($numero_documenti == 1) {
225262
$numero_fattura = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'];
@@ -228,7 +265,7 @@
228265
if (!empty($is_insoluto)) {
229266
$operation = tr('Registrazione insoluto');
230267
} else {
231-
$operation = $is_ultimo_importo_avere ? tr('Inc.') : tr('Pag.');
268+
$operation = $dir == 'entrata' ? tr('Inc.') : tr('Pag.');
232269
}
233270

234271
$descrizione = tr('_OP_ _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [

0 commit comments

Comments
 (0)