Пример #1
0
def _get_experience_template(id_experience, form = None):
    """
    Permet de render le template _experience_pro pour l'ancien en cours.

    :param id_experience:   l'id de l'expérience considérée
    :param form:            le formulaire d'expérience pro à inclure

    On prend des formulaires en entrée pour gérer les erreurs.


    NB: la modificaiton in-line des expériences pro (sans page reload) ne
        permet plus de render des templates complets côté serveur. Plutôt
        que de réécrire l'intégralité de l'appli côté client, on render des
        templates partiels qu'on injecte dans la page sur des appels POST.

        Ce n'est pas super propre, mais c'est la vie :3

        cf : _get_info_perso_template
    """

    experience = None
    is_this_me = False

    if current_user is not None and current_user.id_ancien is not None:
        is_this_me = True

        experience = annuaire.find_experience_by_id_ancien_id_experience(current_user.id_ancien, id_experience).first()

        if form is None:
            form = user.update_experience_form()
            form.load_experience(experience)

    else:
        # attention, on ne devrait jamais arriver ici
        if form is None:
            form = user.update_experience_form()

    form.set_pays(PAYS)

    return render_template(
        'annuaire/profile/_experience.html',
        exp=experience,
        form=form,
        utilisateur=current_user,
        editable=True
    )
Пример #2
0
def ancien(id_ancien):
    """
    Afficher le profil d'un ancien.

    Si l'ancien est l'ancien associé à l'utilisateur, alors on affiche des formulaires d'update pour :
    - Les infos perso
    - L'adresse perso
    - Les expériences pros
    - Le mot de passe

    On affiche également les fonctionnalités linkedin :
    - Associer / dissocier mon compte
    - Importer des expériences

    :param int id_ancien: L'id de l'ancien étudié
    :return:
    """

    is_this_me =  current_user is not None and current_user.id_ancien == id_ancien

    kwargs = { "actif" : True, "bloque" : False }
    if is_this_me or current_user.admin:
        kwargs = { "actif" : None, "bloque" : None }

    # Chargement de l'ancien
    ancien = annuaire.find_ancien_by_id(id_ancien, **kwargs)


    # Cas 1 : il n'existe pas
    if ancien is None:
        abort(404, "Il semblerait que la page n'existe pas ...")

    # cas 2 : il est bloqué
    # (donc normalement ici c'est l'utilisateur concerné qui consulte la fiche)
    elif is_this_me and ancien['bloque']:
        flash(
            "Ton compte a été désactivé par les administrateurs."
            "Nous t'invitons à les contacter pour le débloquer.",
            "danger"
        )
        return redirect(url_for("annuaire_view"))

    # Cas 3 : cas nominal !
    else:
        ancien_form = user.update_ancien_form()
        adresse_form = user.update_adresse_form()
        adresse_form.set_pays(PAYS)
        experience_forms = {}
        new_experience_form = None
        linkedin_url = None
        import_linkedin_url = None
        password_form = user.change_password_form()


        # get data by id ancien
        adresse = annuaire.find_adresse_by_id_ancien(id_ancien)
        experiences = annuaire.find_experience_by_id_ancien(id_ancien).fetchall()

        for exp in experiences:
            form = user.update_experience_form()
            form.set_pays(PAYS)
            form.load_experience(exp)
            experience_forms[exp['experience_id_experience']] = form

        # Ici on regarde si il s'agit bien de l'utilisateur
        if is_this_me:

            #~~~~~~~~~#
            # ADRESSE #
            #~~~~~~~~~#
            adresse = annuaire.find_adresse_by_id_ancien(current_user.id_ancien)
            if adresse is not None:
                adresse_form.load_adresse(adresse)

            #~~~~~~~~~~~~~#
            # INFOS PERSO #
            #~~~~~~~~~~~~~#
            ancien_form = user.update_ancien_form()
            ancien_form.load_ancien(ancien)

            #~~~~~~~~~~~~~~~~~~#
            # AJOUT EXPERIENCE #
            #~~~~~~~~~~~~~~~~~~#
            new_experience_form = user.update_experience_form()
            new_experience_form.set_pays(PAYS)


            #~~~~~~~~~~~~~~~~~~#
            # Gestion LinkedIn #
            #~~~~~~~~~~~~~~~~~~#
            # Connexion à LinkedIn
            if ancien['url_linkedin'] is None:
                linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                    "response_type=code&"
                                    "client_id=%s&"
                                    "scope=r_basicprofile"
                                    "&state=%s"
                                    "&redirect_uri=%s" %
                                    (app.config['LINKEDIN_KEY'],
                                     #app.config['LINKEDIN_SCOPE'],
                                     generate_csrf_token(),
                                     url_for('linkedin_associer', _external=True)))

            # import des expériences pro linkeding
            import_linkedin_url = ("https://www.linkedin.com/uas/oauth2/authorization?"
                                "response_type=code&"
                                "client_id=%s&"
                                "scope=r_basicprofile"
                                "&state=%s"
                                "&redirect_uri=%s" %
                                (app.config['LINKEDIN_KEY'],
                                 #app.config['LINKEDIN_SCOPE'],
                                 generate_csrf_token(),
                                 url_for('linkedin_importer', _external=True)))

            print import_linkedin_url



        # load page
        return render_template(
            'annuaire/ancien.html',
            admin=current_user.admin,
            ancien=ancien,
            adresse=adresse,
            ancien_form=ancien_form,
            adresse_form=adresse_form,
            experiences=experiences,
            utilisateur=current_user,
            editable=is_this_me,
            experience_forms=experience_forms,
            new_experience_form = new_experience_form,
            linkedin_url = linkedin_url,
            import_linkedin_url= import_linkedin_url,
            password_form = password_form
        )
Пример #3
0
def update_experience(id_experience = None):
    """
    Page pour mettre à jour / ajouter des expériences pro d'un ancien

    POST : "commit" les données
    """

    id = id_experience

    res = {}
    res["content"] = None
    res["csrf_token"] = generate_csrf_token()
    res["success"] = False

    experience_form_to_render = None

    experience_form = user.update_experience_form()
    experience_form.set_pays(PAYS)


    if current_user.id_ancien is not None:

        experience_form = user.update_experience_form(request.form)
        experience_form.set_pays(PAYS)
        form_confirmed = experience_form.validate()

        if form_confirmed:
            try:
                date_debut = datetime.strptime(experience_form.date_debut.data, '%m/%Y')
            except ValueError:
                date_debut = None
            try:
                date_fin = datetime.strptime(experience_form.date_fin.data, '%m/%Y')
            except ValueError:
                date_fin = None

            success = annuaire.update_experience(
                current_user.id_ancien,
                id_experience,
                experience_form.ville.data,
                experience_form.pays.data,
                experience_form.adresse.data,
                experience_form.code.data,
                experience_form.entreprise.data,
                experience_form.poste.data,
                experience_form.description.data,
                experience_form.mail.data,
                experience_form.site.data,
                experience_form.telephone.data,
                experience_form.mobile.data,
                date_debut,
                date_fin
            )
            if id_experience is not None:
                flash("Expérience professionnelle modifiée", "success")
            else:
                flash("Expérience professionnelle ajoutée", "success")

            res["success"] = True

        else:
            experience_form_to_render = experience_form

        if id_experience is not None:
            res["content"] = _get_experience_template(id, form=experience_form_to_render)
        else:
            res["content"] = _get_new_experience_template(experience_form_to_render)



    return json.dumps(res)