<? $r="../";
require_once($r."inc/funciones.php");
validNotSession($r);
$spe=$_SESSION['perfil'];
$idusuario=$_SESSION['userid'];
$mysqli = connectDB($r);
$viewcost = viewroleaccess(1651);

/* ENTREFA DEL PEDIDO */
if(isset($_POST["entregar"])){
    $code=$_POST["entregar"];
    foreach($_POST as $key => $item){
        if($key=='entregar'){
            $fecha = date("Y-m-d H:i:s");    
            $sqlpedido = $mysqli->query("SELECT pago, remesa FROM z_pedidos WHERE codigopedido=$code"); 
            $rowpedido = $sqlpedido->fetch_assoc();
            if($rowpedido['pago'] == 0){
                $mysqli->query("UPDATE z_pedidos SET estado='2', fechasalida='$fecha' WHERE codigopedido='$code'");
            }else{
                $mysqli->query("UPDATE z_pedidos SET estado='3', fechasalida='$fecha' WHERE codigopedido='$code'");
            }
            if($rowpedido['remesa']=='0'){
                $mysqli->query("UPDATE z_pedidos SET estado='6', fechasalida='$fecha' WHERE codigopedido='$code'");
            }
        }
    }
    echo 'por-entregar-pedido.php?msn=El Pedido de No'.$code.' Fue Entregado';
    exit();
}


if(isset($_POST["listaentrega"])){
    foreach($_POST['pedidos'] as $key => $item){
        $fecha = date("Y-m-d H:i:s");    
        $sqlpedido = $mysqli->query("SELECT pago, remesa FROM z_pedidos WHERE codigopedido=$item"); 
        $rowpedido = $sqlpedido->fetch_assoc();
        if($rowpedido['pago'] == 0){
            $mysqli->query("UPDATE z_pedidos SET estado='2', fechasalida='$fecha' WHERE codigopedido='$item'");
        }else{
            $mysqli->query("UPDATE z_pedidos SET estado='3', fechasalida='$fecha' WHERE codigopedido='$item'");
        }
        if($rowpedido['remesa']=='0'){
            $mysqli->query("UPDATE z_pedidos SET estado='6', fechasalida='$fecha' WHERE codigopedido='$item'");
        }
    }
    exit(header('location: por-entregar-pedido.php?msn=Los pedidos fueron entregados'));
}

/* ENTREFA DEL PEDIDO */
if(isset($_POST["exchange"])){
    $idproducto=$_POST["exchange"];
    $bodega_salida=$_POST["bodega_salida"];
    $bodega_destino=$_POST["bodega_destino"];
    $cantidad=$_POST["cantidad"];
    if($bodega_salida == $bodega_destino){
        $respuesta = array("action" => "msn","respuesta" => "ERROR. La bodega de salida y la bodega destino son iguales");
        echo json_encode($respuesta);
    }else{
        $sqlinventario = $mysqli->query("SELECT cantidad FROM z_inventario WHERE idbodega=$bodega_salida AND idproducto=$idproducto"); 
        $rowinventario = $sqlinventario->fetch_assoc();
        if($rowinventario['cantidad']<$cantidad){
            $respuesta = array("action" => "msn","respuesta" => "ERROR. No hay ". $cantidad . " en la Bodega de salida, solo hay {$rowinventario['cantidad']} en bodega");
            echo json_encode($respuesta);
        }else{
            // Verifica si existe el registro en la bodega destino
            $check = $mysqli->query("SELECT id FROM z_inventario WHERE idbodega=$bodega_destino AND idproducto=$idproducto");
            if ($check->num_rows == 0) {
                // Si no existe, crear con cantidad = 0
                $mysqli->query("INSERT INTO z_inventario (idbodega, idproducto, cantidad) VALUES ($bodega_destino, $idproducto, 0)");
            }
            
            // Realizar la salida de la bodega origen
            $mysqli->query("UPDATE z_inventario SET cantidad = cantidad - $cantidad WHERE idbodega = $bodega_salida AND idproducto = $idproducto");
            
            // Realizar la entrada en la bodega destino
            $mysqli->query("UPDATE z_inventario SET cantidad = cantidad + $cantidad WHERE idbodega = $bodega_destino AND idproducto = $idproducto");
            
            $mysqli->query("INSERT INTO `z_inventario_traslados_log`(`idproducto`, `idbodega_origen`, `idbodega_destino`, `cantidad`, `idusuario`) VALUES ($idproducto,$bodega_salida,$bodega_destino,$cantidad,$idusuario)");
            $respuesta = array("action" => "success","respuesta" => "OK. Translado exitoso");
            echo json_encode($respuesta);
        }
        
    }
    
}


