def saveDao(self, tipo=None): denominazione = self.denominazione_banca_entry.get_text() if not denominazione: obligatoryField(self.anagrafica.getTopLevel(), self.denominazione_banca_entry) return self.dao.denominazione = denominazione self.dao.agenzia = self.agenzia_entry.get_text() self.dao.bic_swift = self.bic_swift_entry.get_text() self.dao.abi = self.abi_entry.get_text() self.dao.cab = self.cab_entry.get_text() iban = self.iban_entry.get_text() or '' if iban: try: cc, cs, cin, abi, cab, conto = dividi_iban(iban) except: messageError(msg="Il codice IBAN inserito non è corretto.", transient=self.getTopLevel()) return else: self.dao.abi = abi self.dao.cab = cab self.dao.iban = iban else: self.dao.iban = '' self.dao.persist()
def drawImage(self,group=None, tabpro=None): """ Drawing an image """ pfile = tabpro['pfile'] celle = tabpro["cells"] (imgPath, imgFile) = os.path.split(pfile) #innerIterator = self.iterator width = [float(x.get("WIDTH")) for x in celle][0] height = [float(x.get("HEIGHT")) for x in celle][0] xPos = [float(x.get("XPOS")) for x in celle][0] yPos = [float(x.get("YPOS")) for x in celle][0] # print "IMAGE Path ", pfile img = None try: if os.path.exists(Environment.imagesDir + imgFile): img = utils.ImageReader(Environment.imagesDir + imgFile) except: if not imgPath: imgPath = os.path.expanduser('~') + os.sep else: imgPath = os.path.expanduser('~') + os.sep+imgPath +"/" if os.path.exists(imgPath +imgFile): img = utils.ImageReader(imgPath +imgFile) if img: self.canvas.drawImage(img, xPos - self.pageProperties[self.pdfPage][9], self.pageProperties[0][7] - yPos - height + self.pageProperties[self.pdfPage][10], width=width, height=height) self.canvas.saveState() else: from promogest.lib.utils import messageError messageError(msg="ATTENZIONE!!!\n L'immagine scelta come logo in dati azienda\n NON è stata trovata!")
def simpleSanitize(self ): """ Ripulisce lo sla da caratteri spuri """ if self.slafile : #self.slaFileName = self.slafile self.doc = ElementTree.parse(self.slafile) else: f = file(self.slaFileName, 'rb') text = f.read() text = text.replace('', '\\n') f.close() tempFile = self.pdfFolder+"_temp" try: f = file(tempFile, 'wb') f.write(text) f.close() self.doc = ElementTree.parse(tempFile) except IOError: from promogest.lib.utils import messageError messageError(msg="PERCORSO NON TROVATO,\n Spostato per caso la cartella promogest2? ,\n controllare l'impostazione in opzioni") return if self.doc: self.root = self.doc.getroot() self.document = self.root.findall('DOCUMENT')[0]
def commit(self): """ Salva i dati nel DB""" if not params["session"].deleted and not self.ckdd(self): return try: params["session"].commit() return 1 except Exception,e: from promogest.lib.utils import messageError msg = """ATTENZIONE ERRORE NEL SALVATAGGIO Qui sotto viene riportato l'errore di sistema: ( normalmente il campo in errore è tra "virgolette") %s L'errore può venire causato da un campo fondamentale mancante, da un codice già presente, si invita a rincontrollare i campi e riprovare Grazie! """ %e try: messageError(msg=msg) pg2log.info("ERRORE IN DAO COMMIT "+str(e)) except: print("ERRORE in dao commit", str(e)) params["session"].rollback() return 0
def hook(et, ev, eb): import traceback if "Operation aborted" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print("\n ".join(list(traceback.format_exception(et, ev, eb)))) return if "ATTENZIONE, TENTATIVO DI SALVATAGGIO SENZA RIGHE?????" in ev: return if "Bad file descriptor" in ev: return if "ProgrammingError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print("\n ".join(list(traceback.format_exception(et, ev, eb)))) __sendmail() delete_pickle() return if "OperationalError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print("\n ".join(list(traceback.format_exception(et, ev, eb)))) __sendmail() delete_pickle() return if "ArgumentError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print("\n ".join(list(traceback.format_exception(et, ev, eb)))) __sendmail() delete_pickle() return if "'MetaData' object has no attribute 'naming_convention'" in str(ev): delete_pickle() if "Handler" in str(ev): print(str(ev)) return if ( "InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush" in str(ev) ): from promogest.lib.utils import messageError messageError(msg="Si consiglia di riavviare il software, l'errore è stato segnalato") if "is already defined for this MetaData instance" in str(ev): delete_pickle() if "cannot import" in str(ev) or "No module" in str(ev): from promogest.lib.utils import messageError messageError( msg="C'è una libreria mancante il cui nome è qui sotto:\n" + str(ev) + "\nDevo chiudere il programma, contattare assistenza" ) sys.exit() try: pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) except: pass print("\n ".join(list(traceback.format_exception(et, ev, eb)))) __sendmail()
def dati_file_conad_terron(testata): """ """ from promogest.dao.TestataDocumento import TestataDocumento from promogest.dao.InformazioniFatturazioneDocumento import InformazioniFatturazioneDocumento from promogest.dao.Azienda import Azienda if testata: #Scriviamo la testata della fattura dati_differita = InformazioniFatturazioneDocumento().select(id_fattura=testata.id, batchSize=None) azienda = Azienda().getRecord(id=Environment.azienda) if not azienda: messageError('Inserire le informazioni sull\' azienda in Dati azienda') return None if azienda.ragione_sociale == '': messageError('Inserire la ragione sociale dell\'azienda in Dati azienda') return None dati2 = [] if dati_differita: for ddtt in dati_differita: ddt = TestataDocumento().getRecord(id=ddtt.id_ddt) codice = '' if ddt.DM is not None: codice = ddt.DM.codice or '' dati = {'testata': { 'numero_progressivo': '0', 'codice_cliente': str(codice), 'data_bolla': ddt.data_documento, 'numero_bolla': str(ddt.numero), 'data_fattura': testata.data_documento, 'numero_fattura': str(testata.numero), }, 'dettaglio': [] } for riga in ddt.righe: if riga.id_articolo: art = leggiArticolo(riga.id_articolo) unitaBase = 'NR' if str(art["unitaBase"]).upper() == 'N' else str(art["unitaBase"]).upper() dati['dettaglio'].append( { 'numero_progressivo':'0', 'codice_articolo': str(art["codice"]), 'descrizione': str(art["denominazione"].replace("à", "a")), 'unita_misura': unitaBase, 'qta_fatturata': str(mN(Decimal(riga.quantita * (riga.moltiplicatore or 1)), 2)), 'prezzo_unitario': str(mN(Decimal(riga.valore_unitario_netto), 3)), 'aliquota_iva': str(mN(riga.percentuale_iva,0)) }) dati2.append(dati) return dati2
def hook(et, ev, eb): import traceback if "Operation aborted" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print "\n ".join(list(traceback.format_exception(et, ev, eb))) return if "ATTENZIONE, TENTATIVO DI SALVATAGGIO SENZA RIGHE?????" in ev: return if "[Errno 9] Bad file descriptor" in ev: return #if "Handler" in str(ev): #print "ATTENZIONE!!! MANCA L'HANDLER", ev #pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) #print "\n ".join(list(traceback.format_exception(et, ev, eb))) #delete_pickle() #return if "ProgrammingError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print "\n ".join(list(traceback.format_exception(et, ev, eb))) __sendmail() delete_pickle() return if "OperationalError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print "\n ".join(list(traceback.format_exception(et, ev, eb))) __sendmail() delete_pickle() return if "ArgumentError" in str(ev): pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) print "\n ".join(list(traceback.format_exception(et, ev, eb))) __sendmail() delete_pickle() return if "InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush" in str(ev): from promogest.lib.utils import messageError messageError(msg="Si consiglia di riavviare il software, l'errore è stato segnalato") if "is already defined for this MetaData instance" in str(ev): delete_pickle() if "AttributeError: 'MetaData' object has no attribute 'naming_convention'" in str(ev): delete_pickle() try: pg2log.info("\n ".join(["Error occurred: traceback follows"] + list(traceback.format_exception(et, ev, eb)))) except: pass print "\n ".join(list(traceback.format_exception(et, ev, eb))) __sendmail()
def __init__(self, parent): ''' Constructor ''' GladeWidget.__init__(self, root='riba_window', path='Riba/gui/riba_window.glade', isModule=True) self.__parent = parent self.placeWindow(self.getTopLevel()) self.__setup_webview() self.draw() try: self.__creditore = leggiCreditore() except RuntimeError as e: messageError(msg=str(e)) self.show_all()
def commit(self): """ Salva i dati nel DB""" try: params["session"].commit() return True except Exception, e: msg = ( """ATTENZIONE ERRORE Qui sotto viene riportato l'errore di sistema: %s ( normalmente il campo in errore è tra "virgolette") """ % e ) messageError(msg=msg, transient=None) print "ERRORE", e params["session"].rollback() return False
def on_genera_report_button_clicked(self, button): self.generatore = PGRiBa(self, self.__creditore) self.generatore.bind(self.progressbar1) data_inizio = stringToDate(self.data_inizio_entry.get_text()) data_fine = stringToDate(self.data_fine_entry.get_text()) pageData = { 'file': 'riba_export.html', 'creditore': self.__creditore, 'data_inizio': data_inizio, 'data_fine': data_fine, } res = 0 try: res = self.generatore.analizza(data_inizio, data_fine, pageData=pageData) except RuntimeError as e: messageError(msg=str(e)) if res != 0: self.salva_file_button.set_sensitive(True) renderHTML(self.view, renderTemplate(pageData))
def leggiCreditore(): ''' Ritorna le informazioni sul creditore @return: creditore ''' # inizializziamo i dati del creditore creditore = Creditore() azienda = Azienda().getRecord(id=Environment.azienda) if azienda: creditore.codice_fiscale = azienda.codice_fiscale if not creditore.codice_fiscale: messageError('Inserire il codice fiscale nei Dati azienda.') return # provare con le banche azienda prima if azienda.iban: try: cc, cs, cin, creditore.abi, creditore.cab, creditore.numero_conto = dividi_iban(azienda.iban) except: pass elif azienda.abi and azienda.cab: creditore.abi = azienda.abi creditore.cab = azienda.cab if azienda.numero_conto: creditore.numero_conto = azienda.numero_conto else: messageError('Inserire il numero di conto nei Dati azienda.') return else: messageError('Inserire il codice IBAN nei Dati azienda.') return if azienda.codice_rea: creditore.codice_sia = str(azienda.codice_rea or ' ') else: messageError('Inserire il codice SIA in Dati azienda.') return creditore.descrizione[0] = azienda.ragione_sociale creditore.descrizione[1] = azienda.sede_operativa_indirizzo creditore.descrizione[2] = azienda.sede_operativa_localita creditore.descrizione[3] = azienda.codice_fiscale creditore.denominazione_breve = azienda.ragione_sociale return creditore
def ckd(dao): classe = dao.__class__.__name__ stopp = False if classe not in ["TestataScontrino", "Articolo", "ArticoloTagliaColore", "TestataDocumento"]: return True records = Environment.session.query(dao.__class__).count() #print "CLASSE", classe, records,Environment.modulesList, "BASIC" in Environment.modulesList if "BASIC" in Environment.modulesList: if Environment.tipodb == "sqlite": if "TestataScontrino" in classe: if records > 16: stopp = True if "TestataDocumento" in classe: if records > 48: stopp = True if "Articolo" in classe: if records > 400: stopp = True if "ArticoloTagliaColore" in classe: if records > 600: stopp = True if "TestataCommessa" in classe: if records > 5: stopp = True elif "STANDARD" in Environment.modulesList: if "+S" not in Environment.modulesList: if "TestataScontrino" in classe: if records > 16: stopp = True if "+W" not in Environment.modulesList: if "ArticoloTagliaColore" in classe: if records > 600: stopp = True if "TestataCommessa" in classe: if records > 5: stopp = True elif "FULL" in Environment.modulesList: if "+S" not in Environment.modulesList: if "TestataScontrino" in classe: if records > 16: stopp = True if "+W" not in Environment.modulesList: if "ArticoloTagliaColore" in classe: if records > 600: stopp = True if stopp: msg = """ATTENZIONE! Hai raggiunto il limite massimo di inserimenti consentito dalla versione del programma da te in uso Acquista la versione "STANDARD" O "FULL" per attivarei moduli semplici Oppure il modulo SHOP e/o WEAR per vendere al dettaglio e/o la gestiore taglie e colori. GRAZIE""" from promogest.lib.utils import messageError messageError(msg=msg) Environment.params["session"].rollback() return False return True
def analizza(self, data_inizio=None, data_fine=None, pageData=None): if not data_inizio: messageError(msg='Inserire una data d\'inizio periodo.') return 0 if not data_fine: data_inizio_, data_fine = dataInizioFineMese(data_inizio) documenti = TestataDocumento().select(complexFilter=(and_(or_(TestataDocumento.operazione=='Fattura differita vendita', TestataDocumento.operazione=='Fattura accompagnatoria'), TestataDocumento.data_documento.between(data_inizio, data_fine))), batchSize=None) if not documenti: messageInfo(msg="Nessun risultato.") return 0 righe = [] buff = self.recordIB() i = 0 totale_importi = Decimal(0) for documento in documenti: if self.progressbar: pbar(self.progressbar, parziale=i, totale=len(documenti)) ope = leggiOperazione(documento.operazione) if ope: if ope['tipoPersonaGiuridica'] != 'cliente': continue banca = None if documento.id_banca: banca = leggiBanca(documento.id_banca) else: continue cli = leggiCliente(documento.id_cliente) cli_ente = Cliente().getRecord(id=documento.id_cliente) cod_fisc_piva = '' if cli_ente: cod_fisc_piva = cli_ente.codice_fiscale or cli_ente.partita_iva else: cod_fisc_piva = documento.codice_fiscale_cliente debitore = Debitore(cod_fisc_piva, banca['abi'], banca['cab']) debitore.descrizione[0] = '' if cli['ragioneSociale']: debitore.descrizione[0] = cli['ragioneSociale'] else: debitore.descrizione[0] = cli['cognome'] + ' ' + cli['nome'] debitore.indirizzo = documento.indirizzo_cliente debitore.CAP = documento.cap_cliente debitore.provincia = documento.provincia_cliente debitore.comune = documento.localita_cliente for scadenza in documento.scadenze: if pagamentoLookup(scadenza.pagamento): row = "%s N. %s a %s del %s \nImporto: %s data scadenza: %s" % (documento.operazione, documento.numero, documento.intestatario, dateToString(documento.data_documento), # scadenza.pagamento, mN(scadenza.importo, 2), dateToString(scadenza.data) ) progressivo = i + 1 totale_importi += scadenza.importo buff += self.record14(progressivo, scadenza.data, scadenza.importo, debitore) buff += self.record20(progressivo) buff += self.record30(progressivo, debitore) buff += self.record40(progressivo, debitore) buff += self.record50(progressivo, debitore, row.replace('\n', '')) buff += self.record51(progressivo, progressivo) buff += self.record70(progressivo) riga = { 'destinatario': debitore.descrizione[0], 'indirizzo': debitore.indirizzo, 'CAP': debitore.CAP, 'comune': debitore.comune, 'provincia': debitore.provincia, 'cod_fisc_piva': cod_fisc_piva, 'banca_abi': banca['abi'], 'banca_cab': banca['cab'], 'importo': scadenza.importo, 'data_scadenza': scadenza.data, 'rif_debito': row } righe.append(riga) i = i + 1 buff += self.recordEF(i, totale_importi) pageData['righe'] = righe pageData['totale_importi'] = totale_importi pageData['disposizioni'] = i if self.progressbar: pbar(self.progressbar, stop=True) self._buffer = buff
def dati_file_buffetti(testata): """ """ #from promogest.dao.TestataDocumento import TestataDocumento from promogest.dao.Azienda import Azienda if testata: azienda = Azienda().getRecord(id=Environment.azienda) if not azienda: messageError('nessuna informazione azienda') return None if azienda.ragione_sociale == '': messageError('nessuna ragione sociale impostata') return None scadenze = testata.scadenze dati_generazione_scadenze = 'S' if len(scadenze) == 0: dati_generazione_scadenze = 'N' if testata.operazione == 'Fattura Accompagnatoria': tipo_documento = 'A' elif 'Fattura Differita' in testata.operazione: tipo_documento = 'D' elif 'Fattura' in testata.operazione: tipo_documento = 'F' tipo_registro = 'F' totale_fattura = mN(testata._totaleScontato + testata._totaleSpese, 2) if testata.id_fornitore is not None: tipo_nominativo = 'F' cognome_cli_for = testata.cognome_fornitore or '' nome_cli_for = testata.nome_fornitore or '' codice_fiscale_cli_for = testata.codice_fiscale_fornitore partita_iva_cli_for = testata.partita_iva_fornitore indirizzo_cli_for = testata.indirizzo_fornitore localita_cli_for = testata.localita_fornitore cap_cli_for = testata.cap_fornitore provincia_cli_for = testata.provincia_fornitore codice_cli_for = testata.codice_fornitore elif testata.id_cliente is not None: tipo_nominativo = 'C' cognome_cli_for = testata.cognome_cliente or '' nome_cli_for = testata.nome_cliente or '' codice_fiscale_cli_for = testata.codice_fiscale_cliente partita_iva_cli_for = testata.partita_iva_cliente indirizzo_cli_for = testata.indirizzo_cliente localita_cli_for = testata.localita_cliente cap_cli_for = testata.cap_cliente provincia_cli_for = testata.provincia_cliente codice_cli_for = testata.codice_cliente dati = [{ 'testata': { 'ragione_sociale_ditta': azienda.ragione_sociale, 'cod_fisc_piva_ditta': azienda.codice_fiscale or azienda.partita_iva, 'dati_generazione_scadenze': dati_generazione_scadenze, 'tipo_piano': '2', 'da_data': testata.data_documento, 'a_data': testata.data_documento, 'no_data': '' }, 'scadenze':{}, 'testata_pagamento': [{ 'codice': '0', #inseire il codice con cui identifichiamo il tipo di pagamento (es. ID RIba 30 gg) 'numero_rate': str(len(scadenze)), 'descrizione': testata.pagamento, 'tipo': '1', 'determinazione_tipo': '31', 'numero_rate': '1', 'giorni_prima': '30' # recuperare il numero di giorni dal pagamento }], 'fine_scadenza': {}, 'record0': [{ 'tipo_nominativo': tipo_nominativo, 'cognome': cognome_cli_for, 'nome': nome_cli_for, 'codice_fiscale': codice_fiscale_cli_for, 'partita_iva': partita_iva_cli_for, 'indirizzo': indirizzo_cli_for, 'localita': localita_cli_for, 'cap': cap_cli_for, 'provincia': provincia_cli_for, 'incluso_elenchi_bl': 'N' }], 'record1': [{ 'tipo_documento': tipo_documento, 'totale_fattura': str(totale_fattura), 'cf_piva': codice_fiscale_cli_for or partita_iva_cli_for, 'codice': codice_cli_for, 'tipo_registro': tipo_registro, 'data_doc': testata.data_documento }], 'record2': [{ 'imponibile_iva': str(mN(testata._totaleImponibileScontato)), 'importo_iva': str(mN(testata._totaleImpostaScontata)), }], 'recordB': [{ 'posizione': 'A' # controllare scadenze.data_pagamento se None mettere A, altrimenti P (pagato) }], }] # for scadenza in testata.scadenze: # dati['dettaglio_rate'].append({ # 'numero_rata': testata.scadenze.index(scadenza) + 1 # }) return dati
def to_fatturapa(dao, progressivo, anag=None): #if anag: # anag.pbar_anag_complessa.show() #progressivo = 1 #for dao in daos: #if anag: # utils.pbar(anag.pbar_anag_complessa,parziale=daos.index(dao), totale=len(daos), text="GEN FatturePA MULTIPLE", noeta=False) if dao.__class__.__name__ == 'TestataDocumento': dao.totali azienda = Azienda().getRecord(id=Environment.azienda) indirizzi_email = AccountEmail().select(idAzienda=Environment.azienda, preferito=True, batchSize=None) if indirizzi_email: indirizzo_email_preferito = indirizzi_email[0].indirizzo else: indirizzo_email_preferito = '' # Riempiamo la fattura elettronica pageData = {} pageData['dao'] = dao pageData['trasmittente'] = { 'cf': azienda.codice_fiscale, 'piva': azienda.partita_iva, 'telefono': azienda.telefono, 'email': indirizzo_email_preferito, } # campi di trasmissione pageData['trasmissione'] = { 'progressivo': azienda.progressivo_fatturapa, 'formato_trasmissione': 'SDI11', 'codice_destinatario': dao.CLI.codice } pageData['cedente'] = { 'partita_iva': azienda.partita_iva, 'denominazione': azienda.denominazione, 'nome': '', 'cognome': '', 'regime_fiscale': 'RF01', 'sede_indirizzo': azienda.sede_operativa_indirizzo, 'sede_numero_civico': azienda.sede_operativa_numero, 'sede_cap': azienda.sede_operativa_cap, 'sede_comune': azienda.sede_operativa_localita, 'sede_provincia': azienda.sede_operativa_provincia.upper(), 'sede_nazione': 'IT', 'stabile_indirizzo': '', 'stabile_numero_civico': '', 'stabile_cap': '', 'stabile_comune': '', 'stabile_provincia': '', 'stabile_nazione': '', 'iscrizioneREA_numeroREA': '', #azienda.codice_rea, 'iscrizioneREA_ufficio': '', 'capitale_sociale': '', 'socio_unico': '', 'liquidazione': '' } pageData['committente'] = { 'partita_iva': dao.CLI.partita_iva, 'codice_fiscale': dao.CLI.codice_fiscale, 'denominazione': dao.CLI.ragione_sociale, 'nome': dao.CLI.nome, 'cognome': dao.CLI.cognome, 'sede_indirizzo': dao.CLI.sede_legale_indirizzo, 'sede_numero_civico': '', 'sede_cap': dao.CLI.sede_legale_cap, 'sede_comune': dao.CLI.sede_legale_localita, 'sede_provincia': dao.CLI.sede_legale_provincia.upper(), 'sede_nazione': 'IT', } pageData['modalita_pagamento'] = dao.pagamento_codice pageData['soggetto_emittente'] = 'CC' pageData['trasporto'] = None pageData['contratto'] = None pageData['convenzione'] = None pageData['ricezione'] = None # Controlli di validità dei dati if dao.CLI.sede_legale_indirizzo == '': utils.messageError("Inserire le informazioni sulla sede legale del committente.") return if dao.codice_cig == '' or dao.codice_cig == '': utils.messageError("Inserire il codice CUP e CIG associati al documento") return for riga in dao.righe: if len(riga.descrizione) > 100: utils.messageError("La descrizione per un riga del documento supera la lunghezza massima di 100 caratteri. Abbreviarla e riprovare.") return if len(dao.scadenze) == 1: pageData['condizioni_pagamento'] = 'TP02' # pagamento completo for scadenza in dao.scadenze: if scadenza.numero_scadenza == 0: pageData['condizioni_pagamento'] = 'TP03' # anticipo break if len(dao.scadenze) >= 2: pageData['condizioni_pagamento'] = 'TP01' #pagamento a rate return renderFatturaPA(pageData)