From 3a31317e486b7b9675e4f291d4096faba3770bf6 Mon Sep 17 00:00:00 2001 From: Arthur ZHU Date: Mon, 11 Jul 2022 20:17:34 +0200 Subject: [PATCH] =?UTF-8?q?correction=20mod=C3=A8le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/entreprises/app_relations_entreprises.py | 22 ++++---- app/entreprises/forms.py | 21 ++++---- app/entreprises/models.py | 3 -- app/entreprises/routes.py | 51 ++++++++++++------- app/templates/entreprises/_correspondant.html | 4 +- app/templates/entreprises/correspondants.html | 2 +- app/templates/entreprises/import_donnees.html | 2 +- ..._suppression_colonne_are_correspondants.py | 30 +++++++++++ 8 files changed, 91 insertions(+), 44 deletions(-) create mode 100644 migrations/versions/ec4f4f4ae9db_suppression_colonne_are_correspondants.py 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) %}
- Modifier correspondant - Supprimer correspondant + Modifier correspondant + Supprimer correspondant
{% endif %} \ No newline at end of file diff --git a/app/templates/entreprises/correspondants.html b/app/templates/entreprises/correspondants.html index 500c9388d..0f89ffc67 100644 --- a/app/templates/entreprises/correspondants.html +++ b/app/templates/entreprises/correspondants.html @@ -45,7 +45,7 @@ {{ correspondant[0].mail }} {{ correspondant[0].poste}} {{ correspondant[0].service}} - {{ correspondant[1].nom }} + {{ correspondant[1].nom }} {% endfor %} diff --git a/app/templates/entreprises/import_donnees.html b/app/templates/entreprises/import_donnees.html index b61a00fa3..9fa12df27 100644 --- a/app/templates/entreprises/import_donnees.html +++ b/app/templates/entreprises/import_donnees.html @@ -139,7 +139,7 @@ {% if correspondant.notes %} Notes : {{ correspondant.notes }}
{% endif %} - Fiche entreprise + Fiche entreprise {% endfor %} diff --git a/migrations/versions/ec4f4f4ae9db_suppression_colonne_are_correspondants.py b/migrations/versions/ec4f4f4ae9db_suppression_colonne_are_correspondants.py new file mode 100644 index 000000000..a092ab524 --- /dev/null +++ b/migrations/versions/ec4f4f4ae9db_suppression_colonne_are_correspondants.py @@ -0,0 +1,30 @@ +"""suppression colonne are_correspondants + +Revision ID: ec4f4f4ae9db +Revises: 0b337376e9f7 +Create Date: 2022-07-11 17:56:19.608275 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ec4f4f4ae9db' +down_revision = '0b337376e9f7' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint('are_correspondants_entreprise_id_fkey', 'are_correspondants', type_='foreignkey') + op.drop_column('are_correspondants', 'entreprise_id') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('are_correspondants', sa.Column('entreprise_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.create_foreign_key('are_correspondants_entreprise_id_fkey', 'are_correspondants', 'are_entreprises', ['entreprise_id'], ['id'], ondelete='CASCADE') + # ### end Alembic commands ###