1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-08 22:45:43 +01:00
openstamanager/modules/combinazioni_articoli/gestione-variante.php
Dasc3er 667b343f62 Aggiunta sistema di gestione Combinazioni Articoli
Introduzione moduli Combinazioni e Attributi Combinazioni, al fine di gestire le combinazioni di articoli (varianti) sulla base di Attributi liberamente impostabili.
Introduzione plugin dedicato alla visualizzazione delle Varianti Articolo.
Modifica del sistema di modifica degli Articoli per sincronizzare in automatico alcuni campi condivisi tra le varianti.
2021-08-31 15:46:14 +02:00

94 lines
3.4 KiB
PHP

<?php
include_once __DIR__.'/init.php';
$varianti_esistenti = $database->fetchArray('SELECT GROUP_CONCAT(`variazioni`.`id_valore`) AS variante
FROM (SELECT `mg_articolo_attributo`.`id_valore`, `mg_articolo_attributo`.`id_articolo`
FROM `mg_articolo_attributo`
INNER JOIN `mg_valori_attributi` ON `mg_valori_attributi`.`id` = `mg_articolo_attributo`.`id_valore`
INNER JOIN `mg_attributi` ON `mg_attributi`.`id` = `mg_valori_attributi`.`id_attributo`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `mg_articolo_attributo`.`id_articolo`
INNER JOIN `mg_combinazioni` ON `mg_combinazioni`.`id` = `mg_articoli`.`id_combinazione`
INNER JOIN `mg_attributo_combinazione` ON `mg_attributo_combinazione`.`id_combinazione` = `mg_combinazioni`.`id` AND `mg_attributo_combinazione`.`id_attributo` = `mg_attributi`.`id`
WHERE `mg_articoli`.`deleted_at` IS NULL AND `mg_articoli`.`id_combinazione` = '.prepare($combinazione->id).'
ORDER BY `mg_attributo_combinazione`.`order`
) AS variazioni
GROUP BY `variazioni`.`id_articolo`');
$varianti_esistenti = array_column($varianti_esistenti, 'variante');
echo '
<form action="" method="post" id="form-variante">
<input type="hidden" name="op" value="gestione-variante">
<input type="hidden" name="backto" value="record-edit">
<p>'.tr('Completa le informazioni dei diversi Attributi per generare una variante della Combinazione').'.</p>
<div class="row">';
$attributi = $combinazione->attributi;
foreach ($attributi as $key => $attributo) {
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.$attributo->nome.'", "name": "attributo['.$key.']", "values": "query=SELECT id, nome AS descrizione FROM mg_valori_attributi WHERE id_attributo = '.prepare($attributo->id).' AND deleted_at IS NULL", "required": 1 ]}
</div>';
}
echo '
</div>
<div class="alert alert-info hidden" id="variante-esistente">
<i class="fa fa-info-circle"></i> '.tr('La variante indicata è già presente per la combinazione corrente').'.
</div>
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary">
<i class="fa fa-plus"></i> '.tr('Aggiungi').'
</button>
</div>
</div>
</form>
<script>
var varianti_esistenti = '.json_encode($varianti_esistenti).';
var form = $("#form-variante");
form.find("select").on("change", function () {
const inputs = form.serializeArray();
// Individuazione variante e completezza
let incompleto = false;
let valori = [];
for (const {name, value} of inputs) {
if (name.startsWith("attributo")){
valori.push(value);
incompleto |= !value;
}
}
// Completamento informazioni
const variante = valori.join(",");
const variante_esistente = varianti_esistenti.includes(variante);
// Disabilitazione/abilitazione pulsante di aggiunta
const button = form.find("button");
if (variante_esistente || incompleto){
button.addClass("disabled").attr("disabled", true);
} else {
button.removeClass("disabled").attr("disabled", false);
}
// Messaggio informativo
const info = form.find("#variante-esistente");
if (variante_esistente) {
info.removeClass("hidden");
} else {
info.addClass("hidden");
}
});
$(document).ready(init);
</script>';