From 7f1ceb05528205fa4c4f2cd7f825be52835d8719 Mon Sep 17 00:00:00 2001
From: Sajo <75281007+sajotrei@users.noreply.github.com>
Date: Mon, 17 Aug 2026 01:02:40 +0200
Subject: [PATCH] feat: crea ordine fornitore da elenco articoli
---
modules/articoli/bulk.php | 69 +++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/modules/articoli/bulk.php b/modules/articoli/bulk.php
index a9ad3b890..0d7f21cda 100755
--- a/modules/articoli/bulk.php
+++ b/modules/articoli/bulk.php
@@ -25,6 +25,9 @@
use Modules\Articoli\Export\CSV;
use Modules\Iva\Aliquota;
use Modules\ListiniCliente\Articolo as ArticoloListino;
+use Modules\Ordini\Components\Articolo as ArticoloOrdine;
+use Modules\Ordini\Ordine;
+use Modules\Ordini\Tipo as TipoOrdine;
use Modules\Preventivi\Components\Articolo as ArticoloPreventivo;
use Modules\Preventivi\Preventivo;
use Modules\TipiIntervento\Tipo as TipoSessione;
@@ -35,6 +38,8 @@
// Segmenti
$id_preventivi = Module::where('name', 'Preventivi')->first()->id;
$id_segment = $_SESSION['module_'.$id_preventivi]['id_segment'];
+$id_ordini_fornitore = Module::where('name', 'Ordini fornitore')->first()->id;
+$id_segment_ordini_fornitore = $_SESSION['module_'.$id_ordini_fornitore]['id_segment'] ?? getSegmentPredefined($id_ordini_fornitore);
switch (post('op')) {
case 'change_purchase_price':
@@ -246,6 +251,56 @@
redirect_url(base_path_osm().'/editor.php?id_module='.$id_preventivi.'&id_record='.$id_preventivo);
exit;
+ case 'create_supplier_order':
+ $id_fornitore = post('id_fornitore');
+ $nome = post('nome');
+ $data = post('data');
+ $id_segment_ordine = post('id_segment_ordine');
+
+ $fornitore = Anagrafica::find($id_fornitore);
+ $tipo = TipoOrdine::where('dir', 'uscita')->first();
+
+ if (empty($fornitore) || empty($tipo)) {
+ flash()->error(tr('Impossibile creare l\'ordine fornitore.'));
+ break;
+ }
+
+ $ordine = Ordine::build($fornitore, $tipo, $nome, $data, $id_segment_ordine);
+ $n_articoli = 0;
+ $id_iva = $dbo->fetchOne('SELECT `id_iva_acquisti` AS `id_iva` FROM `an_anagrafiche` WHERE `id` = '.prepare($id_fornitore))['id_iva'] ?: setting('Iva predefinita');
+
+ foreach ($id_records as $id) {
+ $originale = Articolo::find($id);
+
+ if (empty($originale)) {
+ continue;
+ }
+
+ $dettaglio_prezzo = DettaglioPrezzo::dettaglioPredefinito($originale->id, $id_fornitore, 'uscita')->first();
+ $prezzo_acquisto = $dettaglio_prezzo ? $dettaglio_prezzo->prezzo_unitario : $originale->prezzo_acquisto;
+
+ $articolo = ArticoloOrdine::build($ordine, $originale);
+ $articolo->qta = 1;
+ $articolo->um = $originale->um ?: null;
+ $articolo->costo_unitario = $prezzo_acquisto;
+ $articolo->setPrezzoUnitario($prezzo_acquisto, $id_iva);
+ $articolo->save();
+
+ ++$n_articoli;
+ }
+
+ if ($n_articoli > 0) {
+ flash()->info(tr('_NUM_ articoli sono stati aggiunti all\'ordine fornitore', [
+ '_NUM_' => $n_articoli,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun articolo aggiunto all\'ordine fornitore!'));
+ }
+
+ $database->commitTransaction();
+ redirect_url(base_path_osm().'/editor.php?id_module='.$id_ordini_fornitore.'&id_record='.$ordine->id);
+ exit;
+
case 'export_csv':
$file = temp_file();
$exporter = new CSV($file);
@@ -763,6 +818,20 @@
],
];
+$operations['create_supplier_order'] = [
+ 'text' => ' '.tr('Crea ordine fornitore').'',
+ 'data' => [
+ 'title' => tr('Creare ordine fornitore?'),
+ 'msg' => tr('Gli articoli selezionati verranno aggiunti a un nuovo ordine fornitore').'
+
{[ "type": "select", "label": "'.tr('Fornitore').'", "name": "id_fornitore", "ajax-source": "fornitori", "required": 1 ]}
+ {[ "type": "text", "label": "'.tr('Nome').'", "name": "nome" ]}
+ {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment_ordine", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_ordini_fornitore, 'is_sezionale' => 1]).', "value": "'.$id_segment_ordini_fornitore.'", "select-options-escape": true ]}
+ {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "value": "-now-" ]}',
+ 'button' => tr('Procedi'),
+ 'class' => 'btn btn-lg btn-warning',
+ ],
+];
+
$operations['delete_bulk'] = [
'text' => ' '.tr('Elimina').'',
'data' => [