<?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'] );
}
?>