def create_ancien(prenom, nom, promo, ecole, mail_asso, diplome): """ Créer un ancien à partir des données d'un formulaire :param str prenom: :param str nom: :param int promo: :param str ecole: In E, P, N :param str mail_asso: :param str diplome: :return: """ ins = __ancien.insert().returning(__ancien.c.id_ancien).values( prenom=prenom, prenom_slug=helper.slugify(prenom), nom=nom, nom_slug=helper.slugify(nom), ecole=ecole, promo=promo, mail_asso=mail_asso, diplome=diplome, ) inserted_id = engine.execute(ins).first()[0] update_ancien_date(inserted_id) return inserted_id
def _insert_update_adresse(ville, id_pays, id_adresse, adresse="", code=""): """ Mettre à jour une adresse perso ou pro, en updatant ou insérant. En updatant ou insérant la ville au passage :param id_ancien: int, id_ancien :param adresse: str, l'adresse en texte libre :param ville: str, la ville en texte libre :param code: int, le ocde postal en texte libre puis converti en int :param id_pays: int :return: id_adresse: l'id de l'adresse insérée / updatéee """ # 2 : est-ce que la ville existe ? si non, insert ! id_ville = None if helper.is_valid_integer(id_pays): sel = select([__ville.c.id_ville]) sel = sel.where(and_(_slug_by_column(__ville.c.slug, helper.slugify(ville), True), __ville.c.id_pays == id_pays)) sel = sel.distinct() res = engine.execute(sel).first() if res is not None: # si la ville existe, on récupère son numéro id_ville = res[0] elif (ville is not None and ville != "") and (id_pays is not None and id_pays != ""): # si la ville n'existe pas, mais qu'il y a un texte et un pays # on l'insère et on récupère son numéro ins = __ville.insert().values(nom=ville, slug=helper.slugify(ville), id_pays=id_pays) engine.execute(ins) sel = select([__ville.c.id_ville]) sel = sel.where(and_(_slug_by_column(__ville.c.slug, helper.slugify(ville), True), __ville.c.id_pays == id_pays)) res = engine.execute(sel).first() id_ville = res[0] # 3 : update (ou insert) de l'adresse if id_ville is not None: if id_adresse is not None: a = __adresse # si l'adresse existe, la mettre à jour up = a.update().where(a.c.id_adresse == id_adresse).values(id_ville=id_ville, adresse=adresse, code=code) engine.execute(up) else: a = __adresse # si l'adresse n'existe pas, l'insérer ins = a.insert().values(id_ville=id_ville, adresse=adresse, code=code) engine.execute(ins) sel = select([a.c.id_adresse]).where(and_(a.c.id_ville == id_ville, a.c.adresse == adresse, a.c.code == code)) id_adresse = engine.execute(sel).first()[0] return id_adresse
def find_entreprise_autocomplete(term, limit=5): """ Rechercher une liste d'entreprise pour l'autocomplete :param term: terme de recherche (un seul) :return: SELECT nom FROM entreprise WHERE entreprise.slug LIKE 'term%' """ result = None if not (term is None or term == ""): sel = select([__entreprise.c.nom], __entreprise.c.slug.like(helper.slugify(term)+'%')) sel = sel.distinct().order_by(__entreprise.c.nom).limit(limit) result = engine.execute(sel) return result
def find_mot_autocomplete(term, limit=10): """ Recherche une liste de mot dans la table mot. Limite les réponses à _limit_ réponses. On recherche d'abord l'expression complète, par exemple '''SNCF Services''' Puis on recherche le dernier mot, ici, '''Services''' :param term: terme de recherche, une seule string :return: SELECT mot FROM mot WHERE mot.slug LIKE 'slugify(term)%' OR mot.slug LIKE 'slugify(last_term%)' """ result = None if not (term is None or term == ""): slug = helper.slugify(term) condition1 = __mot.c.slug.like(slug +'%') sel = select([__mot.c.mot]).where(condition1).order_by(desc(__mot.c.occurence)).limit(limit) result = engine.execute(sel).fetchall() #last_word = slug.strip("-").split("-")[-1] #if len(result) == 0 and last_word != "": # condition2 = __mot.c.slug.like(last_word+"%") # sel = select([__mot.c.mot]).where(condition2).order_by(desc(__mot.c.occurence)).limit(limit) # result = engine.execute(sel).fetchall() return result
def update_experience(id_ancien, id_experience, ville, id_pays, adresse, code, entreprise, poste, description, mail, site, telephone, mobile, date_debut, date_fin=None, id_experience_linkedin=None): """ Mettre à jour / insérer une expérience pro ancien :param id_ancien: :param id_experience: :param ville: :param id_pays: :param adresse: :param code: :param entreprise: :param poste: :param description: :param mail: :param site: :param telephone: :param mobile: :return: inserted_id, l'id de l'expérience insérée / mise à jour """ success = False inserted_id = None if id_ancien is not None: # s'occuper de l'adresse id_adresse = None sel = select([__experience.c.id_adresse]).where(and_(__experience.c.id_ancien == id_ancien, __experience.c.id_experience == id_experience)) res = engine.execute(sel).first() if res is not None: id_adresse = res[0] id_adresse = _insert_update_adresse(ville, id_pays, id_adresse, adresse, code) # s'occuper de l'entreprise id_entreprise = None sel = select([__entreprise.c.id_entreprise]).where(_slug_by_column(__entreprise.c.slug, helper.slugify(entreprise), True)) res = engine.execute(sel).first() if res is not None: id_entreprise = res[0] if id_entreprise is None and entreprise != "": ins = __entreprise.insert().values(nom=entreprise, slug=helper.slugify(entreprise)) engine.execute(ins) sel = select([__entreprise.c.id_entreprise]).where(_slug_by_column(__entreprise.c.slug, helper.slugify(entreprise), True)) id_entreprise = engine.execute(sel).first()[0] # insert / update experience if id_experience is not None: # update ssi l'expérience est associée au bon ancien up = __experience.update().where( and_( __experience.c.id_experience == id_experience, __experience.c.id_ancien == id_ancien ) ).values( id_entreprise = id_entreprise, id_adresse = id_adresse, poste = poste, description = description, telephone = telephone, mobile = mobile, mail = mail, site = site, debut = date_debut, fin = date_fin ) engine.execute(up) inserted_id = id_experience else: ins = __experience.insert().values( id_ancien = id_ancien, id_entreprise = id_entreprise, id_adresse = id_adresse, poste = poste, description = description, telephone = telephone, mobile = mobile, mail = mail, site = site, debut = date_debut, fin = date_fin, id_experience_linkedin = id_experience_linkedin ) engine.execute(ins) success = update_ancien_date(id_ancien) return success