<?php
require_once('./config/app/views.php');
require_once('./config/app/controller.php');
require_once('./models/ComprasModel.php');

class Compras extends controller{
    public function __construct() {
        session_start();
         $this->model = new ComprasModel();
        parent::__construct();
       }  
      public function index(){
            $id_user = (int)$_SESSION['id_usuario'];
            $verificar = $this->model->verificarPermiso($id_user, 'nueva_compra');
            if (!empty($verificar) || $id_user == 1 ) {  
                $this->views->getviews($this, "index");
            } else {
                header('Location: ' . base_url . 'errors/permisos');
    
            }   

            
        }
        public function ventas() {
            $id_user = (int)$_SESSION['id_usuario'];
            $verificar = $this->model->verificarPermiso($id_user, 'Punto de venta');
            if (!empty($verificar) || $id_user == 1 ) {  


            $data = $this->model->getClientes();
            $this->views->getviews($this, "ventas", $data);

            } else {
                header('Location: ' . base_url . 'errors/permisos');

            } 
        }
        

        public function historial_ventas() {
            $id_user = (int)$_SESSION['id_usuario'];
            $verificar = $this->model->verificarPermiso($id_user, 'historial_ventas');
            if (!empty($verificar) || $id_user == 1 ) {  
                $this->views->getviews($this, "historial_ventas");
            } else {
                header('Location: ' . base_url . 'errors/permisos');
    
            }
          
        
          
        }
        



        function buscarCodigo($cod){
           $data=$this->model->getProCod($cod);
           echo json_encode($data, JSON_UNESCAPED_UNICODE);
           die();

            
        }

        

        public function ingresar()
        {
            $id = $_POST['id'];
            $datos = $this->model->getProductos($id);
            $id_producto = $datos['id'];
            $id_usuario = isset($_SESSION['id_usuario']);
            $precio = $datos['precio_compra'];
            $cantidad = $_POST['cantidad'];
           
            $comprovar= $this->model->consultarDetalle('detalle',$id_producto, $id_usuario);
            if (empty($comprovar)) {

                 $sub_total = $precio * $cantidad;
                 $data = $this->model->registrarCompras('detalle',$id_producto, $id_usuario, $precio, $cantidad, $sub_total);
            
            if ($data == "ok") {
                $msg = "ok";
            } else {
                $msg = "error";
            }
            
            }else {
                $total_cantidad = $comprovar['cantidad'] + $cantidad;
                $sub_total = $total_cantidad * $precio;
                $data = $this->model->actualizarDetalle('detalle',$precio, $total_cantidad, $sub_total, $id_producto, $id_usuario);
           
           if ($data == "modificado") {
               $msg = "modificado";
           } else {
               $msg = "error";
           }
           
            }
             echo json_encode($msg, JSON_UNESCAPED_UNICODE);
            die();
        }





        
        
        public function ingresarVenta()
        {
            $id = $_POST['id'];
            $datos = $this->model->getProductos($id);
            $id_producto = $datos['id'];
            $id_medida = $datos['id_medida'];
            $id_usuario = (int)$_SESSION['id_usuario'];
            $precio = $datos['precio_venta'];
            $precio_compra = $datos['precio_compra'];
            $cantidad = $_POST['cantidad'];
            $precios_mayoristas = $this->model->traer_precios_mayoristas($id_producto);
            $comprovar= $this->model->consultarDetalle('detalle_temp',$id_producto, $id_usuario);
            if (empty($comprovar)) {
                if ($datos['cantidad'] >= $cantidad) {
                    $compras_precio = $cantidad * $precio_compra;
                    $mini_total = null;
                    foreach ($precios_mayoristas as $precio_mayorista) {
                        if ($cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
                            $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
                            $precio_format = number_format($precio_unitario, 2);
                            $mini_total = $precio_format * $cantidad;
                            if ($cantidad == $precio_mayorista['cantidad']) {
                                $mini_total = $precio_mayorista['precio'];
                            }
                        } 
                    }
                    if ($mini_total !== null) {
                        $data = $this->model->registrarDetalle('detalle_temp',$id_producto, $id_usuario, $precio_format, $cantidad, $mini_total, $compras_precio, $id_medida);
                        if ($data == "ok") {
                            $msg = "ok";
                        } else {
                            $msg = "error";
                        }
                        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                        exit;
                    } else {
                        $sub_total = $cantidad * $precio ;
                        $data = $this->model->registrarDetalle('detalle_temp',$id_producto, $id_usuario, $precio, $cantidad, $sub_total, $compras_precio, $id_medida);
                        if ($data == "ok") {
                            $msg = "ok";
                        } else {
                            $msg = "error";
                        }
                        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                        exit;
                    }
                }else {
                    $msg = "PRODUCTO AGOTADO";
                    echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                    exit;
                }
            } else {
                $total_cantidad = $comprovar['cantidad'] + $cantidad;
                if ($datos['cantidad'] >= $total_cantidad) {
                    $sub_total_compras = $cantidad * $precio_compra;
                    $min_total = null;
                foreach ($precios_mayoristas as $precio_mayorista) {
                    if ($total_cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
                        $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
                        $precio_format = number_format($precio_unitario, 2);
                        $min_total = $precio_format * $total_cantidad;
                        if ($total_cantidad == $precio_mayorista['cantidad']) {
                            $min_total = $precio_mayorista['precio'];
                        }
                    } 
                }
                
                if ($min_total !== null) {
                    $data = $this->model->actualizarDetalle('detalle_temp', $precio_format, $total_cantidad, $min_total, $sub_total_compras, $id_producto, $id_usuario);
                    if ($data == "modificado") {
                        $msg = "modificado";
                    } else {
                        $msg = "error";
                    }
                    echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                    exit;
                } else {
                    $sub_total = $total_cantidad * $precio;
                    if ($datos['cantidad'] >= $total_cantidad) {
                        $data = $this->model->actualizarDetalle('detalle_temp', $precio, $total_cantidad, $sub_total, $sub_total_compras, $id_producto, $id_usuario);
                        if ($data == "modificado") {
                            $msg = "modificado";
                        } else {
                            $msg = "error";
                        }
                        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                        die();
                    }
                }
                }else {
                  $msg = "ESTOCK NO DISPONIBLE";
                  echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                  die();
                }
              
            }
        
           
        }
        


        function listar($table)
        {
            if (isset($_SESSION['id_usuario'])) {
              $id_user = (int)$_SESSION['id_usuario'];
            $data['detalle'] = $this->model->getDetalle($table, $id_user);
            $data['total_pagar'] = $this->model->calcularCompra($table, $id_user);
            echo json_encode($data, JSON_UNESCAPED_UNICODE);
            die();
            }else {
                header('Location: ' . base_url);
            }
        }

        public function delete($id){
           $data = $this->model->deleteDetalle('detalle', $id);
           if ($data=='ok') {
                $msg ='ok';
           }else {
           $msg ='error';
           }
           echo json_encode($msg);
           die();

        }
        public function deleteVenta($id){
            $data = $this->model->deleteDetalle('detalle_temp', $id);
            if ($data=='ok') {
                 $msg ='ok';
            }else {
            $msg ='error';
            }
            echo json_encode($msg);
            die();
         }



         
        
         public function registrarCompra()
         {
             if (isset($_SESSION['id_usuario'])) {
            $id_usuario = (int)$_SESSION['id_usuario'];
            $totalArray = $this->model->calcularCompra('detalle', $id_usuario);
            $total = implode('', $totalArray);
             $data = $this->model->registrarCompra($total, $id_usuario);
             if ($data == 'ok') {
                 $this->model->registrarCompraTotal($id_usuario, $total);
         
                 $detalle = $this->model->getDetalle('detalle', $id_usuario);
                 $id_compra = $this->model->getId('compras', $id_usuario);
                 
                 foreach ($detalle as $row) {
                     $cantidad = $row['cantidad'];
                     $precio = $row['precio'];
                     $id_pro = $row['id_producto'];
                     $sub_total = $cantidad * $precio;
                     $this->model->registrarDetalleCompra($id_compra['id'], $id_pro, $cantidad, $precio, $sub_total);
                     $stock_actual = $this->model->getProductos($id_pro);
                     $stock = $stock_actual['cantidad'] + $cantidad;
                     $this->model->actualizarStock($stock, $id_pro);
                 }
                 $vaciar = $this->model->vaciarDetalle('detalle', $id_usuario);
                 if ($vaciar == "ok") {
                     $msg = array('msg' => 'ok', 'id_compra' => $id_compra['id']);
                 }
             } else {
                 $msg = 'error';
             }
         
             echo json_encode($msg);
             die();
             }else {
                header('Location: ' . base_url);
             }
           
         }
         




         public function doumentosmostrr(){
            $data = $this->model->documentos();
            echo json_encode($data);
         }





