def do_fatt_diff(lista_documenti, data_documento, operazione, no_rif_righe_cumul=False, note=False, data_consegna=False, no_row=False, riga_tratteggiata = False,riga_vuota = False, gui=False): fattura = None logfattdiff = '' nomi = getNames(lista_documenti) #parso tutta la lista dei documenti e prendo le rag sociali, elminando i duplicati lista_documenti = sortDoc(nomi, lista_documenti) for ragsoc in nomi: if gui: pbar(gui.pbar_df_clienti,parziale=nomi.index(ragsoc), totale=len(nomi), text=ragsoc, noeta=False) # in nomi ci sono le ragioni sociali dei clienti # self.listdoc contiene un dizionario che ha come chiave il cliente #e come valore una lista di gtkTreeiter a lui riferiti for ddt in lista_documenti[ragsoc]: esiste, msg = daoGiaPresente(InformazioniFatturazioneDocumento()\ .select(id_fattura=ddt[0].id)) if esiste and operazione in ["Fattura vendita","Fattura differita vendita","Fattura differita vendita ford"]: logfattdiff += msg else: #ok il ddt non è già presente in nessuna fatturato # usiamo i suoi dati per fare una fattura fattura = newSingleDoc(data_documento, operazione, "", ddt[0]) #break if fattura: righe = [] ddt_id = [] for ddt in lista_documenti[ragsoc]: if gui: pbar(gui.pbar_df_documenti,parziale=lista_documenti[ragsoc].index(ddt), totale=len(lista_documenti[ragsoc]), text=str("DDT "+ ddt[2]), noeta=False) esiste, msg = daoGiaPresente(InformazioniFatturazioneDocumento()\ .select(id_ddt=ddt[0].id)) if esiste: logfattdiff += msg else: # Ok, ora posso registrare le righe dei documenti dao_da_fatturare = ddt[0] # Inserisco il riferimento: if no_rif_righe_cumul: righe += dao_da_fatturare.righe[:] else: riga_riferimento = "Rif. " + str(dao_da_fatturare.operazione) + " n. " + str( dao_da_fatturare.numero) + " del " + dateToString( dao_da_fatturare.data_documento ) if data_consegna and dao_da_fatturare.inizio_trasporto: riga_riferimento = riga_riferimento + "\nIn.Tr. il "+ dateToString( dao_da_fatturare.inizio_trasporto) if note and dao_da_fatturare.note_pie_pagina != "": riga_riferimento = riga_riferimento + "\n" + dao_da_fatturare.note_pie_pagina #se no_row è true inseriscei l dettaglio righe if no_row: daoRiga = RigaDocumento() daoRiga.descrizione = riga_riferimento daoRiga.quantita = 0.0 daoRiga.valore_unitario_lordo = 0.0 daoRiga.percentuale_iva = 0.0 daoRiga.moltiplicatore = 0.0 daoRiga.valore_unitario_netto = 0.0 daoRiga.scontiRigaDocumento = [] righe.append(daoRiga) for r in dao_da_fatturare.righe: if gui: pbar(gui.pbar_df_righe,parziale=dao_da_fatturare.righe.index(r), totale=len(dao_da_fatturare.righe), text=r.descrizione, noeta=False) daoRiga = RigaDocumento() daoRiga.id_articolo = r.id_articolo daoRiga.id_magazzino = r.id_magazzino daoRiga.descrizione = ". "+ r.descrizione daoRiga.id_listino = r.id_listino daoRiga.id_iva = r.id_iva daoRiga.percentuale_iva = r.percentuale_iva daoRiga.applicazione_sconti = r.applicazione_sconti daoRiga.quantita = r.quantita daoRiga.id_multiplo = r.id_multiplo daoRiga.moltiplicatore = r.moltiplicatore daoRiga.valore_unitario_lordo = r.valore_unitario_lordo daoRiga.valore_unitario_netto = r.valore_unitario_netto # daoRiga.misura_pezzo = r.misura_pezzo sconti = [] for s in r.sconti: daoSconto = ScontoRigaDocumento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoRiga.scontiRigaDocumento = sconti righe.append(daoRiga) if riga_tratteggiata: daoRiga = RigaDocumento() daoRiga.descrizione = " -------------------------------------------" daoRiga.quantita = 0 daoRiga.valore_unitario_lordo = 0 daoRiga.percentuale_iva = 0 daoRiga.moltiplicatore = 0 daoRiga.valore_unitario_netto = 0 daoRiga.scontiRigaDocumento = [] righe.append(daoRiga) if riga_vuota: daoRiga = RigaDocumento() daoRiga.descrizione = " " daoRiga.quantita = 0 daoRiga.valore_unitario_lordo = 0 daoRiga.percentuale_iva = 0 daoRiga.moltiplicatore = 0 daoRiga.valore_unitario_netto = 0 daoRiga.scontiRigaDocumento = [] righe.append(daoRiga) else: #percentuale_iva = (dao_da_fatturare._totaleScontato - dao_da_fatturare._totaleImponibileScontato) *100 / dao_da_fatturare._totaleScontato dao_da_fatturare.totali daoRiga = RigaDocumento() daoRiga.descrizione = riga_riferimento daoRiga.quantita = 0 daoRiga.valore_unitario_lordo = 0 daoRiga.percentuale_iva = 0 daoRiga.moltiplicatore = 0 daoRiga.valore_unitario_netto = 0 daoRiga.scontiRigaDocumento = [] righe.append(daoRiga) for t in dao_da_fatturare._castellettoIva: daoRiga = RigaDocumento() daoRiga.descrizione = ". Articoli con aliquota IVA: "+str(mN(t["percentuale"],1))+"%" daoRiga.quantita = 1 daoRiga.valore_unitario_lordo = t["totale"] daoRiga.percentuale_iva = t["percentuale"] daoRiga.moltiplicatore = 0 daoRiga.valore_unitario_netto = t["imponibile"] daoRiga.scontiRigaDocumento = [] righe.append(daoRiga) ddt_id.append(dao_da_fatturare.id) if righe: if no_rif_righe_cumul: righeDict = {} rrighe = [] for r in righe: if r.id_articolo: if r.id_articolo in righeDict: a = righeDict[r.id_articolo] a.append(r) righeDict[r.id_articolo] = a else: righeDict[r.id_articolo] = [r] else: rrighe.append(r) righe = [] for r in rrighe: daoRiga = RigaDocumento() daoRiga.id_articolo = r.id_articolo daoRiga.id_magazzino = r.id_magazzino daoRiga.descrizione = r.descrizione daoRiga.id_listino = r.id_listino daoRiga.percentuale_iva = r.percentuale_iva daoRiga.applicazione_sconti = r.applicazione_sconti daoRiga.quantita = r.quantita daoRiga.id_multiplo = r.id_multiplo daoRiga.moltiplicatore = r.moltiplicatore daoRiga.valore_unitario_lordo = r.valore_unitario_lordo daoRiga.valore_unitario_netto = r.valore_unitario_netto # daoRiga.misura_pezzo = r.misura_pezzo sconti = [] for s in r.sconti: daoSconto = ScontoRigaDocumento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoRiga.scontiRigaDocumento = sconti righe.insert(0, daoRiga) for k,v in righeDict.iteritems(): if len(v) ==1: r = v[0] daoRiga = RigaDocumento() #daoRiga.id_articolo = r.id_articolo daoRiga.id_magazzino = r.id_magazzino daoRiga.descrizione = r.descrizione daoRiga.id_listino = r.id_listino daoRiga.percentuale_iva = r.percentuale_iva daoRiga.applicazione_sconti = r.applicazione_sconti daoRiga.quantita = r.quantita daoRiga.id_multiplo = r.id_multiplo daoRiga.moltiplicatore = r.moltiplicatore daoRiga.valore_unitario_lordo = r.valore_unitario_lordo daoRiga.valore_unitario_netto = r.valore_unitario_netto # daoRiga.misura_pezzo = r.misura_pezzo sconti = [] for s in r.sconti: daoSconto = ScontoRigaDocumento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoRiga.scontiRigaDocumento = sconti righe.insert(0, daoRiga) else: # Questa è la situazione di più righe da accorpare quantita = 0 vul = 0 vun = 0 for a in v: if a.sconti: daoRiga = RigaDocumento() daoRiga.id_articolo = a.id_articolo daoRiga.id_magazzino = a.id_magazzino daoRiga.descrizione = a.descrizione daoRiga.id_listino = a.id_listino daoRiga.percentuale_iva = a.percentuale_iva daoRiga.applicazione_sconti = a.applicazione_sconti daoRiga.quantita = a.quantita daoRiga.id_multiplo = a.id_multiplo daoRiga.moltiplicatore = a.moltiplicatore daoRiga.valore_unitario_lordo = a.valore_unitario_lordo daoRiga.valore_unitario_netto = a.valore_unitario_netto # daoRiga.misura_pezzo = r.misura_pezzo sconti = [] for s in a.sconti: daoSconto = ScontoRigaDocumento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoRiga.scontiRigaDocumento = sconti righe.insert(0, daoRiga) continue else: quantita += a.quantita #vul = a.valore_unitario_lordo #vun = a.valore_unitario_netto daoRiga = RigaDocumento() #daoRiga.id_articolo = a.id_articolo daoRiga.id_magazzino = a.id_magazzino daoRiga.descrizione = a.descrizione daoRiga.id_listino = a.id_listino daoRiga.percentuale_iva = a.percentuale_iva daoRiga.applicazione_sconti = a.applicazione_sconti daoRiga.quantita = quantita daoRiga.id_multiplo = a.id_multiplo daoRiga.moltiplicatore = a.moltiplicatore daoRiga.valore_unitario_lordo = a.valore_unitario_lordo daoRiga.valore_unitario_netto = a.valore_unitario_netto # daoRiga.misura_pezzo = r.misura_pezzo sconti = [] for s in a.sconti: daoSconto = ScontoRigaDocumento() daoSconto.valore = s.valore daoSconto.tipo_sconto = s.tipo_sconto sconti.append(daoSconto) daoRiga.scontiRigaDocumento = sconti righe.insert(0, daoRiga) #return for r in righe: r.posizione = righe.index(r)+1 fattura.righeDocumento = righe if not fattura.numero: valori = numeroRegistroGet(tipo=operazione, date=stringToDate(data_documento)) fattura.numero = valori[0] fattura.registro_numerazione= valori[1] fattura.persist() # calcolo i totali, quindi assegno come importo # dell'unica scadenza, l'importo del documento fattura.totali if posso('PA'): scad = fattura.scadenze if scad: scad[0].importo = fattura._totaleScontato for d in ddt_id: info = InformazioniFatturazioneDocumento() info.id_fattura = fattura.id info.id_ddt = d info.persist() else: messageInfo(msg= "NON CI SONO RIGHE NON CREO NIENTE") if gui: pbar(gui.pbar_df_clienti,stop=True) pbar(gui.pbar_df_documenti,stop=True) pbar(gui.pbar_df_righe,stop=True) if logfattdiff: messageInfo('I seguenti documenti non sono stati elaborati:\n' + logfattdiff) if fattura: messageInfo("Nuovo documento creato!") else: messageInfo("Non è stato creato alcun documento in quanto non sono state trovate righe da inserire.")
def dati_file_conad(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 codice_fornitore = '' if azienda.matricola_inps: codice_fornitore = azienda.matricola_inps else: messageError("Inserire il codice fornitore nel campo \'matricola_inps\' 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': str(dati_differita.index(ddtt) + 1), 'codice_cliente': str(ddt.ragione_sociale_cliente), 'data_bolla': ddt.data_documento, 'numero_bolla': str(ddt.numero), 'codice_fornitore': codice_fornitore, 'data_fattura': testata.data_documento, 'numero_fattura': str(testata.numero), 'codice_cooperativa': str(codice), 'codice_socio': str(codice), }, 'dettaglio': [] } for riga in ddt.righe: if riga.id_articolo: art = leggiArticolo(riga.id_articolo) dati['dettaglio'].append( { 'numero_progressivo':str(dati_differita.index(ddtt) + 1), 'codice_articolo': str(art["codice"]), 'descrizione': str(art["denominazione"].replace("à", "a")), 'unita_misura': str(art["unitaBase"]).upper(), 'qta_fatturata': str(mN(Decimal(riga.quantita * (riga.moltiplicatore or 1)), 2)), 'prezzo_unitario': str(mN(Decimal(riga.valore_unitario_netto), 3)), 'importo_totale': str(mN(Decimal(riga.quantita or 0) * Decimal(riga.moltiplicatore or 1) * Decimal(riga.valore_unitario_netto or 0), 3)), 'aliquota_iva': str(mN(riga.percentuale_iva,0)) }) dati2.append(dati) return dati2