<?php

use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
require_once(__DIR__ . '/../extensiones/fpdf/fpdf.php');

class ControladorCompras{

	/*=============================================
	MOSTRAR COMPRAS
	=============================================*/

	static public function ctrMostrarCompras($item, $valor){

		$tabla = "compras";

		$respuesta = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);
 
		return $respuesta;

	}

	/*=============================================
	CREAR COMPRAS
	=============================================*/

	static public function ctrCrearCompra(){

		if(isset($_POST["nuevaCompra"])){

			/*=============================================
			ACTUALIZAR LAS COMPRAS DEL CLIENTE Y REDUCIR EL STOCK Y AUMENTAR LAS VENTAS DE LOS PRODUCTOS
			=============================================*/

			if($_POST["listaProductos"] == ""){

					echo'<script>

				swal({
					  type: "error",
					  title: "La compra no se ejecuta si no hay productos",
					  showConfirmButton: true,
					  confirmButtonText: "Cerrar"
					  }).then(function(result){
								if (result.value) {

								window.location = "compras";

								}
							})

				</script>';

				return;
			}


			$listaProductos = json_decode($_POST["listaProductos"], true);

			$totalProductosComprados = array();

			foreach ($listaProductos as $key => $value) {

			   array_push($totalProductosComprados, $value["cantidad"]);
				
			   $tablaProductos = "productos";

			    $item = "id";
			    $valor = $value["id"];
			    $orden = "id";

			    $traerProducto = ModeloProductos::mdlMostrarProductos($tablaProductos, $item, $valor, $orden);

				$item1a = "compras";
				$valor1a = $value["cantidad"] + $traerProducto["ventas"];

			    $nuevasCompras = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1a, $valor1a, $valor);

				$item1b = "stock";
				$valor1b = $value["stock"];

				$nuevoStock = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1b, $valor1b, $valor);

			}

			$tablaProveedores = "proveedores";

			$item = "id";
			$valor = $_POST["seleccionarProveedor"];

			$traerProveedor = ModeloProveedores::mdlMostrarProveedores($tablaProveedores, $item, $valor);

			$item1a = "compras";
				
			$valor1a = array_sum($totalProductosComprados) + $traerProveedor["compras"];

			$comprasProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item1a, $valor1a, $valor);

			$item1b = "ultima_compra";

			date_default_timezone_set('America/Bogota');

			$fecha = date('Y-m-d');
			$hora = date('H:i:s');
			$valor1b = $fecha.' '.$hora;

			$fechaProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item1b, $valor1b, $valor);

			/*=============================================
			GUARDAR LA COMPRA
			=============================================*/	

			$tabla = "compras";

			$datos = array("id_usuario"=>$_POST["idUsuario"],
						   "id_proveedor"=>$_POST["seleccionarProveedor"],
						   "codigo"=>$_POST["nuevaCompra"],
						   "productos"=>$_POST["listaProductos"],
						   "impuesto"=>$_POST["nuevoPrecioImpuesto"],
						   "neto"=>$_POST["nuevoPrecioNeto"],
						   "total"=>$_POST["totalCompra"],
						   "metodo_pago"=>$_POST["listaMetodoPago"],
                                                   "peso_tara"=>$_POST["nuevaTara"],
                                                   "observacion"=>$_POST["nuevaObservacion"],
                                                   "pesada"=>$_POST["nuevaPesada"]);

			$respuesta = ModeloCompras::mdlIngresarCompra($tabla, $datos);

			if($respuesta == "ok"){

				// $impresora = "epson20";

				// $conector = new WindowsPrintConnector($impresora);

				// $imprimir = new Printer($conector);

				// $imprimir -> text("Hola Mundo"."\n");

				// $imprimir -> cut();

				// $imprimir -> close();

				/**$impresora = "epson20";

				$conector = new WindowsPrintConnector($impresora);

				$printer = new Printer($conector);

				$printer -> setJustification(Printer::JUSTIFY_CENTER);

				$printer -> text(date("Y-m-d H:i:s")."\n");//Fecha de la factura

				$printer -> feed(1); //Alimentamos el papel 1 vez*/

				/**$printer -> text("Inventory QWERY"."\n");//Nombre de la empresa

				$printer -> text("NIT: 71.759.963-9"."\n");//Nit de la empresa

				$printer -> text("Dirección: Calle 44B 92-11"."\n");//Dirección de la empresa

				$printer -> text("Teléfono: 300 786 52 49"."\n");//Teléfono de la empresa

				$printer -> text("FACTURA N.".$_POST["nuevaVenta"]."\n");//Número de factura

				$printer -> feed(1); //Alimentamos el papel 1 vez*/

				/**$printer -> text("Cliente: ".$traerProveedor["nombre"]."\n");//Nombre del cliente

				$tablaVendedor = "usuarios";
				$item = "id";
				$valor = $_POST["idVendedor"];

				$traerVendedor = ModeloUsuarios::mdlMostrarUsuarios($tablaVendedor, $item, $valor);

				$printer -> text("Vendedor: ".$traerVendedor["nombre"]."\n");//Nombre del vendedor

				$printer -> feed(1); //Alimentamos el papel 1 vez*/

				/**foreach ($listaProductos as $key => $value) {

					$printer->setJustification(Printer::JUSTIFY_LEFT);

					$printer->text($value["descripcion"]."\n");//Nombre del producto

					$printer->setJustification(Printer::JUSTIFY_RIGHT);

					$printer->text("$ ".number_format($value["precio"],2)." Und x ".$value["cantidad"]." = $ ".number_format($value["total"],2)."\n");

				}

				$printer -> feed(1); //Alimentamos el papel 1 vez*/			
				
				/**$printer->text("NETO: $ ".number_format($_POST["nuevoPrecioNeto"],2)."\n"); //ahora va el neto

				$printer->text("IMPUESTO: $ ".number_format($_POST["nuevoPrecioImpuesto"],2)."\n"); //ahora va el impuesto

				$printer->text("--------\n");

				$printer->text("TOTAL: $ ".number_format($_POST["totalVenta"],2)."\n"); //ahora va el total

				$printer -> feed(1); //Alimentamos el papel 1 vez*/	

				/**$printer->text("Muchas gracias por su compra"); //Podemos poner también un pie de página

				$printer -> feed(3); //Alimentamos el papel 3 veces*/

				/**$printer -> cut(); //Cortamos el papel, si la impresora tiene la opción

				$printer -> pulse(); //Por medio de la impresora mandamos un pulso, es útil cuando hay cajón moneder

				$printer -> close();*/

	
				echo'<script>

				localStorage.removeItem("rango");

				swal({
					  type: "success",
					  title: "La compra ha sido guardada correctamente",
					  showConfirmButton: true,
					  confirmButtonText: "Cerrar"
					  }).then(function(result){
								if (result.value) {

								window.location = "compras";

								}
							})

				</script>';

			}

		}

	}

	/*=============================================
	EDITAR COMPRA
	=============================================*/

	static public function ctrEditarCompra(){

		if(isset($_POST["editarCompra"])){

			/*=============================================
			FORMATEAR TABLA DE PRODUCTOS Y LA DE CLIENTES
			=============================================*/
			$tabla = "compras";

			$item = "codigo";
			$valor = $_POST["editarCompra"];

			$traerCompra = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);

			/*=============================================
			REVISAR SI VIENE PRODUCTOS EDITADOS
			=============================================*/

			if($_POST["listaProductos"] == ""){

				$listaProductos = $traerCompra["productos"];
				$cambioProducto = false;


			}else{

				$listaProductos = $_POST["listaProductos"];
				$cambioProducto = true;
			}

			if($cambioProducto){

				$productos =  json_decode($traerCompra["productos"], true);

				$totalProductosComprados = array();

				foreach ($productos as $key => $value) {

					array_push($totalProductosComprados, $value["cantidad"]);
					
					$tablaProductos = "productos";

					$item = "id";
					$valor = $value["id"];
					$orden = "id";

					$traerProducto = ModeloProductos::mdlMostrarProductos($tablaProductos, $item, $valor, $orden);

					$item1a = "compras";
					$valor1a = $traerProducto["compras"] - $value["cantidad"];

					$nuevasCompras = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1a, $valor1a, $valor);

					$item1b = "stock";
					$valor1b = $value["cantidad"] - $traerProducto["stock"];

					$nuevoStock = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1b, $valor1b, $valor);

				}

				$tablaProveedores = "proveedor";

				$itemProveedor = "id";
				$valorProveedor = $_POST["seleccionarProveedor"];

				$traerProveedor = ModeloProveedores::mdlMostrarProveedores($tablaProveedores, $itemProveedor, $valorProveedor);

				$item1a = "compras";
				$valor1a = $traerProveedor["compras"] - array_sum($totalProductosComprados);		

				$comprasProveedor = ModeloProveedores::mdlActualizarProveedor ($tablaProveedores, $item1a, $valor1a, $valorProveedor);

				/*=============================================
				ACTUALIZAR LAS COMPRAS DEL CLIENTE Y REDUCIR EL STOCK Y AUMENTAR LAS VENTAS DE LOS PRODUCTOS
				=============================================*/

				$listaProductos_2 = json_decode($listaProductos, true);

				$totalProductosComprados_2 = array();

				foreach ($listaProductos_2 as $key => $value) {

					array_push($totalProductosComprados_2, $value["cantidad"]);
					
					$tablaProductos_2 = "productos";

					$item_2 = "id";
					$valor_2 = $value["id"];
					$orden = "id";

					$traerProducto_2 = ModeloProductos::mdlMostrarProductos($tablaProductos_2, $item_2, $valor_2, $orden);

					$item1a_2 = "compras";
					$valor1a_2 = $value["cantidad"] + $traerProducto_2["compras"];

					$nuevasCompras_2 = ModeloProductos::mdlActualizarProducto($tablaProductos_2, $item1a_2, $valor1a_2, $valor_2);

					$item1b_2 = "stock";
					$valor1b_2 = $value["stock"];

					$nuevoStock_2 = ModeloProductos::mdlActualizarProducto($tablaProductos_2, $item1b_2, $valor1b_2, $valor_2);

				}

				$tablaProveedores_2 = "proveedores";

				$item_2 = "id";
				$valor_2 = $_POST["seleccionarProveedor"];

				$traerProveedor_2 = ModeloProveedores::mdlMostrarProveedores($tablaProveedores_2, $item_2, $valor_2);

				$item1a_2 = "compras";

				$valor1a_2 = array_sum($totalProductosComprados_2) + $traerProveedor_2["compras"];

				$comprasProveedor_2 = ModeloProveedores::mdlMostrarProveedores($tablaProveedores_2, $item1a_2, $valor1a_2, $valor_2);

				$item1b_2 = "ultima_compra";

				date_default_timezone_set('America/Bogota');

				$fecha = date('Y-m-d');
				$hora = date('H:i:s');
				$valor1b_2 = $fecha.' '.$hora;

				$fechaProveedor_2 = ModeloProveedores::mdlMostrarProveedores($tablaProveedores_2, $item1b_2, $valor1b_2, $valor_2);

			}

			/*=============================================
			GUARDAR CAMBIOS DE LA COMPRA
			=============================================*/	

			$datos = array("id_usuario"=>$_POST["idVendedor"],
						   "id_proveedor"=>$_POST["seleccionarProveedor"],
						   "codigo"=>$_POST["editarCompra"],
						   "productos"=>$listaProductos,
						   "impuesto"=>$_POST["nuevoPrecioImpuesto"],
						   "neto"=>$_POST["nuevoPrecioNeto"],
						   "total"=>$_POST["totalCompra"],
						   "metodo_pago"=>$_POST["listaMetodoPago"]);


			$respuesta = ModeloCompras::mdlEditarCompra($tabla, $datos);

			if($respuesta == "ok"){

				echo'<script>

				localStorage.removeItem("rango");

				swal({
					  type: "success",
					  title: "La compra ha sido editada correctamente",
					  showConfirmButton: true,
					  confirmButtonText: "Cerrar"
					  }).then((result) => {
								if (result.value) {

								window.location = "compras";

								}
							})

				</script>';

			}

		}

	}

	/*=============================================
	ELIMINAR COMPRA
	=============================================*/

	static public function ctrEliminarCompra(){

		if(isset($_GET["idCompra"])){

			$tabla = "compras";

			$item = "id";
			$valor = $_GET["idCompra"];

			$traerCompra = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);

			/*=============================================
			ACTUALIZAR FECHA ÚLTIMA COMPRA
			=============================================*/

			$tablaProveedores = "proveedores";

			$itemCompras = null;
			$valorCompras = null;

			$traerCompras = ModeloCompras::mdlMostrarCompras($tabla, $itemCompras, $valorCompras);

			$guardarFechas = array();

			foreach ($traerCompras as $key => $value) {
				
				if($value["id_proveedor"] == $traerCompra["id_proveedor"]){

					array_push($guardarFechas, $value["fecha"]);

				}

			}

			if(count($guardarFechas) > 1){

				if($traerCompra["fecha"] > $guardarFechas[count($guardarFechas)-2]){

					$item = "ultima_compra";
					$valor = $guardarFechas[count($guardarFechas)-2];
					$valorIdProveedor = $traerCompra["id_proveedor"];

					$comprasProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item, $valor, $valorIdProveedor);

				}else{

					$item = "ultima_compra";
					$valor = $guardarFechas[count($guardarFechas)-1];
					$valorIdProveedor = $traerCompra["id_proveedor"];

					$comprasProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item, $valor, $valorIdProveedor);

				}


			}else{

				$item = "ultima_compra";
				$valor = "0000-00-00 00:00:00";
				$valorIdProveedor = $traerCompra["id_proveedor"];

				$comprasProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item, $valor, $valorIdProveedor);

			}

			/*=============================================
			FORMATEAR TABLA DE PRODUCTOS Y LA DE PROVEEDORES
			=============================================*/

			$productos =  json_decode($traerCompra["productos"], true);

			$totalProductosComprados = array();

			foreach ($productos as $key => $value) {

				array_push($totalProductosComprados, $value["cantidad"]);
				
				$tablaProductos = "productos";

				$item = "id";
				$valor = $value["id"];
				$orden = "id";

				$traerProducto = ModeloProductos::mdlMostrarProductos($tablaProductos, $item, $valor, $orden);

				$item1a = "compras";
				$valor1a = $traerProducto["compras"] - $value["cantidad"];

				$nuevasCompras = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1a, $valor1a, $valor);

				$item1b = "stock";
				$valor1b = $traerProducto["stock"] - $value["cantidad"];

				$nuevoStock = ModeloProductos::mdlActualizarProducto($tablaProductos, $item1b, $valor1b, $valor);

			}

			$tablaProveedores = "proveedores";

			$itemProveedor = "id";
			$valorProveedor = $traerCompra["id_proveedor"];

			$traerProveedor = ModeloProveedores::mdlMostrarProveedores($tablaProveedores, $itemProveedor, $valorProveedor);

			$item1a = "compras";
			$valor1a = $traerProveedor["compras"] - array_sum($totalProductosComprados);

			$comprasProveedor = ModeloProveedores::mdlActualizarProveedor($tablaProveedores, $item1a, $valor1a, $valorProveedor);

			/*=============================================
			ELIMINAR COMPRA
			=============================================*/

			$respuesta = ModeloCompras::mdlEliminarCompra($tabla, $_GET["idCompra"]);

			if($respuesta == "ok"){

				echo'<script>

				swal({
					  type: "success",
					  title: "La compra ha sido borrada correctamente",
					  showConfirmButton: true,
					  confirmButtonText: "Cerrar"
					  }).then(function(result){
								if (result.value) {

								window.location = "compras";

								}
							})

				</script>';

			}		
		}

	}

	/*=============================================
	RANGO FECHAS
	=============================================*/	

	static public function ctrRangoFechasCompras($fechaInicial, $fechaFinal){

		$tabla = "compras";

		$respuesta = ModeloCompras::mdlRangoFechasCompras($tabla, $fechaInicial, $fechaFinal);

		return $respuesta;
		
	}

	/*=============================================
	DESCARGAR EXCEL
	=============================================*/

	public function ctrDescargarReporte(){

		if(isset($_GET["reporte"])){

			$tabla = "compras";

			if(isset($_GET["fechaInicial"]) && isset($_GET["fechaFinal"])){

				$compras = ModeloCompras::mdlRangoFechasCompras($tabla, $_GET["fechaInicial"], $_GET["fechaFinal"]);

			}else{

				$item = null;
				$valor = null;

				$compras = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);

			}


			/*=============================================
			CREAMOS EL ARCHIVO DE EXCEL
			=============================================*/

			$Name = $_GET["reporte"].'.xls';

			header('Expires: 0');
			header('Cache-control: private');
			header("Content-type: application/vnd.ms-excel"); // Archivo de Excel
			header("Cache-Control: cache, must-revalidate"); 
			header('Content-Description: File Transfer');
			header('Last-Modified: '.date('D, d M Y H:i:s'));
			header("Pragma: public"); 
			header('Content-Disposition:; filename="'.$Name.'"');
			header("Content-Transfer-Encoding: binary");
		
			echo utf8_decode("<table border='0'> 

					<tr> 
					<td style='font-weight:bold; border:1px solid #eee;'>CÓDIGO</td> 
					<td style='font-weight:bold; border:1px solid #eee;'>CLIENTE</td>
					<td style='font-weight:bold; border:1px solid #eee;'>VENDEDOR</td>
					<td style='font-weight:bold; border:1px solid #eee;'>CANTIDAD</td>
					<td style='font-weight:bold; border:1px solid #eee;'>PRODUCTOS</td>
					<td style='font-weight:bold; border:1px solid #eee;'>IMPUESTO</td>
					<td style='font-weight:bold; border:1px solid #eee;'>NETO</td>		
					<td style='font-weight:bold; border:1px solid #eee;'>TOTAL</td>		
					<td style='font-weight:bold; border:1px solid #eee;'>METODO DE PAGO</td	
					<td style='font-weight:bold; border:1px solid #eee;'>FECHA</td>		
					</tr>");

			foreach ($compras as $row => $item){

				$proveedor = ControladorProveedores::ctrMostrarProveedores("id", $item["id_proveedor"]);
				$vendedor = ControladorUsuarios::ctrMostrarUsuarios("id", $item["id_vendedor"]);

			 echo utf8_decode("<tr>
			 			<td style='border:1px solid #eee;'>".$item["codigo"]."</td> 
			 			<td style='border:1px solid #eee;'>".$proveedor["nombre"]."</td>
			 			<td style='border:1px solid #eee;'>".$vendedor["nombre"]."</td>
			 			<td style='border:1px solid #eee;'>");

			 	$productos =  json_decode($item["productos"], true);

			 	foreach ($productos as $key => $valueProductos) {
			 			
			 			echo utf8_decode($valueProductos["cantidad"]."<br>");
			 		}

			 	echo utf8_decode("</td><td style='border:1px solid #eee;'>");	

		 		foreach ($productos as $key => $valueProductos) {
			 			
		 			echo utf8_decode($valueProductos["descripcion"]."<br>");
		 		
		 		}

		 		echo utf8_decode("</td>
					<td style='border:1px solid #eee;'>$ ".number_format($item["impuesto"],2)."</td>
					<td style='border:1px solid #eee;'>$ ".number_format($item["neto"],2)."</td>	
					<td style='border:1px solid #eee;'>$ ".number_format($item["total"],2)."</td>
					<td style='border:1px solid #eee;'>".$item["metodo_pago"]."</td>
					<td style='border:1px solid #eee;'>".substr($item["fecha"],0,10)."</td>		
		 			</tr>");


			}


			echo "</table>";

		}

	}
        
        public function ctrDescargarReportePdf(){

            if(isset($_GET["reporte"])){

                $tabla = "compras";

                if(isset($_GET["fechaInicial"]) && isset($_GET["fechaFinal"])){

                    $compras = ModeloCompras::mdlRangoFechasCompras($tabla, $_GET["fechaInicial"], $_GET["fechaFinal"]);
                    $fechaInicio = $_GET["fechaInicial"];
                    $fechaFin = $_GET["fechaFinal"];

                }else{

                    $item = null;
                    $valor = null;

                    $compras = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);
                    $fechaInicio = "Sin fecha ini";
                    $fechaFin = "Sin fecha fin";
                }

                /*=============================================
                CREAMOS EL ARCHIVO PDF
                =============================================*/

                $Name = $_GET["reporte"].'.pdf';

                // Crear una instancia de FPDF con orientación horizontal
                $pdf = new FPDF('L', 'mm', 'A4'); // 'L' para Landscape, 'mm' para milímetros, 'A4' es el tamaño de página
                $pdf->SetMargins(10, 10, 10); // Márgenes izquierdo, superior, derecho
                $pdf->AddPage(); // Agregar página al PDF

                // Establecer fuente para el título
                $pdf->SetFont('Arial', 'B', 16);
                $pdf->Cell(0, 10, 'Reporte de compras Recicladora Santiago', 0, 1, 'C');

                // Establecer fuente para el subtítulo
                $pdf->SetFont('Arial', '', 12);
                $pdf->Cell(0, 10, 'Periodo: '.$fechaInicio.' - '.$fechaFin, 0, 1, 'C');

                // Dejar una línea de separación antes de la tabla
                $pdf->Ln(10); // Espacio entre el título y la tabla

                // Establecer fuente para los encabezados de las celdas
                $pdf->SetFont('Arial', 'B', 10);

                // Agregar el encabezado de la tabla
                $pdf->Cell(20, 10, 'CODIGO', 1, 0, 'C');
                $pdf->Cell(40, 10, 'PROVEEDOR', 1, 0, 'C');
                //$pdf->Cell(40, 10, 'VENDEDOR', 1, 0, 'C');
                $pdf->Cell(30, 10, 'PESO NETO KG', 1, 0, 'C');
                $pdf->Cell(80, 10, 'PRODUCTOS', 1, 0, 'C');
                //$pdf->Cell(30, 10, 'IMPUESTO', 1, 0, 'C');
                $pdf->Cell(20, 10, 'TARA', 1, 0, 'C');
                $pdf->Cell(30, 10, 'TOTAL', 1, 0, 'C');
                $pdf->Cell(30, 10, 'PAGO', 1, 0, 'C');
                $pdf->Cell(30, 10, 'FECHA', 1, 1, 'C'); // Salto de línea

                // Establecer el formato para las filas
                $pdf->SetFont('Arial', '', 8);

                // Variable para la suma total
                $totalGeneral = 0;

                foreach ($compras as $row => $item){

                    $proveedor = ControladorProveedores::ctrMostrarProveedores("id", $item["id_proveedor"]);
                    $vendedor = ControladorUsuarios::ctrMostrarUsuarios("id", $item["id_usuario"]);

                    // Imprimir los datos de cada compra
                    $pdf->Cell(20, 10, $item["codigo"], 1, 0, 'C');
                    $pdf->Cell(40, 10, $proveedor["nombre"], 1, 0, 'C');
                    //$pdf->Cell(40, 10, $vendedor["nombre"], 1, 0, 'C');

                    // Productos (en caso de haber más de uno, los concatenamos)
                    $productos = json_decode($item["productos"], true);
                    $cantidad = '';
                    $descripcion = '';
                    foreach ($productos as $key => $valueProductos) {
                        $cantidad .= $valueProductos["cantidad"]."\n";
                        $descripcion .= $valueProductos["descripcion"]."\n";
                    }

                    $pdf->Cell(30, 10,$cantidad, 1, 0, 'C');
                    $pdf->Cell(80, 10, $descripcion, 1, 0, 'C');
                    //$pdf->Cell(30, 10, "$ ".number_format($item["impuesto"], 2), 1, 0, 'C');
                    $pdf->Cell(20, 10, $item["peso_tara"], 1, 0, 'C');
                    $pdf->Cell(30, 10, "Bs. ".number_format($item["total"], 2), 1, 0, 'C');
                    $pdf->Cell(30, 10, $item["metodo_pago"], 1, 0, 'C');
                    $pdf->Cell(30, 10, substr($item["fecha"], 0, 10), 1, 1, 'C');

                    // Acumular el total
                    $totalGeneral += $item["total"];
                }

                // Agregar el "TOTAL GENERAL" justo debajo de la columna "TOTAL"
                $pdf->SetFont('Arial', 'B', 10);
                $pdf->Cell(190, 10, 'TOTAL GENERAL', 1, 0, 'R'); // Alineado a la derecha
                $pdf->Cell(90, 10, "Bs. ".number_format($totalGeneral, 2), 1, 1, 'C'); // Total en la misma columna

                // Enviar el archivo PDF al navegador para descargar
                $pdf->Output('D', $Name); // 'D' indica que el archivo se descargará
            }
    }


	/*=============================================
	SUMA TOTAL COMPRAS
	=============================================*/

	public function ctrSumaTotalCompras(){

		$tabla = "compras";

		$respuesta = ModeloCompras::mdlSumaTotalCompras($tabla);

		return $respuesta;

	}
        
        public function ctrDescargarReporteComprasAgrupadas($fechaInicial = null, $fechaFinal = null) {
            $pdf = new FPDF('P', 'mm', 'A4');
            $pdf->AddPage();

            // Título en recuadro azul
            $pdf->SetFillColor(0, 123, 255);
            $pdf->SetTextColor(255, 255, 255);
            $pdf->SetFont('Arial', 'B', 14);
            $pdf->Cell(0, 10, 'Reporte de Compras Agrupadas', 0, 1, 'C', true);
            $pdf->Ln(2);

            // Información adicional
            $pdf->SetTextColor(0, 0, 0);
            $pdf->SetFont('Arial', '', 10);
            $pdf->Cell(0, 6, 'Santeria Urkupina', 0, 1, 'C');
            $pdf->Cell(0, 6, 'Fecha de generacion: ' . date('d/m/Y'), 0, 1, 'C');
            if ($fechaInicial && $fechaFinal) {
                $pdf->Cell(0, 6, 'Rango de fechas: ' . $fechaInicial . ' hasta ' . $fechaFinal, 0, 1, 'C');
            }
            $pdf->Ln(3);

            // Encabezado de la tabla
            $pdf->SetFont('Arial', 'B', 10);
            $pdf->SetFillColor(200, 200, 200);
            $pdf->Cell(20, 8, 'ID', 1, 0, 'C', true);
            $pdf->Cell(70, 8, 'Producto', 1, 0, 'C', true);
            $pdf->Cell(25, 8, 'Cantidad', 1, 0, 'C', true);
            $pdf->Cell(35, 8, 'Precio Unit.', 1, 0, 'C', true);
            $pdf->Cell(40, 8, 'Total Producto', 1, 1, 'C', true);

            // Consultar productos agrupados
            $productos = ModeloCompras::mdlMostrarProductosAgrupados('diario_stock', $fechaInicial, $fechaFinal);
            $pdf->SetFont('Arial', '', 10);

            $totalProductos = 0;
            foreach ($productos as $productoId => $producto) {
                $pdf->Cell(20, 8, $producto['id'], 1, 0, 'C');
                $pdf->Cell(70, 8, $producto['descripcion'], 1, 0, 'L');
                $pdf->Cell(25, 8, $producto['cantidad'], 1, 0, 'C');
                $pdf->Cell(35, 8, 'Bs ' . number_format($producto['precio'], 2), 1, 0, 'R');
                $pdf->Cell(40, 8, 'Bs ' . number_format($producto['total'], 2), 1, 1, 'R');
                $totalProductos += $producto['total'];
            }

            // Total general
            $pdf->SetFont('Arial', 'B', 11);
            $pdf->SetFillColor(200, 200, 200);
            $pdf->Cell(150, 8, 'Total de Productos', 1, 0, 'R', true);
            $pdf->Cell(40, 8, 'Bs ' . number_format($totalProductos, 2), 1, 1, 'R', true);

            // Descargar el archivo PDF
            $pdf->Output('I', 'Reporte_Compras_Agrupadas.pdf');
        }
        
        public function ctrDescargarReporteComprasPorRecibo($fechaInicial = null, $fechaFinal = null) {
            // Crear instancia de FPDF
            $pdf = new FPDF('P', 'mm', 'A4');
            $pdf->AddPage();

            // Título con fondo azul
            $pdf->SetFillColor(0, 123, 255);
            $pdf->SetTextColor(255, 255, 255);
            $pdf->SetFont('Arial', 'B', 16);
            $pdf->Cell(0, 10, 'Reporte de Compras General', 0, 1, 'C', true);
            $pdf->Ln(4);

            // Mostrar fecha y empresa
            $pdf->SetTextColor(0, 0, 0);
            $pdf->SetFont('Arial', '', 10);
            $pdf->Cell(0, 8, "Santeria Urkupina", 0, 1, 'C');
            $pdf->Cell(0, 8, "Generado el " . date("d/m/Y H:i:s") . " ", 0, 1, 'C');
            $pdf->Ln(2);

            // Rango de fechas
            if ($fechaInicial && $fechaFinal) {
                $pdf->SetFont('Arial', 'B', 10);
                $pdf->Cell(0, 8, 'Desde: ' . $fechaInicial . '  Hasta: ' . $fechaFinal, 0, 1, 'C');
                $pdf->Ln(4);
            }

            // Encabezado tabla
            $pdf->SetFont('Arial', 'B', 10);
            $pdf->SetFillColor(230, 230, 230); // gris claro
            $pdf->SetTextColor(0, 0, 0);
            $pdf->Cell(25, 8, 'Recibo', 1, 0, 'C', 1);
            $pdf->Cell(30, 8, 'Fecha', 1, 0, 'C', 1);
            $pdf->Cell(45, 8, 'Proveedor', 1, 0, 'C', 1);
            $pdf->Cell(45, 8, 'Usuario', 1, 0, 'C', 1);
            $pdf->Cell(35, 8, 'Total', 1, 1, 'C', 1);

            // Datos de compras
            $compras = ModeloCompras::mdlMostrarCompras('diario_stock', null, null, $fechaInicial, $fechaFinal);
            $totalCompras = 0;

            $pdf->SetFont('Arial', '', 10);
            foreach ($compras as $compra) {
                $proveedor = ModeloProveedores::mdlMostrarProveedores("proveedores", "id", $compra['id_proveedor']);
                $usuario = ModeloUsuarios::mdlMostrarUsuarios("usuarios", "id", $compra['id_usuario']);
                $fechaFormateada = date("d/m/Y", strtotime($compra['fecha']));

                $pdf->Cell(25, 8, $compra['referencia'], 1, 0, 'C');
                $pdf->Cell(30, 8, $fechaFormateada, 1, 0, 'C');
                $pdf->Cell(45, 8, $proveedor['nombre'], 1, 0, 'L');
                $pdf->Cell(45, 8, $usuario['nombre'], 1, 0, 'L');
                $pdf->Cell(35, 8, 'Bs ' . number_format($compra['total'], 2), 1, 1, 'R');

                $totalCompras += $compra['total'];
            }

            // Total de compras
            $pdf->Ln(4);
            $pdf->SetFont('Arial', 'B', 12);
            $pdf->SetFillColor(200, 200, 200); // gris más oscuro
            $pdf->Cell(145, 8, 'Total de Compras', 1, 0, 'R', 1);
            $pdf->Cell(35, 8, 'Bs ' . number_format($totalCompras, 2), 1, 1, 'R', 1);

            // Mostrar en nueva pestaña
            header('Content-Type: application/pdf');
            header('Content-Disposition: inline; filename="Reporte_Compras_Por_Recibo.pdf"');
            $pdf->Output('I', 'Reporte_Compras_Por_Recibo.pdf');
        }




	/*=============================================
	DESCARGAR XML
	=============================================*/

	static public function ctrDescargarXML(){

		if(isset($_GET["xml"])){


			$tabla = "compras";
			$item = "codigo";
			$valor = $_GET["xml"];

			$compras = ModeloCompras::mdlMostrarCompras($tabla, $item, $valor);

			// PRODUCTOS

			$listaProductos = json_decode($compras["productos"], true);

			// CLIENTE

			$tablaProveedores = "proveedores";
			$item = "id";
			$valor = $compras["id_proveedor"];

			$traerProveedor = ModeloProveedores::mdlMostrarProveedores($tablaProveedores, $item, $valor);

			// COMPRADOR

			$tablaVendedor = "usuarios";
			$item = "id";
			$valor = $compras["id_vendedor"];

			$traerVendedor = ModeloUsuarios::mdlMostrarUsuarios($tablaVendedor, $item, $valor);

			//http://php.net/manual/es/book.xmlwriter.php

			$objetoXML = new XMLWriter();

			$objetoXML->openURI($_GET["xml"].".xml"); //Creación del archivo XML

			$objetoXML->setIndent(true); //recibe un valor booleano para establecer si los distintos niveles de nodos XML deben quedar indentados o no.

			$objetoXML->setIndentString("\t"); // carácter \t, que corresponde a una tabulación

			$objetoXML->startDocument('1.0', 'utf-8');// Inicio del documento
			
			// $objetoXML->startElement("etiquetaPrincipal");// Inicio del nodo raíz

			// $objetoXML->writeAttribute("atributoEtiquetaPPal", "valor atributo etiqueta PPal"); // Atributo etiqueta principal

			// 	$objetoXML->startElement("etiquetaInterna");// Inicio del nodo hijo

			// 		$objetoXML->writeAttribute("atributoEtiquetaInterna", "valor atributo etiqueta Interna"); // Atributo etiqueta interna

			// 		$objetoXML->text("Texto interno");// Inicio del nodo hijo
			
			// 	$objetoXML->endElement(); // Final del nodo hijo
			
			// $objetoXML->endElement(); // Final del nodo raíz


			$objetoXML->writeRaw('<fe:Invoice xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd">');

			$objetoXML->writeRaw('<ext:UBLExtensions>');

			foreach ($listaProductos as $key => $value) {
				
				$objetoXML->text($value["descripcion"].", ");
			
			}

			

			$objetoXML->writeRaw('</ext:UBLExtensions>');

			$objetoXML->writeRaw('</fe:Invoice>');

			$objetoXML->endDocument(); // Final del documento

			return true;	
		}

	}

}