<?php
session_name('portal_absa');
session_start();
if(!isset($_SESSION['usuario_p_prov_absa']) || trim($_SESSION['usuario_p_prov_absa']) == "" || trim(strtoupper($_SESSION["URL_PORTAL"]."admin.php")) != trim(strtoupper($_SERVER['HTTP_REFERER']))){
	?><script>window.location.href="<?=$_SESSION["URL_PORTAL"]."index.php"?>"</script><?
	exit;
}

require_once('../../WS/lib/nusoap.php');
require_once "../../conexion/conectar.php";
require_once "../../libs/funciones.php";
require_once "../../clases/wsUtil.class.php";

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

$tipoCancelacion = "T";
if(trim(strtoupper($_SESSION["TIPO_CANCELACION"])) == "P"){
	$tipoCancelacion = "P";
}

$wsUtil = new wsUtil($tipoCancelacion);

$accion = $_REQUEST["accion"];
$rfcreceptor = $_REQUEST["rfcreceptor"];
$uuid = $_REQUEST["uuid"];

if(strtoupper($_SESSION["PROVISION_DE_PAGOS"]) == "SI"){
	$qUUID = "select bloqueadoPP from recibedoce where uuid='$uuid'";
	if(!$rUUID = mysqli_query($conexion->CONEXION,$qUUID)){
		echo "Error: Ocurrio un error al consultar el uuid.";
		exit;
	}
	
	if(mysqli_num_rows($rUUID) > 0){
		$tUUID = mysqli_fetch_assoc($rUUID);
		if($tUUID["bloqueadoPP"] === "1"){
			echo "Error: El documento seleccionado ya esta provisionado para pago.";
			exit;
		}
	}
}


// Prueba de cancelacion externo --- Solo para pruebas

// if($_SESSION["CANCELACION_WSUTILQUERIES"] == "SI"){
	// $wsUtil->cancelaBDExterna("gtgt");
	// if($wsUtil->ERROR_MESSAGE != ""){
		// echo "Ocurrio un error al ejecutar la actualización de status a la base de datos externa.";
		// writeLog("Ocurrio un error al ejecutar la actualización de status a la base de datos externa. Error: ".$wsUtil->ERROR_MESSAGE);
		// return false;
	// }
	// if($wsUtil->RESPONSE->status == 0){
		// echo "<br/>Se ha actualizado correctamente el status en la base de datos externa.";
	// }else{
		// echo "<br/>Ocurrio un error al actualizar el status en la base de datos externa. Error: ".$wsUtil->RESPONSE->mensaje;
	// }
	// exit;
// }
// Prueba de cancelacion externo

$qR = "select cerPass,cerB64,keyB64 from receptor where rfc='$rfcreceptor'";
if(!$rReceptor = mysqli_query($conexion->CONEXION,$qR)){
	echo "Error: Ocurrio un error al consultar la información del receptor. Intente nuevamente.";
	exit;
}
if(mysqli_num_rows($rReceptor) <= 0){
	echo "Error: No se encontro la configuración del receptor.";
	exit;
}
$tR = mysqli_fetch_assoc($rReceptor);


$cer = $tR["cerB64"];
$key = $tR["keyB64"];
$pass_cer = Encripta($tR["cerPass"],1);

