Example #1
0
    def MAJ(self):
        self.IDconso = self.dictValeurs["IDconso"]
        self.date = self.dictValeurs["date"]
        self.IDunite = self.dictValeurs["IDunite"]
        self.heure_debut = self.dictValeurs["heure_debut"]
        self.heure_fin = self.dictValeurs["heure_fin"]
        self.quantite = self.dictValeurs["quantite"]
        self.etat = self.dictValeurs["etat"]
        self.etiquettes = self.dictValeurs["etiquettes"]

        self.nomUnite = "TEST"  #self.parent.dictUnites[self.IDunite]["nom"]

        self.texteDetail = ""
        if self.heure_debut != None and self.heure_fin != None:
            self.texteDetail = "%s - %s" % (self.heure_debut.replace(
                ":", "h"), self.heure_fin.replace(":", "h"))
        if self.quantite != None:
            self.texteDetail += _(u" Qté=%d") % self.quantite

        if self.etat == "reservation":
            self.texteEtat = _(u"Réservation")
        elif self.etat == "present":
            self.texteEtat = _(u"Présent")
        elif self.etat == "attente":
            self.texteEtat = _(u"Attente")
        elif self.etat == "absenti":
            self.texteEtat = _(u"Absence injustifiée")
        elif self.etat == "absentj":
            self.texteEtat = _(u"Absence justifiée")
        elif self.etat == "refus":
            self.texteEtat = _(u"Refus")
        else:
            self.texteEtat = ""

        # Calcule des horaires
        self.heure_debut_time = UTILS_Dates.HeureStrEnTime(self.heure_debut)
        self.heure_fin_time = UTILS_Dates.HeureStrEnTime(self.heure_fin)

        # Calcule la durée réelle
        self.duree_reelle = UTILS_Dates.SoustractionHeures(
            self.heure_fin_time, self.heure_debut_time)
        self.duree_reelle_str = UTILS_Dates.DeltaEnStr(self.duree_reelle,
                                                       separateur="h")

        # Calcule la durée arrondie
        arrondi_type = self.clsbase.GetValeur("arrondi_type", None)
        arrondi_delta = self.clsbase.GetValeur("arrondi_delta", 15)
        self.duree_arrondie = UTILS_Dates.CalculerArrondi(
            arrondi_type=arrondi_type,
            arrondi_delta=arrondi_delta,
            heure_debut=self.heure_debut_time,
            heure_fin=self.heure_fin_time)
        self.duree_arrondie_str = UTILS_Dates.DeltaEnStr(self.duree_arrondie,
                                                         separateur="h")
