usawa

Signed, immutable accounting.
Info | Log | Files | Refs | Submodules | LICENSE

commit b5fda6e33acaa6dc3c34098a917aa9f537c3b405
parent 9199ac087e25fe75d596d7d89acabd4685b922aa
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Sat,  7 Mar 2026 12:36:11 +0300

add ledger export functionality

Diffstat:
Mdummy/usawa/gui/controllers/entry_controller.py | 31++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/dummy/usawa/gui/controllers/entry_controller.py b/dummy/usawa/gui/controllers/entry_controller.py @@ -8,12 +8,12 @@ logg = logging.getLogger("gui.entry_controller") class EntryController: - """Handles entry creation logic""" - def __init__(self,entry_service: EntryService): + + def __init__(self, entry_service: EntryService): self.entry_service = entry_service self._entry_created_listeners = [] - + def collect_entry_data(self, view) -> Optional[LedgerEntry]: """Collect data from the view and create an entry""" try: @@ -28,30 +28,28 @@ class EntryController: dest_type=view.get_dest_type(), dest_path=view.dest_path_entry.get_text().strip(), ) - + is_valid, error_msg = entry.validate() if not is_valid: logg.error(f"Validation failed: {error_msg}") - return None + return None return entry - + except ValueError as e: logg.error(f"Failed to collect entry data: {e}") return None - - + def finalize_entry(self, entry: LedgerEntry) -> tuple[bool, str]: logg.debug("Finalizing entry: %s", entry) success, error_msg = self.entry_service.save_entry(entry) - + if success: return True, "" else: return False, error_msg - + def get_all_entries(self): return self.entry_service.get_all_entries() - def add_entry_created_listener(self, callback): self._entry_created_listeners.append(callback) @@ -60,12 +58,16 @@ class EntryController: for callback in self._entry_created_listeners: callback() - def next_serial(self, entries: list | None = None) -> int: if entries is None: entries = self.get_all_entries() return len(entries) + 1 - def get_asset_bytes(self, digest: bytes) -> bytes: - return self.entry_service.get_asset_bytes(digest=digest) -\ No newline at end of file + return self.entry_service.get_asset_bytes(digest=digest) + + def export_ledger(self, output_path: str) -> tuple[bool, str]: + return self.entry_service.export_all_entries_to_xml(output_path) + + def export_entry(self, serial: int, output_path: str) -> tuple[bool, str]: + return self.entry_service.export_entry_to_xml(serial, output_path)