// $cer = base64_encode(file_get_contents($_FILES['cer']['tmp_name']));
// $key = base64_encode(file_get_contents($_FILES['key']['tmp_name']));
// $pass_cer = $_REQUEST["pass_cer"];
	
	/*
	{
	   "statusWS": 200,
	   "errorWS": "";
	   "codStatusSAT": "1000";
	   "statusSAT": "success";
	   "mensajeErrorSAT": "";
	   "estatusUUIDSAT": "1001";
	   "descripcionEstatusUUIDSAT": "Petición de respuesta exitosa. No existen peticiones de cancelación en espera de respuesta para el uuid.";
	   "acuseSAT": "<acuse....../>";
	}
	*/
	
	if($wsUtil->aceptarRechazarCancelacion($rfcreceptor,$uuid,$accion,$pass_cer,$cer,$key) !== false){
		if($wsUtil->RESPONSE->statusWS != 200){
			echo "Error: ".htmlentities($wsUtil->RESPONSE->errorWS,ENT_QUOTES);
			exit;
		}
		
		if($wsUtil->RESPONSE->codStatusSAT == "1000" || $wsUtil->RESPONSE->statusSAT == "success"){
			$q = "insert into acuses_cancelacion_cfdi set uuid='$uuid', rfc='$rfcreceptor', acuse='".mysqli_real_escape_string($conexion->CONEXION,$wsUtil->RESPONSE->acuseSAT)."' on duplicate key update acuse='".mysqli_real_escape_string($conexion->CONEXION,$wsUtil->RESPONSE->acuseSAT)."'";

			if(!mysqli_query($conexion->CONEXION,$q)){
				echo "Error: Ocurrio un error al guardar el acuse.";
			}
			
			echo htmlentities($wsUtil->RESPONSE->acuseSAT,ENT_QUOTES);
			
			if($wsUtil->RESPONSE->estatusUUIDSAT == "1000"){
				echo "<br/><br/>Petición de respuesta exitosa.";
				updateBD($uuid);
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1001"){
				echo "<br/><br/>Petición de respuesta exitosa.<br/>No existen peticiones de cancelación en espera de respuesta para el uuid.";
				updateBD($uuid);
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1002"){
				echo "<br/><br/>Ya se recibió una respuesta para la petición de cancelación del uuid.";
				updateBD($uuid);
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1003"){
				echo "<br/><br/>Sello No Corresponde al RFC Receptor.";
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1004"){
				echo "<br/><br/>Existen más de una petición de cancelación para el mismo uuid.";
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1005"){
				echo "<br/><br/>El uuid es nulo no posee el formato correcto.";
			}elseif($wsUtil->RESPONSE->estatusUUIDSAT == "1006"){
				echo "<br/><br/>Se rebaso el número máximo de solicitudes permitidas.";
			}
		}else{
			echo "<br/><br/>Error: ".htmlentities($wsUtil->RESPONSE->mensajeErrorSAT,ENT_QUOTES)." -> ".htmlentities($wsUtil->RESPONSE->descripcionEstatusUUIDSAT,ENT_QUOTES);
		}
	}else{
		echo "Ocurrio un error al ejecutar la petición: ".htmlentities($wsUtil->RESPONSE->errorWS,ENT_QUOTES);
	}
	
function updateBD($uuid){
	global $conexion,$accion,$wsUtil;
	if($accion == "Aceptacion"){
		$qU = "update recibedoce set status = 'C' where uuid='$uuid'";
		if(!mysqli_query($conexion->CONEXION,$qU)){
			echo "Ocurrio un error al actualizar el status de cancelado";
			writeLog("Ocurrio un error al actualizar el status de cancelado");
		}
		if($_SESSION["CANCELACION_WSUTILQUERIES"] == "SI"){
			$wsUtil->cancelaBDExterna($uuid);
			if($wsUtil->ERROR_MESSAGE != ""){
				echo "Ocurrio un error al ejecutar la actualización de status a la base de datos externa.";
				writeLog("Ocurrio un error al ejecutar la actualización de status a la base de datos externa. Error: ".$wsUtil->ERROR_MESSAGE);
				return false;
			}
			if($wsUtil->RESPONSE->status = 0){
				echo "<br/>Se ha actualizado correctamente el status en la base de datos externa.";
			}else{
				echo "<br/>Ocurrio un error al actualizar el status en la base de datos externa. Error: ".$wsUtil->RESPONSE->mensaje;
			}
		}
	}
	$qI = "update uuid_pendientes_cancelacion set status='1' where uuid='$uuid'";
	if(!mysqli_query($conexion->CONEXION,$qI)){
		writeLog("Ocurrio un error al actualizar el uuid en la base de datos");
		return false;
	}
	return true;
}
?>
