<?php
	
	
	function add_storico($idcontratto,$descrizione){
		global $dbo;
		$dbo->query("INSERT INTO zz_log_contratti( idcontratto, idutente,data_log,username,descrizione ) VALUES( \"".$idcontratto."\", \"".$_SESSION['idutente']."\",NOW(),\"".$_SESSION['username']."\",\"".$descrizione."\" )");
	}
	
	
	
	
function doc_crea_dacontratto( $id_record,$idtipodocumento,$sta_sucessivo  ){		
	global $dbo;		
	if( $id_record ){
		$rs = $dbo->fetchArray("SELECT * FROM co_contratti WHERE id=\"".$id_record."\"");
		$data = $rs[0]['data_accettazione'];
		$id_contratto=$id_record;			
		// ricerca se la numerazione e' progressiva o propria
			$numerazione_progressiva=get_var_tipodoc($idtipodocumento,'mod_num');
			$dir=get_var_tipodoc($idtipodocumento,'dir');
			$idconto=get_var_tipodoc($idtipodocumento,'idconto');
			$idpagamento_new=get_var_tipodoc($idtipodocumento,'idpagamento');
			$dir=get_var_tipodoc($idtipodocumento,'dir');		
			$id_gruppodoc=get_var_tipodoc($idtipodocumento,'id_gruppo_tipologia');
			$suffisso=get_var_tipodoc($idtipodocumento,'txt_suffisso');
			$suffisso_anno=get_var_tipodoc($idtipodocumento,'suffisso_anno');
			$idstato = get_var_tipodoc($idtipodocumento,'sta_apertura');

		if( $numerazione_progressiva==0) $numero = get_new_numerofattura( $data );	
		if( $numerazione_progressiva==1) $numero=get_new_numerofattura_multi($data,$idtipodocumento);									
		if( $dir=='entrata' ){
			if( $numerazione_progressiva==0) $numero_esterno = get_new_numerosecondariofattura( $data,$idtipodocumento );
			if( $numerazione_progressiva==1) $numero_esterno = get_new_numerosecondariofattura_multi( $data,$idtipodocumento );						
		}
		else{
			$numero_esterno = '';					
		}			
	
		if( $sta_sucessivo=='0' ){
			$idstatodocumento=$idstato;
		}
		else{
			$idstatodocumento=$sta_sucessivo;			
		}

		$numero_documento=$suffisso.$numero_esterno;
		if( $suffisso_anno==1) $numero_documento = $numero_documento."_".date("Y");
		
		
		
		$dbo->query("INSERT INTO co_documenti( numero_documento,id_gruppo_tipologia,id_contratto_doc,numero, numero_esterno, data, idanagrafica, idtipodocumento, idstatodocumento, idpagamento   ) 
		VALUES( \"".$numero_documento."\",\"".$id_gruppodoc."\",\"".$id_contratto."\",\"".$numero."\", \"".$numero_esterno."\", \"".$rs[0]['data_accettazione']."\", \"".$rs[0]['idanagrafica']."\", \"".$idtipodocumento."\" , '2', \"".$rs[0]['idpagamento']."\" )");
		$iddocumento = $dbo->last_inserted_id();
		// asegno iddocumento al contratto
		$dbo->query( "UPDATE co_contratti SET id_documento='.$iddocumento.'  WHERE id='".$id_contratto."'" );				
		//Inseriemnto posizione nel documento
		
		$rs_contratto = $dbo->fetchArray("SELECT id_tipocanone , nome FROM co_contratti WHERE id=\"".$id_contratto."\"");		
		$id_tipocontratto=$rs_contratto[0]['id_tipocanone'];
		$descrizione=$rs_contratto[0]['nome'];
		$rs = $dbo->fetchArray("SELECT costo_annuale FROM co_contratti_tipi WHERE id='".$id_tipocontratto."'");
		$subtot=$rs[0]['costo_annuale'];
		//Calcolo iva
		$idiva=get_var("Iva predefinita");
		$query = "SELECT * FROM co_iva WHERE id='".$idiva."'";
		$rs = $dbo->fetchArray($query);
		$iva = ($subtot)/100*$rs[0]['percentuale'];
		$iva_indetraibile = $iva/100*$rs[0]['indetraibile'];
		$desc_iva = $rs[0]['descrizione'];
		$sconto=0;
		$qta=1;
		
		$query = "INSERT INTO co_righe_documenti( iddocumento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, idconto)  
		VALUES( \"$iddocumento\", \"".$idiva."\", \"$desc_iva\", \"$iva\", \"$iva_indetraibile\", \"$descrizione\", \"$subtot\", \"$sconto\", \"$um\", \"$qta\",  
		 \"".$idconto."\" )";
		if( $dbo->query($query) ){
						
		}
		
		

	//	$id_record = $iddocumento;	
	//	return  $iddocumento;	
	}	
}



function get_new_numerosecondariofattura( $data ){
		global $dbo;
		global $dir;
		global $idtipodocumento;
		$dir="entrata";
		//DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."'
		$query = "SELECT numero_esterno FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime ( '+3 month' , strtotime ( $data) ))."' AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."') ORDER BY CAST(numero_esterno AS UNSIGNED) 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 fattura");

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


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

		return $numero_esterno;
	}

	
function get_new_numerosecondariofattura_multi( $data , $tipodoc ){
		global $dbo;
		global $dir;
		global $idtipodocumento;
		$dir="entrata";
		$id_gruppodoc=get_var_tipodoc($tipodoc,'id_gruppo_tipologia');

		
		if( $id_gruppodoc=='0' )
			$query = "SELECT numero_esterno FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data) )."'  
			AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."' and idtipodocumento='".$tipodoc."' )  ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1";
		else
			$query = "SELECT numero_esterno FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data) )."' and id_gruppo_tipologia='".$id_gruppodoc."' 
			AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."' )  ORDER BY CAST(numero_esterno AS UNSIGNED) 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_tipodoc($tipodoc,'var_formato_num');
		
		if( $numero_secondario=='' )
			$numero_secondario = $formato_numero_secondario;

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

		return $numero_esterno;
	}
	
	
	/**
	  * Funzione per generare un nuovo numero per la fattura
	  */
function get_new_numerofattura( $data ){
		global $dbo;
		global $dir;
		$dir="entrata";
		$query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1";
		$rs = $dbo->fetchArray($query);

		$numero = $rs[0]['max_numerofattura']+1;

		return $numero;
	}
	
function get_new_numerofattura_multi( $data , $tipodoc ){
		global $dbo;
		global $dir;
		$dir="entrata";
	
		$id_gruppodoc=get_var_tipodoc($tipodoc,'id_gruppo_tipologia');
		
		if( $id_gruppodoc=='0' )
			$query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' AND 
			idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."' and idtipodocumento='".$tipodoc."' )   ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1";
		else
			$query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' and id_gruppo_tipologia='".$id_gruppodoc."' AND 
			idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='".$dir."'  )   ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1";
		
		
		$rs = $dbo->fetchArray($query);


		$numero = $rs[0]['max_numerofattura']+1;

		return $numero;
	}
	
	

	
	
	
	/**
	  * 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!
	  * $idpreventivo	integer		id del preventivo
	  * $idarticolo		integer		id dell'articolo da inserire nel preventivo
	  * $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_inpreventivo( $idpreventivo, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $lotto='', $serial='', $altro='' ){
		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'];

		/*
			Ordine cliente
		*/
		if( $dir=='entrata' ){
			//Lettura iva dell'articolo
			$rs2 = $dbo->fetchArray("SELECT percentuale, indetraibile FROM co_iva WHERE id='".$idiva."'");
			$iva = $prezzo/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 co_righe_preventivi WHERE idarticolo='".$idarticolo."' AND idpreventivo='".$idpreventivo."' AND lotto=\"".$lotto."\" AND serial=\"".$serial."\" AND altro=\"".$altro."\"");


			//Inserisco la riga nell'ordine: se nell'ordine c'è già questo articolo incremento la quantità...
			if( sizeof($rs) > 0 ){
				$dbo->query("UPDATE co_righe_preventivi SET qta=qta+".$qta.", subtotale=subtotale+".$prezzo." WHERE id='".$rs[0]['id']."'");
			}

			//...altrimenti inserisco la scorta nell'ordine da zero
			else{
				$dbo->query("INSERT INTO co_righe_preventivi( idpreventivo, idarticolo, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, lotto, serial, altro ) VALUES ( '".$idpreventivo."', '".$idarticolo."', '".$idiva."', '".$iva."', '".$iva_indetraibile."', \"".$descrizione."\", '".$prezzo."', '".$um."', '".$qta."', \"".$lotto."\", \"".$serial."\", \"".$altro."\" )");
			}
		}
		
		
		
		/*
			Ordine fornitore
		*/
		else if( $dir=='uscita' ){
			
		}
	}
	
	
	/**
	  * Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino
	  * 	$idarticolo		integer		codice dell'articolo da scollegare dall'ordine
	  * 	$idordine	 	integer		codice dell'ordine da cui scollegare l'articolo
	  */
	function rimuovi_articolo_dapreventivo( $idarticolo, $idpreventivo, $idriga ){
		global $dbo;
		global $dir;
		
		//Leggo la quantità di questo articolo nell'ordine
		$query = "SELECT qta, subtotale FROM co_righe_preventivi WHERE id='".$idriga."'";
		$rs = $dbo->fetchArray($query);
		$qta = floatval( $rs[0]['qta'] );
		$subtotale = $rs[0]['subtotale'];


		//Elimino la riga dall'ordine
		$dbo->query("DELETE FROM co_righe_preventivi WHERE id=\"$idriga\"");
	}
	
	
	/**
	  * 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_preventivo( $idpreventivo, $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 co_righe_preventivi WHERE idpreventivo='$idpreventivo'";
		$rs = $dbo->fetchArray($query);
		if( $rs[0]['righe']>0 ){
			$totale_imponibile = get_imponibile_preventivo($idpreventivo);
			$totale_preventivo = get_totale_preventivo($idpreventivo);

			

			//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_preventivo/100*$rs[0]['percentuale'];
			$netto_a_pagare = $totale_preventivo-$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' ){
				
			}
			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;
			}
		
			//$dbo->query("UPDATE or_ordini SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo' WHERE id='$idordine'");
		}
		else{
			//$dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', sconto='0', rivalsainps='0' WHERE id='$idordine'");
		}
	}
	
	
	
	/**
	  * Restituisce lo stato dell'ordine in base alle righe
	  */
	function get_stato_preventivo( $idpreventivo ){
		global $dbo;

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

		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";
	}
	
	
	/**
	  * Aggiorna il budget del preventivo leggendo tutte le righe inserite
	  */
	function update_budget_preventivo( $idpreventivo ){
		global $dbo;
		
		//Totale articoli
		$rs = $dbo->fetchArray("SELECT SUM(subtotale) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=\"".$idpreventivo."\"");
		$totale_articoli = $rs[0]['totale'];
		
		//Totale costo ore, km e diritto di chiamata
		$rs = $dbo->fetchArray("SELECT SUM(costo_orario*ore_lavoro + costo_diritto_chiamata) AS totale FROM co_preventivi GROUP BY id HAVING id=\"".$idpreventivo."\"");
		$totale_lavoro = $rs[0]['totale'];
		
		//Aggiorno il budget su co_preventivi
		$dbo->query("UPDATE co_preventivi SET budget=\"".($totale_articoli + $totale_lavoro)."\" WHERE id=\"".$idpreventivo."\"");
	}

	
	/**
	  * Ricalcola i costi aggiuntivi in fattura (rivalsa inps, ritenuta d'acconto, marca da bollo)
	  * Deve essere eseguito ogni volta che si aggiunge o toglie una riga
	  * $iddocumento		int		ID della fattura
	  * $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_fattura( $iddocumento, $idrivalsainps='', $idritenutaacconto='', $bolli='' ){
		global $dbo;
		global $dir;
		 $dir='entrata';
		//Se ci sono righe in fattura faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
		$query = "SELECT COUNT(id) AS righe FROM co_righe_documenti WHERE iddocumento='$iddocumento'";
		$rs = $dbo->fetchArray($query);
		if( $rs[0]['righe']>0 ){
			$totale_imponibile = get_imponibile_fattura($iddocumento);
			$totale_fattura = get_totale_fattura($iddocumento);

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

			$query = "SELECT SUM(rivalsainps) AS rivalsainps, SUM(ritenutaacconto) AS ritenutaacconto FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='".$iddocumento."'";
			$rs = $dbo->fetchArray($query);
			$rivalsainps = $rs[0]['rivalsainps'];
			$ritenutaacconto = $rs[0]['ritenutaacconto'];

			if( $dir == "entrata" ){
				//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'];
			}

			else{
				//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'];
			}



			//Leggo la ritenuta d'acconto se c'è
			$totale_fattura = get_totale_fattura($iddocumento);

			$query = "SELECT percentuale FROM co_ritenutaacconto WHERE id='".$idritenutaacconto."'";
			$rs = $dbo->fetchArray($query);
			$netto_a_pagare = $totale_fattura - $ritenutaacconto;

			//Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
			$bolli = str_replace( ",", ".", $bolli);
			$bolli = floatval($bolli);
			
			

		
			//gestione marca da bollo
			$query = "SELECT marca_bollo , ges_marca FROM co_tipidocumento  LEFT JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='".$iddocumento."'";
			$rs_marca = $dbo->fetchArray($query);
			$val_bollo=$rs_marca[0]['marca_bollo'];
			$ges_bollo=$rs_marca[0]['ges_marca'];
		
			if( $dir=='uscita' ){
				if( $bolli!=0.00 ){
					$bolli = str_replace( ",", ".", $bolli );
					if( abs($bolli)>0 && abs($netto_a_pagare>$ges_bollo) )
							
						$marca_da_bollo = str_replace( ",", ".", $bolli );
					else
						$marca_da_bollo = 0.00;
				}
			}

			else{
				$bolli = str_replace( ",", ".", $val_bollo );
				if( abs($bolli)>0 && abs($netto_a_pagare)>abs($ges_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;
				
			
			}

			
			
			$dbo->query("UPDATE co_documenti SET ritenutaacconto='$ritenutaacconto', rivalsainps='".$rivalsainps."', iva_rivalsainps='".$iva_rivalsainps."', bollo='$marca_da_bollo' WHERE id='$iddocumento'");
		}

		else{
			$dbo->query("UPDATE co_documenti SET ritenutaacconto='0', bollo='0', rivalsainps='0', iva_rivalsainps='0' WHERE id='$iddocumento'");
		}
	}	
?>