<?
set_time_limit(0);
require("../../conexion/conectar.php");

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

DEFINE("DEBUG",1);
DEFINE("TIPODOCNP","NOTIFICACION DE PAGO");
DEFINE("CAMPO_FECHA","fecha");
// DEFINE("CAMPO_FECHA","fecha_i");

$query="select fecha_sincronizacion_pagos, rfc_emisor, rfc_receptor from configpagina";

$fechaSincronizacion = "";

$errores_no=0;
$errores="";
$arrUUID = array();
$con=0;
						
if($rQuery = mysqli_query($conexion->CONEXION,$query)){
	if(mysqli_num_rows($rQuery) > 0){
		
		while($tRes = mysqli_fetch_assoc($rQuery)){
			$tConfigPagina[] = $tRes;
		}
		/*foreach($tConfigPagina as $tFechaSincronizacion){
			print_r($val);
		}
		exit;*/
		//while($tFechaSincronizacion = mysqli_fetch_assoc($rQuery)){
		foreach($tConfigPagina as $tFechaSincronizacion){
			$fechaSincronizacion = $tFechaSincronizacion["fecha_sincronizacion_pagos"];
			$rfc_emisor = $tFechaSincronizacion["rfc_emisor"];
			$rfc_receptor = $tFechaSincronizacion["rfc_receptor"];
			$tFetchUUIDSRel = [];
			$FetchNPs = [];
			
				writeLog("sincroniza_expediente_pagos","------------------- $fechaSincronizacion - $rfc_emisor - $rfc_receptor --------------------------------------------------------------",0,DEBUG);
				writeLog("sincroniza_expediente_pagos","INICIAN CALCULOS POR NOTIFICACIONES DE PAGO.",0,DEBUG);
				writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
				// ------------------------------------- POR NOTIFICACIONES DE PAGO ------------------------------------
				$query="select p.doce_UUID, p.uuidCFDIRelacionado, p.Monto, p.NumParcialidad, p.MetodoDePago, p.Moneda, p.TipoCambio
				from doce d inner join pago_documentos_ref p on d.adicionalA = p.doce_UUID where d.".CAMPO_FECHA." >= '".$fechaSincronizacion."' and d.RFCEmisor <= '".$rfc_emisor."'";

				if($rQuery = mysqli_query($conexion->CONEXION,$query)){
					if(mysqli_num_rows($rQuery) > 0){
						while($tmp = mysqli_fetch_assoc($rQuery)){
							$tFetchUUIDSRel[] = $tmp;
						}
					}else{
						writeLog("sincroniza_expediente_pagos","No se encontraron registros.",0,DEBUG);
					}
				}else{
					$errores_no++;
					writeLog("sincroniza_expediente_pagos"," Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
				}
				
				
				
				if(count($tFetchUUIDSRel) > 0){
					writeLog("sincroniza_expediente_pagos","Inicia inserción de doce_UUID en recibedoce_pagos_docto_relacionado",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_Inserta_DoceUUID_recibedoce_pagos_docto_relacionado('".$tmp["doce_UUID"]."','".$tmp["uuidCFDIRelacionado"]."','".$tmp["NumParcialidad"]."','".$tmp["Monto"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							$tRes = mysqli_fetch_assoc($res);
							if($tRes['registrosAfectados'] == -1){
									writeLog("sincroniza_expediente_pagos","SP_Inserta_DoceUUID_recibedoce_pagos_docto_relacionado -> ".$tmp["uuidCFDIRelacionado"]." UUID ya relacionado",0,DEBUG);
							}else if($tRes['registrosAfectados'] == 0){
									writeLog("sincroniza_expediente_pagos","SP_Inserta_DoceUUID_recibedoce_pagos_docto_relacionado -> ".$tmp["uuidCFDIRelacionado"]." No se afectaron registros",0,DEBUG);
							}else{
									writeLog("sincroniza_expediente_pagos","SP_Inserta_DoceUUID_recibedoce_pagos_docto_relacionado -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
							}
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos",$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
					
					writeLog("sincroniza_expediente_pagos","Inicia calculo de importe pagado en complemento de UUID en recibedoce_pagos_docto_relacionado",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_CalculaTotalPagoComplementoUUID('".$tmp["uuidCFDIRelacionado"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoComplementoUUID -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoComplementoUUID -> ".$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
					
					writeLog("sincroniza_expediente_pagos","Inicia calculo de status UUID pagado np y rep",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_RecibeCFD_CalculaStatusPago('".$tmp["uuidCFDIRelacionado"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_RecibeCFD_CalculaStatusPago -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos","SP_RecibeCFD_CalculaStatusPago -> ".$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
				}
				
				
				$query="select adicionalA as doce_UUID from doce where fecha >= '".$fechaSincronizacion."' and RFCEmisor <= '".$rfc_emisor."' and tipoDocto = '".TIPODOCNP."'";
				if($res = mysqli_query($conexion->CONEXION,$query)){
					if(mysqli_num_rows($res) > 0){
						while($tmp = mysqli_fetch_assoc($res)){
							$FetchNPs[] = $tmp;
						}
					}else{
						writeLog("sincroniza_expediente_pagos","No se encontraron registros.",0,DEBUG);
					}
					
				}else{
					writeLog("sincroniza_expediente_pagos","Ocurrio un error al consultar las NPs. Error -> ".mysqli_error($conexion->CONEXION),1,DEBUG);
					exit;
				}
				
				if(count($FetchNPs) > 0){
					writeLog("sincroniza_expediente_pagos","Inicia calculo de status de las notificaciones de pago",0,DEBUG);
					foreach($FetchNPs as $tNPs){
						$qry = "call SP_CalculaStatusNotificacionPago('".$tNPs["doce_UUID"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_CalculaStatusNotificacionPago -> ".$tNPs["doce_UUID"]." status calculado",0,DEBUG);
						}else{
							$errores_no++;
							writeLog("sincroniza_expediente_pagos","SP_CalculaStatusNotificacionPago -> ".$tNPs["doce_UUID"]." al calcular status. Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
					
					writeLog("sincroniza_expediente_pagos","Inicia calculo de total de pago de uuid relacionado de las notificaciones de pago",0,DEBUG);
						
					foreach($FetchNPs as $tNPs){
						$qry = "call SP_CalculaTotalPagoDocRef('".$tNPs["doce_UUID"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoDocRef -> ".$tNPs["doce_UUID"]." total de pago de uuid relacionados calculado",0,DEBUG);
						}else{
							$errores_no++;
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoDocRef -> ".$tNPs["doce_UUID"]." al calcular total de pago de uuid relacionados. Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
				}
				
				
				// ------------------------------------- TERMINA POR NOTIFICACIONES DE PAGO ------------------------------------
				
				writeLog("sincroniza_expediente_pagos","------------------- $fechaSincronizacion - $rfc_emisor - $rfc_receptor --------------------------------------------------------------",0,DEBUG);
				writeLog("sincroniza_expediente_pagos","INICIAN CALCULOS POR COMPLEMENTOS DE PAGO.",0,DEBUG);
				writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
				
				// ------------------------------------- POR COMPLEMENTOS DE PAGO ------------------------------------
				
				$query="select rdpdr.uuidCFDIRelacionado, rdpdr.doce_UUID
				from recibedoce rd inner join recibedoce_pagos rdp on rd.uuid = rdp.recibedoce_UUID inner join recibedoce_pagos_docto_relacionado rdpdr on rdp.recibedoce_pagos_ID = rdpdr.recibedoce_pagos_ID
				where rd.fechaRecibido >= '".$fechaSincronizacion."' and rd.rfc_receptor <= '".$rfc_receptor."'";
				$tFetchUUIDSRel = [];
				if($rQuery = mysqli_query($conexion->CONEXION,$query)){
					if(mysqli_num_rows($rQuery) > 0){
						while($tmp = mysqli_fetch_assoc($rQuery)){
							$tFetchUUIDSRel[] = $tmp;
						}
					}else{
						writeLog("sincroniza_expediente_pagos","No se encontraron registros.",0,DEBUG);
					}
				}else{
					$errores_no++;
					writeLog("sincroniza_expediente_pagos"," Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
				}
				
				if(count($tFetchUUIDSRel) > 0){
					writeLog("sincroniza_expediente_pagos","Inicia calculo de importe pagado en complemento de UUID en recibedoce_pagos_docto_relacionado",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_CalculaTotalPagoComplementoUUID('".$tmp["uuidCFDIRelacionado"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoComplementoUUID -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos","SP_CalculaTotalPagoComplementoUUID -> ".$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
					
					writeLog("sincroniza_expediente_pagos","Inicia calculo de status UUID pagado np y rep",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_RecibeCFD_CalculaStatusPago('".$tmp["uuidCFDIRelacionado"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_RecibeCFD_CalculaStatusPago -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos","SP_RecibeCFD_CalculaStatusPago -> ".$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
					
					writeLog("sincroniza_expediente_pagos","Inicia calculo de status de notificaciones de pago por cfdi relacionado",0,DEBUG);
					foreach($tFetchUUIDSRel as $tmp){
						$qry = "call SP_CalculaStatusNotificacionPagoPorCFDIRelacionado('".$tmp["uuidCFDIRelacionado"]."')";
						if($res = mysqli_query($conexion->CONEXION,$qry)){
							writeLog("sincroniza_expediente_pagos","SP_CalculaStatusNotificacionPagoPorCFDIRelacionado -> ".$tmp["uuidCFDIRelacionado"]." actualizado",0,DEBUG);
						}else{
							$errores_no++;
							// $errores.=mysqli_error($conexion->CONEXION)."<br/>";
							writeLog("sincroniza_expediente_pagos","SP_CalculaStatusNotificacionPagoPorCFDIRelacionado -> ".$tmp["uuidCFDIRelacionado"]." Error: ".mysqli_error($conexion->CONEXION),1,DEBUG);
						}
						mysqli_next_result($conexion->CONEXION);
					}
				}
				
				// ------------------------------------- TERMINA POR COMPLEMENTOS DE PAGO ------------------------------------

				$query="update configpagina set fecha_sincronizacion_pagos = current_timestamp() where rfc_receptor = '".$rfc_receptor."'";
				if($r = mysqli_query($conexion->CONEXION,$query)){
					writeLog("sincroniza_expediente_pagos","Fecha de sincronización actualizada",0,DEBUG);
				}else{
					writeLog("sincroniza_expediente_pagos","Error al actualizar la fecha de sincronización",1,DEBUG);
				}
				
		}// while configpagina
		
		
		writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
		writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
		writeLog("sincroniza_expediente_pagos","--------------------------- FIN DE PROCESO --------------------------------------",0,DEBUG);
		writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
		writeLog("sincroniza_expediente_pagos","---------------------------------------------------------------------------------",0,DEBUG);
	}else{
		writeLog("sincroniza_expediente_pagos","No se encontro la fecha de sincronización. Error -> ".mysqli_error($conexion->CONEXION),1,DEBUG);
		exit;
	}
	echo "No. Errores: ".$errores_no."<br/>";
}else{
	writeLog("sincroniza_expediente_pagos","Ocurrio un error al consultar la fecha de sincronización. Error -> ".mysqli_error($conexion->CONEXION),1,DEBUG);
	exit;
}


function writeLog($nombreArchivo, $mensaje, $log, $debug){
	$logArchivo = $nombreArchivo."_".date("Ymd").".log";
	$debugArchivo = $nombreArchivo."_".date("Ymd").".debug";
	if($log == 1){
		if(file_exists($logArchivo)){$fp = fopen($logArchivo,"a+");}else{$fp = fopen($logArchivo,"w+");}
		$fecha = date("Y-m-d H:i:s");
		fwrite($fp,"\r\n".$fecha." -> ".$mensaje);
		fclose($fp);
	}
	if($debug == 1){
		if(file_exists($debugArchivo)){$fp = fopen($debugArchivo,"a+");}else{$fp = fopen($debugArchivo,"w+");}
		$fecha = date("Y-m-d H:i:s");
		fwrite($fp,"\r\n".$fecha." -> ".$mensaje);
		fclose($fp);
	}
}
?>
