<?
session_name('portal_absa');
session_start();
require("../../conexion/conectar.php");
require("../../libs/funciones.php");

$conexion = new CONDB();
$conexion->conectar();

if(!isset($_REQUEST["uuidEgreso"])){
	?><script>$j_7.messager.alert("Error","Faltan parametros","error.");</script><?exit;
}
$rfcemisor = $_SESSION['RFC_RECEPTOR_PORTAL'];

// if(!$TOLERANCIA_COMPENSADO_PAGADO = getINI("../../config.ini","TOLERANCIA_COMPENSADO_PAGADO=")){
	// $TOLERANCIA_COMPENSADO_PAGADO =.5;
// }

//Extraigo Configuracion General de notificaciones
$qConfig = "select notificar_dias,notificar_despuesde,notificar_repetirdias,notificar_correos,notificar_asunto,notificar_correos_cc,notificar_fecha_inicio,tolerancia_NPvsComplemento,tolerancia_NPvsFactura,tolerancia_FacturaPagada,tolerancia_CompensacionEgreso,tolerancia_tipoCambio from configpagina where rfc_receptor='".$rfcemisor."' limit 1";
if($rConfig = mysqli_query($conexion->CONEXION,$qConfig)){
	if(mysqli_num_rows($rConfig) > 0){
		$tConfig = mysqli_fetch_assoc($rConfig);
		$tConfig["tolerancia_NPvsComplemento"] = (float) $tConfig["tolerancia_NPvsComplemento"];
		$tConfig["tolerancia_NPvsFactura"] = (float) $tConfig["tolerancia_NPvsFactura"];
		$tConfig["tolerancia_FacturaPagada"] = (float) $tConfig["tolerancia_FacturaPagada"];
		$tConfig["tolerancia_CompensacionEgreso"] = (float) $tConfig["tolerancia_CompensacionEgreso"];
		$tConfig["tolerancia_tipoCambio"] = (float) $tConfig["tolerancia_tipoCambio"];
	}
}

$uuidEgreso = $_REQUEST["uuidEgreso"];
$uuidIngreso = $_REQUEST["uuidIngreso"];
$monto_enmoneda_padre = $_REQUEST["monto_enmoneda_padre"];
$monto_enmoneda_hijo = $_REQUEST["monto_enmoneda_hijo"];
$tipoCambioHijo = $_REQUEST["tipoCambioHijo"];
$tipoCambioPadre = $_REQUEST["tipoCambioPadre"];

//Traigo los datos del egreso - ingreso compensado
$tEgresoIngreso = getDatosEgresoIngreso();
//Traigo  los datos del ingreso
$tRecibeDoce = getDatosIngreso($uuidIngreso);
//Traigo el monto compensado al ingreso.
$montoTotalCompensadoIngreso = getMontoCompensadoIngreso($uuidIngreso);
//Traigo el monto compensado del egreso hacia varios documentos en pesos
$montoTotalCompensadoEgreso = getTotalCompensadoEgreso($uuidEgreso);
//Traigo los montos aplicados
$rMontosAplicados = getMontosAplicados($uuidIngreso);
$montosAplicadosTotalesComplemento = 0.00;
$montosAplicadosTotalesPago = 0.00;
if($rMontosAplicados != 0){
	$totalesPagados = getSumaMontosAplicados($rMontosAplicados);
	$montosAplicadosTotalesComplemento = $totalesPagados["sumaPagadoEnComplemento"];
	$montosAplicadosTotalesPago = $totalesPagados["sumaPagadoEnPago"];
}
// **********************************************************************************
// ***************** Inicia validacion de maximo total egreso. **********************
// **********************************************************************************
//Le resto al monto total compensado el monto anterior compensado hacia el ingreso
$montoTotalCompensadoEgreso = $montoTotalCompensadoEgreso - $tEgresoIngreso["monto_enmoneda_hijo"];
//Le sumo al monto total compensado el monto nuevo compensado hacia el ingreso
$montoTotalACompensarEgreso = $montoTotalCompensadoEgreso + $monto_enmoneda_hijo;
//Valido si el total compensado no sobre paso el total del egreso.
//echo round($montoTotalACompensarEgreso,1,PHP_ROUND_HALF_UP)." > ".round($tEgresoIngreso["total"],1,PHP_ROUND_HALF_UP);
if($montoTotalACompensarEgreso > $tEgresoIngreso["total"]){
	$diferencia = (float) $montoTotalACompensarEgreso - (float) $tEgresoIngreso["total"];
	
	if((float) $diferencia > (float) $tConfig["tolerancia_CompensacionEgreso"]){
		//if($tRecibeDoce["moneda"] == "MXN" && $tEgresoIngreso["tipomoneda"] == "MXN"){
		//if($tRecibeDoce["moneda"] == $tEgresoIngreso["tipomoneda"]){
			?><script>$j_6.messager.alert("Error","El monto total a compensar, a sobrepasado el total del documento del egreso.","error");</script><?
			exit;
		/*}else{
			$diferencia = $montoTotalACompensarEgreso - $tEgresoIngreso["total"];
			if($diferencia > $TOLERANCIA_COMPENSADO_PAGADO){
				?><script>$j_6.messager.alert("Error","El monto total a compensar a sobrepasado el total del documento del egreso.","error");</script><?
				exit;
			}
		}*/
	}
	
}

