forked from ScoDoc/ScoDoc
associer un contact a une offre
This commit is contained in:
parent
60552feec7
commit
5f5c43ec08
@ -85,6 +85,7 @@ def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list):
|
||||
Retourne l'offre, les fichiers attachés a l'offre et les département liés
|
||||
"""
|
||||
offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
|
||||
contact = EntrepriseContact.query.filter_by(id=offre.contact_id).first()
|
||||
if not offre_depts or check_offre_depts(depts, offre_depts):
|
||||
files = []
|
||||
path = os.path.join(
|
||||
@ -100,7 +101,7 @@ def get_offre_files_and_depts(offre: EntrepriseOffre, depts: list):
|
||||
for _file in glob.glob(f"{dir}/*"):
|
||||
file = [os.path.basename(dir), os.path.basename(_file)]
|
||||
files.append(file)
|
||||
return [offre, files, offre_depts]
|
||||
return [offre, files, offre_depts, contact]
|
||||
return None
|
||||
|
||||
|
||||
|
@ -144,6 +144,7 @@ class MultiCheckboxField(SelectMultipleField):
|
||||
|
||||
|
||||
class OffreCreationForm(FlaskForm):
|
||||
hidden_entreprise_id = HiddenField()
|
||||
intitule = _build_string_field("Intitulé (*)")
|
||||
description = TextAreaField(
|
||||
"Description (*)", validators=[DataRequired(message=CHAMP_REQUIS)]
|
||||
@ -159,17 +160,26 @@ class OffreCreationForm(FlaskForm):
|
||||
duree = _build_string_field("Durée (*)")
|
||||
depts = MultiCheckboxField("Départements", validators=[Optional()], coerce=int)
|
||||
expiration_date = DateField("Date expiration", validators=[Optional()])
|
||||
contact = SelectField("Contact à contacté (*)", validators=[Optional()])
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.contact.choices = [
|
||||
(contact.id, f"{contact.nom} {contact.prenom}")
|
||||
for contact in EntrepriseContact.query.filter_by(
|
||||
entreprise_id=self.hidden_entreprise_id.data
|
||||
)
|
||||
]
|
||||
|
||||
self.depts.choices = [
|
||||
(dept.id, dept.acronym) for dept in Departement.query.all()
|
||||
]
|
||||
|
||||
|
||||
class OffreModificationForm(FlaskForm):
|
||||
hidden_entreprise_id = HiddenField()
|
||||
intitule = _build_string_field("Intitulé (*)")
|
||||
description = TextAreaField(
|
||||
"Description (*)", validators=[DataRequired(message=CHAMP_REQUIS)]
|
||||
@ -185,11 +195,19 @@ class OffreModificationForm(FlaskForm):
|
||||
duree = _build_string_field("Durée (*)")
|
||||
depts = MultiCheckboxField("Départements", validators=[Optional()], coerce=int)
|
||||
expiration_date = DateField("Date expiration", validators=[Optional()])
|
||||
contact = SelectField("Contact à contacté (*)", validators=[Optional()])
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.contact.choices = [
|
||||
(contact.id, f"{contact.nom} {contact.prenom}")
|
||||
for contact in EntrepriseContact.query.filter_by(
|
||||
entreprise_id=self.hidden_entreprise_id.data
|
||||
)
|
||||
]
|
||||
|
||||
self.depts.choices = [
|
||||
(dept.id, dept.acronym) for dept in Departement.query.all()
|
||||
]
|
||||
@ -206,8 +224,16 @@ class ContactCreationForm(FlaskForm):
|
||||
)
|
||||
poste = _build_string_field("Poste", required=False)
|
||||
service = _build_string_field("Service", required=False)
|
||||
# depts = MultiCheckboxField("Départements", validators=[Optional()], coerce=int)
|
||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||
|
||||
# def __init__(self, *args, **kwargs):
|
||||
# super().__init__(*args, **kwargs)
|
||||
|
||||
# self.depts.choices = [
|
||||
# (dept.id, dept.acronym) for dept in Departement.query.all()
|
||||
# ]
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
if not FlaskForm.validate(self):
|
||||
@ -245,8 +271,16 @@ class ContactModificationForm(FlaskForm):
|
||||
)
|
||||
poste = _build_string_field("Poste", required=False)
|
||||
service = _build_string_field("Service", required=False)
|
||||
# depts = MultiCheckboxField("Départements", validators=[Optional()], coerce=int)
|
||||
submit = SubmitField("Modifier", render_kw=SUBMIT_MARGE)
|
||||
|
||||
# def __init__(self, *args, **kwargs):
|
||||
# super().__init__(*args, **kwargs)
|
||||
|
||||
# self.depts.choices = [
|
||||
# (dept.id, dept.acronym) for dept in Departement.query.all()
|
||||
# ]
|
||||
|
||||
def validate(self):
|
||||
validate = True
|
||||
if not FlaskForm.validate(self):
|
||||
|
@ -75,6 +75,9 @@ class EntrepriseOffre(db.Model):
|
||||
duree = db.Column(db.Text)
|
||||
expiration_date = db.Column(db.Date)
|
||||
expired = db.Column(db.Boolean, default=False)
|
||||
contact_id = db.Column(
|
||||
db.Integer, db.ForeignKey("are_contacts.id", ondelete="cascade")
|
||||
)
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
@ -136,6 +139,15 @@ class EntrepriseOffreDepartement(db.Model):
|
||||
dept_id = db.Column(db.Integer, db.ForeignKey("departement.id", ondelete="cascade"))
|
||||
|
||||
|
||||
# class EntrepriseContactDepartement(db.Model):
|
||||
# __tablename__ = "are_contact_departement"
|
||||
# id = db.Column(db.Integer, primary_key=True)
|
||||
# contact_id = db.Column(
|
||||
# db.Integer, db.ForeignKey("are_contacts.id", ondelete="cascade")
|
||||
# )
|
||||
# dept_id = db.Column(db.Integer, db.ForeignKey("departement.id", ondelete="cascade"))
|
||||
|
||||
|
||||
class EntreprisePreferences(db.Model):
|
||||
__tablename__ = "are_preferences"
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
|
@ -221,6 +221,7 @@ def offres_recues():
|
||||
)
|
||||
offres_recues_with_files = []
|
||||
for offre in offres_recues:
|
||||
contact = EntrepriseContact.query.filter_by(id=offre[1].contact_id).first()
|
||||
files = []
|
||||
path = os.path.join(
|
||||
Config.SCODOC_VAR_DIR,
|
||||
@ -235,7 +236,7 @@ def offres_recues():
|
||||
for file in glob.glob(f"{dir}/*"):
|
||||
file = [os.path.basename(dir), os.path.basename(file)]
|
||||
files.append(file)
|
||||
offres_recues_with_files.append([offre[0], offre[1], files])
|
||||
offres_recues_with_files.append([offre[0], offre[1], files, contact])
|
||||
return render_template(
|
||||
"entreprises/offres_recues.html",
|
||||
title="Offres reçues",
|
||||
@ -491,7 +492,7 @@ def add_offre(id):
|
||||
entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404(
|
||||
description=f"entreprise {id} inconnue"
|
||||
)
|
||||
form = OffreCreationForm()
|
||||
form = OffreCreationForm(hidden_entreprise_id=id)
|
||||
if form.validate_on_submit():
|
||||
offre = EntrepriseOffre(
|
||||
entreprise_id=entreprise.id,
|
||||
@ -501,6 +502,7 @@ def add_offre(id):
|
||||
missions=form.missions.data.strip(),
|
||||
duree=form.duree.data.strip(),
|
||||
expiration_date=form.expiration_date.data,
|
||||
contact_id=form.contact.data,
|
||||
)
|
||||
db.session.add(offre)
|
||||
db.session.commit()
|
||||
@ -537,15 +539,19 @@ def edit_offre(id):
|
||||
description=f"offre {id} inconnue"
|
||||
)
|
||||
offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all()
|
||||
form = OffreModificationForm()
|
||||
form = OffreModificationForm(
|
||||
hidden_entreprise_id=offre.entreprise_id, contact=offre.contact_id
|
||||
)
|
||||
offre_depts_list = [(offre_dept.dept_id) for offre_dept in offre_depts]
|
||||
if form.validate_on_submit():
|
||||
print(form.contact.data)
|
||||
offre.intitule = form.intitule.data.strip()
|
||||
offre.description = form.description.data.strip()
|
||||
offre.type_offre = form.type_offre.data.strip()
|
||||
offre.missions = form.missions.data.strip()
|
||||
offre.duree = form.duree.data.strip()
|
||||
offre.expiration_date = form.expiration_date.data
|
||||
offre.contact_id = form.contact.data
|
||||
if offre_depts_list != form.depts.data:
|
||||
for dept in form.depts.data:
|
||||
if dept not in offre_depts_list:
|
||||
|
@ -9,6 +9,16 @@
|
||||
{% if offre[2] %}
|
||||
Département(s) : {% for offre_dept in offre[2] %} <div class="offre-depts">{{ offre_dept.dept_id|get_dept_acronym }}</div> {% endfor %}<br>
|
||||
{% endif %}
|
||||
|
||||
{% if offre[0].contact_id %}
|
||||
Contacté {{ offre[3].nom }} {{ offre[3].prenom }}
|
||||
{% if offre[3].mail and offre[3].telephone %}
|
||||
({{ offre[3].mail }} - {{ offre[3].telephone }})<br>
|
||||
{% else %}
|
||||
({{ offre[3].mail }}{{offre[3].telephone}})<br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% for fichier in offre[1] %}
|
||||
<a href="{{ url_for('entreprises.get_offre_file', entreprise_id=entreprise.id, offre_id=offre[0].id, filedir=fichier[0], filename=fichier[1] )}}">{{ fichier[1] }}</a>
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
@ -16,6 +26,7 @@
|
||||
{% endif %}
|
||||
<br>
|
||||
{% endfor %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
<a href="{{ url_for('entreprises.add_offre_file', offre_id=offre[0].id) }}">Ajoutez un fichier</a>
|
||||
{% endif %}
|
||||
@ -26,9 +37,11 @@
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.edit_offre', id=offre[0].id) }}">Modifier l'offre</a>
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_offre', id=offre[0].id) }}">Supprimer l'offre</a>
|
||||
{% endif %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesSend, None) %}
|
||||
<a class="btn btn-primary" href="{{ url_for('entreprises.envoyer_offre', id=offre[0].id) }}">Envoyer l'offre</a>
|
||||
{% endif %}
|
||||
|
||||
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||
{% if not offre[0].expired %}
|
||||
<a class="btn btn-danger" href="{{ url_for('entreprises.expired', id=offre[0].id) }}">Rendre expirée</a>
|
||||
|
@ -16,6 +16,16 @@
|
||||
Type de l'offre : {{ offre[1].type_offre }}<br>
|
||||
Missions : {{ offre[1].missions }}<br>
|
||||
Durée : {{ offre[1].duree }}<br>
|
||||
|
||||
{% if offre[1].contact_id %}
|
||||
Contacté {{ offre[3].nom }} {{ offre[3].prenom }}
|
||||
{% if offre[3].mail and offre[3].telephone %}
|
||||
({{ offre[3].mail }} - {{ offre[3].telephone }})<br>
|
||||
{% else %}
|
||||
({{ offre[3].mail }}{{offre[3].telephone}})<br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<a href="{{ url_for('entreprises.fiche_entreprise', id=offre[1].entreprise_id) }}">lien vers l'entreprise</a><br>
|
||||
|
||||
{% for fichier in offre[2] %}
|
||||
|
@ -1,8 +1,8 @@
|
||||
"""tables module gestion relations entreprises
|
||||
|
||||
Revision ID: af05f03b81be
|
||||
Revision ID: 40ece1f74b7a
|
||||
Revises: b9aadc10227f
|
||||
Create Date: 2022-03-01 17:12:32.927643
|
||||
Create Date: 2022-03-04 16:06:28.163870
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
@ -10,7 +10,7 @@ import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "af05f03b81be"
|
||||
revision = "40ece1f74b7a"
|
||||
down_revision = "b9aadc10227f"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
@ -98,6 +98,10 @@ def upgrade():
|
||||
sa.Column("duree", sa.Text(), nullable=True),
|
||||
sa.Column("expiration_date", sa.Date(), nullable=True),
|
||||
sa.Column("expired", sa.Boolean(), nullable=True),
|
||||
sa.Column("contact_id", sa.Integer(), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
["contact_id"], ["are_contacts.id"], ondelete="cascade"
|
||||
),
|
||||
sa.ForeignKeyConstraint(
|
||||
["entreprise_id"], ["are_entreprises.id"], ondelete="cascade"
|
||||
),
|
||||
@ -146,9 +150,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 ###
|
||||
|
||||
@ -190,7 +194,6 @@ def downgrade():
|
||||
sa.PrimaryKeyConstraint("id", name="entreprises_pkey"),
|
||||
postgresql_ignore_search_path=False,
|
||||
)
|
||||
op.create_index("ix_entreprises_dept_id", "entreprises", ["dept_id"], unique=False)
|
||||
op.create_table(
|
||||
"entreprise_correspondant",
|
||||
sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
|
||||
@ -242,6 +245,7 @@ def downgrade():
|
||||
),
|
||||
sa.PrimaryKeyConstraint("id", name="entreprise_contact_pkey"),
|
||||
)
|
||||
op.create_index("ix_entreprises_dept_id", "entreprises", ["dept_id"], unique=False)
|
||||
op.drop_table("are_offre_departement")
|
||||
op.drop_table("are_envoi_offre_etudiant")
|
||||
op.drop_table("are_envoi_offre")
|
Loading…
Reference in New Issue
Block a user