Resumen

Anuncio
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
Descargar