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

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

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

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

$tPCFDI=getPCFDI($recibedoce_pagos_id);
$tNPCFDI=getNPCFDI($doce_uuid);


//Valido que el complemento no este cancelado
if($tPCFDI["status"] == "C"){
	?><script>$j_7.messager.alert("Error","El complemento esta cancelado.","error");</script><?exit;
}
//Valido que algun pago no este asinado a una notificación de pago.
if(!validaPagoDetalleNoAsignado($recibedoce_pagos_id)){
	?><script>$j_7.messager.alert("Error","El pago del complemento ya esta asignado a alg&uacute;n otro pago.","error");</script><?exit;
}
//Valido que algun pago no este asinado a una notificación de pago.
if(!validaNotificacionPagoNoAsignada($doce_uuid)){
	?><script>$j_7.messager.alert("Error","La notificaci&oacute;n ya tiene una relaci&oacute;n.","error");</script><?exit;
}
//Valido que el monto, moneda, tipo de cambio y formadepago sean iguales en el complemento y en la notificacion de pago.
$ban=false;
$errores="";
if($tPCFDI["tipocambiop"] != $tNPCFDI["tipocambio"]){
	$ban=true;
	$errores="<b>Tipo de Cambio:</b> ".$tPCFDI["tipocambiop"]." <b><font color='red'>diferente a</font></b> ".$tNPCFDI["tipocambio"]."<br/>";
}
if($tPCFDI["monedap"] != $tNPCFDI["moneda"]){
	$ban=true;
	$errores.="<b>Moneda:</b> ".$tPCFDI["monedap"]." <b><font color='red'>diferente a</font></b> ".$tNPCFDI["moneda"]."<br/>";
}
if($tPCFDI["monto"] != $tNPCFDI["total"]){
	$ban=true;
	$errores.="<b>Total:</b> ".$tPCFDI["monto"]." <b><font color='red'>diferente a</font></b> ".$tNPCFDI["total"]."<br/>";
}
if($tPCFDI["formadepago"] != $tNPCFDI["formadepago"]){
	$ban=true;
	$errores.="<b>Forma de Pago:</b> ".$tPCFDI["formadepago"]." <b><font color='red'>diferente a</font></b> ".$tNPCFDI["formadepago"]."<br/>";
}
if($ban){
	?><script>$j_7.messager.alert("Errores encontrados","<?=$errores?>","error");</script><?exit;
}

$qUpdate="update recibedoce_pagos_docto_relacionado set doce_uuid='$doce_uuid' where recibedoce_pagos_id='$recibedoce_pagos_id'";
if(!mysqli_query($conexion->CONEXION,$qUpdate)){
	?><script>$j_7.messager.alert("Error","Ocurrio un error al crear la relación. Intente nuevamente.","error");</script><?exit;
}

setBitacora($conexion, $_SESSION['usuario_p_prov_absa'], $_SESSION['rfc_cliente_p_prov_absa'], "UPDATE", "tabla recibedoce_pagos_docto_relacionado: agrega complemento pago", $qUpdate);

$tPagoDetalle = getPagoDetalle($recibedoce_pagos_id,$doce_uuid);
if($tPagoDetalle == 0){
	?><script>$j_7.messager.alert("Advertencia","Se hizo la relación del pago al complemento pero no se pudo verificar la relación documento por documento,<br/>La consulta no regreso los documentos del complemento.","warn");recargaExpediente();</script><?exit;
}
$conError=0;
for($i=0; $i < count($tPagoDetalle); $i++){
	$qRel = "select doce_uuid from pago_documentos_ref where uuidcfdirelacionado='".$tPagoDetalle[$i]["uuidcfdirelacionado"]."' and doce_uuid='$doce_uuid'";
	if(!$rRel = mysqli_query($conexion->CONEXION,$qRel)){
		$conError++;
		continue;
	}
	if(mysqli_num_rows($rRel) > 0){
		continue;
	}
	$qInsertCFDIRel = "insert into pago_documentos_ref set doce_UUID='$doce_uuid', uuidCFDIRelacionado='".$tPagoDetalle[$i]["uuidcfdirelacionado"]."', 
	Monto=".$tPagoDetalle[$i]["imppagado"].", NumParcialidad=".$tPagoDetalle[$i]["numparcialidad"].", MetodoDePago='".$tPagoDetalle[$i]["metododepago"]."',
	Moneda='".$tPagoDetalle[$i]["monedadr"]."', TipoCambio=".$tPagoDetalle[$i]["tipocambiodr"];
	if(!mysqli_query($conexion->CONEXION,$qInsertCFDIRel)){
		$conError++;
		continue;
	}
	setBitacora($conexion, $_SESSION['usuario_p_prov_absa'], $_SESSION['rfc_cliente_p_prov_absa'], "INSERT", "tabla pago_documentos_ref: inserta complemento de pago", $qInsertCFDIRel);
	if(mysqli_affected_rows($conexion->CONEXION) <= 0){
		$conError++;
	}
}
if($conError > 0){
	?><script>$j_7.messager.alert("Advertencia","Se hizo la relación del pago al complemento pero ocurrieron <?=$conError?> problema(s) al relacionar documento por documento.","warn");recargaExpediente();</script><?exit;
}else{
	?><script>$j_7.messager.alert("Informaci&oacute;n","Se ha logrado crear la referencia.","info");recargaExpediente();</script><?
}


