diff --git a/app/entreprises/__init__.py b/app/entreprises/__init__.py
index 44fd128e7..121b7e3cb 100644
--- a/app/entreprises/__init__.py
+++ b/app/entreprises/__init__.py
@@ -10,6 +10,7 @@ from app.models import Departement
bp = Blueprint("entreprises", __name__)
LOGS_LEN = 5
+SIRET_PROVISOIRE_START = "xx"
@bp.app_template_filter()
diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py
index 86415c472..c34c602bc 100644
--- a/app/entreprises/app_relations_entreprises.py
+++ b/app/entreprises/app_relations_entreprises.py
@@ -348,14 +348,15 @@ def check_entreprise_import(entreprise_data):
if EntreprisePreferences.get_check_siret():
if re.match("^\d{14}$", siret) is None:
return False
- try:
- req = requests.get(
- f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret}"
- )
- if req.status_code != 200:
+ else:
+ try:
+ req = requests.get(
+ f"https://entreprise.data.gouv.fr/api/sirene/v1/siret/{siret}"
+ )
+ if req.status_code != 200:
+ return False
+ except requests.ConnectionError:
return False
- except requests.ConnectionError:
- return False
return True
diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py
index 5d89aa71c..853a358c9 100644
--- a/app/entreprises/forms.py
+++ b/app/entreprises/forms.py
@@ -65,6 +65,7 @@ from app.entreprises.models import (
from app import db
from app.models import Identite, Departement
from app.auth.models import User
+from app.entreprises import SIRET_PROVISOIRE_START
CHAMP_REQUIS = "Ce champ est requis"
SUBMIT_MARGE = {"style": "margin-bottom: 10px;"}
@@ -87,9 +88,11 @@ class EntreprisesFilterForm(FlaskForm):
class EntrepriseCreationForm(FlaskForm):
- siret = _build_string_field(
- "SIRET (*)",
+ siret = StringField(
+ "SIRET",
+ validators=[Optional()],
render_kw={"placeholder": "Numéro composé de 14 chiffres"},
+ description="Laissez vide pour générer un SIRET provisoire",
)
association = BooleanField("Association")
nom_entreprise = _build_string_field("Nom de l'entreprise (*)")
@@ -124,6 +127,39 @@ class EntrepriseCreationForm(FlaskForm):
if not FlaskForm.validate(self):
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'ici'
+ 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 (
self.nom_correspondant.data.strip()
or self.prenom_correspondant.data.strip()
@@ -148,33 +184,13 @@ class EntrepriseCreationForm(FlaskForm):
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'ici'
- 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):
siret = StringField("SIRET (*)")
+ new_siret = StringField(
+ "Modification du SIRET provisoire (*)",
+ description="Activé uniquement pour les entreprises avec SIRET provisoire",
+ )
association = BooleanField("Association")
nom = _build_string_field("Nom de l'entreprise (*)")
adresse = _build_string_field("Adresse (*)")
@@ -186,6 +202,37 @@ class EntrepriseModificationForm(FlaskForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
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'ici'
+ 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):
diff --git a/app/entreprises/models.py b/app/entreprises/models.py
index 5795d76dd..aabb66c5a 100644
--- a/app/entreprises/models.py
+++ b/app/entreprises/models.py
@@ -260,3 +260,19 @@ class EntreprisePreferences(db.Model):
else:
cs.value = check_siret
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()
diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py
index 469f6fd0e..4d35abe34 100644
--- a/app/entreprises/routes.py
+++ b/app/entreprises/routes.py
@@ -10,7 +10,7 @@ from flask_login import current_user
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 (
ActivationConfirmationForm,
CorrespondantsCreationForm,
@@ -331,7 +331,10 @@ def add_entreprise():
if form.validate_on_submit():
entreprise = Entreprise(
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,
adresse=form.adresse.data.strip(),
codepostal=form.codepostal.data.strip(),
@@ -409,6 +412,9 @@ def edit_entreprise(entreprise_id):
if form.validate_on_submit():
lien_entreprise = f"{form.nom.data.strip()}"
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():
logs_text.append(
f"{lien_entreprise} - Modification du nom (ancien nom: {entreprise.nom})"
diff --git a/scodoc.py b/scodoc.py
index 01881bf7f..cc93eebe9 100755
--- a/scodoc.py
+++ b/scodoc.py
@@ -31,6 +31,7 @@ from app.models import ModuleImpl, ModuleImplInscription
from app.models import Identite
from app.models import departements
from app.models.evaluations import Evaluation
+from app.entreprises.models import entreprises_reset_database
from app.scodoc.sco_permissions import Permission
from app.views import notes, scolar
import tools
@@ -518,6 +519,21 @@ def recursive_help(cmd, parent=None):
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()
def dumphelp():
"""Génère la page d'aide complète pour la doc."""