Plantilla automatizada para el plan de recuperación de módulos de FP


Tras unas semanas fascinado por la inmediatez de Twitter a la hora de publicar pequeñas píldoras de información de consumo rápido y sin receta, vuelvo al formato blog, que es el lugar en el que me siento más cómodo y que me permite explicarme de un modo más pausado y reflexivo. Claro que eso conlleva el riesgo de convertir algo que a priori puede tener cierto interés en un rollo infumable. Intentaré aplicar aquí algunas de las cositas que he aprendido en los hilos de Twitter para evitarlo.

Son días de cierre de año en los centros educativos, de hacer balance de lo conseguido y de lo que no, de proponer mejoras, pequeñas o grandes, que nos mantengan en la senda de mejora continua de la que no conviene salirse. En este artículo hablaremos de una de estas (muy) pequeñas mejoras.

La Consellería de Educación de la Comunidad Valenciana emite todos los años una resolución en la que se dictan instrucciones sobre ordenación académica en centros, públicos o privados, que imparten enseñanzas de formación profesional. La correspondiente al curso 2018/2019 es esta. Esta resolución se viene publicando con periodicidad implacable y mínimos cambios año tras año. En el apartado 17 de su anexo (Acceso a la convocatoria extraordinaria), dice siempre algo parecido a esto:


Nada inusual. Estoy seguro de que la normativa específica del resto de comunidades autónomas recoge algo parecido, tanto en el contexto de la FP, que es lo que conozco de cerca, como en el de otros niveles educativos. Y también lo estoy de que todos los docentes lo hacemos diligentemente, utilizando diversas herramientas y mecanismos de comunicación, desde el correo electrónico hasta las funciones de mensajería privadas de las diversas plataformas educativas tales como Google Classroom, Moodle, Sakai, Microsoft Teams, etc. Hay para todos los gustos.

En formación profesional y en el ámbito de la Comunidad Valenciana, la convocatoria final extraordinaria se desarrolla en el mes de junio. En el caso de primer curso pocos días después de la final ordinaria. Poco tiempo para preparar / recuperar nada, evidentemente. En el caso de segundo, meses después puesto que la evaluación ordinaria se realiza en marzo. Tiene por tanto especialmente sentido la preparación de un plan específico de recuperación en el caso de alumnos de 2º curso, tal y como yo lo veo.

Para tratar de facilitar la tarea, he preparado una plantilla de plan individualizado de recuperación de clases para FP utilizando hojas de cálculo de Google (que después del yogur griego con trocitos de stracciatella es lo que más me gusta en la vida, o bueno, casi) y, cómo no, Google Apps Script (GAS) para facilitar su distribución. Lógicamente esta plantilla puede adaptarse según las necesidades de cada cual.

Hay dos formas de digerir este artículo:
  1. Abrir el enlace con la plantilla. Y ya.
  2. Seguir leyendo desde aquí para ver cómo está construida y, de paso, aprender un poco sobre Google Apps Script.
Escoge la que prefieras.

1. Para los impacientes: la plantilla

Aquí la tienes:

https://docs.google.com/spreadsheets/d/1ttaUPGL8O5Z_rIN5FdEXMOOO5sx1k672U9UZnzvAfac/template/preview

2. Cómo funciona la plantilla

Esta es la parte larga.

En el encabezado hay que indicar el nombre y dirección de correo electrónico del alumno así como el módulo objeto del plan de recuperación. También hay espacios destinados a identificar la especialidad, el curso y su modalidad, el periodo de recuperación (se utilizan las funciones de validación de datos para que emerjan desplegables cuando corresponda) y una casilla de verificación para registrar que el plan ha sido enviado ya al alumno. Esta puede marcarse manualmente, aunque la propia hoja de cálculo lo hará ella solita cuando utilicemos la función de envío automático. Ah, y por aquello de cuidar un poquito la imagen corporativa también he dejado un huequecito para el logo del centro, departamento, etc.


En esta sección no conviene cambiar las celdas de lugar porque el código que automatiza el envío del correo electrónico accede a su contenido a piñón fijo y espera encontrarlas donde están. Bueno, a todas excepto Ciclo FormativoCurso y Modalidad, que no se usan para nada.

Más abajo hay 3 secciones destinadas a recoger los contenidos, tareas / trabajos y otras indicaciones. Aquí puedes tocar libremente sin temor a que se rompa nada en el código.


En la sección de tareas y trabajos recomiendo utilizar identificadores que permitan trazar la actividad hacia las propias tareas colgadas en la plataforma educativa que emplees. Yo utilizo la misma codificación que en mis clases en Classroom (ej. U10-A01) y enlazo además directamente con la tarea correspondiente.


