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

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once ('./PHPMailer/src/Exception.php');
require_once ('./PHPMailer/src/PHPMailer.php');
require_once ('./PHPMailer/src/SMTP.php');
  
class VentaRapida extends controller
{        private $id_producto ;
    public function __construct()
    {
        SESSION_START();
        if (empty($_SESSION ['activo'])) {
           header("location:".base_url);
        }
        //INICIO DE SSECION 
    $this->model = new VentaRapidamodel();
        parent::__construct();
    }

        public function index(){
            $id_user = (int)$_SESSION['id_usuario'];
            $verificar = $this->model->verificarPermiso($id_user, 'caja');
            if (!empty($verificar) || $id_user == 1 ) {  



            
            $data = $this->model->getusuarios();
            $this->views->getviews($this, "VentaRapida", $data);

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

        }  
        }

       
        public function botoncaja() {
            $id_usuario = (int)$_SESSION['id_usuario'];
            $data = $this->model->botonescaja($id_usuario);
            $response = $data;
           
            echo json_encode($response, JSON_UNESCAPED_UNICODE);
            die();
        }
        
     


        public function abrirArqueo()
        {
            $monto_inicial = $_POST['aperurarrr'];
            $fecha_apertura = date('Y-m-d');
            $id_usuario = (int)$_SESSION['id_usuario'];
            $id = $_POST['data-id'];
        
            $smg = array();
            $show_button = false; // Variable para mostrar u ocultar el botón en la alerta
        
            if ($id_usuario <= 0) {
                $smg = array('msg' => 'Error: El ID de usuario no es válido', 'icono' => 'error');
            } elseif (empty($monto_inicial) && $id === 'APERTURADECAJA') {
                $smg = array('msg' => 'Ingrese un monto para abrir la caja', 'icono' => 'error');
            } else {
                if ($id === 'APERTURADECAJA') {
                    $this->model->Cerrardatos($id_usuario);
                    $this->model->actualizarestadobutton($id_usuario);
                    $this->model->actualizar_detalle_venta($id_usuario);
                    $this->model->esatadodGanancia();
                    $this->model->actualizarAdelantos($id_usuario);
                    $this->model->actualizartotal_ventas($id_usuario);
                    $data = $this->model->registrarArqueos($id_usuario, $monto_inicial, $fecha_apertura);
                    if ($data == 'ok') {
                        $smg = array('msg' => 'Caja aperturada', 'icono' => 'success');
                    } elseif ($data == 'existe') {
                        $this->model->actualizarbottonesestado($id_usuario);
                        $smg = array('msg' => 'La Caja ya se aperturó', 'icono' => 'warning');
                    } else {
                        $smg = array('msg' => 'Error', 'icono' => 'error');
                    }
                } elseif ($id === 'CIERREDECAJA') {
                    // Lógica para el cierre de caja
                    $monto_cierre = $_POST['aperurarrr'];
                    $monto_final = $this->model->getVentas($id_usuario);
                    $inicial = $this->model->getMontoInicial($id_usuario);
                    $total_compras = $this->model->compraTotaless($id_usuario);
                    $ingreso = $this->model->ingreso($id_usuario);
                    $egreso = $this->model->egreso($id_usuario);
                    $adelantos = $this->model->operacionadelanto($id_usuario);
        
                    if ($monto_final !== null && $inicial !== null) {
                        $monto_final_str = (string)$monto_final['total'];
                        $monto_final_num = floatval($monto_final_str);
                        $inicial_num = floatval($inicial['monto_inicial']);
                        $total_compras_num = floatval($total_compras['total']);
                        $ingresoefe = floatval($ingreso['monto']);
                        $egresoefe = floatval($egreso['monto']);
                        $adelantos = floatval($adelantos['monto']);
        
                        $general = $monto_final_num + $inicial_num + $ingresoefe - $egresoefe - $total_compras_num - $adelantos;
        
                        $data = $this->model->actualizarArqueo($fecha_apertura, $monto_final_str, strval($total_compras_num), $egresoefe, $ingresoefe, $monto_cierre, $general, (int)$inicial['id']);
        
                        if ($data == 'ok') {
                            
                            $this->model->actualizarCompraTotal($id_usuario, $total_compras_num);
                            $this->model->actualizarApertura($id_usuario);
                            $this->model->actualizaringreso($id_usuario);
                            $this->model->actualizaregresos($id_usuario);
                            $smg = array('msg' => 'LA CAJA ESTÁ CERRADA', 'icono' => 'success');
                            $show_button = true; // Mostrar el botón en la alerta
                        } else {
                            $smg = array('msg' => 'Error', 'icono' => 'error');
                        }
                    } else {
                        $smg = array('msg' => 'Error: No se encontró el monto inicial o final', 'icono' => 'error');
                    }
                }
            }
        
            $smg['show_button'] = $show_button; // Incluir la variable show_button en la respuesta
        
            echo json_encode($smg, JSON_UNESCAPED_UNICODE);
            die();
        }
        

