ajout siret provisoire, changement formulaire

This commit is contained in:
Arthur ZHU 2022-07-13 12:14:00 +02:00
parent f4514ad4ea
commit 999b0487c7
6 changed files with 122 additions and 35 deletions

View File

@ -10,6 +10,7 @@ from app.models import Departement
bp = Blueprint("entreprises", __name__) bp = Blueprint("entreprises", __name__)
LOGS_LEN = 5 LOGS_LEN = 5
SIRET_PROVISOIRE_START = "xx"
@bp.app_template_filter() @bp.app_template_filter()

View File

@ -348,14 +348,15 @@ def check_entreprise_import(entreprise_data):
if EntreprisePreferences.get_check_siret(): if EntreprisePreferences.get_check_siret():
if re.match("^\d{14}$", siret) is None: if re.match("^\d{14}$", siret) is None:
return False return False
try: else:
req = requests.get( try:
f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret}" req = requests.get(
) f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret}"
if req.status_code != 200: )
if req.status_code != 200:
return False
except requests.ConnectionError:
return False return False
except requests.ConnectionError:
return False
return True return True

View File

@ -65,6 +65,7 @@ from app.entreprises.models import (
from app import db from app import db
from app.models import Identite, Departement from app.models import Identite, Departement
from app.auth.models import User from app.auth.models import User
from app.entreprises import SIRET_PROVISOIRE_START
CHAMP_REQUIS = "Ce champ est requis" CHAMP_REQUIS = "Ce champ est requis"
SUBMIT_MARGE = {"style": "margin-bottom: 10px;"} SUBMIT_MARGE = {"style": "margin-bottom: 10px;"}
@ -87,9 +88,11 @@ class EntreprisesFilterForm(FlaskForm):
class EntrepriseCreationForm(FlaskForm): class EntrepriseCreationForm(FlaskForm):
siret = _build_string_field( siret = StringField(
"SIRET (*)", "SIRET",
validators=[Optional()],
render_kw={"placeholder": "Numéro composé de 14 chiffres"}, render_kw={"placeholder": "Numéro composé de 14 chiffres"},
description="Laissez vide pour générer un SIRET provisoire",
) )
association = BooleanField("Association") association = BooleanField("Association")
nom_entreprise = _build_string_field("Nom de l'entreprise (*)") nom_entreprise = _build_string_field("Nom de l'entreprise (*)")
@ -124,6 +127,39 @@ class EntrepriseCreationForm(FlaskForm):
if not FlaskForm.validate(self): if not FlaskForm.validate(self):
validate = False validate = False
if EntreprisePreferences.get_check_siret() and self.siret.data != "":
siret_data = self.siret.data.strip().replace(" ", "")
self.siret.data = siret_data
if re.match("^\d{14}$", siret_data) is None:
self.siret.errors.append("Format incorrect")
validate = False
else:
try:
req = requests.get(
f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret_data}"
)
if req.status_code != 200:
self.siret.errors.append("SIRET inexistant")
validate = False
except requests.ConnectionError:
self.siret.errors.append(
"Impossible de vérifier l'existance du SIRET"
)
validate = False
entreprise = Entreprise.query.filter_by(siret=siret_data).first()
if entreprise is not None:
if entreprise.visible is True:
lien = f'<a href="/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}">ici</a>'
self.siret.errors.append(
Markup(
f"Entreprise déjà présent, lien vers la fiche : {lien}"
)
)
validate = False
else:
self.siret.errors.append("Entreprise en phase de validation")
validate = False
if ( if (
self.nom_correspondant.data.strip() self.nom_correspondant.data.strip()
or self.prenom_correspondant.data.strip() or self.prenom_correspondant.data.strip()
@ -148,33 +184,13 @@ class EntrepriseCreationForm(FlaskForm):
return validate return validate
def validate_siret(self, siret):
if EntreprisePreferences.get_check_siret():
siret_data = siret.data.strip().replace(" ", "")
self.siret.data = siret_data
if re.match("^\d{14}$", siret_data) is None:
raise ValidationError("Format incorrect")
try:
req = requests.get(
f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret_data}"
)
if req.status_code != 200:
raise ValidationError("SIRET inexistant")
except requests.ConnectionError:
raise ValidationError("Impossible de vérifier l'existance du SIRET")
entreprise = Entreprise.query.filter_by(siret=siret_data).first()
if entreprise is not None:
if entreprise.visible is True:
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}")
)
else:
raise ValidationError("Entreprise en phase de validation")
class EntrepriseModificationForm(FlaskForm): class EntrepriseModificationForm(FlaskForm):
siret = StringField("SIRET (*)") siret = StringField("SIRET (*)")
new_siret = StringField(
"Modification du SIRET provisoire (*)",
description="Activé uniquement pour les entreprises avec SIRET provisoire",
)
association = BooleanField("Association") association = BooleanField("Association")
nom = _build_string_field("Nom de l'entreprise (*)") nom = _build_string_field("Nom de l'entreprise (*)")
adresse = _build_string_field("Adresse (*)") adresse = _build_string_field("Adresse (*)")
@ -186,6 +202,37 @@ class EntrepriseModificationForm(FlaskForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.siret.render_kw = {"disabled": ""} self.siret.render_kw = {"disabled": ""}
if self.siret.data.startswith(SIRET_PROVISOIRE_START) is True:
self.new_siret.validators = [Optional()]
else:
self.new_siret.render_kw = {"disabled": ""}
def validate_new_siret(self, new_siret):
if EntreprisePreferences.get_check_siret() and new_siret.data is not None:
siret_data = new_siret.data.strip().replace(" ", "")
self.new_siret.data = siret_data
if re.match("^\d{14}$", siret_data) is None:
raise ValidationError("Format incorrect")
else:
try:
req = requests.get(
f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret_data}"
)
if req.status_code != 200:
raise ValidationError("SIRET inexistant")
except requests.ConnectionError:
raise ValidationError("Impossible de vérifier l'existance du SIRET")
entreprise = Entreprise.query.filter_by(siret=siret_data).first()
if entreprise is not None:
if entreprise.visible is True:
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}"
)
)
else:
raise ValidationError("Entreprise en phase de validation")
class SiteCreationForm(FlaskForm): class SiteCreationForm(FlaskForm):

