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

set_time_limit(0);

date_default_timezone_set('America/Mexico_City');

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

if(!$RFC_ACTIVOS_NOTIFICACION_PAGOS = getINI("RFC_ACTIVOS_NOTIFICACION_PAGOS=","../../config.ini")){
	setBitacora($conexion, "AUTOMATICO", "" , "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Etiqueta RFC_ACTIVOS_NOTIFICACION_PAGOS Faltante", "No se encontro la etiqueta RFC_ACTIVOS_NOTIFICACION_PAGOS en el config.ini");exit;
}

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

$arrRFCReceptores = explode(",",$RFC_ACTIVOS_NOTIFICACION_PAGOS);
for($i=0; $i < count($arrRFCReceptores); $i++){
	//Extraigo Configuracion General de notificaciones
	$qConfig = "select notificar_dias,notificar_despuesde,notificar_repetirdias,notificar_correos,notificar_asunto,notificar_correos_cc,notificar_fecha_inicio from configpagina where rfc_receptor='".$arrRFCReceptores[$i]."' limit 1";
	if(!$rConfig = mysqli_query($conexion->CONEXION,$qConfig)){
		setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i] , "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Error en consulta de configuracion general.", $qConfig);exit;
	}
	if(mysqli_num_rows($rConfig) <= 0){
		setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i] , "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "No se encontro la configuracion del receptor.", $qConfig);continue;
	}
	$tConfig = mysqli_fetch_assoc($rConfig);
	//Valido la fecha
	$completaQueryValidacionFechaInicio = "";
	if($tConfig['notificar_fecha_inicio'] != ""){
		$completaQueryValidacionFechaInicio = "fecha >= '".$tConfig['notificar_fecha_inicio']."' and ";
	}

	//CONSULTO NOTIFICACION DE PAGO DEL RECEPTOR
	$qPagos = "select rfcreceptor,serie,folio,adicionalA as uuid,rfcemisor,moneda,tipocambio,nombrerec,total,con_complemento_correcto,adicionalB as formadepago,fecha,
	(select group_concat(correo separator ';') as correos from correos_proveedores where rfc=rfcreceptor and rfc_receptor=rfcemisor group by rfc) as correos,
	(select notificar_iniciar from proveedores where rfc=rfcreceptor and rfc_receptor=rfcemisor group by rfc) as notificar_iniciar,
	(select concat(notificar_dias,',',notificar_despuesde,',',notificar_repetirdias,',',notificar_general) as notificarConfigProveedor from proveedores where rfc=rfcreceptor and rfc_receptor=rfcemisor) as notificarConfigProveedor
	from doce where $completaQueryValidacionFechaInicio tipodocto='NOTIFICACION DE PAGO' and notificar_complemento_faltante='1' and status='1' and rfcemisor='".trim($arrRFCReceptores[$i])."' order by rfcreceptor";

	if(!$rPago = mysqli_query($conexion->CONEXION,$qPagos)){
		setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Error en consulta de NOTIFICACIONES DE PAGO", $qPagos);exit;
	}
	if(mysqli_num_rows($rPago) <= 0){
		exit;
	}

	//ITERO TODOS LOS PAGOS
	$body="";
	$bodyEnviar="";
	$auxReceptor="";
	$correosProveedor="";
	while($tPago = mysqli_fetch_array($rPago)){
		if(trim($tPago["notificar_iniciar"]) == "0"){
			continue;
		}
		$arrConfigProveedor = explode(",",$tPago["notificarConfigProveedor"]);
		$assocConfigProveedor["notificar_dias"]=$arrConfigProveedor[0];
		$assocConfigProveedor["notificar_despuesde"]=$arrConfigProveedor[1];
		$assocConfigProveedor["notificar_repetirdias"]=$arrConfigProveedor[2];
		$assocConfigProveedor["notificar_general"]=$arrConfigProveedor[3];
		
		if(trim($assocConfigProveedor["notificar_dias"]) == "" || $assocConfigProveedor["notificar_general"] == "1"){
			$assocConfigProveedor["notificar_dias"]=$tConfig["notificar_dias"];
			$assocConfigProveedor["notificar_despuesde"]=$tConfig["notificar_despuesde"];
			$assocConfigProveedor["notificar_repetirdias"]=$tConfig["notificar_repetirdias"];
		}
		
		//VALIDO FECHAS PARA ENVIAR LA NOTIFICACION
		if($assocConfigProveedor["notificar_despuesde"] == "FECHAPAGO"){
			//Le sumo
			$fechaDespues = sumaDiasFecha(substr($tPago["fecha"],0,10),$assocConfigProveedor["notificar_dias"]);
			$fechaHoy = date("Y-m-d");
			if(str_replace("-","",$fechaHoy) < str_replace("-","",$fechaDespues)){
				continue;
			}else if(str_replace("-","",$fechaHoy) > str_replace("-","",$fechaDespues)){
				$noDias = date_diff2($fechaDespues, $fechaHoy);
				//$noDias = dateDifference($fechaDespues, $fechaHoy);
				if($noDias < $assocConfigProveedor["notificar_repetirdias"]){
					continue;
				}
				$residuo=$noDias%$assocConfigProveedor["notificar_repetirdias"];
				if($residuo != 0){
					continue;
				}
			}
		}else if($assocConfigProveedor["notificar_despuesde"] == "FINMES"){
			$fechaHoy = date("Y-m-d");
			$diaFinMes = getUltimoDiaMes(substr($tPago["fecha"],0,4),substr($tPago["fecha"],5,2));
			$fechaFinMes = substr($tPago["fecha"],0,4)."-".substr($tPago["fecha"],5,2)."-".$diaFinMes;
			
			if(str_replace("-","",$fechaHoy) > str_replace("-","",$fechaFinMes)){
				
				$noDias = date_diff2($fechaHoy,$fechaFinMes);
				//$noDias = dateDifference($fechaHoy, $fechaFinMes);
				if($noDias < $assocConfigProveedor["notificar_repetirdias"]){
					continue;
				}
				$residuo=$noDias%$assocConfigProveedor["notificar_repetirdias"];
				if($residuo != 0){
					continue;
				}
			}else if(str_replace("-","",$fechaHoy) < str_replace("-","",$fechaFinMes)){
				continue;
			}
			
		}
		
		$bodyEnviar.=$body;
		$body="";
		if(trim($tPago["rfcreceptor"]) != $auxReceptor){
			if(trim($bodyEnviar) != ""){
				$ParaEmail="";
				if(trim($correosProveedor) != ""){
					$ParaEmail=$correosProveedor;
				}else{
					$ParaEmail=$tConfig["notificar_correos"];
				}
				
				$mensaje = SendMail($ParaEmail,$ParaEmail,$tConfig["notificar_asunto"],$bodyEnviar,"","","",$tConfig["notificar_correos_cc"],$tConfig["notificar_correos_cc"]);
				if(!$mensaje){
					setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "No se pudo enviar el correo de notificacion.", $mensaje);exit;
				}else{
					setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Se ha logrado notificar a $ParaEmail", $bodyEnviar);exit;
				}
			}
			$bodyEnviar="";
			$correosProveedor = $tPago["correos"];
			$auxReceptor=$tPago["rfcreceptor"];
		}
		
		$body.= '
		<table width="98%" bgcolor="white" style="border: 5px #DDDDDD solid;">
			<tr>
				<th style="background-color: #DDDDDD; text-align: center" colspan="8">Pago</th>
			</tr>
			<tr class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
				<td>Serie</td>
				<td>Folio</td>
				<td>UUID</td>
				<td>Total</td>
				<td>Moneda</td>
				<td>Tipo Cambio</td>
				<td>Forma de Pago</td>
				<td>Proveedor</td>
			</tr>
			<tr class="ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-accordion-icons">
				<td>'.$tPago["serie"].'</td>
				<td>'.$tPago["folio"].'</td>
				<td>'.$tPago["uuid"].'</td>
				<td>'.$tPago["total"].'</td>
				<td>'.$tPago["moneda"].'</td>
				<td>'.$tPago["tipocambio"].'</td>
				<td>'.$tPago["formadepago"].'</td>
				<td>'.$tPago["nombrerec"].'</td>
			</tr>';
		
		$qPagoRecibePago = "select 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,rdp.formadepago,rcomplemento.status as statusComplemento, (select count(*) from pago_documentos_ref where uuidcfdirelacionado=pdr.uuidcfdirelacionado and numparcialidad=pdr.numparcialidad) as numParcialidadDuplicada
	from pago_documentos_ref pdr 
	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 
	left join recibedoce rcomplemento on rdp.recibedoce_UUID = rcomplemento.uuid 
	where pdr.doce_uuid='".$tPago["uuid"]."'";
		
		if(!$rPagoRecibePago = mysqli_query($conexion->CONEXION,$qPagoRecibePago)){
			setBitacora($conexion, "AUTOMATICO", "AUTOMATICO", "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Ocurrio un error al consultar los documentos de referencia de pagos", $qPagoRecibePago);exit;
		}
		if(mysqli_num_rows($rPagoRecibePago) <= 0){
			$body.='
			<tr>
				<td colspan="8" style="padding: 20px 20px 20px 20px">
					<table width="98%" bgcolor="white" style="border: 2px #DDDDDD solid">
						<tr>
							<th style="background-color: #fcfbe5; text-align: center"></th>
						</tr>
					</table>
				</td>
			</tr>
			</table>';
		}
		$con=0;
			$body.='
			<tr>
				<td colspan="8" style="padding: 20px 20px 20px 20px">
					<table width="98%" bgcolor="white" style="border: 2px #DDDDDD solid">
						<tr style="color: #FFFFFF">
							<th style="background-color: #2476af; text-align: center" colspan="7">Pago / ICFDI 3.3</th>
							<th style="background-color: #000000; text-align: center" colspan="5">Complemento / ICFDI 3.3</th>
						</tr>
						<tr style="background-color: #2476af; color: #FFFFFF">
							<td>Serie</td>
							<td>Folio</td>
							<td>UUID</td>
							<td>Monto</td>
							<td>Moneda</td>
							<td>T. Cambio</td>
							<td>Parcialidad</td>
							<td style="background-color: #000000">Monto</td>
							<td style="background-color: #000000">Moneda</td>
							<td style="background-color: #000000">T. Cambio</td>
							<td style="background-color: #000000">Forma de Pago</td>
							<td style="background-color: #000000">Parcialidad</td>
						</tr>';
		$sumaMontoPago=0.00;
		$banIncorrecto=false;
		
		while($tPagoRecibePago = mysqli_fetch_array($rPagoRecibePago,MYSQLI_ASSOC)){
			$con++;
			$res = $con%2;
			$trEstilo="";
			if($res == 0)
				$trEstilo = "style='background-color: #999999'";
			$tdEstiloMonto = "";
			$tdEstiloTipoCambio = "";
			$tdEstiloMoneda = "";
			$tdEstiloParcialidad = "";
			$tdEstiloFormaDePago = "";
			$tdEstiloParcialidadPago = "";
			if($tPagoRecibePago["PDRmontoPago"] != $tPagoRecibePago["RPDRimpagado"]){
				$tdEstiloMonto = "style='background-color: red'";
				$banIncorrecto=true;
			}
			if($tPagoRecibePago["PDRtipocambio"] != $tPagoRecibePago["RPDRtipocambio"]){
				$tdEstiloTipoCambio = "style='background-color: red'";
				$banIncorrecto=true;
			}
			if($tPagoRecibePago["PDRmoneda"] != $tPagoRecibePago["RPDRmoneda"]){
				$tdEstiloMoneda = "style='background-color: red'";
				$banIncorrecto=true;
			}
			if($tPagoRecibePago["PDRnumparcialidad"] != $tPagoRecibePago["RPDRnumparcialidad"]){
				$tdEstiloParcialidad = "style='background-color: red'";
				$tdEstiloParcialidadPago = "style='background-color: red'";
				$banIncorrecto=true;
			}
			if(trim($tPagoRecibePago["formadepago"]) != trim($tPago["formadepago"])){
				$tdEstiloFormaDePago = "style='background-color: red'";
				$banIncorrecto=true;
			}
			
			if($tPagoRecibePago["statusComplemento"] == "C" || $tPagoRecibePago["statusComplemento"] == "R"){
				$tdEstiloMonto = "style='background-color: red'";
				$tdEstiloTipoCambio = "style='background-color: red'";
				$tdEstiloMoneda = "style='background-color: red'";
				$tdEstiloParcialidad = "style='background-color: red'";
				$tdEstiloParcialidadPago = "style='background-color: red'";
				$tdEstiloFormaDePago = "style='background-color: red'";
				$tPagoRecibePago["RPDRimpagado"] = "";
				$tPagoRecibePago["RPDRmoneda"]="";
				$tPagoRecibePago["RPDRtipocambio"]="";
				$tPagoRecibePago["formadepago"]="";
				$tPagoRecibePago["RPDRnumparcialidad"]="";
				$banIncorrecto=true;
			}
			if($tPagoRecibePago["numParcialidadDuplicada"] > 1){
				if($tdEstiloParcialidadPago != ""){
					$tdEstiloParcialidadPago = "class='tdParcialidadPago'";
				}else{
					$tdEstiloParcialidadPago = "style='background-color: yellow'";
				}
			}
				$body.='
				<tr '.$trEstilo.'>
					<td>'.$tPagoRecibePago["serie"].'</td>
					<td>'.$tPagoRecibePago["folio"].'</td>
					<td>'.$tPagoRecibePago["uuidcfdirelacionado"].'</td>
					<td '.$tdEstiloMonto.'>'.$tPagoRecibePago["PDRmontoPago"].'</td>
					<td '.$tdEstiloMoneda.'>'.$tPagoRecibePago["PDRmoneda"].'</td>
					<td '.$tdEstiloTipoCambio.'>'.$tPagoRecibePago["PDRtipocambio"].'</td>
					<td '.$tdEstiloParcialidadPago.'>'.$tPagoRecibePago["PDRnumparcialidad"].'</td>
					<td '.$tdEstiloMonto.'>'.$tPagoRecibePago["RPDRimpagado"].'</td>
					<td '.$tdEstiloMoneda.'>'.$tPagoRecibePago["RPDRmoneda"].'</td>
					<td '.$tdEstiloTipoCambio.'>'.$tPagoRecibePago["RPDRtipocambio"].'</td>
					<td '.$tdEstiloFormaDePago.'>'.$tPagoRecibePago["formadepago"].'</td>
					<td '.$tdEstiloParcialidad.'>'.$tPagoRecibePago["RPDRnumparcialidad"].'</td>
				</tr>';	
		$sumaMontoPago = $tPagoRecibePago["RDPmonto"];
		}// Termina While Facturas y Complementos de la Notificacion de pago
		
		$tdEstiloPagoTotal="";
		if($tPago["total"] != $sumaMontoPago){
			$tdEstiloPagoTotal="style='background-color: red'";
			$banIncorrecto=true;
		}
						$body.='
						<tr>
							<th style="text-align: right" colspan="9">Total Complemento</th>
							<th style="text-align: right" colspan="2" '.$tdEstiloPagoTotal.'>'.$sumaMontoPago.'</th>
						</tr>
					</table>
				</td>';
		
		if($tPago["total"] != $sumaMontoPago){
			?><script>$j_6("#totalpago_<?=$tPago["uuid"]?>").css("background-color","red");</script><?
		}
		if($banIncorrecto == true){
					if($tPago["con_complemento_correcto"] == "0"){
						$body.='<td>
							<table width="98%" bgcolor="white" style="border: 2px #DDDDDD solid">
								<tr>
									<th style="background-color: #fcfbe5; text-align: center"></th>
								</tr>
							</table>
						</td>';
					}else{
						ActualizaStatus($tPago["uuid"],$arrRFCReceptores[$i]);
						$body.=''; continue;
					}
		}else{
				ActualizaStatus($tPago["uuid"],$arrRFCReceptores[$i]);
				$body='';continue;
		}
			$body.='
			</tr>
		</table>';
		
	}//Termina While Notificacion Pago
	$bodyEnviar.=$body;
	$body="";
	if(trim($tPago["rfcreceptor"]) != $auxReceptor){
		if(trim($bodyEnviar) != ""){
			$ParaEmail="";
			if(trim($correosProveedor) != ""){
				$ParaEmail=$correosProveedor;
			}else{
				$ParaEmail=$tConfig["notificar_correos"];
			}
			
			$mensaje = SendMail($ParaEmail,$ParaEmail,$tConfig["notificar_asunto"],$bodyEnviar,"","","","","");
			if(!$mensaje){
				setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "No se pudo enviar el correo de notificacion.", $mensaje);
			}else{
				setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Se ha logrado notificar a $ParaEmail", $bodyEnviar);
			}
		}
		$bodyEnviar="";
		$correosProveedor = $tPago["correos"];
		$auxReceptor=$tPago["rfcreceptor"];
	}
}//Termina FOR Receptores

