def insertC2CMoisPartnerRegionAdm(self, monthString):

        prevMonthString = Utils.getPrevMonthString(monthString)

        prevMonthData = self.getMonthValues(prevMonthString)

        monthData = self.getMonthValues(monthString)

        for c2c in monthData:
            for prevC2C in prevMonthData:
                if (prevC2C.partnerId == c2c.partnerId
                        and prevC2C.regionAdm == c2c.regionAdm):
                    c2c.c2cM1 = prevC2C.c2c
                    c2c.evolM1 = c2c.c2c - prevC2C.c2c

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(monthData)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #2
0
    def getC2CMoisValues(self, monthString):
        """ Cette fonction prend en paramètres un mois au format aaaamm
        récupère tous les jours du mois et calcul pour chaque stkb le c2s du mois 
        on crée un dictionnaire contenant toutes les stkbs du mois en question
        au début si un élément n'existe pas on le rajoute, ensuite pour les prochains jours
        """

        #on récupère tous les jours du mois en paramètre
        year = int(monthString[:4])
        month = int(monthString[-2:])

        numDays = calendar.monthrange(year, month)[1]
        days = [datetime.date(year, month, day) for day in range(1, numDays + 1)]
        jours = []
        for day in days:            
            jours.append(day.strftime(self._DATE_FORMAT))
        #on initialise le dictionnaire des données avec 

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        c2cMonth = dict()
        for jour in jours:            
            c2cJourStkas = session.query(DDC2CJourSTKA).filter_by(jour = jour)
            for c2cJour in c2cJourStkas:
                if(c2cJour.stkaMsisdn not in c2cMonth):                    
                    tmpC2c = DDC2CMoisSTKA(c2cJour) 
                    tmpC2c.mois = monthString                           
                    tmpC2c.c2c = 0
                    c2cMonth[c2cJour.stkaMsisdn] = tmpC2c
                tmp = c2cMonth[c2cJour.stkaMsisdn]
                tmp.c2c = tmp.c2c + c2cJour.c2c
                c2cMonth[c2cJour.stkaMsisdn] = tmp
        session.close()
        return c2cMonth
예제 #3
0
    def insertObjectifsMensuelACVI(self, month):

        sessionFactory = SessionFactory()

        data = []

        #01082017

        connection = sessionFactory.getConnection()
        requete = "select  acvi, mois,  sum(objectif) objectif from dd_objectif_mensuel_c2s_stkb where mois = '" + month + "' GROUP BY acvi"
        result = connection.execute(requete)

        for row in result:
            tmpElt = DDObjectifMensuelACVI(row)
            print(tmpElt)
            data.append(tmpElt)
        connection.close()

        session = sessionFactory.Session()
        try:
            session.add_all(data)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec succès")
        except Exception as ex:
            self.view_traceback()
            session.rollback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec erreur, rollback fait!")
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
    def insertC2CJourPartnerRegionAdm(self, day):
        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        data = []

        connection = sessionFactory.getConnection()
        result = connection.execute(
            "select partner_id, partner_name, region_adm, region_com, sem, jour, sum(c2c) c2c  from dd_c2c_jour_stkp where jour = '"
            + day + "' group by partner_id, region_adm")

        for row in result:
            tmpElt = DDC2CJourPartnerRegionAdm(row)
            data.append(tmpElt)

        connection.close()

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(data)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #5
0
    def getC2SMoisValues(self, monthString):
        """ Cette fonction prend en paramètres un mois au format aaaamm
        récupère tous les jours du mois et calcul pour chaque stkb le c2s du mois 
        on crée un dictionnaire contenant toutes les stkbs du mois en question
        au début si un élément n'existe pas on le rajoute, ensuite pour les prochains jours
        """

        #on récupère tous les jours du mois en paramètre
        year = int(monthString[:4])
        month = int(monthString[-2:])

        numDays = calendar.monthrange(year, month)[1]

        days = [
            datetime.date(year, month, day) for day in range(1, numDays + 1)
        ]

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        jours = []

        for day in days:
            jours.append(day.strftime(self._DATE_FORMAT))

        #on initialise le dictionnaire des données avec

        c2sMonth = dict()

        for jour in jours:
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>>>>>>>> Début recherche infos pour le jour ", jour)
            c2sJourStkbs = session.query(DDC2SJourSTKB).filter_by(jour=jour)

            for c2sJour in c2sJourStkbs:

                if (c2sJour.stkbMsisdn not in c2sMonth):

                    tmpC2s = DDC2SMoisSTKB(c2sJour)
                    tmpC2s.mois = monthString
                    tmpC2s.c2s = 0
                    c2sMonth[c2sJour.stkbMsisdn] = tmpC2s

                tmp = c2sMonth[c2sJour.stkbMsisdn]

                tmp.c2s = tmp.c2s + c2sJour.c2s

                if c2sJour.c2s >= self._SEUIL_PRESENCE_MENSUEL_C2S:
                    if tmp.presence != None:
                        tmp.presence = tmp.presence + 1
                    else:
                        tmp.presence = 1
                else:
                    if tmp.presence == None:
                        tmp.presence = 0
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  " >>>>>>>>> Fin recherche infos pour le jour ", jour)

        return c2sMonth
