diff --git a/app/entreprises/app_relations_entreprises.py b/app/entreprises/app_relations_entreprises.py index 6f060616d6..a08b0417ff 100644 --- a/app/entreprises/app_relations_entreprises.py +++ b/app/entreprises/app_relations_entreprises.py @@ -117,13 +117,13 @@ def verif_contact_data(contact_data): return False # entreprise_id existant - entreprise = Entreprise.query.filter_by(id=contact_data[6]).first() + entreprise = Entreprise.query.filter_by(siret=contact_data[6]).first() if entreprise is None: return False # contact possède le meme nom et prénom dans la meme entreprise contact = EntrepriseContact.query.filter_by( - nom=contact_data[0], prenom=contact_data[1], entreprise_id=contact_data[6] + nom=contact_data[0], prenom=contact_data[1], entreprise_id=entreprise.id ).first() if contact is not None: return False diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py index ca74da2615..4f2cfd8499 100644 --- a/app/entreprises/forms.py +++ b/app/entreprises/forms.py @@ -39,6 +39,7 @@ from wtforms import ( HiddenField, SelectMultipleField, DateField, + BooleanField, ) from wtforms.validators import ValidationError, DataRequired, Email, Optional from wtforms.widgets import ListWidget, CheckboxInput @@ -356,3 +357,12 @@ class ImportForm(FlaskForm): ], ) submit = SubmitField("Importer", render_kw=SUBMIT_MARGE) + + +class PreferencesForm(FlaskForm): + mail_entreprise = StringField( + "Mail notifications", + validators=[Optional(), Email(message="Adresse e-mail invalide")], + ) + check_siret = BooleanField("Vérification SIRET") + submit = SubmitField("Valider", render_kw=SUBMIT_MARGE) diff --git a/app/entreprises/models.py b/app/entreprises/models.py index 9a99f4bc82..ce0acc9844 100644 --- a/app/entreprises/models.py +++ b/app/entreprises/models.py @@ -27,7 +27,7 @@ class Entreprise(db.Model): def to_dict(self): return { "siret": self.siret, - "nom": self.nom, + "nom_entreprise": self.nom, "adresse": self.adresse, "code_postal": self.codepostal, "ville": self.ville, @@ -49,6 +49,7 @@ class EntrepriseContact(db.Model): service = db.Column(db.Text) def to_dict(self): + entreprise = Entreprise.query.filter_by(id=self.entreprise_id).first() return { "nom": self.nom, "prenom": self.prenom, @@ -56,7 +57,7 @@ class EntrepriseContact(db.Model): "mail": self.mail, "poste": self.poste, "service": self.service, - "entreprise_id": self.entreprise_id, + "entreprise_siret": entreprise.siret, } @@ -138,3 +139,10 @@ class EntrepriseOffreDepartement(db.Model): db.Integer, db.ForeignKey("are_entreprise_offre.id", ondelete="cascade") ) dept_id = db.Column(db.Integer, db.ForeignKey("departement.id", ondelete="cascade")) + + +class EntreprisePreferences(db.Model): + __tablename__ = "are_preferences" + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.Text) + value = db.Column(db.Text) diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index eaef9275c6..c3bfcfecd0 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -24,6 +24,7 @@ from app.entreprises.forms import ( AjoutFichierForm, ValidationConfirmationForm, ImportForm, + PreferencesForm, ) from app.entreprises import bp from app.entreprises.models import ( @@ -34,6 +35,7 @@ from app.entreprises.models import ( EntrepriseEtudiant, EntrepriseEnvoiOffre, EntrepriseOffreDepartement, + EntreprisePreferences, ) from app.entreprises import app_relations_entreprises as are from app.models import Identite @@ -124,7 +126,7 @@ def fiche_entreprise(id): les offres de l'entreprise. """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"fiche entreprise {id} inconnu" + description=f"fiche entreprise {id} inconnue" ) offres_with_files = [] depts = are.get_depts() @@ -188,7 +190,7 @@ def fiche_entreprise_validation(id): Permet d'afficher la fiche entreprise d'une entreprise a valider """ entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( - description=f"fiche entreprise (validation) {id} inconnu" + description=f"fiche entreprise (validation) {id} inconnue" ) contacts = entreprise.contacts return render_template( @@ -242,7 +244,7 @@ def offres_expirees(id): Permet d'afficher la liste des offres expirés d'une entreprise """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"fiche entreprise {id} inconnu" + description=f"fiche entreprise {id} inconnue" ) offres_expirees_with_files = [] depts = are.get_depts() @@ -318,7 +320,7 @@ def edit_entreprise(id): Permet de modifier une entreprise de la base avec un formulaire """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"entreprise {id} inconnu" + description=f"entreprise {id} inconnue" ) form = EntrepriseModificationForm() if form.validate_on_submit(): @@ -387,7 +389,7 @@ def delete_entreprise(id): Permet de supprimer une entreprise de la base avec un formulaire de confirmation """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"entreprise {id} inconnu" + description=f"entreprise {id} inconnue" ) form = SuppressionConfirmationForm() if form.validate_on_submit(): @@ -424,7 +426,7 @@ def validate_entreprise(id): """ form = ValidationConfirmationForm() entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( - description=f"entreprise (validation) {id} inconnu" + description=f"entreprise (validation) {id} inconnue" ) if form.validate_on_submit(): entreprise.visible = True @@ -451,7 +453,7 @@ def delete_validation_entreprise(id): Permet de supprimer une entreprise en attente de validation avec une formulaire de validation """ entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( - description=f"entreprise (validation) {id} inconnu" + description=f"entreprise (validation) {id} inconnue" ) form = SuppressionConfirmationForm() if form.validate_on_submit(): @@ -473,7 +475,7 @@ def add_offre(id): Permet d'ajouter une offre a une entreprise """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"entreprise {id} inconnu" + description=f"entreprise {id} inconnue" ) form = OffreCreationForm() if form.validate_on_submit(): @@ -518,7 +520,7 @@ def edit_offre(id): Permet de modifier une offre """ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( - description=f"offre {id} inconnu" + description=f"offre {id} inconnue" ) offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all() form = OffreModificationForm() @@ -575,7 +577,7 @@ def delete_offre(id): Permet de supprimer une offre """ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( - description=f"offre {id} inconnu" + description=f"offre {id} inconnue" ) entreprise_id = offre.entreprise.id form = SuppressionConfirmationForm() @@ -610,7 +612,7 @@ def delete_offre(id): def delete_offre_recue(id): offre_recue = EntrepriseEnvoiOffre.query.filter_by( id=id, receiver_id=current_user.id - ).first_or_404(description=f"offre recu {id} inconnu") + ).first_or_404(description=f"offre recu {id} inconnue") db.session.delete(offre_recue) db.session.commit() return redirect(url_for("entreprises.offres_recues")) @@ -623,7 +625,7 @@ def add_contact(id): Permet d'ajouter un contact a une entreprise """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"entreprise {id} inconnu" + description=f"entreprise {id} inconnue" ) form = ContactCreationForm(hidden_entreprise_id=entreprise.id) if form.validate_on_submit(): @@ -746,7 +748,7 @@ def add_historique(id): Permet d'ajouter un étudiant ayant réalisé un stage ou une alternance sur la fiche entreprise de l'entreprise """ entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( - description=f"entreprise {id} inconnu" + description=f"entreprise {id} inconnue" ) form = HistoriqueCreationForm() if form.validate_on_submit(): @@ -791,7 +793,7 @@ def envoyer_offre(id): Permet d'envoyer une offre à un utilisateur """ offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( - description=f"offre {id} inconnu" + description=f"offre {id} inconnue" ) form = EnvoiOffreForm() if form.validate_on_submit(): @@ -876,7 +878,7 @@ def export_entreprises(): """ entreprises = Entreprise.query.filter_by(visible=True).all() if entreprises: - keys = ["siret", "nom", "adresse", "ville", "code_postal", "pays"] + keys = ["siret", "nom_entreprise", "adresse", "ville", "code_postal", "pays"] titles = keys[:] L = [ [entreprise.to_dict().get(k, "") for k in keys] @@ -901,13 +903,12 @@ def get_import_entreprises_file_sample(): "nom_entreprise", "adresse", "ville", - "codepostal", + "code_postal", "pays", ] titles = keys[:] - # lines = [["" for x in range(6)] for y in range(100)] title = "ImportEntreprises" - xlsx = sco_excel.excel_simple_table_test(titles=titles, sheet_name="Entreprises") + xlsx = sco_excel.excel_simple_table(titles=titles, sheet_name="Entreprises") filename = title return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) @@ -930,7 +931,7 @@ def import_entreprises(): entreprises_import = [] siret_list = [] ligne = 0 - titles = ["siret", "nom", "adresse", "ville", "code_postal", "pays"] + titles = ["siret", "nom_entreprise", "adresse", "ville", "code_postal", "pays"] if data[1][0] != titles: flash("Veuillez utilisez la feuille excel à remplir") return render_template( @@ -1010,7 +1011,7 @@ def export_contacts(): "mail", "poste", "service", - "entreprise_id", + "entreprise_siret", ] titles = keys[:] L = [[contact.to_dict().get(k, "") for k in keys] for contact in contacts] @@ -1035,7 +1036,7 @@ def get_import_contacts_file_sample(): "mail", "poste", "service", - "entreprise_id", + "entreprise_siret", ] titles = keys[:] title = "ImportContacts" @@ -1069,7 +1070,7 @@ def import_contacts(): "mail", "poste", "service", - "entreprise_id", + "entreprise_siret", ] if data[1][0] != titles: flash("Veuillez utilisez la feuille excel à remplir") @@ -1169,7 +1170,7 @@ def add_offre_file(offre_id): Permet d'ajouter un fichier à une offre """ offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404( - description=f"offre {offre_id} inconnu" + description=f"offre {offre_id} inconnue" ) form = AjoutFichierForm() if form.validate_on_submit(): @@ -1201,7 +1202,7 @@ def delete_offre_file(offre_id, filedir): Permet de supprimer un fichier d'une offre """ offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404( - description=f"offre {offre_id} inconnu" + description=f"offre {offre_id} inconnue" ) form = SuppressionConfirmationForm() if form.validate_on_submit(): @@ -1223,3 +1224,45 @@ def delete_offre_file(offre_id, filedir): title="Suppression fichier d'une offre", form=form, ) + + +@bp.route("/preferences", methods=["GET", "POST"]) +@permission_required(Permission.RelationsEntreprisesValidate) +def preferences(): + form = PreferencesForm() + if form.validate_on_submit(): + exists = EntreprisePreferences.query.filter_by(name="check_siret").first() + if not exists: + prefs = EntreprisePreferences( + name="check_siret", value=int(form.check_siret.data) + ) + db.session.add(prefs) + else: + exists.value = int(form.check_siret.data) + db.session.commit() + exists = EntreprisePreferences.query.filter_by( + name="mail_notifications_entreprise" + ).first() + if not exists and form.mail_entreprise.data: + prefs = EntreprisePreferences( + name="mail_notifications_entreprise", + value=form.mail_entreprise.data.strip(), + ) + db.session.add(prefs) + else: + exists.value = form.mail_entreprise.data + db.session.commit() + db.session.commit() + return redirect(url_for("entreprises.index")) + elif request.method == "GET": + mail = EntreprisePreferences.query.filter_by( + name="mail_notifications_entreprise" + ).first() + check_siret = EntreprisePreferences.query.filter_by(name="check_siret").first() + form.mail_entreprise.data = mail.value + form.check_siret.data = int(check_siret.value) + return render_template( + "entreprises/preferences.html", + title="Préférences", + form=form, + ) diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py index cdeb408759..9782478009 100644 --- a/app/scodoc/sco_excel.py +++ b/app/scodoc/sco_excel.py @@ -428,52 +428,6 @@ def excel_simple_table( return ws.generate() -def excel_simple_table_test( - titles=None, lines=None, sheet_name=b"feuille", titles_styles=None, comments=None -): - """Export simple type 'CSV': 1ere ligne en gras, le reste tel quel""" - ws = ScoExcelSheet(sheet_name) - - if titles is None: - titles = [] - if lines is None: - lines = [[]] - if titles_styles is None: - style = excel_make_style(bold=True) - titles_styles = [style] * len(titles) - if comments is None: - comments = [None] * len(titles) - # ligne de titres - ws.append_row( - [ - ws.make_cell(it, style, comment) - for (it, style, comment) in zip(titles, titles_styles, comments) - ] - ) - default_style = excel_make_style() - text_style = excel_make_style(number_format=FORMAT_GENERAL) - int_style = excel_make_style() - float_style = excel_make_style(number_format=FORMAT_NUMBER_00) - for line in lines: - cells = [] - for it in line: - cell_style = default_style - if type(it) == float: - cell_style = float_style - elif type(it) == int: - cell_style = int_style - else: - cell_style = text_style - cells.append(ws.make_cell(it, cell_style)) - ws.append_row(cells) - - # sheet = ws.wb.active - # for cell in sheet["A2":"A100"]: - # cell.number_format = FORMAT_GENERAL - - return ws.generate() - - def excel_feuille_saisie(e, titreannee, description, lines): """Genere feuille excel pour saisie des notes. E: evaluation (dict) diff --git a/app/templates/entreprises/import_contacts.html b/app/templates/entreprises/import_contacts.html index a181229302..204a5e970a 100644 --- a/app/templates/entreprises/import_contacts.html +++ b/app/templates/entreprises/import_contacts.html @@ -28,7 +28,7 @@
Attribut | Type | Description |
siret | text | siret de l'entreprise |
nom | text | nom de l'entreprise |
nom_entreprise | text | nom de l'entreprise |
adresse | text | adresse de l'entreprise |
ville | text | ville de l'entreprise |
code_postal | text | code postal de l'entreprise |