<?php
	include_once(__DIR__."/../../core.php");

	/**
	  * Funzione per generare un nuovo numero per la fattura
	  */
	function get_new_numeroordine( $data ){
		global $dbo;
		global $dir;

		$query = "SELECT numero AS max_numeroordine FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' AND idtipoordine IN(SELECT id FROM or_tipiordine WHERE dir='".$dir."') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1";
		$rs = $dbo->fetchArray($query);
		$numero = $rs[0]['max_numeroordine']+1;

		return $numero;
	}
	
	
	/**
	  * Funzione per calcolare il numero secondario successivo utilizzando la maschera dalle impostazioni
	  */
	function get_new_numerosecondarioordine( $data ){
		global $dbo;
		global $dir;
	
	
	//	$query = "SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime ( '+3 month' , strtotime ( $data) ))."'  ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1";
		$query = "SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."'  ORDER BY (numero_esterno) DESC LIMIT 0,1";
		
		$rs = $dbo->fetchArray($query);
		$numero_secondario = $rs[0]['numero_esterno'];

		//Calcolo il numero secondario se stabilito dalle impostazioni e se documento di vendita
		$formato_numero_secondario = get_var("Formato numero secondario ordine");

		if( $numero_secondario=='' )
			$numero_secondario = $formato_numero_secondario;


		if( $formato_numero_secondario!='' )
			$numero_esterno = get_next_code( $numero_secondario, 1, $formato_numero_secondario );
		else
			$numero_esterno = '';

		return $numero_esterno;
	}

	
	
	/**
	  * Calcolo imponibile ordine (totale_righe - sconto)
	  */
	function get_imponibile_ordine($idordine){
		global $dbo;
		
		$query = "SELECT SUM(subtotale-sconto) AS imponibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
		$rs = $dbo->fetchArray($query);
		return $rs[0]['imponibile'];
	}
	
	
	/**
	  * Calcolo totale ordine (imponibile + iva)
	  */
	function get_totale_ordine($idordine){
		global $dbo;
		
		//Sommo l'iva di ogni riga al totale
		$query = "SELECT SUM(iva) AS iva FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
		$rs = $dbo->fetchArray($query);
		
		//Aggiungo la rivalsa inps se c'è
		$query2 = "SELECT rivalsainps FROM or_ordini WHERE id='".$idordine."'";
		$rs2 = $dbo->fetchArray($query2);
		return get_imponibile_ordine($idordine)+$rs[0]['iva']+$rs2[0]['rivalsainps'];
	}
	
	
	/**
	  * Calcolo netto a pagare ordine (totale - iva)
	  */
	function get_netto_ordine($idordine){
		global $dbo;
		
		$query = "SELECT ritenutaacconto,bollo FROM or_ordini WHERE id='".$idordine."'";
		$rs = $dbo->fetchArray($query);
		return get_totale_ordine($idordine)-$rs[0]['ritenutaacconto']+$rs[0]['bollo'];
	}
	
	
	/**
	  * Calcolo iva detraibile ordine
	  */
	function get_ivadetraibile_ordine($idordine){
		global $dbo;

		$query = "SELECT SUM(iva)-SUM(iva_indetraibile) AS iva_detraibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
		$rs = $dbo->fetchArray($query);
		return $rs[0]['iva_detraibile'];
	}
	
	
	/**
	  * Calcolo iva indetraibile ordine
	  */
	function get_ivaindetraibile_ordine($idordine){
		global $dbo;

		$query = "SELECT SUM(iva_indetraibile) AS iva_indetraibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
		$rs = $dbo->fetchArray($query);
		return $rs[0]['iva_indetraibile'];
	}



	/**
	  * Questa funzione aggiunge un articolo nell'ordine. E' comoda quando si devono inserire
	  * degli interventi con articoli collegati o preventivi che hanno interventi con articoli collegati!
	  * $iddocumento	integer		id dell'ordine
	  * $idarticolo		integer		id dell'articolo da inserire nell'ordine
	  * $idiva			integer		id del codice iva associato all'articolo
	  * $qta			float		quantità dell'articolo nell'ordine
	  * $prezzo			float		prezzo totale degli articoli (prezzounitario*qtà)
	  */
	function add_articolo_inordine( $idordine, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto=0, $lotto='', $serial='', $altro='' , $tipo_sconto ,$sconto_prc,$sconto_extra,$sconto_extra1  ){
		global $dbo;
		global $dir;
		
		
		//Lettura unità di misura dell'articolo
		//$query = "SELECT valore FROM mg_unitamisura WHERE id=(SELECT idum FROM mg_articoli WHERE id='".$idarticolo."')";
		//$rs = $dbo->fetchArray($query);
		//$um = $rs[0]['valore'];
		
		
		$query = "SELECT um FROM mg_articoli WHERE id='".$idarticolo."'";
		$rs = $dbo->fetchArray($query);
		$um = $rs[0]['um'];
		
		
		 if( $dir=='uscita' ){
			//Lettura iva dell'articolo
			$rs2 = $dbo->fetchArray("SELECT percentuale, indetraibile FROM co_iva WHERE id='".$idiva."'");
			$iva = ($prezzo-$sconto)/100*$rs2[0]['percentuale'];
			$iva_indetraibile = $iva/100*$rs2[0]['indetraibile'];


			//Verifico se nell'ordine c'è già questo articolo allo stesso prezzo unitario
			$rs = $dbo->fetchArray("SELECT id, qta FROM or_righe_ordini WHERE idarticolo='".$idarticolo."' AND idordine='".$idordine."' AND lotto=\"".$lotto."\" AND serial=\"".$serial."\" AND altro=\"".$altro."\" AND sconto=\"".$sconto."\"");
		
		
			//Inserisco la riga nell'ordine: se nell'ordine c'è già questo articolo incremento la quantità e l'iva...
			if( sizeof($rs) > 0 ){
				$dbo->query("UPDATE or_righe_ordini SET qta=qta+".$qta.", subtotale=subtotale+".$prezzo.", iva=iva+".$iva.", iva_indetraibile=iva_indetraibile+".$iva_indetraibile." WHERE id='".$rs[0]['id']."'");
			}

			//...altrimenti inserisco la scorta nell'ordine da zero
			else{
				$dbo->query("INSERT INTO or_righe_ordini( idordine, idarticolo, idiva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, lotto, serial, altro ,tipo_sconto , sconto_primo,sconto_extra,sconto_extra1 ) VALUES 
				( '".$idordine."', '".$idarticolo."', '".$idiva."', '".$iva."', '".$iva_indetraibile."', \"".$descrizione."\", '".$prezzo."', \"".$sconto."\", '".$um."', '".$qta."', \"".$lotto."\", \"".$serial."\", \"".$altro."\" 
				,\"".$tipo_sconto."\",\"".$sconto_prc."\" ,\"".$sconto_extra."\", \"".$sconto_extra1."\")");
			}
		}
	}
	
	
	/**
	  * Questa funzione rimuove un articolo dall'ordine
	  * 	$idarticolo		integer		codice dell'articolo da scollegare dall'ordine
	  * 	$idordine	 	integer		codice dell'ordine da cui scollegare l'articolo
	  * 	$idrigaordine 	integer		id della riga ordine da rimuovere
	  */
	function rimuovi_articolo_daordine( $idarticolo, $idordine, $idrigaordine ){
		global $dbo;
		global $dir;
		// ricerco eventuali collegamenti con ordine cliente
		$query = "SELECT idriga_doc FROM or_righe_ordini WHERE id='".$idrigaordine."'";
		$rs = $dbo->fetchArray($query);
		if($rs[0]['idriga_doc'] != '0' ){
			$dbo->query("UPDATE co_righe_documenti SET idordine='0' WHERE id='".$rs[0]['idriga_doc']."'");
		}
		//Elimino la riga dall'ordine
		$dbo->query("DELETE FROM `or_righe_ordini` WHERE id=\"".$idrigaordine."\"");
	}
	
	
	/**
	  * Ricalcola i costi aggiuntivi in ordine (rivalsa inps, ritenuta d'acconto, marca da bollo)
	  * Deve essere eseguito ogni volta che si aggiunge o toglie una riga
	  * $idordine				int		ID del ordine
	  * $idrivalsainps		int		ID della rivalsa inps da applicare. Se omesso viene utilizzata quella impostata di default
	  * $idritenutaacconto	int		ID della ritenuta d'acconto da applicare. Se omesso viene utilizzata quella impostata di default
	  * $bolli				float	Costi aggiuntivi delle marche da bollo. Se omesso verrà usata la cifra predefinita
	  */
	function ricalcola_costiagg_ordine( $idordine, $idrivalsainps='', $idritenutaacconto='', $bolli='' ){
		global $dbo;
		global $dir;

		//Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
		$query = "SELECT COUNT(id) AS righe FROM or_righe_ordini WHERE idordine='$idordine'";
		$rs = $dbo->fetchArray($query);
		if( $rs[0]['righe']>0 ){
			$totale_imponibile = get_imponibile_ordine($idordine);
			$totale_ordine = get_totale_ordine($idordine);

			//Leggo gli id dei costi aggiuntivi
			if( $dir=='uscita' ){
				$query2 = "SELECT idrivalsainps, idritenutaacconto, bollo FROM or_ordini WHERE id='$idordine'";
				$rs2 = $dbo->fetchArray($query2);
				$idrivalsainps = $rs2[0]['idrivalsainps'];
				$idritenutaacconto = $rs2[0]['idritenutaacconto'];
				$bollo = $rs2[0]['bollo'];
			}

			//Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
			if( $dir=='entrata' ){
				if( $idrivalsainps!='0' )
					$idrivalsainps = get_var("Percentuale rivalsa INPS");
			}

			$query = "SELECT percentuale FROM co_rivalsainps WHERE id='".$idrivalsainps."'";
			$rs = $dbo->fetchArray($query);
			$rivalsainps = $totale_imponibile/100*$rs[0]['percentuale'];
		
			//Aggiorno la rivalsa inps
			$dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id='$idordine'");


			//Leggo la ritenuta d'acconto se c'è
			$totale_ordine = get_totale_ordine($idordine);

			//Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
			if( $idritenutaacconto!='0' ){
				if( $dir=='entrata' ){
					$idritenutaacconto = get_var("Percentuale ritenuta d'acconto");
				}
			}


			$query = "SELECT percentuale FROM co_ritenutaacconto WHERE id='".$idritenutaacconto."'";
			$rs = $dbo->fetchArray($query);
			$ritenutaacconto = $totale_ordine/100*$rs[0]['percentuale'];
			$netto_a_pagare = $totale_ordine-$ritenutaacconto;

			//Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
			$bolli = str_replace( ",", ".", $bolli);
			$bolli = floatval($bolli);
			if( $dir=='uscita' ){
				if( $bolli!=0.00 ){
					$bolli = str_replace( ",", ".", $bolli );
					if( abs($bolli)>0 && abs($netto_a_pagare>get_var("Soglia minima per l'applicazione della marca da bollo")) )
						$marca_da_bollo = str_replace( ",", ".", $bolli );
					else
						$marca_da_bollo = 0.00;
				}
			}
			else{
				$bolli = str_replace( ",", ".", get_var("Importo marca da bollo") );
				if( abs($bolli)>0 && abs($netto_a_pagare)>abs(get_var("Soglia minima per l'applicazione della marca da bollo")) )
					$marca_da_bollo = str_replace( ",", ".", $bolli );
				else
					$marca_da_bollo = 0.00;
				
				//Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
				if( $netto_a_pagare<0 )
					$marca_da_bollo *= -1;
			}
			
			
			//Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
			$qi = "SELECT percentuale FROM co_iva WHERE id='".get_var("Iva predefinita")."'";
			$rsi = $dbo->fetchArray($qi);
			$iva_rivalsainps = $rivalsainps/100*$rsi[0]['percentuale'];
			
			
		
			$dbo->query("UPDATE or_ordini SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo', iva_rivalsainps='".$iva_rivalsainps."' WHERE id='$idordine'");
		}
		else{
			$dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', rivalsainps='0' WHERE id='$idordine'");
		}
	}
	
	
	
	/**
	  * Restituisce lo stato dell'ordine in base alle righe
	  */
	function get_stato_ordine( $idordine ){
		global $dbo;

		$rs = $dbo->fetchArray("SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'");

		if( $rs[0]['qta_evasa'] > 0 ){
			if( $rs[0]['qta'] > $rs[0]['qta_evasa'] )
				return "Parzialmente evaso";

			else if( $rs[0]['qta'] == $rs[0]['qta_evasa'] )
				return "Evaso";
		}

		else
			return "Non evaso";
	}
	
	function storico_transazioni($iddocumento){	
		global $dbo;
		$rw = $dbo->fetchArray( "select  * from or_ordini_transazioni where idpadre='".$iddocumento."'");
		for($i = 0; $i < sizeof($rw); $i ++) {				
			$sale_id=$rw[$i][idfiglio];	
			$data_transazione=$rw[$i][data_transazione];
			$data_transazione=date("d/m/Y H:i:s", strtotime($data_transazione));
			$rw_transazione = $dbo->fetchArray( "select  *  from co_documenti where id='".$sale_id."'  ");								
			$rw_tot = $dbo->fetchArray( "select  SUM(subtotale - sconto + iva + rivalsainps - ritenutaacconto) as totale  FROM co_righe_documenti  where iddocumento = $sale_id ");				
			$customer_name=username_name($_SESSION['idutente'],"username");
			$descrizione=get_var_tipodoc2($sale_id,"descrizione");
			$num_cod=$rw_transazione[0]['numero_documento'];
			$date_added=$rw_transazione[0]['data'];
			
			list($date,$hora)=explode(" ",$date_added);
			list($Y,$m,$d)=explode("-",$date);
			$data=$d."/".$m."/".$Y;
			$total=$rw_tot[0]['totale'] +$rw_transazione[$i]['bollo'] + $rw_transazione[$i]['iva_rivalsainps'] ;
			
			?>
		<tr>	
				<td><a class='btn btn-sm btn-info' href="editor.php?id_module=14&id_record=<?php echo $sale_id;?>"><i class='fa fa-search'></a></td>
			<td><?php echo $customer_name;?></td>
			<td><?php echo $data_transazione;?></td>			
			<td><?php echo $num_cod;?></td>
			<td><?php echo $descrizione;?></td>
			<td><?php echo $data;?></td>
			
			<td class='text-right'><?php echo number_format($total,2);?></td>
		</tr>
			<?php
				;
		}
	}
	
	
?>