function validaPagoDetalleNoAsignado($recibedoce_pagos_id){
	global $conexion;
	$qPCFDI = "select doce_uuid from recibedoce_pagos_docto_relacionado where recibedoce_pagos_id=$recibedoce_pagos_id";
	if(!$rPCFDI = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Error","Ocurrio un error al consultar el pago del complemento.","error")</script><?
	}
	if(mysqli_num_rows($rPCFDI) > 0){
		while($tmp = mysqli_fetch_array($rPCFDI,MYSQLI_ASSOC)){
			if(trim($tmp["doce_uuid"]) != ""){
				return false;
			}
		}
	}
	return true;
}
function getPagoDetalle($recibedoce_pagos_id,$doce_uuid){
	global $conexion;
	$qPCFDI = "select doce_uuid,imppagado,monedadr,tipocambiodr,numparcialidad,uuidcfdirelacionado,metododepago from recibedoce_pagos_docto_relacionado where recibedoce_pagos_id=$recibedoce_pagos_id and doce_uuid='$doce_uuid'";
	if(!$rPCFDI = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Advertencia","Se hizo la relación del pago al complemento pero no se pudo verificar la relación documento por documento,<br/>La consulta de documentos del complemento marco un error inesperado.","warn");recargaExpediente();</script><?exit;
	}
	if(mysqli_num_rows($rPCFDI) > 0){
		$rows = array();
		while($tmp = mysqli_fetch_array($rPCFDI,MYSQLI_ASSOC)){
			$rows[] = $tmp;
		}
		return $rows;
	}
	return 0;
}

function validaNotificacionPagoNoAsignada($doce_uuid){
	global $conexion;
	$qPCFDI = "select doce_uuid from recibedoce_pagos_docto_relacionado where doce_uuid='$doce_uuid'";
	if(!$rPCFDI = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Error","Ocurrio un error al consultar el pago del complemento.","error")</script><?
	}
	if(mysqli_num_rows($rPCFDI) > 0){
		return false;
	}
	return true;
}
function getRelacionesNotificacionPago($doce_uuid){
	global $conexion;
	$q = "select doce_uuid,uuidcfdirelacionado,monto,numparcialidad,moneda,tipocambio from pago_documentos_ref where doce_uuid='$doce_uuid'";
	if(!$r = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Error","Ocurrio un error al consultar el pago del complemento.","error")</script><?
	}
	$rows = array();
	if(mysqli_num_rows($r) > 0){
		while($t = mysqli_fetch_array($r,MYSQLI_ASSOC)){
			$rows[] = $t;
		}
		return $rows;
	}
	return 0;
}

function getPCFDI($recibedoce_pagos_id){
	global $conexion;
	$qPCFDI = "select rd.status,rdp.tipocambiop,rdp.monedap,rdp.monto,rdp.formadepago from recibedoce_pagos rdp inner join recibedoce rd ON rdp.recibedoce_uuid=rd.uuid where rdp.recibedoce_pagos_id=$recibedoce_pagos_id group by recibedoce_pagos_id";
	if(!$rPCFDI = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Error","Ocurrio un error al consultar el pago del complemento.","error")</script><?
	}
	$tPCFDI = mysqli_fetch_assoc($rPCFDI);
	return $tPCFDI;
}
function getNPCFDI($doce_uuid){
	global $conexion;
	$qPCFDI = "select total,tipocambio,moneda,adicionalB as formadepago from doce where adicionalA='$doce_uuid'";
	if(!$rPCFDI = mysqli_query($conexion->CONEXION,$qPCFDI)){
		?><script>$j_7.messager.alert("Error","Ocurrio un error al consultar el pago del complemento.","error")</script><?
	}
	$tPCFDI = mysqli_fetch_assoc($rPCFDI);
	return $tPCFDI;
}
?>