if (isset($_FILES["fichatecnica"]) && isset($_POST["idproductoficha"])) {

    $idproducto = intval($_POST["idproductoficha"]); // Sanitiza el ID del producto
    $archivo = $_FILES["fichatecnica"];

    // Verificar si el archivo es un PDF
    $ext = pathinfo($archivo["name"], PATHINFO_EXTENSION);
    if (strtolower($ext) !== "pdf") {
        die("Error: Solo se permiten archivos PDF.");
    }

    // Definir la carpeta de destino y el nuevo nombre del archivo
    $directorio = $_SERVER['DOCUMENT_ROOT'] . "/ft/"; 
    $nombreArchivo = "archivo_" . $idproducto . ".pdf";
    $rutaCompleta = $directorio . $nombreArchivo;

    // Mover el archivo al directorio destino
    if (move_uploaded_file($archivo["tmp_name"], $rutaCompleta)) {
        // Guardar la ruta en la base de datos
        $rutaBD = $nombreArchivo; // Ruta accesible desde el dominio
        $sql = "UPDATE z_productos SET ficha_tecnica = ? WHERE id = ?";
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param("si", $rutaBD, $idproducto);

        if ($stmt->execute()) {
            echo 'inventario.php?msn=Ficha tecnica <b>Actualizada</b>';
        } else {
            echo "Error al actualizar la base de datos.";
        }

        $stmt->close();
        $mysqli->close();
    } else {
        echo "Error al subir el archivo.";
    }
}

if(isset($_POST["devolucion"])){ 
    $codigo=$_POST["devolucion"];
    $ahora = date("Y-m-d H:i:s");
    $ok="";
    foreach($_POST['motivo'] as $key => $item){
        $ok = $key;
        $idproducto = $_POST['idp'][$key];
        $producto = $_POST['idnp'][$key];
        $idpresentacion = $_POST['idpp'][$key];
        $motivo = $_POST['motivo'][$key];
        $nota = $_POST['nota'][$key];
        $cantidad = $_POST['id'][$key];
        if(empty($cantidad)){echo '<div class="alert alert-Warning  alert-dismissible text-center  bg-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><h6>Ingresa la Cantidad a devolver en <b>'.$producto.'</b></h6></div>';exit();}
        if(empty($nota)){echo '<div class="alert alert-Warning  alert-dismissible text-center  bg-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><h6>Ingresa la nota de observacion en <b>'.$producto.'</b></h6></div>';exit();}
                
        $mysqli->query("UPDATE z_pedido SET devolucion=devolucion+$cantidad, cantidad=cantidad-$cantidad WHERE id='$ok'");
        $mysqli->query("INSERT INTO z_devolucion(iduser, idproducto, codigopedido, cantidad, motivo, observaciones, fecha) VALUES ('$idusuario','$idproducto','$codigo','$cantidad','$motivo','$nota','$ahora')");
        
        $total = 0;
        $sqlpedido = $mysqli->query("SELECT cantidad, precio FROM z_pedido WHERE codigopedido=$codigo"); 
        while ($rowpedido = $sqlpedido->fetch_assoc()){
            $subtotal = $rowpedido['precio']*$rowpedido['cantidad'];
            $total = $total+$subtotal;
        }
        $mysqli->query("UPDATE z_pedidos SET total='$total' WHERE codigopedido='$codigo'");
        $infomotivo = info('recupera','z_edevolucion',$motivo);
        if($infomotivo['recupera']==1){
            
            $infopresent = info('cantidad','z_presentaciones_productos',$idpresentacion);
            $cantidadpresent = $infopresent['cantidad']*$cantidad;
            $mysqli->query("UPDATE z_inventario SET cantidad=cantidad+$cantidadpresent WHERE idproducto=$idproducto");
        }
    }
    
        echo 'devolucion.php?msn=El Pedido de No '.$codigo.' Fue <b>Devuelto Parcial</b>';
    if(empty($ok)){
        echo '<div class="alert alert-Warning  alert-dismissible text-center bg-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><h6>Falta Información para hacer la devolucion, Revisa todos los campos.<br/> ( motivo, cantidad y observacion) por producto.</h6></div>';exit();
    }
}