예제 #6
0
    def getAllStkpForWeek(self, weekString):
        """ Cette fonction prend en paramètres une semaine au format aaaass exemple 201735 
        Génère l'ensemble des jours de la semaine en question au format dd/mm/aaaa 
        
        Elle crée ensuite une liste contenant les informations de la stkb sans c2s """

        #jours = self.getAllWeekDays(weekString, self._DATE_FORMAT)
        jours = Utils.getAllWeekDays(weekString, self._DATE_FORMAT)
        for jour in jours:
            print(jour)
        sessionFactory = SessionFactory()
        session = sessionFactory.Session()
        stkpsWeek = self.getC2CJourSTKPEntriesByDate(jours, self._DATE_FORMAT,
                                                     session)
        return stkpsWeek
예제 #7
0
    def getPrevMonthString(monthString):
        year = int(monthString[:4])
        month = int(monthString[-2:])

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        previousMonth = month - 1

        if (previousMonth <= 9):
            previousMonthString = str(year) + "0" + str(previousMonth)
        else:
            previousMonthString = str(year) + str(previousMonth)

        return previousMonthString
예제 #8
0
    def insertC2CSTKADay(self, day):
        
        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        stkps = session.query(DDC2CJourSTKP).filter_by(jour = day)

        resultat = dict()

        sem = Utils.getWeekNumberFromDate(day, self._DATE_FORMAT)

        for stkp in stkps:
            if(resultat.get(stkp.stkaMsisdn) == None):                
                tmp = DDC2CJourSTKA(stkp)
                tmp.jour = day
                tmp.sem = sem
                tmp.stkaMsisdn = stkp.stkaMsisdn
                resultat[stkp.stkaMsisdn] = tmp       
                
        connection = sessionFactory.getConnection()
        result = connection.execute("select sum(c2c) c2c, stka_msisdn  from dd_c2c_jour_stkp where jour= '"+day+"' group by stka_msisdn")

        for row in result:            
            stkaMsisdn = row['stka_msisdn']
            tmpC2c = row['c2c']
            resultat[stkaMsisdn].c2c = tmpC2c

        connection.close()    

        toAdd = []

        for res, val in resultat.items():
            toAdd.append(val)

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(toAdd)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close") 
예제 #9
0
    def getC2CWeek(self, weekString):
        """ Cette fonction prend en paramètres une semaine au format aaaass et retourne la liste
        des c2s_stkb_week pour cette semaine """

        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        stkpsWeek = session.query(DDC2CWeekSTKP).filter_by(sem=weekString)

        resultat = dict()

        for stkp in stkpsWeek:
            resultat[stkp.stkpMsisdn] = stkp

        return resultat
    def getWeekValues(self, weekString):
        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        data = []

        connection = sessionFactory.getConnection()
        result = connection.execute(
            "select partner_id, partner_name, region_adm, region_com, sem, sum(c2c) c2c  from dd_c2c_jour_stkp where sem = '"
            + weekString + "' group by partner_id, region_adm")

        for row in result:
            tmpElt = DDC2CWeekPartnerRegionAdm(row)
            data.append(tmpElt)
        connection.close()

        return data
    def getMonthValues(self, month):
        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        data = []

        #01082017

        connection = sessionFactory.getConnection()
        requete = "select partner_id, partner_name, region_adm, region_com, concat(substr(replace(jour, '/', ''), 5), substr(replace(jour, '/', ''), 3, 2))  mois, sum(c2c) c2c  from dd_c2c_jour_stkp where concat(substr(replace(jour, '/', ''), 5), substr(replace(jour, '/', ''), 3, 2)) = '" + month + "' group by partner_id, region_adm"
        result = connection.execute(requete)

        for row in result:
            tmpElt = DDC2CMoisPartnerRegionAdm(row)
            data.append(tmpElt)
        connection.close()

        return data
