home · contact · privacy
Improve accounting scripts.
[misc] / ledger.py
index 958852aa56b0e747c1c2ad36f78f0d054f255310..d8b504a74398ce18315a4430b345ac7a1eaf417a 100755 (executable)
--- a/ledger.py
+++ b/ledger.py
@@ -4,6 +4,7 @@ from datetime import datetime, timedelta
 from urllib.parse import parse_qs, urlparse
 from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader 
 from plomlib import PlomDB, PlomException, run_server, PlomHandler 
+from os.path import split as path_split
 
 db_path = '/home/plom/org/ledger2024.dat'
 server_port = 8082
@@ -468,6 +469,7 @@ class LedgerDB(PlomDB):
         date_today = str(datetime.now())[:10]
         if copy:
             content.date = date_today 
+            index = -1
         elif -1 == index and (content is None or [] == content):
             content = Booking(date=date_today, validate=False)
         if 'textarea' == edit_mode and content:
@@ -476,7 +478,13 @@ class LedgerDB(PlomDB):
             for booking in self.bookings:
                 for transfer_line in booking.transfer_lines:
                     accounts.add(transfer_line.account)
-        return j2env.get_template('edit.html').render(content=content, index=index, error_msg=error_msg, edit_mode=edit_mode, accounts=accounts, adding=(copy or -1 == index))
+        return j2env.get_template('edit.html').render(
+                content=content,
+                index=index,
+                error_msg=error_msg,
+                edit_mode=edit_mode,
+                accounts=accounts,
+                adding=-1 == index)
 
     def move_up(self, index):
         return self.move(index, -1) 
@@ -519,14 +527,15 @@ class LedgerHandler(PlomHandler):
         db = LedgerDB(prefix, ignore_editable_exceptions=True)
         index = 0
         parsed_url = urlparse(self.path)
+        site = path_split(parsed_url.path)[1]
         for string in {'update', 'add', 'check', 'mirror', 'fill_sink', 'textarea', 'table', 'move_up', 'move_down', 'add_taxes', 'replace'}:
             if string in postvars.keys():
                 submit_button = string
                 break
-        if f'{prefix}/ledger' == parsed_url.path and submit_button in {'move_up', 'move_down'}:
+        if 'ledger' == site and submit_button in {'move_up', 'move_down'}:
             mover = getattr(db, submit_button)
             index = mover(int(postvars[submit_button][0]))
-        elif prefix + '/edit' == parsed_url.path:
+        elif 'edit' == site:
             index = int(postvars['index'][0])
             edit_mode = postvars['edit_mode'][0]
             validate = submit_button in {'update', 'add', 'copy', 'check'}
@@ -542,7 +551,6 @@ class LedgerHandler(PlomHandler):
                 booking = Booking.from_postvars(postvars, starts_at, validate)
             if submit_button in {'update', 'add'}:
                 if submit_button == 'update':
-                    # if 'textarea' == edit_mode and 'delete' == ''.join([l.text_line for l in lines]).strip():
                     if 'textarea' == edit_mode and delete:
                        del db.bookings[index]
                     # if not creating new Booking, and date unchanged, keep it in place 
@@ -571,7 +579,7 @@ class LedgerHandler(PlomHandler):
                 return
         db.write_db() 
         index = index if index >= 0 else len(db.bookings) - 1
-        self.redirect(prefix + f'/ledger#{index}')
+        self.redirect('ledger#{index}')
 
     def do_GET(self):
         self.try_do(self.forward_gets)
@@ -588,11 +596,12 @@ class LedgerHandler(PlomHandler):
             self.send_HTML(page)
             return
         parsed_url = urlparse(self.path)
+        site = path_split(parsed_url.path)[1]
         params = parse_qs(parsed_url.query)
-        if parsed_url.path == f'{prefix}/balance':
+        if site == 'balance':
             stop = params.get('until_after', [None])[0]
             page = db.balance_as_html(stop)
-        elif parsed_url.path == f'{prefix}/edit':
+        elif site == 'edit':
             index = params.get('i', [-1])[0]
             copy = params.get('copy', [0])[0]
             page = db.edit(int(index), copy=bool(copy))