gest366/modules/articoli/actions.php

433 lines
16 KiB
PHP

<?php
include_once(__DIR__."/../../core.php");
switch( $html->form('op', 'post') ){
case "update":
$idarticolo = $_POST['id_record'];
if( $modules_info[$module_name]["permessi"] == 'rw' ){
if( isset($_POST['id_record']) ){
include ($docroot . "/lib/salva_personalizzati.php");
$codice = save($_POST['codice']);
$descrizione = save($_POST['descrizione']);
$idum = save($_POST['idum']);
$categoria = save($_POST['categoria']);
$subcategoria = save($_POST['subcategoria']);
$qta = save($_POST['qta']);
$threshold_qta = save($_POST['threshold_qta']);
$prezzo_vendita = force_decimal($_POST['prezzo_vendita']);
$prezzo_acquisto = force_decimal($_POST['prezzo_acquisto']);
$idiva_vendita = save($_POST['idiva_vendita']);
$gg_garanzia = save($_POST['gg_garanzia']);
$componente_filename = save($_POST['componente_filename']);
( $_POST['attivo'] == 'on' ) ? $attivo=1 : $attivo=0;
( $_POST['abilita_serial'] == 'on' ) ? $abilita_serial=1 : $abilita_serial=0;
( $_POST['servizio'] == 'on' ) ? $servizio=1 : $servizio=0;
( $_POST['ges_magazzino'] == 'on' ) ? $ges_magazzino=1 : $ges_magazzino=0;
$qta_colli = force_decimal($_POST['qta_colli']);
$note = save($_POST['note']);
$volume = force_decimal($_POST['volume']);
$peso_lordo = force_decimal($_POST['peso_lordo']);
$idfornitore = save($_POST['idfornitore']);
$id_ubicazione = save($_POST['id_ubicazione']);
$id_scansia = save($_POST['id_scansia']);
$id_reparto = save($_POST['id_reparto']);
$pro_barcode = save($_POST['pro_barcode']);
$pro_smax = save($_POST['pro_smax']);
$pro_lotto = save($_POST['pro_lotto']);
$cod_fornitore = save($_POST['cod_fornitore']);
// ricerca il conto da applicare
$rs_cat = $dbo->fetchArray("SELECT * FROM mg_categorie WHERE id=\"".$categoria."\"");
$id_conto = $rs_cat[0]['id_conto_e'];
$id_conto_u = $rs_cat[0]['id_conto_u'];
//Leggo la quantità attuale per capire se l'ho modificata
$rs = $dbo->fetchArray("SELECT qta FROM mg_articoli WHERE id=\"".$idarticolo."\"");
$old_qta = $rs[0]['qta'];
$movimento = $qta - $old_qta;
$query = "UPDATE mg_articoli SET codice=\"$codice\",".
"descrizione=\"$descrizione\",".
"idum=\"$idum\",".
"id_categoria=\"$categoria\",".
"id_sottocategoria=\"$subcategoria\",".
"qta=\"$qta\",".
"id_conto=\"$id_conto\",".
"id_conto_u=\"$id_conto_u\",".
"threshold_qta=\"$threshold_qta\",".
"prezzo_vendita=\"$prezzo_vendita\",".
"prezzo_acquisto=\"$prezzo_acquisto\",".
"idiva_vendita=\"$idiva_vendita\",".
"gg_garanzia=\"$gg_garanzia\",".
"volume=\"$volume\",".
"peso_lordo=\"$peso_lordo\",".
"componente_filename=\"$componente_filename\",".
"attivo=\"".$attivo."\", ".
"cod_fornitore=\"".$cod_fornitore."\", ".
"idfornitore=\"".$idfornitore."\", ".
"id_ubicazione=\"".$id_ubicazione."\", ".
"id_scansia=\"".$id_scansia."\", ".
"id_reparto=\"".$id_reparto."\", ".
"pro_barcode=\"".$pro_barcode."\", ".
"pro_smax=\"".$pro_smax."\", ".
"pro_lotto=\"".$pro_lotto."\", ".
"abilita_serial=\"".$abilita_serial."\", ".
"servizio=\"".$servizio."\", ".
"ges_magazzino=\"".$ges_magazzino."\", ".
"qta_colli=\"".$qta_colli."\", ".
"note=\"$note\"".
" WHERE id=\"".$idarticolo."\"";
$dbo->query( $query );
// log articolo
add_storico($idarticolo,"Eseguito modifica salvataggio articolo");
//Se ho modificato manualmente la quantità lo segno nel magazzino
if( $movimento > 0 )
$dbo->query( "INSERT INTO mg_movimenti( idarticolo, descrizione_articolo, qta, movimento, data ) VALUES( \"".$idarticolo."\", \"".$descrizione."\", \"".$movimento."\", \"Carico manuale\", NOW() )" );
else if( $movimento < 0 )
$dbo->query( "INSERT INTO mg_movimenti( idarticolo, descrizione_articolo, qta, movimento, data ) VALUES( \"".$idarticolo."\", \"".$descrizione."\", \"".$movimento."\", \"Scarico manuale\", NOW() )" );
/*
Salvataggio info componente (campo `contenuto`)
*/
$filename = save( $_POST['componente_filename'] );
$post_array = array();
foreach( $_POST as $impostazione_post=>$valore_impostazione_post ){
//Creo l'array con tutti i valori passati dal POST
$impostazione_post = str_replace( "_", " ", $impostazione_post );
$post_array[$impostazione_post] = save($valore_impostazione_post);
}
$nome = save($_POST['Nome']);
//Lettura info componente
if( file_exists($docroot."/files/my_impianti/".$filename) )
$contenuto = file_get_contents( $docroot."/files/my_impianti/".$filename );
else
$contenuto = '';
//Converto 'contenuto' di questo componente in un array
$ini_array = parse_ini_string( $contenuto, true );
//Creo variabile contenuto temporaneo
$contenuto_tmp = array();
//Resetto il valore di contenuto
$contenuto = '';
//Per ogni sezione dell'array estratto dal file ini
foreach ($ini_array as $sezione => $array_impostazioni){
$sezione = str_replace( "\r\n", "\n", $sezione );
$sezione = str_replace( "\n", "<br/>", $sezione );
$contenuto .= "[&quot;".$sezione."&quot;]\n";
//Per ogni impostazione
foreach ($array_impostazioni as $impostazione => $valore_impostazione){
//Quando trovo l'impostazione 'valore' la sostituisco con il valore passato dal post
if ($impostazione=='valore'){
$da = array($impostazione => $valore_impostazione);
$a = array($impostazione => $post_array[$sezione]);
$contenuto_tmp = array_replace($ini_array[$sezione], $da, $a);
foreach ($contenuto_tmp as $impostazione_tmp => $valore_impostazione_tmp){
$valore = $valore_impostazione_tmp;
$valore = str_replace( "\r\n", "\n", $valore );
$valore = str_replace( "\n", "<br/>", $valore );
$contenuto .= save($impostazione_tmp)." = &quot;".save($valore)."&quot;\n";
}
}
}
}
$dbo->query("UPDATE mg_articoli SET contenuto=\"".($contenuto)."\" WHERE id=\"".$idarticolo."\"");
//Upload file
$f = pathinfo( $_FILES['immagine01']['name'] );
$filename = $f['filename'].".jpg";
$tmp = $_FILES['immagine01']['tmp_name'];
$upload_dir = $docroot."/files/".$modules_info['Articoli']['module_dir'];
if( $_FILES['immagine01']['name'] != '' ){
$filename = unique_filename( $filename, $upload_dir );
if( create_thumbnails( $tmp, $filename, $upload_dir ) ){
$dbo->query("UPDATE mg_articoli SET immagine01=\"".$filename."\" WHERE id=\"".$idarticolo."\"");
}
else{
array_push( $_SESSION['warnings'], "Errore durante il caricamento del file in ".$upload_dir."!" );
}
}
//Eliminazione file
if( $html->form('immagine01','post') == 'deleteme' ){
$filename = $html->form('prev_immagine01', 'post');
$f = pathinfo($filename);
if( $dbo->query("UPDATE mg_articoli SET immagine01='' WHERE id=\"".$idarticolo."\"") ){
@unlink($upload_dir."/".$f['filename'].".".$f['extension']);
@unlink($upload_dir."/".$f['filename']."_thumb100.".$f['extension']);
@unlink($upload_dir."/".$f['filename']."_thumb250.".$f['extension']);
}
}
array_push( $_SESSION['infos'], "Informazioni salvate correttamente!" );
}
}
break;
//Aggiunta articolo
case "add":
if( $modules_info[$module_name]["permessi"] == 'rw' ){
$codice = save( $_POST['codice'] );
$descrizione = save( $_POST['descrizione'] );
$idiva_predefinita = get_var("Iva predefinita");
//Inserisco l'articolo solo se non esiste un altro articolo con stesso codice
if( $dbo->fetchNum("SELECT * FROM mg_articoli WHERE codice=\"$codice\"")==0 ){
$query = "INSERT INTO mg_articoli(codice, descrizione, attivo,id_conto,idiva_vendita) VALUES (\"$codice\", \"$descrizione\", 1,\"$id_conto_predefinito\",\"$idiva_predefinita\")";
$dbo->query($query);
array_push( $_SESSION['infos'], "Aggiunto un nuovo articolo!" );
$query = "SELECT * FROM mg_articoli WHERE codice=\"$codice\"";
$rs = $dbo->fetchArray($query);
$id_record = $rs[0]['id'];
// log articolo
add_storico($id_record,"Eseguito inserimento nuova articolo");
}
else{
array_push( $_SESSION['errors'], "Esiste gi&agrave; un articolo con questo codice!" );
}
}
break;
//Aggiunta prodotto
case "addprodotto":
if( $modules_info[$module_name]["permessi"] == 'rw' ){
//Per i 3 campi (lotto, serial, altro) leggo i numeri di partenza e arrivo e creo le combinazioni scelte
$idarticolo = $_POST['id_record'];
//Lotto
$lotto__start = save( $_POST['lotto_start'] );
$lotto__end = save( $_POST['lotto_end'] );
preg_match( "/(.*?)([\d]*$)/", $lotto__start, $m);
$lotto_start = intval($m[2]);
preg_match( "/(.*?)([\d]*$)/", $lotto__end, $m);
$lotto_end = intval($m[2]);
$n_lotti = abs( $lotto_end - $lotto_start ) + 1;
$lotto_prefix = str_replace( $lotto_end, "", $lotto__end );
$lotto_pad_length = strlen($lotto__end) - strlen($lotto_prefix);
//Serial
$serial__start = save( $_POST['serial_start'] );
$serial__end = save( $_POST['serial_end'] );
preg_match( "/(.*?)([\d]*$)/", $serial__start, $m);
$serial_start = intval($m[2]);
preg_match( "/(.*?)([\d]*$)/", $serial__end, $m);
$serial_end = intval($m[2]);
$n_serial = abs( $serial_end - $serial_start ) + 1;
$serial_prefix = str_replace( $serial_end, "", $serial__end );
$serial_pad_length = strlen($serial__end) - strlen($serial_prefix);
//Altro
$altro__start = save( $_POST['altro_start'] );
$altro__end = save( $_POST['altro_end'] );
preg_match( "/(.*?)([\d]*$)/", $altro__start, $m);
$altro_start = intval($m[2]);
preg_match( "/(.*?)([\d]*$)/", $altro__end, $m);
$altro_end = intval($m[2]);
$n_altro = abs( $altro_end - $altro_start ) + 1;
$altro_prefix = str_replace( $altro_end, "", $altro__end );
$altro_pad_length = strlen($altro__end) - strlen($altro_prefix);
$n_prodotti = $n_lotti*$n_serial*$n_altro;
//Creo la query per le combinazioni prodotto con ogni combinazione
$query = "INSERT INTO mg_prodotti( idarticolo, lotto, serial, altro, data ) VALUES";
//Contatore prodotti da inserire
$c = 0;
//Combinazione con "Lotto"
for( $l=0; $l<$n_lotti; $l++ ){
//Combinazione con "Serial"
for( $s=0; $s<$n_serial; $s++ ){
//Combinazione con "Altro"
for( $a=0; $a<$n_altro; $a++ ){
$insert = "( \"".$idarticolo."\", \"|lotto|\", \"|serial|\", \"|altro|\", NOW() )";
( $lotto__start != '' ) ? $this_lotto=$lotto_prefix.(str_pad($lotto_start+$l,$lotto_pad_length,"0",STR_PAD_LEFT)) : $this_lotto='';
$insert = str_replace( "|lotto|", $this_lotto, $insert );
( $serial__start != '' ) ? $this_serial=$serial_prefix.(str_pad($serial_start+$s,$serial_pad_length,"0",STR_PAD_LEFT)) : $this_serial='';
$insert = str_replace( "|serial|", $this_serial, $insert );
( $altro__start != '' ) ? $this_altro=$altro_prefix.(str_pad($altro_start+$a,$altro_pad_length,"0",STR_PAD_LEFT)) : $this_altro='';
$insert = str_replace( "|altro|", $this_altro, $insert );
//Verifico che questa combinazione non esista già
$np = $dbo->fetchNum("SELECT id FROM mg_prodotti WHERE idarticolo=\"".$idarticolo."\" AND lotto=\"".$this_lotto."\" AND serial=\"".$this_serial."\" AND altro=\"".$this_altro."\"");
if( $np==0 ){
$query .= $insert.", ";
$c++;
}
}
}
}
$query .= ".";
//Rimuovo "), ."
$query = str_replace( "), .", ")", $query );
//Eseguo l'inserimento!!!
if( $c>0 ){
if( $dbo->query($query) ){
//Movimento il magazzino se l'ho specificato nelle impostazioni
if( get_var("Movimenta il magazzino durante l\'inserimento o eliminazione dei lotti/serial number")==true ){
$dbo->query("UPDATE mg_articoli SET qta=qta+".$n_prodotti." WHERE id=\"".$idarticolo."\"");
add_movimento_magazzino( $idarticolo, $n_prodotti, "Carico magazzino da seriale ".$serial__start." a seriale ".$serial__end );
}
array_push( $_SESSION['infos'], "Aggiunti ".$n_prodotti." prodotti!" );
}
else{
array_push( $_SESSION['errors'], "Errore durante l&rsquo;inserimento!" );
}
}
}
break;
case "delprodotto":
if( $modules_info[$module_name]["permessi"] == 'rw' ){
$idprodotto = $_POST['idprodotto'];
$idarticolo = $_POST['id_record']; // serve per funzione add_movimento_magazzino
//Leggo info prodotto per descrizione mg_movimenti
$rs = $dbo->fetchArray("SELECT lotto, serial, altro FROM mg_prodotti WHERE id=\"".$idprodotto."\"");
$query = "DELETE FROM mg_prodotti WHERE id=\"".$idprodotto."\"";
if( $dbo->query($query) ){
//Movimento il magazzino se l'ho specificato nelle impostazioni
if( get_var("Movimenta il magazzino durante l\'inserimento o eliminazione dei lotti/serial number")==true ){
$dbo->query("UPDATE mg_articoli SET qta=qta-1 WHERE id=\"".$idarticolo."\"");
add_movimento_magazzino( $idarticolo, -1, "Eliminazione dal magazzino del prodotto con lotto ".$rs[0]['lotto'].", serial ".$rs[0]['serial'].", altro ".$rs[0]['altro'] );
}
array_push( $_SESSION['infos'], "Prodotto rimosso!" );
}
}
break;
case "duplica":
if( $modules_info[$module_name]["permessi"] == 'rw' ){
$cod_new = save($_POST['codice']);
$des_new = save( $_POST['descrizione'] );
if( $dbo->fetchNum("SELECT * FROM mg_articoli WHERE codice=\"$cod_new\"")==0 ){
$query="INSERT INTO `mg_articoli` (
`um`, `immagine01`, `note`, `qta`, `threshold_qta`, `prezzo_acquisto`, `prezzo_vendita`, `idiva_vendita`, `gg_garanzia`, `peso_lordo`, `volume`, `componente_filename`, `contenuto`,
`attivo`, `updated_at`, `created_at`, `updated_by`, `created_by`, `id_categoria`, `id_sottocategoria`, `abilita_serial`, `servizio`, `idum`, `idfornitore`, `id_ubicazione`, `id_reparto`, `id_scansia`, `pro_barcode`,
`pro_smax`, `pro_lotto`, `cod_fornitore`, `id_conto`, `id_conto_u` )
SELECT `um`, `immagine01`, `note`, `qta`, `threshold_qta`, `prezzo_acquisto`, `prezzo_vendita`, `idiva_vendita`, `gg_garanzia`, `peso_lordo`, `volume`, `componente_filename`, `contenuto`,
`attivo`, `updated_at`, `created_at`, `updated_by`, `created_by`, `id_categoria`, `id_sottocategoria`, `abilita_serial`, `servizio`, `idum`, `idfornitore`, `id_ubicazione`, `id_reparto`, `id_scansia`, `pro_barcode`,
`pro_smax`, `pro_lotto`, `cod_fornitore`, `id_conto`, `id_conto_u` FROM mg_articoli WHERE id ='".$id_record."'";
$id_tmp = $dbo->query($query);
$query = "UPDATE mg_articoli SET codice=\"$cod_new\",".
"descrizione=\"$des_new\"".
" WHERE id=\"".$id_tmp."\"";
$id_record = $id_tmp;
$dbo->query( $query );
array_push( $_SESSION['infos'], "Articolo duplicato!" );
// log articolo
add_storico($id_record,"Duplicato articolo con nuovo codice ".$cod_new );
}
else{
array_push( $_SESSION['errors'], "Esiste gi&agrave; un articolo con questo codice!" );
}
}
break;
case "delete":
if( $modules_info[$module_name]["permessi"] == 'rw' ){
//Leggo se ci sono documenti con questo articolo
$rs = $dbo->fetchArray("SELECT idarticolo FROM co_righe_documenti WHERE idarticolo='".$id_record."'");
if ( sizeof($rs) > 0 ) {
array_push( $_SESSION['errors'], "Articolo presente nei documenti. rimozione non consentita!" );
}
else{
$dbo->query("DELETE FROM mg_articoli WHERE id='$id_record'");
$dbo->query("DELETE FROM mg_movimenti WHERE idarticolo='$id_record'");
$dbo->query("DELETE FROM mg_prodotti WHERE idarticolo='$id_record'");
$dbo->query("DELETE FROM mg_articoli_magazzini WHERE idarticolo='$id_record'");
array_push( $_SESSION['infos'], "Articolo eliminato!" );
add_storico($id_record,"Articolo eliminato dal magazzino" );
}
}
break;
}
//Annullo le notifiche se le operazioni sono fatte via ajax
if( $html->form('ajax', 'post') == 'yes' ){
unset( $_SESSION['infos'] );
}
?>