예제 #12
0
    def saveNewC2SJourSTB(self, c2sList):

        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        try:

            session.add_all(c2sList)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec succès")
        except Exception as ex:
            self.view_traceback()
            session.rollback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec erreur, rollback fait!")
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #13
0
    def getC2CSTKAWeek(self, weekString):
        """ Cette fonction prend en paramètre une semaine et calcule pour chaque stka en BD
        son C2C pour cette semaine """
        
        weekDays = Utils.getAllWeekDays(weekString, self._DATE_FORMAT)
        resultat = dict()
        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        print(time.strftime("%d/%m/%Y %H:%M:%S"), ">>>>>>>>>> Début du parcours des jours pour la semaine ", weekString)
        for day in weekDays:
            stkasDay = session.query(DDC2CJourSTKA).filter_by(jour = day)
            print(time.strftime("%d/%m/%Y %H:%M:%S"),">>>>>>>>>>>>>>>>>>> Début du parcours pour le jour ", day )                
            for stka in stkasDay:
                if(resultat.get(stka.stkaMsisdn) == None):                
                    resultat[stka.stkaMsisdn] = DDC2CSemSTKA(stka)                
                else:
                    resultat[stka.stkaMsisdn].c2c = resultat[stka.stkaMsisdn].c2c + stka.c2c
            print(time.strftime("%d/%m/%Y %H:%M:%S"),">>>>>>>>>>>>>>>>>>> Fin du parcours pour le jour ", day )
        

        return resultat
예제 #14
0
    def getC2SWeek(self, weekString):
        """ Cette fonction prend en paramètres une semaine au format aaaass et retourne la liste
        des c2s_stkb_week pour cette semaine """

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Début chargement de la semaine précédente (", weekString, ")")

        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        stkbsWeek = session.query(DDC2SWeekSTKB).filter_by(sem=weekString)

        result = dict()

        for stkb in stkbsWeek:
            result[stkb.stkbMsisdn] = stkb

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Fin chargement de la semaine précédente (", weekString, ")")

        return result