Por último, en la parte inferior del documento disponemos de una sección final en la que especificar el nombre del profesor responsable y la fecha de revisión del plan de recuperación. A la derecha de ellos veremos un botón (Insertar Dibujo, Asignar secuencia de comandos) para invocar un script incluido en la plantilla que genera una copia en PDF de la hoja de cálculo y la envía como adjunto por correo electrónico a la dirección indicada en la primera sección del documento.

La primera vez que ejecutes el script aparecerá un festival de avisos de seguridad... que si autorización necesaria, que si no es seguro, etc.. Si quieres utilizar esta función tendrás que aceptarlos.


Los permisos requeridos son estos:


El primero, que puede resultar alarmante, es necesario para poder generar el PDF a partir de la hoja de cálculo. Puedes revisar el código (Herramientas → Editor de secuencias de comandos) para quedarte tranquilo.

Los correos electrónicos enviados desde esta plantilla aparecerán en Enviados en tu Gmail. De este modo dispondrás en todo momento de un acuse de recibo del envío.

3. Echémosle un vistazo al código

La programación con GAS sobre hojas de cálculo se ha tratado ya en varios artículos previos en este blog. En particular te recomiendo que revises este, puesto que en él se explican con cierto detalle la mayor parte de técnicas utilizadas en la plantilla que nos ocupa. Capó arriba.


En las líneas 4 - 5 se obtienen las instancias de los objetos que identifican la hoja de cálculo actual (método .getActive) y la interfaz de usuario (método .getUi), necesarias para poder acceder al contenido de las celdas de la hoja y desplegar cuadros de diálogo. En las siguientes (8 - 14) se leen determinados valores presententes en algunas celdas de la primera sección de la plantilla (métodos .getRange y .getValues) y se comienza a conformar el correo electrónico que se enviará posteriormente. Si editas esta sección tendrás que cambiar consecuentemente los rangos utilizados por .getRange.


En 16 - 20 se termina de construir el texto del correo electrónico autoconcatenando (menudo palabro, seguro que no existe) cadenas de texto (operador +). La secuencia '\n' se utiliza para introducir un salto de línea.  A tu gusto.


A continuación (22 - 25) se verifica que se haya escrito algo en la celda que debe contener el email. La comprobación no es estricta, pero menos da una piedra. Si la celda está vacía se le requiere al usuario esta información (método .prompt) y se guarda la cadena de texto introducida en la celda correspondiente (.setvalue).



Seguidamente se muestra en pantalla una vista previa del contenido del mensaje a enviar al alumno y se le pregunta al usuario si realmente desea seguir adelante (líneas 28 - 30). En esta ocasión se recurre al método .alert de la interfaz de usuario, que abre un cuadro de diálogo con sendos botones Sí / No.



Si la cosa va en serio el script marca la casilla Comunicado en la primera sección de la hoja de cálculo en la línea 34 (cierto, no deberíamos hacerlo hasta tener prueba fehaciente del envío del correo electrónico). El método .flush del objeto SpreadsheetApp confirma los cambios realizados sobre la celda de modo inmediato. De lo contrario es más que probable que el PDF enviado no tuviera dicha casilla con su marca de verificación dado que los cambios efectuados desde código sobre la hoja no se sincronizan totalmente en tiempo real.

Ahora se genera al vuelo una copia temporal en PDF de la hoja de cálculo actual (línea 40), con todas sus pestañas. Esto resulta de gran utilidad cuando se quiere incluir en el plan de recuperación más información de la que humanamente cabe en la primera hoja de datos, que constituye la plantilla en sí. Para realizar la conversión a PDF se utiliza la clase DriveApp, que dota a los scripts que la usan de la capacidad de manipular objetos almacenados en Google Drive. Mediante los métodos .getFileById y .getId se localiza en Drive el objeto que representa la hoja de cálculo actual, y por medio del método .getAs se genera finalmente una versión en PDF de la misma sobre la variable pdf.

En la línea 41 se construye el objeto que contiene el PDF adjunto y, para terminar, en la línea 44 se realiza el envío del correo electrónico gracias al método .sendEmail de la clase MailApp.

Nada más, para cualquier cosa tienes la caja de comentarios aquí abajo.

PS: Creo que no estoy aprendiendo nada en Twitter ;-).

