Ejemplo n.º 1
0
    def on_crea_fattura_button_clicked(self, button):
        """ RIGA DOCUMENTO:
            id, valore_unitario_netto, valore_unitario_lordo,
            quantita, moltiplicatore, applicazione_sconti,
            percentuale_iva, descrizione, id_articolo, id_magazzino,
            id_multiplo, id_listino, id_iva, id_riga_padre

            RIGA SCONTRINO:
            id, prezzo, prezzo_scontato, quantita,
            descrizione, id_testata_scontrino, id_articolo
            TODO: Vanno gestiti gli sconti
            """
        if not self.daoTse:
            messageInfo(msg="Nessuno scontrino selezionato")
            return
        if self.daoTse and not self.daoTse.id_cliente_testata_scontrino:
            if self.id_cliente_emessi_customcombobox.getId():
                a = TestataScontrinoCliente()
                a.id_cliente =  self.id_cliente_emessi_customcombobox.getId()
                a.id_testata_scontrino = self.daoTse.id
                a.persist()
            else:
                messageInfo(msg="Scontrino selezionato, ma nessun cliente assegnato")
            return
        if not findStrFromCombobox(self.operazione_combobox,0):
            obligatoryField(self.getTopLevel(), self.operazione_combobox, msg="SELEZIONA IL TIPO DOCUMENTO")
        one_day = datetime.timedelta(days=1)
        proviamo = datetime.datetime(self.daoTse.data_inserimento.year,self.daoTse.data_inserimento.month,
        self.daoTse.data_inserimento.day)
        listascontrini = TestataScontrino().select(daData=proviamo, aData=proviamo+one_day, batchSize=None, orderBy="data_inserimento")
        a = [i for i,x in enumerate(listascontrini) if x == self.daoTse]
        if a:
            a = a[0]
        else:
            a=0
        posizione= a + 1
        note = "Rif. Scontrino" + " n. " + str(posizione) + " del " + dateToString(self.daoTse.data_inserimento)

        newDao = TestataDocumento()
        newDao.data_documento = datetime.datetime.now()
        newDao.operazione = findStrFromCombobox(self.operazione_combobox,0)
        newDao.id_cliente = self.id_cliente_emessi_customcombobox.getId()
        newDao.note_pie_pagina = note
        #newDao.applicazione_sconti = self.dao.applicazione_sconti
        #sconti = []
        #sco = self.dao.sconti or []
        scontiRigaDocumento=[]
        scontiSuTotale=[]
        righeDocumento=[]
        #for s in sco:
            #daoSconto = ScontoTestataDocumento()
            #daoSconto.valore = s.valore
            #daoSconto.tipo_sconto = s.tipo_sconto
            #scontiSuTotale.append(daoSconto)
        newDao.scontiSuTotale = scontiSuTotale
        #righe = []
        rig = self.daoTse.righe
        for r in rig:
            daoRiga = RigaDocumento()
            daoRiga.id_testata_documento = newDao.id
            daoRiga.id_articolo = r.id_articolo
            daoRiga.id_magazzino = self.daoTse.id_magazzino
            daoRiga.descrizione = r.descrizione
            # Copia il campo iva
            arto = leggiArticolo(r.id_articolo)
            daoRiga.id_iva = arto["idAliquotaIva"]
            #ricalcola prezzi
            daoRiga.id_listino = self.ricercaListino()
            imponibile = float(r.prezzo)/(1+float(arto["percentualeAliquotaIva"])/100)
            imponibile_scontato = float(r.prezzo_scontato)/(1+float(arto["percentualeAliquotaIva"])/100)
            daoRiga.valore_unitario_lordo = imponibile or 0
            daoRiga.valore_unitario_netto =  imponibile_scontato

            daoRiga.percentuale_iva = arto["percentualeAliquotaIva"]

            #daoRiga.applicazione_sconti = r.applicazione_sconti
            daoRiga.quantita = r.quantita
            daoRiga.id_multiplo = None
            daoRiga.moltiplicatore = 1
            #sconti = []
            scontiRigaDocumento = []
            #sco = r.sconti
            #for s in sco:
                #daoSconto = ScontoRigaDocumento()
                #daoSconto.valore = s.valore
                #daoSconto.tipo_sconto = s.tipo_sconto
                #scontiRigaDocumento.append(daoSconto)
            daoRiga.scontiRigaDocumento = scontiRigaDocumento
            righeDocumento.append(daoRiga)

        newDao.righeDocumento = righeDocumento

        tipoid = findStrFromCombobox(self.operazione_combobox,0)
        #tipo = Operazione().getRecord(id=tipoid)
        #if not newDao.numero:
        valori = numeroRegistroGet(tipo=tipoid, date=self.daoTse.data_inserimento)
        newDao.numero = valori[0]
        newDao.registro_numerazione= valori[1]
        newDao.persist()

        res = TestataDocumento().getRecord(id=newDao.id)

        msg = "Documento creato da scontrino !\n\nIl nuovo documento e' il n. " + str(res.numero) + " del " + dateToString(res.data_documento) + " (" + newDao.operazione + ")\n" + "Lo vuoi modificare?"
        if YesNoDialog(msg=msg, transient=self.getTopLevel()):
            from promogest.ui.anagDocumenti.AnagraficaDocumenti import AnagraficaDocumenti
            anag = AnagraficaDocumenti()
            anagWindow = anag.getTopLevel()
            anagWindow.show_all()
            anag.editElement.setVisible(True)
            anag.editElement.setDao(newDao)
            anag.editElement.id_persona_giuridica_customcombobox.set_sensitive(True)
            anag.editElement.setFocus()
        self.destroy()
