Source: controllers/secretaria.js

import { Modelo } from "../models/modelo.js";
import { VistaMenuSecretaria } from "../views/secretaria/vistamenusecretaria.js";
import { VistaGestionDiaria } from "../views/secretaria/vistagestiondiaria.js";
import { VistaGestionMensual } from "../views/secretaria/vistagestionmensual.js";
import { VistaGestionPadres } from "../views/secretaria/vistagestionpadres.js";
import { Rest } from "../services/rest.js";

/**
 * Controlador del panel de secretaría.
 */
class ControladorSecretaria {
    #usuario = null; // Usuario logueado.

    constructor() {
        window.onload = this.iniciar.bind(this);
        window.onerror = (error) => console.error('Error capturado. ' + error);
    }

    /**
     * Inicia la aplicación.
     */
    iniciar() {
        this.#usuario = JSON.parse(sessionStorage.getItem('usuario'));
        
        // Comprobar login
        if (!this.#usuario)
            window.location.href = 'login_google.html';

        // Comprobar rol de usuario secretaría
        if (this.#usuario.rol != 'S')
            window.location.href = 'login_google.html';

        Rest.setAutorizacion(this.#usuario.autorizacion);

        this.modelo = new Modelo();
        this.vistaMenu = new VistaMenuSecretaria(this, document.getElementById('menuSecretaria'));
        this.vistaGestionDiaria = new VistaGestionDiaria(this, document.getElementById('gestionDiaria'));
        this.vistaGestionMensual = new VistaGestionMensual(this, document.getElementById('gestionMensual'));
        this.vistaGestionPadres = new VistaGestionPadres(this, document.getElementById('gestionPadres'));
   
        this.verVistaGestionDiaria();
    }

    /**
     * Realizar proceso de modificación de padre desde secretaría.
     * @param {Object} padre Datos del padre.
     */
    modificarPadre(padre) {
        this.modelo.modificarPadreSecretaria(padre)
         .then(() => {
             this.vistaGestionPadres.exitoModificacion(true); 
         })
         .catch(e => {
             this.vistaGestionPadres.errorModificacion(e);
             console.error(e);
         }) 
    }

    /**
     * Obtiene las incidencias de una fecha.
     * @param {String} fecha String de la fecha.
     */
    obtenerIncidencias(fecha) {
        this.modelo.obtenerIncidencias(fecha)
         .then(incidencias => {
             this.vistaGestionDiaria.cargarListado(incidencias);
         })
         .catch(e => {
             console.error(e);
         })
    }
    
    /**
     * Obtiene las incidencias de un mes.
     * @param {Number} mes Mes.
     */
    obtenerIncidenciasMensual(mes) {
        this.modelo.obtenerIncidenciasMensual(mes)
         .then(incidencias => {
             this.vistaGestionMensual.cargarListado(incidencias);
         })
         .catch(e => {
             console.error(e);
         })
    }

    /**
     * Insertar incidencia del usuario indicado en el día indicado.
     * @param {Object} datos Datos de la incidencia.
     * @param {HTMLTextAreaElement} textarea Elemento dónde se introdujo la incidencia.
     */
    insertarIncidencia(datos, textarea) {
        this.modelo.insertarIncidencia(datos)
         .then(() => {
             if (textarea) this.vistaGestionDiaria.insercionExito(textarea);
         })
         .catch(e => {
             console.error(e);
             if (textarea) this.vistaGestionDiaria.insercionError(textarea);
         })
    }

    /**
     * Obtiene los usuarios que van al comedor de una fecha.
     * @param {String} fecha String de la fecha.
     */
    obtenerUsuarios(fecha) {
        this.modelo.obtenerUsuariosApuntados(fecha)
         .then(usuarios => {
             this.vistaGestionDiaria.cargarIncidencias(usuarios);
         })
         .catch(e => {
             console.error(e);
         })
    }

    /**
     * Obtener usuarios de comedor de un mes.
     * @param {Number} mes Mes.
     */
    obtenerUsuariosMensual(mes) {
        this.modelo.obtenerUsuariosApuntadosMensual(mes)
        .then(usuarios => {
            this.vistaGestionMensual.cargarIncidencias(usuarios);
        })
        .catch(e => {
            console.error(e);
        })
    }

    /**
     * Muestra la vista de gestión diaria.
     */
    verVistaGestionDiaria() {
        this.vistaGestionDiaria.mostrar(true);
        this.vistaGestionMensual.mostrar(false);
        this.vistaGestionPadres.mostrar(false);
    }

    /**
     * Muestra la vista de gestión mensual.
     */
    verVistaGestionMensual() {
        this.vistaGestionDiaria.mostrar(false);
        this.vistaGestionMensual.mostrar(true);
        this.vistaGestionPadres.mostrar(false);
    }

    /**
     * Muestra la vista de gestión mensual.
     */
    verVistaGestionPadres() {
        this.vistaGestionDiaria.mostrar(false);
        this.vistaGestionMensual.mostrar(false);
        this.vistaGestionPadres.mostrar(true);
    }

    /**
     * Cierra la sesión del usuario.
     */
    cerrarSesion() {
        this.#usuario = null;
        sessionStorage.removeItem('usuario');
        Rest.setAutorizacion(null);
        window.location.href = 'login_google.html';
    }

    /**
     * Buscar padres.
     * @param {String} busqueda String búsqueda.
     */
    obtenerListadoPadres(busqueda){
        this.modelo.obtenerListadoPadres(busqueda)
         .then(padres => {
             this.vistaGestionPadres.iniciarTabla(padres);
         })
         .catch(e => {
             console.error(e);
         })
    }
}

new ControladorSecretaria();