From: Christian Heller <c.heller@plomlompom.de>
Date: Thu, 13 Mar 2025 10:11:27 +0000 (+0100)
Subject: Add "add new Booking" button.
X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/%7B%7Bdb.prefix%7D%7D/static/templates?a=commitdiff_plain;h=70f8562ba1bd36ee023a92a92007a128f4ce7529;p=ledgplom

Add "add new Booking" button.
---

diff --git a/src/run.py b/src/run.py
index 92a136f..825d4a7 100755
--- a/src/run.py
+++ b/src/run.py
@@ -456,13 +456,16 @@ class Handler(PlomHttpHandler):
 
     def post_ledger_action(self) -> Path:
         """Based on trigger postvar call .server.(move|copy)_booking."""
-        keys_prefixed = self.postvars.keys_prefixed(PREFIX_LEDGER)
-        action, id_str, dir_ = keys_prefixed[0].split('_', maxsplit=3)[1:]
-        id_ = int(id_str)
-        if action == 'move':
-            id_ = self.server.move_booking(id_, dir_ == 'up')
-            return Path(self.path).joinpath(f'#{id_}')
-        id_ = self.server.copy_booking(id_, dir_ == 'to_end')
+        if 'add_booking' in self.postvars.as_dict:
+            id_ = self.server.add_empty_booking()
+        else:
+            keys_prefixed = self.postvars.keys_prefixed(PREFIX_LEDGER)
+            action, id_str, dir_ = keys_prefixed[0].split('_', maxsplit=3)[1:]
+            id_ = int(id_str)
+            if action == 'move':
+                id_ = self.server.move_booking(id_, dir_ == 'up')
+                return Path(self.path).joinpath(f'#{id_}')
+            id_ = self.server.copy_booking(id_, dir_ == 'to_end')
         return Path(EDIT_STRUCT).joinpath(f'{id_}')
 
     def do_GET(self) -> None:
@@ -718,6 +721,15 @@ class Server(PlomHttpServer):
         self._recalc_dat_lines()
         return new_booking.id_
 
+    def add_empty_booking(self) -> int:
+        """Add new Booking to end of ledger."""
+        booking = Booking(len(self.bookings),
+                          [DatLine(f'{dt_date.today().isoformat()} ?')])
+        self.bookings += [booking]
+        booking.recalc_prev_next(self.bookings)
+        self._recalc_dat_lines()
+        return booking.id_
+
     def copy_booking(self, id_: int, to_end: bool) -> int:
         """Add copy of Booking of id_ to_end of ledger, or after copied."""
         copied = self.bookings[id_]
diff --git a/src/templates/_macros.tmpl b/src/templates/_macros.tmpl
index f6495aa..fe783f7 100644
--- a/src/templates/_macros.tmpl
+++ b/src/templates/_macros.tmpl
@@ -93,6 +93,7 @@ table.ledger tr > td:first-child { background-color: white; }
   {% endif %}
 {% endfor %}
 </table>
+<input type="submit" name="add_booking" value="add Booking" />
 </form>
 {% endmacro %}