<?php 

	include("config.php");
	require_once("phpexcel/PHPExcel.php");

	require_once "../sunat/librerias/pclzip/pclzip.lib.php"; //ojo 



	if (PHP_SAPI == 'cli')
    	die('Este archivo solo se puede ver desde un navegador web');
	
	// Se crea el objeto PHPExcel
	$objPHPExcel = new PHPExcel();


	$fecha1 = $_GET['fecha1']; //mes
	$fecha2 = $_GET['fecha2']; //año
	$ruc = $_GET['ruc'];

	$fecha_inicio = $fecha2."-".$fecha1."-01"; 
	$fecha_fin = $fecha2."-".$fecha1."-31"; 

	$conexion = new mysqli($db_host,$db_user,$db_pass,$db_name);
	if (mysqli_connect_errno()) {
	   printf("La conexión con el servidor de base de datos falló: %s\n", mysqli_connect_error());
	   exit();
	}
	
	$consulta1 = 'SELECT 
		(SELECT razon_social FROM empresa WHERE id_empresa=1) as "Nombre_Empresa",
		(SELECT ruc FROM empresa WHERE id_empresa=1) as "RUC_Empresa",
		v.id_venta,

		DATE_FORMAT(v.fecha_venta, "%d/%m/%Y")  as "Fecha_Emision", 
		DATE_FORMAT(v.fecha_pago, "%d/%m/%Y")  as "Fecha_Vencimiento",

		tc.codigo as "Tipo_Comprobante",

		v.serie_comprobante as "Serie",
		v.numero_comprobante as "Numero",

		td.codigo as "Tipo_Documento",

		c.numero_documento as "RUC", 
		c.nombre as "Razon_Social", 

		

		(SELECT SUM(ROUND(dv.precio_venta_neto, 2)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="AFECTO" AND dv.id_venta=v.id_venta) as "Base_imponible",
        
        (SELECT SUM(ROUND(dv.impuesto, 2)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="AFECTO" AND dv.id_venta=v.id_venta) as "Igv",
        
		
		(SELECT SUM(dv.precio_venta_total) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="EXONERADO" AND dv.id_venta=v.id_venta) as "Exonerado",
		(SELECT SUM(dv.precio_venta_total) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="INAFECTO" AND dv.id_venta=v.id_venta) as "Inafecto",
		(SELECT (v.total_venta-SUM(dv.precio_venta_total)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE dv.id_venta=v.id_venta) as "Icbper",

		v.total_venta as "Importe_Total",
		v.estado_envio as "Estado"

		FROM ventas v INNER JOIN clientes c ON v.id_cliente = c.id_cliente 
		INNER JOIN tipo_comprobante tc ON v.id_tipo_comprobante = tc.id_tipo_comprobante 
		INNER JOIN tipo_documento td ON c.id_tipo_documento = td.id_tipo_documento 

		WHERE (v.fecha_venta >= "'.$fecha2.'-'.$fecha1.'-01" AND v.fecha_venta <= "'.$fecha2.'-'.$fecha1.'-31") AND v.estado="1" ORDER BY v.created_at ASC';
	

		$consulta2 = 'SELECT 

		(SELECT razon_social FROM empresa WHERE id_empresa=1) as "Nombre_Empresa",
		(SELECT ruc FROM empresa WHERE id_empresa=1) as "RUC_Empresa",

		n.id_nota,

		DATE_FORMAT(n.created_at, "%d/%m/%Y")  as "Fecha_Emision", 
		v.fecha_venta as "Fecha_Anulado", 

		tcn.codigo as "Tipo_Comprobante",
		n.serie_nota as "Serie",
		n.numero_nota as "Numero",

		td.codigo as "Tipo_Documento",
		c.numero_documento as "RUC", 
		c.nombre as "Razon_Social", 


		(SELECT SUM(ROUND(dv.precio_venta_neto, 2)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="AFECTO" AND dv.id_venta=v.id_venta) as "Base_imponible",
        (SELECT SUM(ROUND(dv.impuesto, 2)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="AFECTO" AND dv.id_venta=v.id_venta) as "Igv",
		
		(SELECT SUM(dv.precio_venta_total) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="EXONERADO" AND dv.id_venta=n.id_venta) as "Exonerado",
		(SELECT SUM(dv.precio_venta_total) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE p.situacion_impuesto="INAFECTO" AND dv.id_venta=n.id_venta) as "Inafecto",
		(SELECT (v.total_venta-SUM(dv.precio_venta_total)) FROM detalle_venta dv INNER JOIN productos p ON p.id_producto=dv.id_producto WHERE dv.id_venta=v.id_venta) as "Icbper",

		v.total_venta as "Importe_Total",


		DATE_FORMAT(v.fecha_venta, "%d/%m/%Y")  as "Fecha_Venta", 
		tcv.codigo as "Tipo_Comprobante_Venta",
		v.serie_comprobante as "Serie_Venta",
		v.numero_comprobante as "Numero_Venta",
		
		n.estado_envio as "Estado"

		FROM notas n INNER JOIN ventas v ON n.id_venta = v.id_venta 
		INNER JOIN clientes c ON c.id_cliente = v.id_cliente 
		INNER JOIN tipo_comprobante tcn ON tcn.id_tipo_comprobante = n.id_tipo_comprobante 
		INNER JOIN tipo_comprobante tcv ON tcv.id_tipo_comprobante = v.id_tipo_comprobante 
		INNER JOIN tipo_documento td ON td.id_tipo_documento = c.id_tipo_documento 

		WHERE (n.created_at >= "'.$fecha2.'-'.$fecha1.'-01" AND n.created_at <= "'.$fecha2.'-'.$fecha1.'-31" ) AND n.estado="1" ORDER BY n.created_at ASC';
	
	 
	$resultado1 = $conexion->query($consulta1);
	$resultado2 = $conexion->query($consulta2);

	$prefijo = "LE";
	$sufijo = "00140400021112";


	$nombreArchivo = $prefijo.$ruc.$fecha2.$fecha1.$sufijo.".txt";
	$archivo = fopen($nombreArchivo, "w");

	if ($archivo) {
		
		if($resultado1->num_rows > 0 ){

			while ($fila = $resultado1->fetch_array()) {

				$linea = 
				utf8_encode($fila['RUC_Empresa']) . "|" . 
				utf8_encode($fila['Nombre_Empresa']) . "|" . 

				utf8_encode($fecha2.$fecha1). "||" . // 202305
										
				utf8_encode($fila['Fecha_Emision']) . "|" . 
				utf8_encode($fila['Fecha_Vencimiento']) . "|" . 
				utf8_encode($fila['Tipo_Comprobante']) . "|" . 
				utf8_encode($fila['Serie']) . "|" . 
				utf8_encode($fila['Numero']) . "||" . 

				utf8_encode($fila['Tipo_Documento']) . "|" . 
				utf8_encode($fila['RUC']) . "|" . // ruc cliente

				utf8_encode($fila['Razon_Social']) . "|0.00|" . // nombre cliente

				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Base_imponible']) ? $fila['Base_imponible'] : "0.00") ) . "|" . // Base imponible

				"0.00|" . // Base imponible Nota mes pasado

				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Igv']) ? $fila['Igv'] : "0.00") ) . "|" . // Igv

				"0.00|" . // Igv Nota mes pasado

				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Exonerado']) ? $fila['Exonerado'] : "0.00") ) . "|" . // exonerado
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Inafecto']) ? $fila['Inafecto'] : "0.00") ) . "|" . // inafacto
				"0.00|" . // isc
				"0.00|" . // arroz
				"0.00|" . // igv arroz
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Icbper']) ? $fila['Icbper'] : "0.00") ) . "|" . // icbper
				"0.00|" . // otros
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : $fila['Importe_Total'] ) . "|" . // total

				"PEN||" . // moneda

				"|" . // fecha anulado
				"|" . // tipo anulado
				"|" . // serie anulado
				"|" . // numero anulado

				"||||\n"; // otros

				fwrite($archivo, $linea);
			}
		}
		if($resultado2->num_rows > 0 ){
			while ($fila = $resultado2->fetch_array()) {

				$linea = 
				utf8_encode($fila['RUC_Empresa']) . "|" . 
				utf8_encode($fila['Nombre_Empresa']) . "|" . 

				utf8_encode($fecha2.$fecha1). "||" . 
										
				utf8_encode($fila['Fecha_Emision']) . "||" . 
				utf8_encode($fila['Tipo_Comprobante']) . "|" . 
				utf8_encode($fila['Serie']) . "|" . 

				utf8_encode($fila['Numero']) . "||" . 

				utf8_encode($fila['Tipo_Documento']) . "|" . 
				utf8_encode($fila['RUC']) . "|" . 

				utf8_encode($fila['Razon_Social']) . "|0.00|" . 



				utf8_encode( check_in_range($fecha_inicio, $fecha_fin, $fila['Fecha_Anulado']) ? ($fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Base_imponible']) ? "-".$fila['Base_imponible'] : "0.00")) : "0.00" ) . "|" . // Base imponible

				utf8_encode( check_in_range($fecha_inicio, $fecha_fin, $fila['Fecha_Anulado']) ? "0.00"  : ($fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Base_imponible']) ? "-".$fila['Base_imponible'] : "0.00")) ) . "|" .  // Base imponible Nota mes pasado

				utf8_encode( check_in_range($fecha_inicio, $fecha_fin, $fila['Fecha_Anulado']) ? ($fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Igv']) ? "-".$fila['Igv'] : "0.00")) : "0.00" ) . "|" .  // Igv

				utf8_encode( check_in_range($fecha_inicio, $fecha_fin, $fila['Fecha_Anulado']) ? "0.00" : ($fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Igv']) ? "-".$fila['Igv'] : "0.00")) ) . "|" . // Igv nota mes pasado


		

				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Exonerado']) ? "-".$fila['Exonerado'] : "0.00") ) . "|" . // exonerado
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Inafecto']) ? "-".$fila['Inafecto'] : "0.00") ) . "|" . // exonerado
				"0.00|" . // isc
				"0.00|" . // arroz
				"0.00|" . // igv arroz
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : (!is_null($fila['Icbper']) ? "-".$fila['Icbper'] : "0.00") ) . "|" . // icbper
				"0.00|" . // otros
				
				utf8_encode( $fila['Estado']=="RECHAZADO" ? "0.00" : "-".$fila['Importe_Total'] ) . "|" . // total

				"PEN||" . // otros

				utf8_encode($fila['Fecha_Venta']) . "|" . // fecha
				utf8_encode($fila['Tipo_Comprobante_Venta']) . "|" . // tipo
				utf8_encode($fila['Serie_Venta']) . "|" . // serie
				utf8_encode($fila['Numero_Venta']) . "|" . // numero

				"||||\n"; // otros

				fwrite($archivo, $linea);
			}
		}
   		fclose($archivo);

		$nombreArchivoZIP = $prefijo.$ruc.$fecha2.$fecha1.$sufijo.".zip";
	
	    $zip = new PclZip($nombreArchivoZIP);
		$zip->create($nombreArchivo);
	
   		header('Content-Type: application/zip');
	    header('Content-Disposition: attachment; filename=' . $nombreArchivoZIP);
	    ob_end_clean();
	    flush();
	    readfile($nombreArchivoZIP);

   		sleep(1);
		unlink($nombreArchivo);
		unlink($nombreArchivoZIP);
	}
	else{
		echo "Error al abrir el archivo";
	}

	//comprobar rango de fechas
	function check_in_range($fecha_inicio, $fecha_fin, $fecha){

	     $fecha_inicio = strtotime($fecha_inicio);
	     $fecha_fin = strtotime($fecha_fin);
	     $fecha = strtotime($fecha);

	     if(($fecha >= $fecha_inicio) && ($fecha <= $fecha_fin)) {

	         return true;

	     } else {

	         return false;

	     }
	}
	