         public function registrarVenta() {
            if (isset($_SESSION['id_usuario'])) {
                $id_usuario = (int)$_SESSION['id_usuario'];
                $id_cliente = isset($_GET['id_cliente']) ? intval($_GET['id_cliente']) : 0;
                $id_documentos = isset($_GET['id_documentos']) ? intval($_GET['id_documentos']) : 0;
                $id_clientes_doc = isset($_GET['id_cliente_fac']) ? intval($_GET['id_cliente_fac']) : 0;
                $id_boletas_clie = isset($_GET['id_boleta']) ? intval($_GET['id_boleta']) : 0;
                $verificar = $this->model->verificarCaja($id_usuario);
                $monto_ingresado = isset($_GET['monto']) ? floatval($_GET['monto']) : 0;
                if (empty($verificar)) {
                    $msg = array('msg' => 'La caja está cerrada', 'icono' => 'warning');
                } else {
                   // actualizare 
                    $totalArray = $this->model->calcularCompra('detalle_temp', $id_usuario);
                    $total = isset($totalArray['total']) ? $totalArray['total'] : 0;
                    $monto_pago = "";
                    if ($monto_ingresado <= 0) {
                        $monto_pago = $total;
                    } else {
                        $monto_pago = $monto_ingresado;
                    }
                    $precios_de_compras = $this->model->sumar_preciocompra($id_usuario);
                    $precio_compra = isset($precios_de_compras['precio_compra']) ? $precios_de_compras['precio_compra'] : 0;
                    $igb = 0.18*$total;
                    $precio_sinigb = $total - $igb;
                  
                    $data = $this->model->registrarVentass($id_usuario, $id_cliente, $total, $precio_compra, $id_documentos, $id_clientes_doc, $id_boletas_clie, $igb, $monto_pago, $precio_sinigb);
                   
    
                    if ($data == 'ok') {
                        $verificar_si_es_vendedor = $this->model->verificar_si_es_vendedor();
                        if (!empty($verificar_si_es_vendedor)) {
                            $id_pedidos = $verificar_si_es_vendedor[0]['id_pedidos'];
                            $actualizar_id_pedidos = $this->model->actualizar_id_pedidos($id_pedidos);
                           
                        }
                        
                        $detalle = $this->model->getDetalle('detalle_temp', $id_usuario);
                        $id_venta = $this->model->getId('ventas', $id_usuario);
                        $ganancias = $total - $precio_compra;
                        $fecha =  date("Y-m-d H:i:s");
                        $this->model->REGISTRARganancias($id_usuario, $id_venta['id'], $fecha, $ganancias);
            
                        foreach ($detalle as $row) {
                            $cantidad = $row['cantidad'];
                            $desc = $row['descuento'];
                            $precio = $row['precio'];
                            $id_pro = $row['id_producto'];
                            $total_precio_compra = $row['precio_compra'];
                            $sub_total = ($cantidad * $precio) - $desc;
                            $compras_totales =  $total_precio_compra;
                            $Igb = $sub_total * 0.18;
                            $precio_sin_igb = $sub_total - $Igb;
                            $this->model->registrarDetalleVenta($id_usuario, $id_venta['id'], $id_pro, $cantidad, $desc, $precio, $compras_totales, $sub_total, $Igb, $precio_sin_igb);
                            $stock_actual = $this->model->getProductos($id_pro);
                            $stock = $stock_actual['cantidad'] - $cantidad;
                            $this->model->actualizarStock($stock, $id_pro);
                        }
                        $vaciar = $this->model->vaciarDetalle('detalle_temp', $id_usuario);
            
                        if ($vaciar == 'ok') {
                            $actualizar_ventafinal = $this->model->actualizar_ventafinal($id_pedidos);
                            $msg = array('msg' => 'ok', 'id_venta' => $id_venta['id']);
                        }
                    } else {
                        $msg = 'error';
                    }
               
                   }
    
                  
                echo json_encode($msg);
                die();
            }else {
                header('Location: ' . base_url);
            }
           
        }
        
        
        public function generarPdf($id_compra){
            $empresa = $this->model->getEmpresa();
            $productos = $this->model->getProCompra($id_compra);
            require('libraries/fpdf/fpdf.php');
            $pdf = new FPDF('P', 'mm', array(80, 210));
            $pdf->AddPage();
            $pdf->SetMargins(5,0,0);
            $pdf->SetTitle('reporte de compras');
            $pdf->SetFont('Arial','B',13);
            $pdf->Cell(65,15, ($empresa['nombre']),0,1,'C');
            $pdf->Image('assets/img/Captura de pantalla 2023-09-24 180223.png', 20, 2, 45, 10);
            $pdf->SetFont('Arial','B',10);
            $pdf->Cell(22,5, 'ruc: ',0,0,'L');
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(20,5, $empresa['ruc'] ,0,1,'L');

            $pdf->SetFont('Arial','B',10);
            $pdf->Cell(22,5, utf8_decode('teléfono: '),0,0,'L');
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(20,5, $empresa['telefono'] ,0,1,'L');

            $pdf->SetFont('Arial','B',10);
            $pdf->Cell(22,5, utf8_decode('dirección: '),0,0,'L');
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(20,5, $empresa['direccion'] ,0,1,'L');

            $pdf->SetFont('Arial','B',10);
            $pdf->Cell(22,5, utf8_decode('n°: '),0,0,'L');
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(20,5, $id_compra,0,1,'L');
            $pdf->Ln();
            //encabezado del pdf
            $pdf->SetFont('Arial','B',8);
            $pdf->cell(10,5,'cant',0,0,'L');
            $pdf->SetFont('Arial','B',8);
            $pdf->cell(30,5,utf8_decode('Descripción'),0,0,'L');
            $pdf->SetFont('Arial','B',8);
            $pdf->cell(10,5,'precio',0,0,'L');
            $pdf->SetFont('Arial','B',8);
            $pdf->cell(10,5,'sub total',0,1,'L');
            $total = 0.00;
            foreach ($productos as $row) {
                $total = $total + $row['sub_total'];
                $pdf->cell(10,5,$row['cantidad'],0,0,'L');
                $pdf->cell(30,5,utf8_decode($row['descripcion']),0,0,'L');
                $pdf->cell(10,5,$row['precio'],0,0,'L');
                $pdf->cell(10,5,number_format($row['sub_total'], 2, '.',','),0,1,'L');
            }
            $pdf->Ln();
            $pdf->Cell(60, 5, 'total',0 ,1 ,'R');
            $pdf->Cell(60, 5, number_format($total,2 , '.', ','),0 ,1 ,'R');

            $pdf->Output();
        }
        
        public function historial(){
            
             $id_user = (int)$_SESSION['id_usuario'];
            $verificar = $this->model->verificarPermiso($id_user, 'historial_compras');
            if (!empty($verificar) || $id_user == 1 ) {  
                $this->views->getviews($this, "historial");
            } else {
                header('Location: ' . base_url . 'errors/permisos');
    
            }

        
            
            
            
        }


        public function egresos(){
            
            $this->views->getviews($this, "egresos");
     
    }




        public function listar_historial(){
            $id_user = (int)$_SESSION['id_usuario'];
            
            $data= $this->model->getHistorialcompras($id_user);
            for ($i = 0; $i < count($data); $i++) {
                if ($data[$i]['estado'] == 1) {
                    $data[$i]['estado'] = '<span class="badge badge-success">completado</span>';
                    $data[$i]['acciones'] = 
                    '<div>
                    <button class="btn btn-danger" onclick="btnAnularC(' . $data[$i]['id'] . ')"><i class="fa-solid fa-trash fa-flip-horizontal fa-xl" style="color: #ffffff;"></i></button>
                    <a class="btn btn-success" href="'.base_url. "Compras/generarPdf/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                    </div>';
                } else {
                    $data[$i]['estado'] = '<span class="badge badge-warning">anulado</span>';
                    $data[$i]['acciones'] = '<div>
                    <a class="btn btn-success" href="'.base_url. "Compras/generarPdf/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                
                    </div>';
                }
               

               
            }
            echo json_encode($data, JSON_UNESCAPED_UNICODE);
            die();
        }


        
        public function listar_historial_venta(){
            $id_user = (int)$_SESSION['id_usuario'];
            $data = $this->model->getHistorialVentas($id_user);
            
            for ($i = 0; $i < count($data); $i++) {
                if ($data[$i]['estado'] == 1 && $data[$i]['apertura'] == 1) {
                    $data[$i]['estado'] = '<span class="badge badge-success">completado</span>';
                    $data[$i]['acciones'] = 
                        '<div>
                            <button class="btn btn-danger" onclick="btnAnularVenta(' . $data[$i]['id'] . ')"><i class="fa-solid fa-trash fa-flip-horizontal fa-xl" style="color: #ffffff;"></i></button>
                            <button class="btn btn-primary" onclick="editar_venta(' . $data[$i]['id'] . ')"><i class="fas fa-edit"></i></button>
                            <a class="btn btn-success" href="'.base_url. "Compras/generarPdfVenta/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                        </div>';
                } elseif ($data[$i]['estado'] == 0 && $data[$i]['apertura'] == 1) {
                    $data[$i]['estado'] = '<span class="badge badge-warning">anulado</span>';
                    $data[$i]['acciones'] = '<div>
                        <a class="btn btn-success" href="'.base_url. "Compras/generarPdfVenta/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                    </div>';
                } elseif ($data[$i]['apertura'] == 0 && $data[$i]['estado'] == 1) {
                    $data[$i]['estado'] = '<span class="badge badge-success">completado</span>';
                    $data[$i]['acciones'] =  '<div>
                        <a class="btn btn-success" href="'.base_url. "Compras/generarPdfVenta/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                    </div>';
                } elseif ($data[$i]['estado'] == 0 && $data[$i]['apertura'] == 0) {
                    $data[$i]['estado'] = '<span class="badge badge-warning">anulado</span>';
                    $data[$i]['acciones'] = '<div>
                        <a class="btn btn-success" href="'.base_url. "Compras/generarPdfVenta/".$data[$i]['id'].'" target="_blank"><i class="fas fa-file-pdf"></i></a>
                    </div>';
                }
            }
            
            echo json_encode($data, JSON_UNESCAPED_UNICODE);
            die();
        }
        

            //actualizacion  pdf para motor repuestos