if(isset($_POST["devoluciontotal"])){ 
    if(empty($_POST['motivo'])){echo '<div class="alert alert-Warning  alert-dismissible text-center bg-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><h6>Falta Información para hacer la devolucion, Revisa todos los campos.<br/> ( motivo y observacion).</h6></div>';exit();}
    if(empty($_POST['observaciones'])){echo '<div class="alert alert-Warning  alert-dismissible text-center  bg-warning"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a><h6>Ingresa la nota de observacion<b>'.$producto.'</b></h6></div>';exit();}
    
    $codigo = $_POST["devoluciontotal"];
    $motivo = $_POST['motivo'];
    $infomotivo = info('recupera','z_edevolucion',$motivo);
    $nota = $_POST['observaciones'];
    $ahora = date("Y-m-d H:i:s");
    $total = 0;
    
    $sqlpedido = $mysqli->query("SELECT idproducto, idpresentacion, cantidad FROM z_pedido WHERE codigopedido=$codigo"); 
    while ($rowpedido = $sqlpedido->fetch_assoc()){
        $idproducto = $rowpedido['idproducto'];
        $cantidad = $rowpedido['cantidad'];
        $idpresentacion = $rowpedido['idpresentacion'];
        $mysqli->query("INSERT INTO z_devolucion(iduser, idproducto, idpresentacion, codigopedido, cantidad, motivo, observaciones, fecha) VALUES ('$idusuario','$idproducto','$idpresentacion','$codigo','$cantidad','$motivo','$nota','$ahora')");
        if($infomotivo['recupera']==1){
            $infopresent = info('cantidad','z_presentaciones_productos',$idpresentacion);
            $cantidadpresent = $infopresent['cantidad']*$cantidad;
            $mysqli->query("UPDATE z_inventario SET cantidad=cantidad+$cantidadpresent WHERE idproducto=$idproducto");
        }
    }
    $mysqli->query("UPDATE z_pedidos SET total='$total', estado=5, pago=2 WHERE codigopedido='$codigo'");
    echo 'devolucion.php?msn=El Pedido de No '.$codigo.' Fue <b>Devuelto totalmente.</b>';
    exit();
}

if(isset($_POST["history"])){ 
    $idproducto=$_POST["history"];
    $row1 = $mysqli->query("SELECT * FROM `z_inventario_logs` WHERE idproducto=$idproducto ORDER BY fecha DESC"); 
    $num1 = $row1->num_rows;
    if($num1 == 0){ echo 'NO HAY HISTORIAL DEL PRODUCTO'; exit();}
    
    $response ='<table class="table table-bordered" width="100%" ><tr><th>Usuario</th><th>Fecha</th><th>Cantidad</th><th>Bodega</th><th>Precio</th></tr>';
    while($row2 = $row1->fetch_assoc()){
        $sinfouser = sinfo('z_usuarios', $row2['iduser']);
        $response .='<tr><td>'.$sinfouser['nombre'].'</td>';
        $response .='<td>'.$row2['fecha'].'</td>';
        $response .='<td>'.number_format($row2['cantidad'], 2, ',', '.').'</td>';
        $response .='<td>'.sinfo('z_bodegas',$row2['idbodega'])['bodega'].'</td>';
        if($viewcost){ $response .='<td>'.moneda($row2['precio']).'</td></tr>'; }else{ $response .='<td></td></tr>'; }
    }
    $response .= '</table>';
    echo $response;
}

