correction modèle

This commit is contained in:
Arthur ZHU 2022-07-11 20:17:34 +02:00
parent 51076574ee
commit 3a31317e48
8 changed files with 91 additions and 44 deletions

View File

@ -239,7 +239,8 @@ def get_excel_book_are(export: bool = False):
) )
correspondants = ( correspondants = (
db.session.query(EntrepriseCorrespondant) 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) .filter_by(visible=True)
.all() .all()
) )
@ -391,7 +392,6 @@ def check_sites_import(m):
sites_import.append(site_import) sites_import.append(site_import)
else: else:
correspondant_import = EntrepriseCorrespondant( correspondant_import = EntrepriseCorrespondant(
entreprise_id=entreprise.id,
civilite=site_data["civilite"], civilite=site_data["civilite"],
nom=site_data["nom"], nom=site_data["nom"],
prenom=site_data["prenom"], prenom=site_data["prenom"],
@ -414,7 +414,6 @@ def check_sites_import(m):
if site_data["civilite"] != "": if site_data["civilite"] != "":
correspondant_import = EntrepriseCorrespondant( correspondant_import = EntrepriseCorrespondant(
entreprise_id=entreprise.id,
site_id=site.id, site_id=site.id,
civilite=site_data["civilite"], civilite=site_data["civilite"],
nom=site_data["nom"], nom=site_data["nom"],
@ -527,7 +526,7 @@ def check_correspondant_import(correspondant_data):
return False return False
# civilite entre H ou F # civilite entre H ou F
if correspondant_data["civilite"] not in ["H", "F"]: if correspondant_data["civilite"].upper() not in ["H", "F"]:
return False return False
if ( if (
@ -544,10 +543,11 @@ def check_correspondant_import(correspondant_data):
return False return False
# correspondant possède le meme nom et prénom dans la meme entreprise # correspondant possède le meme nom et prénom dans la meme entreprise
if correspondant_data["id_site"] != "":
correspondant = EntrepriseCorrespondant.query.filter_by( correspondant = EntrepriseCorrespondant.query.filter_by(
nom=correspondant_data["nom"], nom=correspondant_data["nom"],
prenom=correspondant_data["prenom"], prenom=correspondant_data["prenom"],
entreprise_id=entreprise.id, site_id=correspondant_data["id_site"],
).first() ).first()
if correspondant is not None: if correspondant is not None:
return False return False

View File

@ -99,7 +99,7 @@ class EntrepriseCreationForm(FlaskForm):
civilite = SelectField( civilite = SelectField(
"Civilité du correspondant", "Civilité du correspondant",
choices=[("M", "Monsieur"), ("F", "Madame")], choices=[("H", "Monsieur"), ("F", "Madame")],
validators=[DataRequired(message=CHAMP_REQUIS)], validators=[DataRequired(message=CHAMP_REQUIS)],
) )
nom_correspondant = _build_string_field("Nom du correspondant", required=False) 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") raise ValidationError("Impossible de vérifier l'existance du SIRET")
entreprise = Entreprise.query.filter_by(siret=siret_data).first() entreprise = Entreprise.query.filter_by(siret=siret_data).first()
if entreprise is not None: if entreprise is not None:
if entreprise.visible is True:
lien = f'<a href="/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}">ici</a>' lien = f'<a href="/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}">ici</a>'
raise ValidationError( raise ValidationError(
Markup(f"Entreprise déjà présent, lien vers la fiche : {lien}") Markup(f"Entreprise déjà présent, lien vers la fiche : {lien}")
) )
else:
raise ValidationError("Entreprise en phase de validation")
class EntrepriseModificationForm(FlaskForm): class EntrepriseModificationForm(FlaskForm):
@ -393,7 +396,7 @@ class CorrespondantCreationForm(FlaskForm):
class CorrespondantsCreationForm(FlaskForm): class CorrespondantsCreationForm(FlaskForm):
hidden_entreprise_id = HiddenField() hidden_site_id = HiddenField()
correspondants = FieldList(FormField(CorrespondantCreationForm), min_entries=1) correspondants = FieldList(FormField(CorrespondantCreationForm), min_entries=1)
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE) submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
@ -418,7 +421,7 @@ class CorrespondantsCreationForm(FlaskForm):
(entry.nom.data.strip(), entry.prenom.data.strip()) (entry.nom.data.strip(), entry.prenom.data.strip())
) )
correspondant = EntrepriseCorrespondant.query.filter_by( correspondant = EntrepriseCorrespondant.query.filter_by(
entreprise_id=self.hidden_entreprise_id.data, site_id=self.hidden_site_id.data,
nom=entry.nom.data, nom=entry.nom.data,
prenom=entry.prenom.data, prenom=entry.prenom.data,
).first() ).first()
@ -433,7 +436,7 @@ class CorrespondantsCreationForm(FlaskForm):
class CorrespondantModificationForm(FlaskForm): class CorrespondantModificationForm(FlaskForm):
hidden_correspondant_id = HiddenField() hidden_correspondant_id = HiddenField()
hidden_entreprise_id = HiddenField() hidden_site_id = HiddenField()
civilite = SelectField( civilite = SelectField(
"Civilité (*)", "Civilité (*)",
choices=[("H", "Monsieur"), ("F", "Madame")], choices=[("H", "Monsieur"), ("F", "Madame")],
@ -459,7 +462,7 @@ class CorrespondantModificationForm(FlaskForm):
correspondant = EntrepriseCorrespondant.query.filter( correspondant = EntrepriseCorrespondant.query.filter(
EntrepriseCorrespondant.id != self.hidden_correspondant_id.data, 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.nom == self.nom.data,
EntrepriseCorrespondant.prenom == self.prenom.data, EntrepriseCorrespondant.prenom == self.prenom.data,
).first() ).first()

View File

@ -79,9 +79,6 @@ class EntrepriseSite(db.Model):
class EntrepriseCorrespondant(db.Model): class EntrepriseCorrespondant(db.Model):
__tablename__ = "are_correspondants" __tablename__ = "are_correspondants"
id = db.Column(db.Integer, primary_key=True) 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")) site_id = db.Column(db.Integer, db.ForeignKey("are_sites.id", ondelete="cascade"))
civilite = db.Column(db.String(1)) civilite = db.Column(db.String(1))
nom = db.Column(db.Text) nom = db.Column(db.Text)

View File

@ -354,7 +354,6 @@ def add_entreprise():
if form.nom_correspondant.data.strip(): if form.nom_correspondant.data.strip():
db.session.refresh(site) db.session.refresh(site)
correspondant = EntrepriseCorrespondant( correspondant = EntrepriseCorrespondant(
entreprise_id=entreprise.id,
site_id=site.id, site_id=site.id,
civilite=form.civilite.data, civilite=form.civilite.data,
nom=form.nom_correspondant.data.strip(), nom=form.nom_correspondant.data.strip(),
@ -989,11 +988,11 @@ def add_correspondant(entreprise_id, site_id):
).first_or_404( ).first_or_404(
description=f"site {site_id} inconnue pour l'entreprise {entreprise_id}" 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(): if form.validate_on_submit():
for correspondant_entry in form.correspondants.entries: for correspondant_entry in form.correspondants.entries:
correspondant = EntrepriseCorrespondant( correspondant = EntrepriseCorrespondant(
entreprise_id=site.entreprise_id,
site_id=site.id, site_id=site.id,
civilite=correspondant_entry.civilite.data, civilite=correspondant_entry.civilite.data,
nom=correspondant_entry.nom.data.strip(), nom=correspondant_entry.nom.data.strip(),
@ -1010,7 +1009,7 @@ def add_correspondant(entreprise_id, site_id):
db.session.refresh(correspondant) db.session.refresh(correspondant)
log = EntrepriseHistorique( log = EntrepriseHistorique(
authenticated_user=current_user.user_name, authenticated_user=current_user.user_name,
entreprise_id=correspondant.entreprise_id, entreprise_id=correspondant.site.entreprise.id,
object="correspondant", object="correspondant",
object_id=correspondant.id, object_id=correspondant.id,
text="Création d'un correspondant", text="Création d'un correspondant",
@ -1039,14 +1038,23 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id):
""" """
correspondant = ( correspondant = (
db.session.query(EntrepriseCorrespondant) db.session.query(EntrepriseCorrespondant)
.join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) .join(
.filter( EntrepriseSite,
EntrepriseCorrespondant.id == correspondant_id, Entreprise.visible == True 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( form = CorrespondantModificationForm(
hidden_entreprise_id=correspondant.entreprise_id, hidden_site_id=correspondant.site.id,
hidden_correspondant_id=correspondant.id, hidden_correspondant_id=correspondant.id,
) )
if form.validate_on_submit(): if form.validate_on_submit():
@ -1061,7 +1069,7 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id):
correspondant.notes = form.notes.data.strip() correspondant.notes = form.notes.data.strip()
log = EntrepriseHistorique( log = EntrepriseHistorique(
authenticated_user=current_user.user_name, authenticated_user=current_user.user_name,
entreprise_id=correspondant.entreprise_id, entreprise_id=correspondant.site.entreprise.id,
object="correspondant", object="correspondant",
object_id=correspondant.id, object_id=correspondant.id,
text="Modification d'un correspondant", text="Modification d'un correspondant",
@ -1072,7 +1080,7 @@ def edit_correspondant(entreprise_id, site_id, correspondant_id):
return redirect( return redirect(
url_for( url_for(
"entreprises.fiche_entreprise", "entreprises.fiche_entreprise",
entreprise_id=correspondant.entreprise_id, entreprise_id=correspondant.site.entreprise.id,
) )
) )
elif request.method == "GET": elif request.method == "GET":
@ -1103,18 +1111,27 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id):
""" """
correspondant = ( correspondant = (
db.session.query(EntrepriseCorrespondant) db.session.query(EntrepriseCorrespondant)
.join(Entreprise, EntrepriseCorrespondant.entreprise_id == Entreprise.id) .join(
.filter( EntrepriseSite,
EntrepriseCorrespondant.id == correspondant_id, Entreprise.visible == True 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() form = SuppressionConfirmationForm()
if form.validate_on_submit(): if form.validate_on_submit():
db.session.delete(correspondant) db.session.delete(correspondant)
log = EntrepriseHistorique( log = EntrepriseHistorique(
authenticated_user=current_user.user_name, authenticated_user=current_user.user_name,
entreprise_id=correspondant.entreprise_id, entreprise_id=correspondant.site.entreprise.id,
object="correspondant", object="correspondant",
object_id=correspondant.id, object_id=correspondant.id,
text="Suppression d'un correspondant", text="Suppression d'un correspondant",
@ -1125,7 +1142,7 @@ def delete_correspondant(entreprise_id, site_id, correspondant_id):
return redirect( return redirect(
url_for( url_for(
"entreprises.fiche_entreprise", "entreprises.fiche_entreprise",
entreprise_id=correspondant.entreprise_id, entreprise_id=correspondant.site.entreprise.id,
) )
) )
return render_template( return render_template(

View File

@ -26,8 +26,8 @@
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %} {% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
<div class="parent-btn"> <div class="parent-btn">
<a class="btn btn-primary" href="{{ url_for('entreprises.edit_correspondant', entreprise_id=correspondant.entreprise_id, site_id=correspondant.site_id, correspondant_id=correspondant.id) }}">Modifier correspondant</a> <a class="btn btn-primary" href="{{ url_for('entreprises.edit_correspondant', entreprise_id=correspondant.site.entreprise.id, site_id=correspondant.site_id, correspondant_id=correspondant.id) }}">Modifier correspondant</a>
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_correspondant', entreprise_id=correspondant.entreprise_id, site_id=correspondant.site_id, correspondant_id=correspondant.id) }}">Supprimer correspondant</a> <a class="btn btn-danger" href="{{ url_for('entreprises.delete_correspondant', entreprise_id=correspondant.site.entreprise.id, site_id=correspondant.site_id, correspondant_id=correspondant.id) }}">Supprimer correspondant</a>
</div> </div>
{% endif %} {% endif %}
</div> </div>

View File

@ -45,7 +45,7 @@
<td>{{ correspondant[0].mail }}</td> <td>{{ correspondant[0].mail }}</td>
<td>{{ correspondant[0].poste}}</td> <td>{{ correspondant[0].poste}}</td>
<td>{{ correspondant[0].service}}</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><a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=correspondant[1].entreprise.id) }}">{{ correspondant[1].nom }}</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@ -139,7 +139,7 @@
{% if correspondant.notes %} {% if correspondant.notes %}
Notes : {{ correspondant.notes }}<br> Notes : {{ correspondant.notes }}<br>
{% endif %} {% endif %}
<a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=correspondant.entreprise_id) }}" target="_blank">Fiche entreprise</a> <a href="{{ url_for('entreprises.fiche_entreprise', entreprise_id=correspondant.site.entreprise.id) }}" target="_blank">Fiche entreprise</a>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View File

@ -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 ###