forked from ScoDoc/ScoDoc
120 lines
7.6 KiB
Python
120 lines
7.6 KiB
Python
|
from flask import flash
|
||
|
from markupsafe import Markup
|
||
|
from flask.app import Flask
|
||
|
import requests, re
|
||
|
from flask_wtf import FlaskForm
|
||
|
from wtforms import StringField, SubmitField, TextAreaField, SelectField, FileField
|
||
|
from wtforms.fields.html5 import EmailField, DateField
|
||
|
from wtforms.validators import ValidationError, DataRequired, Email
|
||
|
from app.entreprises.models import Entreprise
|
||
|
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):
|
||
|
siret = StringField("SIRET", validators=[DataRequired(message=DATA_REQUIRED_ERROR_MESSAGE)], render_kw={"placeholder": "Numéro composé de 14 chiffres"})
|
||
|
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)])
|
||
|
pays = StringField("Pays de l'entreprise", validators=[DataRequired(message=DATA_REQUIRED_ERROR_MESSAGE)])
|
||
|
|
||
|
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")])
|
||
|
submit = SubmitField("Envoyer")
|
||
|
|
||
|
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)])
|
||
|
submit = SubmitField("Modifier")
|
||
|
|
||
|
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)])
|
||
|
ficher = FileField("Fichier", validators=[])
|
||
|
submit = SubmitField("Envoyer")
|
||
|
|
||
|
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)])
|
||
|
submit = SubmitField("Modifier")
|
||
|
|
||
|
class ContactCreationForm(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")])
|
||
|
submit = SubmitField("Envoyer")
|
||
|
|
||
|
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")])
|
||
|
submit = SubmitField("Modifier")
|
||
|
|
||
|
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)])
|
||
|
submit = SubmitField("Envoyer")
|
||
|
|
||
|
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)])
|
||
|
submit = SubmitField("Envoyer")
|
||
|
|
||
|
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):
|
||
|
submit = SubmitField("Supprimer")
|