TODO: Fix: - When reloading view, lock main thread as the freeing might cause a crash Refactor: - Refactor zip writing to be faster Testing: - write tests for strops.hpp - write tests that check error handling for corrupt files. (e.g. references to tax rates, project and cost center that failed to load) Improvements: - "price includes tax" toggle that recalculates billing item tax, net and total Features: - Timeline for invoice modifications (e.g. edited, status changed, paid) - When creating a new openbooks file, user should only be able to set company info before anything else. - Show AI balance available in settings page - Handle invalid api key response from AI backends and display in settings UI - error log for tax report to display invoices not yet supported for tax generation or invoices with invalid tax rates - minimum invoice date for tax report generation, show warnings for unsupported invoices - create invoice PDF for NL https://goedestartbelastingdienst.nl/wiki/view/50bdccd8-f9a0-4297-b57f-3a6651cbe05c/factuureisen - toggle on invoice form wether price is inclusive of tax. - retrieve available balance from AI api & show in settings/services. - Send invoice by email - create invoice from image of receipt - create invoice from UBL file - read invoice from Holodeck instance - send invoice via Holodeck instance - View invoice history for contacts - View invoice history for projects - validate data within administration on save to make sure it is valid for transmissions. (e.g. rules of https://docs.peppol.eu/poacc/billing/3.0/syntax/ubl-invoice/cac-AccountingSupplierParty/cac-Party/cbc-EndpointID/) - View local business number / vat number naming on contact form. e.g. when country is austria: "Österreichische Umsatzsteuer-Identifikationsnummer" - ICP reports