예제 #1
0
def dati_file_conad_terron(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

        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': '0',
                    'codice_cliente': str(codice),
                    'data_bolla':  ddt.data_documento,
                    'numero_bolla': str(ddt.numero),
                    'data_fattura': testata.data_documento,
                    'numero_fattura': str(testata.numero),
                },
                'dettaglio': []
                }
                for riga in ddt.righe:
                    if riga.id_articolo:
                        art = leggiArticolo(riga.id_articolo)
                        unitaBase = 'NR' if str(art["unitaBase"]).upper() == 'N' else str(art["unitaBase"]).upper()
                        dati['dettaglio'].append(
                            {
                                'numero_progressivo':'0',
                                'codice_articolo': str(art["codice"]),
                                'descrizione': str(art["denominazione"].replace("à", "a")),
                                'unita_misura': unitaBase,
                                'qta_fatturata': str(mN(Decimal(riga.quantita * (riga.moltiplicatore or 1)), 2)),
                                'prezzo_unitario': str(mN(Decimal(riga.valore_unitario_netto), 3)),
                                'aliquota_iva': str(mN(riga.percentuale_iva,0))
                            })
                dati2.append(dati)
            return dati2
예제 #2
0
    def refresh(self):
        # Aggiornamento TreeView
        idArticolo = self.id_articolo_filter_customcombobox1.getId()
        if idArticolo is None:
            self._treeViewModel.clear()
            messageInfo(transient=self._visualizzazione.getTopLevel(), msg='Selezionare un articolo !')
            return

        idListino = findIdFromCombobox(self.id_listino_filter_combobox1)
        daDataListino = stringToDate(self.da_data_listino_filter_entry.get_text())
        aDataListino = stringToDate(self.a_data_listino_filter_entry.get_text())

        self.numRecords = ListinoArticolo().count(idArticolo=idArticolo,
                                                            idListino=idListino,
                                                            listinoAttuale=None,
#                                                            daDataListino =daDataListino,
#                                                            aDataListino=aDataListino
                                                            )

        self._refreshPageCount()

        liss = ListinoArticolo().select(orderBy=self.orderBy,
                                                    idArticolo=idArticolo,
                                                    idListino=idListino,
                                                    listinoAttuale=None,
#                                                    daDataListino=daDataListino,
#                                                    aDataListino=aDataListino,
                                                    offset = self.offset,
                                                    batchSize = self.batchSize)


        self._treeViewModel.clear()

        for l in liss:
            przDet = mN(l.prezzo_dettaglio or 0)
            przIngr = mN(l.prezzo_ingrosso or 0)
            ricDett = '%-6.3f' % calcolaRicarico(float(l.ultimo_costo or 0),
                                                 float(l.prezzo_dettaglio or 0),
                                                 float(l.percentuale_iva or 0))
            margDett = '%-6.3f' % calcolaMargine(float(l.ultimo_costo or 0),
                                                 float(l.prezzo_dettaglio or 0),
                                                 float(l.percentuale_iva or 0))
            ricIngr = '%-6.3f' % calcolaRicarico(float(l.ultimo_costo or 0),
                                                 float(l.prezzo_ingrosso or 0))
            margIngr = '%-6.3f' % calcolaMargine(float(l.ultimo_costo or 0),
                                                 float(l.prezzo_ingrosso or 0))

            self._treeViewModel.append((l,
                                        (l.denominazione or ''),
                                        dateToString(l.data_listino),
                                        przDet, ricDett, margDett,
                                        przIngr, ricIngr, margIngr,
                                        (l.ultimo_costo or 0)))
    def on_aggiorna_button_clicked(self, widget):
        # Alcuni controlli sull'input
        if self.periodo_checkbutton.get_active() and \
            (self.inizio_periodo_date.get_text() == '' or \
            self.fine_periodo_date.get_text() == ''):
                messageWarning('Inserire una data valida')
                return

        model = self.scadenzario_treeview.get_model()
        model.clear()

        if self.periodo_checkbutton.get_active():
            # Mostra le scadenze nel periodo
            tds = TestataDocumentoScadenza().select(orderBy=TestataDocumentoScadenza.data,
                    complexFilter=(and_(TestataDocumentoScadenza.data_pagamento==None,
                                        TestataDocumentoScadenza.data.between(stringToDateTime(self.inizio_periodo_date.get_text()),
                                                                              stringToDateTime(self.fine_periodo_date.get_text())))))
        else:
            # Mostra le prossime scadenze
            tds = TestataDocumentoScadenza().select(orderBy=TestataDocumentoScadenza.data,
                        complexFilter=(and_(TestataDocumentoScadenza.data_pagamento==None,
                                            TestataDocumentoScadenza.data>=datetime.now())))
        tipo_doc = ''
        for t in tds:
            doc = TestataDocumento().getRecord(id=t.id_testata_documento)
            if doc.operazione not in Environment.hapag:
                continue
            if doc.documento_saldato:
                continue
            if doc.id_fornitore and self.da_pagare:
                tipo_doc = 'A'
            if doc.id_cliente and self.da_incassare:
                tipo_doc = 'V'
            model.append([None, "%s" % dateToString(t.data),
                              "%s" % doc.intestatario,
                              tipo_doc,
                              "%s" % doc.numero, # numero documento
                              "€ %s" % mN(t.importo, 2), # importo
                              "", # descrizione
                              t.pagamento])