if(isset($_POST["historyexchange"])){ 
    $idproducto=$_POST["historyexchange"];
    $row1 = $mysqli->query("SELECT * FROM `z_inventario_traslados_log` WHERE idproducto=$idproducto ORDER BY fecha DESC"); 
    $num1 = $row1->num_rows;
    if($num1 == 0){ echo 'NO HAY HISTORIAL TRASLADO DEL PRODUCTO'; exit();}
    
    $response ='<table class="table table-bordered" width="100%" ><tr><th>Usuario</th><th>Fecha</th><th>Cantidad</th><th>Bodega Origen</th><th>Bodega Destino</th></tr>';
    while($row2 = $row1->fetch_assoc()){
        $sinfouser = sinfo('z_usuarios', $row2['idusuario']);
        $response .='<tr><td>'.$sinfouser['nombre'].'</td>';
        $response .='<td>'.$row2['fecha'].'</td>';
        $response .='<td>'.number_format($row2['cantidad'], 2, ',', '.').'</td>';
        $response .='<td>'.sinfo('z_bodegas',$row2['idbodega_origen'])['bodega'].'</td>';
        $response .='<td>'.sinfo('z_bodegas',$row2['idbodega_destino'])['bodega'].'</td>';
    }
    $response .= '</table>';
    echo $response;
}


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

    $fecha = trim($_POST["historyallexchange"]);
    $fecha = $mysqli->real_escape_string($fecha);

    if(empty($fecha)){

        // Últimos 3 meses
        $row1 = $mysqli->query("
            SELECT *
            FROM z_inventario_traslados_log
            WHERE fecha >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
            ORDER BY fecha DESC
            LIMIT 300
        ");

    }else{

        // Filtrado por fecha (máximo 100)
        $row1 = $mysqli->query("
            SELECT *
            FROM z_inventario_traslados_log
            WHERE fecha LIKE '%$fecha%'
            ORDER BY fecha DESC
            LIMIT 100
        ");
    }

    if($row1->num_rows == 0){
        echo 'NO HAY HISTORIAL DE TRASLADOS';
        exit();
    }

    $response  = '<table class="table table-bordered" width="100%">';
    $response .= '<tr>
                    <th>Usuario</th>
                    <th>Producto</th>
                    <th>Fecha</th>
                    <th>Cantidad</th>
                    <th>Bodega Origen</th>
                    <th>Bodega Destino</th>
                  </tr>';

    while($row2 = $row1->fetch_assoc()){

        // Usuario
        $nombreUsuario = 'Sistema (Traslado Automático)';

        if(!empty($row2['idusuario'])){
            $sinfouser = sinfo('z_usuarios', $row2['idusuario']);
            if(!empty($sinfouser) && !empty($sinfouser['nombre'])){
                $nombreUsuario = $sinfouser['nombre'];
            }
        }

        // Producto
        $infoproducto = sinfo('z_productos', $row2['idproducto']);
        $nombreProducto = !empty($infoproducto['producto']) ? $infoproducto['producto'] : 'Producto eliminado';

        // Bodegas
        $bodegaOrigen  = sinfo('z_bodegas',$row2['idbodega_origen']);
        $bodegaDestino = sinfo('z_bodegas',$row2['idbodega_destino']);

        $nombreOrigen  = !empty($bodegaOrigen['bodega']) ? $bodegaOrigen['bodega'] : 'N/A';
        $nombreDestino = !empty($bodegaDestino['bodega']) ? $bodegaDestino['bodega'] : 'N/A';


        $cantidad = rtrim(rtrim(number_format($row2['cantidad'], 3, ',', '.'), '0'), ',');
        

        $response .= '<tr>
                        <td>'.$nombreUsuario.'</td>
                        <td>'.$nombreProducto.'</td>
                        <td>'.$row2['fecha'].'</td>
                        <td>'.$cantidad.' '.$infoproducto['unidad2'].'</td>
                        <td>'.$nombreOrigen.'</td>
                        <td>'.$nombreDestino.'</td>
                      </tr>';
    }

    $response .= '</table>';

    echo $response;
    exit();
}

    


if(isset($_GET["pedidos"])){
    $idrutero=$_GET["pedidos"];
    $row1 = $mysqli->query("SELECT codigopedido, pago FROM z_pedidos WHERE idrutero='$idrutero' AND estado=1");
    while($row2 = $row1->fetch_assoc()) {
        $code=$row2['codigopedido'];
        $fecha = date("Y-m-d H:i:s");    
        if($row2['pago'] == 0){
            $mysqli->query("UPDATE z_pedidos SET estado='2', fechasalida='$fecha' WHERE codigopedido='$code'");
        }else{
            $mysqli->query("UPDATE z_pedidos SET estado='3', fechasalida='$fecha' WHERE codigopedido='$code'");
        }
    }
    exit(header("Location: index.php?msn=Los pedidos han sido entregados"));
}


$ahora = date("Y-m-d H:i:s");  

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

    $idproducto = intval($_POST['actualizar']);
    $idbodega   = intval($_POST['bodega']);
    $ajuste     = floatval($_POST['cantidad']); // ahora es ajuste (+ o -)
    $motivo     = trim($_POST['motivo']);

    if($idbodega <= 0){
        exit(header("Location: inventario.php?error=Debe seleccionar una bodega"));
    }

    if($ajuste == 0){
        exit(header("Location: inventario.php?error=El ajuste no puede ser cero"));
    }

    if(empty($motivo)){
        exit(header("Location: inventario.php?error=Debe indicar un motivo del ajuste"));
    }

    // CANTIDAD ACTUAL
    $sql_actual = $mysqli->query("
        SELECT cantidad 
        FROM z_inventario 
        WHERE idproducto = '$idproducto' 
        AND idbodega = '$idbodega'
        LIMIT 1
    ");

    if($sql_actual && $sql_actual->num_rows > 0){
        $row = $sql_actual->fetch_assoc();
        $cantidad_actual = floatval($row['cantidad']);
    } else {
        $cantidad_actual = 0;
    }

    $cantidad_nueva = $cantidad_actual + $ajuste;

    if($cantidad_nueva < 0){
        exit(header("Location: inventario.php?error=La cantidad final no puede ser negativa"));
    }

    $motivo = $mysqli->real_escape_string($motivo);

    // LOG AJUSTE
    $mysqli->query("
        INSERT INTO z_inventario_ajustes_logs
        (idproducto, cantidad_anterior, cantidad_nueva, diferencia, motivo, iduser, fecha, ip)
        VALUES
        ('$idproducto', '$cantidad_actual', '$cantidad_nueva', '$ajuste', '$motivo', '$idusuario', '$ahora', '{$_SERVER['REMOTE_ADDR']}')
    ");

    // ACTUALIZA O CREA
    if($sql_actual && $sql_actual->num_rows > 0){

        $mysqli->query("
            UPDATE z_inventario
            SET cantidad = cantidad + ($ajuste),
                iduser = '$idusuario',
                fecha = '$ahora'
            WHERE idproducto = '$idproducto'
            AND idbodega = '$idbodega'
        ");

    } else {

        $mysqli->query("
            INSERT INTO z_inventario
            (idproducto, cantidad, precio, iduser, idbodega, fecha)
            VALUES
            ('$idproducto', '$cantidad_nueva', 0, '$idusuario', '$idbodega', '$ahora')
        ");
    }

    exit(header('Location: inventario.php?msn=Ajuste realizado correctamente'));
}