            public function generarPdfVenta($id_venta){
                $empresa = $this->model->getEmpresa();
                $descuento = $this->model->getDescuento($id_venta);
                $productos = $this->model->getProVenta($id_venta);
                $documento = $this->model->documentacion($id_venta);
                $datosDelClienteDocumentos = $this->model->documentacionClientes($id_venta);
                $cantidad_boletas = $this->model->cantidadBoletas();
                $cantidad_facturas = $this->model->cantidadFacturas();
                $cantidad_tikets = $this->model->Cantidadtikets();
                $los_id_doc = $this->model->id_de_los_documentos($id_venta);
                $pago_con = $this->model->montoPagado($id_venta);
                $igb = $this->model->Igb($id_venta);
                if (isset($igb[0]['IGB'])) {
                    $IGB = $igb[0]['IGB'];
                } else {
                  
                    $IGB = 0; 
                }
                date_default_timezone_set('America/Lima');
                $documentoCliente = $datosDelClienteDocumentos[0]['documento'];
                $nombre_empreza = $datosDelClienteDocumentos[0]['nombre'];
                $direccion_document = $datosDelClienteDocumentos[0]['direccion'];
                $telefono_empreza = $datosDelClienteDocumentos[0]['telefono'];
                $tiket_totalsss = $cantidad_tikets[0]['total_tikets'];
                $boleta_totalsss = $cantidad_boletas[0]['total_boletas'];
                $facturas_totalss = $cantidad_facturas[0]['total_facturas'];
                $id_docus = $los_id_doc[0]['id_documentos'];
                $monto_pagados = $pago_con[0]['pago'];
                $id_tipo_de_pagos = $pago_con[0]['id_cliente'];
                $fecha_emicion = $pago_con[0]['fecha'];
                $datetime = new DateTime($fecha_emicion);
                

                // Obtener la fecha y hora actual
                $fecha = date('Y-m-d'); // Obtiene la fecha en formato "YYYY-MM-DD"
                $hora = date('h:i:s A'); // Obtiene la hora en formato "HH:MM:SS AM/PM"
                $cant_documentos = '';
                if ($id_docus == 1) {
                    $cant_documentos = $tiket_totalsss;
                } elseif ($id_docus == 2) {
                    $cant_documentos = $boleta_totalsss;
                } elseif ($id_docus == 3) {
                    $cant_documentos = $facturas_totalss;
                }
                if (!empty($documento) && isset($documento[0]['documento'])) {
                    $nombreDocumento = $documento[0]['documento'];
                    
                } else {
                    $nombreDocumento = 'Documento no encontrado'; // o un valor predeterminado
                }
    
                
                require('libraries/fpdf/fpdf.php');
                $pdf = new FPDF('P', 'mm', array(80, 350)); // Tamaño A4

                // Desactiva el salto automático de página
                $pdf->SetAutoPageBreak(false);
                $pdf->AddPage();
                $pdf->SetMargins(2,0,0);
                $pdf->SetTitle('reporte de ventas');
                $pdf->SetFont('Arial','B',9);
                $pdf->Image('assets/img/negocios rodas.png', 10, -2, 60, 30);
    
                $pdf->Ln(15); 
                
                $pdf->SetFont('Arial', '', 8);
                $pdf->Cell(76, 3, utf8_decode('TECNOLOGIA SIN LIMITES'), 0, 1, 'C');
                $pdf->MultiCell(76, 3, utf8_decode('PRODUCTOS EN TENDENCIA, TECNOLOGICAS'), 0, 'C');
                $pdf->SetFont('Arial', 'B', 13);
                $pdf->MultiCell(78, 10, utf8_decode($empresa['nombre']), 0, 'C');
    
                
                $pdf->SetFont('Arial','B',10);
                $pdf->Cell(10,4, 'Ruc: ',0,0,'R');
                $pdf->Cell(33,4, $empresa['ruc'] ,0,1,'R');
              
                $pdf->SetFont('Arial','B',10);
                $pdf->Cell(18,4, utf8_decode('Teléfono: '),0,0,'R');
                $pdf->SetFont('Arial','',8);
                $pdf->Cell(18,4, $empresa['telefono'] ,0,1,'R');
    
                $pdf->SetFont('Arial','B',10);
                $pdf->Cell(20,4, utf8_decode('Dirección: '),0,0,'R');
                $pdf->SetFont('Arial','',8);
                $pdf->MultiCell(53, 3, utf8_decode($empresa['direccion']), 0, 'L');
    
                //TIPO DE DOCUMENTO
                 
                $pdf->SetFont('Arial', 'B', 10);
                $pdf->Cell(75, 2, utf8_decode('--------------------------------------------------------------------------'), 0, 1, 'C');
                $pdf->Cell(50, 5, $nombreDocumento, 0, 0, 'C');
                $pdf->Cell(-5, 5, utf8_decode('NRO: '), 0, 0, 'C');
                $pdf->Cell(20, 5, $cant_documentos, 0, 1, 'C');
                $pdf->Cell(75, 1, utf8_decode('---------------------------------------------------------------------------'), 0, 1, 'C');
            
                $pdf->SetFont('Arial','B',8);
                $pdf->Cell(22,4, utf8_decode('Fecha:'),0,0,'L');
                $pdf->SetFont('Arial','B',8);
                $pdf->Cell(20,4, '10/11/2023' ,0,1,'L');
    
                $pdf->SetFont('Arial','B',8);
                $pdf->Cell(22,4, utf8_decode('Hora:'),0,0,'L');
                $pdf->SetFont('Arial','B',8);
                $pdf->Cell(20,4, $hora ,0,0,'L');
                $pdf->Ln();
    
                //boleta electronia esta en la base de datos como id 2
                if ($id_docus == 2) {
                $pdf->SetFont('Arial','B',8);
               $pdf->Cell(25, 4, utf8_decode('Dni'), 0, 0, 'L');
                $pdf->Cell(20, 4, $documentoCliente, 0, 1, 'L');
                
                $pdf->SetFont('Arial', 'B', 8);
                
                $pdf->Cell(25, 4, utf8_decode('Nombre'), 0, 0, 'L');
                $pdf->MultiCell(0, 4, utf8_decode($nombre_empreza), 0, 'L');
                
                $pdf->SetFont('Arial', 'B', 8);
                
                $pdf->Cell(25, 4, utf8_decode('Dirección'), 0, 0, 'L');
                $pdf->Cell(20, 4, utf8_decode($direccion_document), 0, 1, 'L');
                
                $pdf->SetFont('Arial', 'B', 8);
                
                $pdf->Cell(25, 4, utf8_decode('Teléfono'), 0, 0, 'L');
                $pdf->Cell(20, 4, utf8_decode($telefono_empreza), 0, 1, 'L');
                
                $pdf->Ln();
    
                   //factura electronia esta en la base de datos como id 3
                }elseif ($id_docus == 3) {
                    $pdf->SetFont('Arial','B',8);
                    $pdf->cell(22,4,utf8_decode('Ruc'),0,0,'L');
                    $pdf->Cell(20,4, $documentoCliente ,0,1,'L');
                    $pdf->SetFont('Arial','B',8);
                    $pdf->cell(22,4,utf8_decode('Razon Sócial'),0,0,'L');
                    $pdf->Cell(20,4, $nombre_empreza ,0,1,'L');
                    $pdf->SetFont('Arial', 'B', 8);
                    $pdf->Cell(22, 4, utf8_decode('Dirección'), 0, 0, 'L');
                    $pdf->MultiCell(55, 4, utf8_decode($direccion_document), 0, 'L');
    
                    $pdf->SetFont('Arial','B',8);
                    $pdf->cell(22,4,utf8_decode('Telefóno'),0,0,'L');
                    $pdf->Cell(20,4, $telefono_empreza ,0,1,'L');
                    $pdf->Ln(); 
                    
                    }
                                    
                //encabezado de venta  pdf
                $pdf->SetFont('Arial', 'B', 8);
                $pdf->SetFillColor(0, 0, 0); 
                $pdf->SetTextColor(255, 255, 255);
                $pdf->Cell(10, 5, 'Cant', 0, 0, 'L', true);
                $pdf->Cell(10, 5, 'UND', 0, 0, 'L', true);
                $pdf->Cell(32, 5, utf8_decode('Descripción'), 0, 0, 'L', true);
                $pdf->Cell(9, 5, 'P.U', 0, 0, 'L', true);
                $pdf->Cell(15, 5, 'Sub total', 0, 1, 'L', true);
                $pdf->SetFillColor(255, 255, 255);
                $pdf->SetTextColor(0, 0, 0);
                
                $pdf->Ln();
                
                $total = 0.00;
                foreach ($productos as $row) {
                    $total = $total + $row['sub_total'];
                    
                    // Guardar la posición actual
                    $xInicio = $pdf->GetX();
                    $yInicio = $pdf->GetY();
                    
                    // Imprimir la cantidad y el nombre corto
                    $pdf->Cell(9, 3, $row['cantidad'], 0, 0, 'L');
                    $pdf->Cell(9, 3, $row['nombre_corto'], 0, 0, 'L');
                    
                    // Guardar la posición antes de imprimir la descripción
                    $xDesc = $pdf->GetX();
                    $yDesc = $pdf->GetY();
                    $pdf->MultiCell(33, 3, utf8_decode($row['descripcion']), 0, 'L');
                    
                    $yFin = $pdf->GetY();
                    
                    // Si la descripción empujó los datos hacia abajo
                    if ($yFin > $yDesc) {
                        // Ajustar la posición Y del precio y el subtotal
                        $pdf->SetXY($xInicio + 52, $yFin);
                    } else {
                        // Restaurar la posición original
                        $pdf->SetXY($xDesc, $yDesc);
                    }
                    
                    // Imprimir el precio y el subtotal
                    $pdf->Cell(10, 1, $row['precio'], 0, 0, 'L');
                    $pdf->Cell(15, 1, number_format($row['sub_total'], 2, '.', ','), 0, 1, 'L');
                }
                
                $pdf->Ln();
                
                
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->Cell(75, 1, '-------------------------------------------------------------------------------------------------------', 0, 1, 'C');
                $pdf->Cell(48, 3, 'DETALLES DE PAGO', 0, 1, 'R');
                $pdf->Cell(75, 1, '-------------------------------------------------------------------------------------------------------', 0, 1, 'C');
                $pdf->Ln();
                
              
                ///DETALLES DE PAGOS DE LOS LCIENTES 
    
    
                $clientes = $this->model->clientesVenta($id_venta);
                $pdf->SetFont('Arial','b',7);
                $pdf->Cell(25, 3, 'Tipo de pago', 0, 0, 'L');
                $pdf->SetFont('Arial','b',7);
                $pdf->cell(26,3,'Contado',0,0,'L');
                $pdf->SetFont('Arial','b',7);
                $pdf->cell(25,3,utf8_decode($clientes['nombre']),0,0,'L');
                $pdf->SetFont('Arial','',7);
                $pdf->Ln();
                $pdf->SetFont('Arial','B',7);
                $pdf->Cell(26, 3, 'Descuento', 0, 0, 'L');
                $pdf->Cell(20, 3, number_format($descuento['total'], 2, '.', ','), 0, 0, 'L');
                $pdf->Ln();
    
    
                $datos_venta = $this->model->traertotal($id_venta);
                  $total_opgravadas = $datos_venta[0]['total_opgravadas']; 
                  $opexoneradas = $datos_venta[0]['opexoneradas']; 
                  $opinafectas = $datos_venta[0]['opinafectas'];
                //boleta electronia esta en la base de datos como id 2
                if ($id_docus == 2) {
                    $pdf->SetFont('Arial','B',7);
                    $pdf->Cell(26, 3, 'IGV                               EXO', 0, 1, 'L');
                  //  $pdf->Cell(26, 3, 'YA INCLUYE IGV', 0, 0, 'L');
                  
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Gravadas', 0, 0, 'L');
                  $pdf->Cell(20, 3,  $total_opgravadas, 0, 1, 'L');
      
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Exo', 0, 0, 'L');
                  $pdf->Cell(20, 3, $total, 0, 1, 'L');
      
      
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Inafecta', 0, 0, 'L');
                  $pdf->Cell(20, 3, $opinafectas, 0, 1, 'L');
                //factura  electronia esta en la base de datos como id 3
                }elseif ($id_docus == 3) {
                    $pdf->SetFont('Arial','B',7);
                    $pdf->Cell(26, 3, 'IGV', 0, 0, 'L');
                    $pdf->Cell(20, 3, 'EXO', 0, 1, 'L');
                  //  $pdf->Cell(20, 3, number_format($IGB, 2, '.', ','), 0, 1, 'L');
                 
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Gravadas', 0, 0, 'L');
                  $pdf->Cell(20, 3,  $total_opgravadas, 0, 1, 'L');
      
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Exo', 0, 0, 'L');
                  $pdf->Cell(20, 3, $total, 0, 1, 'L');
      
      
                  $pdf->SetFont('Arial','B',7); 
                  $pdf->Cell(26, 3, 'Ope Inafecta', 0, 0, 'L');
                  $pdf->Cell(20, 3, $opinafectas, 0, 1, 'L');
      
                }
                
               
    
                $pdf->Ln();  
                $pdf->Cell(60, 5, 'Total', 0,1, 'R');
                $pdf->Cell(60, 5, number_format($total, 2, '.', ','), 0, 0, 'R');
                $pdf->Ln(); 
                
                $pdf->SetFont('Arial', 'B', 7);
                $pdf->SetX(($pdf->GetPageWidth() - $pdf->GetStringWidth('OPERACIONES')) / 2.2); // Establecer la posición X en el centro
                $pdf->Cell(16, 2, '------------------------------------------------------------------------------------------------------------', 0, 1, 'C');
                $pdf->Cell(45, 2.5, 'OPERACIONES', 0, 1, 'R');
                $pdf->Cell(70, 1, '------------------------------------------------------------------------------------------------------------', 0, 1, 'C');
                $pdf->Ln();
                
               if ($id_tipo_de_pagos == 1) {
                $pdf->SetFont('Arial','B',7);
                    $pdf->Cell(26, 3, 'Pago con', 0, 0, 'L');
                    $pdf->Cell(20, 3, number_format($monto_pagados, 2, '.', ','), 0, 0, 'L');
                    $pdf->Ln(); 
              
               if ($monto_pagados == $total) {
                $pdf->SetFont('Arial','B',7);
                $pdf->Cell(26, 3, 'Vuelto', 0, 0, 'L');
                $pdf->Cell(20, 3, 'Completo', 0, 0, 'L');
                $pdf->Ln();
               }elseif($id_tipo_de_pagos == 1) {
                $pdf->SetFont('Arial','B',7);
                    $pdf->Cell(26, 3, 'Vuelto', 0, 0, 'L');
                    $vuelto = number_format($monto_pagados - $total, 2, '.', ',');
    
                    $pdf->Cell(20, 3, number_format($vuelto, 2, '.', ','), 0, 0, 'L');
                    $pdf->Ln(); 
                    $pdf->Ln(); 
                    require_once './config/app/lectura.php';
                    
                    $vueltoEnLetras = numeroALetras($vuelto);
    
                    $pdf->SetFont('Arial', 'B', 8);
    
                    // Ajusta la posición para centrar el texto en el PDF
                    $cellWidth = 60; // Ancho de la celda
                    $textWidth = $pdf->GetStringWidth($vueltoEnLetras);
                    $margin = ($cellWidth - $textWidth) / 2;
                    $pdf->Cell($margin);
                    $pdf->Cell($textWidth, 3, utf8_decode($vueltoEnLetras), 0, 1, 'L');
    
                }
            }
           
            $pdf->SetFont('Arial','B',7);
            $pdf->MultiCell(75, 3, utf8_decode($empresa['mensaje']), 0, 0, 'C');   
            
            $pdf->Ln(); 
    
    
               $pdf->Output();
            }
    
    



