def GetTracks(self): # Récupération des données dlgAttente = PBI.PyBusyInfo( _(u"Recherche des prestations à facturer en cours..."), parent=None, title=_(u"Veuillez patienter..."), icon=wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Logo.png"), wx.BITMAP_TYPE_ANY)) wx.Yield() try: facturation = UTILS_Facturation.Facturation() self.dictComptes = facturation.GetDonnees( liste_activites=self.dictParametres["listeActivites"], date_debut=self.dictParametres["date_debut"], date_fin=self.dictParametres["date_fin"], date_edition=self.dictParametres["date_emission"], date_echeance=self.dictParametres["date_echeance"], prestations=self.dictParametres["prestations"], ) del dlgAttente except Exception, err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog( self, _(u"Désolé, le problème suivant a été rencontré dans la recherche de factures : \n\n%s" ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def GetTracks(self): # Récupération des données dlgAttente = wx.BusyInfo( _(u"Recherche des prestations à facturer en cours..."), None) #wx.Yield() try: facturation = UTILS_Facturation.Facturation() self.dictComptes = facturation.GetDonnees( liste_activites=self.dictParametres["listeActivites"], date_debut=self.dictParametres["date_debut"], date_fin=self.dictParametres["date_fin"], date_edition=self.dictParametres["date_emission"], date_echeance=self.dictParametres["date_echeance"], prestations=self.dictParametres["prestations"], date_anterieure=self.dictParametres["date_anterieure"], ) del dlgAttente except Exception, err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog( self, _(u"Désolé, le problème suivant a été rencontré dans la recherche de factures : \n\n%s" ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def CreationPDF(self, nomDoc="", afficherDoc=True): """ Création du PDF pour Email """ facturation = UTILS_Facturation.Facturation() resultat = facturation.Impression(listeFactures=[self.IDfacture,], nomDoc=nomDoc, afficherDoc=afficherDoc, afficherOptions=self.afficherOptions) if resultat == False : return False dictChampsFusion, dictPieces = resultat return dictChampsFusion[self.IDfacture]
def CreationPDF(self, nomDoc="", afficherDoc=True): """ Création du PDF pour Email """ IDfacture = self.Selection()[0].IDfacture from Utils import UTILS_Facturation facturation = UTILS_Facturation.Facturation() resultat = facturation.Impression(listeFactures=[IDfacture,], nomDoc=nomDoc, afficherDoc=False) if resultat == False : return False dictChampsFusion, dictPieces = resultat return dictChampsFusion[IDfacture]
def GenerationPiecesJointes(self): """ Génération des pièces jointes """ IDfichier = FonctionsPerso.GetIDfichier() listeIDfacture = [] dictTracks = {} for track in self.ctrl_pieces.GetObjects(): listeIDfacture.append(track.IDfacture) dictTracks[track.IDfacture] = track # Génération des factures au format PDF nomFichierUnique = self.ctrl_parametres.GetPropertyValue( "format_nom_fichier") facturation = UTILS_Facturation.Facturation() resultat = facturation.Impression(listeFactures=listeIDfacture, nomFichierUnique=nomFichierUnique, afficherDoc=False, repertoireTemp=True) if resultat == False: return False dictChampsFusion, dictPieces = resultat # Conversion des fichiers en GZIP/base64 dict_pieces_jointes = {} for IDfacture, cheminFichier in dictPieces.items(): # Compression GZIP cheminFichierGzip = cheminFichier + ".zip" with open(cheminFichier, 'rb') as f_in, gzip.open(cheminFichierGzip, 'wb') as f_out: shutil.copyfileobj(f_in, f_out) # Encodage en base64 with open(cheminFichierGzip, "rb") as fichier: contenu = base64.b64encode(fichier.read()) # Suppression des fichiers temporaires os.remove(cheminFichier) os.remove(cheminFichierGzip) # Mémorisation des pièces jointes NomPJ = os.path.basename(cheminFichier) numero_facture = dictTracks[IDfacture].numero IdUnique = IDfichier + str(numero_facture) dict_pieces_jointes[IDfacture] = { "NomPJ": NomPJ, "IdUnique": IdUnique, "contenu": contenu, "numero_facture": numero_facture } return dict_pieces_jointes
def GetTracks(self): # Récupération des données dlgAttente = wx.BusyInfo( _(u"Recherche des prestations à facturer en cours..."), None) #wx.Yield() try: facturation = UTILS_Facturation.Facturation() self.dictComptes = facturation.GetDonnees( liste_activites=self.dictParametres["listeActivites"], date_debut=self.dictParametres["date_debut"], date_fin=self.dictParametres["date_fin"], date_edition=self.dictParametres["date_emission"], date_echeance=self.dictParametres["date_echeance"], prestations=self.dictParametres["prestations"], date_anterieure=self.dictParametres["date_anterieure"], mention1=self.dictParametres["mention1"], mention2=self.dictParametres["mention2"], mention3=self.dictParametres["mention3"], ) del dlgAttente except Exception as err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog( self, _(u"Désolé, le problème suivant a été rencontré dans la recherche de factures : \n\n%s" ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False # Condition famille unique if self.dictParametres["IDcompte_payeur"] != None: IDcompte_payeur = self.dictParametres["IDcompte_payeur"] if IDcompte_payeur in self.dictComptes: self.dictComptes = { IDcompte_payeur: self.dictComptes[IDcompte_payeur], } else: self.dictComptes = {} # Branches COMPTE listeListeView = [] for IDcompte_payeur, dictCompte in self.dictComptes.items(): track = Track(IDcompte_payeur, dictCompte) listeListeView.append(track) return listeListeView
def Reedition(self, event): if len(self.Selection()) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune facture à imprimer !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return track = self.Selection()[0] if track.etat == "annulation" : dlg = wx.MessageDialog(self, _(u"Vous ne pouvez pas visualiser une facture annulée !"), _(u"Information"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return from Utils import UTILS_Facturation facturation = UTILS_Facturation.Facturation() facturation.Impression(listeFactures=[track.IDfacture,])
def OnBoutonApercu(self, event): """ Aperçu PDF des factures """ # Validation des données saisies tracks = self.ctrl_liste_factures.GetTracksCoches() if len(tracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune facture à imprimer !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return listeIDfacture = [] for track in tracks: # Avertissements if track.etat == "annulation": dlg = wx.MessageDialog( self, _(u"La facture n°%s a été annulée.\n\nVous ne pouvez pas l'imprimer !" ) % track.numero, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Ajout listeIDfacture.append(track.IDfacture) # Récupération des options dictOptions = self.ctrl_options.GetOptions() if dictOptions == False: return False ## for nom, valeur in dictOptions.iteritems() : ## print (nom, valeur) # Impression des factures sélectionnées facturation = UTILS_Facturation.Facturation() facturation.Impression(listeFactures=listeIDfacture, afficherDoc=True, dictOptions=dictOptions, repertoire=dictOptions["repertoire_copie"])
def OnBoutonOk(self, event): """ Aperçu PDF des factures """ # Validation des données saisies tracks = self.ctrl_liste_factures.GetTracksCoches() if len(tracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune facture à envoyer par Email !" ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Création des factures sélectionnées listeIDfacture = [] for track in tracks: # Avertissements if track.etat == "annulation": dlg = wx.MessageDialog( self, _(u"La facture n°%s a été annulée.\n\nVous ne pouvez pas l'envoyer par Email !" ) % track.numero, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Ajout listeIDfacture.append(track.IDfacture) facturation = UTILS_Facturation.Facturation() dictOptions = self.ctrl_options.GetOptions() if dictOptions == False: return resultat = facturation.Impression( listeFactures=listeIDfacture, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire_copie"], repertoireTemp=True) if resultat == False: return dictChampsFusion, dictPieces = resultat def SupprimerFichiersTemp(): for IDfacture, fichier in dictPieces.iteritems(): try: os.remove(fichier) except: pass # 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: liste_adresses = [] if track.email == True: # Si Famille inscrite à l'envoi par Email : for valeur in track.email_factures.split("##"): IDindividu, categorie, adresse = valeur.split(";") if IDindividu != "": if dictAdressesIndividus.has_key(int(IDindividu)): adresse = dictAdressesIndividus[int( IDindividu)][categorie] liste_adresses.append(adresse) else: liste_adresses.append(adresse) else: # Si famille non inscrite à l'envoi par Email adresse = UTILS_Envoi_email.GetAdresseFamille( track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomsTitulaires) liste_adresses.append(adresse) # Mémorisation des données for adresse in liste_adresses: if adresse not in (None, "", []): if dictPieces.has_key(track.IDfacture): fichier = dictPieces[track.IDfacture] champs = dictChampsFusion[track.IDfacture] listeDonnees.append({ "adresse": adresse, "pieces": [ fichier, ], "champs": champs }) if track.email == False: if track.nomsTitulaires not in listeEnvoiNonDemande: listeEnvoiNonDemande.append( track.nomsTitulaires) 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 # Annonce les envois non demandés if len(listeEnvoiNonDemande) > 0: texte = _( u"%d des familles sélectionnées n'ont pas demandé d'envoi par Email de leur facture :\n\n" ) % len(listeEnvoiNonDemande) texte += _( u"Souhaitez-vous quand même leur envoyer une facture ?") 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 facture à 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="facture") dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Suppression des PDF temporaires SupprimerFichiersTemp()
def Reedition(self, afficherOptions=True): self.afficherOptions = afficherOptions facturation = UTILS_Facturation.Facturation() facturation.Impression(listeFactures=[self.IDfacture,], afficherOptions=afficherOptions)