Warning: include_once(/home/favoledo/robertozanardo.com/wp-content/sunrise.php): Failed to open stream: No such file or directory in /home/favoledo/robertozanardo.com/wp-includes/ms-settings.php on line 52

Warning: include_once(): Failed opening '/home/favoledo/robertozanardo.com/wp-content/sunrise.php' for inclusion (include_path='.:/opt/alt/php83/usr/share/pear:/opt/alt/php83/usr/share/php:/usr/share/pear:/usr/share/php') in /home/favoledo/robertozanardo.com/wp-includes/ms-settings.php on line 52
Python: Esempio di codice uso classi e funzioni - Odoo e Soluzioni Open Source

Python: Esempio di codice uso classi e funzioni

Introduzione

Nel corso di un test per un cliente ho creato questo piccolo codice per leggere da un file csv, contenente delle date di fatturazione con relative condizioni di pagamento, di cui calcolare le corrette scadenze per alcuni casi.
E’ una problematica molto frequente nelle applicazioni gestionali, quindi calcolare i 30/60 giorni e così via.Calcolando anche il fine mese per alcune condizioni specifiche.

Ho pensato di pubblicarlo perchè contiene in poco codice diversi esempi di utilizzo delle funzioni, dei loop e soprattutto dell’utilizzo basico della programmazione a oggetti in python.

Il file csv

Il file csv si ipotizza sia nella stessa cartella di esecuzione del codice e contenga i dati in questo formato:

NrFattura;DataFattura;ModalitaDiPagamento
12440;01/01/2019;DF
12441;10/07/2019;DFFM
12442;19/02/2019;DF60
12443;21/12/2019;DF
12444;01/04/2019;DFFM
12445;12/04/2019;DF60
12446;25/04/2019;DFFM
12447;01/05/2019;DFFM
12448;22/06/2019;DF60

Il codice

# -*- coding: utf-8 -*-
from datetime import date, datetime, time, timedelta
from dateutil.relativedelta import relativedelta

#Definiamo la classe fatture
class Invoice():
    Number = 0
    Date = date.today()
    Modpag = ""

    def __init__(self, var1, var2, var3):
        self.Number = var1
        self.Date = var2
        self.Modpag = var3

#Prepariamo qualche utilità
class utils():

    def last_day_of_month(any_day):
        next_month = any_day.replace(day=28) + timedelta(days=4)
        return next_month - timedelta(days=next_month.day)

    def strToDatetime(strdate):
        return datetime.strptime(strdate, "%d/%m/%Y")

    def set_due_date(mode, invoice_date):
        due_date = utils.strToDatetime(invoice_date)
        if mode.strip() == "DFFM":
            due_date = utils.strToDatetime(invoice_date)  + timedelta(days=60)
            due_date = utils.last_day_of_month(due_date)
        elif mode.strip() == "DF60":
            due_date = utils.strToDatetime(invoice_date)  + timedelta(days=60)
        return due_date.strftime("%d/%m/%Y")

    def sort_and_calc(invoices):
        for inv in sorted(invoices, key=lambda date: utils.strToDatetime(date.Date)):
            due_date = utils.set_due_date(inv.Modpag,inv.Date)
            print ("DATA:%s  NUMERO:%s DATA CALCOLATA:%s PAGAMENTO:%s"%(str(inv.Date),str(inv.Number),due_date,str(inv.Modpag)))

def main():
    invoices = []
    c = 0
    """ Main """
    invoices_file = open('test_invoices.csv', 'r')
    line = invoices_file.readline()
    while line:
        c = c+1
        print(line)
        data = line.split(";")
        try:
            int(data[0]) #Verifichiamo sia una riga valida (Es.:Verificando il numero fattura sia valido)
            item = Invoice(data[0],data[1],data[2]) #Mettiamo i campi nella classe Invoice
            invoices.append(item) #Aggiungiamo alla lista di fatture
        except:
            print ("Riga non elaborata")
        line = invoices_file.readline()
    invoices_file.close()

    utils.sort_and_calc(invoices) #Eseguiamo l'ordinamento e il calcolo delle scadenze

if __name__ == "__main__":
    main()

Lascia un commento

kolaybet giriş
kolaybet
betgaranti
bettilt
kolaybet
betpark
betgaranti
betpark
betgaranti
kolaybet
kolaybet
betpark
betpark
hellocasino
betgaranti
Kolaybet
bettilt
betpark
betpark
Kolaybet
Kolaybet Giriş
Kolaybet
betpark
betpark
kolaybet
betpark
betgaranti
kolaybet giriş
kolaybet
Kolaybet Giriş
Kolaybet
Kolaybet Telegram
Kolaybet Giriş
betpark
betpark
holiganbet
Kolaybet
Kolaybet
Betgaranti
matbet güncel giriş
matbet güncel giriş
matbet güncel giriş
matbet güncel giriş
betgaranti
betgaranti
betgaranti
sahabet
sahabet
kolaybet
kolaybet
sahabet
Hititbet
Hititbet Giriş
sahabet
Hititbet Güncel Giriş
vdcasino
onwin
onwin
hititbet
betgaranti
Hellocasino
Hello Casino
Hititbet
Hititbet
Hititbet Güncel Giriş
hititbet
vdcasino
onwin
onwin
grandpashabet
betpark
betgaranti
hititbet
grandpashabet
bettilt
sahabet
sahabet
onwin
hititbet giriş
hititbet
hititbet giriş
hititbet mobil giriş
hititbet güncel giriş
vdcasino
grandpashabet
kolaybet
kolaybet
betpark
Kolaybet Giriş
Kolaybet Güncel Giriş
betgaranti
betgaranti giriş
betgaranti 2026
betpark
betgaranti
kuponbet giriş
kuponbet güncel giriş
Kuponbet
Kuponbet Giriş
Kuponbet Mobil Giriş
sahabet
sahabet
onwin
betpark
betgaranti
sahabet
sahabet
grandpashabet
onwin