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 FormateDuree(duree): if duree in (None, "", datetime.timedelta(seconds=0)): return "" else : if type(duree) == int : duree = datetime.timedelta(hours=duree) return UTILS_Dates.DeltaEnStr(duree, separateur="h")
def FormateDuree(duree): if duree in (None, "", datetime.timedelta(seconds=0)): return "" if type(duree) == datetime.timedelta: return UTILS_Dates.DeltaEnStr(duree, separateur="h") if type(duree) in (str, six.text_type): duree = duree.replace(' ', '') duree = duree.replace(":", "h") return duree
def SetDuree(self, duree=None): """ duree = float, str ou timedelta """ if type(duree) == float: td = datetime.timedelta(hours=duree) elif type(duree) in (str, unicode): td = UTILS_Dates.HeureStrEnDelta(duree) elif type(duree) == datetime.timedelta: td = duree else: td = datetime.timedelta(0) valeur = UTILS_Dates.DeltaEnStr(td, separateur=self.separateur) wx.TextCtrl.SetValue(self, valeur)
def MAJ(self): listeDonnees = [ {"label" : _(u"Nombre de jours prévus"), "code" : "nbre_dates", "format" : "entier", "suffixe" : _(u"jours"), "defaut" : 0}, {"label" : _(u"Nombre de semaines prévues"), "code" : "nbre_semaines", "format" : "entier", "suffixe" : _(u"semaines"), "defaut" : 0}, {"label" : _(u"Nombre de mois prévus"), "code" : "nbre_mois", "format" : "entier", "suffixe" : _(u"mois"), "defaut" : 0}, {"label" : _(u"Nombre moyen d'heures prévues par jour"), "code" : "moy_heures_jour", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre moyen d'heures prévues par semaine"), "code" : "moy_heures_semaine", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre moyen d'heures prévues par mois"), "code" : "moy_heures_mois", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre d'heures prévues arrondies"), "code" : "duree_heures_brut", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre d'heures RTT prévues"), "code" : "duree_absences_prevues", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre d'heures RTT prises"), "code" : "duree_absences_prises", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre d'heures RTT restantes"), "code" : "duree_absences_solde", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre d'heures de régularisation"), "code" : "duree_heures_regularisation", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre total d'heures facturées"), "code" : "duree_heures_contrat", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Heures facturées chaque mois"), "code" : "forfait_horaire_mensuel", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Heures facturées le dernier mois"), "code" : "forfait_horaire_dernier_mois", "format" : "duree", "suffixe" : _(u""), "defaut" : datetime.timedelta(0)}, {"label" : _(u"Nombre de mensualités"), "code" : "nbre_mensualites", "format" : "entier", "suffixe" : _(u"mensualités"), "defaut" : 0}, {"label" : _(u"Montant total facturé"), "code" : "total_mensualites", "format" : "montant", "suffixe" : "", "defaut" : FloatToDecimal(0.0)}, ] self.donnees = [] index = 0 for dictDonnee in listeDonnees : valeur = self.clsbase.GetValeur(dictDonnee["code"], dictDonnee["defaut"]) if dictDonnee["format"] == "montant" : valeur = u"%.2f %s" % (valeur, SYMBOLE) if dictDonnee["format"] == "entier" : valeur = u"%d" % valeur if dictDonnee["format"] == "decimal" : valeur = u"%.2f" % valeur if dictDonnee["format"] == "duree" : valeur = UTILS_Dates.DeltaEnStr(valeur) if "suffixe" in dictDonnee and dictDonnee["suffixe"] != "" : valeur += " " + dictDonnee["suffixe"] self.donnees.append(Track(index, dictDonnee["label"], valeur)) index += 1 self.SetObjects(self.donnees) self._ResizeSpaceFillingColumns()
def OnBoutonOk(self, event): # Récupération et vérification des données saisies if self.IDfacture != None: dlg = wx.MessageDialog( self, _(u"Cette prestation apparaît déjà sur une facture. Il est donc impossible de la modifier !\n\nVous devez obligatoirement cliquer sur le bouton ANNULER pour quitter." ), _(u"Validation impossible"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return date = self.ctrl_date.GetDate() if date == None: dlg = wx.MessageDialog( self, _(u"Vous devez obligatoirement saisir une date !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date.SetFocus() return categorie = self.ctrl_categorie.GetCategorie() label = self.ctrl_label.GetValue() if label == "": dlg = wx.MessageDialog( self, _(u"Vous devez obligatoirement saisir un intitulé !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_label.SetFocus() return IDactivite = self.ctrl_activite.GetID() IDcategorie_tarif = self.ctrl_categorie_tarif.GetID() IDtarif = self.ctrl_tarif.GetID() montant_initial = self.ctrl_montant_avant_deduc.GetMontant() montant = self.ctrl_montant.GetMontant() if montant == None: dlg = wx.MessageDialog( self, _(u"Le montant que vous avez saisi ne semble pas valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_montant.SetFocus() return IDfamille = self.IDfamille if self.radio_type_individuelle.GetValue() == True: IDindividu = self.ctrl_individu.GetID() if IDindividu == None: dlg = wx.MessageDialog( self, _(u"Etant donné que vous avez sélectionné le type 'prestation individuelle', vous devez obligatoirement sélectionner un individu dans la liste !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_individu.SetFocus() return else: IDindividu = 0 code_comptable = self.ctrl_code_comptable.GetValue() if code_comptable == "": code_comptable = None code_produit_local = self.ctrl_code_produit_local.GetValue() if code_produit_local == "": code_produit_local = None tva = self.ctrl_tva.GetValue() if tva == 0.0: tva = None # Vérifie temps facturé temps_facture = UTILS_Dates.DeltaEnStr(self.ctrl_temps.GetDuree(), separateur=":") if temps_facture != None: if self.ctrl_temps.Validation() == False: dlg = wx.MessageDialog( self, _(u"Le temps facturé que vous avez saisi ne semble pas correct !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_temps.SetFocus() return # Périodes de gestion gestion = UTILS_Gestion.Gestion(None) if gestion.Verification("prestations", date) == False: return False # Récupération du IDcompte_payeur DB = GestionDB.DB() req = "SELECT IDcompte_payeur FROM familles WHERE IDfamille=%d" % self.IDfamille DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() DB.Close() IDcompte_payeur = listeDonnees[0][0] DB = GestionDB.DB() # Recherche si cette prestation a déjà été ventilée sur un règlement if self.IDprestation != None: req = """SELECT IDventilation, ventilation.montant FROM ventilation LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement WHERE IDprestation=%d ORDER BY reglements.date;""" % self.IDprestation DB.ExecuterReq(req) listeVentilations = DB.ResultatReq() montantVentilation = 0.0 for IDventilation, montantTmp in listeVentilations: montantVentilation += montantTmp if montantVentilation > montant: # Si le montant total ventilé est supérieur au montant de la prestation : montantVentilationTmp = 0.0 for IDventilation, montantTmp in listeVentilations: montantVentilationTmp += montantTmp if montantVentilationTmp > montant: nouveauMontant = montantTmp - (montantVentilationTmp - montant) if nouveauMontant > 0.0: DB.ReqMAJ("ventilation", [ ("montant", nouveauMontant), ], "IDventilation", IDventilation) montantVentilationTmp = ( montantVentilationTmp - montantTmp) + nouveauMontant else: DB.ReqDEL("ventilation", "IDventilation", IDventilation) # Sauvegarde de la prestation listeDonnees = [ ("IDcompte_payeur", IDcompte_payeur), ("date", date), ("categorie", categorie), ("label", label), ("montant_initial", montant_initial), ("montant", montant), ("IDactivite", IDactivite), ("IDtarif", IDtarif), ("IDfamille", IDfamille), ("IDindividu", IDindividu), ("temps_facture", temps_facture), ("IDcategorie_tarif", IDcategorie_tarif), ("code_compta", code_comptable), ("tva", tva), ("code_produit_local", code_produit_local), ] if self.IDprestation == None: listeDonnees.append(("date_valeur", str(datetime.date.today()))) self.IDprestation = DB.ReqInsert("prestations", listeDonnees) else: DB.ReqMAJ("prestations", listeDonnees, "IDprestation", self.IDprestation) DB.Close() # Sauvegarde des déductions self.ctrl_deductions.Sauvegarde(IDprestation=self.IDprestation) # Fermeture de la fenêtre self.EndModal(wx.ID_OK)
def FormateDuree(duree): if duree in (None, "", datetime.timedelta(seconds=0)): return "" else: return UTILS_Dates.DeltaEnStr(duree, separateur="h")
def Sauvegarde(self): """ Sauvegarde dans la base """ DB = GestionDB.DB() # Enregistrement des informations générales sur le contrat listeDonnees = ( ("IDindividu", self.GetValeur("IDindividu", None)), ("IDinscription", self.GetValeur("IDinscription", None)), ("IDactivite", self.GetValeur("IDactivite", None)), ("date_debut", self.GetValeur("date_debut", None)), ("date_fin", self.GetValeur("date_fin", None)), ("observations", self.GetValeur("observations", None)), ("type", "psu"), ("duree_absences_prevues", UTILS_Dates.DeltaEnStr(self.GetValeur("duree_absences_prevues", datetime.timedelta(0)), separateur=":")), ("duree_heures_regularisation", UTILS_Dates.DeltaEnStr(self.GetValeur( "duree_heures_regularisation", datetime.timedelta(0)), separateur=":")), ("arrondi_type", self.GetValeur("arrondi_type", None)), ("arrondi_delta", self.GetValeur("arrondi_delta", 30)), ("planning", self.GetValeur("planning", None)), ) if self.IDcontrat == None: self.IDcontrat = DB.ReqInsert("contrats", listeDonnees) else: DB.ReqMAJ("contrats", listeDonnees, "IDcontrat", self.IDcontrat) # Enregistrement des consommations # liste_IDconso = [] # for track in self.GetValeur("tracks_previsions", []): # listeDonnees = ( # ("IDindividu", self.GetValeur("IDindividu", None)), # ("IDinscription", self.GetValeur("IDinscription", None)), # ("IDactivite", self.GetValeur("IDactivite", None)), # ("date", track.date), # ("IDunite", track.IDunite), # ("IDgroupe", self.GetValeur("IDgroupe", None)), # ("heure_debut", track.heure_debut), # ("heure_fin", track.heure_fin), # ("etat", track.etat), # #("date_saisie", track.date_saisie), # ("IDutilisateur", UTILS_Identification.GetIDutilisateur()), # ("IDcategorie_tarif", self.GetValeur("IDcategorie_tarif", None)), # ("IDcompte_payeur", self.GetValeur("IDcompte_payeur", None)), # #("IDprestation", track.IDprestation),#TODO # #("forfait", track.forfait),#TODO # ("quantite", track.quantite), # #("etiquettes", track.etiquettes),#TODO # ) # if track.IDconso == None : # IDconso = DB.ReqInsert("consommations", listeDonnees) # else : # IDconso = track.IDconso # DB.ReqMAJ("consommations", listeDonnees, "IDconso", IDconso) # liste_IDconso.append(IDconso) # Version optimisée listeChamps = [ "IDindividu", "IDinscription", "IDactivite", "date", "IDunite", "IDgroupe", "heure_debut", "heure_fin", "etat", "IDutilisateur", "IDcategorie_tarif", "IDcompte_payeur", "quantite", ] liste_IDconso = [] listeAjouts = [] listeModifications = [] for track in self.GetValeur("tracks_previsions", []): listeDonnees = [ self.GetValeur("IDindividu", None), self.GetValeur("IDinscription", None), self.GetValeur("IDactivite", None), track.date, track.IDunite, self.GetValeur("IDgroupe", None), track.heure_debut, track.heure_fin, track.etat, UTILS_Identification.GetIDutilisateur(), self.GetValeur("IDcategorie_tarif", None), self.GetValeur("IDcompte_payeur", None), track.quantite, ] if track.IDconso == None: listeAjouts.append(listeDonnees) else: IDconso = track.IDconso listeDonnees.append(IDconso) listeModifications.append(listeDonnees) liste_IDconso.append(IDconso) # Ajout optimisé des conso if len(listeAjouts) > 0: texteChampsTemp = ", ".join(listeChamps) listeInterrogations = [] for champ in listeChamps: listeInterrogations.append("?") texteInterrogations = ", ".join(listeInterrogations) DB.Executermany("INSERT INTO consommations (%s) VALUES (%s)" % (texteChampsTemp, texteInterrogations), listeAjouts, commit=True) # Modification optimisée des conso if len(listeModifications) > 0: listeChampsTemp = [] for champ in listeChamps: listeChampsTemp.append(("%s=?" % champ)) DB.Executermany("UPDATE consommations SET %s WHERE IDconso=?" % ", ".join(listeChampsTemp), listeModifications, commit=True) # Suppression des consommations supprimées listeSuppressions = [] for IDconso in self.GetValeur("liste_IDconso", []): if IDconso not in liste_IDconso: listeSuppressions.append(IDconso) if len(listeSuppressions) > 0: if len(listeSuppressions) == 1: conditionSuppression = "(%d)" % listeSuppressions[0] else: conditionSuppression = str(tuple(listeSuppressions)) DB.ExecuterReq("DELETE FROM consommations WHERE IDconso IN %s" % conditionSuppression) # Enregistrement des tarifs liste_IDtarif = [] for track in self.GetValeur("tracks_tarifs", []): listeDonnees = ( ("IDcontrat", self.IDcontrat), ("date_debut", track.date_debut), ("revenu", track.revenu), ("quotient", track.quotient), ("taux", track.taux), ("tarif_base", track.tarif_base), ("tarif_depassement", track.tarif_depassement), ) if track.IDcontrat_tarif == None: IDcontrat_tarif = DB.ReqInsert("contrats_tarifs", listeDonnees) else: IDcontrat_tarif = track.IDcontrat_tarif DB.ReqMAJ("contrats_tarifs", listeDonnees, "IDcontrat_tarif", IDcontrat_tarif) liste_IDtarif.append(IDcontrat_tarif) # Suppression des tarifs supprimés listeSuppressions = [] for IDcontrat_tarif in self.GetValeur("liste_IDtarif", []): if IDcontrat_tarif not in liste_IDtarif: listeSuppressions.append(IDcontrat_tarif) if len(listeSuppressions) > 0: if len(listeSuppressions) == 1: conditionSuppression = "(%d)" % listeSuppressions[0] else: conditionSuppression = str(tuple(listeSuppressions)) DB.ExecuterReq( "DELETE FROM contrats_tarifs WHERE IDcontrat_tarif IN %s" % conditionSuppression) # Enregistrement des mensualités # liste_IDprestation = [] # for track in self.GetValeur("tracks_mensualites", []): # listeDonnees = ( # ("IDcompte_payeur", self.GetValeur("IDcompte_payeur", None)), # ("date", track.date_facturation), # ("categorie", "consommation"), # ("label", track.label_prestation), # ("montant_initial", track.montant_mois), # ("montant", track.montant_mois), # ("IDactivite", self.GetValeur("IDactivite", None)), # ("IDtarif", self.GetValeur("IDtarif", None)), # ("IDfacture", track.IDfacture), # ("IDfamille", self.GetValeur("IDfamille", None)), # ("IDindividu", self.GetValeur("IDindividu", None)), # ("forfait", None), # ("temps_facture", UTILS_Dates.DeltaEnStr(track.heures_facturees, ":")), # ("IDcategorie_tarif", self.GetValeur("IDcategorie_tarif", None)), # ("forfait_date_debut", track.forfait_date_debut), # ("forfait_date_fin", track.forfait_date_fin), # ("IDcontrat", self.IDcontrat), # ) # if track.IDprestation == None : # IDprestation = DB.ReqInsert("prestations", listeDonnees) # else : # IDprestation = track.IDprestation # DB.ReqMAJ("prestations", listeDonnees, "IDprestation", IDprestation) # liste_IDprestation.append(IDprestation) # # # Suppression des prestations supprimées # listeSuppressions = [] # for IDprestation in self.GetValeur("liste_IDprestation", []): # if IDprestation not in liste_IDprestation : # listeSuppressions.append(IDprestation) # # if len(listeSuppressions) > 0 : # if len(listeSuppressions) == 1 : # conditionSuppression = "(%d)" % listeSuppressions[0] # else : # conditionSuppression = str(tuple(listeSuppressions)) # DB.ExecuterReq("DELETE FROM prestations WHERE IDprestation IN %s" % conditionSuppression) # DB.ExecuterReq("DELETE FROM ventilation WHERE IDprestation IN %s" % conditionSuppression) # DB.ExecuterReq("DELETE FROM deductions WHERE IDprestation IN %s" % conditionSuppression) DB.Commit() DB.Close()
def Valider(self): """ Valider les mensualités """ listeTracks = self.GetCheckedObjects() # Vérifications if len(listeTracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune mensualité à générer dans la liste !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False for track in listeTracks: if track.IDprestation != None: dlg = wx.MessageDialog( self, _(u"Vous ne pouvez pas sélectionner des lignes dont les mensualités ont déjà été générées !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Demande de confirmation dlg = wx.MessageDialog( self, _(u"Confirmez-vous la validation des %d mensualités sélectionnées sur le mois de %s %d ?" % (len(listeTracks), LISTE_MOIS[self.mois - 1], self.annee)), _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: return False # Enregistrement des mensualités DB = GestionDB.DB() for track in listeTracks: listeDonnees = [ ("IDcompte_payeur", track.clsbase.GetValeur("IDcompte_payeur", None)), ("date", track.date_facturation), ("categorie", "consommation"), ("label", track.label_prestation), ("montant_initial", float(track.montant_a_facturer)), ("montant", float(track.montant_a_facturer)), ("IDactivite", track.clsbase.GetValeur("IDactivite", None)), ("IDtarif", track.clsbase.GetValeur("IDtarif", None)), ("IDfacture", track.IDfacture), ("IDfamille", track.clsbase.GetValeur("IDfamille", None)), ("IDindividu", track.clsbase.GetValeur("IDindividu", None)), ("forfait", None), ("temps_facture", UTILS_Dates.DeltaEnStr(track.heures_a_facturer, ":")), ("IDcategorie_tarif", track.clsbase.GetValeur("IDcategorie_tarif", None)), ("forfait_date_debut", track.forfait_date_debut), ("forfait_date_fin", track.forfait_date_fin), ("IDcontrat", track.clsbase.IDcontrat), ] if track.IDprestation == None: listeDonnees.append( ("date_valeur", str(datetime.date.today()))) IDprestation = DB.ReqInsert("prestations", listeDonnees) else: IDprestation = track.IDprestation DB.ReqMAJ("prestations", listeDonnees, "IDprestation", IDprestation) # MAJ des consommations listeUnites = [] for IDunite in (track.IDunite_prevision, track.IDunite_presence): if IDunite != None: listeUnites.append(IDunite) if len(listeUnites) == 0: conditionUnites = "()" elif len(listeUnites) == 1: conditionUnites = "(%d)" % listeUnites[0] else: conditionUnites = str(tuple(listeUnites)) req = """UPDATE consommations SET IDprestation=%d WHERE IDinscription=%d AND date>='%s' AND date<='%s' AND IDunite IN %s ;""" % (IDprestation, track.IDinscription, track.forfait_date_debut, track.forfait_date_fin, conditionUnites) DB.ExecuterReq(req) # MAJ du track track.IDprestation = IDprestation track.heures_facturees = track.heures_a_facturer track.montant_facture = track.montant_a_facturer self.RefreshObject(track) DB.Commit() DB.Close() # Confirmation succès dlg = wx.MessageDialog( self, _(u"Les mensualités ont été générées avec succès !"), _(u"Génération terminée"), wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() return True
def FormateDuree(duree): if duree in (None, ""): return "" else: return UTILS_Dates.DeltaEnStr(duree, separateur="h")