From 999b0487c7b41b9c823632cf817238a1b2517a06 Mon Sep 17 00:00:00 2001 From: Arthur ZHU Date: Wed, 13 Jul 2022 12:14:00 +0200 Subject: [PATCH] ajout siret provisoire, changement formulaire --- app/entreprises/__init__.py | 1 + app/entreprises/app_relations_entreprises.py | 15 +-- app/entreprises/forms.py | 99 +++++++++++++++----- app/entreprises/models.py | 16 ++++ app/entreprises/routes.py | 10 +- scodoc.py | 16 ++++ 6 files changed, 122 insertions(+), 35 deletions(-) diff --git a/app/entreprises/__init__.py b/app/entreprises/__init__.py index 44fd128e75..121b7e3cb8 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 86415c472c..c34c602bcc 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 5d89aa71cd..853a358c96 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 5795d76ddb..aabb66c5a3 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 469f6fd0e1..4d35abe344 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 01881bf7fa..cc93eebe99 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."""