Skip to content

Commit dec38ac

Browse files
committed
feat: unione articoli da bulk
1 parent bbf348f commit dec38ac

1 file changed

Lines changed: 96 additions & 14 deletions

File tree

modules/articoli/bulk.php

Lines changed: 96 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,75 @@
509509

510510
flash()->info(tr('Articoli '.(post('attivo') ? 'attivati' : 'disattivati').' correttamente!'));
511511

512+
break;
513+
514+
case 'merge_products':
515+
$id_articolo_principale = post('id_articolo_principale');
516+
517+
if (!in_array($id_articolo_principale, $id_records)) {
518+
flash()->error(tr('L\'articolo principale deve essere tra quelli selezionati'));
519+
break;
520+
}
521+
522+
// Verifica che ci siano almeno 2 articoli da unire
523+
$id_articoli_da_unire = array_diff($id_records, [$id_articolo_principale]);
524+
if (empty($id_articoli_da_unire)) {
525+
flash()->error(tr('Selezionare almeno un articolo da unire'));
526+
break;
527+
}
528+
529+
try {
530+
foreach ($id_articoli_da_unire as $id_articolo_da_unire) {
531+
// Trasferimento movimenti di magazzino
532+
database()->table('mg_movimenti')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
533+
// Trasferimento righe documenti
534+
database()->table('co_righe_documenti')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
535+
// Trasferimento righe ordini
536+
database()->table('or_righe_ordini')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
537+
// Trasferimento righe preventivi
538+
database()->table('co_righe_preventivi')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
539+
// Trasferimento righe DDT
540+
database()->table('dt_righe_ddt')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
541+
// Trasferimento righe contratti
542+
database()->table('co_righe_contratti')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
543+
// Trasferimento righe interventi
544+
database()->table('in_righe_interventi')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
545+
// Trasferimento prodotti
546+
database()->table('mg_prodotti')->where('id_articolo', $id_articolo_da_unire)->update(['id_articolo' => $id_articolo_principale]);
547+
// Trasferimento prezzi articoli
548+
database()->table('mg_prezzi_articoli')->where('id_articolo', $id_articolo_da_unire)->update(['id_articolo' => $id_articolo_principale]);
549+
// Trasferimento listini articoli
550+
database()->table('mg_listini_articoli')->where('id_articolo', $id_articolo_da_unire)->update(['id_articolo' => $id_articolo_principale]);
551+
// Trasferimento fornitori
552+
database()->table('mg_fornitore_articolo')->where('id_articolo', $id_articolo_da_unire)->update(['id_articolo' => $id_articolo_principale]);
553+
// Trasferimento barcode
554+
database()->table('mg_articoli_barcode')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
555+
// Trasferimento provvigioni
556+
database()->table('co_provvigioni')->where('idarticolo', $id_articolo_da_unire)->update(['idarticolo' => $id_articolo_principale]);
557+
// Aggiornamento riferimenti combinazioni
558+
database()->table('mg_articoli')->where('id_combinazione', $id_articolo_da_unire)->update(['id_combinazione' => $id_articolo_principale]);
559+
// Trasferimento attributi
560+
database()->table('mg_articolo_attributo')->where('id_articolo', $id_articolo_da_unire)->update(['id_articolo' => $id_articolo_principale]);
561+
562+
// Eliminazione articolo (soft delete)
563+
Articolo::find($id_articolo_da_unire)->delete();
564+
}
565+
566+
$qta_attuale = floatval($articolo_principale->qta);
567+
$qta_movimenti = database()->fetchOne('
568+
SELECT COALESCE(SUM(`qta`), 0) AS `totale`
569+
FROM `mg_movimenti`
570+
WHERE `idarticolo` = '.prepare($id_articolo_principale)
571+
)['totale'];
572+
573+
$nuova_qta = $qta_attuale + $qta_movimenti;
574+
database()->table('mg_articoli')->where('id', $id_articolo_principale)->update(['qta' => $nuova_qta]);
575+
576+
flash()->info(tr('Articoli uniti correttamente!'));
577+
} catch (Exception $e) {
578+
flash()->error(tr('Errore durante l\'unione degli articoli: ').$e->getMessage());
579+
}
580+
512581
break;
513582
}
514583

@@ -641,6 +710,21 @@
641710
],
642711
];
643712

713+
$operations['create_estimate'] = [
714+
'text' => '<span><i class="fa fa-plus"></i> '.tr('Crea preventivo').'</span>',
715+
'data' => [
716+
'title' => tr('Creare preventivo?'),
717+
'msg' => tr('Ogni articolo selezionato, verrà aggiunto al preventivo').'
718+
<br><br>{[ "type": "text", "label": "'.tr('Nome preventivo').'", "name": "nome", "required": 1 ]}
719+
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente", "ajax-source": "clienti", "required": 1 ]}
720+
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_preventivi, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}
721+
{[ "type": "select", "label": "'.tr('Tipo di attività').'", "name": "id_tipo", "ajax-source": "tipiintervento", "required": 1 ]}
722+
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}',
723+
'button' => tr('Procedi'),
724+
'class' => 'btn btn-lg btn-warning',
725+
],
726+
];
727+
644728
$operations['delete_bulk'] = [
645729
'text' => '<span><i class="fa fa-trash"></i> '.tr('Elimina').'</span>',
646730
'data' => [
@@ -660,20 +744,6 @@
660744
],
661745
];
662746

663-
$operations['create_estimate'] = [
664-
'text' => '<span><i class="fa fa-plus"></i> '.tr('Crea preventivo').'</span>',
665-
'data' => [
666-
'title' => tr('Creare preventivo?'),
667-
'msg' => tr('Ogni articolo selezionato, verrà aggiunto al preventivo').'
668-
<br><br>{[ "type": "text", "label": "'.tr('Nome preventivo').'", "name": "nome", "required": 1 ]}
669-
{[ "type": "select", "label": "'.tr('Cliente').'", "name": "id_cliente", "ajax-source": "clienti", "required": 1 ]}
670-
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_preventivi, 'is_sezionale' => 1]).', "value": "'.$id_segment.'", "select-options-escape": true ]}
671-
{[ "type": "select", "label": "'.tr('Tipo di attività').'", "name": "id_tipo", "ajax-source": "tipiintervento", "required": 1 ]}
672-
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}',
673-
'button' => tr('Procedi'),
674-
'class' => 'btn btn-lg btn-warning',
675-
],
676-
];
677747

678748
$operations['generate_barcode_bulk'] = [
679749
'text' => '<span><i class="fa fa-magic"></i> '.tr('Genera barcode').'</span>',
@@ -723,4 +793,16 @@
723793
],
724794
];
725795

796+
$operations['merge_products'] = [
797+
'text' => '<span><i class="fa fa-pencil"></i> '.tr('Unisci articoli').' <span class="badge bg-warning">Beta</span></span>',
798+
'data' => [
799+
'title' => tr('Unire i seguenti articoli?'),
800+
'msg' => tr('Tutti gli articoli selezionati verranno unificati in un unico articolo, è necessario selezionare l\'articolo principale che conterrà le informazioni finali.').'<br><br>
801+
{[ "type": "select", "label": "'.tr('Articolo principale').'", "name": "id_articolo_principale", "required": 1, "ajax-source": "articoli", "select-options": '.json_encode(['permetti_movimento_a_zero' => 1]).', "value": "", "select-options-escape": true ]}',
802+
'button' => tr('Procedi'),
803+
'class' => 'btn btn-lg btn-warning',
804+
'blank' => true,
805+
],
806+
];
807+
726808
return $operations;

0 commit comments

Comments
 (0)