/[lohnrechner]/trunk/lohnrechner2007.py
ViewVC logotype

Contents of /trunk/lohnrechner2007.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 24 - (show annotations)
Mon Jan 17 14:30:00 2005 UTC (20 years, 3 months ago) by wilde
Original Path: trunk/RCS/lohnrechner.py
File MIME type: text/x-python
File size: 7072 byte(s)
Bugfix: Es ist jetzt immer ein Land selektiert (quick and dirty)

1 #! /usr/bin/python
2 # -*- coding: iso-8859-1 -*-
3 # --------------------------------------------------------------------
4 # Lohnsteuer und Sozialabgaben Rechner
5 # $Id$
6 # --------------------------------------------------------------------
7 #
8 # Copyright (c) 2005 by Intevation GmbH
9 # Authors:
10 # Sascha Wilde <[email protected]>
11 #
12 # This program is free software under the GPL (>=v2)
13 # Read the file COPYING coming with this package for details.
14
15 """Lohn/Gehaltsrechner für das Jahr 2005"""
16
17 __version__ = "$Revision$"
18 # $Source$
19
20 _release_version = "0.%s beta" % __version__[11:-2]
21
22 import LST2005
23 from Tkinter import *
24
25 class Lohnrechner(LST2005.LStRechner2005):
26
27 def __init__(self, root):
28 LST2005.LStRechner2005.__init__(self)
29
30 # Land, Kirchensteuersatz
31 self.laender = [("Baden-Württemberg", 8),
32 ("Bayern", 8),
33 ("Berlin", 9),
34 ("Brandenburg", 9),
35 ("Bremen", 9),
36 ("Bremerhaven", 9),
37 ("Hamburg", 9),
38 ("Hessen", 9),
39 ("Mecklenburg-Vorpommern", 9),
40 ("Niedersachsen" ,9),
41 ("Nordrhein-Westfalen", 9),
42 ("Rheinland-Pfalz", 9),
43 ("Saarland", 9),
44 ("Sachsen", 9),
45 ("Sachsen-Anhalt", 9),
46 ("Schleswig-Holstein", 9),
47 ("Thüringen", 9)]
48
49 root.title("Lohnrechner 2005 - v%s" % _release_version)
50 root.resizable(NO, NO)
51 self.root = root
52
53 frame = Frame(root)
54 frame.grid(padx=10, pady=10)
55
56 Label(frame, text="Lohn:").grid(row=0, sticky=E)
57 self.lohn = Entry(frame)
58 self.lohn.bind("<Return>", self.NewInput)
59 self.lohn.grid(row=0, column=1, sticky=W)
60
61 Label(frame, text="Steuerklasse:").grid(row=1, sticky=E)
62 self.stkl = IntVar()
63 stklframe = Frame(frame)
64 stklframe.grid(row=1, column=1, sticky=W)
65 for text, val in [("I", 1),
66 ("II", 2),
67 ("III", 3),
68 ("IV", 4),
69 ("V", 5),
70 ("VI", 6)]:
71 stklradio = Radiobutton(stklframe, text=text, value=val,
72 indicatoron=0, command=self.CalcOutput,
73 variable=self.stkl)
74 if text == "I":
75 stklradio.select()
76 stklradio.pack(side=LEFT)
77
78 Label(frame, text="Kirchensteuer:").grid(row=2, sticky=E)
79 self.kirche = IntVar()
80 kircheradio = Checkbutton(frame, onvalue=1, offvalue=0,
81 command=self.CalcOutput,
82 variable=self.kirche).grid(row=2, column=1, sticky=W)
83
84 Label(frame, text="Kinderfreibetrag:").grid(row=3, sticky=E)
85 self.kfb = Entry(frame)
86 self.kfb.bind("<Return>", self.NewInput)
87 self.kfb.grid(row=3, column=1, sticky=W)
88
89 Label(frame, text="Bundesland:").grid(row=4, sticky=E)
90 landframe = Frame(frame)
91 scrollbar = Scrollbar(landframe, orient=VERTICAL)
92 self.landbox = Listbox(landframe, height=4, selectmode=SINGLE,
93 yscrollcommand=scrollbar.set)
94 for land in self.laender:
95 self.landbox.insert(END, land[0])
96 self.landbox.bind("<<ListboxSelect>>", self.NewLandSel)
97 self.landbox.select_set(0)
98 self.landbox.pack(side=RIGHT, fill=Y)
99 scrollbar.config(command=self.landbox.yview)
100 scrollbar.pack(side=LEFT, fill=BOTH, expand=1)
101 landframe.grid(row=4, column=1, sticky=W)
102 self.NewLandSel()
103
104 self.ResetInput()
105
106 Label(frame, text="Lohnsteuer:").grid(row=0, column=2, sticky=E)
107 self.lst = Entry(frame)
108 self.lst.grid(row=0, column=3, sticky=W)
109
110 Label(frame, text="Solidaritätszuschlag:").grid(row=1, column=2, sticky=E)
111 self.soli = Entry(frame)
112 self.soli.grid(row=1, column=3, sticky=W)
113
114 Label(frame, text="Kirchensteuer:").grid(row=2, column=2, sticky=E)
115 self.kist = Entry(frame)
116 self.kist.grid(row=2, column=3, sticky=W)
117
118 buttons = Frame(frame)
119 buttons.grid(row=4, column=2, columnspan=2)
120 Button(buttons, text="Quit", command=root.quit).pack(side=LEFT)
121 Button(buttons, text="Info", command=self.Info).pack(side=LEFT)
122 Button(buttons, text="Berechnen", command=self.CalcOutput).pack(side=LEFT)
123
124 self.CalcOutput()
125
126 def NewInput(self, event):
127 # Es ist möglich alle Einträge in der Listbox zu deselektieren,
128 # es ist aber immer genau ein Eintrag aktuell, darum wird er ggf.
129 # zwangsselektiert:
130 # FIX ME: eigendlich wäre das ein Fall für ein custom widget!
131 if len(self.landbox.curselection()) == 0:
132 self.landbox.select_set(self.land)
133 self.CalcOutput()
134
135 def NewLandSel(self, event=0):
136 self.land = int(self.landbox.curselection()[0])
137
138 def ResetInput(self):
139 self.ResetInputLohn()
140 self.ResetInputKfb()
141
142 def ResetInputLohn(self):
143 self.lohn.delete(0, END)
144 self.lohn.insert(0, "0")
145
146 def ResetInputKfb(self):
147 self.kfb.delete(0, END)
148 self.kfb.insert(0, "0")
149
150 def InitCalc(self):
151 try:
152 self.SetLohn(float(self.lohn.get()))
153 except:
154 self.ResetInputLohn()
155
156 try:
157 self.SetKinderfreibetrag(float(self.kfb.get()))
158 except:
159 self.ResetInputKfb()
160
161 self.SetSteuerklasse(self.stkl.get())
162 self.SetKirchensteuer(self.kirche.get() *
163 self.laender[self.land][1])
164
165 def CalcOutput(self):
166 self.InitCalc()
167 self.Calc()
168 self.lst.delete(0, END)
169 self.lst.insert(0, "%.2f" % self.GetLohnsteuer())
170 self.soli.delete(0, END)
171 self.soli.insert(0, "%.2f" % self.GetSoli())
172 self.kist.delete(0, END)
173 self.kist.insert(0, "%.2f" % self.GetKirchensteuer())
174
175 def Info(self):
176 infowin = Toplevel(self.root)
177 infowin.title("Info")
178 Label(infowin, text="Lohnrechner 2005 v%s" % _release_version,
179 font=("Times", 14, "bold italic")).grid(row=0, pady=20)
180 Label(infowin, text=
181 "Copyright (C) 2005 Intevation GmbH \n\n\
182 Lohnrechner 2005 comes with ABSOLUTELY NO WARRANTY.\n\
183 This is free software, and you are welcome to redistribute it\n\
184 under the terms of the GNU General Public License.\n\
185 For more information about these matters, see the file named COPYING.\n\n\
186 Dieses Programm verwendet LST2005 %s" % LST2005._ModulVersion()).grid(row=1, padx=10)
187 Button(infowin, text="Ok", command=infowin.destroy).grid(row=2, pady=10)
188
189
190 if __name__ == "__main__":
191 root = Tk()
192 lr = Lohnrechner(root)
193 root.mainloop()
194

Properties

Name Value
svn:eol-style native
svn:executable *
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26