diff --git a/app/__init__.py b/app/__init__.py index 76f9471bb..cedb4564b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -190,6 +190,7 @@ def create_app(config_class=DevConfig): app.register_error_handler(ScoGenError, handle_sco_value_error) app.register_error_handler(ScoValueError, handle_sco_value_error) + app.register_error_handler(404, handle_sco_value_error) app.register_error_handler(AccessDenied, handle_access_denied) app.register_error_handler(500, internal_server_error) @@ -201,7 +202,7 @@ def create_app(config_class=DevConfig): app.register_blueprint(auth_bp, url_prefix="/auth") from app.entreprises import bp as entreprises_bp - + app.register_blueprint(entreprises_bp, url_prefix="/ScoDoc/entreprises") from app.views import scodoc_bp diff --git a/app/entreprises/routes.py b/app/entreprises/routes.py index 43cef4a31..eaef9275c 100644 --- a/app/entreprises/routes.py +++ b/app/entreprises/routes.py @@ -123,7 +123,9 @@ def fiche_entreprise(id): La fiche entreprise comporte les informations de l'entreprise, les contacts de l'entreprise et les offres de l'entreprise. """ - entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"fiche entreprise {id} inconnu" + ) offres_with_files = [] depts = are.get_depts() for offre in entreprise.offres: @@ -163,7 +165,9 @@ def logs_entreprise(id): Permet d'afficher les logs (toutes les entreprises) """ page = request.args.get("page", 1, type=int) - entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"logs fiche entreprise {id} inconnu" + ) logs = ( EntrepriseLog.query.order_by(EntrepriseLog.date.desc()) .filter_by(object=id) @@ -183,7 +187,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( + description=f"fiche entreprise (validation) {id} inconnu" + ) contacts = entreprise.contacts return render_template( "entreprises/fiche_entreprise_validation.html", @@ -235,7 +241,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"fiche entreprise {id} inconnu" + ) offres_expirees_with_files = [] depts = are.get_depts() for offre in entreprise.offres: @@ -309,7 +317,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"entreprise {id} inconnu" + ) form = EntrepriseModificationForm() if form.validate_on_submit(): nom_entreprise = f"{form.nom.data.strip()}" @@ -376,7 +386,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"entreprise {id} inconnu" + ) form = SuppressionConfirmationForm() if form.validate_on_submit(): db.session.delete(entreprise) @@ -411,7 +423,9 @@ def validate_entreprise(id): Permet de valider une entreprise """ form = ValidationConfirmationForm() - entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404() + entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( + description=f"entreprise (validation) {id} inconnu" + ) if form.validate_on_submit(): entreprise.visible = True nom_entreprise = f"{entreprise.nom}" @@ -436,7 +450,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=False).first_or_404( + description=f"entreprise (validation) {id} inconnu" + ) form = SuppressionConfirmationForm() if form.validate_on_submit(): db.session.delete(entreprise) @@ -456,7 +472,9 @@ def add_offre(id): """ Permet d'ajouter une offre a une entreprise """ - entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"entreprise {id} inconnu" + ) form = OffreCreationForm() if form.validate_on_submit(): offre = EntrepriseOffre( @@ -499,7 +517,9 @@ def edit_offre(id): """ Permet de modifier une offre """ - offre = EntrepriseOffre.query.filter_by(id=id).first_or_404() + offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( + description=f"offre {id} inconnu" + ) offre_depts = EntrepriseOffreDepartement.query.filter_by(offre_id=offre.id).all() form = OffreModificationForm() offre_depts_list = [(offre_dept.dept_id) for offre_dept in offre_depts] @@ -554,7 +574,9 @@ def delete_offre(id): """ Permet de supprimer une offre """ - offre = EntrepriseOffre.query.filter_by(id=id).first_or_404() + offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( + description=f"offre {id} inconnu" + ) entreprise_id = offre.entreprise.id form = SuppressionConfirmationForm() if form.validate_on_submit(): @@ -588,7 +610,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() + ).first_or_404(description=f"offre recu {id} inconnu") db.session.delete(offre_recue) db.session.commit() return redirect(url_for("entreprises.offres_recues")) @@ -600,7 +622,9 @@ def add_contact(id): """ Permet d'ajouter un contact a une entreprise """ - entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"entreprise {id} inconnu" + ) form = ContactCreationForm(hidden_entreprise_id=entreprise.id) if form.validate_on_submit(): contact = EntrepriseContact( @@ -635,7 +659,9 @@ def edit_contact(id): """ Permet de modifier un contact """ - contact = EntrepriseContact.query.filter_by(id=id).first_or_404() + contact = EntrepriseContact.query.filter_by(id=id).first_or_404( + description=f"contact {id} inconnu" + ) form = ContactModificationForm( hidden_entreprise_id=contact.entreprise_id, hidden_contact_id=contact.id, @@ -678,7 +704,9 @@ def delete_contact(id): """ Permet de supprimer un contact """ - contact = EntrepriseContact.query.filter_by(id=id).first_or_404() + contact = EntrepriseContact.query.filter_by(id=id).first_or_404( + description=f"contact {id} inconnu" + ) form = SuppressionConfirmationForm() if form.validate_on_submit(): contact_count = EntrepriseContact.query.filter_by( @@ -717,7 +745,9 @@ 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() + entreprise = Entreprise.query.filter_by(id=id, visible=True).first_or_404( + description=f"entreprise {id} inconnu" + ) form = HistoriqueCreationForm() if form.validate_on_submit(): etudiant_nomcomplet = form.etudiant.data.upper().strip() @@ -760,7 +790,9 @@ def envoyer_offre(id): """ Permet d'envoyer une offre à un utilisateur """ - offre = EntrepriseOffre.query.filter_by(id=id).first_or_404() + offre = EntrepriseOffre.query.filter_by(id=id).first_or_404( + description=f"offre {id} inconnu" + ) form = EnvoiOffreForm() if form.validate_on_submit(): responsable_data = form.responsable.data.upper().strip() @@ -794,7 +826,7 @@ def json_etudiants(): """ Permet de récuperer un JSON avec tous les étudiants """ - if request.args.get("term") == None: + if request.args.get("term") is None: abort(400) term = request.args.get("term").strip() etudiants = Identite.query.filter(Identite.nom.ilike(f"%{term}%")).all() @@ -820,7 +852,7 @@ def json_responsables(): """ Permet de récuperer un JSON avec tous les étudiants """ - if request.args.get("term") == None: + if request.args.get("term") is None: abort(400) term = request.args.get("term").strip() responsables = User.query.filter( @@ -873,8 +905,9 @@ def get_import_entreprises_file_sample(): "pays", ] titles = keys[:] + # lines = [["" for x in range(6)] for y in range(100)] title = "ImportEntreprises" - xlsx = sco_excel.excel_simple_table(titles=titles, sheet_name="Entreprises") + xlsx = sco_excel.excel_simple_table_test(titles=titles, sheet_name="Entreprises") filename = title return scu.send_file(xlsx, filename, scu.XLSX_SUFFIX, scu.XLSX_MIMETYPE) @@ -1126,7 +1159,7 @@ def get_offre_file(entreprise_id, offre_id, filedir, filename): as_attachment=True, ) else: - abort(404) + abort(404, description=f"fichier {filename} inconnu") @bp.route("/add_offre_file/", methods=["GET", "POST"]) @@ -1135,7 +1168,9 @@ def add_offre_file(offre_id): """ Permet d'ajouter un fichier à une offre """ - offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404() + offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404( + description=f"offre {offre_id} inconnu" + ) form = AjoutFichierForm() if form.validate_on_submit(): date = f"{datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}" @@ -1165,7 +1200,9 @@ 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() + offre = EntrepriseOffre.query.filter_by(id=offre_id).first_or_404( + description=f"offre {offre_id} inconnu" + ) form = SuppressionConfirmationForm() if form.validate_on_submit(): path = os.path.join( diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py index 978247800..cdeb40875 100644 --- a/app/scodoc/sco_excel.py +++ b/app/scodoc/sco_excel.py @@ -428,6 +428,52 @@ 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)