diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index b5b14dab7..86415c472 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -239,7 +239,8 @@ def get_excel_book_are(export: bool = False): ) correspondants = ( db.session.query(EntrepriseCorrespondant) - .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) + .join(EntrepriseSite, EntrepriseCorrespondant.site_id == EntrepriseSite.id) + .join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id) .filter_by(visible=True) .all() ) @@ -391,7 +392,6 @@ def check_sites_import(m): sites_import.append(site_import) else: correspondant_import = EntrepriseCorrespondant( - entreprise_id=entreprise.id, civilite=site_data["civilite"], nom=site_data["nom"], prenom=site_data["prenom"], @@ -414,7 +414,6 @@ def check_sites_import(m): if site_data["civilite"] != "": correspondant_import = EntrepriseCorrespondant( - entreprise_id=entreprise.id, site_id=site.id, civilite=site_data["civilite"], nom=site_data["nom"], @@ -527,7 +526,7 @@ def check_correspondant_import(correspondant_data): return False # civilite entre H ou F - if correspondant_data["civilite"] not in ["H", "F"]: + if correspondant_data["civilite"].upper() not in ["H", "F"]: return False if ( @@ -544,13 +543,14 @@ def check_correspondant_import(correspondant_data): return False # correspondant possède le meme nom et prénom dans la meme entreprise - correspondant = EntrepriseCorrespondant.query.filter_by( - nom=correspondant_data["nom"], - prenom=correspondant_data["prenom"], - entreprise_id=entreprise.id, - ).first() - if correspondant is not None: - return False + if correspondant_data["id_site"] != "": + correspondant = EntrepriseCorrespondant.query.filter_by( + nom=correspondant_data["nom"], + prenom=correspondant_data["prenom"], + site_id=correspondant_data["id_site"], + ).first() + if correspondant is not None: + return False return True diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py index 61d517b7c..335f7004f 100644 --- a/app/entreprises/forms.py +++ b/app/entreprises/forms.py @@ -99,7 +99,7 @@ class EntrepriseCreationForm(FlaskForm): civilite = SelectField( "Civilité du correspondant", - choices=[("M", "Monsieur"), ("F", "Madame")], + choices=[("H", "Monsieur"), ("F", "Madame")], validators=[DataRequired(message=CHAMP_REQUIS)], ) nom_correspondant = _build_string_field("Nom du correspondant", required=False) @@ -163,10 +163,13 @@ class EntrepriseCreationForm(FlaskForm): raise ValidationError("Impossible de vérifier l'existance du SIRET") entreprise = Entreprise.query.filter_by(siret=siret_data).first() if entreprise is not None: - lien = f'ici' - raise ValidationError( - Markup(f"Entreprise déjà présent, lien vers la fiche : {lien}") - ) + if entreprise.visible is True: + lien = f'ici' + raise ValidationError( + Markup(f"Entreprise déjà présent, lien vers la fiche : {lien}") + ) + else: + raise ValidationError("Entreprise en phase de validation") class EntrepriseModificationForm(FlaskForm): @@ -393,7 +396,7 @@ class CorrespondantCreationForm(FlaskForm): class CorrespondantsCreationForm(FlaskForm): - hidden_entreprise_id = HiddenField() + hidden_site_id = HiddenField() correspondants = FieldList(FormField(CorrespondantCreationForm), min_entries=1) submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE) @@ -418,7 +421,7 @@ class CorrespondantsCreationForm(FlaskForm): (entry.nom.data.strip(), entry.prenom.data.strip()) ) correspondant = EntrepriseCorrespondant.query.filter_by( - entreprise_id=self.hidden_entreprise_id.data, + site_id=self.hidden_site_id.data, nom=entry.nom.data, prenom=entry.prenom.data, ).first() @@ -433,7 +436,7 @@ class CorrespondantsCreationForm(FlaskForm): class CorrespondantModificationForm(FlaskForm): hidden_correspondant_id = HiddenField() - hidden_entreprise_id = HiddenField() + hidden_site_id = HiddenField() civilite = SelectField( "Civilité (*)", choices=[("H", "Monsieur"), ("F", "Madame")], @@ -459,7 +462,7 @@ class CorrespondantModificationForm(FlaskForm): correspondant = EntrepriseCorrespondant.query.filter( EntrepriseCorrespondant.id != self.hidden_correspondant_id.data, - EntrepriseCorrespondant.entreprise_id == self.hidden_entreprise_id.data, + EntrepriseCorrespondant.site_id == self.hidden_site_id.data, EntrepriseCorrespondant.nom == self.nom.data, EntrepriseCorrespondant.prenom == self.prenom.data, ).first() diff --git a/app/entreprises/models.py b/app/entreprises/models.py index 4edbe458b..b168a94f9 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -79,9 +79,6 @@ class EntrepriseSite(db.Model): class EntrepriseCorrespondant(db.Model): __tablename__ = "are_correspondants" id = db.Column(db.Integer, primary_key=True) - entreprise_id = db.Column( - db.Integer, db.ForeignKey("are_entreprises.id", ondelete="cascade") - ) site_id = db.Column(db.Integer, db.ForeignKey("are_sites.id", ondelete="cascade")) civilite = db.Column(db.String(1)) nom = db.Column(db.Text) diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index ec863bdf0..469f6fd0e 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -354,7 +354,6 @@ def add_entreprise(): if form.nom_correspondant.data.strip(): db.session.refresh(site) correspondant = EntrepriseCorrespondant( - entreprise_id=entreprise.id, site_id=site.id, civilite=form.civilite.data, nom=form.nom_correspondant.data.strip(), @@ -989,11 +988,11 @@ def add_correspondant(entreprise_id, site_id): ).first_or_404( description=f"site {site_id} inconnue pour l'entreprise {entreprise_id}" ) - form = CorrespondantsCreationForm(hidden_entreprise_id=site.entreprise_id) + print(site.entreprise_id) + form = CorrespondantsCreationForm(hidden_site_id=site.id) if form.validate_on_submit(): for correspondant_entry in form.correspondants.entries: correspondant = EntrepriseCorrespondant( - entreprise_id=site.entreprise_id, site_id=site.id, civilite=correspondant_entry.civilite.data, nom=correspondant_entry.nom.data.strip(), @@ -1010,7 +1009,7 @@ def add_correspondant(entreprise_id, site_id): db.session.refresh(correspondant) log = EntrepriseHistorique( authenticated_user=current_user.user_name, - entreprise_id=correspondant.entreprise_id, + entreprise_id=correspondant.site.entreprise.id, object="correspondant", object_id=correspondant.id, text="Création d'un correspondant", @@ -1039,14 +1038,23 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id): """ correspondant = ( db.session.query(EntrepriseCorrespondant) - .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) - .filter( - EntrepriseCorrespondant.id == correspondant_id, Entreprise.visible == True + .join( + EntrepriseSite, + EntrepriseCorrespondant.site_id == EntrepriseSite.id, + ) + .join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id) + .filter( + EntrepriseCorrespondant.id == correspondant_id, + EntrepriseCorrespondant.site_id == site_id, + EntrepriseSite.entreprise_id == entreprise_id, + Entreprise.visible == True, + ) + .first_or_404( + description=f"correspondant {correspondant_id} inconnu pour l'entreprise {entreprise_id} et le site {site_id}" ) - .first_or_404(description=f"correspondant {correspondant_id} inconnu") ) form = CorrespondantModificationForm( - hidden_entreprise_id=correspondant.entreprise_id, + hidden_site_id=correspondant.site.id, hidden_correspondant_id=correspondant.id, ) if form.validate_on_submit(): @@ -1061,7 +1069,7 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id): correspondant.notes = form.notes.data.strip() log = EntrepriseHistorique( authenticated_user=current_user.user_name, - entreprise_id=correspondant.entreprise_id, + entreprise_id=correspondant.site.entreprise.id, object="correspondant", object_id=correspondant.id, text="Modification d'un correspondant", @@ -1072,7 +1080,7 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id): return redirect( url_for( "entreprises.fiche_entreprise", - entreprise_id=correspondant.entreprise_id, + entreprise_id=correspondant.site.entreprise.id, ) ) elif request.method == "GET": @@ -1103,18 +1111,27 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id): """ correspondant = ( db.session.query(EntrepriseCorrespondant) - .join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) - .filter( - EntrepriseCorrespondant.id == correspondant_id, Entreprise.visible == True + .join( + EntrepriseSite, + EntrepriseCorrespondant.site_id == EntrepriseSite.id, + ) + .join(Entreprise, EntrepriseSite.entreprise_id == Entreprise.id) + .filter( + EntrepriseCorrespondant.id == correspondant_id, + EntrepriseCorrespondant.site_id == site_id, + EntrepriseSite.entreprise_id == entreprise_id, + Entreprise.visible == True, + ) + .first_or_404( + description=f"correspondant {correspondant_id} inconnu pour l'entreprise {entreprise_id} et le site {site_id}" ) - .first_or_404(description=f"correspondant {correspondant_id} inconnu") ) form = SuppressionConfirmationForm() if form.validate_on_submit(): db.session.delete(correspondant) log = EntrepriseHistorique( authenticated_user=current_user.user_name, - entreprise_id=correspondant.entreprise_id, + entreprise_id=correspondant.site.entreprise.id, object="correspondant", object_id=correspondant.id, text="Suppression d'un correspondant", @@ -1125,7 +1142,7 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id): return redirect( url_for( "entreprises.fiche_entreprise", - entreprise_id=correspondant.entreprise_id, + entreprise_id=correspondant.site.entreprise.id, ) ) return render_template( diff --git a/app/templates/entreprises/_correspondant.html b/app/templates/entreprises/_correspondant.html index 549c40f09..7d1539b72 100644 --- a/app/templates/entreprises/_correspondant.html +++ b/app/templates/entreprises/_correspondant.html @@ -26,8 +26,8 @@ {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}