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")
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()