Diferencia entre revisiones de «Administración de censos - 17 18 - G2»
(→Formulario de creación de censo) |
|||
Línea 231: | Línea 231: | ||
<head> | <head> | ||
<title> | <title> | ||
− | + | Creación de censo | |
</title> | </title> | ||
<link rel="stylesheet" type="text/css" href="estilo.css" /> | <link rel="stylesheet" type="text/css" href="estilo.css" /> | ||
Línea 239: | Línea 239: | ||
<div> | <div> | ||
<label for="votaciones"> Votación:</label> | <label for="votaciones"> Votación:</label> | ||
− | <select id="votaciones" required> | + | <select id="votaciones" name="id_votacion" required> |
<option value="">Seleccione una votación</option> | <option value="">Seleccione una votación</option> | ||
<option value="id1">Votación1</option> | <option value="id1">Votación1</option> | ||
Línea 250: | Línea 250: | ||
<div> | <div> | ||
<label for="grupos">Grupo:</label> | <label for="grupos">Grupo:</label> | ||
− | <select id="grupos" required> | + | <select id="grupos" name="id_grupo" required> |
<option value="">Seleccione un grupo</option> | <option value="">Seleccione un grupo</option> | ||
<option value="idg1">Grupo1</option> | <option value="idg1">Grupo1</option> | ||
Línea 269: | Línea 269: | ||
<label for="fecha_fin"> Fecha Fin:</label> | <label for="fecha_fin"> Fecha Fin:</label> | ||
<input type="datetime-local" id="fecha_fin" name="fecha_fin" placeholder="dd/mm/yyyy hh:mm" /> | <input type="datetime-local" id="fecha_fin" name="fecha_fin" placeholder="dd/mm/yyyy hh:mm" /> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div id="div_submit"> | ||
+ | <input type="submit" value="Enviar"/> | ||
+ | </div> | ||
+ | |||
+ | </form> | ||
+ | |||
+ | </div> | ||
+ | |||
+ | </body> | ||
+ | |||
+ | </html> | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | === Formulario de edición de censo === | ||
+ | <source lang="html"> | ||
+ | <html> | ||
+ | |||
+ | <head> | ||
+ | <title> | ||
+ | Editar censo | ||
+ | </title> | ||
+ | <link rel="stylesheet" type="text/css" href="estilo.css" /> | ||
+ | </head> | ||
+ | <body> | ||
+ | <form action="/api/update" method="GET"> | ||
+ | <div> | ||
+ | <label for="votaciones"> Votación:</label> | ||
+ | <select id="votaciones" name="id_votacion" required> | ||
+ | <option value="id_votacion_actual">Votación actual</option> | ||
+ | <option value="id1">Votación1</option> | ||
+ | <option value="id2">Votación2</option> | ||
+ | <option value="id3">Votación3</option> | ||
+ | <option value="id4">...</option> | ||
+ | </select> | ||
+ | |||
+ | </div> | ||
+ | <div> | ||
+ | <label for="grupos">Grupo:</label> | ||
+ | <select id="grupos" name="id_grupo" required> | ||
+ | <option value="id_grupo_actual">Grupo_actual</option> | ||
+ | <option value="idg1">Grupo1</option> | ||
+ | <option value="idg2">Grupo2</option> | ||
+ | <option value="idg3">Grupo3</option> | ||
+ | <option value="idg4">...</option> | ||
+ | </select> | ||
+ | </div> | ||
+ | <div> | ||
+ | <label for="nombre">Nombre:</label> | ||
+ | <input type="text" id="nombre" name="nombre" value="nombre_actual" required /> | ||
+ | </div> | ||
+ | <div> | ||
+ | <label for="fecha_ini"> Fecha Inicio:</label> | ||
+ | <input type="datetime-local" id="fecha_ini" name="fecha_ini" value="fecha_ini_actual" placeholder="dd/mm/yyyy hh:mm" /> | ||
+ | </div> | ||
+ | <div> | ||
+ | <label for="fecha_fin"> Fecha Fin:</label> | ||
+ | <input type="datetime-local" id="fecha_fin" name="fecha_fin" value="fecha_fin_actual" placeholder="dd/mm/yyyy hh:mm" /> | ||
</div> | </div> | ||
Revisión del 17:11 27 nov 2017
Contenido
Objetivo del subsistema
- Gestionar lista de usuarios agrupados en quienes pueden votar o no en una determinada votación.
- Crear nuevos censos cada vez que se genere una determinada votación.
Consideraciones
- Repositorio del proyecto del año pasado: https://github.com/AgoraUS-G1-1617/CensoEGC
- Repositorio del proyecto actual: https://github.com/EGC-G2-Trabajo-1718/egc-censos
- Wiki del proyecto actual (wiki interna de github para uso interno del grupo): https://github.com/EGC-G2-Trabajo-1718/egc-censos/wiki
- ¿Dependencias con el grupo de autenticación / registro / administración de votaciones?
Tecnología usada
Subsistema: Administración de Censos Lenguaje/Herramienta: Django 1.11 -> Python 3.6 Sistema de gestión de bibliotecas: pip Bibliotecas: Django REST framework (djangorestframework): versión 3 Necesita Base de datos: Sí (Ninguna empleada actualmente, a la espera de directrices)
Hemos decidido hacer uso del framework Django en su versión 1.11 y que trabaja con Python 3.6 por su facilidad de trabajo con JSON, que será el formato de datos en el que se proveerán las funcionalidades de la API. Haremos uso de la librería de funcionalidades djangorestframework que nos provee utilidades para trabajar y crear una API.
Como IDE desarrollaremos sobre PyCharm (en su versión Community), corriendo sobre Ubuntu 16.04 (o una máquina virtual en la máquina de cada desarrollador).
Estructura de datos
Haremos uso del registro/tabla Censo:
Censo: - id: (int) identificador del censo [pk, autoincrementable] - id_votacion: (int ?) identificador de la votación a la que se relaciona [fk, not null] - id_grupo: (int ?) identificador del grupo que puede votar en la votación [fk, not null] - nombre: (string/varchar) nombre que se le quiere otorgar al censo en cuestión [blank, not null, default=""] - fecha_ini: (datetime) fecha de inicio del censo [not null, default=fecha_actual] - fecha_fin: (datetime) fecha de fin del censo [not null, default=votacion.fecha_fin]
Ésta es, a groso modo, la estructura/tabla que se va a usar en Administración de Censos. La dependencia fundamental es con la tabla Grupo (grupo de usuario, si existiese) y Votación (fecha de fin). Más adelante se detalla en la API su uso, para aclarar posibles dudas.
API
Las funcionalidades aquí descritas y especificadas no son finales. Debido a la diversidad de funcionalidades y necesidades de los otros grupos, éstas pueden variar a lo largo del desarrollo (sea debido al despliege, conflictos, etc).
Obtención de un censo
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-censos1718.es/api/get
Parámetros:
* id: Identificador del censo a obtener.
Ejemplo:
GET http://egc-censos1718.es/api/get?id=1
Formato JSON:
{ "censo": { "id": "1", "id_votacion": "314", "id_grupo": "3", "nombre": "Censo_de_prueba", "fecha_ini": "24/11/2017 16:00", "fecha_fin": "30/11/2017 23:59" } }
Consulta de censos
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. Funcionalidad más útil para los otros subsistemas que componen el sistema de votación, pues permitirá obtener resultados a partir de parámetros (si un usuario perteneciente a un grupo puede votar en x votación, qué grupos pueden votar en x votación, etc)
URL:
http://egc-censos1718.es/api/filter
Parámetros:
* id_votacion (opcional): Identificador de la votación de los censos a consultar. * id_grupo (opcional): Identificador del grupo de usuarios con acceso al censo. * nombre (opcional): Nombre del censo. * fecha_ini (opcional): dd/mm/yyyy hh:mm Fecha de inicio del censo a filtrar. * fecha_fin (opcional): dd/mm/yyyy hh:mm Fecha de fin del censo a filtrar Todos los parámetros deberán ir correctamente parseados en el formato URL (ya que así será traducido e interpretado)
Ejemplo:
GET http://egc-censos1718.es/api/filter?id_votacion=314
Formato JSON:
{ "censos": { "censo1": { "id": "1", "id_votacion": "314", "id_grupo": "3", "fecha_ini": "24/11/2017 16:00", "fecha_fin": "30/11/2017 23:59" }, "censo2": { "id": "2", "id_votacion": "314", "id_grupo": "25", "fecha_ini": "19/12/2017 16:00", "fecha_fin": "30/01/2018 23:59" } } }
Consulta de acceso a voto
Se hace una petición GET con los parámetros siguientes y se devolverá un JSON con la siguiente información. Otra funcionalidad útil para los otros subsistemas que componen el sistema de votación, pues permitirá saber si X grupo de usuarios tiene un ACCESO (activo) a Y votación. (Comprueba existencia y que la fecha actual esté comprendida entre el rango de ambas fecha). Básicamente, comprobará que exista un censo activo determinado por los parámetros de consulta.
URL:
http://egc-censos1718.es/api/has_access
Parámetros:
* id_votacion: Identificador de la votación de los censos a consultar. * id_grupo: Identificador del grupo de usuarios con acceso al censo.
Ejemplo:
GET http://egc-censos1718.es/api/has_access?id_votacion=314&id_grupo=3
Formato JSON:
{ "result": true }
Creación de un censo
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-censos1718.es/api/create
Parámetros:
* id_votacion: Identificador usado para la votación a la que quiere enlazar el censo. * id_grupo: Identificador del grupo de usuarios al que quiere otorgar acceso a voto. * nombre (opcional): Nombre a establecer para el censo a crear. * fecha_ini (opcional): dd/mm/yyyy hh:mm Fecha en la que quiere iniciar la validez del censo (si no se establece, se tomará la fecha en el momento de creación). * fecha_fin (opcional): dd/mm/yyyy hh:mm Fecha en la que quiere finalizar la validez del censo (si no se establece, se tomará la fecha de finalización de la votación como límite). Todos los parámetros deberán ir correctamente parseados en el formato URL (ya que así será traducido e interpretado)
Ejemplo:
POST http://egc-censos1718.es/api/create?id_votacion=314&id_grupo=3&nombre=Censo_de_prueba&fecha_ini=24%2F%0A11%2F%0A2017%2016%3A00
Formato JSON:
{ "exito": true, "mensaje": "Creado con éxito", "censo": { "id": "1", "id_votacion": "314", "id_grupo": "3", "nombre": "Censo_de_prueba", "fecha_ini": "24/11/2017 16:00", "fecha_fin": "30/11/2017 23:59" } }
Edición de un censo
Se hace una petición POST (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-censos1718.es/api/update
Parámetros:
* id: Identificador del censo a editar. * id_votacion (opcional): Identificador nuevo de la votación a la que quiere enlazar el censo. * id_grupo (opcional): Identificador nuevo del grupo de usuarios al que quiere cambiar el acceso a voto. * nombre (opcional): Nombre nuevo para el censo. * fecha_ini (opcional): dd/mm/yyyy hh:mm Fecha nueva en la que quiere iniciar la validez del censo. * fecha_fin (opcional): dd/mm/yyyy hh:mm Fecha nueva en la que quiere finalizar la validez del censo. Todos los parámetros deberán ir correctamente parseados en el formato URL (ya que así será traducido e interpretado) Si no se establece algún parámetro, dicho atributo no será editado.
Ejemplo:
POST http://egc-censos1718.es/api/update?id=1&nombre=Censo_de_prueba_editado
Formato JSON:
{ "exito": true, "mensaje": "Editado con éxito", "censo": { "id": "1", "id_votacion": "314", "id_grupo": "3", "nombre": "Censo_de_prueba_editado", "fecha_ini": "24/11/2017 16:00", "fecha_fin": "30/11/2017 23:59" } }
Eliminación de un censo
Se hace una petición GET (a través del formulario descrito en su correspondiente vista) con los parámetros siguientes y se devolverá un JSON con la siguiente información.
URL:
http://egc-censos1718.es/api/delete
Parámetros:
* id: Identificador del censo a eliminar.
Ejemplo:
GET http://egc-censos1718.es/api/delete?id=1
Formato JSON:
{ "exito": true, "mensaje": "Eliminado con éxito" }
Vistas (.html)
Formulario de creación de censo
<html>
<head>
<title>
Creación de censo
</title>
<link rel="stylesheet" type="text/css" href="estilo.css" />
</head>
<body>
<form action="/api/create" method="GET">
<div>
<label for="votaciones"> Votación:</label>
<select id="votaciones" name="id_votacion" required>
<option value="">Seleccione una votación</option>
<option value="id1">Votación1</option>
<option value="id2">Votación2</option>
<option value="id3">Votación3</option>
<option value="id4">...</option>
</select>
</div>
<div>
<label for="grupos">Grupo:</label>
<select id="grupos" name="id_grupo" required>
<option value="">Seleccione un grupo</option>
<option value="idg1">Grupo1</option>
<option value="idg2">Grupo2</option>
<option value="idg3">Grupo3</option>
<option value="idg4">...</option>
</select>
</div>
<div>
<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="nombre" required />
</div>
<div>
<label for="fecha_ini"> Fecha Inicio:</label>
<input type="datetime-local" id="fecha_ini" name="fecha_ini" placeholder="dd/mm/yyyy hh:mm" />
</div>
<div>
<label for="fecha_fin"> Fecha Fin:</label>
<input type="datetime-local" id="fecha_fin" name="fecha_fin" placeholder="dd/mm/yyyy hh:mm" />
</div>
<div id="div_submit">
<input type="submit" value="Enviar"/>
</div>
</form>
</div>
</body>
</html>
Formulario de edición de censo
<html>
<head>
<title>
Editar censo
</title>
<link rel="stylesheet" type="text/css" href="estilo.css" />
</head>
<body>
<form action="/api/update" method="GET">
<div>
<label for="votaciones"> Votación:</label>
<select id="votaciones" name="id_votacion" required>
<option value="id_votacion_actual">Votación actual</option>
<option value="id1">Votación1</option>
<option value="id2">Votación2</option>
<option value="id3">Votación3</option>
<option value="id4">...</option>
</select>
</div>
<div>
<label for="grupos">Grupo:</label>
<select id="grupos" name="id_grupo" required>
<option value="id_grupo_actual">Grupo_actual</option>
<option value="idg1">Grupo1</option>
<option value="idg2">Grupo2</option>
<option value="idg3">Grupo3</option>
<option value="idg4">...</option>
</select>
</div>
<div>
<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="nombre" value="nombre_actual" required />
</div>
<div>
<label for="fecha_ini"> Fecha Inicio:</label>
<input type="datetime-local" id="fecha_ini" name="fecha_ini" value="fecha_ini_actual" placeholder="dd/mm/yyyy hh:mm" />
</div>
<div>
<label for="fecha_fin"> Fecha Fin:</label>
<input type="datetime-local" id="fecha_fin" name="fecha_fin" value="fecha_fin_actual" placeholder="dd/mm/yyyy hh:mm" />
</div>
<div id="div_submit">
<input type="submit" value="Enviar"/>
</div>
</form>
</div>
</body>
</html>
Miembros y contacto
- Fco. Javier García, fjgparrales@gmail.com Coordinador
- Miguel Ternero Algarín
- Daniel Lozano Portillo
- María Ruiz Gutiérrez
- Laura Vera Recacha