예제 #15
0
    def saveObjectifMensuelSTKB(self, objectifsMensuelsSTKB):
        """
        - fileData, les informations telles que chargées du fichier
        - Le mois pour lequel on calcul les objectifs
        - dbSTKBS les stkbs récupérées en BD, plus précisément celles du dernier jour en BD
        """

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        try:
            session.add_all(objectifsMensuelsSTKB)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec succès")
        except Exception as ex:
            self.view_traceback()
            session.rollback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec erreur, rollback fait!")
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #16
0
    def insertNewMonth(self, monthString):

        #on détermine le mois précédent

        sessionFactory = SessionFactory()

        session = sessionFactory.Session()

        #on récupère tous les jours du mois en paramètre
        year = int(monthString[:4])
        month = int(monthString[-2:])

        if (
                month == 1
        ):  # si nous sommes au premier mois il y a aucune initialisation à faire toutes les valeurs sont à 0
            monthC2S = self.getC2SMoisValues(monthString)
            c2sToAdd = []

            for key, val in monthC2S.items():
                c2sToAdd.apppend(val)
        else:
            previousMonth = month - 1

            if (previousMonth <= 9):
                previousMonthString = str(year) + "0" + str(previousMonth)
            else:
                previousMonthString = str(year) + str(previousMonth)

            print(
                time.strftime("%d/%m/%Y %H:%M:%S"),
                " >>> début de la récupération des données du mois précédent ",
                previousMonthString)

            previousMonthC2SList = session.query(DDC2SMoisSTKB).filter_by(
                mois=previousMonthString)

            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>> Fin de la récupération des données du mois précédent ")

            previousMonthC2S = dict()

            for prevStkb in previousMonthC2SList:
                previousMonthC2S[prevStkb.stkbMsisdn] = prevStkb

            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>> Récupération des données du mois en cours ",
                  monthString)
            monthC2S = self.getC2SMoisValues(monthString)
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>> Fin de la récupération des données du mois en cours ")

            newMonthC2S = []

            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>> Début de la complétion des informations ")
            for key in monthC2S:
                print(time.strftime("%d/%m/%Y %H:%M:%S"),
                      ">>>>>> Début de la complétion des informations pour  ",
                      key)
                if (previousMonthC2S.get(key) != None):
                    monthC2S[key].c2sMoins1 = previousMonthC2S[key].c2s
                    monthC2S[key].evolutionM1 = monthC2S[
                        key].c2s - previousMonthC2S[key].c2s
                    #calculer les points de présence
                    #calculer les points d'évolution

                    if (previousMonthC2S[key].c2s != 0
                            and previousMonthC2S[key] != None):
                        evolution = (monthC2S[key].c2s /
                                     previousMonthC2S[key].c2s)

                        if (evolution < 1):
                            pointsEvolution = -20
                        if (evolution == 1):
                            pointsEvolution = 5
                        if (evolution > 1 and evolution < 1.1):
                            pointsEvolution = 10
                        if (evolution >= 1.1 and evolution < 1.2):
                            pointsEvolution = 20
                        if (evolution >= 1.2):
                            pointsEvolution = 25
                        monthC2S[key].pointsEvol = pointsEvolution

                    else:
                        monthC2S[key].pointsEvol = 0
                print(time.strftime("%d/%m/%Y %H:%M:%S"),
                      ">>>>>> Fin de la complétion des informations pour  ",
                      key)
                newMonthC2S.append(monthC2S[key])

            # a la fin de la boucle on a les C2S mensuels avec les valeurs
            # il ne reste plus qu'à calculer les points d'assiduité et les points de production

            c2sToAdd = []

            for c2s in newMonthC2S:

                presence = c2s.presence

                if presence < 20:
                    pointsPresence = 0
                elif presence >= 20 and presence < 25:
                    pointsPresence = 10
                elif presence >= 25:
                    pointsPresence = 25

                c2s.pointsAssiduite = pointsPresence
                # calcul des points de production
                c2s.pointsProd = (c2s.c2s / 10000) * 0.5
                c2sToAdd.append(c2s)

            #calculer les points de présence
            #calculer les points d'évolution
        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(c2sToAdd)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #17
