Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions modules/articoli/actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@
$articolo->name = post('descrizione');
}

if (post('genera_barcode')) {
$codice = '200'.str_pad((string) $articolo->id, 9, '0', STR_PAD_LEFT);
$barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode();
}
$articolo->barcode = $barcode ?: post('barcode');
$articolo->coefficiente = post('coefficiente');
$articolo->idiva_vendita = post('idiva_vendita');
$articolo->prezzo_acquisto = post('prezzo_acquisto');
Expand All @@ -71,7 +76,7 @@
$articolo->idconto_vendita = post('idconto_vendita');
$articolo->idconto_acquisto = post('idconto_acquisto');
$articolo->abilita_serial = post('abilita_serial_add');

$articolo->ubicazione = post('ubicazione');
$articolo->um = post('um');
$articolo->um_secondaria = post('um_secondaria');
$articolo->fattore_um_secondaria = post('fattore_um_secondaria');
Expand Down Expand Up @@ -180,9 +185,10 @@
}

$articolo->codice = post('codice', true);
$articolo->barcode = post('barcode');
$articolo->um = post('um');
$articolo->id_categoria = post('categoria_edit') ?: post('categoria');
$articolo->id_sottocategoria = post('subcategoria_edit') ?: post('subcategoria');
$articolo->id_categoria = post('categoria');
$articolo->id_sottocategoria = post('subcategoria');
$articolo->abilita_serial = post('abilita_serial');
$articolo->ubicazione = post('ubicazione');
$articolo->coefficiente = post('coefficiente');
Expand All @@ -195,8 +201,8 @@
$articolo->servizio = post('servizio');
$articolo->volume = post('volume');
$articolo->peso_lordo = post('peso_lordo');
$articolo->id_marca = post('id_marca_edit') ?: post('id_marca');
$articolo->id_modello = post('id_modello_edit') ?: post('id_modello');
$articolo->id_marca = post('id_marca');
$articolo->id_modello = post('id_modello');

$articolo->um_secondaria = post('um_secondaria');
$articolo->fattore_um_secondaria = post('fattore_um_secondaria');
Expand Down Expand Up @@ -505,6 +511,12 @@
break;

case 'generate-barcode':
$codice = '200'.str_pad((string) $id_record, 9, '0', STR_PAD_LEFT);
$barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode();

echo json_encode([
'barcode' => $barcode,
]);
// Genera un barcode unico controllando sia la tabella mg_articoli che mg_articoli_barcode
// per garantire l'unicità anche considerando i barcode aggiuntivi degli articoli
$tentativi = 0;
Expand Down
25 changes: 10 additions & 15 deletions modules/articoli/add.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
</div>

<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Modello'); ?>", "name": "id_modello", "id": "id_modello_add", "ajax-source": "modelli", "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>|id_original=0|hide" ]}
{[ "type": "select", "label": "<?php echo tr('Modello'); ?>", "name": "id_modello", "id": "id_modello_add", "ajax-source": "modelli", "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>||hide" ]}
</div>
</div>

Expand Down Expand Up @@ -97,7 +97,7 @@

<div class="row">
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta", "value": "<?php echo htmlentities(filter('qta')) ?: ''; ?>" ]}
{[ "type": "number", "label": "<?php echo tr('Quantità iniziale'); ?>", "name": "qta", "decimals": "qta" ]}
</div>

<div class="col-md-4">
Expand All @@ -111,7 +111,7 @@

<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "<?php echo htmlentities(filter('um')) ?: ''; ?>", "ajax-source": "misure", "icon-after": "add|<?php echo Module::where('name', 'Unità di misura')->first()->id; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Unità di misura'); ?>", "name": "um", "value": "", "ajax-source": "misure", "icon-after": "add|<?php echo Module::where('name', 'Unità di misura')->first()->id; ?>" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('U.m. secondaria'); ?>", "name": "um_secondaria", "value": "", "ajax-source": "misure", "help": "<?php echo tr("Unità di misura da utilizzare nelle stampe di Ordini fornitori in relazione all'articolo"); ?>" ]}
Expand All @@ -137,6 +137,13 @@
<input type="hidden" name="aliquota_predefinita" value="<?php echo $aliquota_predefinita; ?>">
</div>
</div>

<!--Aggiungo form inserimento ubicazione-->
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "", "ajax-source": "ubicaz" ]}
</div>
</div>
</div>
</div>

