", methods=["GET", "POST"])
+def envoyer_offre(id):
+ form = EnvoiOffreForm()
+ if form.validate_on_submit():
+ print("tmp") # faire l'envoie du mail
+ return render_template("entreprises/envoi_offre_form.html", title=("Envoyer une offre"), form=form)
+
+@bp.route("/etudiants")
+def json_etudiants():
+ term = request.args.get('term').strip()
+ etudiants = Identite.query.filter(Identite.nom.ilike(f"%{term}%")).all()
+ list = []
+ content = {}
+ for etudiant in etudiants:
+ value = f"{sco_etud.format_nom(etudiant.nom)} {sco_etud.format_prenom(etudiant.prenom)}"
+ if etudiant.inscription_courante() is not None:
+ content = {
+ "id": f"{etudiant.id}",
+ "value": value,
+ "info": f"{etudiant.inscription_courante().formsemestre.titre}"
+ }
+ else:
+ content = {
+ "id": f"{etudiant.id}",
+ "value": value
+ }
+ list.append(content)
+ content = {}
+ return jsonify(results=list)
+
+@bp.route("/responsables")
+def json_responsables():
+ term = request.args.get('term').strip()
+ responsables = User.query.filter(User.nom.ilike(f"%{term}%"), User.nom.is_not(None), User.prenom.is_not(None)).all()
+ list = []
+ content = {}
+ for responsable in responsables:
+ value = f"{responsable.get_nomplogin()}"
+ content = {
+ "id": f"{responsable.id}",
+ "value": value,
+ "info": ""
+ }
+ list.append(content)
+ content = {}
+ return jsonify(results=list)
\ No newline at end of file
diff --git a/app/models/__init__.py b/app/models/__init__.py
index 0fee7bc48..642e31873 100644
--- a/app/models/__init__.py
+++ b/app/models/__init__.py
@@ -14,12 +14,6 @@ from app.models.raw_sql_init import create_database_functions
from app.models.absences import Absence, AbsenceNotification, BilletAbsence
from app.models.departements import Departement
-
-from app.models.entreprises import (
- Entreprise,
- EntrepriseCorrespondant,
- EntrepriseContact,
-)
from app.models.etudiants import (
Identite,
Adresse,
diff --git a/app/models/departements.py b/app/models/departements.py
index 0734e35b0..7ed2f4b56 100644
--- a/app/models/departements.py
+++ b/app/models/departements.py
@@ -19,7 +19,7 @@ class Departement(db.Model):
db.Boolean(), nullable=False, default=True, server_default="true"
) # sur page d'accueil
- entreprises = db.relationship("Entreprise", lazy="dynamic", backref="departement")
+ # entreprises = db.relationship("Entreprise", lazy="dynamic", backref="departement")
etudiants = db.relationship("Identite", lazy="dynamic", backref="departement")
formations = db.relationship("Formation", lazy="dynamic", backref="departement")
formsemestres = db.relationship(
diff --git a/app/models/entreprises.py b/app/models/entreprises.py
deleted file mode 100644
index bdb5672a8..000000000
--- a/app/models/entreprises.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: UTF-8 -*
-
-"""Gestion des absences
-"""
-
-from app import db
-from app.models import APO_CODE_STR_LEN
-from app.models import SHORT_STR_LEN
-from app.models import CODE_STR_LEN
-
-
-class Entreprise(db.Model):
- """une entreprise"""
-
- __tablename__ = "entreprises"
- id = db.Column(db.Integer, primary_key=True)
- entreprise_id = db.synonym("id")
- dept_id = db.Column(db.Integer, db.ForeignKey("departement.id"), index=True)
- nom = db.Column(db.Text)
- adresse = db.Column(db.Text)
- ville = db.Column(db.Text)
- codepostal = db.Column(db.Text)
- pays = db.Column(db.Text)
- contact_origine = db.Column(db.Text)
- secteur = db.Column(db.Text)
- note = db.Column(db.Text)
- privee = db.Column(db.Text)
- localisation = db.Column(db.Text)
- # -1 inconnue, 0, 25, 50, 75, 100:
- qualite_relation = db.Column(db.Integer)
- plus10salaries = db.Column(db.Boolean())
- date_creation = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
-
-
-class EntrepriseCorrespondant(db.Model):
- """Personne contact en entreprise"""
-
- __tablename__ = "entreprise_correspondant"
- id = db.Column(db.Integer, primary_key=True)
- entreprise_corresp_id = db.synonym("id")
- entreprise_id = db.Column(db.Integer, db.ForeignKey("entreprises.id"))
- nom = db.Column(db.Text)
- prenom = db.Column(db.Text)
- civilite = db.Column(db.Text)
- fonction = db.Column(db.Text)
- phone1 = db.Column(db.Text)
- phone2 = db.Column(db.Text)
- mobile = db.Column(db.Text)
- mail1 = db.Column(db.Text)
- mail2 = db.Column(db.Text)
- fax = db.Column(db.Text)
- note = db.Column(db.Text)
-
-
-class EntrepriseContact(db.Model):
- """Evènement (contact) avec une entreprise"""
-
- __tablename__ = "entreprise_contact"
- id = db.Column(db.Integer, primary_key=True)
- entreprise_contact_id = db.synonym("id")
- date = db.Column(db.DateTime(timezone=True))
- type_contact = db.Column(db.Text)
- entreprise_id = db.Column(db.Integer, db.ForeignKey("entreprises.id"))
- entreprise_corresp_id = db.Column(
- db.Integer, db.ForeignKey("entreprise_correspondant.id")
- )
- etudid = db.Column(db.Integer) # sans contrainte pour garder logs après suppression
- description = db.Column(db.Text)
- enseignant = db.Column(db.Text)
diff --git a/app/models/etudiants.py b/app/models/etudiants.py
index 0ae36bd28..0f81ad6bf 100644
--- a/app/models/etudiants.py
+++ b/app/models/etudiants.py
@@ -107,6 +107,14 @@ class Identite(db.Model):
]
return r[0] if r else None
+ def inscription_courante_date(self, date_debut, date_fin):
+ r = [
+ ins
+ for ins in self.formsemestre_inscriptions
+ if ins.formsemestre.est_courant_date(date_debut, date_fin)
+ ]
+ return r[0] if r else None
+
def etat_inscription(self, formsemestre_id):
"""etat de l'inscription de cet étudiant au semestre:
False si pas inscrit, ou scu.INSCRIT, DEMISSION, DEF
diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py
index 450ea2ccf..dc13c1cc8 100644
--- a/app/models/formsemestre.py
+++ b/app/models/formsemestre.py
@@ -146,6 +146,12 @@ class FormSemestre(db.Model):
today = datetime.date.today()
return (self.date_debut <= today) and (today <= self.date_fin)
+ def est_courant_date(self, date_debut, date_fin) -> bool:
+ """Vrai si la date actuelle (now) est dans le semestre
+ (les dates de début et fin sont incluses)
+ """
+ return (self.date_debut <= date_debut) and (date_fin <= self.date_fin)
+
def est_decale(self):
"""Vrai si semestre "décalé"
c'est à dire semestres impairs commençant entre janvier et juin
diff --git a/app/templates/entreprises/_contact.html b/app/templates/entreprises/_contact.html
new file mode 100644
index 000000000..eff3a8cb2
--- /dev/null
+++ b/app/templates/entreprises/_contact.html
@@ -0,0 +1,13 @@
+
+
+ Nom : {{ contact.nom }}
+ Prénom : {{ contact.prenom }}
+ Téléphone : {{ contact.telephone }}
+ Mail : {{ contact.mail }}
+
+
+
+
\ No newline at end of file
diff --git a/app/templates/entreprises/_offre.html b/app/templates/entreprises/_offre.html
new file mode 100644
index 000000000..e64f3c16c
--- /dev/null
+++ b/app/templates/entreprises/_offre.html
@@ -0,0 +1,15 @@
+
+
+ Intitulé : {{ offre.intitule }}
+ Description : {{ offre.description }}
+ Type de l'offre : {{ offre.type_offre }}
+ Missions : {{ offre.missions }}
+ Durée : {{ offre.duree }}
+
+
+
+
\ No newline at end of file
diff --git a/app/templates/entreprises/ajout_entreprise.html b/app/templates/entreprises/ajout_entreprise.html
new file mode 100644
index 000000000..6b0ba311e
--- /dev/null
+++ b/app/templates/entreprises/ajout_entreprise.html
@@ -0,0 +1,59 @@
+{% extends 'base.html' %}
+{% import 'bootstrap/wtf.html' as wtf %}
+
+{% block styles %}
+{{super()}}
+
+
+{% endblock %}
+
+{% block app_content %}
+ {{ title }}
+
+
+
+
+ Les champs s'autocomplète selon le SIRET
+
+ {{ wtf.quick_form(form, novalidate=True) }}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/ajout_historique.html b/app/templates/entreprises/ajout_historique.html
new file mode 100644
index 000000000..f4da2661b
--- /dev/null
+++ b/app/templates/entreprises/ajout_historique.html
@@ -0,0 +1,31 @@
+{% extends 'base.html' %}
+{% import 'bootstrap/wtf.html' as wtf %}
+
+{% block styles %}
+{{super()}}
+
+
+{% endblock %}
+
+{% block app_content %}
+ {{ title }}
+
+
+
+ {{ wtf.quick_form(form, novalidate=True) }}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/contacts.html b/app/templates/entreprises/contacts.html
new file mode 100644
index 000000000..7f1433334
--- /dev/null
+++ b/app/templates/entreprises/contacts.html
@@ -0,0 +1,43 @@
+{% extends 'base.html' %}
+
+{% block app_content %}
+ {% if logs %}
+
+
Dernières opérations
+
+ {% for log in logs %}
+ {{ log.date.strftime('%d %b %Hh%M') }} {{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}
+ {% endfor %}
+
+
+ {% endif %}
+
+
Liste des contacts
+ {% if contacts %}
+
+
+
+ Nom
+ Prenom
+ Telephone
+ Mail
+ Entreprise
+
+ {% for contact in contacts %}
+
+ {{ contact[0].nom }}
+ {{ contact[0].prenom }}
+ {{ contact[0].telephone }}
+ {{ contact[0].mail }}
+ {{ contact[1].nom }}
+
+ {% endfor %}
+
+
+ {% else %}
+
Aucun contact présent dans la base
+
+
+ {% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/delete_confirmation.html b/app/templates/entreprises/delete_confirmation.html
new file mode 100644
index 000000000..06b75b6ad
--- /dev/null
+++ b/app/templates/entreprises/delete_confirmation.html
@@ -0,0 +1,14 @@
+{% extends 'base.html' %}
+{% import 'bootstrap/wtf.html' as wtf %}
+
+{% block app_content %}
+ {{ title }}
+
+ Cliquez sur le bouton supprimer pour confirmer votre supression
+
+
+
+ {{ wtf.quick_form(form) }}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/entreprises.html b/app/templates/entreprises/entreprises.html
new file mode 100644
index 000000000..a33dd7e77
--- /dev/null
+++ b/app/templates/entreprises/entreprises.html
@@ -0,0 +1,58 @@
+{% extends 'base.html' %}
+
+{% block app_content %}
+ {% if logs %}
+
+
Dernières opérations
+
+ {% for log in logs %}
+ {{ log.date.strftime('%d %b %Hh%M') }} {{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}
+ {% endfor %}
+
+
+ {% endif %}
+
+
Liste des entreprises
+ {% if entreprises %}
+
+
+
+ SIRET
+ Nom
+ Adresse
+ Code postal
+ Ville
+ Pays
+ Action
+
+ {% for entreprise in entreprises %}
+
+ {{ entreprise.siret }}
+ {{ entreprise.nom }}
+ {{ entreprise.adresse }}
+ {{ entreprise.codepostal }}
+ {{ entreprise.ville }}
+ {{ entreprise.pays }}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+
Aucune entreprise présent dans la base
+
+
+ {% endif %}
+
Ajouter une entreprise
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/envoi_offre_form.html b/app/templates/entreprises/envoi_offre_form.html
new file mode 100644
index 000000000..c9db2c6c1
--- /dev/null
+++ b/app/templates/entreprises/envoi_offre_form.html
@@ -0,0 +1,31 @@
+{% extends 'base.html' %}
+{% import 'bootstrap/wtf.html' as wtf %}
+
+{% block styles %}
+{{super()}}
+
+
+{% endblock %}
+
+{% block app_content %}
+ {{ title }}
+
+
+
+ {{ wtf.quick_form(form, novalidate=True) }}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/fiche_entreprise.html b/app/templates/entreprises/fiche_entreprise.html
new file mode 100644
index 000000000..b84980366
--- /dev/null
+++ b/app/templates/entreprises/fiche_entreprise.html
@@ -0,0 +1,72 @@
+{% extends 'base.html' %}
+
+{% block app_content %}
+ {% if logs %}
+
+
Dernières opérations sur cette fiche
+
+ {% for log in logs %}
+
+ {{ log.date.strftime('%d %b %Hh%M') }}
+ {{ log.text|safe }} par {{ log.authenticated_user|get_nomcomplet }}
+
+ {% endfor %}
+
+
+ {% endif %}
+ {% if historique %}
+
+
Historique
+
+ {% for data in historique %}
+
+ {{ data[0].date_debut.strftime('%d/%m/%Y') }} - {{ data[0].date_fin.strftime('%d/%m/%Y') }}
+
+ {{ data[0].type_offre }} réalisé par {{ data[1].nom|format_nom }} {{ data[1].prenom|format_prenom }} en {{ data[0].formation_text }}
+
+
+ {% endfor %}
+
+
+ {% endif %}
+
+
Fiche entreprise - {{ entreprise.nom }} ({{ entreprise.siret }})
+
+
+
+ SIRET : {{ entreprise.siret }}
+ Nom : {{ entreprise.nom }}
+ Adresse : {{ entreprise.adresse }}
+ Code postal : {{ entreprise.codepostal }}
+ Ville : {{ entreprise.ville }}
+ Pays : {{ entreprise.pays }}
+
+
+
+ {% if contacts %}
+
+ {% for contact in contacts %}
+ Contact {{loop.index}}
+ {% include 'entreprises/_contact.html' %}
+ {% endfor %}
+
+ {% endif %}
+
+ {% if offres %}
+
+ {% for offre in offres %}
+ Offre {{loop.index}} (ajouté le {{offre.date_ajout.strftime('%d/%m/%Y') }})
+ {% include 'entreprises/_offre.html' %}
+ {% endfor %}
+
+ {% endif %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/entreprises/form.html b/app/templates/entreprises/form.html
new file mode 100644
index 000000000..26add23e1
--- /dev/null
+++ b/app/templates/entreprises/form.html
@@ -0,0 +1,18 @@
+{% extends 'base.html' %}
+{% import 'bootstrap/wtf.html' as wtf %}
+
+{% block styles %}
+{{super()}}
+
+
+{% endblock %}
+
+{% block app_content %}
+ {{ title }}
+
+
+
+ {{ wtf.quick_form(form, novalidate=True) }}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/migrations/versions/f3b62d64efa3_creation_tables_relations_entreprises.py b/migrations/versions/f3b62d64efa3_creation_tables_relations_entreprises.py
new file mode 100644
index 000000000..7d629e280
--- /dev/null
+++ b/migrations/versions/f3b62d64efa3_creation_tables_relations_entreprises.py
@@ -0,0 +1,145 @@
+"""creation tables relations entreprises
+
+Revision ID: f3b62d64efa3
+Revises: 91be8a06d423
+Create Date: 2021-12-24 10:36:27.150085
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = 'f3b62d64efa3'
+down_revision = '91be8a06d423'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table('entreprise_log',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('date', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
+ sa.Column('authenticated_user', sa.Text(), nullable=True),
+ sa.Column('object', sa.Integer(), nullable=True),
+ sa.Column('text', sa.Text(), nullable=True),
+ sa.PrimaryKeyConstraint('id')
+ )
+
+ op.create_table('entreprise_etudiant',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('entreprise_id', sa.Integer(), nullable=True),
+ sa.Column('etudid', sa.Integer(), nullable=True),
+ sa.Column('type_offre', sa.Text(), nullable=True),
+ sa.Column('date_debut', sa.Date(), nullable=True),
+ sa.Column('date_fin', sa.Date(), nullable=True),
+ sa.Column('formation_text', sa.Text(), nullable=True),
+ sa.Column('formation_scodoc', sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(['entreprise_id'], ['entreprises.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+
+ op.create_table('entreprise_offre',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('entreprise_id', sa.Integer(), nullable=True),
+ sa.Column('date_ajout', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
+ sa.Column('intitule', sa.Text(), nullable=True),
+ sa.Column('description', sa.Text(), nullable=True),
+ sa.Column('type_offre', sa.Text(), nullable=True),
+ sa.Column('missions', sa.Text(), nullable=True),
+ sa.Column('duree', sa.Text(), nullable=True),
+ sa.ForeignKeyConstraint(['entreprise_id'], ['entreprises.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+
+ op.create_table('entreprise_envoi_offre',
+ sa.Column('id', sa.Integer(), nullable=False),
+ sa.Column('user_id', sa.Integer(), nullable=True),
+ sa.Column('offre_id', sa.Integer(), nullable=True),
+ sa.Column('date_envoi', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
+ sa.ForeignKeyConstraint(['offre_id'], ['entreprise_offre.id'], ),
+ sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
+ sa.PrimaryKeyConstraint('id')
+ )
+
+ op.drop_constraint('entreprise_contact_entreprise_corresp_id_fkey', 'entreprise_contact', type_='foreignkey')
+ op.drop_table('entreprise_correspondant')
+ op.add_column('entreprise_contact', sa.Column('nom', sa.Text(), nullable=True))
+ op.add_column('entreprise_contact', sa.Column('prenom', sa.Text(), nullable=True))
+ op.add_column('entreprise_contact', sa.Column('telephone', sa.Text(), nullable=True))
+ op.add_column('entreprise_contact', sa.Column('mail', sa.Text(), nullable=True))
+ op.add_column('entreprise_contact', sa.Column('poste', sa.Text(), nullable=True))
+ op.add_column('entreprise_contact', sa.Column('service', sa.Text(), nullable=True))
+ op.drop_column('entreprise_contact', 'description')
+ op.drop_column('entreprise_contact', 'enseignant')
+ op.drop_column('entreprise_contact', 'date')
+ op.drop_column('entreprise_contact', 'type_contact')
+ op.drop_column('entreprise_contact', 'etudid')
+ op.drop_column('entreprise_contact', 'entreprise_corresp_id')
+
+ op.add_column('entreprises', sa.Column('siret', sa.Text(), nullable=True))
+ op.drop_index('ix_entreprises_dept_id', table_name='entreprises')
+ op.drop_constraint('entreprises_dept_id_fkey', 'entreprises', type_='foreignkey')
+ op.drop_column('entreprises', 'qualite_relation')
+ op.drop_column('entreprises', 'note')
+ op.drop_column('entreprises', 'contact_origine')
+ op.drop_column('entreprises', 'plus10salaries')
+ op.drop_column('entreprises', 'privee')
+ op.drop_column('entreprises', 'secteur')
+ op.drop_column('entreprises', 'date_creation')
+ op.drop_column('entreprises', 'dept_id')
+ op.drop_column('entreprises', 'localisation')
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('entreprises', sa.Column('localisation', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('dept_id', sa.INTEGER(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('date_creation', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('secteur', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('privee', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('plus10salaries', sa.BOOLEAN(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('contact_origine', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('note', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprises', sa.Column('qualite_relation', sa.INTEGER(), autoincrement=False, nullable=True))
+ op.create_foreign_key('entreprises_dept_id_fkey', 'entreprises', 'departement', ['dept_id'], ['id'])
+ op.create_index('ix_entreprises_dept_id', 'entreprises', ['dept_id'], unique=False)
+ op.drop_column('entreprises', 'siret')
+ op.add_column('entreprise_contact', sa.Column('entreprise_corresp_id', sa.INTEGER(), autoincrement=False, nullable=True))
+ op.add_column('entreprise_contact', sa.Column('etudid', sa.INTEGER(), autoincrement=False, nullable=True))
+ op.add_column('entreprise_contact', sa.Column('type_contact', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprise_contact', sa.Column('date', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=True))
+ op.add_column('entreprise_contact', sa.Column('enseignant', sa.TEXT(), autoincrement=False, nullable=True))
+ op.add_column('entreprise_contact', sa.Column('description', sa.TEXT(), autoincrement=False, nullable=True))
+ op.create_table('entreprise_correspondant',
+ sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
+ sa.Column('entreprise_id', sa.INTEGER(), autoincrement=False, nullable=True),
+ sa.Column('nom', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('prenom', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('civilite', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('fonction', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('phone1', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('phone2', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('mobile', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('mail1', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('mail2', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('fax', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.Column('note', sa.TEXT(), autoincrement=False, nullable=True),
+ sa.ForeignKeyConstraint(['entreprise_id'], ['entreprises.id'], name='entreprise_correspondant_entreprise_id_fkey'),
+ sa.PrimaryKeyConstraint('id', name='entreprise_correspondant_pkey')
+ )
+ op.create_foreign_key('entreprise_contact_entreprise_corresp_id_fkey', 'entreprise_contact', 'entreprise_correspondant', ['entreprise_corresp_id'], ['id'])
+ op.drop_column('entreprise_contact', 'service')
+ op.drop_column('entreprise_contact', 'poste')
+ op.drop_column('entreprise_contact', 'mail')
+ op.drop_column('entreprise_contact', 'telephone')
+ op.drop_column('entreprise_contact', 'prenom')
+ op.drop_column('entreprise_contact', 'nom')
+
+ op.drop_table('entreprise_envoi_offre')
+ op.drop_table('entreprise_offre')
+ op.drop_table('entreprise_etudiant')
+ op.drop_table('entreprise_log')
+ # ### end Alembic commands ###
diff --git a/scodoc.py b/scodoc.py
index 94c8a7f09..1be505527 100755
--- a/scodoc.py
+++ b/scodoc.py
@@ -248,6 +248,16 @@ def edit_role(rolename, addpermissionname=None, removepermissionname=None): # e
db.session.add(role)
db.session.commit()
+@app.cli.command()
+@click.argument("rolename")
+def delete_role(rolename):
+ """Delete a role"""
+ role = Role.query.filter_by(name=rolename).first()
+ if role is None:
+ sys.stderr.write(f"delete_role: role {rolename} does not exists\n")
+ return 1
+ db.session.delete(role)
+ db.session.commit()
@app.cli.command()
@click.argument("username")