コード例 #1
0
    def OnBoutonApercu(self, event):
        """ Aperçu PDF des locations """
        # Validation des données saisies
        tracks = self.ctrl_liste_locations.GetTracksCoches()
        if len(tracks) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune location à imprimer !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        listeIDlocation = []
        for track in tracks:
            listeIDlocation.append(track.IDlocation)

        # Récupération des options
        dictOptions = self.ctrl_options.GetOptions()
        if dictOptions == False:
            return False

        # Impression des locations sélectionnées
        x = UTILS_Locations.Location()
        x.Impression(listeLocations=listeIDlocation,
                     afficherDoc=True,
                     dictOptions=dictOptions,
                     repertoire=dictOptions["repertoire"])
コード例 #2
0
    def SetDictPropositions(self, dictPropositions={}, IDdemande=False):
        listeID = []
        self.dictPositions = {}
        for IDdemandeTemp, liste_produits in dictPropositions.iteritems():
            if IDdemande == False or IDdemande == IDdemandeTemp:
                for dictProduit in liste_produits:
                    if dictProduit[
                            "disponible"] > 0 or self.afficher_uniquement_disponibles == False:
                        listeID.append(dictProduit["IDproduit"])
                        self.dictPositions[
                            dictProduit["IDproduit"]] = dictProduit["position"]

        # Affiche meilleure position
        position = UTILS_Locations.GetMeilleurePosition(
            dictPropositions=dictPropositions, IDdemande=IDdemande)
        if position == 1:
            texte_position = u"1er"
        elif position > 1:
            texte_position = u"%dème" % position
        else:
            texte_position = u""

        # Met à jour la liste des propositions
        self.SetFiltreIDproduit(listeID)

        # Création d'un label
        if len(listeID) == 0:
            texte = _(u"Aucun produit proposé.")
        elif len(listeID) == 1:
            texte = _(u"1 produit proposé (meilleure position : %s) :"
                      ) % texte_position
        else:
            texte = _(u"%d produits proposés (meilleure position : %s) :") % (
                len(listeID), texte_position)
        return texte
コード例 #3
0
    def MAJListePropositions(self):
        # Récupération de la liste des filtres actuelle
        dictFiltres = {self.IDdemande: []}
        for track in self.ctrl_filtres.GetTracks():
            dictFiltres[self.IDdemande].append({
                "IDfiltre": track.IDfiltre,
                "IDquestion": track.IDquestion,
                "choix": track.choix,
                "criteres": track.criteres,
                "controle": track.controle
            })

        # Récupération des paramètres de la demande
        dictDemande = {
            "IDdemande": self.IDdemande,
            "categories": self.ctrl_categories.GetListeCategories(),
            "produits": self.ctrl_produits.GetListeProduits()
        }

        # Recherche les produits disponibles à proposer
        dictPropositions = UTILS_Locations.GetPropositionsLocations(
            dictFiltresSelection=dictFiltres,
            dictDemandeSelection=dictDemande,
            uniquement_disponibles=False)
        texte = self.GetGrandParent().ctrl_statut.GetPageByCode(
            "attente").ctrl_propositions.SetDictPropositions(
                dictPropositions, IDdemande=self.IDdemande)
        self.GetGrandParent().ctrl_statut.GetPageByCode(
            "attente").label_propositions.SetLabel(texte)
