Adiciona interface para Declaração.
[cascardo/irpf-gui.git] / src / menu.py
1 # coding=utf-8
2 #
3 #   Copyright 2013 Thadeu Lima de Souza Cascardo <cascardo@cascardo.info>
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (at your option) any later version.
9 #
10 #   This program is distributed in the hope that it will be useful,
11 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #   GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 # -*- mode: python; encoding: utf-8; -*-
18
19 import baseui
20 import contribuinte
21 import rendimentoPJ
22 import bens
23 import sys
24 import isentos
25 import exclusivos
26
27 def List(UI, L, display):
28     exit = False
29     while not exit:
30         ls = []
31         for i in L.items:
32             d = i.get_attr(display)
33             if d == None:
34                 d = ""
35             ls.append(d)
36         r = UI.list(ls)
37         if r[1] == None:
38             exit = True
39         elif r[1] == 'add':
40             UI.form(L.form(L.new_item()))
41         elif r[1] == 'edit':
42             UI.form(L.form(L.items[r[0] - 1]))
43         elif r[1] == 'delete':
44             L.remove_item(r[0] - 1)
45     return True
46
47 def RendimentosPJ(UI, contrib):
48     rend = rendimentoPJ.RendimentosPJ(contrib)
49     return List(UI, rend, "nomeFontePagadora")
50
51 def Declaracao(UI, contrib):
52     UI.form(contrib.declaracoes.form(contrib.declaracao))
53     return True
54
55 def DadosPessoais(UI, contrib):
56     UI.form(contrib.form())
57     return True
58
59 def Bens(UI, contrib):
60     b = bens.Bens(contrib)
61     return List(UI, b, "discriminacao")
62
63 def Quadro(UI, quadro):
64     return List(UI, quadro, "especificacao")
65
66 def Quadros(quadros):
67     def fQuadros(UI, contrib):
68         exit = False
69         while not exit:
70             r = UI.menu(map(lambda x: x.name, quadros.quadros))
71             if r < 0:
72                 exit = True
73             else:
74                 Quadro(UI, quadros.quadros[r])
75     return fQuadros
76
77 def Salvar(UI, contrib):
78     contrib.save()
79
80 def menu(UI, contrib):
81     m = [ 
82         "Sair",
83         "Salvar",
84         u"Declaração",
85         "Dados Pessoais",
86         "Rendimentos PJ",
87         "Bens",
88         "Rendimentos Isentos",
89         "Rendimentos Exclusivos na Fonte",
90         ]
91     f = [
92         None,
93         Salvar,
94         Declaracao,
95         DadosPessoais,
96         RendimentosPJ,
97         Bens,
98         Quadros(isentos.RendimentosIsentos(contrib)),
99         Quadros(exclusivos.RendimentosExclusivos(contrib)),
100         ]
101     exit = False
102     while not exit:
103         r = UI.menu(m)
104         if r <= 0:
105             exit = True
106         else:
107             f[r](UI, contrib)
108
109 def main():
110     ret = False
111     UI = baseui.BaseUI()
112     while ret == False:
113         cpf = UI.get_string("Digite seu CPF: ")
114         try:
115             contrib = contribuinte.Contribuinte(cpf)
116             ret = menu(UI, contrib)
117         except RuntimeError, e:
118             print "CPF invalido"
119
120 if __name__ == '__main__':
121     main()
122
123 # vim:tabstop=4:expandtab:smartindent