Ejemplo n.º 2
0
def do_genera_fatture_provvigioni(tipo_data, data_da, data_a, data_doc, progress=None):
    '''
    '''

    # definisco gli articoli da escludere
    articoli_esclusi = r"(.*)(sacchi|trasporto|contributo energetico|riempimento|commissioni|cappucci|europalette|big bag|commissione quantit)(.*)"

    documenti = []

    if tipo_data == TIPO_DATA_DOC:
        documenti = TestataDocumento().select(complexFilter=(and_(TestataDocumento.operazione=='DDT vendita diretto',
                TestataDocumento.data_documento.between(data_da, data_a))),
            batchSize=None,
            orderBy=TestataDocumento.id_fornitore)
    if tipo_data == TIPO_DATA_SPED:
        documenti = TestataDocumento().select(complexFilter=(and_(TestataDocumento.operazione=='DDT vendita diretto',
                TestataDocumento.fine_trasporto.between(data_da, data_a))),
            batchSize=None,
            orderBy=TestataDocumento.id_fornitore)

    if not documenti:
        messageInfo(msg="Non sono stati trovati documenti utili a completare l'operazione.")
    else:
        forn_totaledoc_dict = {}
        forn_provv_file = file(os.path.join(tempDir, 'riepilogo_provv.csv'), 'w')
        forn_provv_file.write('docNum;fornitore;cliente;articolo;totaleRiga;qta;tipo_provv;valore_provv;provv_articolo\n')
        for doc in documenti:
            if progress:
                pbar(progress, parziale=documenti.index(doc), totale=len(documenti), text="Elaborazione documenti...", noeta=False)
            totaleProvvDoc = Decimal(0)
            for riga in doc.righe:
                if riga.id_articolo is None or leggiArticolo(riga.id_articolo)['denominazione'] == '':
                    continue
                if re.match(articoli_esclusi, leggiArticolo(riga.id_articolo)['denominazione'], flags=re.IGNORECASE):
                    continue
                if Decimal(riga.totaleRiga) == Decimal(0) or Decimal(riga.quantita) == Decimal(0):
                    continue
                p = ProvvPgAzArt().select(id_persona_giuridica_to=doc.id_fornitore,
                                          id_persona_giuridica_from=doc.id_cliente,
                                          id_articolo=riga.id_articolo, batchSize=None)
                if p:
                    if p[0].provv.tipo_provv == "%":
                        provv_row = riga.totaleRiga * p[0].provv.valore_provv / 100
                    else:
                        provv_row = riga.quantita * p[0].provv.valore_provv
                    forn_provv_file.write("%s;%s;%s;%s;%s;%s;%s;%s;%s\n" % (doc.numero,
                        leggiFornitore(doc.id_fornitore)['ragioneSociale'],
                        leggiCliente(doc.id_cliente)['ragioneSociale'],
                        leggiArticolo(riga.id_articolo)['denominazione'],
                        mN(riga.totaleRiga, 2),
                        riga.quantita,
                        p[0].provv.tipo_provv,
                        mN(p[0].provv.valore_provv, 2),
                        mN(provv_row, 2)))
                    if doc.id_fornitore not in forn_totaledoc_dict:
                        forn_totaledoc_dict[doc.id_fornitore] = provv_row
                    else:
                        forn_totaledoc_dict[doc.id_fornitore] += provv_row
                else:
                    q = ProvvPgAzArt().select(id_persona_giuridica_to=doc.id_fornitore,
                                              id_persona_giuridica_from=doc.id_cliente,
                                              id_articolo=None, batchSize=None)
                    if q:
                        if q[0].provv.tipo_provv == "%":
                            provv_row = riga.totaleRiga * q[0].provv.valore_provv / 100
                        else:
                            provv_row = riga.quantita * q[0].provv.valore_provv
                        forn_provv_file.write("%s;%s;%s;%s;%s;%s;%s;%s;%s\n" % (doc.numero,
                            leggiFornitore(doc.id_fornitore)['ragioneSociale'],
                            leggiCliente(doc.id_cliente)['ragioneSociale'],
                            leggiArticolo(riga.id_articolo)['denominazione'],
                            mN(riga.totaleRiga, 2),
                            riga.quantita,
                            q[0].provv.tipo_provv,
                            mN(q[0].provv.valore_provv, 2),
                            mN(provv_row, 2)))
                        if doc.id_fornitore not in forn_totaledoc_dict:
                            forn_totaledoc_dict[doc.id_fornitore] = provv_row
                        else:
                            forn_totaledoc_dict[doc.id_fornitore] += provv_row

        forn_provv_file.close()

        operazione = "Fattura vendita"

        DESCR_RIGA = """Come convenuto Vi addebitiamo per nostre provvigioni su Vostre
forniture effettuate nel mese di %s l'importo di



FUORI CAMPO IVA ARTICOLO 7 ter D.P.R. 633/72""" % data_da.strftime('%B %Y')

        i = 0
        flag = False
        for k in forn_totaledoc_dict:

            if pbar:
                pbar(progress, parziale=i, totale=len(forn_totaledoc_dict), text="Creazione fatture...", noeta=False)

            forn = Fornitore().getRecord(id=k)
            if forn.ragione_sociale:
                cli = Cliente().select(ragioneSociale=forn.ragione_sociale, batchSize=None)

            if not cli and forn.cognome and forn.nome:
                cli = Cliente().select(cognomeNome=forn.cognome + ' ' + forn.nome, batchSize=None)

            if not cli:
                flag = True
                continue

            td = TestataDocumento()
            td.data_documento = data_doc
            td.operazione = operazione
            td.id_cliente = cli[0].id
            daoRiga = RigaDocumento()
            daoRiga.posizione = 0
            daoRiga.descrizione = DESCR_RIGA
            daoRiga.quantita = 1.0
            daoRiga.percentuale_iva = 0
            daoRiga.valore_unitario_lordo = forn_totaledoc_dict[k]
            daoRiga.moltiplicatore = 1
            daoRiga.valore_unitario_netto = forn_totaledoc_dict[k]
            daoRiga.scontiRigaDocumento = []
            td.righeDocumento = [daoRiga]
            td.persist()

            i += 1

        if progress:
            pbar(progress, stop=True)
        if flag:
            messageWarning(msg="Non è stato possibile creare alcune fatture!")
        messageInfo(msg="Operazione completata, sono state create %d nuove fatture." % i)