View File

@ -260,3 +260,19 @@ class EntreprisePreferences(db.Model):
else: else:
cs.value = check_siret cs.value = check_siret
db.session.commit() db.session.commit()
def entreprises_reset_database():
db.session.query(EntrepriseContact).delete()
db.session.query(EntrepriseStageApprentissage).delete()
db.session.query(EntrepriseTaxeApprentissage).delete()
db.session.query(EntrepriseCorrespondant).delete()
db.session.query(EntrepriseSite).delete()
db.session.query(EntrepriseEnvoiOffre).delete()
db.session.query(EntrepriseEnvoiOffreEtudiant).delete()
db.session.query(EntrepriseOffreDepartement).delete()
db.session.query(EntrepriseOffre).delete()
db.session.query(Entreprise).delete()
db.session.query(EntrepriseHistorique).delete()
db.session.query(EntreprisePreferences).delete()
db.session.commit()

View File

@ -10,7 +10,7 @@ from flask_login import current_user
from app.decorators import permission_required from app.decorators import permission_required
from app.entreprises import LOGS_LEN from app.entreprises import LOGS_LEN, SIRET_PROVISOIRE_START
from app.entreprises.forms import ( from app.entreprises.forms import (
ActivationConfirmationForm, ActivationConfirmationForm,
CorrespondantsCreationForm, CorrespondantsCreationForm,
@ -331,7 +331,10 @@ def add_entreprise():
if form.validate_on_submit(): if form.validate_on_submit():
entreprise = Entreprise( entreprise = Entreprise(
nom=form.nom_entreprise.data.strip(), nom=form.nom_entreprise.data.strip(),
siret=form.siret.data.strip(), siret=form.siret.data.strip()
if form.siret.data.strip()
else f"{SIRET_PROVISOIRE_START}{datetime.now().strftime('%d%m%y%H%M%S')}", # siret provisoire
siret_provisoire=False if form.siret.data.strip() else True,
association=form.association.data, association=form.association.data,
adresse=form.adresse.data.strip(), adresse=form.adresse.data.strip(),
codepostal=form.codepostal.data.strip(), codepostal=form.codepostal.data.strip(),
@ -409,6 +412,9 @@ def edit_entreprise(entreprise_id):
if form.validate_on_submit(): if form.validate_on_submit():
lien_entreprise = f"<a href=/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}>{form.nom.data.strip()}</a>" lien_entreprise = f"<a href=/ScoDoc/entreprises/fiche_entreprise/{entreprise.id}>{form.nom.data.strip()}</a>"
logs_text = [] logs_text = []
if form.new_siret.data:
logs_text.append(f"{lien_entreprise} - Modification du SIRET")
entreprise.siret = form.new_siret.data.strip()
if entreprise.nom != form.nom.data.strip(): if entreprise.nom != form.nom.data.strip():
logs_text.append( logs_text.append(
f"{lien_entreprise} - Modification du nom (ancien nom: {entreprise.nom})" f"{lien_entreprise} - Modification du nom (ancien nom: {entreprise.nom})"

View File

@ -31,6 +31,7 @@ from app.models import ModuleImpl, ModuleImplInscription
from app.models import Identite from app.models import Identite
from app.models import departements from app.models import departements
from app.models.evaluations import Evaluation from app.models.evaluations import Evaluation
from app.entreprises.models import entreprises_reset_database
from app.scodoc.sco_permissions import Permission from app.scodoc.sco_permissions import Permission
from app.views import notes, scolar from app.views import notes, scolar
import tools import tools
@ -518,6 +519,21 @@ def recursive_help(cmd, parent=None):
recursive_help(sub, ctx) recursive_help(sub, ctx)
@app.cli.command()
def entreprises_reset_db():
"""Remet a zéro les tables du module relations entreprises"""
click.confirm(
"This will erase all the tables from the blueprint 'entreprises'.\nAre you sure you want to continue?",
abort=True,
)
db.reflect()
try:
entreprises_reset_database()
except:
db.session.rollback()
raise
@app.cli.command() @app.cli.command()
def dumphelp(): def dumphelp():
"""Génère la page d'aide complète pour la doc.""" """Génère la page d'aide complète pour la doc."""