commit b5fda6e33acaa6dc3c34098a917aa9f537c3b405
parent 9199ac087e25fe75d596d7d89acabd4685b922aa
Author: Carlosokumu <carlosokumu254@gmail.com>
Date: Sat, 7 Mar 2026 12:36:11 +0300
add ledger export functionality
Diffstat:
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)