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:
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_]