コード例 #4
0
ファイル: OL_Produits.py プロジェクト: neoclust/Noethys
    def GetTracks(self):
        """ Récupération des données """
        listeID = None

        # Importation des titulaires
        if self.afficher_locations == True :
            self.dict_titulaires = UTILS_Titulaires.GetTitulaires()

        # Initialisation des questionnaires
        categorie = "produit"
        self.UtilsQuestionnaires = UTILS_Questionnaires.Questionnaires()
        self.liste_questions = self.UtilsQuestionnaires.GetQuestions(type=categorie)
        self.dict_questionnaires = self.UtilsQuestionnaires.GetReponses(type=categorie)

        DB = GestionDB.DB()

        # Importation des locations en cours
        self.dictLocations = UTILS_Locations.GetProduitsLoues(DB=DB)

        # Importation des produits
        if self.filtreListeID == None :
            condition = ""
        else :
            if len(self.filtreListeID) == 0: condition = "WHERE produits.IDproduit IN ()"
            elif len(self.filtreListeID) == 1: condition = "WHERE produits.IDproduit IN (%d)" % self.filtreListeID[0]
            else: condition = "WHERE produits.IDproduit IN %s" % str(tuple(self.filtreListeID))

        req = """SELECT IDproduit, produits.nom, produits.observations, produits_categories.nom, quantite
        FROM produits
        LEFT JOIN produits_categories ON produits_categories.IDcategorie = produits.IDcategorie
        %s;""" % condition
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()
        listeListeView = []
        for item in listeDonnees :
            track = Track(parent=self, donnees=item)

            valide = True
            if listeID != None :
                if item[0] not in listeID :
                    valide = False

            # Mémorisation position
            if self.dictPositions != None and track.IDproduit in self.dictPositions:
                track.position = self.dictPositions[track.IDproduit]

            # Coche afficher uniquement les disponibles
            if self.coche_uniquement_disponibles == True and track.disponible == 0 :
                valide = False

            if valide == True :
                listeListeView.append(track)
                if self.selectionID == item[0] :
                    self.selectionTrack = track
        return listeListeView
コード例 #5
0
ファイル: OL_Locations.py プロジェクト: tarachetatete/Noethys
 def CreationPDF(self, nomDoc="", afficherDoc=True):
     """ Création du PDF pour Email """
     IDlocation = self.Selection()[0].IDlocation
     from Utils import UTILS_Locations
     location = UTILS_Locations.Location()
     resultat = location.Impression(listeLocations=[IDlocation,], nomDoc=nomDoc, afficherDoc=False)
     if resultat == False :
         return False
     dictChampsFusion, dictPieces = resultat
     return dictChampsFusion[IDlocation]
コード例 #6
0
ファイル: OL_Locations.py プロジェクト: tarachetatete/Noethys
 def ImprimerPDF(self, event):
     if len(self.Selection()) == 0 :
         dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune location à imprimer !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
         dlg.ShowModal()
         dlg.Destroy()
         return
     IDlocation = self.Selection()[0].IDlocation
     from Utils import UTILS_Locations
     location = UTILS_Locations.Location()
     location.Impression(listeLocations=[IDlocation,])