예제 #4
0
    def refresh(self):
        # Aggiornamento TreeView
        denominazione = prepareFilterString(self.denominazione_filter_entry.get_text())
        pagamento = Pagamento()
        def filterCountClosure():
            return pagamento.count(denominazione=denominazione)

        self._filterCountClosure = filterCountClosure

        self.numRecords = self.countFilterResults()

        self._refreshPageCount()

        # Let's save the current search as a closure
        def filterClosure(offset, batchSize):
            return pagamento.select(orderBy=self.orderBy,
                                denominazione=denominazione,
                                offset=offset,
                                batchSize=batchSize)

        self._filterClosure = filterClosure

        pagamenti = self.runFilter()

        self._treeViewModel.clear()

        for p in pagamenti:
            self._treeViewModel.append((p,
                                        (p.denominazione or ''),
                                        (p.tipo or ''),
                                        str(mN(p.spese, 2)),
                                        str(p.aliquota_iva),
                                        (p.codice or '')
                                        ))

        self._anagrafica.anagrafica_filter_treeview.set_model(self._treeViewModel)
예제 #5
0
    def analizza(self, data_inizio=None, data_fine=None, pageData=None):
        if not data_inizio:
            messageError(msg='Inserire una data d\'inizio periodo.')
            return 0
        if not data_fine:
            data_inizio_, data_fine = dataInizioFineMese(data_inizio)

        documenti = TestataDocumento().select(complexFilter=(and_(or_(TestataDocumento.operazione=='Fattura differita vendita', TestataDocumento.operazione=='Fattura accompagnatoria'), TestataDocumento.data_documento.between(data_inizio, data_fine))), batchSize=None)

        if not documenti:
            messageInfo(msg="Nessun risultato.")
            return 0

        righe = []

        buff = self.recordIB()

        i = 0
        totale_importi = Decimal(0)

        for documento in documenti:

            if self.progressbar:
                pbar(self.progressbar, parziale=i, totale=len(documenti))

            ope = leggiOperazione(documento.operazione)
            if ope:
                if ope['tipoPersonaGiuridica'] != 'cliente':
                    continue

            banca = None
            if documento.id_banca:
                banca = leggiBanca(documento.id_banca)
            else:
                continue

            cli = leggiCliente(documento.id_cliente)
            cli_ente = Cliente().getRecord(id=documento.id_cliente)
            cod_fisc_piva = ''
            if cli_ente:
                cod_fisc_piva = cli_ente.codice_fiscale or cli_ente.partita_iva
            else:
                cod_fisc_piva = documento.codice_fiscale_cliente
            debitore = Debitore(cod_fisc_piva, banca['abi'], banca['cab'])
            debitore.descrizione[0] = ''
            if cli['ragioneSociale']:
                debitore.descrizione[0] = cli['ragioneSociale']
            else:
                debitore.descrizione[0] = cli['cognome'] + ' ' + cli['nome']
            debitore.indirizzo = documento.indirizzo_cliente
            debitore.CAP = documento.cap_cliente
            debitore.provincia = documento.provincia_cliente
            debitore.comune = documento.localita_cliente

            for scadenza in documento.scadenze:
                if pagamentoLookup(scadenza.pagamento):

                    row = "%s N. %s a %s del %s \nImporto: %s data scadenza: %s" % (documento.operazione,
                                                     documento.numero,
                                                     documento.intestatario,
                                                     dateToString(documento.data_documento),
                                                     # scadenza.pagamento,
                                                     mN(scadenza.importo, 2),
                                                     dateToString(scadenza.data)
                                                     )

                    progressivo = i + 1
                    totale_importi += scadenza.importo
                    buff += self.record14(progressivo, scadenza.data, scadenza.importo, debitore)
                    buff += self.record20(progressivo)
                    buff += self.record30(progressivo, debitore)
                    buff += self.record40(progressivo, debitore)
                    buff += self.record50(progressivo, debitore, row.replace('\n', ''))
                    buff += self.record51(progressivo, progressivo)
                    buff += self.record70(progressivo)

                    riga = {
                        'destinatario': debitore.descrizione[0],
                        'indirizzo': debitore.indirizzo,
                        'CAP': debitore.CAP,
                        'comune': debitore.comune,
                        'provincia': debitore.provincia,
                        'cod_fisc_piva': cod_fisc_piva,
                        'banca_abi': banca['abi'],
                        'banca_cab': banca['cab'],
                        'importo': scadenza.importo,
                        'data_scadenza': scadenza.data,
                        'rif_debito': row
                    }
                    righe.append(riga)

                    i = i + 1

        buff += self.recordEF(i, totale_importi)

        pageData['righe'] = righe
        pageData['totale_importi'] = totale_importi
        pageData['disposizioni'] = i

        if self.progressbar:
            pbar(self.progressbar, stop=True)

        self._buffer = buff