// **********************************************************************************
// ***************** Inicia validacion de maximo total ingreso. *********************
// **********************************************************************************
//Le resto al monto total aplicado al ingreso el monto anterior.
$montosAplicadosTotalesPago = $montosAplicadosTotalesPago - $tEgresoIngreso["monto_enmoneda_padre"];
//Le sumo al monto total aplicado al ingreso el monto nuevo
$montoTotalAAplicarIngreso = $montosAplicadosTotalesPago + $monto_enmoneda_padre;
//Le resto al total del ingreso el total compensado para sacar el total a pagar real del ingreso.
$totalRealAPagarIngreso = $tRecibeDoce["total"] - $montoTotalCompensadoIngreso;


if($montoTotalAAplicarIngreso > $totalRealAPagarIngreso){
	//Valido que no se haya pasado de la tolerancia y del total a pagar de la factura.
	$totalPositivo = $totalRealAPagarIngreso;
	if($totalRealAPagarIngreso < 0){
		$totalPositivo = $totalPositivo * -1;
	}
	$diferencia = $montoTotalAAplicarIngreso - $totalPositivo;
	
	if($diferencia > $tConfig["tolerancia_FacturaPagada"]){
		//if($tRecibeDoce["moneda"] == "MXN" && $tEgresoIngreso["tipomoneda"] == "MXN"){
		//if($tRecibeDoce["moneda"] == $tEgresoIngreso["tipomoneda"]){
			?><script>$j_6.messager.alert("Error","El monto total a aplicar, a sobrepasado el total del documento del ingreso.","error");</script><?
			exit;
		/*}else{
			$diferencia = $totalRealAPagarIngreso - $totalRealAPagarIngreso;
			if($diferencia > $TOLERANCIA_COMPENSADO_PAGADO){
				?><script>$j_6.messager.alert("Error","El monto total a compensar a sobrepasado el total del documento del ingreso.","error");</script><?
				exit;
			}
		}*/
	}
}

		
function getDatosEgresoIngreso(){
	global $conexion,$uuidEgreso,$uuidIngreso;
	$qEgreso = "select r.nombreemi,r.serie,r.folio,r.uuid,r.total,r.tipomoneda,r.tipocambio,c.uuidHijo,rc.uuid_padre,rc.monto_enmoneda_padre,rc.monto_enmoneda_hijo,rc.tipocambio_padre,rc.tipocambio_hijo
	from recibedoce r left join cfdirelacionados c on c.uuidPadre = r.uuid
	left join
	recibedoce_compensacion rc on rc.uuid_padre=c.uuidHijo where r.uuid='$uuidEgreso'  and (rc.uuid_padre='$uuidIngreso' or rc.uuid_padre is null) limit 1;";
	if(!$rEgreso = mysqli_query($conexion->CONEXION,$qEgreso)){
		?><script>$j_6.messager.alert("Error","Ocurrio un error al consultar el documento de egreso.<br/>Intente nuevamente.","error");</script><?exit;
	}
	if(mysqli_num_rows($rEgreso) > 0){
		$tEgreso = mysqli_fetch_assoc($rEgreso);
		return $tEgreso;
	}else{
		?><script>$j_6.messager.alert("Error.","No se encontro el documento de egreso.<br/>Intente nuevamente.","error");</script><?exit;
	}
}
function getMontoCompensadoIngreso($uuid){
	global $conexion;
	$qMontosCompensados = "select sum(monto_enmoneda_padre) as totalCompensadoIngreso from recibedoce_compensacion where uuid_padre='$uuid' group by uuid_padre";
	if(!$rMontosCompensados = mysqli_query($conexion->CONEXION,$qMontosCompensados)){
		?><script>$j_6.messager.alert("Error","Ocurrio un error al consultar los documentos.","error.");</script><?exit;
	}
	if(mysqli_num_rows($rMontosCompensados) <= 0){
		return 0.00;
	}
	$tMontosCompensados = mysqli_fetch_assoc($rMontosCompensados);
	return $tMontosCompensados["totalCompensadoIngreso"];
}
function getTotalCompensadoEgreso($uuid){
	global $conexion;
	$qEgresoCompensado="select sum(monto_enmoneda_hijo) as totalCompensadoEgreso from recibedoce_compensacion where uuid_hijo='$uuid' group by uuid_hijo";
	if(!$rEgresoCompensado = mysqli_query($conexion->CONEXION,$qEgresoCompensado)){
		?><script>$j_6.messager.alert("Error","Ocurrio un error al consultar el monto total compensado del egreso.<br/>Intente nuevamente.","error");</script><?exit;
	}
	$suma=0.00;
	if(mysqli_num_rows($rEgresoCompensado) > 0){
		$tEgresoCompensado = mysqli_fetch_assoc($rEgresoCompensado);
		return $tEgresoCompensado["totalCompensadoEgreso"];	
	}
	return 0;
}
function getDatosIngreso($uuid){
	global $conexion;
	$qRecibeDoce = "select rfcemisor,serie,folio,uuid,tipomoneda as moneda,tipocambio,nombreemi,total from recibedoce where uuid='$uuid'";
	if(!$rRecibeDoce = mysqli_query($conexion->CONEXION,$qRecibeDoce)){
		?><script>$j_6.messager.alert("Error","Ocurrio un error al consultar el documento de ingreso.","error.");</script><?exit;
	}
	if(mysqli_num_rows($rRecibeDoce) <= 0){
		?><script>$j_6.messager.alert("Error","No se encontraron documentos.","error.");</script><?exit;
	}
	$tRecibeDoce = mysqli_fetch_assoc($rRecibeDoce);
	return $tRecibeDoce;
}