Ejemplo n.º 3
0
    def on_importa_json_button_clicked(self, button):
        a = """{"data":"2013-11-18 17:54:52",
        "promogest_id":590,
        "utente":"RUDOLF DISTRIBUZIONE CAGLIARI",
        "email":"*****@*****.**",
         "prodotti":{"RUDSYLVIASan4645":{"qty":"5","price":"7.50"},
         "RUDSYLVIASan81045":{"qty":"5","price":"7.50"},
         "RUDSYLVIASan121445":{"qty":"5","price":"7.50"},
         "RUDPAQUITABLO8-1045":{"qty":"3","price":"9.50"}}
         }"""
        text_buffer = self.importa_json_textview.get_buffer()
        note = text_buffer.get_text(text_buffer.get_start_iter(),
                                            text_buffer.get_end_iter(), True)
        print "NOTE", note
        try:
            dati = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(note)
        except:
            print "ERRORE DATI DELLA TEXTVIEW NON JSON"
            messageError("ERRORE DATI NELLA TEXTVIEW NON JSON")
            return
        print type(dati["prodotti"]), dati["utente"]
        #data_ordine = dati["data"] # datetime.datetime.now()'Jun 1 2005  1:33PM'
        data_ordine = datetime.strptime(dati["data"], '%Y-%m-%d %H:%M:%S')
        daoCliente = Cliente().getRecord(id=int(dati["promogest_id"]))

        pricelist = Listino().select(id=daoCliente.id_listino)
        newDao = TestataDocumento()
        newDao.data_documento = data_ordine
        newDao.data_inserimento = data_ordine
        newDao.operazione = "Ordine da cliente"
        newDao.id_cliente = daoCliente.id
        newDao.id_fornitore = None
        if daoCliente.dm:
            newDao.id_destinazione_merce = daoCliente.dm[0].id
        else:
            newDao.id_destinazione_merce = None
        #if tipoPagamento != "checked": #contrassegno
            #newDao.id_pagamento = 4
        #else:
            #newDao.id_pagamento = 5
        newDao.id_banca = None
        newDao.id_aliquota_iva_esenzione = None
        newDao.protocollo = ""
        newDao.causale_trasporto = ""
        newDao.aspetto_esteriore_beni = ""
        newDao.inizio_trasporto = None
        newDao.fine_trasporto = None
        newDao.id_vettore = None
        newDao.incaricato_trasporto = None
        newDao.totale_colli = None
        newDao.totale_peso = None
        newDao.note_interne = "Ordine da WEB"
        newDao.note_pie_pagina = ""
        newDao.applicazione_sconti = "scalare"
        righeDocumento=[]
        totale = 0
        #print " LORO ORDINE", OrderedDict(dati["prodotti"]).items()
        for k,v in OrderedDict(dati["prodotti"]).items():
            #print " ERRREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", k,v,int(dati["prodotti"].items().index((k,v)))+1
            quantita = int(v["qty"])
            prezzo = float(v["price"])
            art = Articolo().select(codiceEM=k)
            if art:
                idArticolo = art[0].id
            else:
                raise "non trovo l'articolo nel db"
            #prezzo = leggiListino(pricelist[0].id, idArticolo, tiny=True)["prezzoIngrosso"]
            articolo = leggiArticolo(idArticolo)
            daoRiga = RigaDocumento()
            daoRiga.id_testata_documento = newDao.id
            daoRiga.id_articolo = idArticolo
            daoRiga.id_magazzino = 3
            daoRiga.descrizione = articolo["denominazione"]
            daoRiga.id_iva = articolo["idAliquotaIva"]
            daoRiga.id_listino = pricelist[0].id
            daoRiga.valore_unitario_lordo = prezzo
            daoRiga.valore_unitario_netto = prezzo
            daoRiga.percentuale_iva = articolo["percentualeAliquotaIva"]
            daoRiga.applicazione_sconti = []
            daoRiga.quantita = quantita
            daoRiga.id_multiplo = None
            daoRiga.moltiplicatore = 1
            daoRiga.posizione =  int(dati["prodotti"].items().index((k,v)))+1
            daoRiga.scontiRigaDocumento = []
            righeDocumento.append(daoRiga)
            parziale = float(quantita) * float(leggiListino(pricelist[0].id, idArticolo, tiny=True)["prezzoDettaglio"])
            totale += parziale
        newDao.righeDocumento = righeDocumento
        newDao.totale_pagato = None
        newDao.totale_sospeso = None
        newDao.documento_saldato = False
        newDao.id_primo_riferimento = None
        newDao.id_secondo_riferimento = None
        tipo = "Ordine da cliente"
        valori = numeroRegistroGet(tipo=tipo, date=data_ordine)
        newDao.numero = valori[0]
        newDao.registro_numerazione= valori[1]
        if len(righeDocumento) > 0:
            newDao.persist()
            messageInfo(msg="ORDINE INSERITO")
            self.destroy()
