<?
$col_name[0]="A";
$col_name[1]="B";
$col_name[2]="C";
$col_name[3]="D";
$col_name[4]="E";
$col_name[5]="F";
$col_name[6]="G";
$col_name[7]="H";
$col_name[8]="I";
$col_name[9]="J";
$col_name[10]="K";
$col_name[11]="L";
$col_name[12]="M";
$col_name[13]="N";
$col_name[14]="O";
$col_name[15]="P";
$col_name[16]="Q";
$col_name[17]="R";
$col_name[18]="S";
$col_name[19]="T";
$col_name[20]="U";
$col_name[21]="V";
$col_name[22]="W";
$col_name[23]="X";
$col_name[24]="Y";
$col_name[25]="Z";

if(strtoupper(trim($_SESSION['usuario_p_prov_absa'])) == "ADMIN"){
	$rfcemisor = $_REQUEST['form_rfcemisor'];
}else{
	$rfcemisor = $_SESSION['RFC_RECEPTOR_PORTAL'];
}



$completaQueryPagos = "";
if($_REQUEST["serie"] != ""){$completaQueryPagos = " and serie='".$_REQUEST["serie"]."'";}
if($_REQUEST["folio"] != ""){$completaQueryPagos .= " and folio='".$_REQUEST["folio"]."'";}
if($_REQUEST["uuid"] != ""){$completaQueryPagos .= " and adicionalA='".$_REQUEST["uuid"]."'";}
if($_REQUEST["fecha_emision_inicio"] != ""){$completaQueryPagos .= " and fecha > '".$_REQUEST["fecha_emision_inicio"]."'";}
if($_REQUEST["fecha_emision_final"] != ""){$completaQueryPagos .= " and fecha < '".$_REQUEST["fecha_emision_final"]."'";}
if($_REQUEST["emisor_nombre"] != ""){$completaQueryPagos .= " and nombrerec like '%".$_REQUEST["emisor_nombre"]."%'";}
if($_REQUEST["emisor_rfc"] != ""){$completaQueryPagos .= " and rfcreceptor < '".$_REQUEST["emisor_rfc"]."'";}

if($_SESSION['todo_RFC_p_prov_absa'] == "SI"){
	$complementoQuery="";
	$permisosComplemento=$_SESSION['permisos_c_prov_absa'];
}else{
	$complementoQuery="and rfcreceptor='".$_SESSION['rfc_cliente_p_prov_absa']."'";
}

//Valido la fecha
$completaQueryValidacionFechaInicio = "";
if($notificar_fecha_inicio != ""){
	$completaQueryValidacionFechaInicio = "fecha >= '".$tConfig['notificar_fecha_inicio']."' and ";
}
	
// $qPagos = "select rfcreceptor,serie,folio,adicionalA as uuid,rfcemisor,moneda,tipocambio,nombrerec,total,con_complemento_correcto,adicionalB as formadepago from doce where $completaQueryValidacionFechaInicio tipodocto='NOTIFICACION DE PAGO' and rfcemisor='$rfcemisor' $completaQueryPagos $complementoQuery $permisosComplemento";


$qPagos = "select d.rfcreceptor,d.serie,d.folio,d.adicionalA as uuid,d.rfcemisor,d.moneda,d.tipocambio,d.nombrerec,d.total,sum(if(r.MetodoDePago = 'PPD',pdr.Monto,0)) as totalPorMetodoDePagoPPD,sum(if(r.MetodoDePago = 'PUE',pdr.Monto,0)) as totalPorMetodoDePagoPUE,d.con_complemento_correcto,d.adicionalB as formadepago,pdr.MetodoDePago as MetodoDePago 
from doce d left join pago_documentos_ref pdr
on d.adicionalA = pdr.doce_uuid
left join recibedoce r
ON r.uuid = pdr.uuidcfdirelacionado
where $completaQueryValidacionFechaInicio d.tipodocto='NOTIFICACION DE PAGO' and d.rfcemisor='$rfcemisor' $completaQueryPagos $complementoQuery $permisosComplemento
group by d.adicionalA";
if(!$rPago = mysqli_query($conexion->CONEXION,$qPagos)){
	//<script>$j_6.messager.alert("Error","Ocurrio un error al consultar los pagos.","error.");</script><?exit;
}
if(mysqli_num_rows($rPago) <= 0){
	//<script>$j_6.messager.alert("Error","No se encontraron documentos de pago.","error.");</script><?exit;
}

