-.vscode
\ No newline at end of file
+.vscode
+__pycache__
+*.egg-info
\ No newline at end of file
+++ /dev/null
-# money
-
-python script I run on my phone to log my expenses.
--- /dev/null
+money
+=====
+
+python script I run on my phone to log my expenses.
+++ /dev/null
-from time import localtime, strftime
-from os.path import expanduser, join
-from pprint import pprint
-from decimal import *
-
-def file_output():
- home = expanduser('~')
- out_file_name = 'movimenti.dat'
- out_file = join(home, 'dati', out_file_name)
- return out_file
-
-def carica_file(f):
- dati = []
- with open(f, "r") as df:
- for l in df:
- spl = l.split(';')
- d = {
- 'valore' : spl[0],
- 'data' : spl[1],
- 'ora' : spl[2],
- 'descrizione' : spl[3]
- }
- dati.append(d)
- return dati
-
-print("bilancio 0.0.1")
-out_file = file_output()
-print('file:', out_file)
-dati = carica_file(out_file)
-val_attuale = Decimal('0')
-spese_tot = Decimal('0')
-guadagni_tot = Decimal('0')
-for d in dati:
- m = Decimal(d['valore'])
- val_attuale = val_attuale + m
- if m > Decimal('0'):
- guadagni_tot = guadagni_tot + m
- else:
- spese_tot = spese_tot + m
-print('valore attuale:', str(val_attuale))
-print('guadagni complessivi:', str(guadagni_tot))
-print('spese complessive:', str(spese_tot))
-print('grazie.')
-
+++ /dev/null
-from time import localtime, strftime
-from os.path import expanduser, join
-from pprint import pprint
-
-def leggi_tipo():
- t = 'n'
- while not (t == '' or t == '+' or t == '-'):
- t = input('tipo (+/-) [-]: ')
- if t == '':
- t='-'
- elif t == '+':
- t=''
- return t
-
-def leggi_valore():
- v = ''
- while v == '':
- v = input('valore (#####.##) []: ')
- return v
-
-def leggi_data():
- d = input('data (DD/MM/YYYY) [oggi]: ')
- if d == '':
- d = strftime("%d/%m/%Y", localtime())
- return d
-
-def leggi_ora():
- o = input('ora (HH:MM) [adesso]: ')
- if o == '':
- o = strftime('%H:%M', localtime())
- return o
-
-def leggi_descrizione():
- d = input('descrizione () []: ')
- return d
-
-def leggi_movimento():
- tipo = leggi_tipo()
- valore = leggi_valore()
- data = leggi_data()
- ora = leggi_ora()
- descrizione = leggi_descrizione()
- m = {
- 'tipo' : tipo,
- 'valore' : valore,
- 'data' : data,
- 'ora' : ora,
- 'descrizione': descrizione
- }
- return m
-
-def scrivi_movimento(path, m):
- with open(path, 'a') as f:
- f.write(m['tipo'] + m['valore'])
- f.write(';')
- f.write(m['data'])
- f.write(';')
- f.write(m['ora'])
- f.write(';')
- f.write(m['descrizione'])
- f.write('\n')
- return
-
-def file_output():
- home = expanduser('~')
- out_file_name = 'movimenti.dat'
- out_file = join(home, 'dati', out_file_name)
- return out_file
-
-print("money 0.0.1")
-out_file = file_output()
-print('file output:', out_file)
-m = leggi_movimento()
-scrivi_movimento(out_file, m)
-print('scritto:')
-pprint(m)
-print('grazie.')
-
--- /dev/null
+from time import localtime, gmtime, strftime, strptime
+from os.path import expanduser, join
+from pprint import pprint
+from decimal import *
+
+def scrivi_movimento(path, m):
+ with open(path, 'a') as f:
+ f.write(m['tipo'] + m['valore'])
+ f.write(';')
+ f.write(m['data'])
+ f.write(';')
+ f.write(m['ora'])
+ f.write(';')
+ f.write(m['descrizione'])
+ f.write('\n')
+ return
+
+def leggi_tipo():
+ t = 'n'
+ while not (t == '' or t == '+' or t == '-'):
+ t = input('tipo (+/-) [-]: ')
+ if t == '':
+ t='-'
+ elif t == '+':
+ t=''
+ return t
+
+def leggi_valore():
+ v = ''
+ while v == '':
+ v = input('valore (#####.##) []: ')
+ return v
+
+def leggi_data():
+ d = input('data (DD/MM/YYYY) [oggi]: ')
+ if d == '':
+ d = strftime("%d/%m/%Y", localtime())
+ return d
+
+def leggi_ora():
+ o = input('ora (HH:MM) [adesso]: ')
+ if o == '':
+ o = strftime('%H:%M', localtime())
+ return o
+
+def leggi_descrizione():
+ d = input('descrizione () []: ')
+ return d
+
+def leggi_movimento():
+ tipo = leggi_tipo()
+ valore = leggi_valore()
+ data = leggi_data()
+ ora = leggi_ora()
+ descrizione = leggi_descrizione()
+ m = {
+ 'tipo' : tipo,
+ 'valore' : valore,
+ 'data' : data,
+ 'ora' : ora,
+ 'descrizione': descrizione
+ }
+ return m
+
+def get_file_dati():
+ home = expanduser('~')
+ nome_file_dati = 'movimenti.dat'
+ file_dati = join(home, 'dati', nome_file_dati)
+ print('file dati:', file_dati)
+ return file_dati
+
+def carica_file(f):
+ dati = []
+ with open(f, "r") as df:
+ for l in df:
+ spl = l.split(';')
+ d = {
+ 'valore' : spl[0],
+ 'data' : spl[1],
+ 'ora' : spl[2],
+ 'descrizione' : spl[3]
+ }
+ dati.append(d)
+ return dati
+
+def inserimento(file_dati):
+ m = leggi_movimento()
+ scrivi_movimento(file_dati, m)
+
+def inserimento_dati():
+ file_dati = get_file_dati()
+ inserimento(file_dati)
+
+def riassunto_dati():
+ file_dati = get_file_dati()
+ riassunto(file_dati)
+
+def data_default(data):
+ try:
+ return strptime(data, '%d/%m/%Y')
+ except ValueError:
+ return gmtime(0)
+
+def ora_default(ora):
+ try:
+ return strptime(ora, '%H:%M')
+ except ValueError:
+ return gmtime(0)
+
+def ordina(dati):
+ return sorted(
+ dati,
+ key = lambda x: (
+ data_default(x['data']),
+ ora_default(x['ora'])
+ ),
+ reverse = True
+ )
+
+def riassunto(file_dati):
+ dati = carica_file(file_dati)
+ dati_ordinati = ordina(dati)
+ val_attuale = Decimal('0')
+ spese_tot = Decimal('0')
+ guadagni_tot = Decimal('0')
+ for d in dati:
+ m = Decimal(d['valore'])
+ val_attuale = val_attuale + m
+ if m > Decimal('0'):
+ guadagni_tot = guadagni_tot + m
+ else:
+ spese_tot = spese_tot + m
+ print('valore attuale:', str(val_attuale))
+ print('guadagni complessivi:', str(guadagni_tot))
+ print('spese complessive:', str(spese_tot))
+ print('ultimi 5 movimenti:')
+ for i in range(5):
+ if i < len(dati_ordinati):
+ print(dati_ordinati[i])
--- /dev/null
+import unittest
+from money import money
+
+class UselessTest(unittest.TestCase):
+
+ def test_passa_sempre(self):
+ self.assertTrue(True, msg='se fallisce son problemi')
+
+ def test_ordina_ore(self):
+ date = [
+ {
+ 'data' : '18/04/2017',
+ 'ora' : '00:01',
+ 'prog' : 1,
+ },
+ {
+ 'data' : '19/04/2017',
+ 'ora' : '00:01',
+ 'prog' : 2,
+ },
+ {
+ 'data' : '17/04/2017',
+ 'ora' : '',
+ 'prog' : 3,
+ },
+ {
+ 'data' : '',
+ 'ora' : '00:01',
+ 'prog' : 4,
+ },
+ ]
+ res = money.ordina(date)
+ self.assertEqual(res[0]['prog'], 2)
+ self.assertEqual(res[1]['prog'], 1)
+ self.assertEqual(res[2]['prog'], 3)
+ self.assertEqual(res[3]['prog'], 4)
+
+def main():
+ unittest.main()
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+# shell.sh
+
+docker run -it --rm -v $(pwd):/money -w /money python:3 /bin/bash
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+# tests.sh
+
+docker run -it --rm -v $(pwd):/money -w /money python:3 python3 -m unittest -v
\ No newline at end of file
--- /dev/null
+from setuptools import setup, find_packages
+from codecs import open
+from os import path
+
+here = path.abspath(path.dirname(__file__))
+
+with open(path.join(here, 'README.rst'), encoding = 'utf-8') as f:
+ long_description = f.read()
+
+setup(
+ name = 'money',
+ version = '0.0.1',
+ description = 'gestisce spese e entrate',
+ long_description = long_description,
+ url = 'https://github.com/scompo/money',
+ author = 'Mauro Scomparin',
+ author_email = 'scompo@gmail.com',
+ license = 'BSD',
+ packages=find_packages(exclude=['contrib', 'docs', 'tests', 'utils', 'scripts']),
+ entry_points={
+ 'console_scripts' : [
+ 'inserisci=money.money:inserimento_dati',
+ 'riassunto=money.money:riassunto_dati',
+ ],
+ },
+)
\ No newline at end of file