README.md 3.81 KB
Newer Older
1 2
Proyecto Manhattan
==================
3

4
> First we take Manhattan, then we take Berlin.
5

6
Manhattan es una aplicación web para gestionar los proyectos de Innovación Docente.
7
Está desarrollada con [Django](https://www.djangoproject.com/) 3, mucho ♥, bastante ☕ y un poco de magia 🧙.
8

9 10
Requisitos
----------
11

12
1. Python 3.7 o superior. En Debian o Ubuntu instalar los paquetes `python3.7-dev` y `python3-distutils`.
13 14
2. [pip](https://pip.pypa.io/en/stable/installing/), instalador de paquetes de Python.
   (Puede venir con la instalación de Python).
15 16 17 18 19 20
3. [pipenv](https://github.com/pypa/pipenv) para crear un entorno virtual para Python y facilitar el trabajo.

   Se puede instalar con `sudo -H pip3 install pipenv`.
4. Paquetes `libxmlsec1-dev`, `pandoc` y `pkg-config`.
5. Un servidor de bases de datos aceptado por Django (vg PostgreSQL o MariaDB).

21 22 23 24 25 26
   En Debian/Ubuntu:  
   `apt install postgresql`  
   o  
   `apt install mariadb-server mariadb-client libmariadb-dev`  
   o  
   `apt install mysql-server mysql-client libmysqlclient-dev`
27

28
   En versiones antiguas de MariaDB/MySQL, la configuración deberá incluir, si es necesario:
29

30 31 32 33 34 35
   ```ini
   innodb_file_per_table = On  # Default on MariaDB >= 5.5
   innodb_file_format = Barracuda  # Deprecated in MariaDB 10.2
   innodb_large_prefix  # Deprecated on MariaDB 10.2, Removed in MariaDB 10.3.1
   innodb_default_row_format = dynamic  # Default on MariaDB >= 10.2.2
   ```
36

37 38
Instalación
-----------
39

40
```shell
41
git clone https://gitlab.unizar.es/InnovacionDocente/manhattan.git
42
cd manhattan
43
pipenv install [--dev]
44 45
```

46 47
Configuración inicial
---------------------
48

49 50 51 52 53 54 55 56
1. Crear una base de datos.  
   En MariaDB/MySQL sería algo así:

   ```sh
   sudo mysql -u root
   ```

   ```sql
57
   CREATE DATABASE nombre CHARACTER SET='utf8mb4' COLLATE utf8mb4_unicode_ci;
58
   GRANT ALL PRIVILEGES ON nombre.* TO usuario@localhost IDENTIFIED BY 'abretesesamo';
59 60 61
   quit
   ```

62
2. Copiar el fichero de ejemplo `.env-sample`.  Configurar las bases de datos en el fichero `.env`.
63 64
3. Copiar el fichero de ejemplo `manhattan_project/settings-sample.py`.  
   Configurar en `settings.py` los datos para el correo, y la URL del sitio (`SITE_URL`).
65 66
4. Configurar los datos para el _Single Sign On_ (SAML).
5. Ejecutar
67

68
    ```shell
69
    source .env
70 71 72 73 74
    pipenv shell
    ./manage.py migrate
    ./manage.py createsuperuser
    ./manage.py loaddata seed
    ```
75

76 77 78 79 80 81
6. Abrir la URL con el navegador web, autenticarse como superusuario y,
   en la interfaz de administración de Django, añadir usuarios al grupo `Gestores`
   (incluyendo al superusuario).
7. Activar a los usuarios gestores el atributo `is_staff` para que puedan acceder
   a la interfaz de administración.

82 83
Servidor web para desarrollo
----------------------------
84

85 86
```shell
pipenv shell
87
./manage.py runserver [<IP>[:<puerto>]]
88
```
89

90
Podemos indicar que el superusuario pertenece al colectivo PAS, para que pueda crear proyectos:
91 92 93 94 95 96

```sql
UPDATE accounts_customuser
SET colectivos = '["PAS"]'
WHERE is_superuser = 1;
```
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Nueva convocatoria
------------------

Se puede crear una nueva convocatoria desde la interfaz de administración.

Se pueden clonar los programas y líneas de la convocatoria anterior con estas órdenes:

```sql
INSERT INTO indo_programa (nombre_corto, nombre_largo, max_ayuda, max_estudiantes, campos, requiere_visto_bueno_centro, convocatoria_id, requiere_visto_bueno_estudio)
SELECT nombre_corto, nombre_largo, max_ayuda, max_estudiantes, campos, requiere_visto_bueno_centro, convocatoria_id + 1, requiere_visto_bueno_estudio
FROM indo_programa
WHERE convocatoria_id = 2020
ORDER BY id
;

INSERT INTO indo_linea (nombre, programa_id)
SELECT l.nombre, p2.id
FROM indo_linea l
JOIN indo_programa p ON l.programa_id = p.id
JOIN indo_programa p2 ON p.nombre_corto = p2.nombre_corto
WHERE p.convocatoria_id = 2020 AND p2.convocatoria_id = p.convocatoria_id + 1
ORDER BY l.id
;
```