<?php
	session_start();
	include('conexion.php');	
	include 'mysql_Agregar_auditoria.php';
	ini_set('max_execution_time', '300');
	set_time_limit(500);
	if (PHP_SAPI == 'cli')
		die('This report should only be run from a Web Browser');

	/** Include PHPExcel */
	require('./PHPExcel/Classes/PHPExcel.php');
	
	$id_cliente = $_SESSION['id_cliente'];

	$activa = $_GET['activa'];
	$cancelada = $_GET['cancelada'];
	$pendiente = $_GET['pendiente'];

	$fecha_contable = $_GET['fecha_contable'];

	$fecha_contable_inicial = $_GET['fecha_contable_inicial'];
	$fecha_contable_final = $_GET['fecha_contable_final'];

	$fecha_registro = $_GET['fecha_registro'];

	$fecha_registro_inicial = $_GET['fecha_registro_inicial'];
	$fecha_registro_final = $_GET['fecha_registro_final'];

	$serie = $_GET['serie'];
	$serie_valor = $_GET['serie_valor'];

	$folio = $_GET['folio'];
	$folio_valor = $_GET['folio_valor'];

	$limit = $_GET['limit'];

	/////////////////////////////////////////////////////////////////////////////////////

	$sql = "SELECT ";
	$sql .= "id_cliente, ";
	$sql .= "razon_social, ";
	$sql .= "nombre_comercial ";
	$sql .= "FROM ";
	$sql .= "clientes ";
	$sql .= "WHERE ";
	$sql .= "id_cliente = " . $id_cliente;
	
	$resultado = $conexion->query($sql); 
								
	if (!$resultado) 
	{
		die("Error: no se pudo realizar la consulta cliente");
	}
		
	while ($fila = $resultado->fetch_assoc()) 
	{
		$_SESSION['id_cliente'] = $fila['id_cliente'];
		$_SESSION['razon_cliente'] = $fila['razon_social'];
		$_SESSION['nombre_cliente'] = $fila['nombre_comercial'];
	}

	$resultado->free();

	/////////////////////////////////////////////////////////////////////////////////////

	if ($fecha_contable != 0)
	{
		$fecha_contable_inicio = str_replace( "-", '', $fecha_contable_inicial);
		$turno_inicio = $fecha_contable_inicio . "00";

		$fecha_contable_fin = str_replace( "-", '', $fecha_contable_final);
		$turno_fin = $fecha_contable_fin . "06";		
	}
	if ($fecha_registro != 0)
	{
		$fecha_registro_inicio = str_replace( "-", '', $fecha_registro_inicial);
		$turno_inicio = $fecha_registro_inicio . "00";

		$fecha_registro_fin = str_replace( "-", '', $fecha_registro_final);
		$turno_fin = $fecha_registro_fin . "06";		
	}

	/////////////////////////////////////////////////////////////////////////////////////


	// Crea un nuevo objeto PHPExcel
	$objPHPExcel = new PHPExcel();

	// Establecer propiedades
	$objPHPExcel->getProperties()
	->setCreator("Gaslight")
	->setLastModifiedBy("Gaslight")
	->setTitle("Reporte de Facturas ")
	->setSubject("Reporte de Facturas ")
	->setDescription("Reporte de Facturas")
	->setKeywords("Excel Office 2007 openxml php")
	->setCategory("Facturas");

	// Agregar Informacion
	// Combino las celdas desde A1 hasta E1
	$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:C1');
	$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(30);
	$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(30);
	$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);
	$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
	$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
	$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(15);
	$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(12);
	$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(18);
	$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(10);
	$objPHPExcel->getActiveSheet()->getColumnDimension('O')->setWidth(18);
	$objPHPExcel->getActiveSheet()->getColumnDimension('P')->setWidth(15);

	date_default_timezone_set('America/Mexico_City');
		$time = time();	

	// Fuente de la primera fila en negrita
	$boldArray = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));
	$bold2Array = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));

	$objPHPExcel->getActiveSheet()->getStyle('A1:C1')->applyFromArray($boldArray);
	$objPHPExcel->getActiveSheet()->getStyle('A2:P2')->applyFromArray($bold2Array);
	//$objPHPExcel->getActiveSheet()->setAutoFilter('A6:L6');
	
	
		
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'REPORTE DE FACTURAS')
            ->setCellValue('A2', 'CLIENTE:'.$_SESSION["id_cliente"].'-'. $_SESSION['razon_cliente'])
            ->setCellValue('J1', 'Fecha: ' . date("Y/m/d  H:i:s", $time) )
            ;

