Skip to content

Commit 7728dba

Browse files
committed
refactor: associazione articolo in fase di importazione fattura di acquisto
1 parent 731dc5a commit 7728dba

4 files changed

Lines changed: 46 additions & 62 deletions

File tree

plugins/importFE/actions.php

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,7 @@
428428
}
429429

430430
if (empty($id_articolo)) {
431-
$id_articolo = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE `codice` = '.prepare($codice['CodiceValore']).' AND `deleted_at` IS NULL')['id'];
432-
433-
if (empty($id_articolo)) {
434-
$id_articolo = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE REPLACE(`codice`, " ", "") = '.prepare($codice['CodiceValore']).' AND `deleted_at` IS NULL')['id'];
435-
}
436-
437-
// Controllo se esistono articoli con barcode corrispondente al codice
438-
if (empty($id_articolo)) {
439-
$id_articolo = $database->fetchOne('SELECT `mg_articoli_barcode`.`idarticolo` FROM `mg_articoli_barcode` INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `mg_articoli_barcode`.`idarticolo` WHERE `mg_articoli_barcode`.`barcode` = '.prepare($codice['CodiceValore']).' AND `mg_articoli`.`deleted_at` IS NULL')['idarticolo'];
440-
}
441-
442-
if (empty($id_articolo)) {
443-
$id_articolo = $database->fetchOne('SELECT `mg_articoli_barcode`.`idarticolo` FROM `mg_articoli_barcode` INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `mg_articoli_barcode`.`idarticolo` WHERE REPLACE(`mg_articoli_barcode`.`barcode`, " ", "") = '.prepare($codice['CodiceValore']).' AND `mg_articoli`.`deleted_at` IS NULL')['idarticolo'];
444-
}
431+
$id_articolo = $database->fetchOne('SELECT `mg_articoli_barcode`.`idarticolo` FROM `mg_articoli_barcode` INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `mg_articoli_barcode`.`idarticolo` WHERE REPLACE(`mg_articoli_barcode`.`barcode`, " ", "") = '.prepare($codice['CodiceValore']).' AND `mg_articoli`.`deleted_at` IS NULL')['idarticolo'];
445432
}
446433

