INDICE 1. Introducción...................................................................................................................3 1.1. Finalidad del proyecto............................................................................................3 1.2. Objetivos................................................................................................................4 1.3. Metodología............................................................................................................5 1.4. Estado del arte........................................................................................................7 1.5. Organización de la memoria...................................................................................9 2. Planificación.................................................................................................................10 2.1. Fases de la planificación.......................................................................................10 2.2. Tecnologías utilizadas..........................................................................................12 2.3. Equipo de desarrollo.............................................................................................14 3. Análisis de requisitos....................................................................................................16 3.1. Planteamiento del problema..................................................................................16 3.2. Modelo de dominio...............................................................................................18 3.3. Requisitos del sistema...........................................................................................19 3.4. Casos de uso.........................................................................................................22 4. Diseño..........................................................................................................................32 4.1. Patrón MVC.........................................................................................................32 4.2. Diagrama de clases...............................................................................................35 4.3. Detalles de clases..................................................................................................36 4.4. Diagramas de secuencia........................................................................................43 4.5. Diseño de la base de datos....................................................................................48 5. Implantación y pruebas del sistema..............................................................................50 5.1. Pruebas del módulo Usuarios................................................................................51 5.2. Pruebas del módulo Grupos..................................................................................52 5.3. Pruebas del módulo Recursos...............................................................................53 5.4. Pruebas del módulo Planificaciones......................................................................54 5.5. Pruebas del módulo Actividades...........................................................................55 5.6. Pruebas de resolución de conflictos......................................................................56 6. Estudio económico.......................................................................................................57 6.1. Coste de desarrollo...............................................................................................57 6.2. Costes operacionales.............................................................................................58 6.3. Costes totales........................................................................................................59 7. Conclusiones................................................................................................................60 8. Bibliografía..................................................................................................................61 Anexo A - Manual de instalación.....................................................................................63 A.1. Instalar Ruby........................................................................................................63 A.2. Instalar ruby on rails con Rubygems....................................................................63 A.3. Instalación de MySQL.........................................................................................64 A.4. Creación de la base de datos y las tablas.............................................................65 A.5. Instalar la aplicación............................................................................................66 A.6. Iniciar el servidor.................................................................................................66 Anexo B - Manual de usuario...........................................................................................67 B.1. Control de acceso.................................................................................................67 B.2. Gestión de grupos................................................................................................71 1 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI B.3. Gestión de recursos..............................................................................................76 B.4. Gestión de planificaciones...................................................................................82 B.5. Gestión de actividades.........................................................................................88 Anexo C – Rails y sus características mas relevantes.......................................................91 C.1. Empezando con Rails...........................................................................................91 C.2. Dando vida al modelo..........................................................................................92 C.3. El andamiaje........................................................................................................94 C.4. Validaciones.........................................................................................................94 C.5. Helpers.................................................................................................................95 C.6. Los rhtml..............................................................................................................95 C.7. ActiveRecord::Base.............................................................................................96 C.8. Relaciones entre clases.........................................................................................97 C.9. Layouts................................................................................................................98 C.10. Templates...........................................................................................................98 2 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1. Introducción 1.1. Finalidad del proyecto En el mercado actual hay un vacío en el terreno de la organización de tiempo orientada al manejo de recursos. Resulta difícil encontrar programas destinados a tal propósito y, normalmente, abarcan el problema desde un punto de vista parcial. También existe el problema de que la mayoría no son multiplataforma. Así pues, no son fáciles de encontrar, no son completos y no suelen ofrecer una flexibilidad satisfactoria. Por otra parte, la evolución del mundo web hacia el modelo 2.0 ha propiciado tener aplicaciones accesibles desde el navegador. Estas aplicaciones suelen ser sencillas de usar, y no requieren que el cliente disponga de ningún software para su funcionamiento salvo un navegador web, disponible en la mayoría de ordenadores actualmente. Este florecimiento de la web 2.0 ha ido acompañado de la aparición de multitud de frameworks de desarrollo web en distintos lenguajes de programación. Por estos motivos, la finalidad de este proyecto es hacer una aproximación a la gestión de tiempo para llenar el vacío existente respecto a estos programas, y usar a su vez uno de los frameworks emergentes para desarrollar una aplicación web cercana a la visión web 2.0 (recordemos que los principales objetivos de la web 2.0 son la colaboración y el intercambio ágil de información entre los usuarios), accesible a todos, en la que, aparte de gestionar el tiempo, se puedan gestionar recursos sin coste adicional para el usuario, ya que los conflictos serán resueltos por la propia aplicación, de acuerdo con unas indicaciones dadas por el mismo usuario. 3 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1.2. Objetivos Los objetivos perseguidos con la realización de este proyecto son : 1. Adquirir conocimientos útiles sobre Ruby y Ruby on Rails. 2. Construir una aplicación web con dichas tecnologías. 3. Abordar la problemática de la organización de tareas con un proyecto completo en todas sus fases. 4. Desarrollar algoritmos para los conflictos que surgen a la hora de compartir recursos. 5. Hacer la aplicación accesible para cualquier tipo de usuarios. 6. Utilizar los conocimientos adquiridos a lo largo de la carrera, para su posterior integración con el fin de realizar el proyecto final completo; adquiriendo finalmente una visión global y persistente de dichos conocimientos. 4 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1.3. Metodología La metodología seleccionada en el desarrollo del proyecto “Herramienta para la organización de tareas con resolución automática de conflictos” se basa en el diseño en cascada, con una serie de fases de las cuales se obtiene un producto final para pasar a la siguiente. Se ha escogido esta metodología porque resulta válida para un proyecto de este tamaño, que va a ser llevado a cabo en su totalidad por una sola persona. Además se da la circunstancia de que esta persona conoce completamente los requisitos, ya que es quien ha sugerido el proyecto, lo que elimina el riesgo de cometer errores conceptuales al principio del desarrollo. Las fases a seguir para obtener estos documentos son las siguientes : ● Análisis de requisitos: En esta fase se analizan las necesidades del usuario del sistema final para estudiar el alcance del sistema y los objetivos. En esta fase ha de ser minuciosa y muy bien pensada, porque en ella se han de basar las siguientes, con lo que introducir nuevos requisitos no será posible una vez terminada. ● Diseño del sistema: Se añade el componente computacional al sistema, preparando los modelos de datos, lo que debe hacer cada componente y su relación con los demás. ● Programación: En esta fase se procede a construir el software con el lenguaje elegido, obteniendo el código fuente y el sistema a falta de pruebas. ● Pruebas: Se construirán una serie de pruebas para comprobar el correcto funcionamiento de todos los módulos de la aplicación, y la correcta cohesión de los mismos. Tras pasar las pruebas se corregirán errores y se volverán a pasar tantas veces como sea necesario. ● Implantación: Se procede a implantar el sistema en un ámbito de producción, para que el cliente utilice su versión final. Tras esta fase pueden surgir cambios ,lo que se recogerá en un documento aparte. 5 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI La herramienta de modelado mas conveniente para este tipo de metodología es UML que, con sus distintos tipos de diagramas, explica bien lo que se pretende conseguir. 6 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1.4. Estado del arte Las aplicaciones de organización de tiempo más comunes en los sistemas operativos son las del tipo calendario, que permiten anotar eventos, pero no cubren la casuística de los recursos y su gestión dentro de los eventos. Las aplicaciones que más frecuentemente utilizan los usuarios son: ● En Windows tenemos el calendario del gestor de correo Outlook. ● En Mac OS X encontramos iCal, con un interfaz gráfico muy cuidado. ● Y en cuanto a aplicaciones online,la más utilizada y conocida es Google calendar, que combina una gran facilidad de uso con un aspecto gráfico espectacular para tratarse una aplicación web, gracias a la tecnología AJAX. La aplicación que más se parece a lo que se desea realizar en este proyecto es “FET – Free timetabling software”, que es un software de generación automática de horarios para instituciones académicas. Escrito en C++, FET es sofware libre y está localizado en varios idiomas. 7 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Este programa ofrece la posibilidad de definir unos recursos catalogados a priori en varios tipos (alumnos, profesores, aulas) y definir restricciones para generar los horarios. Su algoritmo heurístico pretende simular un planificador humano, con una base de conocimientos y un conjunto de reglas. El paradigma es cercano al de los sistemas expertos. Las desventajas de este software son que se centra en el caso concreto de un entorno educativo en vez de ser genérico, y que requiere instalación en el cliente. 8 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1.5. Organización de la memoria Esta memoria está estructurada comenzando con este capítulo introductorio en el que se proporciona una visión general sobre el proyecto y sus objetivos. A continuación habrá un capítulo sobre la planificación, en la que se detallan el tiempo que se va a dedicar a cada fase del proyecto, los recursos software y hardware que se van a utilizar y la justificación para cada uno de estos recursos. Seguidamente la memoria se centrará en el desarrollo del proyecto, comenzando con un análisis de requisitos por parte del futuro usuario, una abstracción de los conceptos más importantes y las futuras acciones que el usuario querrá llevar a cabo, incluyendo cómo resolverlas. Una vez identificadas estas necesidades y la forma de resolverlas, se procederá al diseño del sistema, empezando por explicar los patrones de diseño que se van a utilizar, las clases, las relaciones entre ellas y finalmente el diseño de la base de datos, necesaria para esta aplicación. Tras el diseño e implementación usando las tecnologías elegidas, llegará el momento de documentar las pruebas que se han realizado para garantizar la seguridad, consistencia y fiabilidad del sistema. A continuación se podrá leer el manual de instalación, en el que se explica todo lo necesario para tener la aplicación en funcionamiento y el manual de usuario, en el que el usuario podrá consultar como efectuar todas las operaciones que este sistema ofrece. Finalmente se ofrece un anexo comentando las características mas relevantes de Rails, ya que se considera que es un valor añadido para este proyecto. 9 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 2. Planificación 2.1. Fases de la planificación 1 - Redacción de la introducción del proyecto Planificación del modo de abordar el problema Alcance del proyecto Tiempo estimado: 2 semanas 2 - Formación sobre las tecnologías que se van a usar (ruby, Ruby on rails, mysql, investigacion sobre algoritmos de organización) Tiempo estimado: 3 semanas 3 - Definición de requisitos inicial (incluido el interfaz de comunicación para la descripción de tareas y restricciones) Diseño de la arquitectura Planificación Tiempo estimado:2 semanas 4 - Diseño y elaboración de la parte de gestión del proyecto (Definir recursos, actividades...) Tiempo estimado: 4 semanas 5 - Diseño y elaboración de los algoritmos de organización de tareas y resolución de conflictos Tiempo estimado: 4 semanas 6 – Implantación del sistema Pruebas intensivas sobre el resultado Tiempo estimado: 2 semanas 7 - Revisión final de resultados Redacción del resto de la memoria Tiempo estimado: 2 semanas 10 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama de gannt de la planificación 11 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 2.2. Tecnologías utilizadas Ruby 1.8 Ruby es un lenguaje de programación creado en 1993 por el programador japonés Yukihiro Matsumoto (alias Matz). Este lenguaje esta orientado a objetos y comparte muchas similitudes en su sintaxis con lenguajes como Perl o Python, o una orientación a objetos similar a Smalltalk. Las características más importantes de Ruby son: Orientación a objetos al cien por cien. Es dinámico y reflexivo. Es sencillo. Permite alto nivel de abstracción. pero en este proyecto, aparte de las dichas, se ha elegido este lenguaje debido a la existencia de Rails, que acelera el ritmo de desarrollo de aplicaciones Web, permitiendo dedicar la mayor parte de recursos temporales al diseño de algoritmos eficientes que permitan afrontar el problema de la organización temporal. Rails 1.2 Ruby on Rails es un framework de programación web basado en el lenguaje Ruby y creado por David Heinemeier Hansson . Rails es de código abierto y sigue el paradigma MVC (Modelo Vista Controlador). Su principal objetivo es poder construir aplicaciones evitando redundancias en el código y en las definiciones (algo conocido como DRY, Don’t repeat yourself) , y establecer una convención que haga que los componentes estén relacionados entre si (protocolo de pila completa) y definidos de tal forma que no haga falta una configuración previa para saber que un controlador es un controlador y no cualquier otra cosa. Rails es compatible con muchos sistemas de bases de datos, incluyendo MySQL, que es el que se va a usar en este proyecto. Para más información sobre Ruby on Rails, consultar el anexo al final de la 12 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI documentación sobre características mas relevantes del framework. La elección de Rails esta motivada por su rapidez a la hora de obtener resultados en un desarrollo web y por ello, al ahorrar tiempo de desarrollo, el tiempo de aprendizaje es perfectamente asumible. De esta manera se logrará un desarrollo con el valor añadido de haber aprendido una tecnología nueva. MySQL 5.0.22 MySQL es un gestor de bases de datos relacionales cuyo código es, en su mayor parte, propiedad de la empresa MySQL AB. MySQL es multihilo, multiusuario y multiplataforma. Dado su carácter gratuito para aplicaciones no comerciales, se suele ver como la mejor opción para aplicaciones que utilizan la base de datos como apoyo, entre ellas las aplicaciones web. Por todas estas características, y dado que Rails lo soporta completamente, se ha elegido este gestor para la aplicación. 13 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 2.3. Equipo de desarrollo Recursos físicos El equipo en el que desarrolla el proyecto tiene las siguientes características : Nombre del modelo: MacBook Pro 15" Identificador del modelo: MacBookPro 2,2 Nombre del procesador: Intel Core 2 Duo Velocidad del procesador: 2.16 GHz Número de procesadores: 1 Número total de núcleos: 2 Caché de nivel 2 (por procesador): 4 MB Memoria: 1 GB Velocidad del bus: 667 MHz Disco duro SATA 120 GB Disco duro externo 500 GB para backup Unidad lectora SuperDrive Recursos lógicos Al tratarse de un proyecto educativo es necesario que todos los programas nuevos que se utilicen sean de coste gratuito. Ya sea mediante licencias libres o posibilidad de prueba durante los días necesarios para realizar la tarea necesaria. Los programas utilizados para el desarrollo y documentación son: ● Eclipse: Herramienta para el desarrollo de proyectos Java, con la extensión Ruby Development Tools (RDT) se puede visualizar código Ruby correctamente y crear proyectos Rails. Es un programa opensource que se puede descargar de www.eclipse.org ● CocoaMySQL: Aplicación para visualizar bases de datos y gestionarlas sin tener que hacer uso de comandos. Hecho expresamente para bases de datos del gestor MySQL. Es freeware y se descarga desde http://cocoamysql.sourceforge.net/ 14 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI ● OpenOffice.org 2.2 Writer: Procesador de texto gratuito que viene incluido en la suite ofimática OpenOffice.org 2.2. Se puede descargar una versión para cualquier sistema operativo desde http://es.openoffice.org/ ● Para la captura y edición de imágenes simplemente se usan las herramientas de captura de pantalla de Mac OS X, disponibles con cualquier distribución de este sistema operativo. Recursos humanos Analista, programador y equipo de pruebas: Ignacio de Miguel Matiacci 15 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 3. Análisis de requisitos 3.1. Planteamiento del problema El reto de este proyecto consiste en afrontar el problema de la organización de tareas desde un punto de vista ingenieril; es decir, encontrar una posible planificación para un conjunto de tareas en un espacio de tiempo, de forma que se cumpla un conjunto dado de restricciones, utilizando una metodología precisa que asegure la calidad del producto final. Para poder comprender completamente este objetivo es necesario definir los siguientes términos: Tarea: trabajo de cualquier naturaleza que ha de hacerse en un tiempo limitado. Planificación: disposición temporal de las tareas. Restricción: es una característica que afecta a una o varias tareas y que debe tenerse en cuenta al generar las planificaciones candidatas. Recurso: efecto humano, material o lógico involucrado en la consecución de una tarea. Conflicto: se produce cuando dos o más restricciones son incompatibles entre sí dentro del dominio construido por la terna (tarea, restricción, recurso). La importancia de la organización de tareas reside en que es una actividad que todas las personas deben realizar tanto en el plano personal como en el profesional. Normalmente, en la vida cotidiana, esta actividad se realiza sin demasiada complicación pero en el seno de las organizaciones se complica de forma proporcional al tamaño de las mismas. Desde el punto de vista informático, este problema es conceptualmente sencillo, pero debido al espacio de dominio tan amplio que abarca tiene un coste computacional muy elevado, por lo que no sorprende la falta de programas tanto libres como comerciales que afronten esta tarea. En este proyecto se trata de elaborar 16 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI algoritmos muy rápidos que puedan enfrentarse a este problema y ser utilizados en un entorno Web. Para afrontar el problema de forma adecuada es necesario aclarar una serie de restricciones que tienen que ver con el alcance del mismo. Por ejemplo, necesitaremos acotar tipos de planificaciones, tipos de recursos, permisos para según que usuario, etc. Cada planificación en principio debería tener 3 posibles alcances: ● Organización : Afecta a todos los usuarios del sistema. ● Grupal : Afecta a todos los usuarios definidos en un grupo. ● Personal : Es una planificación que afecta a un solo usuario. En cada planificación se usarán una serie de recursos, teniendo estos varios tipos. Dichos tipos podrán ser definidos por el usuario que tenga permisos para ello. Para cada tipo de recursos a su vez se le asigna una categoría. En principio estas categorías son fijas : ● Recursos humanos : Personal, gente externa … ● Recursos Materiales : Hardware, maquinaria … ● Recursos de ubicación : Salas de reunión, aulas, quirófanos … Cada planificación tiene a su vez definidos dos umbrales temporales que marcan su comienzo y su fin. Dentro de estos 2 puntos, se desarrollarán las tareas pertenecientes a esta tarea, con sus propios principio y fin. Cada actividad de la planificación tendrá uno o varios recursos asociados y afectará a uno o mas usuarios. Una actividad podrá ser un hito temporal, o repetirse de forma cíclica a lo largo del tiempo que dure la planificación, siendo esto ideal para definir horarios. 17 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 3.2. Modelo de dominio Una vez planteado el problema, hay que ver los conceptos importantes y las relaciones entre ellos. La abstracción más correcta para el problema que se ha de resolver es la siguiente : 18 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 3.3. Requisitos del sistema Requisitos – Organización de tiempo Descripción Permitir el acceso al sistema de forma segura Solución Cada usuario tendrá asignados un código de usuario y una contraseña, preferiblemente cifrada en base de datos para aumentar la seguridad y evitar que se pueda rastrear al tratarse de una aplicación online. Requisitos – Organización de tiempo Descripción Establecer un sistema de permisos para que cada usuario tenga acceso solo a las funciones que se deseen según su posición en el ámbito de la organización donde esta implantado el sistema. Las acciones de cada usuario son: ● Administrador: Puede crear y borrar usuarios, crear y borrar grupos, y dar de alta y baja usuarios en dichos grupos. El administrador no tiene acceso a la parte de planificaciones. ● Gestor: No puede operar sobre grupos ni usuarios. Puede crear recursos y tipos de recursos, así como borrarlos y modificarlos. También puede crear todo tipo de planificaciones. ● Planificador grupal: Puede hacer todo lo anterior menos gestión de recursos y tipos de recurso. ● Planificador personal: Como el planificador grupal, pero en este caso solo puede insertar planificaciones personales. Solución Cada usuario tendrá registrado un nivel de permisos y las páginas tendrán elementos que se mostrarán o no dependiendo de dicho nivel. Requisitos – Organización de tiempo Descripción Poder definir los recursos del sistema y agruparlos en tipos de recurso. Solución Cada recurso tiene un indicador del tipo de recurso al que pertenece, y tanto recursos como tipos de recursos se crean desde un formulario web sencillo (si el usuario tiene los permisos suficientes) 19 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Requisitos – Organización de tiempo Descripción Poder definir los tipos recursos del sistema. Solución Cada tipo de recurso pertenece a una categoría (Recursos físicos, humanos o de lugar) y un nombre, el usuario podrá crearlos desde un formulario web sencillo(si el usuario tiene los permisos suficientes) y a partir de ese momento estarán disponibles a la hora de crear recursos. 20 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Requisitos – Organización de tiempo Descripción Las planificaciones pueden pertenecer a varios usuarios agrupados. Solución Mediante una interfaz en forma de tabla se podrá añadir usuarios a un grupo mostrando los no pertenecientes y los que si pertenecen, junto con enlaces preparados para hacer estas dos operaciones. Requisitos – Organización de tiempo Descripción El usuario debe saber que planificaciones tiene asignadas y de cuales es dueño de una forma sencilla y ordenada. Solución La pantalla inicial mostrará al usuario las planificaciones que le afectan dentro de una tabla, sabiendo si es dueño de ellas. Otra pantalla mostrará los eventos más próximos en el tiempo a modo de resumen. Requisitos – Organización de tiempo Descripción El usuario debe ser capaz de crear una planificación cíclica semanal, y el sistema de poder cambiar la fecha de una actividad en concreto de dicho ciclo. Solución Al poder marcar las planificaciones como cíclicas en su creación, cada actividad que se cree dentro de dichas planificaciones replicará su horario en el proceso de creación desde las fechas de inicio y fin de a primera vez que sucede (dato que hay que introducir al crearla) a la fecha final de la planificación. Si hay alguna fecha del ciclo que sea menos prioritaria que otra actividad que se quiera insertar, esta cambiará a favor de la otra y el usuario será avisado del cambio. Requisitos – Organización de tiempo Descripción Posibilidad de borrar o modificar datos creados. Solución Si el usuario tiene los permisos para ver y modificar datos, en cada tabla se adjuntara un enlace para poder borrar los datos que desee, y a ser posible un mensaje de conformación en caso de pulsado accidental. 21 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 3.4. Casos de uso Diagrama de casos de uso Para mayor comodidad y visibilidad, se separa el diagrama en 2 partes. Diagrama 1 22 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama 2 23 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Omitiremos los casos de uso de listar datos, al ser una interacción demasiado simple como para explicarla. El planificador crea un tipo de recurso Este caso de uso es muy similar a crear y modificar un grupo y un usuario. ● Actor primario: Planificador Gestor ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: - ● Escenario primario: 1. El usuario introduce los datos del nuevo tipo de recurso. (RN001) 2. El sistema valida y guarda los datos. (RN002) ● Extensiones: (De momento nada) 2-a. En los datos que se introducen falta algún campo ,el sistema avisa de ello y volvemos a 1. ● Descripción de datos: Tipo de recurso ● Nombre del tipo ● Categoría del recurso 24 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El planificador crea un recurso ● Actor primario: Planificador Gestor ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: El usuario ha seleccionado previamente ver los recursos de un tipo de recurso ● Escenario primario: 1. El usuario pulsa sobre el botón añadir. 2. El usuario introduce los datos del recurso. 3. El sistema valida los datos. ● Extensiones: 2-a. En los datos que se introducen falta algún campo, el sistema avisa de ello y volvemos a 1. ● Descripción de datos: Recurso ● Nombre ● Descripción 25 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El administrador da de alta/baja un usuario o varios en un grupo. Este caso de uso es similar a añadir/quitar recursos de una actividad ● Actor primario: Administrador ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: El usuario ha entrado en el sistema como administrador. ● Escenario primario: 1. El usuario pulsa sobre el botón agregar usuarios en la lista de grupos. 2. El sistema muestra una lista de todos los usuarios del sistema indicando si están o no en dicho grupo. 3. El usuario selecciona en la columna de altas/bajas que usuario quiere añadir/eliminar del grupo. ● Extensiones: - 26 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El planificador inicia una planificación ● Actor primario: Planificador ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: - ● Escenario primario: 1. El Usuario selecciona el alcance de la planificación (personal, grupo de usuarios o general) (RN004) e introduce los datos . 2. El sistema valida los datos y crea la planificación dentro de la organización vigente. ● Extensiones: 2-a . El sistema encuentra que las fechas de inicio y de fin son erróneas y volvemos a 1. ● Descripción de datos: Planificación ● Nombre ● Alcance ● Cíclica ● Planificada Si/No 27 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El planificador inserta una actividad ● Actor primario: Planificador ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: Una planificación ha sido abierta. ● Escenario primario: 1. El usuario introduce los datos y la prioridad de la actividad y pulsa en crear. 2. El sistema valida y guarda la actividad y su horario.(RN003) ● Extensiones: 2-a. Las fechas de la actividad caen fuera de su planificación y no se puede guardar, el sistema avisa al usuario y vuelve a 1. 28 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El planificador borra una planificación Este caso de uso es muy similar a borrar cualquier tipo de dato del sistema. ● Actor primario: Usuario ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: Una planificación ha sido abierta. ● Escenario primario: 1. El usuario pulsa en el botón de borrar de la planificación que desee (lista de planificaciones) 2. El sistema borra las actividades de la planificación,sus horarios guardados y finalmente la planificación. ● Extensiones: - ● Descripción de datos: Actividad ● Nombre ● Prioridad ● Horarios 29 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El planificador organiza una planificación ● Actor primario: Usuario ● Actores secundarios: - ● Desencadenante: Iniciado por el usuario ● Precondiciones: Una planificación ha sido abierta. ● Escenario primario: 1. El usuario pulsa en el botón de organizar 2. El sistema organiza las actividades de la planificación por su prioridad y restricciones (RN005) y avisa al usuario de cualquier cambio (RN006) ● Extensiones: 2-a. Las fechas de la actividad caen fuera de su planificación y no se puede guardar, el sistema avisa al usuario y vuelve a 1. 30 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Reglas de negocio ● RN001 : Las categorías de un tipo de recurso estás definidas a priori y son 3 (Recursos materiales, recursos humanos y ubicaciones) ● RN002 : En general para títulos y descripciones no se permitirán caracteres especiales tales como asteriscos, barras… ● RN003 : Una actividad tiene que estar comprendida dentro de los límites que le marca la planificación, no puede empezar antes ni acabar después. ● RN004 : Dependiendo de los privilegios el usuario solo podrá establecer planificaciones personales, y si dichos privilegios son superiores podrá hacerlas también de grupo o generales. ● RN005 : Dependiendo de las indicaciones del usuario al crearlas, cada actividad usará diferentes algoritmos de planificación. ● RN006 : Una actividad de mayor prioridad puede desplazar a una ya planificada. En caso de que esto ocurra, se deberá avisar al usuario/s propietario/s de la planificación la próxima vez que accedan al sistema. 31 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 4. Diseño 4.1. Patrón MVC Los componentes de este patrón son: ● Modelo: La representación especifica de la información con la cual el sistema opera. Mantiene un estado especifico el cual es mostrado por la vista y cambiado por el controlador. ● Vista: Presenta el modelo en un formato para que el usuario pueda interactuar con el. Suele ser la interfaz. ● Controlador: Responde a los eventos generados desde la vista (habitualmente) y cambia el modelo. Como se ha comentado, Rails utiliza el patrón MVC para el desarrollo de las aplicaciones web. Se procede a explicar el funcionamiento del mismo en la mayoría de los casos: 32 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Una representación algo más compleja La interacción del usuario con una aplicación que utiliza este tipo de patrón de diseño se estructura de la siguiente forma: 33 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 1. El usuario interactúa con la interfaz de usuario de alguna manera (por ejemplo, el usuario pulsa un botón, enlace) 2. El controlador recibe la acción del usuario a través de algún tipo de gestor de eventos. Esta acción proviene de los objetos de la vista definidos a tal efecto. 3. El controlador accede al modelo bien para modificarlo o bien para obtener información del mismo. Se generará un estado intermedio necesario para el siguiente paso. 4. En nuestro caso la vista obtendrá unos parámetros del controlador (el mencionado estado intermedio) y desplegará la información solicitada con scripts erb. La vista obtiene de los modelos los datos necesarios para hacer esto. En el caso de Rails la vista no tiene un acceso directo al modelo, dejando que el controlador envíe los objetos. 5. La interfaz de usuario espera nuevas interacciones, empezando otra interacción completa de este ciclo. 34 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 4.2. Diagrama de clases 35 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 4.3. Detalles de clases Se especifican aquí en profundidad los atributos, métodos y funcionalidad de cada clase, dado que en el diagrama no se podía hacer por cuestiones de espacio. Clase : ActivitiesResource Atributos : activity_id, resource_id Métodos : Accesores (Son los metodos que sirven para tomar o asignar el valor de un atributo, con el propio nombre del mismo invocado sobre una instancia de la clase) Descripción : Representa la relación entre una actividad y un recurso que esta necesita dentro de una planificación. Clase : ActivitiesTime Atributos : idactivity, initdate, enddate, id Métodos : Accesores Descripción : Representa las horas en las que una determinada actividad se va a desarrollar, siendo cada instancia un intervalo temporal en particular. Clase : Activity Atributos : id, name , planiffication_id, priority Métodos : Accesores Descripción : Representa una actividad, sabiendo también a que planificación pertenece y la prioridad de la misma. 36 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : Group Atributos : id,name Métodos : Accesores Descripción : Representa un grupo de usuarios. Clase : GroupsUser Atributos : group_id, user_id Métodos : Accesores Descripción : Representa la relación entre grupo y usuario, siendo cada instancia una correspondencia entre un determinado grupo y un determinado usuario. Clase : Planiffication Atributos : id,name,scope,init,end, idowner,flan_calc,idgroup,flag_cyclic Métodos : Accesores Descripción : Representa una planificación con su intervalo temporal, y la información adicional para saber si es cíclica, el grupo al que pertenece (si pertenece a alguno) , y el alcance de la misma. 37 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : Resource Atributos : id, name, idresource Métodos : Accesores Descripción : Representa un recurso, y una abreviatura al tipo de recurso que pertenece. Clase : ResourcesType Atributos : id, name, category Métodos : Accesores Descripción : Representa el tipo de recurso, para poder agrupar estos por categorías a la hora de buscarlos. Clase : User Atributos : id, cduser,haced_password,description,perms Métodos : Accesores Descripción : Representa los datos de un usuario, tanto personales como de acceso y navegación por el sistema 38 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : AplicationController Atributos : Métodos : redirect_to_index, authorize, paginate_collection, diasdelmes, daysoffebruary Descripción : Proporciona métodos auxiliares comunes a todos los controladores. Está pensada sobre todo para factorizar código y seguir la filosofía DRY. Clase : ActivityController Atributos : Métodos : index, new, create, dothecyclicsave, incaweek, openactivity, link_resource, ulink_resource, list Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase actividades. Efectúa las operaciones de obtener los datos de un listado , crear, enlazar o quitar un recurso de una actividad, y generar todas las horas de una actividad cíclica dentro de los límites de la planificación. 39 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : GroupsController Atributos : Métodos : index, list, show, new, create, edit, update, destroy, drop_user, drop_user2, add_user Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase grupos. Efectúa las operaciones de obtener los datos de un listado, crear, modificar, ver y borrar un grupo, y crear y borrar relaciones entre grupos y usuarios (altas y bajas de usuarios en un grupo). Clase : LoginController Atributos : Métodos : index, login, add_user, delete_user, list_users, logout Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase usuarios. Efectúa las operaciones de obtener los datos de un listado, crear (con password encriptado), modificar, ver y borrar un usuario. 40 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : PlanifficationsController Atributos : Métodos : list, purge_old, show, new, create, edit, update, destroy, organize, nopossible, coincidantact, organizeact(id, inbetween2act?, acttimes),organizeone(acttime, minororequaldates, acttinconflict), greaterorequaldates, suggestionstimeinday, suggestionsdaystatichour, randomizetime Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase planificación. Efectúa las operaciones de obtener los datos de un listado, crear , modificar, ver y borrar una planificación. A su vez también contiene todos los algoritmos principales y auxiliares para poder organizar la planificación con sus actividades y horarios, y ver si hay algún conflicto. Clase : ResourcesController Atributos : Métodos : list, finder, find, show, new ,create, edit, update, destroy Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase recursos. Efectúa las operaciones de obtener los datos de un listado, crear , modificar, ver y borrar una recursos. 41 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Clase : ResourcesTypesController Atributos : Métodos : index, list, show, new, create, edit, update, destroy. Descripción : Provee los métodos para ejecutar las peticiones que llegan desde la vista para la clase tipo de recurso. Efectúa las operaciones de obtener los datos de un listado, crear , modificar, ver y borrar un tipo de recurso. Módulo : ApplicationHelper Atributos : Métodos : transformperms(permisos),transformdate(fecha), Descripción : Los métodos declarados en este módulo estarán disponibles para todos los templates de las vistas de la aplicación. 42 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 4.4. Diagramas de secuencia A continuación se detallan los diagramas de secuencia correspondientes a los casos de uso, cuyo objetivo es mostrar los aspectos dinámicos de la aplicación. En cada uno de ellos mostraremos las interacciones, entendiéndose estas como un intercambio de mensajes entre un conjunto de objetos con un propósito específico. Cada mensaje puede representar: ● La invocación de una operación ● Envió de una señal ● Creación de un objeto ● Retorno de un valor 43 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama de secuencia – El usuario crea un recurso Escenario primario 44 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama de secuencia – El administrador da de alta un usuario en un grupo Escenario primario 45 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama de secuencia – El usuario inicia una planificación Escenario primario 46 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Diagrama de secuencia – El usuario organiza una planificación Escenario primario 47 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 4.5. Diseño de la base de datos La base de datos tiene la particularidad de la relación entre los nombres de las tablas y los nombres de los modelos de la aplicación, ya que Rails es capaz automáticamente de establecer los atributos de una clase del modelo simplemente por la pluralización de los nombres del modelo en las tablas de la base de datos. Para simplificar el diagrama y resaltar simplemente las relaciones entre tablas, omitiremos los atributos de las tablas, que son los mismos que los enumerados en la descripción de clases, apartado de este mismo capítulo. Así mismo todas las tablas tienen de clave primaria el atributo id, por eso tampoco se pone. Para aclarar las cosas, se va a explicar el diagrama : Cada usuario pertenece a todos los grupos en los que el administrador desee incluirle y asimismo no hay limite de usuarios que pueden formar un grupo. En cuanto a planificaciones, un usuario podrá abrir tantas planificaciones como quiera (del tipo que le permitan sus privilegios), y solo el podrá añadir actividades, también tantas como quieras. Así una planificación puede ser vista por varios usuarios, pero en 48 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI cuanto a pertenencia solo tiene un dueño y por eso se refleja así en el diagrama. Una actividad tiene varias ocurrencias de la forma Activities_Times, para indicar en que momentos del tiempo ocurre, y cada una de ellas pertenece exclusivamente a su actividad. Cada actividad también utiliza una serie de recursos para llevarse a cabo, tantos como sean necesarios, y como es lógico un recurso entrará en muchas actividades. Por último, cada actividad pertenece a un tipo de actividad que define el usuario, y cada tipo tendrá muchas actividades posibles. 49 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5. Implantación y pruebas del sistema En esta fase se detallarán los procesos de programación del sistema, y las pruebas realizadas a dicho trabajo de programación para efectuar correcciones sobre el sistema, corrigiendo los módulos o partes defectuosas y volviendo a pasar las pruebas. El resultado final debe ser que todas las pruebas se han cumplido sin ninguna excepción. Aunque tengamos un buen análisis y la aplicación este bien diseñada, sin unas pruebas que abarquen todas las funcionalidades y un número de casos aceptable, no habrá servido de nada. De la calidad del plan de pruebas dependerá la calidad del producto final de cara al usuario. Durante la fase de implantación se deben llevar a cabo las siguientes etapas: ● Definir estándares de programación : Antes de comenzar se definirá la estructura de directorios que tendrá el proyecto, algo sencillo en este caso, ya que rails construye siempre la misma estructura y con la convención sobre los directorios nos ahorramos prácticamente los ficheros de configuración. ● Codificación y pruebas unitarias : En esta fase desarrollaremos el código, que se entregará adjunto con la aplicación. Dicho código ha de cumplir con el diseño y las funcionalidades explicadas en apartados anteriores. ● Pruebas de módulos : Que se detallan en el siguiente apartado. 50 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.1. Pruebas del módulo Usuarios Descripción de la prueba Creación Estado Comprobar que el usuario se crea correctamente Comprobar que no pueden crearse dos grupos con el mismo nombre. Comprobar que la contraseña se crea codificada en la base de datos Comprobar que si no rellenamos los campos requeridos surgirá un mensaje de aviso y el usuario no se creará Acceso Comprobar que el usuario accede si utiliza la información correcta. Comprobar que el usuario no puede acceder con un nombre incorrecto Comprobar que el usuario no puede acceder con una contraseña incorrecto Borrado Comprobar que se dan de baja los usuarios en la base de datos al borrarlos Comprobar que desaparece la relación en base de datos a un grupo de un usuario al darlo de baja y que se visualiza el cambio en la tabla Permisos Comprobar que según los permisos dados el menú cambia para cada usuario. Al hacer salir del sistema ya no se debe poder acceder a ninguno de sus componentes. 51 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.2. Pruebas del módulo Grupos Descripción de la prueba Visualización Estado Comprobar que el listado de los grupos coincide con la base de datos y no hay ningún error en la paginación Creación Comprobar que el grupo se crea correctamente Comprobar que no pueden crearse dos grupos con el mismo nombre. Comprobar que si no rellenamos los campos requeridos surgirá un mensaje de aviso y el grupo no se creará Modificación Comprobar que el nombre del grupo cambia en la base de datos cuando se modifica en la pantalla de editar grupo. Comprobar que los usuarios se dan de baja y de alta en la tabla relacional cuando se hace desde la pantalla de la aplicación correspondiente. Permisos Comprobar que si el usuario puede crear planificaciones de grupo, solo pueda definir los grupos a los que pertenece. Borrado Comprobar que al borrar un grupo también desaparecen las relaciones con todos sus usuarios Comprobar que al borrar un grupo no deben existir planificaciones existentes del mismo o si existen debe haber un mensaje de aviso diciendo que no se puede borrar 52 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.3. Pruebas del módulo Recursos Descripción de la prueba Visualización Estado Comprobar que el listado de los recursos coincide con la base de datos y no hay ningún error en la paginación Comprobar que el listado de los tipos de recursos coincide con la base de datos y no hay ningún error en la paginación Creación Comprobar que al crear un recurso con todos los datos se graba correctamente en base de datos Comprobar que al crear un tipo de recurso con todos los datos se graba correctamente en base de datos Comprobar que aparece un mensaje de error y no deja crear un recurso si no introducimos los datos obligatorios de un recurso. Comprobar que aparece un mensaje de error y no deja crear un recurso si no introducimos los datos obligatorios de un tipo de recurso. Modificación Comprobar que los datos del recurso se modifican correctamente al cambiarlos desde la pantalla de edición. Comprobar que los datos del tipo de recurso se modifican correctamente al cambiarlos desde la pantalla de edición. Borrar Comprobar que un recurso se borra correctamente de la base de datos al borrarlo de la aplicación. Comprobar que un tipo de recurso se borra correctamente de la base de datos al borrarlo de la aplicación. Comprobar que no se puede borrar un tipo de recurso si esta enlazado a recursos existentes en la base de datos, ha de aparecer un mensaje de error avisando de la situación. 53 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.4. Pruebas del módulo Planificaciones Descripción de la prueba Visualización Estado Comprobar que un usuario solo puede ver las planificaciones que le perteneces según grupo, propiedad personal y además las generales. Creación Comprobar que un usuario solo puede crear planificaciones dentro de sus permisos(personales o también de grupo y generales) Comprobar que la planificación se crea correctamente en la base de datos al hacerlo desde la aplicación. Borrar Comprobar que al borrar una planificación no solo se borra esta, si no todas sus actividades. 54 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.5. Pruebas del módulo Actividades Descripción de la prueba Visualización Estado Comprobar que las actividades que se visualizan en la lista de una planificación son las correctas Comprobar que las actividades cíclicas en la vista de horario son correctas y están en los días de las semanas adecuados Comprobar que en la vista de próximos eventos las actividades son las correctas y se encuentran entro del plazo de los próximos siete días de la fecha actual. Creación Comprobar que los datos de la actividad y la hora se crean en las 2 tablas destinadas a tal efecto de forma correcta cuando se crean desde la aplicación. Comprobar que cuando se crea una actividad dentro de una planificación cíclica, en la tabla para los horarios se crea una entrada por semana desde la fecha de inicio hasta el fin de la planificación. Modificación Comprobar que se añaden o eliminan recursos en la tabla relacional cuando se hace desde la pantalla de añadir recursos de cada actividad. 55 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 5.6. Pruebas de resolución de conflictos Descripción de la prueba Pruebas de conflictividad Estado Comprobar que surge un conflicto cuando dos actividades comparten un recurso en un intervalo coincidente Comprobar que hay un cambio de fecha/hora en la que menos prioridad tenga, y en caso de igualdad, un cambio sobre las actividades de la planificación que se ha ordenado organizar. Comprobar que todos estos cambios se hacen efectivos en la base de datos Comprobar que la restricción de “cambiar solo el día” funciona correctamente Comprobar que la restricción de “cambiar solo la hora” funciona correctamente Comprobar que en caso de varias coincidencias sigue funcionando la prioridad de las actividades y el algoritmo recursivo subyacente, Pruebas de alertas Comprobar que surge un aviso al usuario cuando se han cambiado actividades de hora tras la organización. Y que corresponda a todas las que se han cambiado. 56 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 6. Estudio económico 6.1. Coste de desarrollo Los costes de desarrollo incluyen los costes de desarrollo y la formación al usuario sobre el funcionamiento de la aplicación entregada. Se ha estimado necesario dar un pequeño cursillo adicional de un par de días, impartido por el analista del proyecto, pero sin coste adicional, siendo una de sus responsabilidades contractuales para con el proyecto. Estimación de coste de recursos humanos Función Jefe Nº horas de 300 proyecto Analista Diseñador web Programador Programador JR Total 300 200 300 300 Coste/hora 60€ Coste 18000€ 35€ 22€ 24€ 18€ 10500€ 4400€ 7200€ 5400€ 45500€ Estimación de coste de software y hardware Se estima el hardware necesario como un ordenador personal para el desarrollo de características económicas, un servidor donde almacenar los repositorios del proyecto y las bases de datos y una unidad de alimentación auxiliar para prevenir las perdida de datos por caídas de tensión. Recurso Pc Servidor Dispositivo SAI Total Unidades 4 1 1 Coste 800€ 1500€ 200€ Total 3800€ 1500€ 200€ 5500€ Para el software, procuraremos utilizar software libre siempre que podamos, en nuestro caso la licencia de MySQL la podemos adquirir de forma gratuita, ya que simplemente sirve de apoyo al proyecto. 57 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Recurso Licencia MySQL Coste Gratuito Estimación de coste de recursos adicionales Función Material oficina Conexión ADSL Total Coste/año 1000€ 600€ 1600€ Total costes de desarrollo Concepto Coste total Recursos humanos Hardware Software Recursos adicionales Total 45500€ 5500€ 0€ 1600€/año 51000€+1600€/año 6.2. Costes operacionales Estos costes son la explotación y mantenimiento del sistema. Se necesitará un ingeniero para actualizar y solventar errores en el sistema a lo largo de su vida útil, y también se necesitará una plataforma hardware para que este funcione Recurso CPD Ingeniero Horas 24/7 de 150 horas/años mantenimiento Total Coste 20€/hora Coste/año 15000€ 3000€ 18000€ 6.3. Costes totales 58 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Los costes totales, suma de los anteriores se detallan en esta tabla. Concepto Coste total Total costes de desarrollo Total costes operacionales Total costes proyecto 51000€+1600€/año 18000€/año 51000€+19600€/año 59 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 7. Conclusiones En mi segundo proyecto de una ingeniería, y dado el tiempo invertido en el mismo, bastante superior al anterior, he comprendido el desarrollo de un proyecto y el esfuerzo que ello requiere desde un punto de vista bastante más amplio que el de un usuario por un lado, o de un simple programador por otro. El abordar todas las fases de un desarrollo y su documentación por mi cuenta me ha hecho entender lo importante de una buena planificación, y las ventajas de ser minucioso, cosas que a la larga pueden suponer un importante ahorro del recurso más preciado en este tipo de proyectos: el tiempo. El problema de la organización de tareas tiene un marco muy amplio, y se ha intentado capturar la casuística fundamental y conseguir un sistema lo más cercano posible a los objetivos iniciales, en el que la generación de ciclos de actividades, actividades individuales, grupos a los que afectan y recursos compartidos fuera algo de lo que el usuario tuviera que despreocuparse a favor de la sencillez de uso. Por otro lado, los conocimientos adquiridos a lo largo de la carrera me han servido para realizar este proyecto, y también para poder aprender unas nuevas tecnologías y así no aferrarse a simplemente lo que me han enseñado, si no tener una disposición hacia el aprendizaje buena, cosa que también he aprendido que es fundamental. Con este proyecto ha surgido la oportunidad de aunar todos o casi todos esos conocimientos para adquirir una visión global sobre la carrera y relacionar todo lo aprendido con un objetivo. El framework de desarrollo web Rails ha supuesto una pequeña revolución en la programación web, y el aprendizaje del mismo es un valor añadido a haber terminado este proyecto, y también es valor añadido el atreverse a innovar. En resumen, el haber aprendido una nueva tecnología, el haber desarrollado un proyecto desde cero y haber aprovechado las ventajas de este framework para ello han contribuido a hacer de esto una experiencia enriquecedora. 60 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 8. Bibliografía Libros [BARR01] Barranco de Areba, J. “Metodología del análisis estructurado de sistemas”, Universidad Pontifica Comillas, Madrid , España 2001 [THOM06] Thomas, D.; Fowler, C. y Hunt, A. “Programming Ruby”. Segunda edición. Pragmatic Bookshelf. 2006 [THOM06] Thomas, D.; Heinemeier Hansson, D. “Agile Web Development with Rails”. Segunda edición. Pragmatic Bookshelf. 2006 61 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Páginas web ● ● ● Información sobre Ruby ○ www.ruby-lang.org/es ○ www.wikipedia.org Información sobre Rails ○ www.rubyonrails.org.es ○ www.entren.ivanyvenian.com ○ www.conferenciarails.org ○ www.forosdelweb.com Información sobre algoritmos ○ www.mis-algoritmos.com ○ www.programadores.net 62 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Anexo A - Manual de instalación A.1. Instalar Ruby Con ello podremos hacer funcionar el servidor webrick, que trae de serie Rails. Windows Instalar la ultima versión desde http://rubyforge.org/frs/download.php/18566/ruby186-25.exe Linux y Mac OS X Dependiendo de la distribución Linux, Ruby puede venir preinstalado. Si no es así, tendremos que descargarlo desde el gestor de paquetes Synaptic ,o usando el comando apt-get install ruby irb rdoc También podemos bajar el código fuente y compilarlo (www...) a mano si carecemos de dicho gestor. En Mac OS X Ruby viene por defecto en el sistema operativo. A.2. Instalar ruby on rails con Rubygems RubyGems es el gestor de paquetes para Ruby. proporciona un formato estándar y autocontenido (llamado gem) para poder distribuir programas o librerías en Ruby, una herramienta destinada a gestionar la instalación de éstos, y un servidor para su distribución. Para poder instalar ruby on rails es necesario usar gems, ya que no suele ser 63 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI compatible con los gestores de paquete de Linux , por ejemplo (aunque la última versión de Ubuntu trae rails preinstalado). Los pasos a ejecutar para instalar Ruby on Rails serán: ● Descargar y descomprimir gems (que esta escrito en ruby). Gems esta descargable desde http://rubyforge.org/frs/?group_id=126. ● Ejecutar desde la consola (dentro del directorio de gems): ruby setup.rb Y ya tendremos gems instalado. Ejecutar desde consola : gem install rails --include-dependencies A.3. Instalación de MySQL Windows Para descargar MySQL se necesitará entrar en la página http://dev.mysql.com/downloads/ y descargar la versión especifica para Windows, un ejecutable que instalará el gestor. Linux Se puede descargar e instalar fácilmente a través del gestor de paquetes Synaptic si tenemos una distribución con esta gestión de paquetes, como bien puede ser Ubuntu, o descargar desde la página los paquetes RPM si disponemos de una distribución del tipo SuSE o Red Hat. Todo en la dirección http://dev.mysql.com/downloads/. Mac OS X 64 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Para Mac OS X tambien hay una lista de paquetes para instalar. A.4. Creación de la base de datos y las tablas Una vez instalado MySQL , la base de datos y las tablas preparadas para empezar a hacer funcionar el sistema se crearán ejecutando el script que se entregara con el sistema dentro de un medio de almacenamiento. Para ello primero tendremos que crear la base de datos. Ejecutando mysql tendremos acceso a la consola del gestor, en la que teclearemos : create database nombredelproy_production Y ya tendremos la base de datos creada. Tener en cuenta que si la base de datos esta en un servidor diferente al de la aplicación, habra que configurarlo en la aplicación.Para ello editar el fichero /config/database.yml y cambiar la linea resaltada(asi como usuario y password si procede) por la dirección del servidor. production: adapter: mysql database: pfc_production username: root password: host: localhost Para ejecutar el script de creación de tablas saldremos de la consola de MySQL, nos situaremos en el directorio donde esté y teclearemos : mysql -u usuario -p <nombredelproy_development_dump.sql Las tablas estarán creadas y el usuario admin (necesario para empezar) estará creado. A partir de ahi usando la aplicación se pueden empezar a construir los datos. A.5. Instalar la aplicación 65 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Para instalar la aplicación, simplemente hay que descomprimir el archivo que contiene la estructura de directorios de un proyecto Rails, dentro de la ruta que escojamos en el servidor. A.6. Iniciar el servidor Para iniciar el servidor en consola nos situaremos sobre la raíz de la estructura del proyecto y se arrancara ejecutando desde consola : ruby script/server webrick lo cual arrancará el servidor que se ha estado usando durante todo el desarrollo. A partir de ese momento la aplicación estará disponible en la dirección del servidor, a través del puerto 3000. 66 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Anexo B - Manual de usuario B.1. Control de acceso Login Para acceder al sistema, un administrador tendrá que haber dado de alta al usuario. La siguiente pantalla será la primera que se vea en el navegador una vez dentro de la aplicación. Para acceder, simplemente se introducirá el código de usuario que nos hayan dado y el password correspondiente, y se pulsara el botón “Acceder”. 67 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Logout Para salir del sistema y cerrar sesión, simplemente habrá que pulsar en el enlace derecho de la barra superior. 68 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Gestión de usuarios Crear Usuario Al entrar como administradores del sistema, veremos la lista de usuarios del sistema actual, desde la que podemos eliminar a cualquiera. Pulsando en el enlace llamado “Nuevo Usuario” pasaremos a la siguiente pantalla, donde daremos de alta en la base de datos un nuevo usuario. Simplemente rellenar datos, asignar permisos y pulsar en “Crear” 69 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Borrar usuario Si queremos borrar un usuario del sistema pulsaremos en el enlace de borrar que hay a la derecha y en la ventana de confirmación diremos que si. Encima de la lista aparecerá un mensaje de información. 70 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI B.2. Gestión de grupos Para poder tener acceso a la gestión de grupos, el usuario debe entrar con privilegios de administrador. Tras seleccionar en el menú superior el enlace de “Administración de grupos de usuarios” , se verá un listado de grupos existentes y las acciones disponibles para ellos. Crear grupo Para crear un grupo nuevo, se seleccionara el enlace de abajo a la izquierda llamado nuevo grupo. 71 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Tras pulsar entraremos en un formulario donde crear el grupo: Se pulsará en “Crear” y aparecerá el listado de nuevo con el nuevo grupo añadido. Borrar grupo Para borrar un grupo desde el listado se ha de presionar el enlace de borrar correspondiente a la fila del grupo que deseemos eliminar. Se aceptará la ventana de confirmación de borrado y el grupo desaparecerá del listado. Editar grupo 72 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Para cambiar el nombre de un grupo, se pulsara en la opción de editar dentro de cada enlace de la lista, seleccionando el que queramos.Pasaremos a una pantalla donde se puede cambiar el nombre, y pulsando en el botón actualizar el cambio se hará efectivo. 73 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Insertar/borrar usuarios en un grupo Para añadir usuarios a un grupo se seleccionará agregar usuario en la columna correspondiente al grupo que se desee editar. Aparecerá un listado con todos los usuarios pertenecientes o no al grupo, marcados de color verde o rojo (pertenencia / no pertenencia).Para añadirlos o eliminarlos se pulsará en el enlace a la derecha del nombre que ponga “Dar de baja” o “Agregar usuario” , se podrá comprobar tras la pulsación que la lista se actualiza y el color de fondo del nombre y el enlace a cambiado a consecuencia de la alta/baja. Pasaría a ser: 74 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 75 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI B.3. Gestión de recursos Para tener acceso a la gestión de recursos, se debe tener acceso como usuario gestor. Crear tipo de recurso Después de seleccionar el enlace “Tipos de recursos” de la barra de enlace superior, veremos una lista con paginación de las categorías de recursos que hay en el sistema. Para crear uno nuevo seleccionaremos el enlace “Nuevo tipo de recurso” que está situado encima de la lista. 76 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI En el formulario de creación introduciremos los datos del tipo de recurso, la categoría a la que pertenece y pulsaremos en “Crear” para hacer efectiva la creación. Crear recurso Después de seleccionar el enlace “Recursos” de la barra de enlace superior, veremos una lista con paginación de los recursos que hay en el sistema. Para crear uno nuevo seleccionaremos el enlace “Nuevo recurso” que está situado encima de la lista. 77 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI En el formulario de creación introduciremos los datos del recurso, el tipo de recurso al que pertenece y pulsaremos en “Crear” para hacer efectiva la creación. 78 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Modificar recurso En la tabla de recursos se pulsará sobre el enlace “Editar” para cambiar los datos de un recurso. Rellenando el formulario de forma idéntica a la creación y pulsando en “Actualizar” se modificarán los datos y se actualizarán también en la tablas. Borrar recurso En la tabla de recursos se pulsará sobre el enlace “Borrar” para cambiar los datos de un recurso. Aceptando en la ventana de confirmación se borrará el recurso. 79 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Buscar recursos En la parte superior izquierda del listado de recursos se dispone de un buscador con el que acotar la lista de recursos si así se desea. Pulsando en el enlace “Buscador de recursos ” se accederá a la pantalla del buscador, en la que podemos introducir los criterios de un nombre de recurso, que será un texto que el nombre de los recursos buscados contendrá parcial o totalmente, y también definir los tipos de recursos, o dejarlo como está para que aparezcan todos los correspondientes a ese nombre. 80 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 81 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI B.4. Gestión de planificaciones Abrir planificación En el enlace superior llamado “Mis planificaciones”, accederemos a la lista de las planificaciones del usuario actualmente registrado en el sistema. Pulsando en nueva planificación se accederá al formulario para abrir una nueva planificación. 82 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI En dicho formulario estableceremos el nombre de la planificación, el alcance (siempre dentro de nuestros permisos) y si pertenece un grupo, lo seleccionaremos en su casilla correspondiente.tras crearla,tendremos un mensaje de confirmación. Si la planificación es cíclica, se marcará como tal y todas las actividades correspondientes se repetirán semanalmente desde la fecha de inicio hasta la fecha de fin, que son las fechas en las que se van a desarrollar las actividades. Organizar planificación Para organizar una planificación se pulsará en el enlace “Organizar” que hay a la derecha de cada fila correspondiente a una planificación. 83 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Tras hacerlo el usuario recibirá los mensajes de cambios en otras actividades y el enlace cambiara a “ORGANIZADA”. Nótese que cualquier actividad que se inserte en la planificación hará que vuelva a estar pendiente de ser organizada. 84 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Visualizar horarios de planificaciones cíclicas En el enlace del menú superior llamado “Mis horarios”, tendremos un acceso a toda la lista de planificaciones cíclicas que afectan al usuario, y escogiendo una de la lista con el enlace “Ver los horarios”, tendremos acceso a la visualización por días de la semana de las actividades, con sus horarios. 85 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Visualizar próximos eventos En el enlace del menú superior llamado “Próximos eventos”, tendremos acceso a las actividades que atañen al usuario durante la próxima semana, ordenadas por orden de aparición. 86 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 87 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI B.5. Gestión de actividades Ver actividades En el enlace superior llamado “Mis planificaciones”, accederemos a la lista de las planificaciones del usuario actualmente registrado en el sistema. Pulsando en el enlace “Actividades” que hay a la derecha de cada planificación visualizaremos las actividades correspondientes a dicha planificación Insertar Actividad Al pulsar en actividades veremos las correspondientes a esa planificación y pulsando en el enlace de abajo podremos insertar una nueva actividad. 88 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Rellenando el formulario y pulsando en el botón crear veremos la actividad creada en la lista. Enlazar recursos a una actividad Para cada actividad listada en la planificación existe la opción de enlazar recursos pulsando en el enlace de “Agregar recursos”. Pulsando este enlace se accede a una lista con los recursos del sistema con colores denotando su pertenencia o no a la actividad (verde – si , rojo – no). Pulsando en los enlaces “Agregar recurso” o Quitar recurso de la derecha de cada fila reservaremos o quitaremos recursos para realizar dicha actividad. 89 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI 90 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI Anexo C – Rails y sus características mas relevantes C.1. Empezando con Rails Tras instalar Rails, lo primero que querremos hacer será crear una aplicación. Para ello, nos situaremos desde una consola en el directorio donde queramos que este contenido el directorio raíz de nuestra aplicación y escribamos : rails <nombre_proyecto> Tras esta sencilla instrucción, tendremos creada una estructura de directorios como esta. El significado de todos estos directorios esta relacionado con la primera característica relevante de Rails: La convención sobre configuración. Esta manera de hacer las cosas asume a priori donde están colocados los elementos que componen la aplicación sin necesidad de usar ficheros de configuración. Dentro del directorio app encontramos las subcarpetas Views, Models y Controllers. Todo lo que pongamos dentro de Controllers, Rails lo interpretará como un controlador y asumirá que el nombre esta compuesto de algo+controller, por 91 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI ejemplo LoginController. En la carpeta Models iran las clases que representas los objetos que maneja la aplicación, y en la de Views las vistas, que son los archivos con extensión rhtml y la codificación de lo que el usuario va a ver. C.2. Dando vida al modelo Una vez que tenemos hecho un buen diseño de la aplicación, decidimos crear el modelo. Si partimos desde una base de datos,la recomendación es crear las tablas con los nombres en plural, ya que rails los interpretará de esta forma al generar el modelo. Esto en rails es conocido como pluralización, y si nos resulta incomodo siempre se puede desactivar y relacionar el modelo con la tabla mediante una instrucción. Acto seguido, necesitamos decirle a la aplicación cómo acceder a la base de datos. Para ello editamos el fichero config/database.yml. Por ejemplo, el fichero de configuración de este proyecto: development: adapter: mysql database: pfc_development username: root password: host: localhost test: adapter: mysql database: pfc_test username: root password: host: localhost production: adapter: mysql 92 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI database: pfc_production username: root password: host: localhost Como se puede ver hay 3 bases de datos, esto es otra característica relevante de este framework: Rails proporciona entornos diferentes para la programación, pruebas e implantación, sin necesidad de hacer ningún esfuerzo ni modificación. La ventaja de esto es que se puede definir el entorno en el que se ejecuta la aplicación al levantar el servidor, teniendo en cuenta que: ● Desarrollo: el servidor se comporta de forma interpretada, compilando cada vista (fichero rhtml) cada vez que se requiere. ● Pruebas: se define un conjunto de datos inicial y, antes de ejecutar ningún caso de prueba, rails se encarga de poblar la base de datos con este conjunto. ● Producción: el servidor se comporta de forma compilada con las vistas para aumentar la velocidad, dado que la frecuencia de cambios es menor. Una vez creadas las tablas y configurado el acceso, debemos ir a app/models y para crear un modelo ejecutar en terminal : ruby script/generate model nombreModelo Rails, gracias a la pluralización, intentará relacionar el modelo con una tabla de la base de datos. El nombre de esta tabla será el nombre del modelo en plural. Así, además, no tendrá necesidad de que le declaremos los atributos de la clase, los puede intuir en base a esta tabla relacionada. Conviene tener en cuenta que los plurales en idiomas diferentes al inglés no los capta demasiado bien, con lo cual es mas conveniente tener una nomenclatura anglosajona para nuestras clases y tablas. Acto seguido creamos el controlador de este mismo modelo de esta manera: ruby script/generate controller nombreModelo 93 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI C.3. El andamiaje Otra utilidad muy interesante de Rails es la posibilidad de general con una sola instrucción todas las operaciones de creación , modificación y borrado. Esto es lo que se conoce como scaffold (andamio) . Así teniendo los pasos anteriores completados podemos hacer dentro de la clase que creamos antes: class NombredelatablaensingularController < ApplicationController scaffold : Nombredelatablaensingular end Tambien podemos elegir el hacer: ruby script/generate scaffold nombreModelo y se crearán modelo, vista y controlador asociado a la tabla, con las operaciones de listado,vista,modificación,creación y borrado. ¿Valen siempre los andamios? Obviamente en el 90% de las ocasiones acabaremos necesitando mas funcionalidades que las básicas de altas, bajas y modificaciones. Aun así, los andamios generan muchísimo código que puede ser ampliado o modificado ,y que es bastante útil (Viendo este código te puede ayudar a aprender bastante si eres principiante). C.4. Validaciones Al declarar las clases podemos usar unos sencillos métodos para generar mensajes de error en las vistas si algún campo falta o tiene un valor incorrecto, evitando así el log del servidor web en la pantalla del navegador (muy feo). Ejemplos de dichos métodos son : class Resource < ActiveRecord::Base validates_presence_of :name , :idresource validates_uniqueness_of :cduser end 94 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI C.5. Helpers Los helpers son clases con métodos auxiliares, los cuales están disponibles en las vistas correspondientes. Están situados en la carpeta app/helpers y su nombre esta compuesto por nombredelacarpetavista_helper.rb y los métodos que contienen estarán disponibles para todas las vistas dentro de una carpeta. Los helpers suelen estar orientados al formateo de texto. Vease como ejemplo el helper que sirve para enlazar páginas y que viene de serie en todos los proyectos Rails: Por la convención de rutas que se usa a la hora de invocar vistas y métodos de controladores del navegador, es fácil pensar que por ejemplo para acceder a un listado de recursos seria lo lógico hacer un hipervínculo a : http://mipagina.com/resources/list Efectivamente esto funcionará, pero si ocurre algún cambio dentro de la aplicación o en la estructura de directorios se nos desbaratarían todos los enlaces, por eso la manera correcta de hacer sería: <%= link_to 'Listado', { :action => ‘List’ } %> o bien <%= link_to 'Listado', { :controller => ‘MiController’, :action =>'List' } %> C.6. Los rhtml Las vistas tienen por defecto la extensión .rhtml , que no es mas que un fichero html con código ruby embebido. En el controlador podemos crear métodos cuyo nombre tendrá su vista con nombre rhtml asociado. Dentro de estos métodos podemos crear variables con las que en la vista podamos iterar o usar para generar codigo html. Los caracteres para escribir codigo ruby en rhtml son las etiquetas <% %> y <%= %>. La primera significa código para lógica, y la segunda convierte en html la salida que genere la ejecución de código. Unos ejemplos: <td><%= user.cduser%></td> 95 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI <td><%= user.description%></td> <% for user in @users %> … <% end %> C.7. ActiveRecord::Base Es una clase DAO (Data Access Object) de la API de Rails que hace posible la transición casi transparente entre modelo relacional y modelo orientado a objetos, proporciona la persistencia necesaria y hace que crear clases DAO para cada tipo de dato sea innecesario,ya que utiliza genericidad para que los métodos puedan ser utilizados por las clases de las que heredan. Todas las clases del modelo con tabla en la base de datos heredan de ActiveRecord::Base y por ello tienen una serie de métodos comunes para hacer operaciones contra la base de datos o un sistema de almacenamiento de otro tipo. Los que más se suelen usar son : create En un solo paso crea un objeto y devuelve el objeto instanciado. save Con el objeto dado lo crea en base de datos si no existe y lo actualiza si la clave primaria concide con uno dado. delete Destruye el objeto con la clave dada sin instanciarlo antes. destroy Destruye el objeto con la clave dada instanciandolo primero y borrandolo de la 96 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI base de datos después. También puede borrar una colección de ids. find (Metodo de clase) Busca objetos con 3 posibles aproximaciones : ● Id : Busca por clave principal o conjunto de claves ● First : Devuelve el primer objeto de unas condiciones que se especifican al final de cada método (todos los admiten) ● All : Como el anterior, pero devolviendo todos los objetos. ● En los dos últimos, se puede ofrecer la parte de sentencia SQL correspondiente al WHERE para poder hacer las querys personalizadas. ● También existe el método find_by_sql, con el que directamente se puede escribir la query completa y recibir una serie de resultados de una determinada clase. update Encuentra el objeto con el id que se pasa como parámetro, y automáticamente lo actualiza con los atributos que también se pasan como parámetro. Para mas información consultar la API online de Rails. C.8. Relaciones entre clases Hemos visto como hacer la correspondencia objeto en la aplicación y registro en la base de datos o en cualquier medio de almacenamiento sea externo o en el código, pero hasta ahora no hemos tenido en cuenta las posibles relaciones entre clases, cosa bastante común. Mediante unas macros de cardinalidad, podremos especificar las relaciones 97 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI entre clases. Se declaran al principio de una clase y las más utilizadas son estas : ● has_many :nombredeclase – Para especificar relaciones 1 a n. ● belongs_to :nombredeclase – para especificar relaciones 1 a 1. Ha de existir una clave ajena de la clase a la que pertenece. ● has_and_belongs_to_many :nombredeclase – Para especificar relaciones n a n. Debe existir una clase intermedia con el nombre compuesto del nombre de las clases relacionadas. Mediante estas definiciones es posible después usar métodos para obtener más información, como por ejemplo todas las personas de un grupo, o todos los grupos de una persona. C.9. Layouts Es posible crear partes de vista comunes para todas las acciones de un controlador, o bien para toda la aplicación. Con esto se consigue hacer énfasis en la filosofía don’t repeat yourself de Rails. Para crear un layout se creará en /app/views/layouts ,se nombrará como el controlador sin la palabra controller , se escribirá el código común, y en cualquier sitio de este rhtml la palabra reservada <%= yield %> que es el rhtml correspondiente a cada método del controlador o de la aplicación. C.10. Templates La idea de los templates es seguir con el paradigma DRY, creando partes de código comunes a varios métodos de un controlador para así ofrecer vistas con trozos repetidos sin tener que repetirlos cada vez que aparezcan. Así por ejemplo si queremos crear o modificar un objeto, el formulario para hacerlo en los 2 casos podria ser el mismo, asi que para invocrlo usaremos : <%= render :partial => 'form' %> y a su vez tendremos un _form.rhtml dentro de la carpeta de las vistas de ese objeto. 98 Organización de tareas con resolución automática de conflictos Escuela Técnica Superior Ingeniería - ICAI El carácter de guión bajo indica que el fichero es un template (una norma más de convención) 99