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();
- }
- }
}
/**