forked from ScoDoc/DocScoDoc
Merge branch 'entreprises' of https://scodoc.org/git/arthur.zhu/ScoDoc into entreprises
This commit is contained in:
commit
0657bf0cb2
@ -29,6 +29,7 @@ from config import Config
|
||||
import re
|
||||
import requests
|
||||
import glob
|
||||
from datetime import date
|
||||
|
||||
from flask import flash
|
||||
from flask_login import current_user
|
||||
@ -117,6 +118,9 @@ def get_dept_id_by_acronym(acronym: str):
|
||||
|
||||
|
||||
def get_dept_acronym_by_id(id: int):
|
||||
"""
|
||||
Retourne l'acronym d'un departement a l'aide de son id
|
||||
"""
|
||||
dept = Departement.query.filter_by(id=id).first()
|
||||
if dept is not None:
|
||||
return dept.acronym
|
||||
@ -137,7 +141,7 @@ def check_offre_depts(depts: list, offre_depts: list):
|
||||
|
||||
def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list):
|
||||
"""
|
||||
Retourne l'offre, les fichiers attachés a l'offre et les département liés
|
||||
Retourne l'offre, les fichiers attachés a l'offre, les département liés a l'offre et le correspondant
|
||||
"""
|
||||
offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
|
||||
correspondant = EntrepriseCorrespondant.query.filter_by(
|
||||
@ -162,6 +166,42 @@ def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list):
|
||||
return None
|
||||
|
||||
|
||||
def get_offres_non_expirees_with_files(offres):
|
||||
"""
|
||||
Retourne une liste avec toutes les offres non expirées (offre, files, offre_depts, correspondant)
|
||||
"""
|
||||
depts = get_depts()
|
||||
offres_with_files = []
|
||||
for offre in offres:
|
||||
if not offre.expired and (
|
||||
offre.expiration_date is None
|
||||
or (
|
||||
offre.expiration_date is not None
|
||||
and date.today() < offre.expiration_date
|
||||
)
|
||||
):
|
||||
offre_with_files = get_offre_files_and_depts(offre, depts)
|
||||
if offre_with_files is not None:
|
||||
offres_with_files.append(offre_with_files)
|
||||
return offres_with_files
|
||||
|
||||
|
||||
def get_offres_expirees_with_files(offres):
|
||||
"""
|
||||
Retourne une liste avec toutes les offres expirées (offre, files, offre_depts, correspondant)
|
||||
"""
|
||||
depts = get_depts()
|
||||
offres_with_files = []
|
||||
for offre in offres:
|
||||
if offre.expired or (
|
||||
offre.expiration_date is not None and date.today() > offre.expiration_date
|
||||
):
|
||||
offre_with_files = get_offre_files_and_depts(offre, depts)
|
||||
if offre_with_files is not None:
|
||||
offres_with_files.append(offre_with_files)
|
||||
return offres_with_files
|
||||
|
||||
|
||||
def send_email_notifications_entreprise(subject: str, entreprise: Entreprise):
|
||||
txt = [
|
||||
"Une entreprise est en attente de validation",
|
||||
@ -186,6 +226,7 @@ def send_email_notifications_entreprise(subject: str, entreprise: Entreprise):
|
||||
def get_excel_book_are(export: bool = False):
|
||||
"""
|
||||
Retourne un Excel avec les 3 feuilles "Entreprises", "Sites" et "Correspondants"
|
||||
si export est True, remplit les feuilles avec les données a exporter
|
||||
"""
|
||||
entreprises_titles = ENTREPRISES_KEYS[:]
|
||||
sites_titles = SITES_KEYS[:]
|
||||
@ -450,7 +491,7 @@ def check_sites_import(m):
|
||||
|
||||
def check_site_import(site_data):
|
||||
"""
|
||||
Verifie les données d'une ligne Excel (sites)
|
||||
Verifie les données d'une ligne Excel (site)
|
||||
"""
|
||||
champs_obligatoires = [
|
||||
"siret_entreprise",
|
||||
@ -482,6 +523,9 @@ def check_site_import(site_data):
|
||||
|
||||
|
||||
def check_correspondants_import(m):
|
||||
"""
|
||||
Verifie la feuille Excel "Correspondants" de l'importation données
|
||||
"""
|
||||
ligne = 1
|
||||
if m[0] != CORRESPONDANTS_KEYS:
|
||||
flash(
|
||||
@ -557,6 +601,9 @@ def check_correspondant_import(correspondant_data):
|
||||
|
||||
|
||||
def list_to_dict(m):
|
||||
"""
|
||||
Transforme une liste de liste (matrice) en liste de dictionnaire (key = premiere liste de la matrice)
|
||||
"""
|
||||
l = []
|
||||
for data in m[1:]:
|
||||
new_dict = {title: value.strip() for title, value in zip(m[0], data)}
|
||||
|
@ -123,6 +123,7 @@ class EntrepriseCreationForm(FlaskForm):
|
||||
notes = _build_string_field("Notes sur le correspondant", required=False)
|
||||
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -200,6 +201,7 @@ class EntrepriseModificationForm(FlaskForm):
|
||||
ville = _build_string_field("Ville (*)")
|
||||
pays = _build_string_field("Pays", required=False)
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@ -245,6 +247,7 @@ class SiteCreationForm(FlaskForm):
|
||||
ville = _build_string_field("Ville (*)")
|
||||
pays = _build_string_field("Pays", required=False)
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -271,6 +274,7 @@ class SiteModificationForm(FlaskForm):
|
||||
ville = _build_string_field("Ville (*)")
|
||||
pays = _build_string_field("Pays", required=False)
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -321,6 +325,7 @@ class OffreCreationForm(FlaskForm):
|
||||
],
|
||||
)
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@ -368,6 +373,7 @@ class OffreModificationForm(FlaskForm):
|
||||
expiration_date = DateField("Date expiration", validators=[Optional()])
|
||||
correspondant = SelectField("Correspondant à contacté", validators=[Optional()])
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@ -450,7 +456,8 @@ class CorrespondantCreationForm(FlaskForm):
|
||||
class CorrespondantsCreationForm(FlaskForm):
|
||||
hidden_site_id = HiddenField()
|
||||
correspondants = FieldList(FormField(CorrespondantCreationForm), min_entries=1)
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
submit = SubmitField("Envoyer")
|
||||
cancel = SubmitField("Annuler")
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -489,6 +496,7 @@ class CorrespondantsCreationForm(FlaskForm):
|
||||
class CorrespondantModificationForm(FlaskForm):
|
||||
hidden_correspondant_id = HiddenField()
|
||||
hidden_site_id = HiddenField()
|
||||
hidden_entreprise_id = HiddenField()
|
||||
civilite = SelectField(
|
||||
"Civilité (*)",
|
||||
choices=[("H", "Monsieur"), ("F", "Madame")],
|
||||
@ -505,7 +513,21 @@ class CorrespondantModificationForm(FlaskForm):
|
||||
service = _build_string_field("Service", required=False)
|
||||
origine = _build_string_field("Origine", required=False)
|
||||
notes = _build_string_field("Notes", required=False)
|
||||
site = SelectField(
|
||||
"Site du correspondant", validators=[DataRequired()], description="Nom du site"
|
||||
)
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.site.choices = [
|
||||
(site.id, f"{site.nom}")
|
||||
for site in db.session.query(EntrepriseSite)
|
||||
.filter(EntrepriseSite.entreprise_id == self.hidden_entreprise_id.data)
|
||||
.all()
|
||||
]
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -543,6 +565,7 @@ class ContactCreationForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)])
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate_utilisateur(self, utilisateur):
|
||||
utilisateur_data = self.utilisateur.data.upper().strip()
|
||||
@ -569,6 +592,7 @@ class ContactModificationForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)])
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate_utilisateur(self, utilisateur):
|
||||
utilisateur_data = self.utilisateur.data.upper().strip()
|
||||
@ -602,6 +626,7 @@ class StageApprentissageCreationForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes")
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -649,6 +674,7 @@ class StageApprentissageModificationForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes")
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -705,6 +731,7 @@ class TaxeApprentissageForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes")
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -738,6 +765,7 @@ class TaxeApprentissageModificationForm(FlaskForm):
|
||||
)
|
||||
notes = TextAreaField("Notes")
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@ -755,7 +783,8 @@ class EnvoiOffreForm(FlaskForm):
|
||||
),
|
||||
min_entries=1,
|
||||
)
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
submit = SubmitField("Envoyer")
|
||||
cancel = SubmitField("Annuler")
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
@ -795,23 +824,28 @@ class AjoutFichierForm(FlaskForm):
|
||||
],
|
||||
)
|
||||
submit = SubmitField("Ajouter", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
|
||||
class SuppressionConfirmationForm(FlaskForm):
|
||||
submit = SubmitField("Supprimer", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
|
||||
class DesactivationConfirmationForm(FlaskForm):
|
||||
notes_active = TextAreaField("Notes sur la désactivation", validators=[Optional()])
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
|
||||
class ActivationConfirmationForm(FlaskForm):
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
|
||||
class ValidationConfirmationForm(FlaskForm):
|
||||
submit = SubmitField("Valider", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
||||
|
||||
class ImportForm(FlaskForm):
|
||||
@ -833,3 +867,4 @@ class PreferencesForm(FlaskForm):
|
||||
)
|
||||
check_siret = BooleanField("Vérification SIRET")
|
||||
submit = SubmitField("Valider", render_kw=SUBMIT_MARGE)
|
||||
cancel = SubmitField("Annuler", render_kw=SUBMIT_MARGE)
|
||||
|
@ -66,7 +66,7 @@ from werkzeug.utils import secure_filename
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def index():
|
||||
"""
|
||||
Permet d'afficher une page avec la liste des entreprises (visible) et une liste des dernières opérations
|
||||
Permet d'afficher une page avec la liste des entreprises (visible et active) et une liste des dernières opérations
|
||||
"""
|
||||
entreprises = Entreprise.query.filter_by(visible=True, active=True)
|
||||
logs = (
|
||||
@ -81,12 +81,12 @@ def index():
|
||||
if checked[0]:
|
||||
entreprises = Entreprise.query.filter_by(visible=True)
|
||||
if checked[1]:
|
||||
entreprises = Entreprise.query.filter_by(association=True)
|
||||
entreprises = Entreprise.query.filter_by(visible=True, association=True)
|
||||
if checked[2]:
|
||||
entreprises = Entreprise.query.filter_by(siret_provisoire=True)
|
||||
entreprises = Entreprise.query.filter_by(visible=True, siret_provisoire=True)
|
||||
if checked[1] and checked[2]:
|
||||
entreprises = Entreprise.query.filter_by(
|
||||
association=True, siret_provisoire=True
|
||||
visible=True, association=True, siret_provisoire=True
|
||||
)
|
||||
return render_template(
|
||||
"entreprises/entreprises.html",
|
||||
@ -115,20 +115,6 @@ def logs():
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/validation", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def validation():
|
||||
"""
|
||||
Permet d'afficher une page avec la liste des entreprises a valider (non visible)
|
||||
"""
|
||||
entreprises = Entreprise.query.filter_by(visible=False).all()
|
||||
return render_template(
|
||||
"entreprises/entreprises_validation.html",
|
||||
title="Validation entreprises",
|
||||
entreprises=entreprises,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/correspondants", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesCorrespondants)
|
||||
def correspondants():
|
||||
@ -155,80 +141,17 @@ def correspondants():
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def fiche_entreprise(entreprise_id):
|
||||
@bp.route("/validation", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def validation():
|
||||
"""
|
||||
Permet d'afficher la fiche entreprise d'une entreprise avec une liste des dernières opérations et
|
||||
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 correspondants de l'entreprise et
|
||||
les offres de l'entreprise.
|
||||
Permet d'afficher une page avec la liste des entreprises a valider (non visible)
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
|
||||
offres_with_files = []
|
||||
depts = are.get_depts()
|
||||
for offre in entreprise.offres:
|
||||
if not offre.expired and (
|
||||
offre.expiration_date is None
|
||||
or (
|
||||
offre.expiration_date is not None
|
||||
and date.today() < offre.expiration_date
|
||||
)
|
||||
):
|
||||
offre_with_files = are.get_offre_files_and_depts(offre, depts)
|
||||
if offre_with_files is not None:
|
||||
offres_with_files.append(offre_with_files)
|
||||
logs = (
|
||||
EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc())
|
||||
.filter(EntrepriseHistorique.entreprise_id == entreprise.id)
|
||||
.limit(LOGS_LEN)
|
||||
.all()
|
||||
)
|
||||
stages_apprentissages = (
|
||||
db.session.query(EntrepriseStageApprentissage, Identite)
|
||||
.order_by(EntrepriseStageApprentissage.date_debut.desc())
|
||||
.filter(EntrepriseStageApprentissage.entreprise_id == entreprise.id)
|
||||
.join(Identite, Identite.id == EntrepriseStageApprentissage.etudid)
|
||||
.all()
|
||||
)
|
||||
taxes = (
|
||||
EntrepriseTaxeApprentissage.query.filter_by(entreprise_id=entreprise.id)
|
||||
.order_by(EntrepriseTaxeApprentissage.annee.desc())
|
||||
.all()
|
||||
)
|
||||
entreprises = Entreprise.query.filter_by(visible=False).all()
|
||||
return render_template(
|
||||
"entreprises/fiche_entreprise.html",
|
||||
title="Fiche entreprise",
|
||||
entreprise=entreprise,
|
||||
offres=offres_with_files,
|
||||
logs=logs,
|
||||
stages_apprentissages=stages_apprentissages,
|
||||
taxes=taxes,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/logs", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def logs_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher les logs d'une entreprise
|
||||
"""
|
||||
page = request.args.get("page", 1, type=int)
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"logs fiche entreprise {entreprise_id} inconnu")
|
||||
logs = (
|
||||
EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc())
|
||||
.filter(EntrepriseHistorique.entreprise_id == entreprise.id)
|
||||
.paginate(page=page, per_page=20)
|
||||
)
|
||||
return render_template(
|
||||
"entreprises/logs_entreprise.html",
|
||||
title="Logs",
|
||||
logs=logs,
|
||||
entreprise=entreprise,
|
||||
"entreprises/entreprises_validation.html",
|
||||
title="Validation entreprises",
|
||||
entreprises=entreprises,
|
||||
)
|
||||
|
||||
|
||||
@ -250,6 +173,82 @@ def fiche_entreprise_validation(entreprise_id):
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise_validation/<int:entreprise_id>/validate_entreprise",
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def validate_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet de valider une entreprise
|
||||
"""
|
||||
form = ValidationConfirmationForm()
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=False
|
||||
).first_or_404(description=f"entreprise (validation) {entreprise_id} inconnue")
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for(
|
||||
"entreprises.fiche_entreprise_validation", entreprise_id=entreprise_id
|
||||
)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
entreprise.visible = True
|
||||
nom_entreprise = f"<a href=/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}>{entreprise.nom}</a>"
|
||||
log = EntrepriseHistorique(
|
||||
authenticated_user=current_user.user_name,
|
||||
entreprise_id=entreprise.id,
|
||||
text=f"{nom_entreprise} - Validation de la fiche entreprise ({entreprise.nom})",
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
flash("L'entreprise a été validé et ajouté à la liste.")
|
||||
return redirect(url_for("entreprises.validation"))
|
||||
return render_template(
|
||||
"entreprises/form_validate_confirmation.html",
|
||||
title="Validation entreprise",
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise_validation/<int:entreprise_id>/delete_validation_entreprise",
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def delete_validation_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet de supprimer une entreprise en attente de validation avec une formulaire de validation
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=False
|
||||
).first_or_404(description=f"entreprise (validation) {entreprise_id} inconnue")
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for(
|
||||
"entreprises.fiche_entreprise_validation", entreprise_id=entreprise_id
|
||||
)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(entreprise)
|
||||
db.session.commit()
|
||||
log = EntrepriseHistorique(
|
||||
authenticated_user=current_user.user_name,
|
||||
entreprise_id=entreprise.id,
|
||||
text=f"Non validation de la fiche entreprise ({entreprise.nom})",
|
||||
)
|
||||
db.session.add(log)
|
||||
flash("L'entreprise a été supprimé de la liste des entreprise à valider.")
|
||||
return redirect(url_for("entreprises.validation"))
|
||||
return render_template(
|
||||
"entreprises/form_confirmation.html",
|
||||
title="Supression entreprise",
|
||||
form=form,
|
||||
info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression",
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/offres_recues", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def offres_recues():
|
||||
@ -263,16 +262,16 @@ def offres_recues():
|
||||
.all()
|
||||
)
|
||||
offres_recues_with_files = []
|
||||
for offre in offres_recues:
|
||||
for envoi_offre, offre in offres_recues:
|
||||
correspondant = EntrepriseCorrespondant.query.filter_by(
|
||||
id=offre[1].correspondant_id
|
||||
id=offre.correspondant_id
|
||||
).first()
|
||||
files = []
|
||||
path = os.path.join(
|
||||
Config.SCODOC_VAR_DIR,
|
||||
"entreprises",
|
||||
f"{offre[1].entreprise_id}",
|
||||
f"{offre[1].id}",
|
||||
f"{offre.entreprise_id}",
|
||||
f"{offre.id}",
|
||||
)
|
||||
if os.path.exists(path):
|
||||
for dir in glob.glob(
|
||||
@ -281,7 +280,7 @@ def offres_recues():
|
||||
for file in glob.glob(f"{dir}/*"):
|
||||
file = [os.path.basename(dir), os.path.basename(file)]
|
||||
files.append(file)
|
||||
offres_recues_with_files.append([offre[0], offre[1], files, correspondant])
|
||||
offres_recues_with_files.append([envoi_offre, offre, files, correspondant])
|
||||
return render_template(
|
||||
"entreprises/offres_recues.html",
|
||||
title="Offres reçues",
|
||||
@ -289,29 +288,42 @@ def offres_recues():
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/offres_expirees")
|
||||
@bp.route(
|
||||
"/offres_recues/delete_offre_recue/<int:envoi_offre_id>", methods=["GET", "POST"]
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def offres_expirees(entreprise_id):
|
||||
def delete_offre_recue(envoi_offre_id):
|
||||
"""
|
||||
Permet d'afficher la liste des offres expirés d'une entreprise
|
||||
Permet de supprimer une offre reçue
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
|
||||
offres_expirees_with_files = []
|
||||
depts = are.get_depts()
|
||||
for offre in entreprise.offres:
|
||||
if offre.expired or (
|
||||
offre.expiration_date is not None and date.today() > offre.expiration_date
|
||||
):
|
||||
offre_expiree_with_files = are.get_offre_files_and_depts(offre, depts)
|
||||
if offre_expiree_with_files is not None:
|
||||
offres_expirees_with_files.append(offre_expiree_with_files)
|
||||
offre_recue = EntrepriseEnvoiOffre.query.filter_by(
|
||||
id=envoi_offre_id, receiver_id=current_user.id
|
||||
).first_or_404(description=f"offre recu {envoi_offre_id} inconnue")
|
||||
db.session.delete(offre_recue)
|
||||
db.session.commit()
|
||||
return redirect(url_for("entreprises.offres_recues"))
|
||||
|
||||
|
||||
@bp.route("/preferences", methods=["GET", "POST"])
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def preferences():
|
||||
"""
|
||||
Permet d'afficher la page des préférences du module gestion des relations entreprises
|
||||
"""
|
||||
form = PreferencesForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(url_for("entreprises.index"))
|
||||
if form.validate_on_submit():
|
||||
EntreprisePreferences.set_email_notifications(form.mail_entreprise.data.strip())
|
||||
EntreprisePreferences.set_check_siret(int(form.check_siret.data))
|
||||
return redirect(url_for("entreprises.index"))
|
||||
elif request.method == "GET":
|
||||
form.mail_entreprise.data = EntreprisePreferences.get_email_notifications()
|
||||
form.check_siret.data = int(EntreprisePreferences.get_check_siret())
|
||||
return render_template(
|
||||
"entreprises/offres_expirees.html",
|
||||
title="Offres expirées",
|
||||
entreprise=entreprise,
|
||||
offres_expirees=offres_expirees_with_files,
|
||||
"entreprises/preferences.html",
|
||||
title="Préférences",
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@ -322,6 +334,8 @@ def add_entreprise():
|
||||
Permet d'ajouter une entreprise dans la base avec un formulaire
|
||||
"""
|
||||
form = EntrepriseCreationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(url_for("entreprises.index"))
|
||||
if form.validate_on_submit():
|
||||
entreprise = Entreprise(
|
||||
nom=form.nom_entreprise.data.strip(),
|
||||
@ -400,6 +414,89 @@ def add_entreprise():
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def fiche_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher la fiche entreprise d'une entreprise avec une liste des dernières opérations et
|
||||
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 correspondants de l'entreprise et
|
||||
les offres de l'entreprise.
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
|
||||
offres_with_files = are.get_offres_non_expirees_with_files(entreprise.offres)
|
||||
logs = (
|
||||
EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc())
|
||||
.filter(EntrepriseHistorique.entreprise_id == entreprise.id)
|
||||
.limit(LOGS_LEN)
|
||||
.all()
|
||||
)
|
||||
stages_apprentissages = (
|
||||
db.session.query(EntrepriseStageApprentissage, Identite)
|
||||
.order_by(EntrepriseStageApprentissage.date_debut.desc())
|
||||
.filter(EntrepriseStageApprentissage.entreprise_id == entreprise.id)
|
||||
.join(Identite, Identite.id == EntrepriseStageApprentissage.etudid)
|
||||
.all()
|
||||
)
|
||||
taxes = (
|
||||
EntrepriseTaxeApprentissage.query.filter_by(entreprise_id=entreprise.id)
|
||||
.order_by(EntrepriseTaxeApprentissage.annee.desc())
|
||||
.all()
|
||||
)
|
||||
return render_template(
|
||||
"entreprises/fiche_entreprise.html",
|
||||
title="Fiche entreprise",
|
||||
entreprise=entreprise,
|
||||
offres=offres_with_files,
|
||||
logs=logs,
|
||||
stages_apprentissages=stages_apprentissages,
|
||||
taxes=taxes,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/logs", methods=["GET"])
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def logs_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher les logs d'une entreprise
|
||||
"""
|
||||
page = request.args.get("page", 1, type=int)
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"logs fiche entreprise {entreprise_id} inconnu")
|
||||
logs = (
|
||||
EntrepriseHistorique.query.order_by(EntrepriseHistorique.date.desc())
|
||||
.filter(EntrepriseHistorique.entreprise_id == entreprise.id)
|
||||
.paginate(page=page, per_page=20)
|
||||
)
|
||||
return render_template(
|
||||
"entreprises/logs_entreprise.html",
|
||||
title="Logs",
|
||||
logs=logs,
|
||||
entreprise=entreprise,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/offres_expirees")
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def offres_expirees(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher la liste des offres expirés d'une entreprise
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"fiche entreprise {entreprise_id} inconnue")
|
||||
offres_with_files = are.get_offres_expirees_with_files(entreprise.offres)
|
||||
return render_template(
|
||||
"entreprises/offres_expirees.html",
|
||||
title="Offres expirées",
|
||||
entreprise=entreprise,
|
||||
offres_expirees=offres_with_files,
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise/<int:entreprise_id>/edit_entreprise", methods=["GET", "POST"]
|
||||
)
|
||||
@ -412,6 +509,10 @@ def edit_entreprise(entreprise_id):
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = EntrepriseModificationForm(siret=entreprise.siret)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
lien_entreprise = f"<a href='{url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id)}'>{form.nom.data.strip()}</a>"
|
||||
logs_text = []
|
||||
@ -489,6 +590,10 @@ def fiche_entreprise_desactiver(entreprise_id):
|
||||
id=entreprise_id, visible=True, active=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = DesactivationConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
entreprise.notes_active = form.notes_active.data.strip()
|
||||
entreprise.active = False
|
||||
@ -522,6 +627,10 @@ def fiche_entreprise_activer(entreprise_id):
|
||||
id=entreprise_id, visible=True, active=False
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = ActivationConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
entreprise.active = True
|
||||
lien_entreprise = f"<a href='{url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id)}'>{entreprise.nom}</a>"
|
||||
@ -556,6 +665,10 @@ def add_taxe_apprentissage(entreprise_id):
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = TaxeApprentissageForm(hidden_entreprise_id=entreprise.id)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
taxe = EntrepriseTaxeApprentissage(
|
||||
entreprise_id=entreprise.id,
|
||||
@ -599,6 +712,10 @@ def edit_taxe_apprentissage(entreprise_id, taxe_id):
|
||||
description=f"taxe d'apprentissage {taxe_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = TaxeApprentissageModificationForm(annee=taxe.annee)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
taxe.montant = form.montant.data
|
||||
taxe.notes = form.notes.data.strip()
|
||||
@ -638,6 +755,10 @@ def delete_taxe_apprentissage(entreprise_id, taxe_id):
|
||||
description=f"taxe d'apprentissage {taxe_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(taxe)
|
||||
log = EntrepriseHistorique(
|
||||
@ -661,70 +782,6 @@ def delete_taxe_apprentissage(entreprise_id, taxe_id):
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise_validation/<int:entreprise_id>/validate_entreprise",
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def validate_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet de valider une entreprise
|
||||
"""
|
||||
form = ValidationConfirmationForm()
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=False
|
||||
).first_or_404(description=f"entreprise (validation) {entreprise_id} inconnue")
|
||||
if form.validate_on_submit():
|
||||
entreprise.visible = True
|
||||
nom_entreprise = f"<a href=/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}>{entreprise.nom}</a>"
|
||||
log = EntrepriseHistorique(
|
||||
authenticated_user=current_user.user_name,
|
||||
entreprise_id=entreprise.id,
|
||||
text=f"{nom_entreprise} - Validation de la fiche entreprise ({entreprise.nom})",
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
flash("L'entreprise a été validé et ajouté à la liste.")
|
||||
return redirect(url_for("entreprises.validation"))
|
||||
return render_template(
|
||||
"entreprises/form_validate_confirmation.html",
|
||||
title="Validation entreprise",
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise_validation/<int:entreprise_id>/delete_validation_entreprise",
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def delete_validation_entreprise(entreprise_id):
|
||||
"""
|
||||
Permet de supprimer une entreprise en attente de validation avec une formulaire de validation
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=False
|
||||
).first_or_404(description=f"entreprise (validation) {entreprise_id} inconnue")
|
||||
form = SuppressionConfirmationForm()
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(entreprise)
|
||||
db.session.commit()
|
||||
log = EntrepriseHistorique(
|
||||
authenticated_user=current_user.user_name,
|
||||
entreprise_id=entreprise.id,
|
||||
text=f"Non validation de la fiche entreprise ({entreprise.nom})",
|
||||
)
|
||||
db.session.add(log)
|
||||
flash("L'entreprise a été supprimé de la liste des entreprise à valider.")
|
||||
return redirect(url_for("entreprises.validation"))
|
||||
return render_template(
|
||||
"entreprises/form_confirmation.html",
|
||||
title="Supression entreprise",
|
||||
form=form,
|
||||
info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression",
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/add_offre", methods=["GET", "POST"])
|
||||
@permission_required(Permission.RelationsEntreprisesChange)
|
||||
def add_offre(entreprise_id):
|
||||
@ -735,6 +792,10 @@ def add_offre(entreprise_id):
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = OffreCreationForm(hidden_entreprise_id=entreprise.id)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
offre = EntrepriseOffre(
|
||||
entreprise_id=entreprise.id,
|
||||
@ -805,10 +866,14 @@ def edit_offre(entreprise_id, offre_id):
|
||||
description=f"offre {offre_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
|
||||
offre_depts_list = [(offre_dept.dept_id) for offre_dept in offre_depts]
|
||||
form = OffreModificationForm(
|
||||
hidden_entreprise_id=offre.entreprise_id, correspondant=offre.correspondant_id
|
||||
)
|
||||
offre_depts_list = [(offre_dept.dept_id) for offre_dept in offre_depts]
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
offre.intitule = form.intitule.data.strip()
|
||||
offre.description = form.description.data.strip()
|
||||
@ -878,6 +943,10 @@ def delete_offre(entreprise_id, offre_id):
|
||||
)
|
||||
entreprise_id = offre.entreprise.id
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(offre)
|
||||
path = os.path.join(
|
||||
@ -909,22 +978,6 @@ def delete_offre(entreprise_id, offre_id):
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/offres_recues/delete_offre_recue/<int:envoi_offre_id>", methods=["GET", "POST"]
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def delete_offre_recue(envoi_offre_id):
|
||||
"""
|
||||
Permet de supprimer une offre reçue
|
||||
"""
|
||||
offre_recue = EntrepriseEnvoiOffre.query.filter_by(
|
||||
id=envoi_offre_id, receiver_id=current_user.id
|
||||
).first_or_404(description=f"offre recu {envoi_offre_id} inconnue")
|
||||
db.session.delete(offre_recue)
|
||||
db.session.commit()
|
||||
return redirect(url_for("entreprises.offres_recues"))
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise/<int:entreprise_id>/expired/<int:offre_id>",
|
||||
methods=["GET", "POST"],
|
||||
@ -956,10 +1009,17 @@ def expired(entreprise_id, offre_id):
|
||||
)
|
||||
@permission_required(Permission.RelationsEntreprisesChange)
|
||||
def add_site(entreprise_id):
|
||||
"""
|
||||
Permet d'ajouter un site a une entreprise
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = SiteCreationForm(hidden_entreprise_id=entreprise.id)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
site = EntrepriseSite(
|
||||
entreprise_id=entreprise.id,
|
||||
@ -998,6 +1058,9 @@ def add_site(entreprise_id):
|
||||
methods=["GET", "POST"],
|
||||
)
|
||||
def edit_site(entreprise_id, site_id):
|
||||
"""
|
||||
Permet de modifier une offre
|
||||
"""
|
||||
site = EntrepriseSite.query.filter_by(
|
||||
id=site_id, entreprise_id=entreprise_id
|
||||
).first_or_404(
|
||||
@ -1006,6 +1069,10 @@ def edit_site(entreprise_id, site_id):
|
||||
form = SiteModificationForm(
|
||||
hidden_entreprise_id=site.entreprise_id, hidden_site_id=site.id
|
||||
)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
site.nom = form.nom.data.strip()
|
||||
site.adresse = form.adresse.data.strip()
|
||||
@ -1052,6 +1119,10 @@ def add_correspondant(entreprise_id, site_id):
|
||||
description=f"site {site_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = CorrespondantsCreationForm(hidden_site_id=site.id)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
for correspondant_entry in form.correspondants.entries:
|
||||
correspondant = EntrepriseCorrespondant(
|
||||
@ -1118,6 +1189,12 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id):
|
||||
form = CorrespondantModificationForm(
|
||||
hidden_site_id=correspondant.site.id,
|
||||
hidden_correspondant_id=correspondant.id,
|
||||
hidden_entreprise_id=entreprise_id,
|
||||
site=correspondant.site_id,
|
||||
)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
correspondant.civilite = form.civilite.data
|
||||
@ -1129,6 +1206,7 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id):
|
||||
correspondant.service = form.service.data.strip()
|
||||
correspondant.origine = form.origine.data.strip()
|
||||
correspondant.notes = form.notes.data.strip()
|
||||
correspondant.site_id = form.site.data
|
||||
log = EntrepriseHistorique(
|
||||
authenticated_user=current_user.user_name,
|
||||
entreprise_id=correspondant.site.entreprise.id,
|
||||
@ -1189,6 +1267,10 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id):
|
||||
)
|
||||
)
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(correspondant)
|
||||
log = EntrepriseHistorique(
|
||||
@ -1215,6 +1297,24 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id):
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/contacts")
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def contacts(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher une page avec la liste des contacts d'une entreprise
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
contacts = EntrepriseContact.query.filter_by(entreprise=entreprise.id).all()
|
||||
return render_template(
|
||||
"entreprises/contacts.html",
|
||||
title="Liste des contacts",
|
||||
contacts=contacts,
|
||||
entreprise=entreprise,
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise/<int:entreprise_id>/contacts/add_contact",
|
||||
methods=["GET", "POST"],
|
||||
@ -1233,6 +1333,8 @@ def add_contact(entreprise_id):
|
||||
if current_user.nom and current_user.prenom
|
||||
else "",
|
||||
)
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(url_for("entreprises.contacts", entreprise_id=entreprise_id))
|
||||
if form.validate_on_submit():
|
||||
utilisateur_data = form.utilisateur.data.upper().strip()
|
||||
stm = text(
|
||||
@ -1284,6 +1386,8 @@ def edit_contact(entreprise_id, contact_id):
|
||||
description=f"contact {contact_id} inconnu pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = ContactModificationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(url_for("entreprises.contacts", entreprise_id=entreprise_id))
|
||||
if form.validate_on_submit():
|
||||
utilisateur_data = form.utilisateur.data.upper().strip()
|
||||
stm = text(
|
||||
@ -1338,6 +1442,8 @@ def delete_contact(entreprise_id, contact_id):
|
||||
description=f"contact {contact_id} inconnu pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(url_for("entreprises.contacts", entreprise_id=entreprise_id))
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(contact)
|
||||
log = EntrepriseHistorique(
|
||||
@ -1360,24 +1466,6 @@ def delete_contact(entreprise_id, contact_id):
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/fiche_entreprise/<int:entreprise_id>/contacts")
|
||||
@permission_required(Permission.RelationsEntreprisesView)
|
||||
def contacts(entreprise_id):
|
||||
"""
|
||||
Permet d'afficher une page avec la liste des contacts d'une entreprise
|
||||
"""
|
||||
entreprise = Entreprise.query.filter_by(
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
contacts = EntrepriseContact.query.filter_by(entreprise=entreprise.id).all()
|
||||
return render_template(
|
||||
"entreprises/contacts.html",
|
||||
title="Liste des contacts",
|
||||
contacts=contacts,
|
||||
entreprise=entreprise,
|
||||
)
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/fiche_entreprise/<int:entreprise_id>/add_stage_apprentissage",
|
||||
methods=["GET", "POST"],
|
||||
@ -1391,6 +1479,10 @@ def add_stage_apprentissage(entreprise_id):
|
||||
id=entreprise_id, visible=True
|
||||
).first_or_404(description=f"entreprise {entreprise_id} inconnue")
|
||||
form = StageApprentissageCreationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
etudiant_nomcomplet = form.etudiant.data.upper().strip()
|
||||
stm = text(
|
||||
@ -1457,6 +1549,10 @@ def edit_stage_apprentissage(entreprise_id, stage_apprentissage_id):
|
||||
description=f"etudiant {stage_apprentissage.etudid} inconnue"
|
||||
)
|
||||
form = StageApprentissageModificationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
etudiant_nomcomplet = form.etudiant.data.upper().strip()
|
||||
stm = text(
|
||||
@ -1522,6 +1618,10 @@ def delete_stage_apprentissage(entreprise_id, stage_apprentissage_id):
|
||||
id=stage_apprentissage_id, entreprise_id=entreprise_id
|
||||
).first_or_404(description=f"stage_apprentissage {stage_apprentissage_id} inconnu")
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
db.session.delete(stage_apprentissage)
|
||||
log = EntrepriseHistorique(
|
||||
@ -1562,6 +1662,10 @@ def envoyer_offre(entreprise_id, offre_id):
|
||||
description=f"offre {offre_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = EnvoiOffreForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
for responsable in form.responsables.entries:
|
||||
if responsable.data.strip():
|
||||
@ -1666,7 +1770,7 @@ def export_donnees():
|
||||
|
||||
@bp.route("/import_donnees/get_file_sample")
|
||||
@permission_required(Permission.RelationsEntreprisesExport)
|
||||
def get_import_donnees_file_sample():
|
||||
def import_donnees_get_file_sample():
|
||||
"""
|
||||
Permet de récupérer un fichier exemple vide pour pouvoir importer des entreprises
|
||||
"""
|
||||
@ -1801,6 +1905,10 @@ def add_offre_file(entreprise_id, offre_id):
|
||||
description=f"offre {offre_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = AjoutFichierForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
date = f"{datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}"
|
||||
path = os.path.join(
|
||||
@ -1840,6 +1948,10 @@ def delete_offre_file(entreprise_id, offre_id, filedir):
|
||||
description=f"offre {offre_id} inconnue pour l'entreprise {entreprise_id}"
|
||||
)
|
||||
form = SuppressionConfirmationForm()
|
||||
if request.method == "POST" and form.cancel.data:
|
||||
return redirect(
|
||||
url_for("entreprises.fiche_entreprise", entreprise_id=entreprise_id)
|
||||
)
|
||||
if form.validate_on_submit():
|
||||
path = os.path.join(
|
||||
Config.SCODOC_VAR_DIR,
|
||||
@ -1864,27 +1976,9 @@ def delete_offre_file(entreprise_id, offre_id, filedir):
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/preferences", methods=["GET", "POST"])
|
||||
@permission_required(Permission.RelationsEntreprisesValidate)
|
||||
def preferences():
|
||||
"""
|
||||
Permet d'afficher la page des préférences du module gestion des relations entreprises
|
||||
"""
|
||||
form = PreferencesForm()
|
||||
if form.validate_on_submit():
|
||||
EntreprisePreferences.set_email_notifications(form.mail_entreprise.data.strip())
|
||||
EntreprisePreferences.set_check_siret(int(form.check_siret.data))
|
||||
return redirect(url_for("entreprises.index"))
|
||||
elif request.method == "GET":
|
||||
form.mail_entreprise.data = EntreprisePreferences.get_email_notifications()
|
||||
form.check_siret.data = int(EntreprisePreferences.get_check_siret())
|
||||
return render_template(
|
||||
"entreprises/preferences.html",
|
||||
title="Préférences",
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
@bp.errorhandler(404)
|
||||
def not_found_error_handler(e):
|
||||
"""
|
||||
Renvoie une page d'erreur pour l'erreur 404
|
||||
"""
|
||||
return render_template("entreprises/error.html", title="Erreur", e=e)
|
||||
|
@ -184,6 +184,10 @@
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#form-entreprise-filter > label {
|
||||
#form-entreprise-filter > div {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#form-entreprise-filter > div > label {
|
||||
margin-right: 20px;
|
||||
}
|
@ -1,53 +1,53 @@
|
||||
{# -*- mode: jinja-html -*- #}
|
||||
<div class="offre">
|
||||
<div style="word-break:break-all; text-align: justify;">
|
||||
Ajouté le {{ offre[0].date_ajout.strftime('%d/%m/%y') }} à {{ offre[0].date_ajout.strftime('%Hh%M') }}<br>
|
||||
Intitulé : {{ offre[0].intitule }}<br>
|
||||
Description : {{ offre[0].description }}<br>
|
||||
Type de l'offre : {{ offre[0].type_offre }}<br>
|
||||
Missions : {{ offre[0].missions }}<br>
|
||||
Durée : {{ offre[0].duree }}<br>
|
||||
{% if offre[2] %}
|
||||
Département(s) : {% for offre_dept in offre[2] %} <div class="offre-depts">{{ offre_dept.dept_id|get_dept_acronym }}</div> {% endfor %}<br>
|
||||
Ajouté le {{ offre.date_ajout.strftime('%d/%m/%y') }} à {{ offre.date_ajout.strftime('%Hh%M') }}<br>
|
||||
Intitulé : {{ offre.intitule }}<br>
|
||||
Description : {{ offre.description }}<br>
|
||||
Type de l'offre : {{ offre.type_offre }}<br>
|
||||
Missions : {{ offre.missions }}<br>
|
||||
Durée : {{ offre.duree }}<br>
|
||||
{% if offre_depts %}
|
||||
Département(s) : {% for offre_dept in offre_depts %} <div class="offre-depts">{{ offre_dept.dept_id|get_dept_acronym }}</div> {% endfor %}<br>
|
||||
{% endif %}
|
||||
|
||||
{% if offre[0].correspondant_id %}
|
||||
Contacté {{ offre[3].nom }} {{ offre[3].prenom }}
|
||||
{% if offre[3].mail and offre[3].telephone %}
|
||||
({{ offre[3].mail }} - {{ offre[3].telephone }})<br>
|
||||
{% if offre.correspondant_id %}
|
||||
Contacté {{ correspondant.nom }} {{ correspondant.prenom }}
|
||||
{% if correspondant.mail and correspondant.telephone %}
|
||||
({{ correspondant.mail }} - {{ correspondant.telephone }})<br>
|
||||
{% else %}
|
||||
({{ offre[3].mail }}{{offre[3].telephone}})<br>
|
||||
({{ correspondant.mail }}{{ correspondant.telephone }})<br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% for fichier in offre[1] %}
|
||||
<a href="{{ url_for('entreprises.get_offre_file', entreprise_id=entreprise.id, offre_id=offre[0].id, filedir=fichier[0], filename=fichier[1] )}}">{{ fichier[1] }}</a>
|
||||
{% for filedir, filename in files %}
|
||||
<a href="{{ url_for('entreprises.get_offre_file', entreprise_id=entreprise.id, offre_id=offre.id, filedir=filedir, filename=filename )}}">{{ filename }}</a>
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
<a href="{{ url_for('entreprises.delete_offre_file', entreprise_id=entreprise.id, offre_id=offre[0].id, filedir=fichier[0] )}}" style="margin-left: 5px;"><img title="Supprimer fichier" alt="supprimer" width="10" height="9" border="0" src="/ScoDoc/static/icons/delete_small_img.png" /></a>
|
||||
<a href="{{ url_for('entreprises.delete_offre_file', entreprise_id=entreprise.id, offre_id=offre.id, filedir=filedir )}}" style="margin-left: 5px;"><img title="Supprimer fichier" alt="supprimer" width="10" height="9" border="0" src="/ScoDoc/static/icons/delete_small_img.png" /></a>
|
||||
{% endif %}
|
||||
<br>
|
||||
{% endfor %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
<a href="{{ url_for('entreprises.add_offre_file', entreprise_id=entreprise.id, offre_id=offre[0].id) }}">Ajoutez un fichier</a>
|
||||
<a href="{{ url_for('entreprises.add_offre_file', entreprise_id=entreprise.id, offre_id=offre.id) }}">Ajoutez un fichier</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="parent-btn">
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.edit_offre', entreprise_id=offre[0].entreprise_id, offre_id=offre[0].id) }}">Modifier l'offre</a>
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_offre', entreprise_id=offre[0].entreprise_id, offre_id=offre[0].id) }}">Supprimer l'offre</a>
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.edit_offre', entreprise_id=offre.entreprise_id, offre_id=offre.id) }}">Modifier l'offre</a>
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_offre', entreprise_id=offre.entreprise_id, offre_id=offre.id) }}">Supprimer l'offre</a>
|
||||
{% endif %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesSend, None) %}
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.envoyer_offre', entreprise_id=entreprise.id, offre_id=offre[0].id) }}">Envoyer l'offre</a>
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.envoyer_offre', entreprise_id=entreprise.id, offre_id=offre.id) }}">Envoyer l'offre</a>
|
||||
{% endif %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
{% if not offre[0].expired %}
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.expired', entreprise_id=offre[0].entreprise_id, offre_id=offre[0].id) }}">Rendre expirée</a>
|
||||
{% if not offre.expired %}
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.expired', entreprise_id=offre.entreprise_id, offre_id=offre.id) }}">Rendre expirée</a>
|
||||
{% else %}
|
||||
<a class="btn btn-success" href="{{ url_for('entreprises.expired', entreprise_id=offre[0].entreprise_id, offre_id=offre[0].id) }}">Rendre non expirée</a>
|
||||
<a class="btn btn-success" href="{{ url_for('entreprises.expired', entreprise_id=offre.entreprise_id, offre_id=offre.id) }}">Rendre non expirée</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
@ -37,15 +37,15 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for correspondant in correspondants %}
|
||||
{% for correspondant, site in correspondants %}
|
||||
<tr>
|
||||
<td>{{ correspondant[0].nom }}</td>
|
||||
<td>{{ correspondant[0].prenom }}</td>
|
||||
<td>{{ correspondant[0].telephone }}</td>
|
||||
<td>{{ correspondant[0].mail }}</td>
|
||||
<td>{{ correspondant[0].poste}}</td>
|
||||
<td>{{ correspondant[0].service}}</td>
|
||||
<td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=correspondant[1].entreprise.id) }}">{{ correspondant[1].nom }}</a></td>
|
||||
<td>{{ correspondant.nom }}</td>
|
||||
<td>{{ correspondant.prenom }}</td>
|
||||
<td>{{ correspondant.telephone }}</td>
|
||||
<td>{{ correspondant.mail }}</td>
|
||||
<td>{{ correspondant.poste}}</td>
|
||||
<td>{{ correspondant.service}}</td>
|
||||
<td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=site.entreprise.id) }}">{{ site.nom }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -39,9 +39,9 @@
|
||||
{% if form %}
|
||||
<form id="form-entreprise-filter" method="POST" action="">
|
||||
{{ form.hidden_tag() }}
|
||||
<input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }}
|
||||
<input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }}
|
||||
<input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }}
|
||||
<div><input id="active" name="active" type="checkbox" onChange="form.submit()" {% if checked[0] %} checked {% endif %}> {{ form.active.label }}</div>
|
||||
<div><input id="association" name="association" type="checkbox" onChange="form.submit()" {% if checked[1] %} checked {% endif %}> {{ form.association.label }}</div>
|
||||
<div><input id="siret_provisoire" name="siret_provisoire" type="checkbox" onChange="form.submit()" {% if checked[2] %} checked {% endif %}> {{ form.siret_provisoire.label }}</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
<table id="table-entreprises">
|
||||
@ -61,7 +61,7 @@
|
||||
<tbody>
|
||||
{% for entreprise in entreprises %}
|
||||
<tr>
|
||||
<td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id) }}" {% if not entreprise.active %} style="color:red" {% endif %}>{{ entreprise.siret }}</a></td>
|
||||
<td><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=entreprise.id) }}" style="{% if not entreprise.active %}color:red;{% endif %}{% if entreprise.siret_provisoire %}font-weight:bold;{% endif %}" >{{ entreprise.siret }}</a></td>
|
||||
<td>{{ entreprise.nom }}</td>
|
||||
<td>{{ entreprise.adresse }}</td>
|
||||
<td>{{ entreprise.codepostal }}</td>
|
||||
|
@ -48,7 +48,7 @@
|
||||
|
||||
<div class="entreprise">
|
||||
<div>
|
||||
SIRET : {{ entreprise.siret }}<br>
|
||||
SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}<br>
|
||||
Nom : {{ entreprise.nom }}<br>
|
||||
Adresse : {{ entreprise.adresse }}<br>
|
||||
Code postal : {{ entreprise.codepostal }}<br>
|
||||
@ -126,7 +126,7 @@
|
||||
{% if offres %}
|
||||
<div>
|
||||
<h3>Offres - <a href="{{ url_for('entreprises.offres_expirees', entreprise_id=entreprise.id) }}">Voir les offres expirées</a></h3>
|
||||
{% for offre in offres %}
|
||||
{% for offre, files, offre_depts, correspondant in offres %}
|
||||
{% include 'entreprises/_offre.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@ -155,15 +155,15 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for data in stages_apprentissages %}
|
||||
{% for stage_apprentissage, etudiant in stages_apprentissages %}
|
||||
<tr>
|
||||
<td>{{ data[0].date_debut.strftime('%d/%m/%Y') }}</td>
|
||||
<td>{{ data[0].date_fin.strftime('%d/%m/%Y') }}</td>
|
||||
<td>{{ (data[0].date_fin-data[0].date_debut).days//7 }} semaines</td>
|
||||
<td>{{ data[0].type_offre }}</td>
|
||||
<td><a href="{{ url_for('scolar.ficheEtud', scodoc_dept=data[1].dept_id|get_dept_acronym, etudid=data[0].etudid) }}">{{ data[1].nom|format_nom }} {{ data[1].prenom|format_prenom }}</a></td>
|
||||
<td>{% if data[0].formation_text %}{{ data[0].formation_text }}{% endif %}</td>
|
||||
<td>{{ data[0].notes }}</td>
|
||||
<td>{{ stage_apprentissage.date_debut.strftime('%d/%m/%Y') }}</td>
|
||||
<td>{{ stage_apprentissage.date_fin.strftime('%d/%m/%Y') }}</td>
|
||||
<td>{{ (stage_apprentissage.date_fin-stage_apprentissage.date_debut).days//7 }} semaines</td>
|
||||
<td>{{ stage_apprentissage.type_offre }}</td>
|
||||
<td><a href="{{ url_for('scolar.ficheEtud', scodoc_dept=etudiant.dept_id|get_dept_acronym, etudid=stage_apprentissage.etudid) }}">{{ etudiant.nom|format_nom }} {{ etudiant.prenom|format_prenom }}</a></td>
|
||||
<td>{% if stage_apprentissage.formation_text %}{{ stage_apprentissage.formation_text }}{% endif %}</td>
|
||||
<td>{{ stage_apprentissage.notes }}</td>
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
@ -171,8 +171,8 @@
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu pull-left">
|
||||
<li><a href="{{ url_for('entreprises.edit_stage_apprentissage', entreprise_id=entreprise.id, stage_apprentissage_id=data[0].id) }}">Modifier</a></li>
|
||||
<li><a href="{{ url_for('entreprises.delete_stage_apprentissage', entreprise_id=entreprise.id, stage_apprentissage_id=data[0].id) }}" style="color:red">Supprimer</a></li>
|
||||
<li><a href="{{ url_for('entreprises.edit_stage_apprentissage', entreprise_id=entreprise.id, stage_apprentissage_id=stage_apprentissage.id) }}">Modifier</a></li>
|
||||
<li><a href="{{ url_for('entreprises.delete_stage_apprentissage', entreprise_id=entreprise.id, stage_apprentissage_id=stage_apprentissage.id) }}" style="color:red">Supprimer</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -2,12 +2,23 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block app_content %}
|
||||
<div class="container">
|
||||
<ul class="breadcrumbs">
|
||||
<li class="breadcrumbs_item">
|
||||
<a href="{{ url_for('entreprises.validation') }}" class="breadcrumbs_link">Entreprises</a>
|
||||
</li>
|
||||
<li class="breadcrumbs_item">
|
||||
<a href="" class="breadcrumbs_link breadcrumbs_link-active">Fiche entreprise</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<h2>Fiche entreprise - {{ entreprise.nom }} ({{ entreprise.siret }})</h2>
|
||||
|
||||
<div class="entreprise">
|
||||
<div>
|
||||
SIRET : {{ entreprise.siret }}<br>
|
||||
SIRET {% if entreprise.siret_provisoire %}provisoire{% endif %} : {{ entreprise.siret }}<br>
|
||||
Nom : {{ entreprise.nom }}<br>
|
||||
Adresse : {{ entreprise.adresse }}<br>
|
||||
Code postal : {{ entreprise.codepostal }}<br>
|
||||
|
@ -32,7 +32,8 @@
|
||||
{{ form.correspondants }}
|
||||
<div style="margin-bottom: 10px;">
|
||||
<button class="btn btn-default" id="add-correspondant-field">Ajouter un correspondant</button>
|
||||
<input class="btn btn-default" type="submit" value="Envoyer">
|
||||
{{ form.submit(class_="btn btn-default") }}
|
||||
{{ form.cancel(class_="btn btn-default") }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -25,7 +25,8 @@
|
||||
{{ form.responsables }}
|
||||
<div style="margin-bottom: 10px;">
|
||||
<button class="btn btn-default" id="add-responsable-field">Ajouter un responsable</button>
|
||||
<input class="btn btn-default" type="submit" value="Envoyer">
|
||||
{{ form.submit(class_="btn btn-default") }}
|
||||
{{ form.cancel(class_="btn btn-default") }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@
|
||||
<h1>{{ title }}</h1>
|
||||
<br>
|
||||
<div>
|
||||
<a href="{{ url_for('entreprises.get_import_donnees_file_sample') }}">Obtenir la feuille excel à remplir</a>
|
||||
<a href="{{ url_for('entreprises.import_donnees_get_file_sample') }}">Obtenir la feuille excel à remplir</a>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
|
@ -19,7 +19,7 @@
|
||||
<div class="container">
|
||||
<h1>Offres expirées - {{ entreprise.nom }}</h1>
|
||||
{% if offres_expirees %}
|
||||
{% for offre in offres_expirees %}
|
||||
{% for offre, files, offre_depts, correspondant in offres_expirees %}
|
||||
{% include 'entreprises/_offre.html' %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
|
@ -7,41 +7,41 @@
|
||||
<div class="container">
|
||||
<h1>Offres reçues</h1>
|
||||
{% if offres_recues %}
|
||||
{% for offre in offres_recues %}
|
||||
{% for envoi_offre, offre, files, correspondant in offres_recues %}
|
||||
<div class="offre offre-recue">
|
||||
<div style="word-break:break-all; text-align: justify;">
|
||||
Envoyé le {{ offre[0].date_envoi.strftime('%d/%m/%Y') }} à {{ offre[0].date_envoi.strftime('%Hh%M') }} par {{ offre[0].sender_id|get_nomcomplet_by_id }}<br>
|
||||
Intitulé : {{ offre[1].intitule }}<br>
|
||||
Description : {{ offre[1].description }}<br>
|
||||
Type de l'offre : {{ offre[1].type_offre }}<br>
|
||||
Missions : {{ offre[1].missions }}<br>
|
||||
Durée : {{ offre[1].duree }}<br>
|
||||
Envoyé le {{ envoi_offre.date_envoi.strftime('%d/%m/%Y') }} à {{ envoi_offre.date_envoi.strftime('%Hh%M') }} par {{ envoi_offre.sender_id|get_nomcomplet_by_id }}<br>
|
||||
Intitulé : {{ offre.intitule }}<br>
|
||||
Description : {{ offre.description }}<br>
|
||||
Type de l'offre : {{ offre.type_offre }}<br>
|
||||
Missions : {{ offre.missions }}<br>
|
||||
Durée : {{ offre.duree }}<br>
|
||||
|
||||
{% if offre[1].correspondant_id %}
|
||||
Contacté {{ offre[3].nom }} {{ offre[3].prenom }}
|
||||
{% if offre[3].mail and offre[3].telephone %}
|
||||
({{ offre[3].mail }} - {{ offre[3].telephone }})
|
||||
{% if offre.correspondant_id %}
|
||||
Contacté {{ correspondant.nom }} {{ correspondant.prenom }}
|
||||
{% if correspondant.mail and correspondant.telephone %}
|
||||
({{ correspondant.mail }} - {{ correspondant.telephone }})
|
||||
{% else %}
|
||||
({{ offre[3].mail }}{{ offre[3].telephone }})
|
||||
({{ correspondant.mail }}{{ correspondant.telephone }})
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if offre[3].poste %}
|
||||
, poste : {{ offre[3].poste }}
|
||||
{% if correspondant.poste %}
|
||||
- poste : {{ correspondant.poste }}
|
||||
{% endif %}
|
||||
{% if offre[3].service %}
|
||||
, service : {{ offre[3].service }}
|
||||
{% if correspondant.service %}
|
||||
- service : {{ correspondant.service }}
|
||||
{% endif %}
|
||||
<br>
|
||||
|
||||
<a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=offre[1].entreprise_id) }}">lien vers l'entreprise</a><br>
|
||||
<a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=offre.entreprise_id) }}">lien vers l'entreprise</a><br>
|
||||
|
||||
{% for fichier in offre[2] %}
|
||||
<a href="{{ url_for('entreprises.get_offre_file', entreprise_id=offre[1].entreprise_id, offre_id=offre[1].id, filedir=fichier[0], filename=fichier[1]) }}">{{ fichier[1] }}</a><br>
|
||||
{% for filedir, filename in files %}
|
||||
<a href="{{ url_for('entreprises.get_offre_file', entreprise_id=offre.entreprise_id, offre_id=offre.id, filedir=filedir, filename=filename) }}">{{ filename }}</a><br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div>
|
||||
<a href="{{ url_for('entreprises.delete_offre_recue', envoi_offre_id=offre[0].id) }}" style="margin-left: 5px;"><img title="Supprimer" alt="supprimer" width="16" height="16" border="0" src="/ScoDoc/static/icons/delete_small_img.png" /></a>
|
||||
<a href="{{ url_for('entreprises.delete_offre_recue', envoi_offre_id=envoi_offre.id) }}" style="margin-left: 5px;"><img title="Supprimer" alt="supprimer" width="16" height="16" border="0" src="/ScoDoc/static/icons/delete_small_img.png" /></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
Loading…
Reference in New Issue
Block a user