        public function enviarCorreo() {
            $res = array(); // Crear un array para almacenar la respuesta
        
            // Obtener datos del usuario
            $id_usuario = (int)$_SESSION['id_usuario'];
            $detalles = $this->model->detallesarqueo($id_usuario);
            $ventas = $this->model->detalles_ventas($id_usuario);
            $adelantos = $this->model->adelantos();
            $total = $this->model->total_ventas($id_usuario);
            $yape = $this->model->pagosconyape($id_usuario);
            $plin = $this->model->pagosplin($id_usuario);
            $bcp = $this->model->bcp($id_usuario);
            $bbva = $this->model->bbva($id_usuario);
            $banconacion = $this->model->banconacion($id_usuario);
            $otros = $this->model->otros($id_usuario);
            $anulaciones = $this->model->anulaciones($id_usuario);
            $correo = $this->model->traerCorreo();
            $correoGmail = $correo['gmail'];
            $nombreCliente = $correo['nombre'];
            // Crear un objeto PHPMailer
            $mail = new PHPMailer(true);
        
            try {
                // Configuración del servidor de correo
                $mail->SMTPDebug = 0;
                $mail->isSMTP();
                $mail->Host = 'mail.leysa-sof-lte.com';
                $mail->SMTPAuth = true;
                $mail->Username = 'negocios-rodas@leysa-sof-lte.com';
                $mail->Password = ';&K0;~0]Wkyd';
                $mail->SMTPSecure = 'ssl';
                $mail->Port = 465;
        
                // Destinatario
                $mail->setFrom('negocios-rodas@leysa-sof-lte.com', 'SOF LEYSA LTE');
                $mail->addAddress($correoGmail, $nombreCliente);
        
                // Contenido del correo
                $mail->Subject = 'EL USUARIO ' . $detalles['nombre_usuario'] . ' HA CERRADO LA CAJA';
                $body = "
                    MONTO INICIAL       : {$detalles['monto_inicial']}
                    TOTAL DE VENTAS     : {$total['total']}
                    ADELANTOS           :\n";
                foreach ($adelantos as $adelanto) {
                    $body .= "                {$adelanto['nombre']} : {$adelanto['monto']}\n";
                }
                $dinero = $detalles['total_ventas'] + $detalles['monto_inicial'];
                $subtotal = $dinero + $detalles['ingreso'];
                $total = $subtotal -  $detalles['egresos'];
                $diferencia = $detalles['monto_cierre'] - $total;

                if ($diferencia > 0) {
                    $estado_diferencia = 'Sobrante';
                } elseif ($diferencia < 0) {
                    $estado_diferencia = 'Faltante';
                } else {
                    $estado_diferencia = 'Conforme';
                }
                
                $body .= "
                    DINERO EN EFECTIVO  : {$detalles['total_ventas']}
                    MONTO DE CIERRE     : {$detalles['monto_cierre']}
                    COMPRAS             : {$detalles['total_compras']}
                    YAPE                : {$yape['total']}
                    PLIN                : {$plin['total']}
                    BCP                 : {$bcp['total']}
                    BBVA                : {$bbva['total']}
                    BANCO DE LA NACION  : {$banconacion['total']}
                    OTROS               : {$otros['total']}
                    ANULACIONES         : {$anulaciones['total_anulaciones']}
                    MONTO EN ANULACIONES: {$anulaciones['suma_total']}
                    INGRESO DE DINERO   : {$detalles['ingreso']}
                    SALIDAS DE DINERO   : {$detalles['egresos']}
                    ESTADO              : {$diferencia} ({$estado_diferencia})
                    EFECTIVO EN CAJA    : {$total}

                ";
                
                $mail->Body = $body;
        
                // Envío del correo
                if ($mail->send()) {
                    $res['status'] = "enviado";
                } else {
                    $res['status'] = "no se envió el correo";
                    $res['error'] = $mail->ErrorInfo; // Agregar información de error
                }
            } catch (Exception $e) {
                $res['status'] = "error";
                $res['error'] = $e->getMessage(); // Agregar información de error de la excepción
            }
        
            echo json_encode($res, JSON_UNESCAPED_UNICODE);
        }
        





