Commit afd53c42 authored by Nicolas Joyard's avatar Nicolas Joyard

Ajout upload documents (cachés sauf admin)

parent 440d424c
......@@ -36,6 +36,7 @@ SEXES = {
# L'ordre est utilisé comme clé primaire lors de cet import.
#
ETAPE_DOCUMENT = -30
ETAPE_COM_PUBLIE = -21
ETAPE_COM_A_MODERER = -20
ETAPE_COURRIEL = -10
......@@ -48,6 +49,17 @@ ETAPE_REPONSE_POSITIVE = 40
ETAPE_REPONSE_NEGATIVE = 50
ETAPES = [
{
'ordre': ETAPE_DOCUMENT,
'label': 'Document',
'description': """
Un document nous a été transmis par le parlementaire.
""",
'couleur': '#88dd88',
'icone': 'paperclip',
'hidden': True,
'alerte': False,
},
{
'ordre': ETAPE_COM_PUBLIE,
'label': 'Commentaire',
......@@ -57,6 +69,7 @@ ETAPES = [
""",
'couleur': '#bbbbbb',
'icone': 'commenting',
'hidden': False,
'alerte': False,
},
{
......@@ -69,6 +82,7 @@ ETAPES = [
""",
'couleur': '#bb6666',
'icone': 'commenting',
'hidden': True,
'alerte': False,
},
{
......@@ -80,6 +94,7 @@ ETAPES = [
""",
'couleur': '#66aadd',
'icone': 'at',
'hidden': False,
'alerte': False,
},
{
......@@ -88,6 +103,7 @@ ETAPES = [
'description': '',
'couleur': '',
'icone': '',
'hidden': True,
'alerte': False,
},
{
......@@ -99,6 +115,7 @@ ETAPES = [
""",
'couleur': '#bbbbbb',
'icone': 'envelope-open',
'hidden': False,
'alerte': False,
},
{
......@@ -110,6 +127,7 @@ ETAPES = [
""",
'couleur': '#aaaaff',
'icone': 'clock-o',
'hidden': False,
'alerte': False,
},
{
......@@ -121,6 +139,7 @@ ETAPES = [
""",
'couleur': '#8888dd',
'icone': 'envelope',
'hidden': False,
'alerte': False,
},
{
......@@ -132,6 +151,7 @@ ETAPES = [
""",
'couleur': '#4444bb',
'icone': 'check',
'hidden': False,
'alerte': False,
},
{
......@@ -143,6 +163,7 @@ ETAPES = [
""",
'couleur': '#66bb66',
'icone': 'heart',
'hidden': False,
'alerte': True,
},
{
......@@ -155,6 +176,7 @@ ETAPES = [
""",
'couleur': '#bb6666',
'icone': 'thumbs-down',
'hidden': False,
'alerte': True,
},
]
......
......@@ -10,7 +10,7 @@ from sqlalchemy.orm import joinedload
from ..models import Action, Parlementaire, User, db
from ..models.constants import (ETAPE_A_CONFIRMER, ETAPE_A_ENVOYER,
ETAPES_BY_ORDRE, ETAPE_COM_A_MODERER,
ETAPE_COM_PUBLIE)
ETAPE_COM_PUBLIE, ETAPE_DOCUMENT)
from ..tools.files import EXTENSIONS, handle_upload
from ..tools.mails import envoyer_alerte
......@@ -20,6 +20,7 @@ from ..tools.text import slugify
def setup_routes(app):
uploads_root = os.path.join(app.config['DATA_DIR'], 'uploads')
@app.route('/admin/recent', endpoint='admin_recent')
@require_admin
......@@ -73,6 +74,11 @@ def setup_routes(app):
if action:
parl_id = action.parlementaire_id
if action.attachment:
path = os.path.join(uploads_root, action.attachment)
if os.path.exists(path):
os.unlink(path)
db.session.delete(action)
db.session.flush()
......@@ -141,17 +147,24 @@ def setup_routes(app):
return redirect_back(error=msg,
fallback=url_for('parlementaire', id=id_parl))
if etape == ETAPE_DOCUMENT:
prefix = 'document'
else:
prefix = 'etape-%s' % etape
try:
filename = handle_upload(
os.path.join(app.config['DATA_DIR'], 'uploads'),
'etape-%s-%s' % (etape, slugify(parl.nom_complet))
uploads_root,
'%s-%s' % (prefix, slugify(parl.nom_complet))
)
except Exception as e:
return redirect_back(error=str(e),
fallback=url_for('parlementaire', id=id_parl))
etape_data = ETAPES_BY_ORDRE[etape]
parl.etape = etape
if etape > 0:
parl.etape = etape
action = Action(
date=datetime.now(),
......
......@@ -8,8 +8,9 @@ from ..models import Action, Parlementaire
from ..models.constants import (CHAMBRES, ETAPES, ETAPES_BY_ORDRE,
ETAPE_AR_RECU, ETAPE_A_CONFIRMER,
ETAPE_A_ENVOYER, ETAPE_COM_A_MODERER,
ETAPE_COM_PUBLIE, ETAPE_ENVOYE, ETAPE_NA,
ETAPE_REPONSE_NEGATIVE, ETAPE_REPONSE_POSITIVE)
ETAPE_COM_PUBLIE, ETAPE_COURRIEL, ETAPE_ENVOYE,
ETAPE_NA, ETAPE_REPONSE_NEGATIVE,
ETAPE_REPONSE_POSITIVE)
def setup(app):
......@@ -112,13 +113,14 @@ def setup(app):
'etapes_by_ordre': ETAPES_BY_ORDRE,
'etapes': ETAPES,
'ordres': {
'ETAPE_COM_PUBLIE': ETAPE_COM_PUBLIE,
'ETAPE_COM_A_MODERER': ETAPE_COM_A_MODERER,
'ETAPE_COURRIEL': ETAPE_COURRIEL,
'ETAPE_NA': ETAPE_NA,
'ETAPE_A_ENVOYER': ETAPE_A_ENVOYER,
'ETAPE_A_CONFIRMER': ETAPE_A_CONFIRMER,
'ETAPE_ENVOYE': ETAPE_ENVOYE,
'ETAPE_AR_RECU': ETAPE_AR_RECU,
'ETAPE_COM_A_MODERER': ETAPE_COM_A_MODERER,
'ETAPE_COM_PUBLIE': ETAPE_COM_PUBLIE,
'ETAPE_REPONSE_POSITIVE': ETAPE_REPONSE_POSITIVE,
'ETAPE_REPONSE_NEGATIVE': ETAPE_REPONSE_NEGATIVE
},
......
......@@ -137,8 +137,8 @@
<th></th>
</tr>
{% for act in parlementaire.actions if (act.etape != ordres.ETAPE_COM_A_MODERER or is_admin) %}
<tr>
{% for act in parlementaire.actions if (not etapes_by_ordre[act.etape].hidden or is_admin) %}
<tr {% if etapes_by_ordre[act.etape].hidden %} class="danger"{% endif %}>
<td>{{ act.etape|label_etape }}</td>
<td>
{% if act.user.nick == '!rc' %}
......@@ -171,8 +171,7 @@
{% endif %}
{% if is_admin %}
{% if act.etape == ordres.ETAPE_COM_A_MODERER or
act.etape == ordres.ETAPE_COM_PUBLIE or
{% if act.etape < ordres.ETAPE_COURRIEL or
act.etape == act.parlementaire.etape %}
<a class="btn btn-danger btn-sm" href="{{ url_for('admin_delete', id=act.id) }}" title="Supprimer" data-toggle="tooltip"><i class="fa fa-trash"></i></a>
{% endif %}
......@@ -529,7 +528,7 @@
</div>
<div class="col-md-10">
<select name="etape">
{% for etape in etapes if etape.ordre > parlementaire.etape %}
{% for etape in etapes if etape.ordre > parlementaire.etape or etape.ordre < -10 %}
<option value="{{ etape.ordre }}">{{ etape.label }}</option>
{% endfor %}
</select>
......
......@@ -72,6 +72,16 @@ def generer_pdf(template, data, path, force=False):
pisa.CreatePDF(html, pdf)
def unique_filename(directory, basename, ext):
filename = '%s.%s' % (basename, ext)
if os.path.exists(os.path.join(directory, filename)):
counter = 0
while os.path.exists(os.path.join(directory, filename)):
counter += 1
filename = '%s-%s.%s' % (basename, counter, ext)
return filename
def handle_upload(directory, basename, key='file'):
filename = None
......@@ -87,7 +97,7 @@ def handle_upload(directory, basename, key='file'):
if ext == 'jpeg':
ext = 'jpg'
filename = '%s.%s' % (basename, ext)
filename = unique_filename(directory, basename, ext)
file.save(os.path.join(directory, filename))
return filename
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment