ajout contacts, correction import
This commit is contained in:
parent
efe48582bf
commit
9af424d356
@ -311,6 +311,24 @@ class CorrespondantModificationForm(FlaskForm):
|
|||||||
return validate
|
return validate
|
||||||
|
|
||||||
|
|
||||||
|
class ContactCreationForm(FlaskForm):
|
||||||
|
date = _build_string_field(
|
||||||
|
"Date",
|
||||||
|
render_kw={"type": "datetime-local"},
|
||||||
|
)
|
||||||
|
notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)])
|
||||||
|
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||||
|
|
||||||
|
|
||||||
|
class ContactModificationForm(FlaskForm):
|
||||||
|
date = _build_string_field(
|
||||||
|
"Date",
|
||||||
|
render_kw={"type": "datetime-local"},
|
||||||
|
)
|
||||||
|
notes = TextAreaField("Notes (*)", validators=[DataRequired(message=CHAMP_REQUIS)])
|
||||||
|
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||||
|
|
||||||
|
|
||||||
class StageApprentissageCreationForm(FlaskForm):
|
class StageApprentissageCreationForm(FlaskForm):
|
||||||
etudiant = _build_string_field(
|
etudiant = _build_string_field(
|
||||||
"Étudiant (*)",
|
"Étudiant (*)",
|
||||||
|
@ -61,6 +61,17 @@ class EntrepriseCorrespondant(db.Model):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class EntrepriseContact(db.Model):
|
||||||
|
__tablename__ = "are_contacts"
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
date = db.Column(db.DateTime(timezone=True))
|
||||||
|
user = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="cascade"))
|
||||||
|
entreprise = db.Column(
|
||||||
|
db.Integer, db.ForeignKey("are_entreprises.id", ondelete="cascade")
|
||||||
|
)
|
||||||
|
notes = db.Column(db.Text)
|
||||||
|
|
||||||
|
|
||||||
class EntrepriseOffre(db.Model):
|
class EntrepriseOffre(db.Model):
|
||||||
__tablename__ = "are_offres"
|
__tablename__ = "are_offres"
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
@ -19,6 +19,8 @@ from app.entreprises.forms import (
|
|||||||
OffreModificationForm,
|
OffreModificationForm,
|
||||||
CorrespondantCreationForm,
|
CorrespondantCreationForm,
|
||||||
CorrespondantModificationForm,
|
CorrespondantModificationForm,
|
||||||
|
ContactCreationForm,
|
||||||
|
ContactModificationForm,
|
||||||
StageApprentissageCreationForm,
|
StageApprentissageCreationForm,
|
||||||
StageApprentissageModificationForm,
|
StageApprentissageModificationForm,
|
||||||
EnvoiOffreForm,
|
EnvoiOffreForm,
|
||||||
@ -33,6 +35,7 @@ from app.entreprises.models import (
|
|||||||
EntrepriseOffre,
|
EntrepriseOffre,
|
||||||
EntrepriseCorrespondant,
|
EntrepriseCorrespondant,
|
||||||
EntrepriseLog,
|
EntrepriseLog,
|
||||||
|
EntrepriseContact,
|
||||||
EntrepriseStageApprentissage,
|
EntrepriseStageApprentissage,
|
||||||
EntrepriseEnvoiOffre,
|
EntrepriseEnvoiOffre,
|
||||||
EntrepriseOffreDepartement,
|
EntrepriseOffreDepartement,
|
||||||
@ -784,6 +787,69 @@ def delete_correspondant(id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("fiche_entreprise/add_contact/<int:id>", methods=["GET", "POST"])
|
||||||
|
@permission_required(Permission.RelationsEntreprisesChange)
|
||||||
|
def add_contact(id):
|
||||||
|
"""
|
||||||
|
Permet d'ajouter un contact avec une entreprise
|
||||||
|
"""
|
||||||
|
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
|
||||||
|
description=f"entreprise {id} inconnue"
|
||||||
|
)
|
||||||
|
form = ContactCreationForm()
|
||||||
|
if form.validate_on_submit():
|
||||||
|
contact = EntrepriseContact(
|
||||||
|
date=form.date.data,
|
||||||
|
user=current_user.id, # a voir
|
||||||
|
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 render_template(
|
||||||
|
"entreprises/form.html",
|
||||||
|
title="Ajout contact",
|
||||||
|
form=form,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("fiche_entreprise/edit_contact/<int:id>", methods=["GET", "POST"])
|
||||||
|
@permission_required(Permission.RelationsEntreprisesChange)
|
||||||
|
def edit_contact(id):
|
||||||
|
"""
|
||||||
|
Permet d'editer un contact avec une entreprise
|
||||||
|
"""
|
||||||
|
contact = EntrepriseContact.query.filter_by(id=id).first_or_404(
|
||||||
|
description=f"contact {id} inconnu"
|
||||||
|
)
|
||||||
|
form = ContactModificationForm()
|
||||||
|
if form.validate_on_submit():
|
||||||
|
contact.date = form.date.data
|
||||||
|
contact.notes = form.notes.data
|
||||||
|
db.session.commit()
|
||||||
|
return redirect(url_for("entreprises.fiche_entreprise", id=contact.entreprise))
|
||||||
|
elif request.method == "GET":
|
||||||
|
form.date.data = contact.date
|
||||||
|
form.notes.data = contact.notes
|
||||||
|
return render_template(
|
||||||
|
"entreprises/form.html",
|
||||||
|
title="Modification contact",
|
||||||
|
form=form,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/fiche_entreprise/contacts/<int:id>")
|
||||||
|
def contacts(id):
|
||||||
|
contacts = EntrepriseContact.query.filter_by(entreprise=id).all()
|
||||||
|
return render_template(
|
||||||
|
"entreprises/contacts.html",
|
||||||
|
title="Liste des contacts",
|
||||||
|
contacts=contacts,
|
||||||
|
entreprise_id=id,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/add_stage_apprentissage/<int:id>", methods=["GET", "POST"])
|
@bp.route("/add_stage_apprentissage/<int:id>", methods=["GET", "POST"])
|
||||||
@permission_required(Permission.RelationsEntreprisesChange)
|
@permission_required(Permission.RelationsEntreprisesChange)
|
||||||
def add_stage_apprentissage(id):
|
def add_stage_apprentissage(id):
|
||||||
@ -1229,6 +1295,9 @@ def import_correspondants():
|
|||||||
correspondant_data[6],
|
correspondant_data[6],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
entreprise = Entreprise.query.filter_by(
|
||||||
|
siret=correspondant_data[6]
|
||||||
|
).first()
|
||||||
correspondant = EntrepriseCorrespondant(
|
correspondant = EntrepriseCorrespondant(
|
||||||
nom=correspondant_data[0],
|
nom=correspondant_data[0],
|
||||||
prenom=correspondant_data[1],
|
prenom=correspondant_data[1],
|
||||||
@ -1236,7 +1305,7 @@ def import_correspondants():
|
|||||||
mail=correspondant_data[3],
|
mail=correspondant_data[3],
|
||||||
poste=correspondant_data[4],
|
poste=correspondant_data[4],
|
||||||
service=correspondant_data[5],
|
service=correspondant_data[5],
|
||||||
entreprise_id=correspondant_data[6],
|
entreprise_id=entreprise.id,
|
||||||
)
|
)
|
||||||
correspondants_import.append(correspondant)
|
correspondants_import.append(correspondant)
|
||||||
else:
|
else:
|
||||||
|
87
app/templates/entreprises/contacts.html
Normal file
87
app/templates/entreprises/contacts.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
{# -*- mode: jinja-html -*- #}
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block styles %}
|
||||||
|
{{super()}}
|
||||||
|
<script src="/ScoDoc/static/jQuery/jquery-1.12.4.min.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/ScoDoc/static/DataTables/datatables.min.css">
|
||||||
|
<script type="text/javascript" charset="utf8" src="/ScoDoc/static/DataTables/datatables.min.js"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block app_content %}
|
||||||
|
<div class="container" style="margin-bottom: 10px;">
|
||||||
|
<h1>Liste des contacts</h1>
|
||||||
|
<a class="btn btn-primary" style="margin-bottom:10px;" href="{{ url_for('entreprises.add_contact', id=entreprise_id) }}">Ajouter contact</a>
|
||||||
|
<table id="table-contacts">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td data-priority="">Date</td>
|
||||||
|
<td data-priority="">Utilisateur</td>
|
||||||
|
<td data-priority="">Notes</td>
|
||||||
|
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||||
|
<td data-priority="">Action</td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for contact in contacts %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ contact.date.strftime('%d/%m/%Y %Hh%M') }}</td>
|
||||||
|
<td>{{ contact.user|get_nomcomplet_by_id }}</td>
|
||||||
|
<td>{{ contact.notes }}</td>
|
||||||
|
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||||
|
<td>
|
||||||
|
<div class="btn-group">
|
||||||
|
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">Action
|
||||||
|
<span class="caret"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu pull-left">
|
||||||
|
<li><a href="{{ url_for('entreprises.edit_contact', id=contact.id) }}">Modifier</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td>Date</td>
|
||||||
|
<td>Utilisateur</td>
|
||||||
|
<td>Notes</td>
|
||||||
|
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||||
|
<td>Action</td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
let table = new DataTable('#table-contacts',
|
||||||
|
{
|
||||||
|
"autoWidth": false,
|
||||||
|
"responsive": {
|
||||||
|
"details": true
|
||||||
|
},
|
||||||
|
"pageLength": 10,
|
||||||
|
"language": {
|
||||||
|
"emptyTable": "Aucune donnée disponible dans le tableau",
|
||||||
|
"info": "Affichage de _START_ à _END_ sur _TOTAL_ entrées",
|
||||||
|
"infoEmpty": "Affichage de 0 à 0 sur 0 entrées",
|
||||||
|
"infoFiltered": "(filtrées depuis un total de _MAX_ entrées)",
|
||||||
|
"lengthMenu": "Afficher _MENU_ entrées",
|
||||||
|
"loadingRecords": "Chargement...",
|
||||||
|
"processing": "Traitement...",
|
||||||
|
"search": "Rechercher:",
|
||||||
|
"zeroRecords": "Aucune entrée correspondante trouvée",
|
||||||
|
"paginate": {
|
||||||
|
"next": "Suivante",
|
||||||
|
"previous": "Précédente"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
@ -43,6 +43,7 @@
|
|||||||
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_entreprise', id=entreprise.id) }}">Supprimer</a>
|
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_entreprise', id=entreprise.id) }}">Supprimer</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.add_offre', id=entreprise.id) }}">Ajouter offre</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.add_offre', id=entreprise.id) }}">Ajouter offre</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.add_correspondant', id=entreprise.id) }}">Ajouter correspondant</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.add_correspondant', id=entreprise.id) }}">Ajouter correspondant</a>
|
||||||
|
<a class="btn btn-primary" href="{{ url_for('entreprises.add_contact', id=entreprise.id) }}">Ajouter contact</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.offres_expirees', id=entreprise.id) }}">Voir les offres expirées</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.offres_expirees', id=entreprise.id) }}">Voir les offres expirées</a>
|
||||||
<div>
|
<div>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
"""tables module gestion relations entreprises
|
"""tables module gestion relations entreprises
|
||||||
|
|
||||||
Revision ID: 71e760aa626a
|
Revision ID: e5043b68e6b9
|
||||||
Revises: b9aadc10227f
|
Revises: b9aadc10227f
|
||||||
Create Date: 2022-03-29 18:39:24.772970
|
Create Date: 2022-04-04 09:14:54.605480
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op
|
||||||
@ -10,7 +10,7 @@ import sqlalchemy as sa
|
|||||||
from sqlalchemy.dialects import postgresql
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = "71e760aa626a"
|
revision = "e5043b68e6b9"
|
||||||
down_revision = "b9aadc10227f"
|
down_revision = "b9aadc10227f"
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
||||||
@ -51,6 +51,19 @@ def upgrade():
|
|||||||
sa.Column("value", sa.Text(), nullable=True),
|
sa.Column("value", sa.Text(), nullable=True),
|
||||||
sa.PrimaryKeyConstraint("id"),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
|
op.create_table(
|
||||||
|
"are_contacts",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("date", sa.DateTime(timezone=True), nullable=True),
|
||||||
|
sa.Column("user", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("entreprise", sa.Integer(), nullable=True),
|
||||||
|
sa.Column("notes", sa.Text(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["entreprise"], ["are_entreprises.id"], ondelete="cascade"
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(["user"], ["user.id"], ondelete="cascade"),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
op.create_table(
|
op.create_table(
|
||||||
"are_correspondants",
|
"are_correspondants",
|
||||||
sa.Column("id", sa.Integer(), nullable=False),
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
@ -151,9 +164,9 @@ def upgrade():
|
|||||||
sa.ForeignKeyConstraint(["offre_id"], ["are_offres.id"], ondelete="cascade"),
|
sa.ForeignKeyConstraint(["offre_id"], ["are_offres.id"], ondelete="cascade"),
|
||||||
sa.PrimaryKeyConstraint("id"),
|
sa.PrimaryKeyConstraint("id"),
|
||||||
)
|
)
|
||||||
|
op.drop_index("ix_entreprises_dept_id", table_name="entreprises")
|
||||||
op.drop_table("entreprise_contact")
|
op.drop_table("entreprise_contact")
|
||||||
op.drop_table("entreprise_correspondant")
|
op.drop_table("entreprise_correspondant")
|
||||||
op.drop_index("ix_entreprises_dept_id", table_name="entreprises")
|
|
||||||
op.drop_table("entreprises")
|
op.drop_table("entreprises")
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
@ -198,15 +211,7 @@ def downgrade():
|
|||||||
op.create_index("ix_entreprises_dept_id", "entreprises", ["dept_id"], unique=False)
|
op.create_index("ix_entreprises_dept_id", "entreprises", ["dept_id"], unique=False)
|
||||||
op.create_table(
|
op.create_table(
|
||||||
"entreprise_correspondant",
|
"entreprise_correspondant",
|
||||||
sa.Column(
|
sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
|
||||||
"id",
|
|
||||||
sa.INTEGER(),
|
|
||||||
server_default=sa.text(
|
|
||||||
"nextval('entreprise_correspondant_id_seq'::regclass)"
|
|
||||||
),
|
|
||||||
autoincrement=True,
|
|
||||||
nullable=False,
|
|
||||||
),
|
|
||||||
sa.Column("entreprise_id", sa.INTEGER(), autoincrement=False, nullable=True),
|
sa.Column("entreprise_id", sa.INTEGER(), autoincrement=False, nullable=True),
|
||||||
sa.Column("nom", sa.TEXT(), autoincrement=False, nullable=True),
|
sa.Column("nom", sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
sa.Column("prenom", sa.TEXT(), autoincrement=False, nullable=True),
|
sa.Column("prenom", sa.TEXT(), autoincrement=False, nullable=True),
|
||||||
@ -225,7 +230,6 @@ def downgrade():
|
|||||||
name="entreprise_correspondant_entreprise_id_fkey",
|
name="entreprise_correspondant_entreprise_id_fkey",
|
||||||
),
|
),
|
||||||
sa.PrimaryKeyConstraint("id", name="entreprise_correspondant_pkey"),
|
sa.PrimaryKeyConstraint("id", name="entreprise_correspondant_pkey"),
|
||||||
postgresql_ignore_search_path=False,
|
|
||||||
)
|
)
|
||||||
op.create_table(
|
op.create_table(
|
||||||
"entreprise_contact",
|
"entreprise_contact",
|
||||||
@ -262,6 +266,7 @@ def downgrade():
|
|||||||
op.drop_table("are_offres")
|
op.drop_table("are_offres")
|
||||||
op.drop_table("are_stages_apprentissages")
|
op.drop_table("are_stages_apprentissages")
|
||||||
op.drop_table("are_correspondants")
|
op.drop_table("are_correspondants")
|
||||||
|
op.drop_table("are_contacts")
|
||||||
op.drop_table("are_preferences")
|
op.drop_table("are_preferences")
|
||||||
op.drop_table("are_logs")
|
op.drop_table("are_logs")
|
||||||
op.drop_table("are_entreprises")
|
op.drop_table("are_entreprises")
|
Loading…
Reference in New Issue
Block a user