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.")
Пример #2
0
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