function getMontosAplicados($uuid){
	global $conexion;
	$qMontosAplicados = "select d.serie as Dserie,d.folio as Dfolio,d.adicionalA as Duuid,d.total as Dtotal,pdr.uuidcfdirelacionado,pdr.monto as PDRmontoPago,pdr.numparcialidad as PDRnumparcialidad,pdr.tipocambio as PDRtipocambio,pdr.moneda as PDRmoneda,
	rpdr.tipocambiodr as RPDRtipocambio,rpdr.monedadr as RPDRmoneda,rpdr.imppagado as RPDRimpagado,rpdr.NumParcialidad as RPDRnumparcialidad,
	r.nombreemi,r.serie,r.folio,
	rdp.MonedaP as RDPmoneda,rdp.Monto as RDPmonto,rdp.recibedoce_UUID,rdp.TipoCambioP as RDPtipocambio
	from 
	doce d inner join
	pago_documentos_ref pdr ON d.adicionalA=pdr.doce_uuid
	left join recibedoce_pagos_docto_relacionado rpdr 
	ON pdr.doce_uuid = rpdr.doce_uuid and pdr.uuidcfdirelacionado = rpdr.uuidcfdirelacionado and (pdr.numparcialidad = rpdr.numparcialidad or pdr.numparcialidad <> rpdr.numparcialidad)
	left join recibedoce_pagos rdp ON rpdr.recibedoce_pagos_id = rdp.recibedoce_pagos_id 
	left join recibedoce r on rpdr.uuidcfdirelacionado = r.uuid where pdr.uuidCFDIRelacionado='$uuid'";
	if(!$rMontosAplicados = mysqli_query($conexion->CONEXION,$qMontosAplicados)){
		//echo mysqli_real_escape_string($conexion->CONEXION,mysqli_error($conexion->CONEXION));
		?><script>$j_6.messager.alert("Error","Ocurrio un error al consultar los montos aplicados.","error.");</script><?exit;
	}
	if(mysqli_num_rows($rMontosAplicados) <= 0){
		return 0;
	}
	
	return $rMontosAplicados;
}
function getSumaMontosAplicados($result){
	$totalesPagados["sumaPagadoEnComplemento"] = 0.00;
	$totalesPagados["sumaPagadoEnPago"] = 0.00;
	while($tResult = mysqli_fetch_array($result,MYSQLI_ASSOC)){
		$totalesPagados["sumaPagadoEnComplemento"]+=$tResult["RPDRimpagado"];
		$totalesPagados["sumaPagadoEnPago"]+=$tResult["PDRmontoPago"];
	}
	return $totalesPagados;
}
?>