function sumaDiasFecha($fecha,$dias){
	$fechaS = date("Y-m-d", strtotime("$fecha $dias days"));
	return $fechaS;
}

function getUltimoDiaMes($elAnio,$elMes) {
  return date("d",(mktime(0,0,0,$elMes+1,1,$elAnio)-1));
}

function date_diff2($date1, $date2) { 
    $current = $date1; 
    $datetime2 = date_create($date2); 
    $count = 0; 
    while(date_create($current) < $datetime2){ 
        $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current))); 
        $count++; 
    } 
    return $count; 
}

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);
    
    $interval = date_diff($datetime1, $datetime2);
    
    return $interval->format($differenceFormat);
    
}

function ActualizaStatus($uuid,$rfc){
	global $conexion;
	$q="update doce set notificar_complemento_faltante='0' where adicionalA='$uuid'";
	if(!mysqli_query($conexion->CONEXION,$q)){
		setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "No se pudo actualizar el status de notificar_complemento_faltante.", $q);
		return false;
	}else{
		setBitacora($conexion, "AUTOMATICO", $arrRFCReceptores[$i], "NOTIFICACION AUTOMATICA COMPLEMENTOS FALTANTES", "Se logro actualizar el status de notificar_complemento_faltante.", $q);
		return true;
	}
}
?>
