def insertComboboxSearchPersonaGiuridica(self, combobox, id, clear=False, filter=True):
     if self._type == 'cliente':
         res = leggiCliente(id)
     elif self._type == 'fornitore':
         res = leggiFornitore(id)
     denominazione = res["ragioneSociale"] or (res["nome"] + ' ' + res["cognome"])
     combobox.refresh(id, denominazione, res, clear, filter)
     self._container = res
            def refresh_entry(anagWindow):
                self._resultsCount = self._ricerca.getResultsCount()
                resultsElement = self._ricerca.getResultsElement()
                if not(self._resultsCount > 0):
                    self.set_active(0)
                    return

                if self._resultsCount == 1:
                    id = resultsElement.id
                    res = leggiFornitore(id)
                    denominazione = res["ragioneSociale"]
                    if denominazione == '':
                        denominazione = res["nome"] + ' ' + res["cognome"]
                    self.set_text(denominazione)
                    self._id = id
示例#3
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)
 def insertComboboxSearchFornitore(self, combobox, idFornitore, clear=False, filter=True):
     res = leggiFornitore(idFornitore)
     denominazione = res["ragioneSociale"]
     if denominazione == '':
         denominazione = res["nome"] + ' ' + res["cognome"]
     combobox.refresh(idFornitore, denominazione, res, clear, filter)