        //facturaciones sunat 
        
            function CrearXMLFactura($id_venta){
            $datosDelClienteDocumentos = $this->model->documentacionClientes($id_venta); // clientes que seleciona de acuerda a detalle ventas 
            $direccion_cliente = $datosDelClienteDocumentos[0]['direccion']; // dierrecion del cliente  
            $nombre_razon_social_cliente = $datosDelClienteDocumentos[0]['nombre']; // nombre del cliente 
            $dni_ruc_cliente = $datosDelClienteDocumentos[0]['documento']; // datos del cliente 
            $id_documentos = $datosDelClienteDocumentos[0]['id_documentos'];
            $Bole_fac = "";
            if ($id_documentos == 2) {
                $Bole_fac = "03";
            }elseif ($id_documentos == 3) {
                $Bole_fac = "01";
            }
            $documentos = $this->model->TraerDoc($id_documentos);
            $serie = $documentos[0]['serie_sunat'];
            $cantidad_facturas = $this->model->cantidadFacturas();
            $correlativo_fact = $cantidad_facturas[0]['total_facturas'];
            $pago_con = $this->model->montoPagado($id_venta);
            $fechaString = $pago_con[0]['fecha']; 
            $fecha = new DateTime($fechaString);
            $fechaSeparada = $fecha->format('Y-m-d'); 
            $horaSeparada = $fecha->format('H:i:s');
            $empresa = $this->model->empresa();   // datos de la empresa
            $ruc_emrpesa = $empresa[0]['ruc']; 
            $razon_social_empresa = $empresa[0]['nombre']; 
            $direccion_empresa = $empresa[0]['direccion']; 
            $pais = $empresa[0]['pais']; 
            $departamento = $empresa[0]['departamento']; 
            $provincia = $empresa[0]['provincia']; 
            $distrito = $empresa[0]['distrito']; 
            $ubigeo = $empresa[0]['ubigeo']; 
            $usuario_sol = $empresa[0]['usuario_sol']; 
            $clave_sol = $empresa[0]['clave_sol']; 
            $datos_venta = $this->model->traertotal($id_venta);
            $cliente_docu = $datos_venta[0]['id_documentos']; 
            $total_opgravadas = $datos_venta[0]['total_opgravadas']; 
            $opexoneradas = $datos_venta[0]['opexoneradas']; 
            $opinafectas = $datos_venta[0]['opinafectas']; 
            $IGB = $datos_venta[0]['IGB']; 
            $total_ventas = $datos_venta[0]['total_ventas']; 

            $cliente_ruc_dni = "";
            if ($cliente_docu == 2 ) {
                $cliente_ruc_dni = 1; // 1-> dni, 
            }elseif ($cliente_docu == 3) {
                $cliente_ruc_dni = 6; //6->ruc, 1-> dni 
            }

$emisor = 	array(
    'tipodoc'		=> '6',
    'ruc' 			=> $ruc_emrpesa, 
    'razon_social'	=> $razon_social_empresa, 
    'nombre_comercial'	=> $razon_social_empresa,  //
    'direccion'		=> $direccion_empresa, 
    'pais'			=> $pais, 
    'departamento'  => $departamento,//LAMBAYEQUE 
    'provincia'		=> $provincia,//CHICLAYO 
    'distrito'		=> $distrito, //CHICLAYO
    'ubigeo'		=> $ubigeo, //CHICLAYO
    'usuario_sol'	=> $usuario_sol, //USUARIO SECUNDARIO EMISOR ELECTRONICO
    'clave_sol'		=> $clave_sol //CLAVE DE USUARIO SECUNDARIO EMISOR ELECTRONICO
    );



$cliente = array(
    'tipodoc'		=> $cliente_ruc_dni, //6->ruc, 1-> dni 
    'ruc'			=> $dni_ruc_cliente, 
    'razon_social'  => $nombre_razon_social_cliente, 
    'direccion'		=> $direccion_cliente,
    'pais'			=> 'PE'
    );	

$comprobante =	array(
    'tipodoc'		=> $Bole_fac, //01->FACTURA, 03->BOLETA, 07->NC, 08->ND
    'serie'			=> $serie,
    'correlativo'	=> $correlativo_fact,
    'fecha_emision' => $fechaSeparada,
    'moneda'		=> 'PEN', //PEN->SOLES; USD->DOLARES
    'total_opgravadas'=> $total_opgravadas, //OP. GRAVADAS
    'total_opexoneradas'=>$opexoneradas,
    'total_opinafectas'=>$opinafectas,
    'igv'			=> '5.4162',
    'total'			=> $total_ventas,
    'total_texto'	=> ''
);






$detalle_ventas = $this->model->detalle_ventas($id_venta);
$id_productos = array_column($detalle_ventas, 'id_producto');
$codigo = array_column($detalle_ventas, 'codigo');
$descripcion = array_column($detalle_ventas, 'descripcion');
$cantidad = array_column($detalle_ventas, 'cantidad');

// Tomar el primer valor de cada array
$primer_id_producto = isset($id_productos[0]) ? $id_productos[0] : '';
$primer_codigo = isset($codigo[0]) ? $codigo[0] : '';
$primer_descripcion = isset($descripcion[0]) ? $descripcion[0] : '';
$prmer_cantidad = isset($cantidad[0]) ? $cantidad[0] : '';
$total_ventasss = $this->model->traertotal($id_venta);
$precio_sinigb = round($total_ventasss[0]['precio_sin_IGB'], 0);
$igb_sunat = round(0.18 * $precio_sinigb, 2);
$total_con_igb = round($total_ventasss[0]['total'], 0);


$detalle = array(
    array(
        'item'               => $primer_id_producto,
        'codigo'             => $primer_codigo,
        'descripcion'        => $primer_descripcion,
        'cantidad'           => 1,
        'valor_unitario'     => $precio_sinigb,  //Precio unitario sin IGV.
        'precio_unitario'    => $precio_sinigb + $igb_sunat, //Precio unitario con IGV.
        'tipo_precio'        => "01", //ya incluye igv
        'igv'                => $igb_sunat,
        'porcentaje_igv'     => 18, //de 0 a 100
        'valor_total'        => $precio_sinigb * 1,  //Total sin IGV = Cantidad * Valor Unitario.
        'importe_total'      => $precio_sinigb + $igb_sunat,   // Total con IGV = Valor Total + IGV.
        'unidad'             => 'NIU',//unidad,
        'codigo_afectacion_alt' => '10', // Catálogo No. 07 - Anexo V
        'codigo_afectacion'  => 1000,
        'nombre_afectacion'  =>'IGV',
        'tipo_afectacion'    => 'VAT' //GRAVADAS				 
    )
);
      /*  array(
            'item' 				=> 2,
            'codigo'			=> '22',
            'descripcion'		=> 'LIBRO ABC',
            'cantidad'			=> 1,
            'valor_unitario'	=> 50,
            'precio_unitario'	=> 50,
            'tipo_precio'		=> "01", //ya incluye igv
            'igv'				=> 0,
            'porcentaje_igv'	=> 18,
            'valor_total'		=> 50,
            'importe_total'		=> 50,
            'unidad'			=> 'NIU',//unidad,
            'codigo_afectacion_alt'	=> '20', // Catálogo No. 07 - Anexo V
            'codigo_afectacion'	=> 9997,
            'nombre_afectacion'	=>	'EXO',  //EXONERADOS
            'tipo_afectacion'	=> 'VAT' 			 
        );
        array(
            'item' 				=> 3,
            'codigo'			=> '33',
            'descripcion'		=> 'TOMATE ABC',
            'cantidad'			=> 1,
            'valor_unitario'	=> 50,
            'precio_unitario'	=> 50,
            'tipo_precio'		=> "01", //ya incluye igv
            'igv'				=> 0,
            'porcentaje_igv'	=> 18,
            'valor_total'		=> 50,
            'importe_total'		=> 50,
            'unidad'			=> 'NIU',//unidad,
            'codigo_afectacion_alt'	=> '30', // Catálogo No. 07 - Anexo V
            'codigo_afectacion'	=> 9998,
            'nombre_afectacion'	=>	'INA',  // INAFECTAS
            'tipo_afectacion'	=> 'FRE'  
        );								*/
   

$op_gravadas = 0;
$op_inafectas = 0;
$op_exoneradas = 0;
$igv = 0;
$total = 0; 

foreach ($detalle as $k => $v) {
if($v['codigo_afectacion_alt']=='10'){
$op_gravadas = $op_gravadas + $v['valor_total'];
}

if($v['codigo_afectacion_alt']=='20'){
$op_exoneradas = $op_exoneradas + $v['valor_total'];
}

if($v['codigo_afectacion_alt']=='30'){
$op_inafectas = $op_inafectas + $v['valor_total'];
}

$igv = $igv + $v['igv'];
$total = $total + $v['importe_total'];
}

$comprobante['total_opgravadas'] = $op_gravadas;
$comprobante['total_opexoneradas'] = $op_exoneradas;
$comprobante['total_opinafectas'] = $op_inafectas;
$comprobante['igv'] = $igv;
$comprobante['total'] = $total;

            require_once("./config/app/cantidad_en_letras.php");

        $comprobante['total_texto'] = CantidadEnLetra($total);

        $doc = new DOMDocument();
		$doc->formatOutput = FALSE;
		$doc->preserveWhiteSpace = TRUE;
		$doc->encoding = 'utf-8';

	    $xml = '<?xml version="1.0" encoding="UTF-8"?>
      <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
         <ext:UBLExtensions>
            <ext:UBLExtension>
               <ext:ExtensionContent />
            </ext:UBLExtension>
         </ext:UBLExtensions>
         <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
         <cbc:CustomizationID>2.0</cbc:CustomizationID>
         <cbc:ID>'.$comprobante['serie'].'-'.$comprobante['correlativo'].'</cbc:ID>
         <cbc:IssueDate>'.$comprobante['fecha_emision'].'</cbc:IssueDate>
         <cbc:IssueTime>00:00:00</cbc:IssueTime>
         <cbc:DueDate>'.$comprobante['fecha_emision'].'</cbc:DueDate>
         <cbc:InvoiceTypeCode listID="0101">'.$comprobante['tipodoc'].'</cbc:InvoiceTypeCode>
         <cbc:Note languageLocaleID="1000"><![CDATA['.$comprobante['total_texto'].']]></cbc:Note>
         <cbc:DocumentCurrencyCode>'.$comprobante['moneda'].'</cbc:DocumentCurrencyCode>
         <cac:Signature>
            <cbc:ID>'.$emisor['ruc'].'</cbc:ID>
            <cbc:Note><![CDATA['.$emisor['nombre_comercial'].']]></cbc:Note>
            <cac:SignatoryParty>
               <cac:PartyIdentification>
                  <cbc:ID>'.$emisor['ruc'].'</cbc:ID>
               </cac:PartyIdentification>
               <cac:PartyName>
                  <cbc:Name><![CDATA['.$emisor['razon_social'].']]></cbc:Name>
               </cac:PartyName>
            </cac:SignatoryParty>
            <cac:DigitalSignatureAttachment>
               <cac:ExternalReference>
                  <cbc:URI>#SIGN-EMPRESA</cbc:URI>
               </cac:ExternalReference>
            </cac:DigitalSignatureAttachment>
         </cac:Signature>
         <cac:AccountingSupplierParty>
            <cac:Party>
               <cac:PartyIdentification>
                  <cbc:ID schemeID="'.$emisor['tipodoc'].'">'.$emisor['ruc'].'</cbc:ID>
               </cac:PartyIdentification>
               <cac:PartyName>
                  <cbc:Name><![CDATA['.$emisor['nombre_comercial'].']]></cbc:Name>
               </cac:PartyName>
               <cac:PartyLegalEntity>
                  <cbc:RegistrationName><![CDATA['.$emisor['razon_social'].']]></cbc:RegistrationName>
                  <cac:RegistrationAddress>
                     <cbc:ID>'.$emisor['ubigeo'].'</cbc:ID>
                     <cbc:AddressTypeCode>0000</cbc:AddressTypeCode>
                     <cbc:CitySubdivisionName>NONE</cbc:CitySubdivisionName>
                     <cbc:CityName>'.$emisor['provincia'].'</cbc:CityName>
                     <cbc:CountrySubentity>'.$emisor['departamento'].'</cbc:CountrySubentity>
                     <cbc:District>'.$emisor['distrito'].'</cbc:District>
                     <cac:AddressLine>
                        <cbc:Line><![CDATA['.$emisor['direccion'].']]></cbc:Line>
                     </cac:AddressLine>
                     <cac:Country>
                        <cbc:IdentificationCode>'.$emisor['pais'].'</cbc:IdentificationCode>
                     </cac:Country>
                  </cac:RegistrationAddress>
               </cac:PartyLegalEntity>
            </cac:Party>
         </cac:AccountingSupplierParty>
         <cac:AccountingCustomerParty>
            <cac:Party>
               <cac:PartyIdentification>
                  <cbc:ID schemeID="'.$cliente['tipodoc'].'">'.$cliente['ruc'].'</cbc:ID>
               </cac:PartyIdentification>
               <cac:PartyLegalEntity>
                  <cbc:RegistrationName><![CDATA['.$cliente['razon_social'].']]></cbc:RegistrationName>
                  <cac:RegistrationAddress>
                     <cac:AddressLine>
                        <cbc:Line><![CDATA['.$cliente['direccion'].']]></cbc:Line>
                     </cac:AddressLine>
                     <cac:Country>
                        <cbc:IdentificationCode>'.$cliente['pais'].'</cbc:IdentificationCode>
                     </cac:Country>
                  </cac:RegistrationAddress>
               </cac:PartyLegalEntity>
            </cac:Party>
         </cac:AccountingCustomerParty>
         
         <cac:PaymentTerms>
            <cbc:ID>FormaPago</cbc:ID>
            <cbc:PaymentMeansID>Contado</cbc:PaymentMeansID>
         </cac:PaymentTerms>

         <cac:TaxTotal>
            <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['igv'].'</cbc:TaxAmount>
            <cac:TaxSubtotal>
               <cbc:TaxableAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['total_opgravadas'].'</cbc:TaxableAmount>
               <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['igv'].'</cbc:TaxAmount>
               <cac:TaxCategory>
                  <cac:TaxScheme>
                     <cbc:ID>1000</cbc:ID>
                     <cbc:Name>IGV</cbc:Name>
                     <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
                  </cac:TaxScheme>
               </cac:TaxCategory>
            </cac:TaxSubtotal>';


            if($comprobante['total_opexoneradas']>0){
               $xml.='<cac:TaxSubtotal>
                  <cbc:TaxableAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['total_opexoneradas'].'</cbc:TaxableAmount>
                  <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">0.00</cbc:TaxAmount>
                  <cac:TaxCategory>
                     <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">E</cbc:ID>
                     <cac:TaxScheme>
                        <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9997</cbc:ID>
                        <cbc:Name>EXO</cbc:Name>
                        <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode>
                     </cac:TaxScheme>
                  </cac:TaxCategory>
               </cac:TaxSubtotal>';
            }

            if($comprobante['total_opinafectas']>0){
               $xml.='<cac:TaxSubtotal>
                  <cbc:TaxableAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['total_opinafectas'].'</cbc:TaxableAmount>
                  <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">0.00</cbc:TaxAmount>
                  <cac:TaxCategory>
                     <cbc:ID schemeID="UN/ECE 5305" schemeName="Tax Category Identifier" schemeAgencyName="United Nations Economic Commission for Europe">E</cbc:ID>
                     <cac:TaxScheme>
                        <cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">9998</cbc:ID>
                        <cbc:Name>INA</cbc:Name>
                        <cbc:TaxTypeCode>FRE</cbc:TaxTypeCode>
                     </cac:TaxScheme>
                  </cac:TaxCategory>
               </cac:TaxSubtotal>';
            }

            $total_antes_de_impuestos = $comprobante['total_opgravadas']+$comprobante['total_opexoneradas']+$comprobante['total_opinafectas'];

         $xml.='</cac:TaxTotal>
         <cac:LegalMonetaryTotal>
            <cbc:LineExtensionAmount currencyID="'.$comprobante['moneda'].'">'.$total_antes_de_impuestos.'</cbc:LineExtensionAmount>
            <cbc:TaxInclusiveAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['total'].'</cbc:TaxInclusiveAmount>
            <cbc:PayableAmount currencyID="'.$comprobante['moneda'].'">'.$comprobante['total'].'</cbc:PayableAmount>
         </cac:LegalMonetaryTotal>';
         
         foreach($detalle as $k=>$v){

            $xml.='<cac:InvoiceLine>
               <cbc:ID>'.$v['item'].'</cbc:ID>
               <cbc:InvoicedQuantity unitCode="'.$v['unidad'].'">'.$v['cantidad'].'</cbc:InvoicedQuantity>
               <cbc:LineExtensionAmount currencyID="'.$comprobante['moneda'].'">'.$v['valor_total'].'</cbc:LineExtensionAmount>
               <cac:PricingReference>
                  <cac:AlternativeConditionPrice>
                     <cbc:PriceAmount currencyID="'.$comprobante['moneda'].'">'.$v['precio_unitario'].'</cbc:PriceAmount>
                     <cbc:PriceTypeCode>'.$v['tipo_precio'].'</cbc:PriceTypeCode>
                  </cac:AlternativeConditionPrice>
               </cac:PricingReference>
               <cac:TaxTotal>
                  <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">'.$v['igv'].'</cbc:TaxAmount>
                  <cac:TaxSubtotal>
                     <cbc:TaxableAmount currencyID="'.$comprobante['moneda'].'">'.$v['valor_total'].'</cbc:TaxableAmount>
                     <cbc:TaxAmount currencyID="'.$comprobante['moneda'].'">'.$v['igv'].'</cbc:TaxAmount>
                     <cac:TaxCategory>
                        <cbc:Percent>'.$v['porcentaje_igv'].'</cbc:Percent>
                        <cbc:TaxExemptionReasonCode>'.$v['codigo_afectacion_alt'].'</cbc:TaxExemptionReasonCode>
                        <cac:TaxScheme>
                           <cbc:ID>'.$v['codigo_afectacion'].'</cbc:ID>
                           <cbc:Name>'.$v['nombre_afectacion'].'</cbc:Name>
                           <cbc:TaxTypeCode>'.$v['tipo_afectacion'].'</cbc:TaxTypeCode>
                        </cac:TaxScheme>
                     </cac:TaxCategory>
                  </cac:TaxSubtotal>
               </cac:TaxTotal>
               <cac:Item>
                  <cbc:Description><![CDATA['.$v['descripcion'].']]></cbc:Description>
                  <cac:SellersItemIdentification>
                     <cbc:ID>'.$v['codigo'].'</cbc:ID>
                  </cac:SellersItemIdentification>
               </cac:Item>
               <cac:Price>
                  <cbc:PriceAmount currencyID="'.$comprobante['moneda'].'">'.$v['valor_unitario'].'</cbc:PriceAmount>
               </cac:Price>
            </cac:InvoiceLine>';  	
	   	}

	   	$xml.="</Invoice>";


                $nombrexml = $emisor['ruc'].'-'.$comprobante['tipodoc'].'-'.$comprobante['serie'].'-'.$comprobante['correlativo'];

                $ruta = "xml/".$nombrexml;

                $doc->loadXML($xml);
                $doc->save($ruta.'.XML'); 
                echo 'XML CREADO';
                //firmar xml
                require_once(__DIR__.'/../documentosSunat/signature.php'); // Usando __DIR__ para obtener la ruta del archivo actual

                $objfirma = new Signature();
                $flg_firma = 0; // Posicion del XML: 0 para firma
                $ruta_xml_firmar = $ruta. '.XML'; // No es necesario agregar la extensión .XML si ya está en $ruta
                $ruta_firma = __DIR__.'/../documentosSunat/LLAMA-PE-CERTIFICADO-DEMO-10758827424.pfx'; // cambiar el certificado digital por el original del cliente 
                $pass_firma = 'sam147'; // contraseña del certificado digital

                try {
                    $objfirma->signature_xml($flg_firma, $ruta_xml_firmar, $ruta_firma, $pass_firma);
                    $xmlDoc = new DOMDocument();
                    $xmlDoc->load($ruta_xml_firmar);

                    if (!$xmlDoc->documentElement) {
                        throw new Exception('Error: El XML cargado está vacío o no es válido.');
                    }

                    echo '</br> XML FIRMADO';
                } catch (Exception $e) {
                    echo '</br> Error al firmar el XML: ' . $e->getMessage();
                }

                //firmar xml


                //CONVERTIRA A ZIP INICIO 
               $zip = new ZipArchive();
                $rutazip = $ruta . '.ZIP';  
                //CONVERTIRA A ZIP FIN
               if($zip->open($rutazip, ZipArchive::CREATE) === TRUE)
               {
                   $zip->addFile($ruta_xml_firmar, $nombrexml . '.XML');
                    $zip->close();
               }
               echo '</br>XML ZIPEADO';


               //cambiar  entrar al siguiente lin  https://cpe.sunat.gob.pe/sites/default/files/inline-files/servicios%20web%20disponibles.pdf
               $ws = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService'; //ruta de prueba para emviar facturas o boleta sunat 
                $nombre_archivo_zip = $nombrexml . '.ZIP'; //ruta del xml zipeado
                $contenido_del_zip = base64_encode(file_get_contents($rutazip)); //codificar y convertir en texto el .zip
                                //echo '</br> '. $contenido_del_zip;
                                
                $xml_envio ='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.sunat.gob.pe" xmlns:wsse="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <soapenv:Header>
                <wsse:Security>
                    <wsse:UsernameToken>
                        <wsse:Username>'.$emisor['ruc'].$emisor['usuario_sol'].'</wsse:Username>
                        <wsse:Password>'.$emisor['clave_sol'].'</wsse:Password>
                    </wsse:UsernameToken>
                </wsse:Security>
                </soapenv:Header>
                <soapenv:Body>
                <ser:sendBill>
                    <fileName>'.$nombre_archivo_zip.'</fileName>
                    <contentFile>'.$contenido_del_zip.'</contentFile>
                </ser:sendBill>
                </soapenv:Body>
                </soapenv:Envelope>';

                $header = array(
                "Content-type: text/xml; charset=\"utf-8\"",
                "Accept: text/xml",
                "Cache-Control: no-cache",
                "Pragma: no-cache",
                "SOAPAction: ",
                "Content-lenght: ".strlen($xml_envio)
                );

                $ch = curl_init(); //iniciar la llamada
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 1); //
                curl_setopt($ch,CURLOPT_URL, $ws);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch,CURLOPT_HTTPAUTH, CURLAUTH_ANY);
                curl_setopt($ch,CURLOPT_TIMEOUT, 30);
                curl_setopt($ch,CURLOPT_POST, true);
                curl_setopt($ch,CURLOPT_POSTFIELDS, $xml_envio);
                curl_setopt($ch,CURLOPT_HTTPHEADER, $header);

                //para ejecutar los procesos de forma local en windows
                //enlace de descarga del cacert.pem https://curl.haxx.se/docs/caextract.html
                //BORRAR AL CONTRATAR UN HOSTING CON SSL
                curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__).'/../documentosSunat/cacert.pem'); //solo en local, si estas en el servidor web con ssl comentar esta línea

                $response = curl_exec($ch); // ejecucion del llamado y respuesta del WS SUNAT.

                $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE); // objten el codigo de respuesta de la peticion al WS SUNAT
                $estadofe = "0"; //inicializo estado de operación interno

                if($httpcode == 200)//200: La comunicacion fue satisfactoria
                {
                $doc = new DOMDocument();//clase que nos permite crear documentos XML
                $doc->loadXML($response); //cargar y crear el XML por medio de text-xml response

                if( isset( $doc->getElementsByTagName('applicationResponse')->item(0)->nodeValue ) ) // si en la etique de rpta hay valor entra
                {
                $cdr = $doc->getElementsByTagName('applicationResponse')->item(0)->nodeValue; //guadarmos la respuesta(text-xml) en la variable 
                $cdr = base64_decode($cdr); //decodificando el xml
                file_put_contents('cdr/' . 'R-' . $nombre_archivo_zip, $cdr ); //guardo el CDR zip en la carpeta cdr
                $zip = new ZipArchive();
                if($zip->open('cdr/'. 'R-' . $nombre_archivo_zip ) === true ) //rpta es identica existe el archivo
                {
                $zip->extractTo('cdr/', 'R-' . $nombrexml . '.XML');
                $zip->close();
                }
                $estadofe = '1';
                echo 'Procesado correctamente, OK';
                }
                else {
                $estadofe = '2';
                $codigo = $doc->getElementsByTagName('faultcode')->item(0)->firstChild->nodeValue;

                $mensaje = $doc->getElementsByTagName('faultstring')->item(0)->firstChild->nodeValue;
                //LOG DE TRAX ERRORES DB
                echo 'Ocurrio un error con código: ' . $codigo . ' Msje:' . $mensaje;
                }
                }
                else { //Problemas de comunicacion
                $estadofe = "3";
                //LOG DE TRAX ERRORES DB
                echo curl_error($ch);
                echo $response;
                }
                
                curl_close($ch);

                //ENVIAR EL ZIP A LOS WS DE SUNAT - FIN

                        } 
        
            
                        



        public function dniSunat() {
            $token = 'apis-token-6335.VyyUp2MPhKzmA8CvQzjedOrumUSSA3u1';
            $dni = $_POST['BoletaDni'];
        
            $curl = curl_init();
            curl_setopt_array($curl, array(
                CURLOPT_URL => 'https://api.apis.net.pe/v2/reniec/dni?numero=' . $dni,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_ENCODING => '',
                CURLOPT_MAXREDIRS => 2,
                CURLOPT_TIMEOUT => 0,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_CUSTOMREQUEST => 'GET',
                CURLOPT_HTTPHEADER => array(
                    'Referer: https://apis.net.pe/consulta-dni-api',
                    'Authorization: Bearer ' . $token
                ),
            ));
            $response = curl_exec($curl);
            curl_close($curl);
        
            echo $response;
        }


        public function RucSunat(){
            $token = 'apis-token-6335.VyyUp2MPhKzmA8CvQzjedOrumUSSA3u1';
            $ruc = $_POST['RucCliFa'];
            $curl = curl_init();
            curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://api.apis.net.pe/v2/sunat/ruc?numero=' . $ruc,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_CUSTOMREQUEST => 'GET',
            CURLOPT_HTTPHEADER => array(
                'Referer: http://apis.net.pe/api-ruc',
                'Authorization: Bearer ' . $token
            ),
            ));

            $response = curl_exec($curl);

            curl_close($curl);
            echo $response;

            
        }
        
        // fin de facturaciones sunat

        public function calcularDescuento($datos){
            $array = explode(",", $datos);
            $id = $array[0];
            $desc = $array[1];
            if (empty($id) || empty($desc)) {
              $msg = array('msg'=> 'error', 'icono' => 'error');
                
            }else {
               $descuento_actual = $this->model->verificarDescuento($id);
               $descuento_total = $descuento_actual['descuento'] + $desc;
               $sub_total = ($descuento_actual['cantidad'] * $descuento_actual['precio']) - $descuento_total;
              $data = $this->model->actualizarDescuento($descuento_total, $sub_total, $id);
              if ($data == 'ok') {
                $msg = array('msg'=> 'descuento', 'icono' => 'success');
              }else {
                $msg = array('msg'=> 'error', 'icono' => 'error');
              }
            }
            echo json_encode($msg);
            die();
        }

        public function anularCompra($id_compra){
           $data = $this->model->getAnularCompra($id_compra);
           $anular = $this->model->getAnular($id_compra);
           foreach ($data as $row) {
            $stock_actual = $this->model->getProductos($row['id_producto']);
            $stock =  $stock_actual['cantidad'] - $row['cantidad'];
            $this->model->actualizarStock($stock, $row['id_producto']);
           }
            if ($anular == 'ok') {
               $msg = array('msg'=>'Compra anulada', 'icono' =>'success');
            }else {
                $msg = array('msg'=>'error al anular', 'icono' =>'error');
        }
        echo json_encode($msg);
        die();
    }

        public function anularVenta($id_venta){
            $data = $this->model->getAnularVenta($id_venta);
            $anular = $this->model->getAnularVen($id_venta);
            $this->model->anularganancias($id_venta);
            foreach ($data as $row) {
             $stock_actual = $this->model->getProductos($row['id_producto']);
             $stock =  $stock_actual['cantidad'] + $row['cantidad'];
             $this->model->actualizarStock($stock, $row['id_producto']);
            }
             if ($anular == 'ok') {
                $msg = array('msg'=>'Compra anulada', 'icono' =>'success');
             }else {
                 $msg = array('msg'=>'error al anular', 'icono' =>'error');
         }
         echo json_encode($msg);
         die();
     }
     


     public function obtenerProductosRapido() {
        $productos = $this->model->ventaRapida();
        echo json_encode($productos, JSON_UNESCAPED_UNICODE);
        die();
    }




    
    





        public function ingresarDetalletemp()
        {
            $id = isset($_POST['id']) ? intval($_POST['id']) : 0;
            $cantidad = isset($_POST['cantidad']) ? intval($_POST['cantidad']) : 0;
        
            if ($id > 0 && $cantidad > 0) {
                $datos = $this->model->getProductos($id);
                $id_usuario = isset($_SESSION['id_usuario']) ? intval($_SESSION['id_usuario']) : 0;
                $detalles_temp = $this->model->consultarDetalle('detalle_temp', $id, $id_usuario);
                
                if (is_array($detalles_temp) && isset($detalles_temp['cantidad'])) {
                    $resultado = $datos['cantidad'] - $detalles_temp['cantidad'];
                    if ($resultado <= 0) {
                        $msg = "PRODUCTO AGOTADO";
                        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                        exit;
                    }
                }
        
                if (!empty($datos) && $datos['cantidad'] >= $cantidad) {
                    $id_producto = $datos['id'];
                    $id_medida = $datos['id_medida'];
                    $precio = $datos['precio_venta'];
                    $precio_compra = $datos['precio_compra'];
                    $sub_total = $cantidad * $precio;
                    $compras_precio = $cantidad * $precio_compra;
                    $precios_mayoristas = $this->model->traer_precios_mayoristas($id_producto);
                    $comprovar = $this->model->consultarDetalle('detalle_temp', $id_producto, $id_usuario);
                    
                    if (empty($comprovar)) {
                        if ($datos['cantidad'] >= $cantidad) {
                            $compras_precio = $cantidad * $precio_compra;
                            $mini_total = null;
                            foreach ($precios_mayoristas as $precio_mayorista) {
                                if ($cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
                                    $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
                                    $precio_format = number_format($precio_unitario, 2);
                                    $mini_total = $precio_format * $cantidad;
                                    if ($cantidad == $precio_mayorista['cantidad']) {
                                        $mini_total = $precio_mayorista['precio'];
                                    }
                                } 
                            }
                            if ($mini_total !== null) {
                                $data = $this->model->registrarDetalle('detalle_temp', $id_producto, $id_usuario, $precio_format, $cantidad, $mini_total, $compras_precio, $id_medida);
                                if ($data == "ok") {
                                    $msg = "ok";
                                } else {
                                    $msg = "error";
                                }
                                echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                                exit;
                            } else {
                                $sub_total = $cantidad * $precio;
                                $data = $this->model->registrarDetalle('detalle_temp', $id_producto, $id_usuario, $precio, $cantidad, $sub_total, $compras_precio, $id_medida);
                                if ($data == "ok") {
                                    $msg = "ok";
                                } else {
                                    $msg = "error";
                                }
                                echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                                exit;
                            }
                        }
                    } else {
                        $total_cantidad = $comprovar['cantidad'] + $cantidad;
                        if ($datos['cantidad'] >= $total_cantidad) {
                            $sub_total_compras = $cantidad * $precio_compra;
                            $min_total = null;
                            foreach ($precios_mayoristas as $precio_mayorista) {
                                if ($total_cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
                                    $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
                                    $precio_format = number_format($precio_unitario, 2);
                                    $min_total = $precio_format * $total_cantidad;
                                    if ($total_cantidad == $precio_mayorista['cantidad']) {
                                        $min_total = $precio_mayorista['precio'];
                                    }
                                } 
                            }
                            
                            if ($min_total !== null) {
                                $data = $this->model->actualizarDetalle('detalle_temp', $precio_format, $total_cantidad, $min_total, $sub_total_compras, $id_producto, $id_usuario);
                                if ($data == "modificado") {
                                    $msg = "modificado";
                                } else {
                                    $msg = "error";
                                }
                                echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                                exit;
                            } else {
                                $sub_total = $total_cantidad * $precio;
                                if ($datos['cantidad'] >= $total_cantidad) {
                                    $data = $this->model->actualizarDetalle('detalle_temp', $precio, $total_cantidad, $sub_total, $sub_total_compras, $id_producto, $id_usuario);
                                    if ($data == "modificado") {
                                        $msg = "modificado";
                                    } else {
                                        $msg = "error";
                                    }
                                    echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                                    die();
                                }
                            }
                        } else {
                            $msg = "STOCK NO DISPONIBLE";
                        }
                    }
                } else {
                    $msg = "Parámetros no válidos";
                }
        
                echo json_encode($msg, JSON_UNESCAPED_UNICODE);
                die();
            }
        }
        

    public function RegustrarEmpresa() {
        $ruc = $_POST['RucCliFa']; 
        $razonSocial = $_POST['RazonCliFa'];
        $direccion = $_POST['direccionCliFa'];
        $telefono = $_POST['telefonoCliFa'];
    
        $data = $this->model->RegistrarEmpFac($ruc, $razonSocial, $direccion, $telefono);
        if ($data === "ok") {
            $msg = "si";
        } else {
            $msg = "error";
        }
        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
        die();
    }
    


    function buscarRuc($ruc){
        $data=$this->model->buscarRucFac($ruc);
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
        die();  
     }



     public function RegistrarBoletaCliente() {
        $Dni = $_POST['BoletaDni']; 
        $nombre = $_POST['BolotNombre'];
        $direccion = $_POST['dirrecionBoleta'];
        $telefono = $_POST['boletaTelefono'];
        $data = $this->model->RegistrarBoletas($Dni, $nombre, $direccion, $telefono);
        if ($data === "ok") {
            $msg = "si";
        } else {
            $msg = "error";
        }
        echo json_encode($msg, JSON_UNESCAPED_UNICODE);
        die();
    }


    function buscarDni($Dni){
        $data=$this->model->buscarDniss($Dni);
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
        die();  
     }


     //actualizar modulos

    public function notificarVentas(){
              $data = $this->model->recibirNotificacion();
              if ($data[0]['cantidad_usuarios'] == 0) {
                $res = "no";
                echo json_encode($res, JSON_UNESCAPED_UNICODE);
                exit;
              }else {
                echo json_encode($data[0]['cantidad_usuarios'], JSON_UNESCAPED_UNICODE);
                exit;
              }
    }

    public function datos_encaja(){
        $data = $this->model->traerdatosClientes();
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
    }

    public function datos_detalleVentas($id_cliente){
        $data = $this->model->obTenerDetalles($id_cliente);
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
    }





















    public function agregarDetalleTemp($id_cliente){
        $traerDatos = $this->model->ingresarADetalleTemp($id_cliente);
        foreach ($traerDatos as $datos) {
            $productos = $datos['id_producto'];
            $id_usuario = $datos['id_usuario'];
            $precio = $datos['precio'];
            $cantidad = $datos['cantidad'];
            $sub_total = $datos['sub_total'];
            $precio_compra = $datos['precio_compra'];
            $id_medida = $datos['id_medida'];
            $id_pedidos = $datos['id_pedidos'];
            $registrarDetalleTemp = $this->model->RegistrarDetallesTemp($productos, $id_usuario, $precio, $cantidad, $sub_total, $precio_compra, $id_medida, $id_pedidos);
        }
        if ($registrarDetalleTemp == 1) {
           $res = "ok";
        }else{
            $res = "error";
        }
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
    }
    
    public function mas(){
        $this->views->getviews($this, "mas");
}

