ajout pagination + nettoyage

This commit is contained in:
Arthur ZHU 2022-01-31 18:22:54 +01:00
parent 2207d25e35
commit 2d9e428ebf
14 changed files with 235 additions and 212 deletions

View File

@ -7,7 +7,7 @@ from app.auth.models import User
bp = Blueprint("entreprises", __name__)
LOGS_LEN = 10
LOGS_LEN = 5
@bp.app_template_filter()

View File

@ -48,17 +48,11 @@ from werkzeug.utils import secure_filename
def index():
"""
Permet d'afficher une page avec la liste des entreprises et une liste des dernières opérations
Retourne: template de la page (entreprises.html)
Arguments du template:
title:
titre de la page
entreprises:
liste des entreprises
logs:
liste des logs
"""
entreprises = Entreprise.query.filter_by(visible=True).all()
page = request.args.get("page", 1, type=int)
entreprises = Entreprise.query.filter_by(visible=True).paginate(
page=page, per_page=10
)
logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all()
return render_template(
"entreprises/entreprises.html",
@ -68,9 +62,27 @@ def index():
)
@bp.route("/logs", methods=["GET"])
@permission_required(Permission.RelationsEntreprisesView)
def logs():
"""
Permet d'afficher les logs (toutes les entreprises)
"""
page = request.args.get("page", 1, type=int)
logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).paginate(
page=page, per_page=20
)
if logs is None:
abort(404)
return render_template("entreprises/logs.html", title=("Logs"), logs=logs)
@bp.route("/validation", methods=["GET"])
@permission_required(Permission.RelationsEntreprisesValidate)
def validation_entreprise():
"""
Permet d'afficher une page avec la liste des entreprises a valider
"""
entreprises = Entreprise.query.filter_by(visible=False).all()
return render_template(
"entreprises/entreprises_validation.html",
@ -84,21 +96,13 @@ def validation_entreprise():
def contacts():
"""
Permet d'afficher une page la liste des contacts et une liste des dernières opérations
Retourne: template de la page (contacts.html)
Arguments du template:
title:
titre de la page
contacts:
liste des contacts
logs:
liste des logs
"""
page = request.args.get("page", 1, type=int)
contacts = (
db.session.query(EntrepriseContact, Entreprise)
.join(Entreprise, EntrepriseContact.entreprise_id == Entreprise.id)
.filter_by(visible=True)
.all()
.paginate(page=page, per_page=10)
)
logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all()
return render_template(
@ -114,25 +118,6 @@ def fiche_entreprise(id):
l'historique des étudiants ayant réaliser un stage ou une alternance dans cette entreprise.
La fiche entreprise comporte les informations de l'entreprise, les contacts de l'entreprise et
les offres de l'entreprise.
Arguments:
id:
l'id de l'entreprise
Retourne: template de la page (fiche_entreprise.html)
Arguments du template:
title:
titre de la page
entreprise:
un objet entreprise
contacts:
liste des contacts de l'entreprise
offres:
liste des offres de l'entreprise avec leurs fichiers
logs:
liste des logs
historique:
liste des étudiants ayant réaliser un stage ou une alternance dans l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
offres = entreprise.offres
@ -183,6 +168,9 @@ def fiche_entreprise(id):
@bp.route("/fiche_entreprise_validation/<int:id>", methods=["GET"])
@permission_required(Permission.RelationsEntreprisesValidate)
def fiche_entreprise_validation(id):
"""
Permet d'afficher la fiche entreprise d'une entreprise a valider
"""
entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404()
contacts = entreprise.contacts
return render_template(
@ -198,13 +186,6 @@ def fiche_entreprise_validation(id):
def offres_recues():
"""
Permet d'afficher la page où l'on recoit les offres
Retourne: template de la page (offres.html)
Arguments du template:
title:
titre de la page
offres_recus:
liste des offres reçues
"""
offres_recues = (
db.session.query(EntrepriseEnvoiOffre, EntrepriseOffre)
@ -222,6 +203,9 @@ def offres_recues():
@bp.route("/fiche_entreprise/<int:id>/offres_expirees")
@permission_required(Permission.RelationsEntreprisesView)
def offres_expirees(id):
"""
Permet d'afficher la liste des offres expirés d'une entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
offres = entreprise.offres
offres_expirees_with_files = []
@ -290,7 +274,7 @@ def add_entreprise():
return redirect(url_for("entreprises.index"))
return render_template(
"entreprises/ajout_entreprise.html",
title=("Ajout entreprise + contact"),
title=("Ajout entreprise avec contact"),
form=form,
)
@ -300,10 +284,6 @@ def add_entreprise():
def edit_entreprise(id):
"""
Permet de modifier une entreprise de la base avec un formulaire
Arguments:
id:
l'id de l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
form = EntrepriseModificationForm()
@ -369,10 +349,6 @@ def edit_entreprise(id):
def delete_entreprise(id):
"""
Permet de supprimer une entreprise de la base avec un formulaire de confirmation
Arguments:
id:
l'id de l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
form = SuppressionConfirmationForm()
@ -397,6 +373,9 @@ def delete_entreprise(id):
@bp.route("/validate_entreprise/<int:id>", methods=["GET", "POST"])
@permission_required(Permission.RelationsEntreprisesValidate)
def validate_entreprise(id):
"""
Permet de valider une entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404()
entreprise.visible = True
db.session.commit()
@ -408,10 +387,6 @@ def validate_entreprise(id):
def add_offre(id):
"""
Permet d'ajouter une offre a une entreprise
Arguments:
id:
l'id de l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
form = OffreCreationForm()
@ -443,10 +418,6 @@ def add_offre(id):
def edit_offre(id):
"""
Permet de modifier une offre
Arguments:
id:
l'id de l'offre
"""
offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
form = OffreModificationForm()
@ -483,10 +454,6 @@ def edit_offre(id):
def delete_offre(id):
"""
Permet de supprimer une offre
Arguments:
id:
l'id de l'offre
"""
offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
entreprise_id = offre.entreprise.id
@ -512,10 +479,6 @@ def delete_offre(id):
def add_contact(id):
"""
Permet d'ajouter un contact a une entreprise
Arguments:
id:
l'id de l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
form = ContactCreationForm(hidden_entreprise_id=entreprise.id)
@ -547,10 +510,6 @@ def add_contact(id):
def edit_contact(id):
"""
Permet de modifier un contact
Arguments:
id:
l'id du contact
"""
contact = EntrepriseContact.query.filter_by(id=id).first_or_404()
form = ContactModificationForm()
@ -589,10 +548,6 @@ def edit_contact(id):
def delete_contact(id):
"""
Permet de supprimer un contact
Arguments:
id:
l'id du contact
"""
contact = EntrepriseContact.query.filter_by(id=id).first_or_404()
entreprise_id = contact.entreprise.id
@ -627,10 +582,6 @@ def delete_contact(id):
def add_historique(id):
"""
Permet d'ajouter un étudiant ayant réalisé un stage ou une alternance sur la fiche entreprise de l'entreprise
Arguments:
id:
l'id de l'entreprise
"""
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404()
form = HistoriqueCreationForm()
@ -672,10 +623,6 @@ def add_historique(id):
def envoyer_offre(id):
"""
Permet d'envoyer une offre à un utilisateur
Arguments:
id:
l'id de l'offre
"""
offre = EntrepriseOffre.query.filter_by(id=id).first_or_404()
form = EnvoiOffreForm()
@ -706,13 +653,6 @@ def envoyer_offre(id):
def json_etudiants():
"""
Permet de récuperer un JSON avec tous les étudiants
Arguments:
term:
le terme utilisé pour le filtre de l'autosuggest
Retourne:
le JSON de tous les étudiants (nom, prenom, formation actuelle?) correspondant au terme
"""
if request.args.get("term") == None:
abort(400)
@ -740,13 +680,6 @@ def json_etudiants():
def json_responsables():
"""
Permet de récuperer un JSON avec tous les étudiants
Arguments:
term:
le terme utilisé pour le filtre de l'autosuggest
Retourne:
le JSON de tous les utilisateurs (nom, prenom, login) correspondant au terme
"""
if request.args.get("term") == None:
abort(400)
@ -792,7 +725,7 @@ def export_contacts():
"""
Permet d'exporter la liste des contacts sous format excel (.xlsx)
"""
contacts = EntrepriseContact.query.filter_by(visible=True).all()
contacts = EntrepriseContact.query.all()
if contacts:
keys = ["nom", "prenom", "telephone", "mail", "poste", "service"]
titles = keys[:]
@ -811,7 +744,7 @@ def export_contacts_bis():
"""
Permet d'exporter la liste des contacts avec leur entreprise sous format excel (.xlsx)
"""
contacts = EntrepriseContact.query.filter_by(visible=True).all()
contacts = EntrepriseContact.query.all()
if contacts:
keys = [
"nom",
@ -846,16 +779,6 @@ def export_contacts_bis():
def get_offre_file(entreprise_id, offre_id, filedir, filename):
"""
Permet de télécharger un fichier d'une offre
Arguments:
entreprise_id:
l'id de l'entreprise
offre_id:
l'id de l'offre
filedir:
le répertoire du fichier
filename:
le nom du fichier
"""
if os.path.isfile(
os.path.join(
@ -887,10 +810,6 @@ def get_offre_file(entreprise_id, offre_id, filedir, filename):
def add_offre_file(offre_id):
"""
Permet d'ajouter un fichier à une offre
Arguments:
offre_id:
l'id de l'offre
"""
offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404()
form = AjoutFichierForm()
@ -919,12 +838,6 @@ def add_offre_file(offre_id):
def delete_offre_file(offre_id, filedir):
"""
Permet de supprimer un fichier d'une offre
Arguments:
offre_id:
l'id de l'offre
filedir:
le répertoire du fichier
"""
offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404()
form = SuppressionConfirmationForm()

View File

@ -0,0 +1,11 @@
.btn-inverse {
color: #ffffff;
text-shadow: 0 -1px 0 rgb(0 0 0 / 25%);
background-color: #363636;
}
.btn-inverse:hover {
color: #ffffff;
background-color: #222222;
*background-color: #151515;
}

View File

@ -4,6 +4,7 @@
{% block styles %}
{{super()}}
<link rel="stylesheet" href="/ScoDoc/static/css/scodoc.css">
<link rel="stylesheet" href="/ScoDoc/static/css/entreprises.css">
{% endblock %}
{% block title %}
@ -35,6 +36,9 @@
url_for('scolar.index_html', scodoc_dept=g.scodoc_dept)
}}">Dept. {{ g.scodoc_dept }}</a></li>
{% endif %}
{% if not current_user.is_anonymous and current_user.has_permission(current_user.Permission.RelationsEntreprisesView, None) %}
<li><a href="{{ url_for('entreprises.index') }}">Entreprises</a></li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_anonymous %}

View File

@ -8,11 +8,12 @@
<div class="row">
<div class="col-md-4">
<p>
Les champs s'autocomplète selon le SIRET
Les champs s'auto complète selon le SIRET
</p>
{{ wtf.quick_form(form, novalidate=True) }}
</div>
</div>
<script>
window.onload = function(e){
document.getElementById("siret").addEventListener("keyup", autocomplete);

View File

@ -16,6 +16,7 @@
{{ wtf.quick_form(form, novalidate=True) }}
</div>
</div>
<script>
window.onload = function(e) {
var etudiants_options = {

View File

@ -4,7 +4,7 @@
{% block app_content %}
{% if logs %}
<div class="container">
<h3>Dernières opérations</h3>
<h3>Dernières opérations <a href="{{ url_for('entreprises.logs') }}">Voir tout</a></h3>
<ul>
{% for log in logs %}
<li><span style="margin-right: 10px;">{{ log.date.strftime('%d %b %Hh%M') }}</span><span>{{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}</span></li>
@ -12,6 +12,7 @@
</ul>
</div>
{% endif %}
<div class="container">
<h1>Liste des contacts</h1>
{% if contacts %}
@ -26,7 +27,7 @@
<th>Service</th>
<th>Entreprise</th>
</tr>
{% for contact in contacts %}
{% for contact in contacts.items %}
<tr class="table-row active">
<th>{{ contact[0].nom }}</th>
<th>{{ contact[0].prenom }}</th>
@ -38,10 +39,35 @@
</tr>
{% endfor %}
</table>
<div class="text-center">
<a href="{{ url_for('entreprises.contacts', page=contacts.prev_num) }}" class="btn btn-default {% if contacts.page == 1 %}disabled{% endif %}">
&laquo;
</a>
{% for page_num in contacts.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
{% if page_num %}
{% if contacts.page == page_num %}
<a href="{{ url_for('entreprises.contacts', page=page_num) }}" class="btn btn-inverse">{{ page_num }}</a>
{% else %}
<a href="{{ url_for('entreprises.contacts', page=page_num) }}" class="btn btn-default">{{ page_num }}</a>
{% endif %}
{% else %}
...
{% endif %}
{% endfor %}
<a href="{{ url_for('entreprises.contacts', page=contacts.next_num) }}" class="btn btn-default {% if contacts.page == contacts.pages %}disabled{% endif %}">
&raquo;
</a>
</div>
<p class="text-center">
Page {{ contacts.page }} sur {{ contacts.pages }}
</p>
{% else %}
<div>Aucun contact présent dans la base</div>
</div>
{% endif %}
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesExport, None) %}
<div>
{% if contacts %}

View File

@ -4,7 +4,7 @@
{% block app_content %}
{% if logs %}
<div class="container">
<h3>Dernières opérations</h3>
<h3>Dernières opérations <a href="{{ url_for('entreprises.logs') }}">Voir tout</a></h3>
<ul>
{% for log in logs %}
<li><span style="margin-right: 10px;">{{ log.date.strftime('%d %b %Hh%M') }}</span><span>{{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}</span></li>
@ -12,9 +12,10 @@
</ul>
</div>
{% endif %}
<div class="container">
<h1>Liste des entreprises</h1>
{% if entreprises %}
{% if entreprises.items %}
<div class="table-responsive">
<table class="table table-bordered table-hover">
<tr>
@ -28,7 +29,7 @@
<th>Action</th>
{% endif %}
</tr>
{% for entreprise in entreprises %}
{% for entreprise in entreprises.items %}
<tr class="table-row active">
<th><a href="{{ url_for('entreprises.fiche_entreprise', id=entreprise.id) }}">{{ entreprise.siret }}</a></th>
<th>{{ entreprise.nom }}</th>
@ -52,11 +53,36 @@
</tr>
{% endfor %}
</table>
<div class="text-center">
<a href="{{ url_for('entreprises.index', page=entreprises.prev_num) }}" class="btn btn-default {% if entreprises.page == 1 %}disabled{% endif %}">
&laquo;
</a>
{% for page_num in entreprises.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
{% if page_num %}
{% if entreprises.page == page_num %}
<a href="{{ url_for('entreprises.index', page=page_num) }}" class="btn btn-inverse">{{ page_num }}</a>
{% else %}
<a href="{{ url_for('entreprises.index', page=page_num) }}" class="btn btn-default">{{ page_num }}</a>
{% endif %}
{% else %}
...
{% endif %}
{% endfor %}
<a href="{{ url_for('entreprises.index', page=entreprises.next_num) }}" class="btn btn-default {% if entreprises.page == entreprises.pages %}disabled{% endif %}">
&raquo;
</a>
</div>
<p class="text-center">
Page {{ entreprises.page }} sur {{ entreprises.pages }}
</p>
{% else %}
<div>Aucune entreprise présent dans la base</div>
<br>
</div>
{% endif %}
<div style="margin-bottom: 20px;">
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
<a class="btn btn-default" href="{{ url_for('entreprises.add_entreprise') }}">Ajouter une entreprise</a>

View File

@ -12,6 +12,7 @@
</ul>
</div>
{% endif %}
<div class="container">
<h1>Liste des entreprises à valider</h1>
{% if entreprises %}

View File

@ -16,6 +16,7 @@
{{ wtf.quick_form(form, novalidate=True) }}
</div>
</div>
<script>
window.onload = function(e) {
var responsables_options = {

View File

@ -2,8 +2,8 @@
{% extends 'base.html' %}
{% block app_content %}
{% if logs %}
<div class="container">
{% if logs %}
<div class="container">
<h3>Dernières opérations sur cette fiche</h3>
<ul>
{% for log in logs %}
@ -13,10 +13,11 @@
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if historique %}
<div class="container">
</div>
{% endif %}
{% if historique %}
<div class="container">
<h3>Historique</h3>
<ul>
{% for data in historique %}
@ -30,9 +31,10 @@
</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="container">
</div>
{% endif %}
<div class="container">
<h2>Fiche entreprise - {{ entreprise.nom }} ({{ entreprise.siret }})</h2>
<div>
@ -75,5 +77,5 @@
<a class="btn btn-primary" href="{{ url_for('entreprises.offres_expirees', id=entreprise.id) }}">Voir les offres expirées</a>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,37 @@
{# -*- mode: jinja-html -*- #}
{% extends 'base.html' %}
{% block app_content %}
<div class="container">
<h3>Dernières opérations</h3>
<ul>
{% for log in logs.items %}
<li><span style="margin-right: 10px;">{{ log.date.strftime('%d %b %Hh%M') }}</span><span>{{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}</span></li>
{% endfor %}
</ul>
</div>
<div class="text-center">
<a href="{{ url_for('entreprises.logs', page=logs.prev_num) }}" class="btn btn-default {% if logs.page == 1 %}disabled{% endif %}">
&laquo;
</a>
{% for page_num in logs.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
{% if page_num %}
{% if logs.page == page_num %}
<a href="{{ url_for('entreprises.logs', page=page_num) }}" class="btn btn-inverse">{{ page_num }}</a>
{% else %}
<a href="{{ url_for('entreprises.logs', page=page_num) }}" class="btn btn-default">{{ page_num }}</a>
{% endif %}
{% else %}
...
{% endif %}
{% endfor %}
<a href="{{ url_for('entreprises.logs', page=logs.next_num) }}" class="btn btn-default {% if logs.page == logs.pages %}disabled{% endif %}">
&raquo;
</a>
</div>
<p class="text-center">
Page {{ logs.page }} sur {{ logs.pages }}
</p>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% extends 'base.html' %}
{% block app_content %}
<div class="container">
<div class="container">
<h1>Offres expirées de {{ entreprise.nom }}</h1>
{% if offres_expirees %}
{% for offre in offres_expirees%}
@ -12,5 +12,5 @@
{% else %}
<div>Aucune offre expirées</div>
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,7 @@
{% extends 'base.html' %}
{% block app_content %}
<div class="container">
<div class="container">
<h1>{{ title }}</h1>
{% if offres_recus %}
<div class="table-responsive">
@ -25,5 +25,5 @@
<div>Aucune offre reçue</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}