|
509 | 509 |
|
510 | 510 | flash()->info(tr('Articoli '.(post('attivo') ? 'attivati' : 'disattivati').' correttamente!')); |
511 | 511 |
|
| 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 | + |
512 | 581 | break; |
513 | 582 | } |
514 | 583 |
|
|
641 | 710 | ], |
642 | 711 | ]; |
643 | 712 |
|
| 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 | + |
644 | 728 | $operations['delete_bulk'] = [ |
645 | 729 | 'text' => '<span><i class="fa fa-trash"></i> '.tr('Elimina').'</span>', |
646 | 730 | 'data' => [ |
|
660 | 744 | ], |
661 | 745 | ]; |
662 | 746 |
|
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 | | -]; |
677 | 747 |
|
678 | 748 | $operations['generate_barcode_bulk'] = [ |
679 | 749 | 'text' => '<span><i class="fa fa-magic"></i> '.tr('Genera barcode').'</span>', |
|
723 | 793 | ], |
724 | 794 | ]; |
725 | 795 |
|
| 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 | + |
726 | 808 | return $operations; |
0 commit comments