Comentarios

  1. Me inspira y recuerda a una idea que estuve pensando sobre lo ineficaz que resulta la realización de estos planes de trabajo, pero en la linea de poder tener una tabla con todas las tareas y pruebas posibles, que generalmente son las realizadas durante el curso, de forma que pudiera marcar en es tabla con un check lo que cada alumno tiene pendiente y posteriormente generar las fichas individuales de forma masiva para todos los añumnos suspendidos. En nuestro centro, en ESO con 5 grupos por curso hacerlo uno por uno es pesado y lo peor, se cometen errores al asignar tareas que puede que tenga recuperadas. Pensaré sobre ello.

    ResponderEliminar
  2. Pues sí, muchas veces los planes sirven para lo que sirven. El caso es que la normativa obliga a prepararlos y, aunque no diga de modo explícito cómo, la cuestión es que hay que documentarlos de alguna manera para guardarse las espaldas, por ejemplo, ante una inspección o posible reclamación de algún alumno. ¿Burocracia vs. eficacia?

    ResponderEliminar
  3. Hola Pablo, he estado probando la plantilla, no llego a entender los scripts, pero contigo a mano no lo necesito ;). Te quería consultar sobre las casillas que dices que no se deben tunear y las que sí se podrían. Te aviso cuando me ponga con ello (los informes los preparamos más adelante). Que sepas que para los beginners es una plantilla muy útil!!!

    ResponderEliminar
    Respuestas
    1. Gracias, Pablo, me alegro de que la encuentres útil. Efectivamente, varias de las celdas del encabezado no deben cambiar de lugar (un error típico es insertar filas o columnas previas o intercaladas) puesto que el código busca determinados datos en celdas específicas para construir el correo electrónico de notificación y marcar el informe como enviado, en su caso. Lógicamente, si se modifica el código para que "apunte" a las celdas correctas no habría problema. Si tienes dificultades con esto cuando te enfrentes a ello ya sabes dónde encontrarme.

      Eliminar
    2. Buenas, muy buenas, mis compañeros me instan a que personalice a nuestro centro tu plantilla de informe personalizado. Hasta ahora me apañaba con Autocrat para cosas así pero el tuyo mola mucho más. ¿Qué tengo que aprender para poder modificar casillas y no morir en el intento? (como comentábamos más arriba). La modificación no es demasiado compleja, terminología ESO y poco más.

      Eliminar
    3. Hola, Pablo. Disculpa que no te haya podido contestar antes. Si no te importa lo hago tranquilamente este fin de semana.

      Eliminar
    4. Hola de nuevo, Pablo. Algunas cosillas a tener en cuenta a la hora de modificar la plantilla:

      - Las líneas 8 - 12 recogen valores de determinadas celdas situadas en la parte superior de la plantilla (B8 > nombre del ciclo, C10 > nombre del alumno...). Esos valores se utilizarán posteriormente para construir y enviar un correo electrónico al alumno destinatario con la información pertinente. Si modificas las celdas en B8:G11 asegúrate de introducir los cambios necesarios en dichas líneas para recoger la información que necesites de las celdas correctas. Puedes utilizar expresiones como hoja.getRange("B8") en lugar de hoja.getRange("B8:B8"), es decir, los rangos compuestos únicamente de 1 celda pueden indicarse como referencia individual.

      - El cuerpo (texto) del mensaje se construye en las líneas 17 - 20. Simplemente se van concatenando cadenas de texto (operador "+") con las variables creadas en 8-14.

      - En la línea 34 se escribe sobre la celda G8 (gracias a la validación se muestra como una casilla de verificación) para marcarla como realizada cuando se envía el plan de recuperación. Si como consecuencia de los cambios que introduces en la plantilla esta casilla de verificación acaba en otro lugar tendrás que modificar la instrucción de modo acorde, sustituyendo G8:G8 por la posición correspondiente en la hoja.

      Todo esto está bastante desmenuzado en el apartado 3 del artículo, si no lo has hecho aún dale una leída.

      Ya me cuentas.

      Eliminar
  4. Eureka! ya he modificado el cuerpo del mensaje (sin delito) para enviar al alumno desde el editor de scripts, y no he roto nada. Ahora bien, ¿dónde están los datos para los deplegables? es decir, ¿hay más celdas o más hojas y yo no las veo? ¿se pueden ver? Gracias por todo!

    ResponderEliminar
    Respuestas
    1. Estupendo, Pablo. Los elementos en los desplegables aparecen ahí porque se han introducido directamente como listas de elementos a través de la función de validación de celdas.

      Échale un vistazo a esto: https://support.google.com/docs/answer/186103

      Eliminar

Publicar un comentario