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 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()