447434
if (!empty($id_articolo)) {

plugins/importFE/generate.php

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -504,38 +504,38 @@ function cleanup(){
504504

505505
// Visualizzazione codici articoli
506506
$codici = $riga['CodiceArticolo'] ?: [];
507-
$codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici;
508-
509-
$codici_articoli = [];
510507
$serial = [];
511-
$i = 0;
508+
509+
// Individuazione articolo con codice relativo
510+
$id_articolo = null;
511+
$codice_principale = null;
512+
512513
foreach ($codici as $codice) {
513-
$codici_articoli[] = (($i == 0) ? '<b>' : '').$codice['CodiceValore'].' ('.$codice['CodiceTipo'].')'.(($i == 0) ? '</b>' : '');
514-
if (str_contains((string) $codice['CodiceTipo'], 'serial') || str_contains((string) $codice['CodiceTipo'], 'Serial')) {
514+
$tipo = strtolower($codice['CodiceTipo']);
515+
if (str_starts_with($tipo, 'cod')) {
516+
$codice_principale = $codice['CodiceValore'];
517+
}
518+
519+
if (str_starts_with($tipo, 'serial')) {
515520
$serial[] = $codice['CodiceValore'];
516521
}
517-
++$i;
522+
523+
if (str_starts_with($tipo, 'barcode') || str_starts_with($tipo, 'ean') || str_starts_with($tipo, 'en')) {
524+
$barcode = $codice['CodiceValore'];
525+
}
518526
}
519527

520-
// Individuazione articolo con codice relativo
521-
$id_articolo = null;
522-
// Prendo il codice articolo dal primo nodo CodiceValore che trovo
523-
$codice_principale = $codici[0]['CodiceValore'];
528+
// Fallback al primo codice se non trovato
529+
if ($codice_principale === null && !empty($codici[0])) {
530+
$codice_principale = $codici[0]['CodiceValore'];
531+
}
532+
524533
if (!empty($codice_principale)) {
525534
if (!empty($anagrafica) && empty($id_articolo)) {
526-
$result = $database->fetchOne('SELECT `id_articolo` AS id FROM `mg_fornitore_articolo` WHERE `codice_fornitore` = '.prepare($codice_principale).' AND id_fornitore = '.prepare($anagrafica->id));
527-
$id_articolo = $result['id'] ?? null;
528-
if (empty($id_articolo)) {
529-
$result = $database->fetchOne('SELECT `id_articolo` AS id FROM `mg_fornitore_articolo` WHERE REPLACE(`codice_fornitore`, " ", "") = '.prepare($codice_principale).' AND `id_fornitore` = '.prepare($anagrafica->id));
530-
$id_articolo = $result['id'] ?? null;
531-
}
532-
}
533-
534-
if (empty($id_articolo)) {
535-
$result = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE `codice` = '.prepare($codice_principale));
535+
$result = $database->fetchOne('SELECT `id_articolo` AS id FROM `mg_fornitore_articolo` WHERE ((`codice_fornitore` = '.prepare($codice_principale).' OR `barcode_fornitore` = '.prepare($barcode).') AND id_fornitore = '.prepare($anagrafica->id).' AND DELETED_AT IS NULL)');
536536
$id_articolo = $result['id'] ?? null;
537537
if (empty($id_articolo)) {
538-
$result = $database->fetchOne('SELECT `id` FROM `mg_articoli` WHERE REPLACE(`codice`, " ", "") = '.prepare($codice_principale));
538+
$result = $database->fetchOne('SELECT `id_articolo` AS id FROM `mg_fornitore_articolo` WHERE ((REPLACE(`codice_fornitore`, " ", "") = '.prepare($codice_principale).' OR `barcode_fornitore` = '.prepare($barcode).') AND id_fornitore = '.prepare($anagrafica->id).' AND DELETED_AT IS NULL)');
539539
$id_articolo = $result['id'] ?? null;
540540
}
541541
}
@@ -691,7 +691,7 @@ function cleanup(){
691691
<div class="card-header">
692692
<div class="row">
693693
<div class="col-md-5">
694-
{["type": "select", "name": "articoli['.$key.']", "ajax-source": "articoli", "select-options": '.json_encode(['permetti_movimento_a_zero' => 1, 'dir' => 'entrata', 'idanagrafica' => $anagrafica ? $anagrafica->id : '']).', "icon-after": "add|'.Module::where('name', 'Articoli')->first()->id.'|codice='.($codice_principale ? urlencode((string) $codice_principale) : '').'&descrizione='.($riga['Descrizione'] ? urlencode((string) $riga['Descrizione']) : '').'&prezzo_acquisto='.($riga['PrezzoUnitario'] ? urlencode((string) $riga['PrezzoUnitario']) : '').'", "value": "'.$id_articolo.'", "label": "'.tr('Articolo').'","extra": "data-id=\''.$key.'\'" ]}
694+
{["type": "select", "name": "articoli['.$key.']", "ajax-source": "articoli", "select-options": '.json_encode(['permetti_movimento_a_zero' => 1, 'dir' => 'uscita', 'idanagrafica' => $anagrafica ? $anagrafica->id : '']).', "icon-after": "add|'.Module::where('name', 'Articoli')->first()->id.'|codice='.($codice_principale ? urlencode((string) $codice_principale) : '').'&descrizione='.($riga['Descrizione'] ? urlencode((string) $riga['Descrizione']) : '').'&prezzo_acquisto='.($riga['PrezzoUnitario'] ? urlencode((string) $riga['PrezzoUnitario']) : '').'", "value": "'.$id_articolo.'", "label": "'.tr('Articolo').'","extra": "data-id=\''.$key.'\'" ]}
695695
</div>
696696
697697
<div class="col-md-3">

plugins/importFE/src/FatturaOrdinaria.php

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -287,33 +287,29 @@ public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea
287287
}
288288
}
289289

290-
$articolo = ArticoloOriginale::where('codice', $codice)->first();
291-
292-
if (empty($articolo)) {
293-
$nome_categoria = 'Importazione automatica';
294-
$categoria = Categoria::find((new Categoria())->getByField('title', strtolower($nome_categoria)));
295-
if (empty($categoria)) {
296-
$categoria = Categoria::build();
297-
$categoria->name = $nome_categoria;
298-
$categoria->save();
299-
$categoria->setTranslation('title', $nome_categoria);
300-
}
290+
$nome_categoria = 'Importazione automatica';
291+
$categoria = Categoria::find((new Categoria())->getByField('title', strtolower($nome_categoria)));
292+
if (empty($categoria)) {
293+
$categoria = Categoria::build();
294+
$categoria->name = $nome_categoria;
295+
$categoria->save();
296+
$categoria->setTranslation('title', $nome_categoria);
297+
}
301298

302-
$articolo = ArticoloOriginale::build($codice, $categoria);
303-
$articolo->setTranslation('title', $riga['Descrizione']);
304-
$articolo->um = $riga['UnitaMisura'];
305-
$articolo->idconto_acquisto = $conto[$key] ?: null;
306-
$articolo->abilita_serial = setting('Serial number abilitato di default');
299+
$articolo = ArticoloOriginale::build($codice, $categoria);
300+
$articolo->setTranslation('title', $riga['Descrizione']);
301+
$articolo->um = $riga['UnitaMisura'];
302+
$articolo->idconto_acquisto = $conto[$key] ?: null;
303+
$articolo->abilita_serial = setting('Serial number abilitato di default');
307304

308-
$articolo->save();
305+
$articolo->save();
309306

310-
// Se abbiamo identificato un barcode, lo salviamo nella tabella mg_articoli_barcode
311-
if (!empty($barcode)) {
312-
database()->insert('mg_articoli_barcode', [
313-
'idarticolo' => $articolo->id,
314-
'barcode' => $barcode,
315-
]);
316-
}
307+
// Se abbiamo identificato un barcode, lo salviamo nella tabella mg_articoli_barcode
308+
if (!empty($barcode)) {
309+
database()->insert('mg_articoli_barcode', [
310+
'idarticolo' => $articolo->id,
311+
'barcode' => $barcode,
312+
]);
317313
}
318314
}
319315

plugins/listino_clienti/src/DettaglioPrezzo.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ public static function dettaglioPredefinito($id_articolo, $id_anagrafica, $direz
9292
->where('id_anagrafica', $id_anagrafica)
9393
->where('dir', $direzione)
9494
->whereNull('minimo')
95-
->whereNull('massimo');
95+
->whereNull('massimo')
96+
->whereNull('deleted_at');
9697
}
9798

9899
public static function dettagli($id_articolo, $id_anagrafica, $direzione, $qta = null)

0 commit comments

Comments
 (0)