コード例 #7
0
    def OnBoutonOk(self, event): 
        """ Aperçu PDF des locations """
        # Validation des données saisies
        tracks = self.ctrl_liste_locations.GetTracksCoches()
        if len(tracks) == 0 : 
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune location à envoyer par Email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Création des locations sélectionnées
        listeIDlocation = []
        for track in tracks :
            listeIDlocation.append(track.IDlocation)
        location = UTILS_Locations.Location()
        dictOptions = self.ctrl_options.GetOptions()
        if dictOptions == False :
            return

        resultat = location.Impression(listeLocations=listeIDlocation, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire"], repertoireTemp=True)
        if resultat == False : 
            return
        dictChampsFusion, dictPieces = resultat
        
        def SupprimerFichiersTemp():
            for IDlocation, fichier in dictPieces.items() :
                os.remove(fichier)  

        # Récupération des adresses Emails
        dict_adresses = UTILS_Envoi_email.GetAdressesFamilles([track.IDfamille for track in tracks])
        if dict_adresses == False:
            return False

        liste_donnees = []
        for track in tracks:
            if track.IDlocation in dictPieces:
                for adresse in dict_adresses.get(track.IDfamille, []):
                    fichier = dictPieces[track.IDlocation]
                    champs = dictChampsFusion[track.IDlocation]
                    liste_donnees.append({"adresse" : adresse, "pieces" : [fichier,], "champs" : champs})

        # Transfert des données vers DLG Mailer
        from Dlg import DLG_Mailer
        dlg = DLG_Mailer.Dialog(self, categorie="location")
        dlg.SetDonnees(liste_donnees, modificationAutorisee=False)
        dlg.ChargerModeleDefaut()
        dlg.ShowModal() 
        dlg.Destroy()

        # Suppression des PDF temporaires
        SupprimerFichiersTemp()
コード例 #8
0
    def InitModel(self):
        # Initialisation des questionnaires
        categorie = "location_demande"
        self.UtilsQuestionnaires = UTILS_Questionnaires.Questionnaires()
        self.liste_questions = self.UtilsQuestionnaires.GetQuestions(type=categorie)
        self.dict_questionnaires = self.UtilsQuestionnaires.GetReponses(type=categorie)

        # Importation des titulaires de dossier
        if self.IDfamille == None:
            self.dict_titulaires = UTILS_Titulaires.GetTitulaires()

        # Importation des propositions de locations
        self.dictPropositions = UTILS_Locations.GetPropositionsLocations()

        # MAJ du listview
        self.donnees = self.GetTracks()
コード例 #9
0
    def MAJ(self):
        import GestionDB
        from Utils import UTILS_Questionnaires
        from Utils import UTILS_Locations
        from Utils import UTILS_Titulaires

        # Importation des titulaires
        self.dict_titulaires = UTILS_Titulaires.GetTitulaires()

        # Initialisation des questionnaires
        self.UtilsQuestionnaires = UTILS_Questionnaires.Questionnaires()
        self.liste_questions = self.UtilsQuestionnaires.GetQuestions(
            type="produit")
        self.dict_questionnaires = self.UtilsQuestionnaires.GetReponses(
            type="produit")

        DB = GestionDB.DB()

        # Importation des locations en cours
        self.dictLocations = UTILS_Locations.GetProduitsLoues(DB=DB)

        # Importation des caractéristiques du modèle
        req = """SELECT categorie, IDdonnee
        FROM documents_modeles
        WHERE IDmodele=%d;""" % self.IDmodele
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.categorie, self.IDdonnee = listeDonnees[0]

        # Importation des produits
        req = """SELECT IDproduit, produits.nom, produits.observations, produits_categories.nom, produits.quantite
        FROM produits
        LEFT JOIN produits_categories ON produits_categories.IDcategorie = produits.IDcategorie
        WHERE produits.IDcategorie=%d;""" % self.IDdonnee
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()
        self.dictTracks = {}
        for item in listeDonnees:
            track = Track(parent=self, donnees=item)
            self.dictTracks[track.IDproduit] = track

        return self.dictTracks
コード例 #10
0
def Verif_dispo_produit(track,
                        IDlocation_exception=None,
                        IDlocation_portail_exception=None):
    # Vérifie que la quantité demandée est disponible
    dictPeriodes = UTILS_Locations.GetStockDisponible(
        IDproduit=track.IDproduit,
        date_debut=track.date_debut,
        date_fin=track.date_fin,
        IDlocation_exception=IDlocation_exception,
        IDlocation_portail_exception=IDlocation_portail_exception)
    liste_periode_non_dispo = []
    for periode, valeurs in dictPeriodes.items():
        if valeurs["disponible"] < track.quantite:
            debut = datetime.datetime.strftime(periode[0], "%d/%m/%Y-%Hh%M")
            if periode[1].year == 2999:
                fin = _(u"Illimité")
            else:
                fin = datetime.datetime.strftime(periode[1], "%d/%m/%Y-%Hh%M")
            liste_periode_non_dispo.append(
                _(u"Stock disponible du %s au %s : %d produits") %
                (debut, fin, valeurs["disponible"]))
    return liste_periode_non_dispo
コード例 #11
0
    def _load_data(self):
        """ Importation des données """
        self.preferred_period = None
        self.categories = []
        self.events = []

        # Période préférée
        dateDuJour = datetime.datetime.today()
        dateDebut = dateDuJour - datetime.timedelta(6)
        dateFin = dateDuJour + datetime.timedelta(1)
        self.preferred_period = TL.TimePeriod(dateDebut, dateFin)

        # Récupération des events LOCATIONS
        DB = GestionDB.DB()
        req = """SELECT IDlocation, IDfamille, date_debut, date_fin, quantite
        FROM locations
        WHERE IDproduit=%d;""" % self.IDproduit
        DB.ExecuterReq(req)
        listeLocations = DB.ResultatReq()
        DB.Close()

        listeIDfamille = []
        for IDlocation, IDfamille, date_debut, date_fin, quantite in listeLocations:
            listeIDfamille.append(IDfamille)

        dictTitulaires = UTILS_Titulaires.GetTitulaires(listeIDfamille)

        categorie = TL.Category(_(u"Location"), (156, 205, 255), True)
        for IDlocation, IDfamille, date_debut, date_fin, quantite in listeLocations:
            date_debut = UTILS_Dates.DateEngEnDateDDT(date_debut)
            date_fin = UTILS_Dates.DateEngEnDateDDT(date_fin)
            if date_fin == None:
                date_fin = datetime.datetime(2999, 1, 1)

            if quantite == None:
                quantite = 1

            if IDfamille in dictTitulaires:
                nomTitulaires = dictTitulaires[IDfamille][
                    "titulairesSansCivilite"]
            else:
                nomTitulaires = _(u"Famille inconnue")

            texte = u"%s - Quantité : %d" % (nomTitulaires, quantite)
            date_debut_str = datetime.datetime.strftime(
                date_debut, "%d/%m/%Y-%Hh%M")
            if date_fin.year == 2999:
                date_fin_str = _(u"Illimité")
            else:
                date_fin_str = datetime.datetime.strftime(
                    date_fin, "%d/%m/%Y-%Hh%M")

            description = _(
                u"Loueur : %s\nQuantité : %d\nDébut : %s\nFin : %s") % (
                    nomTitulaires, quantite, date_debut_str, date_fin_str)
            icon = None

            evt = TL.Event(date_debut, date_fin, texte, categorie)
            if description != None: evt.set_data("description", description)
            if icon != None: evt.set_data("icon", icon)
            self.events.append(evt)

        # Récupération des events STOCK DISPONIBLE
        dictPeriodes = UTILS_Locations.GetStockDisponible(
            IDproduit=self.IDproduit, date_debut=None, date_fin=None)

        categorie_disponible = TL.Category(_(u"Stock disponible"),
                                           (233, 255, 156), True)
        categorie_loue = TL.Category(_(u"Quantité louée"), (204, 227, 250),
                                     True)
        for periode, valeurs in dictPeriodes.items():
            date_debut = periode[0]

            evt = TL.Event(date_debut, date_debut, str(valeurs["loue"]),
                           categorie_loue)
            self.events.append(evt)

            evt = TL.Event(date_debut, date_debut, str(valeurs["disponible"]),
                           categorie_disponible)
            self.events.append(evt)
コード例 #12
0
    def __init__(self, listview=None, donnees=None):
        self.IDdemande = donnees[0]
        self.date = donnees[1]
        self.IDfamille = donnees[2]
        self.observations = donnees[3]

        # Catégories
        self.categories = UTILS_Texte.ConvertStrToListe(donnees[4], siVide=[])
        liste_labels = []
        for IDcategorie in self.categories :
            if IDcategorie in listview.dictCategories :
                liste_labels.append(listview.dictCategories[IDcategorie])
        self.texte_categories = ", ".join(liste_labels)

        # Produits
        self.produits = UTILS_Texte.ConvertStrToListe(donnees[5], siVide=[])
        liste_labels = []
        for IDproduit in self.produits :
            if IDproduit in listview.dictProduits :
                liste_labels.append(listview.dictProduits[IDproduit])
        self.texte_produits = ", ".join(liste_labels)

        # Statut
        self.statut = donnees[6]

        # Position
        self.position = None

        # Vérifie s'il y a des propositions de produits
        if self.statut == "refusee" :
            self.texte_statut = _(u"Refusée")
        elif self.statut == "attribuee" :
            self.texte_statut = _(u"Demande satisfaite")
        elif self.statut == "attente" :
            if self.IDdemande in listview.dictPropositions :

                # Recherche disponibilités
                listeProduitsProposes = listview.dictPropositions[self.IDdemande]
                if len(listeProduitsProposes) == 0 :
                    self.texte_statut = _(u"En attente")
                elif len(listeProduitsProposes) == 1 :
                    self.texte_statut = _(u"1 produit disponible")
                else :
                    self.texte_statut = _(u"%d produits disponibles") % len(listeProduitsProposes)
                self.statut = "disponibilite"

                # Recherche meilleure position
                self.position = UTILS_Locations.GetMeilleurePosition(dictPropositions=listview.dictPropositions, IDdemande=self.IDdemande)
            else :
                self.texte_statut = _(u"En attente")

        # Formatage date
        if isinstance(self.date, str) or isinstance(self.date, six.text_type) :
            self.date = datetime.datetime.strptime(self.date, "%Y-%m-%d %H:%M:%S")

        # Récupération des réponses des questionnaires
        for dictQuestion in listview.liste_questions :
            setattr(self, "question_%d" % dictQuestion["IDquestion"], listview.GetReponse(dictQuestion["IDquestion"], self.IDdemande))
        
        # Famille
        if listview.IDfamille == None :
            self.nomTitulaires = listview.dict_titulaires[self.IDfamille]["titulairesSansCivilite"]
            self.rue = listview.dict_titulaires[self.IDfamille]["adresse"]["rue"]
            self.cp = listview.dict_titulaires[self.IDfamille]["adresse"]["cp"]
            self.ville = listview.dict_titulaires[self.IDfamille]["adresse"]["ville"]
コード例 #13
0
    def OnBoutonOk(self, event):
        # Loueur
        IDfamille = self.ctrl_loueur.GetIDfamille()
        if IDfamille == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner un loueur pour ce produit !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Produit
        IDproduit = self.ctrl_produit.GetIDproduit()
        if IDproduit == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement sélectionner un produit !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Observations
        observations = self.ctrl_observations.GetValue()

        # Date de début
        date_debut = self.ctrl_date_debut.GetDate()
        if date_debut == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une date de début de location !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_debut.SetFocus()
            return

        heure_debut = self.ctrl_heure_debut.GetHeure()
        if heure_debut == None or self.ctrl_heure_debut.Validation() == False:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une heure de début valide !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_heure_debut.SetFocus()
            return

        date_debut = datetime.datetime(year=date_debut.year,
                                       month=date_debut.month,
                                       day=date_debut.day,
                                       hour=int(heure_debut[:2]),
                                       minute=int(heure_debut[3:]))

        # Date de fin
        if self.check_date_fin.GetValue() == True:

            date_fin = self.ctrl_date_fin.GetDate()
            if date_fin == None:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une date de fin de location !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_date_fin.SetFocus()
                return

            heure_fin = self.ctrl_heure_fin.GetHeure()
            if heure_fin == None or self.ctrl_heure_fin.Validation() == False:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir une heure de fin valide !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_heure_fin.SetFocus()
                return

            date_fin = datetime.datetime(year=date_fin.year,
                                         month=date_fin.month,
                                         day=date_fin.day,
                                         hour=int(heure_fin[:2]),
                                         minute=int(heure_fin[3:]))

        else:
            date_fin = None

        if date_fin != None and date_debut > date_fin:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir une date de fin supérieure à la date de début !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.ctrl_date_fin.SetFocus()
            return

        # Quantité
        quantite = int(self.ctrl_quantite.GetValue())

        # Vérifie que la quantité demandée est disponible
        dictPeriodes = UTILS_Locations.GetStockDisponible(
            IDproduit=IDproduit,
            date_debut=date_debut,
            date_fin=date_fin,
            IDlocation_exception=self.IDlocation)
        liste_periode_non_dispo = []
        for periode, valeurs in dictPeriodes.iteritems():
            if valeurs["disponible"] < quantite:
                debut = datetime.datetime.strftime(periode[0],
                                                   "%d/%m/%Y-%Hh%M")
                if periode[1].year == 2999:
                    fin = _(u"Illimité")
                else:
                    fin = datetime.datetime.strftime(periode[1],
                                                     "%d/%m/%Y-%Hh%M")
                liste_periode_non_dispo.append(
                    _(u"Stock disponible du %s au %s : %d produits") %
                    (debut, fin, valeurs["disponible"]))
        if len(liste_periode_non_dispo) > 0:
            introduction = _(
                u"La quantité souhaitée n'est pas disponible sur les périodes suivantes :"
            )
            conclusion = _(u"Vous ne pouvez pas valider la location.")
            dlg = DLG_Messagebox.Dialog(
                None,
                titre=_(u"Information"),
                introduction=introduction,
                detail=u"\n".join(liste_periode_non_dispo),
                conclusion=conclusion,
                icone=wx.ICON_EXCLAMATION,
                boutons=[
                    _(u"Ok"),
                ])
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Périodes de gestion
        liste_prestations = self.ctrl_parametres.GetPageAvecCode(
            "facturation").GetDonnees()["prestations"]

        gestion = UTILS_Gestion.Gestion(None)
        for track_prestation in liste_prestations:
            if gestion.Verification("prestations",
                                    track_prestation.date) == False:
                return False

        # Sauvegarde
        DB = GestionDB.DB()

        # Sauvegarde de la location
        listeDonnees = [
            ("IDfamille", IDfamille),
            ("IDproduit", IDproduit),
            ("observations", observations),
            ("date_debut", date_debut),
            ("date_fin", date_fin),
            ("quantite", quantite),
        ]

        if self.IDlocation == None:
            listeDonnees.append(("date_saisie", datetime.date.today()))
            self.IDlocation = DB.ReqInsert("locations", listeDonnees)
        else:
            DB.ReqMAJ("locations", listeDonnees, "IDlocation", self.IDlocation)

        # Sauvegarde des prestations
        listeID = []
        for track_prestation in liste_prestations:
            IDprestation = track_prestation.IDprestation

            listeDonnees = [
                ("IDcompte_payeur", self.ctrl_loueur.GetIDcomptePayeur()),
                ("date", track_prestation.date),
                ("categorie", "location"),
                ("label", track_prestation.label),
                ("montant_initial", track_prestation.montant),
                ("montant", track_prestation.montant),
                ("IDfamille", self.ctrl_loueur.GetIDfamille()),
                ("IDindividu", None),
                ("code_compta", None),
                ("tva", None),
                ("IDdonnee", self.IDlocation),
            ]

            if IDprestation == None:
                listeDonnees.append(
                    ("date_valeur", str(datetime.date.today())))
                IDprestation = DB.ReqInsert("prestations", listeDonnees)
            else:
                if track_prestation.dirty == True:
                    DB.ReqMAJ("prestations", listeDonnees, "IDprestation",
                              IDprestation)
            listeID.append(IDprestation)

        # Suppression des prestations obsolètes
        for IDprestation in self.liste_initiale_IDprestation:
            if IDprestation not in listeID:
                DB.ReqDEL("prestations", "IDprestation", IDprestation)
                DB.ReqDEL("ventilation", "IDprestation", IDprestation)

        # Sauvegarde du questionnaire
        self.ctrl_parametres.GetPageAvecCode(
            "questionnaire").ctrl_questionnaire.Sauvegarde(
                DB=DB, IDdonnee=self.IDlocation)

        DB.Close()

        # Fermeture de la fenêtre
        self.EndModal(wx.ID_OK)
コード例 #14
0
    def OnBoutonOk(self, event):
        """ Aperçu PDF des locations """
        # Validation des données saisies
        tracks = self.ctrl_liste_locations.GetTracksCoches()
        if len(tracks) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune location à envoyer par Email !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Création des locations sélectionnées
        listeIDlocation = []
        for track in tracks:
            listeIDlocation.append(track.IDlocation)
        location = UTILS_Locations.Location()
        dictOptions = self.ctrl_options.GetOptions()
        if dictOptions == False:
            return

        resultat = location.Impression(listeLocations=listeIDlocation,
                                       nomDoc=None,
                                       afficherDoc=False,
                                       dictOptions=dictOptions,
                                       repertoire=dictOptions["repertoire"],
                                       repertoireTemp=True)
        if resultat == False:
            return
        dictChampsFusion, dictPieces = resultat

        def SupprimerFichiersTemp():
            for IDlocation, fichier in dictPieces.iteritems():
                os.remove(fichier)

        # Récupération de toutes les adresses Emails
        DB = GestionDB.DB()
        req = """SELECT IDindividu, mail, travail_mail
        FROM individus;"""
        DB.ExecuterReq(req)
        listeAdressesIndividus = DB.ResultatReq()
        DB.Close()
        dictAdressesIndividus = {}
        for IDindividu, mail, travail_mail in listeAdressesIndividus:
            dictAdressesIndividus[IDindividu] = {
                "perso": mail,
                "travail": travail_mail
            }

        # Récupération des données adresse + champs + pièces
        listeDonnees = []
        listeAnomalies = []
        listeEnvoiNonDemande = []
        for track in tracks:
            adresse = UTILS_Envoi_email.GetAdresseFamille(
                track.IDfamille,
                choixMultiple=False,
                muet=True,
                nomTitulaires=track.nomTitulaires)

            # Mémorisation des données
            if adresse not in (None, "", []):
                if dictPieces.has_key(track.IDlocation):
                    fichier = dictPieces[track.IDlocation]
                    champs = dictChampsFusion[track.IDlocation]
                    listeDonnees.append({
                        "adresse": adresse,
                        "pieces": [
                            fichier,
                        ],
                        "champs": champs
                    })
            else:
                listeAnomalies.append(track.nomsTitulaires)

        # Annonce les anomalies trouvées
        if len(listeAnomalies) > 0:
            texte = _(
                u"%d des familles sélectionnées n'ont pas d'adresse Email.\n\n"
            ) % len(listeAnomalies)
            texte += _(
                u"Souhaitez-vous quand même continuer avec les %d autres familles ?"
            ) % len(listeDonnees)
            dlg = wx.MessageDialog(
                self, texte, _(u"Avertissement"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            reponse = dlg.ShowModal()
            dlg.Destroy()
            if reponse != wx.ID_YES:
                SupprimerFichiersTemp()
                return

        # Dernière vérification avant transfert
        if len(listeDonnees) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il ne reste finalement aucune location à envoyer par Email !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            SupprimerFichiersTemp()
            return

        # Transfert des données vers DLG Mailer
        import DLG_Mailer
        dlg = DLG_Mailer.Dialog(self, categorie="location")
        dlg.SetDonnees(listeDonnees, modificationAutorisee=False)
        dlg.ChargerModeleDefaut()
        dlg.ShowModal()
        dlg.Destroy()

        # Suppression des PDF temporaires
        SupprimerFichiersTemp()