Expand Down Expand Up @@ -191,11 +198,6 @@
}
});

// Nascondi il pulsante modello se non c'è una marca selezionata all'inizio
if(!$('#add-form').find('#id_marca').val()) {
modello.parent().find(".input-group-append button").addClass("hide");
}

input("coefficiente").on('keyup', function(){
if (iva_vendita.val()) {
percentuale = parseFloat(iva_vendita.selectData().percentuale);
Expand Down Expand Up @@ -261,11 +263,4 @@ function scorpora_iva_add() {
$("#genera_barcode").click(function(){
$(".modal #barcode").attr("disabled", $(this).is(":checked")).val("");
});

// Espandi automaticamente la sezione "Informazioni aggiuntive" se sono precompilati dati dall'ImportFE
$(document).ready(function() {
if (input("prezzo_acquisto").get() > 0 || input("qta").get() > 0 || input("um").get()) {
$(".card.collapsed-card .card-tools button[data-card-widget='collapse']").click();
}
});
</script>
29 changes: 18 additions & 11 deletions modules/articoli/ajax/select.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
$query = "SELECT
DISTINCT `mg_articoli`.`id`,
IF(`categoria_lang`.`title` IS NOT NULL, CONCAT(`categoria_lang`.`title`, IF(`sottocategoria_lang`.`title` IS NOT NULL, CONCAT(' (', `sottocategoria_lang`.`title`, ')'), '-')), '<i>".tr('Nessuna categoria')."</i>') AS optgroup,
`mg_articoli_barcode`.`barcode` AS barcode,
`mg_articoli`.`barcode`,
`mg_articoli`.".($prezzi_ivati ? '`prezzo_vendita_ivato`' : '`prezzo_vendita`').' AS prezzo_vendita,
`mg_articoli`.`prezzo_vendita_ivato` AS prezzo_vendita_ivato,
`mg_articoli`.'.($prezzi_ivati ? '`minimo_vendita_ivato`' : '`minimo_vendita`').' AS minimo_vendita,';
Expand Down Expand Up @@ -114,8 +114,7 @@
LEFT JOIN `co_iva` AS iva_articolo ON `iva_articolo`.`id` = `mg_articoli`.`idiva_vendita`
LEFT JOIN `co_iva_lang` AS iva_articolo_lang on (`iva_articolo`.`id` = `iva_articolo_lang`.`id_record` AND `iva_articolo_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).")
LEFT JOIN `co_iva` AS `iva_predefinita` ON `iva_predefinita`.`id` = '.$iva_predefinita.'
LEFT JOIN `co_iva_lang` AS iva_predefinita_lang on (`iva_predefinita`.`id` = `iva_predefinita_lang`.`id_record` AND `iva_predefinita_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
LEFT JOIN mg_articoli_barcode ON mg_articoli_barcode.idarticolo = mg_articoli.id';
LEFT JOIN `co_iva_lang` AS iva_predefinita_lang on (`iva_predefinita`.`id` = `iva_predefinita_lang`.`id_record` AND `iva_predefinita_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')';

if ($usare_iva_anagrafica) {
$query .= '
Expand Down Expand Up @@ -180,8 +179,8 @@
if (!empty($search)) {
$search_fields[] = '`mg_articoli_lang`.`title` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`mg_articoli`.`codice` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`mg_articoli`.`barcode` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`categoria_lang`.`title` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`mg_articoli_barcode`.`barcode` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`sottocategoria_lang`.`title` LIKE '.prepare('%'.$search.'%');

if ($usare_dettaglio_fornitore) {
Expand Down Expand Up @@ -217,7 +216,6 @@
$results = [
'results' => $rs,
'recordsFiltered' => $data['recordsFiltered'],
'link' => 'module:Articoli',
];

break;
Expand All @@ -236,8 +234,6 @@
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
}

$custom['link'] = 'module:Categorie';

break;

/*
Expand All @@ -258,8 +254,6 @@
if (!empty($search)) {
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
}

$custom['link'] = 'module:Categorie';
}
break;

Expand All @@ -275,6 +269,20 @@

break;

case 'ubicaz':
$query = 'SELECT `mg_ubicazioni`.`u_label` AS id, `mg_ubicazioni_lang`.`title` AS descrizione FROM `mg_ubicazioni` LEFT JOIN `mg_ubicazioni_lang` ON (`mg_ubicazioni_lang`.`id_record` = `mg_ubicazioni`.`id` AND `mg_ubicazioni_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') |where| ORDER BY `title`';
//$query = 'SELECT `u_label` AS id, `u_label` AS descrizione FROM `mg_ubicazioni` LEFT JOIN `mg_ubicazioni_lang` ON (`mg_ubicazioni_lang`.`id_record` = `mg_ubicazioni`.`id` AND `mg_ubicazioni_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') |where| ORDER BY TRIM(`mg_ubicazioni`.`u_label`)';

foreach ($elements as $element) {
$filter[] = '`u_label`='.prepare($element);
}
if (!empty($search)) {
//$search_fields[] = '`u_label` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
}

break;

/*
* Opzioni utilizzate:
* - idanagrafica
Expand All @@ -298,15 +306,14 @@
`mg_fornitore_articolo`.`id` AS id_dettaglio_fornitore
FROM `mg_articoli`
LEFT JOIN `mg_fornitore_articolo` ON `mg_fornitore_articolo`.`id_articolo` = `mg_articoli`.`id` AND `mg_fornitore_articolo`.`deleted_at` IS NULL AND `mg_fornitore_articolo`.`id_fornitore` = '.prepare($id_anagrafica).'
LEFT JOIN `mg_articoli_barcode` ON `mg_articoli`.`id` = `mg_articoli_barcode`.`idarticolo`
|where|';

$where[] = '`mg_articoli`.`attivo` = 1';
$where[] = '`mg_articoli`.`deleted_at` IS NULL';

if (!empty($search)) {
$search_fields[] = '`mg_articoli`.`codice` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`mg_articoli_barcode`.`barcode` LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`mg_articoli`.`barcode` LIKE '.prepare('%'.$search.'%');
}

break;
Expand Down
73 changes: 44 additions & 29 deletions modules/articoli/edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,19 @@

<div class="col-md-9">
<div class="row">
<div class="col-md-4">
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Codice'); ?>", "name": "codice", "required": 1, "value": "$codice$", "validation": "codice" ]}
</div>

<div class="col-md-4">
<div class="col-md-3">
<button type="button" class="btn btn-default btn-xs tip pull-right" id="generaBarcode"><i class="fa fa-refresh"></i> <?php echo tr('Genera'); ?></button>
{[ "type": "text", "label": "<?php echo tr('Barcode'); ?>", "name": "barcode", "validation": "barcode", "class": "text-center", "value": "$barcode$" ]}
</div>

<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Questo articolo è un servizio'); ?>", "name": "servizio", "value": "$servizio$", "help": "<?php echo tr('Le quantità non saranno considerate.'); ?>", "placeholder": "<?php echo tr('Servizio'); ?>" ]}
</div>
<div class="col-md-4">
<div class="col-md-3">
{[ "type": "checkbox", "label": "<?php echo tr('Attivo'); ?>", "name": "attivo", "help": "<?php echo tr('Seleziona per rendere attivo l\'articolo'); ?>", "value": "$attivo$", "placeholder": "<?php echo tr('Articolo attivo'); ?>" ]}
</div>
</div>
Expand All @@ -61,20 +66,20 @@
<div class="col-md-3">
<?php echo (!empty($record['id_categoria'])) ?
Modules::link('Categorie', $record['id_categoria'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Categoria'); ?>", "name": "categoria_edit", "id": "categoria_edit", "required": 0, "value": "$id_categoria$", "ajax-source": "categorie", "icon-after": "add|<?php echo Module::where('name', 'Categorie')->first()->id; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Categoria'); ?>", "name": "categoria", "required": 0, "value": "$id_categoria$", "ajax-source": "categorie", "icon-after": "add|<?php echo Module::where('name', 'Categorie')->first()->id; ?>" ]}
</div>

<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Sottocategoria'); ?>", "name": "subcategoria_edit", "id": "subcategoria_edit", "value": "$id_sottocategoria$", "ajax-source": "sottocategorie", "select-options": <?php echo json_encode(['id_categoria' => $record['id_categoria']]); ?>, "icon-after": "add|<?php echo Module::where('name', 'Categorie')->first()->id; ?>|id_original=<?php echo $record['id_categoria']; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Sottocategoria'); ?>", "name": "subcategoria", "value": "$id_sottocategoria$", "ajax-source": "sottocategorie", "select-options": <?php echo json_encode(['id_categoria' => $record['id_categoria']]); ?>, "icon-after": "add|<?php echo Module::where('name', 'Categorie')->first()->id; ?>|id_original=<?php echo $record['id_categoria']; ?>" ]}
</div>

<div class="col-md-3">
<?php echo !empty($record['id_marca']) ? Modules::link('Marche', $record['id_marca'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Marca'); ?>", "name": "id_marca_edit", "id": "id_marca_edit", "value":"$id_marca$", "ajax-source": "marche", "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Marca'); ?>", "name": "id_marca", "value":"$id_marca$", "ajax-source": "marche", "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>" ]}
</div>
<div class="col-md-3">
<?php echo !empty($record['id_modello']) ? Modules::link('Marche', $record['id_modello'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Modello'); ?>", "name": "id_modello_edit", "id": "id_modello_edit", "value":"$id_modello$", "ajax-source": "modelli", "select-options": <?php echo json_encode(['id_marca' => $record['id_marca']]); ?>, "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>|id_original=<?php echo $record['id_marca']; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Modello'); ?>", "name": "id_modello", "value":"$id_modello$", "ajax-source": "modelli", "select-options": <?php echo json_encode(['id_marca' => $record['id_marca']]); ?>, "icon-after": "add|<?php echo Module::where('name', 'Marche')->first()->id; ?>|id_original=<?php echo $record['id_marca']; ?>" ]}
</div>
</div>
<div class="row">
Expand All @@ -97,8 +102,11 @@
<div class="col-md-4">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita serial number'); ?>", "name": "abilita_serial", "value": "$abilita_serial$", "help": "<?php echo tr('Abilita serial number in fase di aggiunta articolo in fattura o ddt'); ?>", "placeholder": "<?php echo tr('Serial number'); ?>", "extra": "<?php echo ($record['serial'] > 0) ? 'readonly' : ''; ?>" ]}
</div>
<div class="col-md-4">
<!--<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$" ]}
</div>-->
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Ubicazione'); ?>", "name": "ubicazione", "value": "$ubicazione$", "ajax-source": "ubicaz", "icon-after": "add|<?php echo Module::where('name', 'ubicazioni')->first()->id; ?>" ]}
</div>

<div class="col-md-4">
Expand Down Expand Up @@ -338,45 +346,30 @@
});
});

$("#categoria_edit").change(function() {
$("#categoria").change(function() {
updateSelectOption("id_categoria", $(this).val());

$("#subcategoria_edit").val(null).trigger("change");

// Gestione del pulsante "aggiungi" per sottocategoria
var sub = $("#subcategoria_edit");
var button = sub.parent().find(".input-group-append button");

if($(this).val()) {
button.removeClass("hide");
var original = button.attr("onclick");
if(original && original.indexOf("id_original=") !== -1) {
var newOnclick = original.replace(/id_original=\d+/, "id_original=" + $(this).val());
button.attr("onclick", newOnclick);
}
} else {
button.addClass("hide");
}
$("#subcategoria").val(null).trigger("change");
});

// Gestione del cambio marca per aggiornare i modelli
$("#id_marca_edit").change(function() {
$("#id_marca").change(function() {
updateSelectOption("id_marca", $(this).val());

// Reset del modello
$("#id_modello_edit").val(null).trigger("change");
$("#id_modello").val(null).trigger("change");

// Aggiornamento dell'icona "aggiungi" per il modello
if($(this).val()) {
var button = $("#id_modello_edit").parent().find(".input-group-append button");
var button = $("#id_modello").parent().find(".input-group-append button");
var original = button.attr("onclick");
if(original) {
var newOnclick = original.replace(/id_original=\d+/, "id_original=" + $(this).val());
button.attr("onclick", newOnclick);
button.removeClass("hide");
}
} else {
$("#id_modello_edit").parent().find(".input-group-append button").addClass("hide");
$("#id_modello").parent().find(".input-group-append button").addClass("hide");
}
});

Expand All @@ -393,6 +386,28 @@ function scorporaIva() {
scorporaIva();
});

function generaBarcode() {
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "generate-barcode"
},
success: function(response) {
response = JSON.parse(response);
let input = $("#barcode");
input.val(response.barcode);
},
error: function(xhr, status, error) {
}
});
}

$("#generaBarcode").click( function() {
generaBarcode();
});
</script>


Expand Down
Loading