2021-12-23 19:28:25 +01:00
from flask import flash
2021-12-27 11:48:58 +01:00
from flask_wtf import FlaskForm
2021-12-23 19:28:25 +01:00
from markupsafe import Markup
import requests , re
2021-12-27 19:00:38 +01:00
from wtforms import StringField , SubmitField , TextAreaField , SelectField , HiddenField
2021-12-23 19:28:25 +01:00
from wtforms . fields . html5 import EmailField , DateField
2021-12-27 19:00:38 +01:00
from flask_wtf . file import FileField , FileAllowed
2021-12-23 19:28:25 +01:00
from wtforms . validators import ValidationError , DataRequired , Email
2021-12-24 12:12:41 +01:00
from app . entreprises . models import Entreprise , EntrepriseContact
2021-12-23 19:28:25 +01:00
from app . models import Identite
from app . auth . models import User
from app . scodoc import sco_etud
from sqlalchemy import text
DATA_REQUIRED_ERROR_MESSAGE = " Ce champ est requis "
class EntrepriseCreationForm ( FlaskForm ) :
2021-12-27 19:00:38 +01:00
siret = StringField ( " SIRET " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] , render_kw = { " placeholder " : " Numéro composé de 14 chiffres " , " maxlength " : " 14 " } )
2021-12-23 19:28:25 +01:00
nom_entreprise = StringField ( " Nom de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
adresse = StringField ( " Adresse de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
codepostal = StringField ( " Code postal de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
ville = StringField ( " Ville de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 11:48:58 +01:00
pays = StringField ( " Pays de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] , render_kw = { " style " : " margin-bottom: 50px; " } )
2021-12-23 19:28:25 +01:00
nom_contact = StringField ( " Nom du contact " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
prenom_contact = StringField ( " Prénom du contact " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
telephone = StringField ( " Téléphone du contact " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
mail = EmailField ( " Mail du contact " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) , Email ( message = " Adresse e-mail invalide " ) ] )
2021-12-27 11:48:58 +01:00
poste = StringField ( " Poste du contact " , validators = [ ] )
service = StringField ( " Service du contact " , validators = [ ] )
submit = SubmitField ( " Envoyer " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
def validate_siret ( self , siret ) :
siret = siret . data . strip ( )
if re . match ( " ^ \ d {14} $ " , siret ) == None :
raise ValidationError ( " Format incorrect " )
req = requests . get ( f " https://entreprise.data.gouv.fr/api/sirene/v1/siret/ { siret } " )
if req . status_code != 200 :
raise ValidationError ( " SIRET inexistant " )
entreprise = Entreprise . query . filter_by ( siret = siret ) . first ( )
if entreprise is not None :
lien = f " <a href= \" /ScoDoc/entreprises/fiche_entreprise/ { entreprise . id } \" >ici</a> "
raise ValidationError ( Markup ( f " Entreprise déjà présent, lien vers la fiche : { lien } " ) )
class EntrepriseModificationForm ( FlaskForm ) :
siret = StringField ( " SIRET " , validators = [ ] , render_kw = { " disabled " : " " } )
nom = StringField ( " Nom de l ' entreprise " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
adresse = StringField ( " Adresse " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
codepostal = StringField ( " Code postal " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
ville = StringField ( " Ville " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
pays = StringField ( " Pays " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Modifier " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
class OffreCreationForm ( FlaskForm ) :
intitule = StringField ( " Intitulé " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
description = TextAreaField ( " Description " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
type_offre = SelectField ( " Type de l ' offre " , choices = [ ( ' Stage ' ) , ( ' Alternance ' ) ] , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
missions = TextAreaField ( " Missions " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
duree = StringField ( " Durée " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 19:00:38 +01:00
fichier = FileField ( " Fichier " , validators = [ FileAllowed ( [ ' pdf ' , ' docx ' ] , ' Fichier .pdf ou .docx uniquement ' ) ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Envoyer " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
class OffreModificationForm ( FlaskForm ) :
intitule = StringField ( " Intitulé " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
description = TextAreaField ( " Description " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
type_offre = SelectField ( " Type de l ' offre " , choices = [ ( ' Stage ' ) , ( ' Alternance ' ) ] , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
missions = TextAreaField ( " Missions " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
duree = StringField ( " Durée " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Modifier " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
class ContactCreationForm ( FlaskForm ) :
2021-12-24 16:07:36 +01:00
hidden_entreprise_id = HiddenField ( )
2021-12-23 19:28:25 +01:00
nom = StringField ( " Nom " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
prenom = StringField ( " Prénom " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
telephone = StringField ( " Téléphone " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
mail = EmailField ( " Mail " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) , Email ( message = " Adresse e-mail invalide " ) ] )
2021-12-24 16:07:36 +01:00
poste = StringField ( " Poste " , validators = [ ] )
service = StringField ( " Service " , validators = [ ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Envoyer " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
2021-12-24 12:12:41 +01:00
def validate ( self ) :
rv = FlaskForm . validate ( self )
if not rv :
return False
contact = EntrepriseContact . query . filter_by (
entreprise_id = self . hidden_entreprise_id . data ,
nom = self . nom . data ,
prenom = self . prenom . data
) . first ( )
if contact is not None :
self . nom . errors . append ( " Ce contact existe déjà (même nom et prénom) " )
self . prenom . errors . append ( " " )
return False
return True
2021-12-23 19:28:25 +01:00
class ContactModificationForm ( FlaskForm ) :
nom = StringField ( " Nom " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
prenom = StringField ( " Prénom " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
telephone = StringField ( " Téléphone " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
mail = EmailField ( " Mail " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) , Email ( message = " Adresse e-mail invalide " ) ] )
2021-12-27 11:48:58 +01:00
poste = StringField ( " Poste " , validators = [ ] )
service = StringField ( " Service " , validators = [ ] )
submit = SubmitField ( " Modifier " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
class HistoriqueCreationForm ( FlaskForm ) :
etudiant = StringField ( " Étudiant " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] , render_kw = { " placeholder " : " Tapez le nom de l ' étudiant puis selectionnez " } )
type_offre = SelectField ( " Type de l ' offre " , choices = [ ( ' Stage ' ) , ( ' Alternance ' ) ] , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
date_debut = DateField ( " Date début " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
date_fin = DateField ( " Date fin " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Envoyer " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
def validate ( self ) :
rv = FlaskForm . validate ( self )
if not rv :
return False
if self . date_debut . data > self . date_fin . data :
self . date_debut . errors . append ( " Les dates sont incompatibles " )
self . date_fin . errors . append ( " Les dates sont incompatibles " )
return False
return True
def validate_etudiant ( self , etudiant ) :
etudiant_data = etudiant . data . upper ( ) . strip ( )
stm = text ( " SELECT id, CONCAT(nom, ' ' , prenom) as nom_prenom FROM Identite WHERE CONCAT(nom, ' ' , prenom)=:nom_prenom " )
etudiant = Identite . query . from_statement ( stm ) . params ( nom_prenom = etudiant_data ) . first ( )
if etudiant is None :
raise ValidationError ( " Champ incorrect (selectionnez dans la liste) " )
class EnvoiOffreForm ( FlaskForm ) :
responsable = StringField ( " Responsable de formation " , validators = [ DataRequired ( message = DATA_REQUIRED_ERROR_MESSAGE ) ] )
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Envoyer " , render_kw = { " style " : " margin-bottom: 10px; " } )
2021-12-23 19:28:25 +01:00
def validate_responsable ( self , responsable ) :
responsable_data = responsable . data . upper ( ) . strip ( )
stm = text ( " SELECT id, UPPER(CONCAT(nom, ' ' , prenom, ' ' , ' ( ' , user_name, ' ) ' )) FROM \" user \" WHERE UPPER(CONCAT(nom, ' ' , prenom, ' ' , ' ( ' , user_name, ' ) ' ))=:responsable_data " )
responsable = User . query . from_statement ( stm ) . params ( responsable_data = responsable_data ) . first ( )
if responsable is None :
raise ValidationError ( " Champ incorrect (selectionnez dans la liste) " )
class SuppressionConfirmationForm ( FlaskForm ) :
2021-12-27 11:48:58 +01:00
submit = SubmitField ( " Supprimer " , render_kw = { " style " : " margin-bottom: 10px; " } )