Example #2
0
    def __init__(self,
                 mois=1,
                 annee=2015,
                 clsbase=None,
                 track_mensualite=None):
        self.mois = mois
        self.annee = annee
        self.clsbase = clsbase
        self.track_mensualite = track_mensualite

        # Généralités
        self.IDinscription = self.clsbase.GetValeur("IDinscription", None)
        self.date_debut_contrat = self.clsbase.GetValeur("date_debut", None)
        self.date_fin_contrat = self.clsbase.GetValeur("date_fin", None)
        self.individu_nom_complet = self.clsbase.GetValeur(
            "individu_nom_complet", "")
        self.duree_tolerance_depassement = self.clsbase.GetValeur(
            "duree_tolerance_depassement", datetime.timedelta(0))
        self.arrondi_type = self.clsbase.GetValeur("arrondi_type",
                                                   datetime.timedelta(0))
        self.arrondi_delta = self.clsbase.GetValeur("arrondi_delta",
                                                    datetime.timedelta(0))
        self.IDunite_prevision = self.clsbase.GetValeur(
            "IDunite_prevision", None)
        self.IDunite_presence = self.clsbase.GetValeur("IDunite_presence",
                                                       None)

        # Ajout les RTT non prises si dernier mois du contrat
        if self.date_fin_contrat.month == mois and self.date_fin_contrat.year == annee:
            self.duree_solde_rtt = self.clsbase.GetValeur(
                "duree_absences_solde", datetime.timedelta(0))
        else:
            self.duree_solde_rtt = datetime.timedelta(0)

        # Mensualité
        self.label_prestation = self.track_mensualite.label_prestation
        self.heures_prevues = self.track_mensualite.heures_prevues
        self.montant_prevu = self.track_mensualite.montant_prevu
        self.IDprestation = self.track_mensualite.IDprestation
        self.date_facturation = self.track_mensualite.date_facturation
        self.forfait_date_debut = self.track_mensualite.forfait_date_debut
        self.forfait_date_fin = self.track_mensualite.forfait_date_fin
        self.taux = self.track_mensualite.taux
        self.tarif_base = self.track_mensualite.tarif_base
        self.tarif_depassement = self.track_mensualite.tarif_depassement

        # Prestation existante
        self.IDfacture = self.track_mensualite.IDfacture
        self.num_facture = self.track_mensualite.num_facture
        self.heures_facturees = self.track_mensualite.heures_facturees
        self.montant_facture = self.track_mensualite.montant_facture

        # Consommations
        self.heures_prevues_mois = datetime.timedelta(seconds=0)
        self.heures_presences = datetime.timedelta(seconds=0)
        self.heures_absences_deductibles = datetime.timedelta(seconds=0)
        self.heures_absences_non_deductibles = datetime.timedelta(seconds=0)
        self.heures_depassements = datetime.timedelta(seconds=0)
        self.heures_regularisation = datetime.timedelta(seconds=0)

        # Récupération des paramètres d'arrondis du contrat
        # arrondi_type = self.clsbase.GetValeur("arrondi_type")
        # arrondi_delta = self.clsbase.GetValeur("arrondi_delta")

        dict_conso = self.clsbase.GetValeur("dict_conso", {})
        self.dict_dates = {}
        for date, listeConso in dict_conso.items():

            # Recherche des consommations de la date
            if date.month == self.mois and date.year == self.annee:

                dict_date = {
                    "prevision": {
                        "heure_debut": None,
                        "heure_fin": None,
                        "duree_reelle": datetime.timedelta(0),
                        "duree_arrondie": datetime.timedelta(0),
                    },
                    "presence": {
                        "heure_debut": None,
                        "heure_fin": None,
                        "duree_reelle": datetime.timedelta(0),
                        "duree_arrondie": datetime.timedelta(0),
                    },
                    "heures_absences_non_deductibles": datetime.timedelta(0),
                    "heures_absences_deductibles": datetime.timedelta(0),
                    "depassement": datetime.timedelta(0),
                    "absences_rtt": datetime.timedelta(0),
                }

                for track in listeConso:

                    # Recherche des prévisions
                    if track.IDunite == self.clsbase.GetValeur(
                            "IDunite_prevision"):
                        self.heures_prevues_mois += track.duree_arrondie  # track.duree_reelle

                        if dict_date["prevision"][
                                "heure_debut"] == None or dict_date[
                                    "prevision"][
                                        "heure_debut"] < track.heure_debut_time:
                            dict_date["prevision"][
                                "heure_debut"] = track.heure_debut_time
                        if dict_date["prevision"][
                                "heure_fin"] == None or dict_date["prevision"][
                                    "heure_fin"] > track.heure_fin_time:
                            dict_date["prevision"][
                                "heure_fin"] = track.heure_fin_time
                        dict_date["prevision"][
                            "duree_reelle"] += track.duree_reelle
                        dict_date["prevision"][
                            "duree_arrondie"] += track.duree_arrondie

                    # Recherche des présences
                    if track.IDunite == self.clsbase.GetValeur(
                            "IDunite_presence"):

                        if track.etat in ("reservation", "present"):
                            self.heures_presences += track.duree_arrondie

                            if dict_date["presence"][
                                    "heure_debut"] == None or dict_date[
                                        "presence"][
                                            "heure_debut"] < track.heure_debut_time:
                                dict_date["presence"][
                                    "heure_debut"] = track.heure_debut_time
                            if dict_date["presence"][
                                    "heure_fin"] == None or dict_date[
                                        "presence"][
                                            "heure_fin"] > track.heure_fin_time:
                                dict_date["presence"][
                                    "heure_fin"] = track.heure_fin_time
                            dict_date["presence"][
                                "duree_reelle"] += track.duree_reelle
                            dict_date["presence"][
                                "duree_arrondie"] += track.duree_arrondie

                        if track.etat in ("absenti", ):
                            self.heures_absences_non_deductibles += track.duree_arrondie
                            dict_date[
                                "heures_absences_non_deductibles"] = self.heures_absences_non_deductibles

                        if track.etat in ("absentj", ):
                            self.heures_absences_deductibles += track.duree_arrondie
                            dict_date[
                                "heures_absences_deductibles"] = self.heures_absences_deductibles

                    # Recherche des absences RTT
                    if self.clsbase.GetValeur(
                            "psu_etiquette_rtt") in track.etiquettes:
                        dict_date["absences_rtt"] += track.duree_arrondie

        #         # Recherche des dépassements
        #         if track.IDunite == self.clsbase.GetValeur("IDunite_depassement") :
        #             self.heures_depassements += duree

        # Vérifie dépassement du début puis le dépassement de la fin
                depassement_debut = ("debut",
                                     dict_date["presence"]["heure_debut"],
                                     dict_date["prevision"]["heure_debut"])
                depassement_fin = ("fin", dict_date["prevision"]["heure_fin"],
                                   dict_date["presence"]["heure_fin"])

                for type_depassement, heure_min, heure_max in [
                        depassement_debut, depassement_fin
                ]:
                    depassement_arrondi = datetime.timedelta(0)

                    # Vérifie s'il y a bien une présence
                    if dict_date["presence"][
                            "duree_arrondie"] != datetime.timedelta(0):

                        # S'il y avait une prévision :
                        if dict_date["prevision"][
                                "duree_arrondie"] != datetime.timedelta(0):

                            if heure_min < heure_max:

                                # Vérifie si la tolérance est dépassée
                                depassement_reel = UTILS_Dates.TimeEnDelta(
                                    heure_max) - UTILS_Dates.TimeEnDelta(
                                        heure_min)

                                if depassement_reel > self.duree_tolerance_depassement:

                                    # Vérifie s'il y a un dépassement
                                    if heure_min < heure_max:
                                        depassement_arrondi = UTILS_Dates.CalculerArrondi(
                                            arrondi_type=self.arrondi_type,
                                            arrondi_delta=self.arrondi_delta,
                                            heure_debut=heure_min,
                                            heure_fin=heure_max)

                        else:
                            # S'il n'y avait pas de prévision
                            depassement_arrondi = dict_date["presence"][
                                "duree_arrondie"]

                        # Mémorisation du dépassement
                        if depassement_arrondi > datetime.timedelta(0):
                            dict_date["depassement"] += depassement_arrondi
                            self.heures_depassements += depassement_arrondi

                # Mémorisation des données de la date
                self.dict_dates[date] = dict_date

        # MAJ du track mensualité
        self.MAJ()