$cel=3;//Numero de fila donde empezara a crear  el reporte

	$objPHPExcel->setActiveSheetIndex(0)				
					->setCellValue("A".($cel), 'Serie')
					->setCellValue("B".($cel), 'Folio')
					->setCellValue("C".($cel), 'Tipo')
					->setCellValue("D".($cel), 'Descripcion')
					->setCellValue("E".($cel), 'Razon Social')
					->setCellValue("F".($cel), 'RFC')
					->setCellValue("G".($cel), 'Estado')
					->setCellValue("H".($cel), 'Subtotal')
					->setCellValue("I".($cel), 'IVA')
					->setCellValue("J".($cel), 'Total')
					->setCellValue("K".($cel), 'Fecha');
		
	$cel++;
	$sql = "select distinct ";
	$sql .= "f.id_factura, ";
	$sql .= "f.id_receptor, ";
	$sql .= "f.serie, ";
	$sql .= "f.folio, ";
	$sql .= "f.fecha_expedicion, ";
	$sql .= "f.e_razon_social, ";
	$sql .= "f.e_rfc, ";
	$sql .= "f.sub_total, ";
	$sql .= "f.total, ";
	$sql .= "f.estado, ";
	$sql .= "f.iva, ";
	$sql .= "f.fecha_timbrado, ";
	$sql .= "f.estatus_proceso, ";
	$sql .= "f.descripcion_estatus, ";
	$sql .= "f.factura_terminada, ";
	$sql .= "f.id_emisor, ";
	$sql .= "f2.version, ";
	$sql .= "f.comprobante_tipo, ";
	$sql .= "e.id_estacion ";
	$sql .= "from ";
	$sql .= "facturas f ";
	$sql .= "left join facturas2 f2 on (f2.id_factura = f.id_factura) ";
	$sql .= "left join estacion e on (e.id_estacion = f.id_emisor) ";
	$sql .= "where ";
	$sql .= "f.id_factura <> 0 ";
	$sql .= "and f.id_receptor = " . $id_cliente . " ";

	$opc_estado = $activa . '-' . $cancelada . '-' . $pendiente;

	switch ($opc_estado) 
	{
		case "0-0-0":
			$sql .= " ";
			break;
		case "0-0-1":
			$sql .= " and f.factura_terminada = 0 ";
			break;
		case "0-1-0":
			$sql .= " and f.estado = 0 ";
			break;
		case "0-1-1":
			$sql .= " and (f.estado = 0 or f.factura_terminada = 0 ) ";
			break;
		case "1-0-0":
			$sql .= " and f.estado = 1 ";
			break;
		case "1-0-1":
			$sql .= " and (f.estado = 1 or f.factura_terminada = 0 ) ";
			break;
		case "1-1-0":
			$sql .= " and (f.estado = 1 or f.estado = 0 ) ";
			break;
		case "1-1-1":
			$sql .= " and (f.estado = 1 or f.estado = 0 or f.factura_terminada = 0 ) ";
			break;		    
	}

	if ($fecha_registro != 0)
	{
		$sql .= "and f.fecha_expedicion >= '" . $fecha_inicial . " 00:00:00' and f.fecha_expedicion <= '" . $fecha_final . " 23:59:59' ";
	}

	if ($fecha_contable != 0)
	{
		$sql .= "and f.id_turno >= " . $turno_inicio . " and f.id_turno <= " . $turno_fin . " ";
	}

	if ($serie != 0)
	{
		$sql .= "and f.serie = '" . $serie_valor . "' ";
	}

	if ($folio != 0)
	{
		$sql .= "and f.folio = " . $folio_valor . " ";
	}

	$sql .= "order by f.id_factura desc ";

	if ($limit != 0)
	{
		$sql .= "limit 500 ";
	}

	$resultado = $conexion->query($sql); 

	if (!$resultado) 
	{
		die("Error: no se pudo realizar la consulta");
	}

	$sub_total_f = 0;
	$iva_f = 0;
	$total_f = 0;
	$t_activas = 0;
	$t_canceladas = 0;
	$t_pendientas = 0;


			while($fila = $resultado->fetch_assoc()) 
			{	
				if ($fila['estado'] == 0)
				{
					$estado = 'Cancelada';
				}
				
				if ($fila['estado'] == 1)
				{
					$estado = 'Activa';
				}

				if ($fila['comprobante_tipo'] == "I" || $fila['comprobante_tipo'] == "ingreso")
				{
					$cadena_tipo = "Ingreso";
				}
						
				if ($fila['comprobante_tipo'] == "E" || $fila['comprobante_tipo'] == "egreso")
				{
					$cadena_tipo = "Egreso";
				}
					
				if ($fila['comprobante_tipo'] == "P" || $fila['comprobante_tipo'] == "pago")
				{
					$cadena_tipo = "Pago";
				}				

				$date = date_create($fila['fecha_expedicion']);
				$fechaMuestra =  date_format($date, 'Y-m-d H:i:s');
				$subtotal_Muestra = number_format($fila['sub_total'], 2, '.', '');
				$total_Muestra =number_format($fila['total'], 2, '.', '');
				$iva_Muestra = number_format($fila['iva'], 2, '.', '');
				$cadena_tipo = "";

				$objPHPExcel->setActiveSheetIndex(0)				
					->setCellValue("A".($cel), $fila['serie'])
					->setCellValue("B".($cel), $fila['folio'])
					->setCellValue("C".($cel), $cadena_tipo)
					->setCellValue("D".($cel), $fila['descripcion_estatus'])
					->setCellValue("E".($cel), $fila['e_razon_social'])
					->setCellValue("F".($cel), $fila['e_rfc'])
					->setCellValue("G".($cel), $estado)
					->setCellValue("H".($cel), $fila['sub_total'],0,0,'R')
					->setCellValue("I".($cel), $fila['iva'],0,0,'R')
					->setCellValue("J".($cel), $fila['total'],0,0,'R')
					->setCellValue("K".($cel), $fechaMuestra,0,0,'R');

			
					$cel++;	
					$sub_total_f += $fila['sub_total'];
					$iva_f += $fila['iva'];
					$total_f += $fila['total'];		

					if ($estado == "Activa") 
					{
						$t_activas += 1;
					}

					if ($estado == "Cancelada") 
					{
						$t_canceladas += 1;
					}
			}		
	$resultado->free();

		$objPHPExcel->setActiveSheetIndex(0)	
					->setCellValue("G".($cel), 'TOTAL:')
					->setCellValue("H".($cel), $sub_total_f,0,0,'R')
					->setCellValue("I".($cel), $iva_f,0,0,'R')
					->setCellValue("J".($cel), $total_f,0,0,'R');

	$cel+=4;
	/*$objPHPExcel->setActiveSheetIndex(0)
				->setCellValue("A".($cel), 'Systemental Ventas.');	*/	

	$informacion = 'Genero Reporte Facturas formato EXCEL ';
	$datos = "Con filtros: ";
	if($fecha1==1){ $datos=$datos." Fecha_contable=".$fecha_inicio1." hasta ".$fecha_fin1;}
	if($fecha1==1){ $datos=$datos." Fecha_Registro=".$fecha_inicio2." hasta ".$fecha_fin2;}
	if($serie==1){  $datos=$datos." Serie=".$id_serie;}
	if($folio==1){  $datos=$datos." Folio=".$id_folio;}
	$datos=$datos." Activa=".$activa." Cancelada=".$cancelada." Reproceso=".$reproceso." limit=".$limit;
	insertAuditoria($informacion,$datos,$_SESSION['id_usuario'],$_SESSION['direccion_ip'],$_SESSION['direccion_mac']);	

	
	mysqli_close($iden);	

	// Renombrar Hoja
	$objPHPExcel->getActiveSheet()->setTitle('REPORTE DE TRANSACCIONES');

	// Establecer la hoja activa, para que cuando se abra el documento se muestre primero.
	$objPHPExcel->setActiveSheetIndex(0);

	// Se modifican los encabezados del HTTP para indicar que se envia un archivo de Excel.
	header('Cache-Control: max-age=0');
	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
	ob_end_clean();
	// We'll be outputting an excel file
	header('Content-type: application/vnd.ms-excel');
	//$razon_social= str_replace(" ","_",$cliente);
	//$razon_social = str_replace(array('"', "'", ' ', ','), '_', $razon_social);
	$nombre_archivo="Reporte_Facturas".date("Y_m_d_H_i_s", $time);
	$nombre_archivo=strtoupper($nombre_archivo);
	header('Content-Disposition: attachment; filename="'.$nombre_archivo.'.xlsx"');
	$objWriter->save('php://output');
	exit;
?>