Chapter 7. Changelog

This chapter contains the changes made in each version of Fanurio. If you want to be notified about new releases, you can always subscribe to the news feed.

7.1. Version 3.4 (April 1, 2024)

This version contains new features, improvements and bug fixes. Here's a list with all the changes:

New Features and Improvements

  • Upgraded database: Upgraded HSQLDB (the database engine used by the application) from version 1.8 to version 2.7.1 because the old version was no longer maintained.

    The database engine is used internally by the application to save data, it's not something users interact with directly. However, the new version requires text fields to have limits and this may be visible in the user interface. Here's a list with the most relevant limits:

    • Contact fields like city, state, country are limited to 100 characters while address, email, other, website are limited to 255 characters.

    • Identifiers (codes, numbers, and references) are limited to 100 characters.

    • Names are limited to 255 characters.

    • Notes and descriptions are limited to 4000 characters.

    For most cases, these limits should be more than reasonable but if they are not, please let us know.

    When entering texts that exceed the current limits, the application will display an error. The same happens if you try to import CSV files with longer fields. For all other import sources (Apple Contacts, iBiz, iCalendar, XML, QuickBooks), texts are truncated automatically and a warning is recorded to the log file.

    Most databases created by previous versions of the application will be upgraded automatically while some databases that have texts longer than the current limits will have to be truncated manually using an older version of the application. The application records an error to the log file with the fields that exceed the limits if a database can't be upgraded. If your database is not upgraded automatically, please contact us.

  • Introducing recurring invoices: Recurring invoices make it easier to bill the same services and products on a regular schedule whether it's weekly, monthly or quarterly.

    Recurring invoices are optional and must be enabled from Business » My Business Details+Billing+Recurring Invoices.

    You can find more details about recurring invoices in their own section.

  • QR code: Added the qrcode FreeMarker directive that can create a QR code. This is useful if you need to create a QR Payment (QR Platba in Czech) or other QR codes for your invoices.

  • PDF settings in Template editor: All PDF settings from the template editor (File » Template Editor) are now grouped under a separate tab called PDF. The Character encoding and Background settings were moved from the Page tab to the new PDF tab.

    The HTML code for these settings has also changed. Invoice templates created with versions 3.3.* need to have their meta-template updated in order to use the new code. This can be done from the Meta-template tab by clicking the Restore button (if you are using the default meta-template) or by inserting specific code (if you are using a custom meta-template).

    <meta name="fanurio-pdf-encoding" content="Cp1252">
    <meta name="fanurio-pdf-background" content="letterhead.pdf">
  • PDF/A compliant documents: HTML documents can be exported as PDF/A compliant documents when configured accordingly.

    The template editor can be used to configure PDF/A settings for invoice templates. However, invoice templates created with versions 3.3.* need to have their meta-template updated in order to support PDF/A settings. This can be done from the Meta-template tab by clicking the Restore button (if you are using the default meta-template) or by inserting specific code (if you are using a custom meta-template).

  • ZUGFeRD / Factur-X: Fanurio can export invoices as ZUGFeRD or Factur-X invoices when using HTML invoice templates with ZUGFeRD settings.

    If you created your invoice template with the template editor, you can use it to enable ZUGFeRD support. However, invoice templates created with versions 3.3.* need to have their meta-template updated in order to support ZUGFeRD settings. This can be done from the Meta-template tab by clicking the Restore button (if you are using the default meta-template) or by inserting specific code (if you are using a custom meta-template).

  • Appearance settings

    There's a new section under Settings (Options on Windows) called Appearance that contains settings for the user interface. It contains the Language setting that was previously under Locale and two new settings:

    • Theme: The application can be configured to use a light theme, a dark theme or it can be configured to sync its theme with the underlying operating system. Previous versions used only a light theme but now it's also possible to select a dark theme.

      The Flat Light/Dark themes are the default themes on Windows to ensure a smooth transition when switching from a light theme to a dark theme. The old theme called Windows can still be selected as a light theme. The Flat Light/Dark themes embed the application menu in the title bar on Windows thus saving some vertical space.

      The Flat Light/Dark (macOS) themes are similar to Flat Light/Dark but with macOS colors. They are the default themes on macOS for the same reason. The old theme called Aqua can still be selected as a light theme.

      If you don't use dark themes and prefer the old light themes, go to Fanurio | Preferences | Appearance and select Aqua on macOS or go to Tools | Options | Appearance and select Windows on Windows.

      In order to support dark themes, the following adjustments were made to the light themes:

      • Names of finished or canceled projects are displayed in gray in the projects tree to show their status.

      • Table rows that use custom colors to show the status of the displayed records are displayed using standard colors when selected. For instance, paid invoices are displayed with white text on a blue background when they are selected instead of white text on a gray background.

    • Font size: The font size for the user interface can be changed by selecting a size increment, from -7 to +7. This can be useful especially on displays where the font is very small.

  • Bill time in seconds: Starting with version 3.2, it was possible to track time in seconds. Now it is possible to also bill time in seconds instead of minutes. Previously, billable tasks rounded time down to 1 minute by default if no rounding was specified so that time was billed in minutes.

    For instance, a task billed at $100 / hour with no rounding calculated 00:07:30 (7 minutes and 30 seconds) as $11.67 because only 7 minutes (0.1167 hours) were billable. Starting with this version, the total is $12.50 because all time (0.125 hours) is billable.

    This improvement is relevant only for users who track time in seconds and bill it by the hour with no rounding. For users who don't track time in seconds, don't bill time, bill time in units, or round billable time, this improvement is irrelevant.

    If you track time in seconds but prefer to continue to bill it in minutes, you should configure your tasks to round time to 1 minute. If you track time in seconds, existing invoice items billed by the hour that don't round time are migrated to round time down to 1 minute in order to preserve invoice totals. Since time can now be billed in seconds, billable time can be entered in seconds in the New Time / Edit Time window.

  • Updated report templates placeholders: Due to some internal changes, some FreeMarker placeholders used to group and filter records by date, week, month or year from report templates had to be removed.

    This change will break your templates if you use custom report templates that group records by period or if you use an invoice template that groups time entries by date. If you do, you can fix them yourself or you can contact us and we'll fix them for you.

    1. No longer need to use .toInterval() for filterBy* placeholders:

      Before
      [#assign dateTimeEntries=timereport.filterByDate(timereport.timeEntries, date.toInterval())]
      
      After
      [#assign dateTimeEntries=timereport.filterByDate(timereport.timeEntries, date)]
      
    2. Use the ${interval(period)} placeholder to access the first and last date of a period because .toInterval() is no longer available:

      Before
      ${week.toInterval().start.toDate()?string("MMM dd")} - ${week.toInterval().end.toDate()?string("MMM dd")}
      
      After
      ${interval(week)?first?date?string("MMM dd")} - ${interval(week)?last?date?string("MMM dd")}
      
    3. The .toString placeholder is no longer available to format periods. Dates, weeks, months and years use the ISO 8601 format that can be easily converted to a full date using the FreeMarker ?date builtin.

      Before
      ${date.toString("EEE")}
      ${week.toString("ww xxxx")}
      ${month.toString("MMM yyyy")}
      ${year.toString("yyyy")}
      
      After
      ${date?date.iso?string("EEE")}
      ${week?split("-W")?reverse?join(" ")}
      ${month?date("yyyy-MM")?string("MMM yyyy")}
      ${year}
      

    The following templates have been updated:

    • Invoices by Month.html

    • Invoices by Month of Payment.html

    • Invoices by Year.html

    • Invoices by Year of Payment.html

    • Invoices Summary by Client and Month.html

    • Invoices Summary by Client and Year.html

    • Sales Statistics.html

    • Time Statistics.html

    • Time Summary by Task and Date.html

    • Time Summary by Task and Month.html

    • Time Summary by Task and Week.html

    • Timelog by Date, Client, Project and Task.html

    • Timelog by Date.html

    • The invoice meta-template used by the template editor to generate an invoice template.

  • Updated HTML viewer: The HTML viewer is used to display reports and invoices. One notable improvement is the ability to wrap long URLs.

    Other improvements that are relevant to HTML template authors include support for new CSS properties (border-radius, opacity, tab-size, quotes, background-size, word-wrap), pseudo-classes (:nth-child(), :last-child, ::first-letter), the linear-gradient() function and CSS Colors Level 3 and 4.

    All report templates and the default invoice template have been updated to wrap long words (not just URLs). Custom templates must be updated with the following CSS code:

    * {
      word-wrap: break-word;
    }
    
  • Week selector: The date filter popup has a new action that can select a week called Select Week.

  • Week numbering: Week numbers are calculated differently depending on which region is selected in Preferences | Locale. For instance, 2023-01-01 is in week 2023-W01 in the USA and in week 2022-W52 in countries that use the ISO system (for instance France) because in the USA the first week of the year is the week that contains January 1st while the ISO system considers the first week of the year the week that contains January 4th.

    In previous versions, week numbers were calculated using ISO rules (used mostly in Europe).

  • Day starts at: For some people, work doesn't end at midnight but several hours after that and activities recorded after midnight must be reported as belonging to the previous calendar day. For instance, if the working day ends at 6 AM then an activity recorded between 1 AM and 2 AM on Dec 2nd belongs to the working day of Dec 1st.

    The new Day starts at setting from Preferences | Locale allows you to configure when the day starts.

  • Use machine-id as encryption key: On Linux systems that have D-Bus installed, the machine-id can be used to create the encryption key instead of the MAC address. The following setting must be added manually:

    encryption.key.source=machine-id
  • Export projects: All projects can be exported to CSV or Microsoft Excel from File » Export » Export Projects.

    The projects from the projects table can be exported using the Export Table action from the contextual menu.

  • Client notes placeholder: The ${client.notes} placeholder can be used in invoice templates to display client notes.

  • Client tax exempt placeholder: The ${client.taxExempt} placeholder can be used in invoice templates to check if a client is exempt from taxes or not.

  • New invoice placeholders

    • Added new placeholders that can group time entries by week (invoice.groupDatesByWeek), month (invoice.groupDatesByMonth) and year (invoice.groupDatesByYear). Up until now, it was possible to group time entries only by date.

    • Added the invoice.regularItemsSubtotal placeholder to display the subtotal for regular items.

  • Attention column: Added a new Attention column to the invoices table. This column is hidden by default.

  • Updated to use TLS 1.2 because more and more servers (for instance smtp.office365.com) no longer support older versions and that will prevent you from sending emails from Fanurio.

    TLS 1.0 and TLS 1.1 have been deprecated because they are no longer considered secure. They are disabled by default in new Java versions (8u291, 11u11) and also by major service providers like Microsoft.

  • FreeMarker 2.3.32: Updated FreeMarker from version 2.3.28 to version 2.3.32. This update is relevant only to expert users who need to create templates that use features available in newer versions.

  • JFreeChart 1.5.4: Updated JFreeChart from version 1.0.19 to version 1.5.4. This update is relevant only to expert users who create their own charts using the jfreechart directive. See the JFreeChart migration page for more details. A notable change is that most .baseX properties were renamed to .defaultX, for instance plot.renderer.baseLegendShape was renamed to plot.renderer.defaultLegendShape.

  • Searchable lists: Long lists of various elements are now searchable. This includes:

    • Clients from "New Deposit", "New Project", and "Sales Report"

    • Projects from "Select Project"

    • Tasks from "New Time" and "Start Timer"

    • Categories from "New Task" and "New Expense"

    • Trip rates from "New Trip"

    • Catalog items from "New Product"

    • Currencies from "Add Currency"

    • Regions from "Choose Region"

    • The templates list from report windows

    In order to search these (regular or dropdown) lists, just make sure they are selected and then start typing the element you want to find. If there is more than one entry that matches your search, use the arrow keys to navigate between them.

  • New repository from backup: The setup wizard and the new repository wizard (File | New Repository) allow you to create a new repository by restoring a backup file. This is useful when transferring data to new computers.

Bug Fixes

  • Windows: The user interface doesn't look right when the computer wakes up from sleep.

  • Windows and macOS: Failed to send emails. The reported error was "Exception reading response".

  • The date interval of the week date filters (This Week, Last Week) didn't always start on the first day of week of the region set in the application.

  • Failed to migrate databases with time entries that have very long pauses (imported from iBiz).

  • Skips job events imported from iBiz that have duplicate uniqueIdentifier fields.

  • The CSS font-weight property didn't work for HTML templates that used embedded fonts with multiple files like Raleway because the font family name was not detected correctly.

  • Time entry totals were not calculated accurately even if precision was enabled. For instance, a time entry with 20 minutes made for a task billed at $60 / hour was evaluated at $19.8 instead of $20 because the billable hours were calculated as 0.33 instead of 0.3333333333.

    This imprecision didn't interfere with how time was actually billed but rather with how it was displayed in the Timesheet tables.

  • Time totals over 596:31:23 hours were displayed as negative numbers.

  • Could't enter time in seconds in the New/Edit Time window if time was calculated automatically from Start to Finish.

  • Couldn't invoice hourly-rated tasks that had only time entries with zero billable hours.

  • macOS: Didn't request permission to access Contacts when importing contact details.

    If you still have problems accessing Contacts after installing this version, run the tccutil command in Terminal to reset permissions for Contacts as follows:

    sudo tccutil reset AddressBook

    Then start Fanurio and try to update contact details from Contacts. You should be asked to grant it permission to access Contacts.

  • Linux and macOS: Time fields like the ones from the New Time window had a gray background even if they were editable.

  • The Edit Task window grew in width each time a non-billable task was edited when the text for "Uninvoiced Qty" label was longer than the text of the other labels (for instance if the language was set to Italian).

  • Failed to check the website for updates.

  • Prior to version 3.3, it was possible to create new products from Business » New Product even if they were not enabled from Business » My Business Details+Projects. This bug was fixed in version 3.3 but the fix was not complete as it didn't enable products under Business » My Business Details+Projects.

    If you created products in previous versions and you don't see a Products section in your billable projects, go to Business » My Business Details and click Done to enable them. They are enabled automatically when you open My Business Details.

  • Windows: Failed to start on computers that used assistive technology such as NVDA.

  • Failed to sort the Taxes column from tasks tables.

  • The Welcome wizard wasn't completely visible on screens with less than 800 vertical pixels, for instance laptops with a 1366 x 768 screen resolution.

  • macOS: Application windows minimized to the dock showed a blurry icon instead of a miniature window with a tiny icon like all the other apps.

  • Failed to create tax groups with two or more taxes in repositories created with version 3.3.2.

  • For new users, the Welcome wizard was displayed each time the application was started until the option "No, I already have one [repository]" was selected.

  • Tags were not copied for duplicated time entries.