$objPHPExcel->setActiveSheetIndex(0);
$conEncabezado=0;
$NumRow=0;
while($tPago = mysqli_fetch_array($rPago)){
	
	$qPagoRecibePago = "select pdr.uuidcfdirelacionado,
		r1.serie,r1.folio,
		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,r1.MetodoDePago as MetodoDePagoDoc,rpdr.MetodoDePago as MetodoDePagoRPDR,pdr.MetodoDePago as MetodoDePagoPDR, r1.nombreemi,r1.total as totalCFDI, rdp.MonedaP as RDPmoneda,rdp.Monto as RDPmonto,rdp.recibedoce_UUID,
	rdp.TipoCambioP as RDPtipocambio,rdp.formadepago,rcomplemento.status as statusComplemento, 
	rdt.totalPagoDocumentosRef, rdt.totalIngresoCompensado, rdt.ImpPagadoComplemento, rdt.FechaNP, rdt.numReferenciasPagoDocumentosRef,
	(select count(*) from pago_documentos_ref where uuidcfdirelacionado=pdr.uuidcfdirelacionado and numparcialidad=pdr.numparcialidad) as numParcialidadDuplicada
	from pago_documentos_ref pdr
	left join recibedoce r1
	ON pdr.uuidcfdirelacionado = r1.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
	left join recibedoce_totales rdt
	ON rdt.uuid=r.uuid
	left join recibedoce rcomplemento on rdp.recibedoce_UUID = rcomplemento.uuid 
	where pdr.doce_uuid='".$tPago["uuid"]."'";
	//echo $qPagoRecibePago."<br/>";exit;
	
	
	if(!$rPagoRecibePago = mysqli_query($conexion->CONEXION,$qPagoRecibePago)){
		//<script>$j_6.messager.alert("Error","Ocurrio un error al consultar los documentos de referencia de pagos.","error.");</script><?exit;
		exit;
	}
	if(mysqli_num_rows($rPagoRecibePago) <= 0){
		if($_REQUEST["status"] == "SINRELACION"){
			if($tPago["con_complemento_correcto"] != "1"){
				PintaEncabezado();
			}
		}
		if($_REQUEST["status"] == "" ){
				PintaEncabezado();
		}
		continue;
	}
	
	$con=0;
	
	//Si es una NP sin PPDs la ignoro
	if($tPago["totalPorMetodoDePagoPPD"] == 0){
		continue;
	}
			
	

	$sumaMontoPago=0.00;
	$banIncorrecto=false;
	$codigoEjecutar="";
	$banFaltante=false;
	$statusNPvsCom = "";
	
	while($tPagoRecibePago = mysqli_fetch_array($rPagoRecibePago,MYSQLI_ASSOC)){
		//Si es una PUE la ignoro
		if(trim($tPagoRecibePago["MetodoDePagoDoc"]) == "PUE"){
			continue;
		}
		
		if($tPago["con_complemento_correcto"] == "1"){
			$statusNPvsCom = "COMPLETOS";
		}elseif($tPagoRecibePago["statusComplemento"] == "C" || $tPagoRecibePago["statusComplemento"] == "R" || trim($tPagoRecibePago["RPDRimpagado"]) == ""){
			$statusNPvsCom = "NOCOMPLETOS";
		}else{
		
			//Valido el monto pagado al documento en NP vs Complemento
				if((float) $tPagoRecibePago["PDRmontoPago"] != (float) $tPagoRecibePago["RPDRimpagado"]){
					$diferencia = (float) $tPagoRecibePago["PDRmontoPago"] - (float) $tPagoRecibePago["RPDRimpagado"];
					if($diferencia < 0){
						$diferencia = $diferencia * -1;
					}
					
					if((float) $diferencia > (float) $tConfig["tolerancia_NPvsComplemento"]){
						$banIncorrecto = true;
					}
				}
				
				//Valido el tipo de cambio del pago al documento en NP vs Complemento
				if((float) $tPagoRecibePago["PDRtipocambio"] != (float) $tPagoRecibePago["RPDRtipocambio"]){
					$diferencia = (float) $tPagoRecibePago["PDRtipocambio"] - (float) $tPagoRecibePago["RPDRtipocambio"];
					if($diferencia < 0){
						$diferencia = $diferencia * -1;
					}
					
					if((float) $diferencia > (float) $tConfig["tolerancia_tipoCambio"]){
						$banIncorrecto = true;
					}
				}
				
				//Valido la moneda
				if($tPagoRecibePago["PDRmoneda"] != $tPagoRecibePago["RPDRmoneda"]){
					$banIncorrecto = true;
				}
				//Valido el numero de parcialidad
				if($tPagoRecibePago["PDRnumparcialidad"] != $tPagoRecibePago["RPDRnumparcialidad"]){
					$banIncorrecto = true;
				}
				//Valido la forma de pago
				if(trim($tPagoRecibePago["formadepago"]) != trim($tPago["formadepago"])){
					$banIncorrecto = true;
				}
				
				//Valido el metodo de pago NP vs Complemento
				//echo trim($tPagoRecibePago["MetodoDePagoPDR"])." != ".trim($tPagoRecibePago["MetodoDePagoRPDR"]);exit;
				
				if(trim($tPagoRecibePago["MetodoDePagoPDR"]) != trim($tPagoRecibePago["MetodoDePagoRPDR"])){
					$banIncorrecto = true;
				}
				if($tPagoRecibePago["numParcialidadDuplicada"] > 1){
					$banIncorrecto = true;
				}
		}//else
		
	
		//Sumo los importes pagados en REP
		$sumaMontoPago += (trim($tPagoRecibePago["RPDRimpagado"]) == "")? 0.00 : trim($tPagoRecibePago["RPDRimpagado"]);
		//Sumo los importes pagados en NP
		$totalMontosFacturasNP = (double) $totalMontosFacturasNP + (double) $tPagoRecibePago["PDRmontoPago"];
			
		$arrSerieFolio = explode("&&",$tPagoRecibePago["SerieFolio"]);
		$codigoEjecutar.='$NumRow++;
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[0].$NumRow, "'.$arrSerieFolio[0].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[1].$NumRow, "'.$arrSerieFolio[1].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[2].$NumRow, "'.$tPagoRecibePago["uuidcfdirelacionado"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[3].$NumRow, "'.$tPagoRecibePago["MetodoDePagoDoc"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[4].$NumRow, "'.$tPagoRecibePago["MetodoDePagoPDR"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[5].$NumRow, "'.$tPagoRecibePago["PDRnumparcialidad"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[6].$NumRow, "'.$tPagoRecibePago["PDRmoneda"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[7].$NumRow, "'.$tPagoRecibePago["PDRtipocambio"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[8].$NumRow, "'.$tPagoRecibePago["PDRmontoPago"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[9].$NumRow, "'.$tPagoRecibePago["MetodoDePagoRPDR"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[10].$NumRow, "'.$tPagoRecibePago["RPDRnumparcialidad"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[11].$NumRow, "'.$tPagoRecibePago["RPDRmoneda"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[12].$NumRow, "'.$tPagoRecibePago["RPDRtipocambio"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[13].$NumRow, "'.$tPagoRecibePago["formadepago"].'");
		$objPHPExcel->getActiveSheet()->setCellValue($col_name[14].$NumRow, "'.$tPagoRecibePago["RPDRimpagado"].'");';
			
	}
	
	//Valido el monto total de la Notificación de Pago contra el monto total del complemento.
	//Multiplico por 1000000 para sacar la parte entera y poder comparar enteros, ya que con decimales hay problemas
	$totalEnPago1000000 = $tPago["totalPorMetodoDePagoPPD"] * 1000000;
	$sumaMontoPago1000000 = $sumaMontoPago * 1000000;
	$arrTotalEnPago1000000 = explode(".",$totalEnPago1000000);
	$arrSumaMontoPago1000000 = explode(".",$sumaMontoPago1000000);
	
	// if((float) $tPago["total"] != (float) $sumaMontoPago){
	if($arrTotalEnPago1000000[0] != $arrSumaMontoPago1000000[0]){
		$diferencia = (float) $tPago["totalPorMetodoDePagoPPD"] - (float) $sumaMontoPago;
		if($diferencia < 0){
			$diferencia = $diferencia * -1;
		}
		if((float) $diferencia > (float) $tConfig["tolerancia_NPvsComplemento"]){
			if($statusNPvsCom != "NOCOMPLETOS" && $statusNPvsCom != "COMPLETOS"){
				$banIncorrecto = true;
			}
			
		}
	}
	//Valido el monto total de la Notificación de Pago contra el total de la suma de los montos de las facturas
	//Multiplico por 1000000 para sacar la parte entera y poder comparar enteros, ya que con decimales hay problemas
	$totalMontosFacturasNP1000000 = $totalMontosFacturasNP * 1000000;
	$arrTotalMontosFacturasNP1000000 = explode(".",$totalMontosFacturasNP1000000);
	if($arrTotalEnPago1000000[0] != $arrTotalMontosFacturasNP1000000[0]){
		$diferencia = (float) $tPago["totalPorMetodoDePagoPPD"] - (float) $totalMontosFacturasNP;
		if($diferencia < 0){
			$diferencia = $diferencia * -1;
		}
		if((float) $diferencia > (float) $tConfig["tolerancia_NPvsFactura"]){
			if($statusNPvsCom != "NOCOMPLETOS" && $statusNPvsCom != "COMPLETOS"){
				$banIncorrecto = true;
			}
		}
	}
	if($arrTotalEnPago1000000[0] != $arrSumaMontoPago1000000[0]){
		$diferencia = (float) $tPago["totalPorMetodoDePagoPPD"] - (float) $sumaMontoPago;
		if($diferencia < 0){
			$diferencia = $diferencia * -1;
		}
		
		//Si paso la diferencia lo marco rojo, si no aplico tolerancia y lo marco naranja
		if((float) $diferencia > (float) $tConfig["tolerancia_NPvsComplemento"]){
			$banIncorrecto == true;
		}
	}
	
	
	$codigoEjecutar.='$NumRow++;
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[0].$NumRow, "Total Complemento");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[1].$NumRow, $sumaMontoPago);';
	
	if($banIncorrecto == true){
		$statusNPvsCom = "INCORRECTOS";
	}
	
	if($_REQUEST["status"] == "" || $_REQUEST["status"] == $statusNPvsCom){
		PintaEncabezado();
		PintaDetalleEncabezado();
		eval($codigoEjecutar);
	}

}

$objPHPExcel->getActiveSheet()->setTitle("Complementos Faltantes");

function PintaEncabezado(){
	global $tPago,$conEncabezado,$NumRow,$objPHPExcel,$col_name;
	$conEncabezado++;
	$NumRow++;
	$header_name = array("Serie","Folio","Total PUE","Total PPD","Total","Moneda","Tipo Cambio","Forma de Pago","Proveedor");
	$col=0;
	$autofilter=0;
	for($row=0; $row < count($header_name); $row++){
			$objPHPExcel->getActiveSheet()->setCellValue($col_name[$col].$NumRow, $header_name[$row]);
			$objPHPExcel->getActiveSheet()->getColumnDimension($col_name[$col])->setAutoSize(true);
			$autofilter++;
			$col++;
	}
	$objPHPExcel->getActiveSheet()->getStyle('A'.$NumRow.':'.$col_name[$autofilter-1].$NumRow)->applyFromArray(
		array(
			'font'    => array(
				'bold'      => true,
				'color'      => array('rgb' => 'FFFFFF')
			),
			'alignment' => array(
				'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
			),
			'borders' => array(
				'top'     => array(
 					'style' => PHPExcel_Style_Border::BORDER_THIN
 				)
			),
			'fill' => array(
	 			//'type'       => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
	 			'type'       => PHPExcel_Style_Fill::FILL_SOLID,
				'color' => array('rgb' => '000000'),
	  			'rotation'   => 90
	 			/*'startcolor' => array(
	 				'argb' => '99999999'
	 			),
	 			'endcolor'   => array(
	 				'argb' => '99999999'
	 			)*/
	 		)
		)
	);
	$NumRow++;

	$objPHPExcel->getActiveSheet()->setCellValue($col_name[0].$NumRow, $tPago["serie"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[1].$NumRow, $tPago["folio"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[2].$NumRow, $tPago["totalPorMetodoDePagoPUE"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[3].$NumRow, $tPago["totalPorMetodoDePagoPPD"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[4].$NumRow, $tPago["total"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[5].$NumRow, $tPago["moneda"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[6].$NumRow, $tPago["tipocambio"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[7].$NumRow, $tPago["formadepago"]);
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[8].$NumRow, $tPago["nombrerec"]);
}
function PintaDetalleEncabezado(){
	global $tPago,$conEncabezado,$NumRow,$objPHPExcel,$col_name;
	$NumRow++;
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[0].$NumRow, "Serie");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[1].$NumRow, "Folio");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[2].$NumRow, "UUID");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[3].$NumRow, "Metodo de pago CFDI");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[4].$NumRow, "Metodo de pago en NP");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[5].$NumRow, "Parcialidad");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[6].$NumRow, "Moneda");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[7].$NumRow, "Tipo de Cambio");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[8].$NumRow, "Monto");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[9].$NumRow, "Metodo de pago en REP");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[10].$NumRow, "Parcialidad Complemento");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[11].$NumRow, "Moneda Complemento");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[12].$NumRow, "Tipo de Cambio Complemento");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[13].$NumRow, "Forma de Pago Complemento");
	$objPHPExcel->getActiveSheet()->setCellValue($col_name[14].$NumRow, "Monto Complemento");
	
	foreach(range('A','O') as $columnID) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
        ->setAutoSize(true);
	}
	
	
	$objPHPExcel->getActiveSheet()->getStyle('A'.$NumRow.':'.$col_name[14].$NumRow)->applyFromArray(
			array(
				'font'    => array(
					'bold'      => true,
					'color'      => array('rgb' => '000000')
				),
				'alignment' => array(
					'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
				),
				'borders' => array(
					'top'     => array(
						'style' => PHPExcel_Style_Border::BORDER_THIN
					)
				),
				'fill' => array(
					// 'type'       => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
					'type'       => PHPExcel_Style_Fill::FILL_SOLID,
					'rotation'   => 90,
					'color' => array('rgb' => 'BBBBBB'),
					/*'startcolor' => array(
						'argb' => 'FFFFAA00'
					),
					'endcolor'   => array(
						'argb' => '00000000'
					)*/
				)
			)
		);
}
?>