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

Diff of /trunk/lohnrechner.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 18 by wilde, Thu Jan 13 16:59:53 2005 UTC revision 29 by wilde, Mon Jan 31 08:55:33 2005 UTC
# Line 1  Line 1 
1  #! /usr/bin/python  #! /usr/bin/python
2    # -*- coding: iso-8859-1 -*-
3  # --------------------------------------------------------------------  # --------------------------------------------------------------------
4  # Lohnsteuer und Sozialabgaben Rechner  # Lohnsteuer und Sozialabgaben Rechner
5  # $Id$  # $Id$
# Line 16  Line 17 
17  __version__ = "$Revision$"  __version__ = "$Revision$"
18  # $Source$  # $Source$
19                    
20  _release_version = "0.%s alpha" % __version__[11:-2]  _release_version = "0.%s beta" % __version__[11:-2]
21    
22  import LST2005  import LST2005
23  from Tkinter import *  from Tkinter import *
# Line 26  class Lohnrechner(LST2005.LStRechner2005 Line 27  class Lohnrechner(LST2005.LStRechner2005
27      def __init__(self, root):      def __init__(self, root):
28          LST2005.LStRechner2005.__init__(self)          LST2005.LStRechner2005.__init__(self)
29    
30          root.title("Lohnrechner 2005 - v%s" % _release_version)          # Land, Kirchensteuersatz
31          root.resizable(NO, NO)          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          self.root = root          self.root = root
50    
51          Label(root, text="Lohn:").grid(row=0, sticky=E)          self.root.title("Lohnrechner 2005 - v%s" % _release_version)
52          self.lohn = Entry(root)  
53            self.SetupUI()
54            self.ResetInput()
55    
56        def SetupUI(self):
57            self.root.resizable(NO, NO)
58    
59            frame = Frame(root)
60            frame.grid(padx=10, pady=10)
61    
62            # Steuern Ein/Ausgabe
63            Label(frame, text="Lohn:").grid(row=0, sticky=E)
64            self.lohn = Entry(frame)
65          self.lohn.bind("<Return>", self.NewInput)          self.lohn.bind("<Return>", self.NewInput)
66          self.lohn.grid(row=0, column=1, sticky=W)          self.lohn.grid(row=0, column=1, sticky=W)
67    
68          Label(root, text="Steuerklasse:").grid(row=1, sticky=E)          Label(frame, text="Steuerklasse:").grid(row=1, sticky=E)
69          self.stkl = StringVar()          self.stkl = IntVar()
70          stklframe = Frame(root)          stklframe = Frame(frame)
71          stklframe.grid(row=1, column=1, sticky=W)          stklframe.grid(row=1, column=1, sticky=W)
72          for text, val in [("I", "1"),          for text, val in [("I", 1),
73                            ("II", "2"),                            ("II", 2),
74                            ("III", "3"),                            ("III", 3),
75                            ("IV", "4"),                            ("IV", 4),
76                            ("V", "5"),                            ("V", 5),
77                            ("VI", "6")]:                            ("VI", 6)]:
78              stklradio = Radiobutton(stklframe, text=text, value=val,              stklradio = Radiobutton(stklframe, text=text, value=val,
79                                      indicatoron=0, command=self.CalcOutput,                                      indicatoron=0, command=self.NewInput,
80                                      variable=self.stkl)                                      variable=self.stkl)
81              if text == "I":              if text == "I":
82                  stklradio.select()                  stklradio.select()
83              stklradio.pack(side=LEFT)              stklradio.pack(side=LEFT)
84    
85          Label(root, text="Kirchensteuer (%):").grid(row=2, sticky=E)          Label(frame, text="Kirchensteuer:").grid(row=2, sticky=E)
86          self.kirche = StringVar()          self.kirche = IntVar()
87          kircheframe = Frame(root)          kircheradio = Checkbutton(frame, onvalue=1, offvalue=0,
88          kircheframe.grid(row=2, column=1, sticky=W)                                    command=self.NewInput,
89          for text, val in [("keine", "0"),                                    variable=self.kirche).grid(row=2, column=1,
90                            ("8 %", "8"),                                                               sticky=W)
91                            ("9 %", "9")]:  
92              kircheradio = Radiobutton(kircheframe, text=text, value=val,          Label(frame, text="Kinderfreibetrag:").grid(row=3, sticky=E)
93                                      indicatoron=0, command=self.CalcOutput,          self.kfb = Entry(frame)
94                                      variable=self.kirche)          self.kfb.bind("<Return>", self.NewInput)
95              if val == "0":          self.kfb.grid(row=3, column=1, sticky=W)
96                  kircheradio.select()  
97              kircheradio.pack(side=LEFT)          Label(frame, text="Bundesland:").grid(row=4, sticky=E)
98            landframe = Frame(frame)
99          self.ResetInput()          scrollbar = Scrollbar(landframe, orient=VERTICAL)
100            self.landbox = Listbox(landframe, height=4, selectmode=SINGLE,
101          Label(root, text="Lohnsteuer:").grid(row=0, column=2, sticky=E)                                 yscrollcommand=scrollbar.set)
102          self.lst = Entry(root)          for land in self.laender:
103                self.landbox.insert(END, land[0])
104            self.landbox.select_set(0)
105            self.landbox.bind("<<ListboxSelect>>", self.NewLandSel)
106            self.landbox.pack(side=RIGHT, fill=Y)
107            scrollbar.config(command=self.landbox.yview)
108            scrollbar.pack(side=LEFT, fill=BOTH, expand=1)
109            landframe.grid(row=4, column=1, sticky=W)
110            
111            Label(frame, text="Lohnsteuer:").grid(row=0, column=2, sticky=E)
112            self.lst = Entry(frame)
113          self.lst.grid(row=0, column=3, sticky=W)          self.lst.grid(row=0, column=3, sticky=W)
114    
115          Label(root, text="Solidarit�tszuschlag:").grid(row=1, column=2, sticky=E)          Label(frame, text="Solidarit�tszuschlag:").grid(row=1, column=2, sticky=E)
116          self.soli = Entry(root)          self.soli = Entry(frame)
117          self.soli.grid(row=1, column=3, sticky=W)          self.soli.grid(row=1, column=3, sticky=W)
118    
119          Label(root, text="Kirchensteuer:").grid(row=2, column=2, sticky=E)          Label(frame, text="Kirchensteuer:").grid(row=2, column=2, sticky=E)
120          self.kist = Entry(root)          self.kist = Entry(frame)
121          self.kist.grid(row=2, column=3, sticky=W)          self.kist.grid(row=2, column=3, sticky=W)
122    
123          buttons = Frame()          Label(frame, text="Lohn nach Steuern:").grid(row=3, column=2, sticky=E)
124          buttons.grid(row=3, columnspan=4)          self.netto = Entry(frame)
125            self.netto.grid(row=3, column=3, sticky=W)
126    
127            # Allgemeine UI Elemente
128            buttons = Frame(frame)
129            buttons.grid(row=4, column=2, columnspan=2)
130          Button(buttons, text="Quit", command=root.quit).pack(side=LEFT)          Button(buttons, text="Quit", command=root.quit).pack(side=LEFT)
131          Button(buttons, text="Info", command=self.Info).pack(side=LEFT)          Button(buttons, text="Info", command=self.Info).pack(side=LEFT)
132          Button(buttons, text="Berechnen", command=self.CalcOutput).pack(side=LEFT)          Button(buttons, text="Berechnen", command=self.CalcOutput).pack(side=LEFT)
133            
134        def NewInput(self, event=0):
135            # Es ist m�glich alle Eintr�ge in der Listbox zu deselektieren,
136            # es ist aber immer genau ein Eintrag aktuell, darum wird er ggf.
137            # zwangsselektiert:
138            # FIX ME: eigendlich w�re das ein Fall f�r ein custom widget!
139            if len(self.landbox.curselection()) == 0:
140                self.landbox.select_set(self.land)            
141          self.CalcOutput()          self.CalcOutput()
142    
143      def NewInput(self, event):      def UpdateLand(self):
144            self.land = int(self.landbox.curselection()[0])
145    
146        def NewLandSel(self, event=0):
147            self.UpdateLand()
148          self.CalcOutput()          self.CalcOutput()
149    
150      def ResetInput(self):      def ResetInput(self):
151          self.ResetInputLohn()          self.ResetInputLohn()
152            self.ResetInputKfb()
153            self.NewLandSel()
154    
155      def ResetInputLohn(self):      def ResetInputLohn(self):
156          self.lohn.delete(0, END)          self.lohn.delete(0, END)
157          self.lohn.insert(0, "0")          self.lohn.insert(0, "0")
158    
159        def ResetInputKfb(self):
160            self.kfb.delete(0, END)
161            self.kfb.insert(0, "0")
162    
163      def InitCalc(self):      def InitCalc(self):
164          try:          try:
165              self.SetLohn(float(self.lohn.get()))              self.SetLohn(float(self.lohn.get()))
166          except:          except:
167              self.ResetInputLohn()              self.ResetInputLohn()
168    
169          self.SetSteuerklasse(int(self.stkl.get()))          try:
170          self.SetKirchensteuer(int(self.kirche.get()))              self.SetKinderfreibetrag(float(self.kfb.get()))
171            except:
172                self.ResetInputKfb()
173    
174            self.SetSteuerklasse(self.stkl.get())
175            self.SetKirchensteuerProzent(self.kirche.get() *
176                                         self.laender[self.land][1])
177    
178      def CalcOutput(self):      def CalcOutput(self):
179          self.InitCalc()          self.InitCalc()
180          self.Calc()          self.Calc()
181          self.lst.delete(0, END)          self.lst.delete(0, END)
182          self.lst.insert(0, "%.2f" % self.GetLohnsteuer())                  self.lst.insert(0, "%.2f" % self.GetLohnsteuer())
183          self.soli.delete(0, END)          self.soli.delete(0, END)
184          self.soli.insert(0, "%.2f" % self.GetSoli())                  self.soli.insert(0, "%.2f" % self.GetSoli())
185          self.kist.delete(0, END)          self.kist.delete(0, END)
186          self.kist.insert(0, "%.2f" % self.GetKirchensteuer())                  self.kist.insert(0, "%.2f" % self.GetKirchensteuer())
187            self.netto.delete(0, END)
188            self.netto.insert(0, "%.2f" %
189                              (self.GetLohn() - self.GetLohnsteuer()
190                               - self.GetSoli() - self.GetKirchensteuer()))
191    
192      def Info(self):      def Info(self):
193          infowin = Toplevel(self.root)          infowin = Toplevel(self.root)
# Line 136  if __name__ == "__main__": Line 208  if __name__ == "__main__":
208      root = Tk()      root = Tk()
209      lr = Lohnrechner(root)      lr = Lohnrechner(root)
210      root.mainloop()      root.mainloop()
   

Legend:
Removed from v.18  
changed lines
  Added in v.29

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26