diff --git a/modules/articoli/ajax/select.php b/modules/articoli/ajax/select.php index b946e4364..fe87ae915 100755 --- a/modules/articoli/ajax/select.php +++ b/modules/articoli/ajax/select.php @@ -32,6 +32,7 @@ switch ($resource) { $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); $usare_dettaglio_fornitore = $superselect['dir'] == 'uscita'; $usare_iva_anagrafica = $superselect['dir'] == 'entrata' && !empty($superselect['idanagrafica']); + $solo_non_varianti = $superselect['solo_non_varianti']; $query = "SELECT IF(`categoria`.`nome` IS NOT NULL, CONCAT(`categoria`.`nome`, IF(`sottocategoria`.`nome` IS NOT NULL, CONCAT(' (', `sottocategoria`.`nome`, ')'), '-')), '".tr('Nessuna categoria')."') AS optgroup, @@ -139,6 +140,10 @@ switch ($resource) { $where[] = 'mg_articoli.attivo = 1'; $where[] = 'mg_articoli.deleted_at IS NULL'; + if ($solo_non_varianti) { + $where[] = 'mg_articoli.id_combinazione IS NULL'; + } + if (!empty($search)) { $search_fields[] = 'mg_articoli.descrizione LIKE '.prepare('%'.$search.'%'); $search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%'); diff --git a/modules/combinazioni_articoli/actions.php b/modules/combinazioni_articoli/actions.php index 407a23a2f..c0367c03b 100644 --- a/modules/combinazioni_articoli/actions.php +++ b/modules/combinazioni_articoli/actions.php @@ -44,7 +44,7 @@ switch (filter('op')) { break; case 'gestione-variante': - $combinazione->generaVariante((array) filter('attributo')); + $combinazione->generaVariante((array) filter('attributo'), filter('id_articolo')); flash()->info(tr('Variante aggiunta correttamente!')); diff --git a/modules/combinazioni_articoli/gestione-variante.php b/modules/combinazioni_articoli/gestione-variante.php index 14c8324cd..d113f2604 100644 --- a/modules/combinazioni_articoli/gestione-variante.php +++ b/modules/combinazioni_articoli/gestione-variante.php @@ -34,6 +34,12 @@ foreach ($attributi as $key => $attributo) { '; } +// Scelta articolo esistente +echo ' +
+ {[ "type": "select", "label": "'.tr('Collega articolo esistente').' ('.tr('facoltativo').')", "name": "id_articolo", "ajax-source": "articoli", "select-options": {"solo_non_varianti": 1, "permetti_movimento_a_zero": 1} ]} +
'; + echo ' diff --git a/modules/combinazioni_articoli/src/Combinazione.php b/modules/combinazioni_articoli/src/Combinazione.php index 4cbfdcf5e..f59458d30 100644 --- a/modules/combinazioni_articoli/src/Combinazione.php +++ b/modules/combinazioni_articoli/src/Combinazione.php @@ -76,7 +76,7 @@ class Combinazione extends Model * * @param $valori_attributi */ - public function generaVariante($valori_attributi) + public function generaVariante($valori_attributi, $id_articolo = null) { $database = database(); @@ -84,20 +84,42 @@ class Combinazione extends Model $variante = ValoreAttributo::findMany($valori_attributi)->pluck('nome')->all(); // Generazione Articolo di base - $articoli = $this->articoli; - if ($articoli->isEmpty()) { - $articolo = Articolo::build($this->nome, $this->nome); - $articolo->id_combinazione = $this->id; + if (empty($id_articolo)) { + $articoli = $this->articoli; + if ($articoli->isEmpty()) { + $articolo = Articolo::build($this->nome, $this->nome); + $articolo->id_combinazione = $this->id; - $articolo->id_categoria = $this->id_categoria; - $articolo->id_sottocategoria = $this->id_sottocategoria; - } else { - $articolo_base = $articoli->first(); - $articolo = $articolo_base->replicate(); + $articolo->id_categoria = $this->id_categoria; + $articolo->id_sottocategoria = $this->id_sottocategoria; + } else { + $articolo_base = $articoli->first(); + $articolo = $articolo_base->replicate(); + + $nome_immagine = $articolo_base->immagine_upload->name; + $allegato = $articolo_base->uploads()->where('name', $nome_immagine)->first(); + + if (!empty($allegato)) { + $allegato->copia([ + 'id_module' => $articolo->getModule()->id, + 'id_record' => $articolo->id, + ]); + + $articolo->immagine = $articolo->uploads()->where('name', $nome_immagine)->first()->filename; + $articolo->save(); + } + } + $articolo->descrizione = $this->nome.' ['.implode(', ', $variante).']'; + $articolo->codice = $this->codice.'-'.implode('|', $variante); + $articolo->save(); + } + + // Uso di un articolo giĆ  esistente + else { + $articolo = Articolo::find($id_articolo); + $articolo->id_combinazione = $this->id; + $articolo->save(); } - $articolo->descrizione = $this->nome.' ['.implode(', ', $variante).']'; - $articolo->codice = $this->codice.'-'.implode('|', $variante); - $articolo->save(); // Associazione valori della variante foreach ($valori_attributi as $id => $id_valore) { @@ -106,22 +128,6 @@ class Combinazione extends Model 'id_valore' => $id_valore, ]); } - - // Salvataggio immagine relativa - if (!$articoli->isEmpty()) { - $nome_immagine = $articolo_base->immagine_upload->name; - $allegato = $articolo_base->uploads()->where('name', $nome_immagine)->first(); - - if (!empty($allegato)) { - $allegato->copia([ - 'id_module' => $articolo->getModule()->id, - 'id_record' => $articolo->id, - ]); - - $articolo->immagine = $articolo->uploads()->where('name', $nome_immagine)->first()->filename; - $articolo->save(); - } - } } /**