public function traerProductos(){
    $data = $this->model->traerProductosss();
    $output = [];

    for ($i = 0; $i < count($data); $i++) {
        $data[$i]['imagen'] = '<img class="img-thumbnail" src="' . base_url . "assets/img/" . $data[$i]['foto'] . '" width="75">';

        if ($data[$i]['estado'] == 1) {
            $data[$i]['estado'] = '<span class="badge badge-success">activo</span>';
            $data[$i]['acciones'] = '<div>
                 </div>';
            $data[$i]['input'] = '
            <div class="form-group col-sm-6">
                <input type="number" style="width: 160px;" class="form-control" id="StoacSS' . $data[$i]['id'] . '" name="ingrer" placeholder="Ingreso De Productos" onkeyup="btnIngresrProductos(' . $data[$i]['id'] . ', event);">
            </div>';
        }

        $output[] = $data[$i];
    }

    echo json_encode($output, JSON_UNESCAPED_UNICODE);
    die();
}

public function actualizarProductoActual($id){
    $cantidad = $_POST['StoacSS'];
    $actualizar = $this->model->consultar($cantidad, $id);
    if ($actualizar == 1) {
        $res = "ok";
        # code...
    }else{
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
}



public function AnularLista($id_cliente){
    $vaciarLista = $this->model->canclarlista($id_cliente);
    if ($vaciarLista == 1) {
        $this->model->pararAlerta($id_cliente);
       $res = "ok";
    }else{
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);

    
}




        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FUNCION PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS

        public function mayorista(){
            $cantidad = 8;
            $precios_mayoristas = $this->model->traer_precios_mayoristas(1);
            $min_total = null;
            foreach ($precios_mayoristas as $precio_mayorista) {
                if ($cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
                    $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
                    $precio_format = number_format($precio_unitario, 2);
                    $min_total = $precio_format * $cantidad;
                    if ($cantidad == $precio_mayorista['cantidad']) {
                        $min_total = $precio_mayorista['precio'];
                    }
                } 
            }
            
            if ($min_total !== null) {
                echo "El precio correspondiente a la cantidad $cantidad es: $min_total";
            } else {
                echo "No se encontró un precio para la cantidad $cantidad";
            }
        }
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS
        // FIN PARA IDENTIFICAR LOS PRODUCTOS MAYORISTAS

public function actualizar_cantidad($id_detalle){
    $id_user = $_SESSION['id_usuario'];
    $cantidad = $_POST['cantidad'];
    $sacar_el_id_producto = $this->model->consultar_id_producto($id_detalle);
    $id_producto = $sacar_el_id_producto['id_producto'];
    $precios_mayoristas = $this->model->traer_precios_mayoristas($id_producto);
    $min_total = null;
    foreach ($precios_mayoristas as $precio_mayorista) {
        if ($cantidad >= $precio_mayorista['cantidad'] && $precio_mayorista['cantidad'] != 0) {
            $precio_unitario = ($precio_mayorista['precio'] / $precio_mayorista['cantidad']);
            $precio_format = number_format($precio_unitario, 2);
            $min_total = $precio_format * $cantidad;
            if ($cantidad == $precio_mayorista['cantidad']) {
                $min_total = $precio_mayorista['precio'];
            }
        } 
    }
    
    if ($min_total !== null) {
        $precios_compras = $this->model->precios_compras($id_producto);
        $costo_inicial = $precios_compras['precio_compra'];
        $precio = $precios_compras['precio_venta'];
        $verificar_descuento = $this->model->cantidades_actuales_detalle_temp($id_detalle);
        $sub_mayorista = $min_total - $verificar_descuento['descuento'];
       
        $total_costo = $cantidad * $costo_inicial;
        $updatear_cantidad = $this->model->actualizar_cantidad_post($id_detalle, $id_user, $precio_format, $cantidad, $sub_mayorista, $total_costo);
        if ($updatear_cantidad == 1) {
           $res = "ok";
        }else {
            $res = "no se pudo updatear mayoristas";
        }
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
        exit;
    } else {
        $precios_compras = $this->model->precios_compras($id_producto);
        $costo_inicial = $precios_compras['precio_compra'];
        $precio = $precios_compras['precio_venta'];
        $verificar_descuento = $this->model->cantidades_actuales_detalle_temp($id_detalle);
        if ($verificar_descuento['descuento'] == 0) {
            $subtotal = $cantidad * $precio;
        }else {
            $resultado = $cantidad * $precio;
            $subtotal = $resultado - $verificar_descuento['descuento'];
        }
        $total_costo = $cantidad * $costo_inicial;
        $updatear_cantidad = $this->model->actualizar_cantidad_post($id_detalle, $id_user, $precio, $cantidad, $subtotal, $total_costo);
        if ($updatear_cantidad == 1) {
            $res = "ok";
        }else {
            $res = "Ubo un error en actlizar la cantidad";
        }
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
        exit;
    }
   
}

function verificar_pro(){
    $precios_compras = $this->model->precios_compras(3);
    print_r($precios_compras);
    exit;
}

function lista_detalles($id_venta){
    $id_user = $_SESSION['id_usuario'];
    $listas_detalles = $this->model->listar_detalles_editar($id_venta, $id_user);
    echo json_encode($listas_detalles, JSON_UNESCAPED_UNICODE);
    exit;
}



public function listar_productos(){
    $data = $this->model->cargar_productos();
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit;
}
















}
        
















    

