function guardar_grupo($datosGrupo)
{
    try {
        $idGrupo = str_replace(" ", "", $datosGrupo['idGrupo']);
        $nombre = $datosGrupo['nombre'];
        $min = $datosGrupo['min'];
        $max = $datosGrupo['max'];
        $conexion = null;
        $conexion = conectar();
        $conexion->begin_transaction();
        //Chequeo si existe el grupo
        if (existe_grupo($datosGrupo['idGrupo'])) {
            echo "<p style='padding: 5px;background-color: #FFC107;color: white;'>[guardar_curso]: El grupo {$idGrupo} ya existe.</p>";
            return;
        }
        //Genero las consultas
        $success = $conexion->query("INSERT INTO grupos (idGrupo,nombre,min,max) VALUES ('{$idGrupo}', '{$nombre}', {$min}, {$max})");
        foreach ($datosGrupo['cursos'] as $curso) {
            //Chequeo si el curso existe
            $idCurso = $curso['idCurso'];
            $puntaje = $curso['puntaje'];
            $actividad = $curso['actividad'] == "Examen aprobado" ? "EXAMEN" : "CURSO";
            $existe = existe_curso($idCurso);
            if ($existe) {
                $success = $conexion->query("INSERT INTO curso_grupo (idGrupo,idCurso,puntaje,actividad) VALUES ('{$idGrupo}', '{$idCurso}', {$puntaje}, '{$actividad}')");
            }
        }
        if (!$success) {
            throw new Exception("[guardar_grupo]: Error al almacenar el grupo {$idGrupo}.");
        }
        //Commit
        $success = $conexion->commit();
        if (!$success) {
            throw new Exception("[guardar_grupo]: Error al hacer commit del grupo {$idGrupo}.");
        }
        echo "<p style='padding: 5px;background-color: green;color: white;'>[guardar_grupo]: El grupo {$idGrupo} ha sido almacenado correctamente.</p>";
    } catch (Exception $e) {
        if ($conexion != null) {
            $conexion->rollback();
        }
        throw $e;
    } finally {
        if ($conexion != null) {
            $conexion->close();
        }
    }
}
function guardar_datos_aprobacion($idCurso, $datos)
{
    try {
        $conexion = null;
        $conexion = conectar();
        $conexion->begin_transaction();
        //Chequeo si existe el curso
        if (!existe_curso($idCurso)) {
            echo "<p style='padding: 5px;background-color: #FFC107;color: white;'>[guardar_datos_aprobacion]: El curso {$idCurso} no existe.</p>";
            return;
        }
        //Nota promedio
        $success = $conexion->query("SELECT nota_promedio, total_cursantes, aprobados, exonerados, porcentaje_aprobacion FROM cursos WHERE idCurso = '{$idCurso}'");
        if (!$success) {
            throw new Exception("[guardar_datos_aprobacion]: Error al almacenar datos de aprobacion del curso {$idCurso}.");
        }
        $query = $success->fetch_assoc();
        if ($datos['nota_promedio'] != 'S/N') {
            $nota_promedio = number_format(((double) $query['nota_promedio'] + (double) $datos['nota_promedio']) / 2, 1, '.', '');
        } else {
            $nota_promedio = 'S/N';
        }
        //Total cursantes
        $total_cursantes = (int) $datos['total_cursantes'] + (int) $query['total_cursantes'];
        if (isset($datos['aprobados'])) {
            //Aprobados
            $aprobados = (int) $datos['aprobados'] + (int) $query['aprobados'];
        }
        //Exonerados
        $exonerados = (int) $datos['exonerados'] + (int) $query['exonerados'];
        //Porcentaje de aprobacion
        $porcentaje_aprobacion = number_format($exonerados / $total_cursantes * 100, 1, '.', '');
        //Actualizo los datos
        if (isset($datos['aprobados'])) {
            $success = $conexion->query("UPDATE cursos SET nota_promedio = '{$nota_promedio}', total_cursantes = {$total_cursantes}, aprobados = {$aprobados}, exonerados = {$exonerados}, porcentaje_aprobacion = {$porcentaje_aprobacion} WHERE idCurso = '{$idCurso}'");
        } else {
            $success = $conexion->query("UPDATE cursos SET nota_promedio = '{$nota_promedio}', total_cursantes = {$total_cursantes}, exonerados = {$exonerados}, porcentaje_aprobacion = {$porcentaje_aprobacion} WHERE idCurso = '{$idCurso}'");
        }
        //Commit
        $success = $conexion->commit();
        if (!$success) {
            throw new Exception("[guardar_datos_aprobacion]: Error al hacer commit curso {$idCurso}.");
        }
        echo "<p style='padding: 5px;background-color: green;color: white;'>[guardar_datos_aprobacion]: Datos aprobacion de {$idCurso} han sido actualizado correctamente.</p>";
    } catch (Exception $e) {
        if ($conexion != null) {
            $conexion->rollback();
        }
        throw $e;
    } finally {
        if ($conexion != null) {
            $conexion->close();
        }
    }
}