Ejemplo n.º 4
0
    def on_confirm_button_clicked(self, button=None):

        if (self.data_documento_entry.get_text() == ''):
            obligatoryField(self.getTopLevel(), self.data_documento_entry)

        if (findIdFromCombobox(self.id_operazione_combobox) is None):
            obligatoryField(self.getTopLevel(), self.id_operazione_combobox)
        if self.note_check.get_active():
            note = "Rif. " + self.dao.operazione + " n. " + str(self.dao.numero) + " del " + dateToString(self.dao.data_documento)
        else:
            note = ""

        mantieni_pagamenti = self.mantieni_pagamenti_checkbutton.get_active()
        associa_doc_padre_figlio = self.associa_doc_padre_figlio_checkbutton.get_active()

        newDao = TestataDocumento()
        newDao.data_documento = stringToDate(self.data_documento_entry.get_text())
        newDao.operazione = findIdFromCombobox(self.id_operazione_combobox)
        if self.personaGiuridicaCambiata:
            if not self.id_persona_giuridica_customcombobox.getId():
                obligatoryField(self.getTopLevel(), self.id_persona_giuridica_customcombobox)
            if self.id_persona_giuridica_customcombobox.getType() == "cliente":
                newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
                newDao.id_fornitore = None
            else:
                newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
                newDao.id_cliente = None
        else:
            if not self.id_persona_giuridica_customcombobox.getId():
                newDao.id_fornitore = self.dao.id_fornitore
                newDao.id_cliente = self.dao.id_cliente
            else:
                if self.id_persona_giuridica_customcombobox.getType() == "cliente":
                    newDao.id_cliente = self.id_persona_giuridica_customcombobox.getId()
                    newDao.id_fornitore = None
                else:
                    newDao.id_fornitore = self.id_persona_giuridica_customcombobox.getId()
                    newDao.id_cliente = None

        newDao.id_destinazione_merce = self.dao.id_destinazione_merce
        newDao.id_pagamento = self.dao.id_pagamento
        newDao.id_banca = self.dao.id_banca
        newDao.numero = self.dao.numero
        newDao.id_aliquota_iva_esenzione = self.dao.id_aliquota_iva_esenzione
        newDao.protocollo = self.dao.protocollo
        newDao.causale_trasporto = self.dao.causale_trasporto
        newDao.aspetto_esteriore_beni = self.dao.aspetto_esteriore_beni
        newDao.inizio_trasporto = self.dao.inizio_trasporto
        newDao.fine_trasporto = self.dao.fine_trasporto
        newDao.id_vettore =self.dao.id_vettore
        newDao.incaricato_trasporto = self.dao.incaricato_trasporto
        newDao.totale_colli = self.dao.totale_colli
        newDao.totale_peso = self.dao.totale_peso
        newDao.note_interne = self.dao.note_interne
        newDao.note_pie_pagina = self.dao.note_pie_pagina + " " + note
        newDao.applicazione_sconti = self.dao.applicazione_sconti
        newDao.ripartire_importo = self.dao.ripartire_importo
        newDao.costo_da_ripartire = self.dao.costo_da_ripartire

        tipoid = findIdFromCombobox(self.id_operazione_combobox)
        tipo = Operazione().getRecord(id=tipoid)
        #if not newDao.numero:
        valori = numeroRegistroGet(tipo=tipo.denominazione, date=stringToDate(self.data_documento_entry.get_text()))
        newDao.numero = valori[0]
        newDao.registro_numerazione= valori[1]


        #sconti = []
        sco = self.dao.sconti or []
        scontiRigaDocumento=[]
        scontiSuTotale=[]
        righeDocumento=[]
        for s in sco:
            daoSconto = ScontoTestataDocumento()
            daoSconto.valore = s.valore
            daoSconto.tipo_sconto = s.tipo_sconto
            scontiSuTotale.append(daoSconto)
        newDao.scontiSuTotale = scontiSuTotale
        #righe = []
        rig = self.dao.righe

        #operazione = leggiOperazione(tipo)
        if tipo.segno != '' and tipo.segno is not None:
            tipoDOC = "MOV"
        else:
            tipoDOC = "DOC"

        scontiRigaMovimento =[]
        scontiRigaDocumento =[]
        for r in rig:

            if (tipoDOC == "MOV" and r.id_articolo == None) or tipoDOC == "DOC":
                daoRiga = RigaDocumento()
                sconti = []
                sco = r.sconti
                if self.mantieni_sconti_checkbutton.get_active() :
                    for s in sco:
                        daoSconto = ScontoRigaDocumento()
                        daoSconto.valore = s.valore
                        daoSconto.tipo_sconto = s.tipo_sconto
                        scontiRigaDocumento.append(daoSconto)
                daoRiga.scontiRigaDocumento = scontiRigaDocumento
                scontiRigaDocumento =[]
            else:
                daoRiga = RigaMovimento()
                sconti =[]
                sco = r.sconti
                if self.mantieni_sconti_checkbutton.get_active() :
                    for s in sco:
                        daoSconto = ScontoRigaMovimento()
                        daoSconto.valore = s.valore
                        daoSconto.tipo_sconto = s.tipo_sconto
                        scontiRigaMovimento.append(daoSconto)
                daoRiga.scontiRigheMovimento = scontiRigaMovimento
                scontiRigaMovimento =[]

            #daoRiga.id_testata_documento = newDao.id
            daoRiga.id_articolo = r.id_articolo
            if self.id_magazzino_combobox.get_active() != -1 and r.id_magazzino !=None:
                iddi = findIdFromCombobox(self.id_magazzino_combobox)
                daoRiga.id_magazzino = iddi
            else:
                daoRiga.id_magazzino = r.id_magazzino
            daoRiga.descrizione = r.descrizione
            # Copia il campo iva
            daoRiga.id_iva = r.id_iva
            #ricalcola prezzi
            indice_prezzo_combobox = self.id_prezzo_combobox.get_model()[self.id_prezzo_combobox.get_active()][1]
            if  indice_prezzo_combobox == 0:
              daoRiga.id_listino = r.id_listino
              daoRiga.valore_unitario_lordo = r.valore_unitario_lordo or 0
              daoRiga.valore_unitario_netto = r.valore_unitario_netto or 0
            elif indice_prezzo_combobox == 1:
              daoRiga.id_listino = r.id_listino
              daoRiga.valore_unitario_lordo = 0
              daoRiga.valore_unitario_netto = 0
            elif indice_prezzo_combobox == 2:
              fornitura = Environment.params['session'].query(Fornitura).filter(Fornitura.id_articolo == r.id_articolo).order_by(Fornitura.data_prezzo.asc()).all()
              if fornitura:
                fornitura = fornitura[0]
                daoRiga.valore_unitario_lordo = fornitura.prezzo_lordo
                daoRiga.valore_unitario_netto = fornitura.prezzo_netto
              daoRiga.id_listino = r.id_listino

            else:
              #ricalcola prezzi
              listino = self.id_prezzo_combobox.get_model()[indice_prezzo_combobox][0]
              listinoArticolo = Environment.params['session'].query(ListinoArticolo).filter(ListinoArticolo.id_listino == listino.id and r.id_articolo == ListinoArticolo.id_articolo).all()
              if len(listinoArticolo) > 0:
                daoRiga.id_listino = listinoArticolo[0].id_listino
                daoRiga.valore_unitario_lordo = listinoArticolo[0].prezzo_dettaglio
                daoRiga.valore_unitario_netto = listinoArticolo[0].prezzo_ingrosso
              else:
                daoRiga.id_listino = r.id_listino
                daoRiga.valore_unitario_lordo = r.valore_unitario_lordo
                daoRiga.valore_unitario_netto = r.valore_unitario_netto

            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
            if posso("SM"):
                from promogest.modules.SuMisura.dao.MisuraPezzo import MisuraPezzo
                #try:
                daoMisuraPezzo = MisuraPezzo()
                if r.misura_pezzo:
                    daoMisuraPezzo.altezza = r.misura_pezzo[0].altezza
                    daoMisuraPezzo.larghezza = r.misura_pezzo[0].larghezza
                    daoMisuraPezzo.moltiplicatore = r.misura_pezzo[0].moltiplicatore
                else:
                    daoMisuraPezzo.altezza = 0
                    daoMisuraPezzo.larghezza = 0
                    daoMisuraPezzo.moltiplicatore = 0
                daoRiga.misura_pezzo = [daoMisuraPezzo]
                #except :
                    #pass

            righeDocumento.append(daoRiga)
        #return
        newDao.righeDocumento = righeDocumento
        scadenze = []

        if mantieni_pagamenti:
            scad = self.dao.scadenze
            for s in scad:
                daoTestataDocumentoScadenza = TestataDocumentoScadenza()
                daoTestataDocumentoScadenza.id_testata_documento = newDao.id
                daoTestataDocumentoScadenza.data = s.data
                daoTestataDocumentoScadenza.importo = s.importo
                daoTestataDocumentoScadenza.pagamento = s.pagamento
                daoTestataDocumentoScadenza.id_banca = s.id_banca
                daoTestataDocumentoScadenza.data_pagamento= s.data_pagamento
                daoTestataDocumentoScadenza.note_per_primanota = s.note_per_primanota
                daoTestataDocumentoScadenza.numero_scadenza = s.numero_scadenza
                scadenze.append(daoTestataDocumentoScadenza)
            newDao.scadenze = scadenze
            newDao.totale_pagato = 0
            newDao.totale_sospeso = 0
            newDao.documento_saldato = False
            #newDao.id_primo_riferimento = self.dao.id_primo_riferimento
            #newDao.id_secondo_riferimento = self.dao.id_secondo_riferimento
        else:
            newDao.totale_pagato = Decimal(0)
            newDao.totale_sospeso = self.dao._totaleScontato
            newDao.documento_saldato = False

        newDao.persist()

        if associa_doc_padre_figlio:
            add_relazione(self.dao.id, newDao.id)

        if posso("GN"):
            if self.dao.data_inizio_noleggio or self.dao.data_fine_noleggio:

                from promogest.modules.GestioneNoleggio.dao.TestataGestioneNoleggio import TestataGestioneNoleggio
                newTestataGestioneNoleggio = TestataGestioneNoleggio()
                newTestataGestioneNoleggio.data_inizio_noleggio = self.dao.data_inizio_noleggio
                newTestataGestioneNoleggio.data_fine_noleggio = self.dao.data_fine_noleggio
                newTestataGestioneNoleggio.id_testata_documento = newDao.id
                newTestataGestioneNoleggio.persist()

        #se il segno dell'operazione non è cambiato duplico il documento, altrimenti duplico ma apro la finestra di new/modifica documento

        msg = "Nuovo documento creato !\n\nIl nuovo documento e' il n. " + str(newDao.numero) + " del " + dateToString(newDao.data_documento) + " (" + newDao.operazione + ")\n" + "Lo vuoi modificare?"
        if YesNoDialog(msg=msg, transient=self.getTopLevel()):
          self.anagrafica_documenti.editElement.setVisible(True)
          self.anagrafica_documenti.editElement.setDao(newDao)
          self.anagrafica_documenti.editElement.id_persona_giuridica_customcombobox.set_sensitive(True)
          self.anagrafica_documenti.editElement.setFocus()

        self.destroy()
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.")