diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index e3c0d1da..d0123bb2 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -137,7 +137,7 @@ def verif_correspondant_data(correspondant_data): correspondant_data[3]: mail correspondant_data[4]: poste correspondant_data[5]: service - correspondant_data[6]: entreprise_id + correspondant_data[6]: entreprise_siret """ # champs obligatoires if ( @@ -182,7 +182,7 @@ def verif_entreprise_data(entreprise_data): if data.strip() == "": return False if EntreprisePreferences.get_check_siret(): - siret = entreprise_data[0].replace(" ", "") # vérification sur le siret + siret = entreprise_data[0].strip().replace(" ", "") # vérification sur le siret if re.match("^\d{14}$", siret) is None: return False try: diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py index 13057237..ff95217a 100644 --- a/app/entreprises/forms.py +++ b/app/entreprises/forms.py @@ -135,7 +135,7 @@ class EntrepriseCreationForm(FlaskForm): def validate_siret(self, siret): if EntreprisePreferences.get_check_siret(): - siret_data = siret.data.replace(" ", "") + siret_data = siret.data.strip().replace(" ", "") self.siret.data = siret_data if re.match("^\d{14}$", siret_data) is None: raise ValidationError("Format incorrect") @@ -605,6 +605,11 @@ class SuppressionConfirmationForm(FlaskForm): submit = SubmitField("Supprimer", render_kw=SUBMIT_MARGE) +class DesactivationConfirmationForm(FlaskForm): + notes_active = TextAreaField("Notes sur la désactivation", validators=[Optional()]) + submit = SubmitField("Désactiver", render_kw=SUBMIT_MARGE) + + class ValidationConfirmationForm(FlaskForm): submit = SubmitField("Valider", render_kw=SUBMIT_MARGE) diff --git a/app/entreprises/models.py b/app/entreprises/models.py index 5e6de746..8ea8ef2a 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -12,6 +12,7 @@ class Entreprise(db.Model): pays = db.Column(db.Text, default="FRANCE") visible = db.Column(db.Boolean, default=False) active = db.Column(db.Boolean, default=True) + notes_active = db.Column(db.Text) correspondants = db.relationship( "EntrepriseCorrespondant", backref="entreprise", diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index cc9de05f..107aa436 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -13,6 +13,7 @@ from app.decorators import permission_required from app.entreprises import LOGS_LEN from app.entreprises.forms import ( CorrespondantsCreationForm, + DesactivationConfirmationForm, EntrepriseCreationForm, EntrepriseModificationForm, SuppressionConfirmationForm, @@ -101,7 +102,7 @@ def validation(): @bp.route("/correspondants", methods=["GET"]) -@permission_required(Permission.RelationsEntreprisesView) +@permission_required(Permission.RelationsEntreprisesCorrespondants) def correspondants(): """ Permet d'afficher une page avec la liste des correspondants des entreprises visibles et une liste des dernières opérations @@ -109,7 +110,7 @@ def correspondants(): correspondants = ( db.session.query(EntrepriseCorrespondant, Entreprise) .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) - .filter_by(visible=True) + .filter_by(visible=True, active=True) ) logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all() return render_template( @@ -129,9 +130,9 @@ def fiche_entreprise(id): 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=id, visible=True).first_or_404( - description=f"fiche entreprise {id} inconnue" - ) + entreprise = Entreprise.query.filter_by( + id=id, visible=True, active=True + ).first_or_404(description=f"fiche entreprise {id} inconnue") offres_with_files = [] depts = are.get_depts() for offre in entreprise.offres: @@ -145,7 +146,9 @@ def fiche_entreprise(id): 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) - correspondants = entreprise.correspondants[:] + correspondants = [] + if current_user.has_permission(Permission.RelationsEntreprisesCorrespondants, None): + correspondants = entreprise.correspondants[:] logs = ( EntrepriseLog.query.order_by(EntrepriseLog.date.desc()) .filter_by(object=id) @@ -437,21 +440,35 @@ def delete_entreprise(id): flash("L'entreprise a été supprimé de la liste.") return redirect(url_for("entreprises.index")) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Supression entreprise", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) @bp.route("/fiche_entreprise/desactiver/", methods=["GET", "POST"]) +@permission_required(Permission.RelationsEntreprisesChange) def fiche_entreprise_desactiver(id): + """ + Permet de désactiver une entreprise + """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( description=f"entreprise {id} inconnue" ) - entreprise.active = False - db.session.commit() - flash("L'entreprise a été désactivé.") - return redirect(url_for("entreprises.index")) + form = DesactivationConfirmationForm() + if form.validate_on_submit(): + entreprise.notes_active = form.notes_active.data.strip() + entreprise.active = False + db.session.commit() + flash("L'entreprise a été désactivé.") + return redirect(url_for("entreprises.index")) + return render_template( + "entreprises/confirmation_form.html", + title="Désactiver entreprise", + form=form, + info_message="Cliquez sur le bouton Désactiver pour confirmer la désactivation", + ) @bp.route( @@ -503,9 +520,10 @@ def delete_validation_entreprise(id): flash("L'entreprise a été supprimé de la liste des entreprise à valider.") return redirect(url_for("entreprises.validation")) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Supression entreprise", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) @@ -659,9 +677,10 @@ def delete_offre(id): flash("L'offre a été supprimé de la fiche entreprise.") return redirect(url_for("entreprises.fiche_entreprise", id=entreprise_id)) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Supression offre", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) @@ -813,9 +832,10 @@ def delete_correspondant(id): url_for("entreprises.fiche_entreprise", id=correspondant.entreprise_id) ) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Supression correspondant", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) @@ -1039,9 +1059,10 @@ def delete_stage_apprentissage(id): ) ) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Supression stage/apprentissage", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) @@ -1503,9 +1524,10 @@ def delete_offre_file(offre_id, filedir): url_for("entreprises.fiche_entreprise", id=offre.entreprise_id) ) return render_template( - "entreprises/delete_confirmation.html", + "entreprises/confirmation_form.html", title="Suppression fichier d'une offre", form=form, + info_message="Cliquez sur le bouton Supprimer pour confirmer votre supression", ) diff --git a/app/scodoc/sco_permissions.py b/app/scodoc/sco_permissions.py index c72b3ff5..b57374fb 100644 --- a/app/scodoc/sco_permissions.py +++ b/app/scodoc/sco_permissions.py @@ -47,6 +47,7 @@ _SCO_PERMISSIONS = ( ), (1 << 25, "RelationsEntreprisesSend", "Envoyer des offres"), (1 << 26, "RelationsEntreprisesValidate", "Valide les entreprises"), + (1 << 27, "RelationsEntreprisesCorrespondants", "Voir les correspondants"), ) diff --git a/app/scodoc/sco_roles_default.py b/app/scodoc/sco_roles_default.py index 9529b031..df0cd453 100644 --- a/app/scodoc/sco_roles_default.py +++ b/app/scodoc/sco_roles_default.py @@ -62,7 +62,11 @@ SCO_ROLES_DEFAULTS = { # ObservateurEntreprise est un observateur de l'application entreprise "ObservateurEntreprise": (p.RelationsEntreprisesView,), # UtilisateurEntreprise est un utilisateur de l'application entreprise (droit de modification) - "UtilisateurEntreprise": (p.RelationsEntreprisesView, p.RelationsEntreprisesChange), + "UtilisateurEntreprise": ( + p.RelationsEntreprisesView, + p.RelationsEntreprisesChange, + p.RelationsEntreprisesCorrespondants, + ), # AdminEntreprise est un admin de l'application entreprise (toutes les actions possibles de l'application) "AdminEntreprise": ( p.RelationsEntreprisesView, @@ -70,6 +74,7 @@ SCO_ROLES_DEFAULTS = { p.RelationsEntreprisesExport, p.RelationsEntreprisesSend, p.RelationsEntreprisesValidate, + p.RelationsEntreprisesCorrespondants, ), # Super Admin est un root: création/suppression de départements # _tous_ les droits diff --git a/app/templates/entreprises/delete_confirmation.html b/app/templates/entreprises/confirmation_form.html similarity index 75% rename from app/templates/entreprises/delete_confirmation.html rename to app/templates/entreprises/confirmation_form.html index abd59c47..fb873788 100644 --- a/app/templates/entreprises/delete_confirmation.html +++ b/app/templates/entreprises/confirmation_form.html @@ -5,7 +5,7 @@ {% block app_content %}

{{ title }}


-
Cliquez sur le bouton Supprimer pour confirmer votre supression
+
{{ info_message }}

diff --git a/app/templates/entreprises/fiche_entreprise.html b/app/templates/entreprises/fiche_entreprise.html index b8d4b123..938be46b 100644 --- a/app/templates/entreprises/fiche_entreprise.html +++ b/app/templates/entreprises/fiche_entreprise.html @@ -71,20 +71,20 @@
- {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %} - Ajouter stage ou apprentissage - {% endif %}

Liste des stages et apprentissages réalisés au sein de l'entreprise

+ {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %} + Ajouter stage ou apprentissage + {% endif %} - - - - - - - + + + + + + + {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %} {% endif %} diff --git a/app/templates/entreprises/nav.html b/app/templates/entreprises/nav.html index 50bca601..3cd9636d 100644 --- a/app/templates/entreprises/nav.html +++ b/app/templates/entreprises/nav.html @@ -2,7 +2,9 @@
Date débutDate finDuréeTypeÉtudiantFormationNotesDate débutDate finDuréeTypeÉtudiantFormationNotesAction