diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py index cff363b92..654b26186 100644 --- a/app/entreprises/forms.py +++ b/app/entreprises/forms.py @@ -398,21 +398,55 @@ class CorrespondantModificationForm(FlaskForm): class ContactCreationForm(FlaskForm): date = _build_string_field( - "Date", + "Date (*)", render_kw={"type": "datetime-local"}, ) + utilisateur = _build_string_field( + "Utilisateur (*)", + render_kw={"placeholder": "Tapez le nom de l'utilisateur"}, + ) notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)]) submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE) + def validate_utilisateur(self, utilisateur): + utilisateur_data = self.utilisateur.data.upper().strip() + stm = text( + "SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:utilisateur_data" + ) + utilisateur = ( + User.query.from_statement(stm) + .params(utilisateur_data=utilisateur_data) + .first() + ) + if utilisateur is None: + raise ValidationError("Champ incorrect (selectionnez dans la liste)") + class ContactModificationForm(FlaskForm): date = _build_string_field( - "Date", + "Date (*)", render_kw={"type": "datetime-local"}, ) + utilisateur = _build_string_field( + "Utilisateur (*)", + render_kw={"placeholder": "Tapez le nom de l'utilisateur"}, + ) notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)]) submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE) + def validate_utilisateur(self, utilisateur): + utilisateur_data = self.utilisateur.data.upper().strip() + stm = text( + "SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:utilisateur_data" + ) + utilisateur = ( + User.query.from_statement(stm) + .params(utilisateur_data=utilisateur_data) + .first() + ) + if utilisateur is None: + raise ValidationError("Champ incorrect (selectionnez dans la liste)") + class StageApprentissageCreationForm(FlaskForm): etudiant = _build_string_field( diff --git a/app/entreprises/models.py b/app/entreprises/models.py index 74a4ccc45..949a05e71 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -35,10 +35,13 @@ class Entreprise(db.Model): } -# class EntrepriseSite(db.Model): -# __tablename__ = "are_sites" -# id = db.Column(db.Integer, primary_key=True) -# nom = db.Column(db.Text) +class EntrepriseSite(db.Model): + __tablename__ = "are_sites" + id = db.Column(db.Integer, primary_key=True) + entreprise_id = db.Column( + db.Integer, db.ForeignKey("are_entreprises.id", ondelete="cascade") + ) + nom = db.Column(db.Text) class EntrepriseCorrespondant(db.Model): @@ -47,6 +50,7 @@ class EntrepriseCorrespondant(db.Model): 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")) nom = db.Column(db.Text) prenom = db.Column(db.Text) telephone = db.Column(db.Text) diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index 09ae715a4..7fe2e7274 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -805,17 +805,31 @@ def add_contact(id): entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( description=f"entreprise {id} inconnue" ) - form = ContactCreationForm() + form = ContactCreationForm( + date=f"{datetime.now().strftime('%Y-%m-%dT%H:%M')}", + utilisateur=f"{current_user.nom} {current_user.prenom} ({current_user.user_name})" + if current_user.nom and current_user.prenom + else "", + ) if form.validate_on_submit(): + utilisateur_data = form.utilisateur.data.upper().strip() + stm = text( + "SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:utilisateur_data" + ) + utilisateur = ( + User.query.from_statement(stm) + .params(utilisateur_data=utilisateur_data) + .first() + ) contact = EntrepriseContact( date=form.date.data, - user=current_user.id, # a voir + user=utilisateur.id, entreprise=entreprise.id, notes=form.notes.data.strip(), ) db.session.add(contact) db.session.commit() - return redirect(url_for("entreprises.fiche_entreprise", id=entreprise.id)) + return redirect(url_for("entreprises.contacts", id=entreprise.id)) return render_template( "entreprises/form.html", title="Ajout contact", @@ -834,12 +848,26 @@ def edit_contact(id): ) form = ContactModificationForm() if form.validate_on_submit(): + utilisateur_data = form.utilisateur.data.upper().strip() + stm = text( + "SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:utilisateur_data" + ) + utilisateur = ( + User.query.from_statement(stm) + .params(utilisateur_data=utilisateur_data) + .first() + ) contact.date = form.date.data + contact.user = utilisateur.id contact.notes = form.notes.data db.session.commit() - return redirect(url_for("entreprises.fiche_entreprise", id=contact.entreprise)) + return redirect(url_for("entreprises.contacts", id=contact.entreprise)) elif request.method == "GET": - form.date.data = contact.date + utilisateur = User.query.filter_by(id=contact.user).first() + form.date.data = contact.date.strftime("%Y-%m-%dT%H:%M") + form.utilisateur.data = ( + f"{utilisateur.nom} {utilisateur.prenom} ({utilisateur.user_name})" + ) form.notes.data = contact.notes return render_template( "entreprises/form.html", diff --git a/app/templates/entreprises/form.html b/app/templates/entreprises/form.html index 1b348eb22..fe51a97b4 100644 --- a/app/templates/entreprises/form.html +++ b/app/templates/entreprises/form.html @@ -4,6 +4,8 @@ {% block styles %} {{super()}} + + {% endblock %} {% block app_content %} @@ -19,20 +21,6 @@ {% endblock %} \ No newline at end of file diff --git a/migrations/versions/e5043b68e6b9_tables_module_gestion_relations_.py b/migrations/versions/2a99f5553555_tables_module_gestion_relations_.py similarity index 94% rename from migrations/versions/e5043b68e6b9_tables_module_gestion_relations_.py rename to migrations/versions/2a99f5553555_tables_module_gestion_relations_.py index bc57fbf5b..6a5ca0c74 100644 --- a/migrations/versions/e5043b68e6b9_tables_module_gestion_relations_.py +++ b/migrations/versions/2a99f5553555_tables_module_gestion_relations_.py @@ -1,8 +1,8 @@ """tables module gestion relations entreprises -Revision ID: e5043b68e6b9 +Revision ID: 2a99f5553555 Revises: b9aadc10227f -Create Date: 2022-04-04 09:14:54.605480 +Create Date: 2022-04-15 18:12:46.620653 """ from alembic import op @@ -10,7 +10,7 @@ import sqlalchemy as sa from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. -revision = "e5043b68e6b9" +revision = "2a99f5553555" down_revision = "b9aadc10227f" branch_labels = None depends_on = None @@ -65,15 +65,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_table( - "are_correspondants", + "are_sites", sa.Column("id", sa.Integer(), nullable=False), sa.Column("entreprise_id", sa.Integer(), nullable=True), sa.Column("nom", sa.Text(), nullable=True), - sa.Column("prenom", sa.Text(), nullable=True), - sa.Column("telephone", sa.Text(), nullable=True), - sa.Column("mail", sa.Text(), nullable=True), - sa.Column("poste", sa.Text(), nullable=True), - sa.Column("service", sa.Text(), nullable=True), sa.ForeignKeyConstraint( ["entreprise_id"], ["are_entreprises.id"], ondelete="cascade" ), @@ -95,6 +90,23 @@ def upgrade(): ), sa.PrimaryKeyConstraint("id"), ) + op.create_table( + "are_correspondants", + sa.Column("id", sa.Integer(), nullable=False), + sa.Column("entreprise_id", sa.Integer(), nullable=True), + sa.Column("site_id", sa.Integer(), nullable=True), + sa.Column("nom", sa.Text(), nullable=True), + sa.Column("prenom", sa.Text(), nullable=True), + sa.Column("telephone", sa.Text(), nullable=True), + sa.Column("mail", sa.Text(), nullable=True), + sa.Column("poste", sa.Text(), nullable=True), + sa.Column("service", sa.Text(), nullable=True), + sa.ForeignKeyConstraint( + ["entreprise_id"], ["are_entreprises.id"], ondelete="cascade" + ), + sa.ForeignKeyConstraint(["site_id"], ["are_sites.id"], ondelete="cascade"), + sa.PrimaryKeyConstraint("id"), + ) op.create_table( "are_offres", sa.Column("id", sa.Integer(), nullable=False), @@ -164,9 +176,9 @@ def upgrade(): sa.ForeignKeyConstraint(["offre_id"], ["are_offres.id"], ondelete="cascade"), sa.PrimaryKeyConstraint("id"), ) - op.drop_index("ix_entreprises_dept_id", table_name="entreprises") op.drop_table("entreprise_contact") op.drop_table("entreprise_correspondant") + op.drop_index("ix_entreprises_dept_id", table_name="entreprises") op.drop_table("entreprises") # ### end Alembic commands ### @@ -264,8 +276,9 @@ def downgrade(): op.drop_table("are_envoi_offre_etudiant") op.drop_table("are_envoi_offre") op.drop_table("are_offres") - op.drop_table("are_stages_apprentissages") op.drop_table("are_correspondants") + op.drop_table("are_stages_apprentissages") + op.drop_table("are_sites") op.drop_table("are_contacts") op.drop_table("are_preferences") op.drop_table("are_logs")