예제 #6
0
def dati_file_buffetti(testata):
    """
    """
    #from promogest.dao.TestataDocumento import TestataDocumento
    from promogest.dao.Azienda import Azienda
    if testata:
        azienda = Azienda().getRecord(id=Environment.azienda)
        if not azienda:
            messageError('nessuna informazione azienda')
            return None

        if azienda.ragione_sociale == '':
            messageError('nessuna ragione sociale impostata')
            return None

        scadenze = testata.scadenze
        dati_generazione_scadenze = 'S'
        if len(scadenze) == 0:
            dati_generazione_scadenze = 'N'

        if testata.operazione == 'Fattura Accompagnatoria':
            tipo_documento = 'A'
        elif 'Fattura Differita' in testata.operazione:
            tipo_documento = 'D'
        elif 'Fattura' in testata.operazione:
            tipo_documento = 'F'

        tipo_registro = 'F'

        totale_fattura = mN(testata._totaleScontato + testata._totaleSpese, 2)

        if testata.id_fornitore is not None:
            tipo_nominativo = 'F'
            cognome_cli_for = testata.cognome_fornitore or ''
            nome_cli_for = testata.nome_fornitore or ''
            codice_fiscale_cli_for = testata.codice_fiscale_fornitore
            partita_iva_cli_for = testata.partita_iva_fornitore
            indirizzo_cli_for = testata.indirizzo_fornitore
            localita_cli_for = testata.localita_fornitore
            cap_cli_for = testata.cap_fornitore
            provincia_cli_for = testata.provincia_fornitore
            codice_cli_for = testata.codice_fornitore
        elif testata.id_cliente is not None:
            tipo_nominativo = 'C'
            cognome_cli_for = testata.cognome_cliente or ''
            nome_cli_for = testata.nome_cliente or ''
            codice_fiscale_cli_for = testata.codice_fiscale_cliente
            partita_iva_cli_for = testata.partita_iva_cliente
            indirizzo_cli_for = testata.indirizzo_cliente
            localita_cli_for = testata.localita_cliente
            cap_cli_for = testata.cap_cliente
            provincia_cli_for = testata.provincia_cliente
            codice_cli_for = testata.codice_cliente

        dati = [{
            'testata': {
                'ragione_sociale_ditta': azienda.ragione_sociale,
                'cod_fisc_piva_ditta': azienda.codice_fiscale or azienda.partita_iva,
                'dati_generazione_scadenze': dati_generazione_scadenze,
                'tipo_piano': '2',
                'da_data': testata.data_documento,
                'a_data': testata.data_documento,
                'no_data': ''
            },
            'scadenze':{},
            'testata_pagamento': [{
                'codice': '0', #inseire il codice con cui identifichiamo il tipo di pagamento (es. ID RIba 30 gg)
                'numero_rate': str(len(scadenze)),
                'descrizione': testata.pagamento,
                'tipo': '1',
                'determinazione_tipo': '31',
                'numero_rate': '1',
                'giorni_prima': '30' # recuperare il numero di giorni dal pagamento
            }],
            'fine_scadenza': {},
            'record0': [{
                'tipo_nominativo': tipo_nominativo,
                'cognome': cognome_cli_for,
                'nome': nome_cli_for,
                'codice_fiscale': codice_fiscale_cli_for,
                'partita_iva': partita_iva_cli_for,
                'indirizzo': indirizzo_cli_for,
                'localita': localita_cli_for,
                'cap': cap_cli_for,
                'provincia': provincia_cli_for,
                'incluso_elenchi_bl': 'N'
            }],
            'record1': [{
                'tipo_documento': tipo_documento,
                'totale_fattura': str(totale_fattura),
                'cf_piva': codice_fiscale_cli_for or partita_iva_cli_for,
                'codice': codice_cli_for,
                'tipo_registro': tipo_registro,
                'data_doc': testata.data_documento
            }],
            'record2': [{
                'imponibile_iva': str(mN(testata._totaleImponibileScontato)),
                'importo_iva': str(mN(testata._totaleImpostaScontata)),
            }],
            'recordB': [{
                'posizione': 'A' # controllare scadenze.data_pagamento se None mettere A, altrimenti P (pagato)
            }],
        }]

        # for scadenza in testata.scadenze:
            # dati['dettaglio_rate'].append({
                # 'numero_rata': testata.scadenze.index(scadenza) + 1
            # })

        return dati