0
    def insertNewWeek(self, weekString):

        print(
            time.strftime("%d/%m/%Y %H:%M:%S"),
            "Début calculs préalables à l'insertion d'une nouvelle semaine c2s_week_stkb",
            weekString)
        annee = int(weekString[:4])
        # on récupère le numéro de la semaine
        sem = int(weekString[-2:])

        # Etant donné un numéro de semaine il faut retourner le numéro de semaine qui
        # le précède
        # prevWeek =
        #

        week = Week(annee, sem)
        lundi = week.monday()

        #on récupère le dimanche
        #
        dimanchePrecedent = lundi + timedelta(days=-1)
        previousYear = dimanchePrecedent.strftime("%Y")

        if (int(previousYear) == annee):
            if (sem - 1) <= 9:
                prevWeekString = previousYear + "0" + str(sem - 1)
            else:
                prevWeekString = previousYear + str(sem - 1)

        else:
            prevWeekNum = dimanchePrecedent.isocalendar()[1]

            if prevWeekNum <= 9:
                prevWeekString = previousYear + "0" + str(prevWeekNum)
            else:
                prevWeekString = previousYear + str(prevWeekNum)

        print(
            time.strftime("%d/%m/%Y %H:%M:%S"),
            "Fin des calculs préalable à l'insertion d'une nouvelle semaine c2s_week_stkb",
            weekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Chargement des données pour la semaine précédente ",
              prevWeekString)

        stkpsPreviousWeek = self.getC2CWeek(prevWeekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Chargement des données pour la semaine en cours ", weekString)
        stkpsWeek = self.getAllStkpForWeek(weekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Début de la complétion des lignes")

        for tmp, val in stkpsWeek.items():
            print(val)

        toAdd = []
        for stkp in stkpsWeek:
            if len(stkpsPreviousWeek) > 0:
                if (stkpsPreviousWeek.get(stkp) != None):
                    stkpsWeek[stkp].c2cMoins1 = stkpsPreviousWeek[stkp].c2c
                    stkpsWeek[stkp].evolutionS1 = stkpsWeek[
                        stkp].c2c - stkpsPreviousWeek[stkp].c2c
            toAdd.append(stkpsWeek[stkp])

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Fin de la complétion des lignes")
        # à ce niveau ont a toutes les données sur l'évolution et on peut donce enregistrer la nouvelle semaine

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        try:
            session.add_all(toAdd)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertion avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #18
0
    def insertNewMonth(self, monthString):

        #on détermine le mois précédent

        #on récupère tous les jours du mois en paramètre
        year = int(monthString[:4])
        month = int(monthString[-2:])

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        if (
                month == 1
        ):  # si nous sommes au premier mois il y a aucune initialisation à faire toutes les valeurs sont à 0
            monthC2C = self.getC2CMoisValues(monthString)
            c2cToAdd = []

            for key, val in monthC2C.items():
                c2cToAdd.append(val)
        else:
            previousMonth = month - 1

            if (previousMonth <= 9):
                previousMonthString = str(year) + "0" + str(previousMonth)
            else:
                previousMonthString = str(year) + str(previousMonth)

            previousMonthC2CList = session.query(DDC2CMoisSTKP).filter_by(
                mois=previousMonthString)

            previousMonthC2C = dict()

            for prevStkp in previousMonthC2CList:
                previousMonthC2C[prevStkp.stkpMsisdn] = prevStkp

            monthC2C = self.getC2CMoisValues(monthString)

            newMonthC2C = []

            for key in monthC2C:

                if (previousMonthC2C.get(key) != None):
                    monthC2C[key].c2cMoins1 = previousMonthC2C[key].c2c
                    monthC2C[key].evolutionM1 = monthC2C[
                        key].c2c - previousMonthC2C[key].c2c
                    #calculer les points de présence
                    #calculer les points d'évolution
                newMonthC2C.append(monthC2C[key])

            # a la fin de la boucle on a les C2S mensuels avec les valeurs
            # il ne reste plus qu'à calculer les points d'assiduité et les points de production

            #calculer les points de présence
            #calculer les points d'évolution

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(newMonthC2C)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")
예제 #19
0
    def insertC2CSTKAWeek(self, weekString):
        
        print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début calculs préalables à l'insertion d'une nouvelle semaine dans c2CSTKA", weekString)  
        annee = int(weekString[:4])        
        # on récupère le numéro de la semaine
        sem = int(weekString[-2:])    

        week = Week(annee, sem)
        lundi = week.monday()

        dimanchePrecedent = lundi + timedelta(days=-1)

        previousYear = dimanchePrecedent.strftime("%Y")

        if(int(previousYear) == annee):
            if(sem - 1) <= 9:
                prevWeekString = previousYear+"0"+str(sem - 1)
            else:
                prevWeekString = previousYear+str(sem-1)
        
        else:
            prevWeekNum = dimanchePrecedent.isocalendar()[1]
            if prevWeekNum <= 9:
                prevWeekString = previousYear + "0"+ str(prevWeekNum)
            else:
                prevWeekString = previousYear+str(prevWeekNum) 

        print(time.strftime("%d/%m/%Y %H:%M:%S"), "Récupération de la semaine précédente", prevWeekString) 

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()
        print(time.strftime("%d/%m/%Y %H:%M:%S"), ">>>>>>>> Récupération des informations de la semaine précédente ", prevWeekString)
        stkasPreviousWeekList = session.query(DDC2CSemSTKA).filter_by(sem = prevWeekString)
        print(time.strftime("%d/%m/%Y %H:%M:%S"), ">>>>>>>> Fin Récupération des informations de la semaine précédente ", prevWeekString)
        

        stkasPreviousWeek = dict()

        for stkaPrev in stkasPreviousWeekList:
            stkasPreviousWeek[stkaPrev.stkaMsisdn] = stkaPrev

        print(time.strftime("%d/%m/%Y %H:%M:%S"), ">>>>>>>> Récupération des informations de la semaine en cours ", weekString)
        stkasWeek = self.getC2CSTKAWeek(weekString)
        print(time.strftime("%d/%m/%Y %H:%M:%S"), ">>>>>>>> Fin de la récupération des informations de la semaine en cours ", weekString)
        toAdd = []

        if len(stkasPreviousWeek) > 0:
            #si le tableau de la semaine précédente n'est pas vide
            #on met à jour les informations relatives au mois précédent
            for stka, val in stkasWeek.items():
                if stkasPreviousWeek.get(stka) != None:
                    val.c2cS1 = stkasPreviousWeek.get(stka).c2c
                    val.evolS1 = float(val.c2c) - float(stkasPreviousWeek.get(stka).c2c)                
                toAdd.append(val)    
        else:
            for stka, val in stkasWeek.items():
                toAdd.append(val)           
                 
        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add(toAdd)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")                 
예제 #20
0
    def insertNewWeek(self, weekString):

        print(
            time.strftime("%d/%m/%Y %H:%M:%S"),
            "Début calculs préalables à l'insertion d'une nouvelle semaine c2s_week_stkb",
            weekString)

        prevWeekString = Utils.getPrevWeekString(weekString)

        print(
            time.strftime("%d/%m/%Y %H:%M:%S"),
            "Fin des calculs préalables à l'insertion d'une nouvelle semaine c2s_week_stkb",
            weekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Chargement des données pour la semaine précédente")

        stkbsPreviousWeek = self.getC2SWeek(prevWeekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Chargement des données pour la semaine en cours")
        stkbsWeek = self.getAllStkbForWeek(weekString)

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Début de la complétion des lignes")

        stkbsToAdd = []

        for stkb in stkbsWeek:
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  ">>>> Début de la complétion pour", stkb)
            stkbPrev = stkbsPreviousWeek.get(stkb)
            if stkbPrev != None:
                stkbsWeek[stkb].c2sMoins1 = stkbPrev.c2s
                stkbsWeek[
                    stkb].evolutionS1 = stkbsWeek[stkb].c2s - stkbPrev.c2s
            stkbsToAdd.append(stkbsWeek[stkb])

        print(time.strftime("%d/%m/%Y %H:%M:%S"),
              "Fin de la complétion des lignes")

        # à ce niveau ont a toutes les données sur l'évolution et on peut donce enregistrer la nouvelle semaine

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        try:
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Début insertion ")
            session.add_all(stkbsToAdd)
            session.commit()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Fin insertion ")
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Fin insertions avec succès")
        except Exception as ex:
            self.view_traceback()
            print(time.strftime("%d/%m/%Y %H:%M:%S"),
                  "Echec de l'insertion, annulation des modifications")
            session.rollback()
        finally:
            session.close()
            print(time.strftime("%d/%m/%Y %H:%M:%S"), "Session close")