diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py index a1619007..610aa360 100644 --- a/app/entreprises/forms.py +++ b/app/entreprises/forms.py @@ -50,6 +50,7 @@ from app.entreprises.models import ( Entreprise, EntrepriseCorrespondant, EntreprisePreferences, + EntrepriseSite, ) from app.models import Identite, Departement from app.auth.models import User @@ -171,6 +172,7 @@ class EntrepriseModificationForm(FlaskForm): class SiteCreationForm(FlaskForm): + hidden_entreprise_id = HiddenField() nom = _build_string_field("Nom du site (*)") adresse = _build_string_field("Adresse (*)") codepostal = _build_string_field("Code postal (*)") @@ -178,6 +180,49 @@ class SiteCreationForm(FlaskForm): pays = _build_string_field("Pays", required=False) submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE) + def validate(self): + validate = True + if not FlaskForm.validate(self): + validate = False + + site = EntrepriseSite.query.filter_by( + entreprise_id=self.hidden_entreprise_id.data, nom=self.nom.data + ).first() + + if site is not None: + self.nom.errors.append("Ce site existe déjà (même nom)") + validate = False + + return validate + + +class SiteModificationForm(FlaskForm): + hidden_entreprise_id = HiddenField() + hidden_site_id = HiddenField() + nom = _build_string_field("Nom du site (*)") + adresse = _build_string_field("Adresse (*)") + codepostal = _build_string_field("Code postal (*)") + ville = _build_string_field("Ville (*)") + pays = _build_string_field("Pays", required=False) + submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE) + + def validate(self): + validate = True + if not FlaskForm.validate(self): + validate = False + + site = EntrepriseSite.query.filter( + EntrepriseSite.entreprise_id == self.hidden_entreprise_id.data, + EntrepriseSite.id != self.hidden_site_id.data, + EntrepriseSite.nom == self.nom.data, + ).first() + + if site is not None: + self.nom.errors.append("Ce site existe déjà (même nom)") + validate = False + + return validate + class MultiCheckboxField(SelectMultipleField): widget = ListWidget(prefix_label=False) diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index b815b229..447484a9 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -17,6 +17,7 @@ from app.entreprises.forms import ( EntrepriseCreationForm, EntrepriseModificationForm, SiteCreationForm, + SiteModificationForm, SuppressionConfirmationForm, OffreCreationForm, OffreModificationForm, @@ -110,8 +111,9 @@ def correspondants(): Permet d'afficher une page avec la liste des correspondants des entreprises visibles et une liste des dernières opérations """ correspondants = ( - db.session.query(EntrepriseCorrespondant, Entreprise) - .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) + db.session.query(EntrepriseCorrespondant, EntrepriseSite) + .join(EntrepriseSite, EntrepriseCorrespondant.site_id == EntrepriseSite.id) + .join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id) .filter_by(visible=True, active=True) ) logs = EntrepriseLog.query.order_by(EntrepriseLog.date.desc()).limit(LOGS_LEN).all() @@ -700,7 +702,7 @@ def add_site(id): entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( description=f"entreprise {id} inconnue" ) - form = SiteCreationForm() + form = SiteCreationForm(hidden_entreprise_id=id) if form.validate_on_submit(): site = EntrepriseSite( entreprise_id=entreprise.id, @@ -721,6 +723,38 @@ def add_site(id): ) +@bp.route( + "/fiche_entreprise//edit_site/", + methods=["GET", "POST"], +) +def edit_site(id_entreprise, id_site): + site = EntrepriseSite.query.filter_by( + id=id_site, entreprise_id=id_entreprise + ).first_or_404(description=f"site {id_site} inconnu") + form = SiteModificationForm( + hidden_entreprise_id=id_entreprise, hidden_site_id=id_site + ) + if form.validate_on_submit(): + site.nom = form.nom.data.strip() + site.adresse = form.adresse.data.strip() + site.codepostal = form.codepostal.data.strip() + site.ville = form.ville.data.strip() + site.pays = (form.pays.data.strip() if form.pays.data.strip() else "FRANCE",) + db.session.commit() + return redirect(url_for("entreprises.fiche_entreprise", id=site.entreprise_id)) + elif request.method == "GET": + form.nom.data = site.nom + form.adresse.data = site.adresse + form.codepostal.data = site.codepostal + form.ville.data = site.ville + form.pays.data = site.pays + return render_template( + "entreprises/form.html", + title="Modification site", + form=form, + ) + + @bp.route( "/fiche_entreprise//add_correspondant/", methods=["GET", "POST"], diff --git a/app/templates/entreprises/correspondants.html b/app/templates/entreprises/correspondants.html index 047b57aa..14804dd0 100644 --- a/app/templates/entreprises/correspondants.html +++ b/app/templates/entreprises/correspondants.html @@ -54,7 +54,7 @@ {{ correspondant[0].mail }} {{ correspondant[0].poste}} {{ correspondant[0].service}} - {{ correspondant[1].nom }} + {{ correspondant[1].nom }} {% endfor %} diff --git a/app/templates/entreprises/fiche_entreprise.html b/app/templates/entreprises/fiche_entreprise.html index 327a3bf7..787bc483 100644 --- a/app/templates/entreprises/fiche_entreprise.html +++ b/app/templates/entreprises/fiche_entreprise.html @@ -61,7 +61,10 @@ Ville : {{ site.ville }}
Pays : {{ site.pays }} {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %} -
Ajouter correspondant +
+ Modifier + Ajouter correspondant +
{% endif %} {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesCorrespondants, None) %} {% for correspondant in site.correspondants %}