home · contact · privacy
Refactor all accounting scripts.
[misc] / income_progress_bars.py
index 94a34569c70909a290c82ad21eb6bba8cf8a6196..553627d3788f2f44a0be3fa605453e021f79ac27 100644 (file)
@@ -1,13 +1,12 @@
-# from http.server import BaseHTTPRequestHandler, HTTPServer
 import os
 import json
 import jinja2
 from plomlib import PlomDB, PlomException, run_server, run_server, PlomServer
 
-server_port = 8081
+server_port = 8083
+db_path = '/home/plom/org/income.json'
 
-tmpl = jinja2.Template("""<html>
-<meta charset="UTF-8">
+tmpl = """
 <style>
 body {
   font-family: monospace;
@@ -78,20 +77,20 @@ table {
 </style>
 <body>
 <table>
-<tr><th /><th>earned</th><th>progress</th><th>surplus</th></tr >
-{% for p in progress_bars %}
-<tr><th>{{p.title}}</th>
+<tr><th></th><th>earned</th><th>progress</th><th>surplus</th></tr >
+{% for p in progress_bars %}<tr><th>{{p.title}}</th>
 <td class="countable">{{p.earned|round(2)}}</td>
-<td class="progressbar">{% if p.time_progress >= 0 %}<div class="time_progress" style="margin-left: {{p.time_progress}}px"></div>{% endif %}<div class="progress" style="background-color: {% if p.success < 0.5 %}red{% elif p.success < 1 %}yellow{% else %}green{% endif %}; width: {{p.success_income_cut}}"></div></td>
-<td class="progressbar surplusbar"><div class="diff_goal">{{p.diff_goal}}</div><div class="progressbar surplus" style="width: {{p.success_income_bonus}}" /></div></td></tr>
-{% endfor %}
-</table>
+<td class="progressbar">{% if p.time_progress >= 0 %}<div class="time_progress" style="margin-left: {{p.time_progress}}px"></div>{% endif %}<div class="progress" style="background-color: {% if p.success < 0.5 %}red{% elif p.success < 1 %}yellow{% else %}green{% endif %}; width: {{p.success_income_cut}}px"></div></td>
+<td class="progressbar surplusbar"><div class="diff_goal">{{p.diff_goal}}</div><div class="progressbar surplus" style="width: {{p.success_income_bonus}}px" ></div></td></tr>
+{% endfor %}</table>
+
 <form action="/" method="POST">
 <table>
 <tr><th>hourly rate</th><th>worked today</th></tr>
 <tr><td class="input_container"><input type="number" min="1" class="rate" name="workday_hourly_rate_1" value="{{workday_hourly_rate_1}}"/>€</td><td><input type="number" min="0" class="minutes" name="workday_minutes_worked_1" value="{{workday_minutes_worked_1}}" step="5" /> minutes</td>
 <tr><td class="input_container"><input type="number" min="1" class="rate" name="workday_hourly_rate_2" value="{{workday_hourly_rate_2}}"/>€</td><td><input type="number" min="0" class="minutes" name="workday_minutes_worked_2" value="{{workday_minutes_worked_2}}" step="5" /> minutes</td>
 <tr><td class="input_container"><input type="number" min="1" class="rate" name="workday_hourly_rate_3" value="{{workday_hourly_rate_3}}"/>€</td><td><input type="number" min="0" class="minutes" name="workday_minutes_worked_3" value="{{workday_minutes_worked_3}}" step="5" /> minutes</td>
+</table>
 <table>
 <tr><th>yearly income goal</th><td><input type="number" class="year_goal" min="1" name="year_goal" value="{{year_goal}}" />€</td></tr>
 <tr><th>monthly income goal</th><td class="countable">{{month_goal|round(2)}}€</td></tr>
@@ -103,8 +102,8 @@ table {
 <input type="submit" name="update" value="update inputs" />
 <input type="submit" name="finish" value="finish day" />
 </form>
-</body
-</html>""")
+"""
+
 
 class IncomeDB(PlomDB):
 
@@ -124,7 +123,7 @@ class IncomeDB(PlomDB):
         self.workday_minutes_worked_3 = 0,
         self.year_goal = 20000,
         self.workdays_per_month = 16
-        super().__init__('_income')
+        super().__init__(db_path)
 
     def read_db_file(self, f):
         d = json.load(f)
@@ -143,6 +142,7 @@ class IncomeDB(PlomDB):
     def write_db(self):
         self.write_text_to_db(json.dumps(self.to_dict()))
 
+
 class ProgressBar:
     def __init__(self, title, earned, goal, time_progress=-1):
         self.title = title
@@ -160,7 +160,7 @@ class ProgressBar:
             if time_progress > 0:
                 self.success = success_income / time_progress
 
-# class MyServer(BaseHTTPRequestHandler):
+
 class IncomeServer(PlomServer):
 
     def do_POST(self):
@@ -188,9 +188,7 @@ class IncomeServer(PlomServer):
                 db.workday_minutes_worked_2 = 0
                 db.workday_minutes_worked_3 = 0
             db.write_db()
-            self.send_response(302)
-            self.send_header('Location', '/')
-            self.end_headers()
+            self.redirect()
         except PlomException as e:
             self.fail_400(e) 
 
@@ -237,7 +235,7 @@ class IncomeServer(PlomServer):
                              ProgressBar("month", month_plus, month_goal, progress_time_month),
                              ProgressBar("week", week_plus, week_goal, progress_time_week),
                              ProgressBar("workday", day_income, workday_goal)]
-            page = tmpl.render(
+            page = jinja2.Template(tmpl).render(
                     progress_bars = progress_bars,
                     workday_hourly_rate_1 = db.workday_hourly_rate_1,
                     workday_minutes_worked_1 = db.workday_minutes_worked_1,
@@ -256,5 +254,6 @@ class IncomeServer(PlomServer):
         except PlomException as e:
             self.fail_400(e) 
 
+
 if __name__ == "__main__":       
     run_server(server_port, IncomeServer)