            public function ingresos_de_dinero(){
                $id_usuario = (int)$_SESSION['id_usuario'];
                $monto = isset($_POST['dinerioIngreso']) ? $_POST['dinerioIngreso'] : "";
                $opciones = isset($_POST['opciones']) ? $_POST['opciones'] : "";
                $detalle = isset($_POST['comentarios']) ? $_POST['comentarios'] : "";
                $fecha = date('Y-m-d H:i:s');
                // Resto de tu código
            $registrar = $this->model->registraringresoso($id_usuario, $monto, $opciones, $detalle, $fecha);
            if ($registrar == 1) {
                $smg = "ok";
            } else {
                $smg = "error";
            }
            echo json_encode($smg, JSON_UNESCAPED_UNICODE);
            die();
        }
        



        
        public function egresos_de_dinero(){
            $id_usuario = (int)$_SESSION['id_usuario'];
            $monto = isset($_POST['dinerioIngreso']) ? $_POST['dinerioIngreso'] : "";
            $opciones = isset($_POST['opciones2']) ? $_POST['opciones2'] : "";
            $detalle = isset($_POST['comentarios2']) ? $_POST['comentarios2'] : "";
            $fecha = date('Y-m-d H:i:s');
        $registrar = $this->model->registraregresos($id_usuario, $monto, $opciones, $detalle, $fecha);
        if ($registrar == 1) {
            $smg = "ok";
        } else {
            $smg = "error";
        }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }



        
    public function pagodelpersonal(){
        $id_usuario = (int)$_SESSION['id_usuario'];
        $monto = isset($_POST['dinerioIngreso']) ? $_POST['dinerioIngreso'] : "";
        $opciones = isset($_POST['opciones2']) ? $_POST['opciones2'] : "";
        $detalle = isset($_POST['usuario']) ? $_POST['usuario'] : "";
        $fecha = date('Y-m-d');
    $registrar = $this->model->adelantospert($id_usuario, $monto, $opciones, $detalle, $fecha);
    if ($registrar == 1) {
        $smg = "ok";
    } else {
        $smg = "error";
    }
    echo json_encode($smg, JSON_UNESCAPED_UNICODE);
    die();
}






  
public function imprimirArqueos(){
    $id_usuario = (int)$_SESSION['id_usuario'];
    $detalles = $this->model->detallesarqueo($id_usuario);
    $ventas = $this->model->detalles_ventas($id_usuario);
    $adelantos = $this->model->adelantos();
    $total = $this->model->total_ventas($id_usuario);
    $yape = $this->model->pagosconyape($id_usuario);
    $plin = $this->model->pagosplin($id_usuario);
    $bcp = $this->model->bcp($id_usuario);
    $bbva = $this->model->bbva($id_usuario);
    $banconacion = $this->model->banconacion($id_usuario);
    $otros = $this->model->otros($id_usuario);
    $anulaciones = $this->model->anulaciones($id_usuario);

    require('libraries/fpdf/fpdf.php');
    $pdf = new FPDF('P', 'mm', array(80, 210));
    $pdf->AddPage();
    $pdf->SetMargins(5,0,0);
    $pdf->SetTitle('ARQUEO');
    $pdf->SetFont('Arial','B',10);
    
      $pdf->SetFont('Arial','B',9);
      $pdf->Image('assets/img/negocios rodas.png', 10, -2, 60, 30);
    $pdf->Ln(8);
    
    
    $pdf->Cell(65,8,'ARQUEO', 0, 1, 'C');
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, 'Usuario Caja',0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['nombre_usuario'],0,1,'R');  
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, 'Fecha de apertura',0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['fecha_apertura'],0,1,'R'); 
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Apertura'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['monto_inicial'],0,1,'R');

    
    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Total de ventas'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $total['total'],0,1,'R'); 

    if ($yape && isset($yape['total'])) {
        $pdf->SetFont('Arial','B',7);
        $pdf->Cell(22, 3, utf8_decode('Yape'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $yape['total'], 0, 1, 'R');
    }

    if ($plin && isset($plin['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Plin'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $plin['total'], 0, 1, 'R');
    }

    if ($bcp && isset($bcp['total'])) {
    $pdf->SetFont('Arial', 'B', 7);
    $pdf->Cell(22, 3, utf8_decode('Transferencia BCP'), 0, 0, 'L');
    $pdf->SetFont('Arial', '', 7);
    $pdf->Cell(35, 3, $bcp['total'], 0, 1, 'R');
    }

    if ($bbva && isset($bbva['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Transferencia BBVA'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $bbva['total'], 0, 1, 'R');
    }

    if ($banconacion && isset($banconacion['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Banco Nación'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $banconacion['total'], 0, 1, 'R');
    }

    if ($otros && isset($otros['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Otros'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $otros['total'], 0, 1, 'R');
    }

    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('ventas en efectivo'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total_ventas'],0,1,'R'); 

    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Compras'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total_compras'],0,1,'R');  
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Ingresos'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['ingreso'],0,1,'R'); 
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Egresos'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['egresos'],0,1,'R');  
    $pdf->Ln();


    
    
  if (!empty($adelantos)) {
    $pdf->SetFont('Arial', 'B', 7);
    $pdf->Cell(22, 4, 'Adelanto', 0, 1, 'L');

    foreach ($adelantos as $adelanto) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(30, 4, utf8_decode($adelanto['nombre']), 0, 0, 'L');
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(5, 4, $adelanto['monto'], 0, 0, 'R');
        
        // Establece la posición Y al inicio de la siguiente línea
        $pdf->SetY($pdf->GetY() + 4);
    }

    $pdf->Ln(); // Agrega un salto de línea al final para el próximo conjunto de datos
}

    

    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Efectivo en caja'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total'],0,1,'R');
    
    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Monto de Cierre'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['monto_cierre'],0,1,'R');  
   
    $diferencia = $detalles['monto_cierre'] - $detalles['total'];

    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(22, 3, utf8_decode('Diferencia'), 0, 0, 'L');
    $pdf->SetFont('Arial', '', 8);
    
    if ($diferencia < 0) {
        $pdf->Cell(30, 5, 'Faltante', 0, 0, 'C');
        $pdf->Cell(35, 5, abs($diferencia), 0, 1, 'L');
    } elseif ($diferencia > 0) {
        $pdf->Cell(30, 5, 'Sobrante', 0, 0, 'C');
        $pdf->Cell(35, 5, abs($diferencia), 0, 1, 'L');
    } else {
        $pdf->Cell(35, 5, 'Conforme', 0, 1, 'R');
    }

 
    $pdf->Ln();

    $pdf->Cell(65,4,'DETALLES', 0, 1, 'C');
    $pdf->Ln();

    $pdf->SetFillColor(0); 
    $pdf->SetTextColor(255); 
    $pdf->SetFont('Arial', 'B', 6);
    $pdf->Cell(22, 4, utf8_decode('Descripción'), 0, 0, 'L', 1); 
    $pdf->Cell(18, 4, 'Cantidad', 0, 0, 'R', 1);
    $pdf->Cell(18, 4, 'Subtotal', 0, 1, 'L', 1);
    
    $pdf->SetFillColor(255); 
    $pdf->SetTextColor(0); 
    $pdf->Ln();
    foreach ($ventas as $venta) {
        $pdf->SetFont('Arial','B',6);
        $pdf->Cell(22, 2, utf8_decode($venta['descripcion']), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 6);
        $pdf->Cell(18, 2, $venta['cantidad_total'], 0, 0, 'R');
        $pdf->SetFont('Arial', '', 6);
        $pdf->Cell(18, 2, $venta['sub_total_total'], 0, 1, 'L');
      
    }
    $pdf->Ln();
    

    $pdf->Ln();
    $pdf->SetFont('Arial', 'B', 6);
    $pdf->Cell(65,4,'OBSERVACIONES / MOVIMIENTOS', 0, 1, 'C');
    if ($anulaciones && isset($anulaciones['suma_total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(15, 3, utf8_decode('Anulaciones'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(13); 
        
        $pdf->Cell(11, 3, $anulaciones['total_anulaciones'], 0, 0, 'C');
        $pdf->Cell(11, 3, $anulaciones['suma_total'], 0, 0, 'C');
    }
    $pdf->Ln();
   
  
   

    $pdf->Output();
}









}
