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.3 (June 1, 2020)

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

New Features and Improvements

  • Projects

    • Project status: Replaced the Finished field that had two states (Finished, Not Finished) with a new Status field that has four states (Active, Suspended, Cancelled, Finished). These states are explained in more detail in the Projects section.

      • The Active status replaces Not Finished. All projects that were previously Not Finished, will now appear as Active.

      • The Suspended status is new and should be used for projects that are temporarily put on hold. It helps declutter the list of active projects.

      • The Cancelled status is new and should be used for projects that are stopped before completion. Also use this status for projects with uninvoiced amounts that will never be paid. Cancelled projects can't be invoiced.

      • The Finished status remains the same with a small difference. In previous versions, finished projects couldn't be invoiced but the new Finished status allows finished projects to be invoiced. Use the Cancelled status if you no longer expect a project to be paid.

      Replaced the Finished column from the projects table with a new Status column. The projects table no longer paints its rows in different colors to show the status of each project, instead it displays a small icon in the Status column. Also, dates from the Due Date column are displayed in red if the project is overdue.

      Projects from the projects tree use different icons to show their status.

    • Project location: Added a new optional field called Location to projects. You can use it to track the physical location where work is performed for the project, for instance a photoshoot location or the client's office location. The location can be any free-form text like GPS coordinates, a mailing address or just a name.

      The projects table has a new Location column that is hidden by default. Right-click any column name from the projects table to make it visible. Also added a Location filter in the search field from the projects table view so you can easily search projects by location.

    • New placeholders for projects: Added new template placeholders for invoice projects (project.location, project.startDate, project.dueDate and project.finishedDate).

  • Time entries

    • Billable time entries: You can mark each time entry as billable or non-billable and you can specify the amount of billable time for each time entry. We've also added a new user guide section that explains how time billing works.

      The following placeholders that indicate billable time have been renamed:

      • invoice.billedTimeAsHour -> invoice.billableTimeAsHour

      • invoice.billedTimeAsDecimal -> invoice.billableTimeAsDecimal

      • invoice.calculateRoundedElapsedTimeAsHour -> invoice.calculateBillableTimeAsHour

      • invoice.calculateRoundedElapsedTimeAsDecimal -> invoice.calculateBillableTimeAsDecimal

      • item.billedTimeAsHour -> item.billableTimeAsHour

      • item.billedTimeAsDecimal -> item.billableTimeAsDecimal

      • project.billedTimeAsHour -> project.billableTimeAsHour

      • project.billedTimeAsDecimal -> project.billableTimeAsDecimal

      • timeEntry.roundedElapsedTimeAsHour -> timeEntry.billableTimeAsHour

      • timeEntry.roundedElapsedTimeAsDecimal -> timeEntry.billableTimeAsDecimal

      • timereport.calculateRoundedElapsedTimeAsHour -> timereport.calculateBillableTimeAsHour

      • timereport.calculateRoundedElapsedTimeAsDecimal -> timereport.calculateBillableTimeAsDecimal

      Also added new placeholders that can be used to calculate billable time in projects and tasks reports:

      • projectsreport.calculateBillableTimeAsDecimal

      • tasksreport.calculateBillableTimeAsDecimal

      The tasks tables have a new column called Billable Time that displays the total billable time for each task. To avoid confusion, the old Billable Time column was renamed Uninvoiced Time and the Billed Time column was renamed Invoiced Time. The term "billable" now means both invoiced and uninvoiced amounts, whereas before it meant only uninvoiced amounts (amounts that haven't been invoiced yet).

      Besides these two columns, other billing-related total columns have been renamed. Here's how each total was renamed:

      • Billable Time -> Uninvoiced Time

      • Billable Quantity -> Uninvoiced Quantity

      • Billable Total -> Uninvoiced Total

      • Billed Time -> Invoiced Time

      • Billed Quantity -> Invoiced Quantity

      • Billed Total -> Invoiced Total

      The following placeholders have been renamed:

      • tasksreport.calculateBillableTotal -> tasksreport.calculateUninvoicedTotal

      • tasksreport.calculateBilledTotal -> tasksreport.calculateInvoicedTotal

    • Total amount: The Timesheet tables have a new Total column that displays the total amount for each time entry. Totals are calculated only for billable time entries recorded on tasks billed by the hour. For non-billable time entries and for time entries recorded on tasks billed in units, the total is zero.

      The Total column is hidden by default. Right-click any column name from the Timesheet table to make it visible.

      Also added new placeholders that can be used in time reports: ${timeEntry.total} and ${timereport.calculateTotal(timeEntries)}.

    • Quantifiable time entries: Added a new optional field to time entries to track quantities. For instance, translators can track how much time it took them to translate a text but now they can also track how many words they translated during that time.

    • Time rounding

      • Time rounding is now editable for invoiced tasks.

      • The minimum amount of time when rounding billable time is no longer limited to 60 minutes (1 hour), it can be set up to 1440 minutes (24 hours).

  • Taxes

    • Taxable records: Tasks, expenses, products and items have a new field called Taxes that specifies the taxes applied to them: None (for non-taxable records), Default (taxes specified by the parent invoice), or specific taxes.

      It's now possible to create invoices with items that are taxed at different rates. For instance, an invoice could contain non-taxable items, items taxed at a standard rate (VAT 21%) and items taxed at a reduced rate (VAT 6%). Previously, it was possible to have only non-taxable items and items taxed at a standard rate (specified by the invoice).

      The new "Taxes" field replaces the old "tax exempt" field. Here's how:

      • Non-taxable records: When the "tax exempt" field was checked, the record was marked as being non-taxable. To get the same result, you now have to uncheck the "Taxes" field.

      • Taxable records with a standard rate: When the "tax exempt" field was left unchecked, the record was taxed using whatever tax rate was specified at invoice level. To get the same result, you now have to leave the "Taxes" field checked and taxes set to Default.

      • Taxable records with a specific rate: In previous versions, it wasn't possible to select a specific tax for each record. To do that, you now have to leave the "Taxes" field checked and select a tax other than Default from the taxes dropdown box.

      The tasks, expenses, products and items tables have a new column called Taxes that shows how each record is taxed. This column is hidden by default. To make it visible, right-click any column name and select Taxes from the contextual menu.

      The ${item.taxExempt} invoice placeholder was replaced by the ${item.taxable} placeholder.

    • Expense tax amounts: Expenses have a new field called Tax Amounts that tracks the amount of tax paid. This field is visible only if taxes are enabled at business level.

      Tax settings were moved to Business » My Business Details+Taxes because taxes are no longer a billing-specific feature, they are also used to track tax amounts for expenses.

      The default expense report templates (Expenses, Expenses by Category, and Expenses by Client and Project) display tax amounts, if there is at least one expense with tax amounts. Unlike the expenses tables that display all tax amounts in a single column, the report templates display tax amounts in separate columns (one for each tax). The updated templates use new placeholders added for tax amounts (expensesreport.groupTaxAmountsTaxes, expensesreport.calculateTaxAmountsBag, expense.taxAmountsBag).

    • Rounding tax totals: Added a new setting that specifies how invoice tax totals are rounded (half even, half up or half down). The 'round half up' rounding rule is now used when importing an iBiz database.

    • Sales reports taxes: The Invoices template available for sales reports (Reports » Sales Report) displays totals for each tax. This is useful if your invoices have two or more taxes.

      Also added two new placeholders for sales reports: salesreport.groupTaxes and salesreport.calculateTaxTotal.

  • Email invoices

    • Email templates: Sending invoices by email is now easier if you use email templates because you don't have to type the same text every time you send an email.

      See this section for more details on how to create and manage email templates but also for several example templates that you can use for your emails.

    • Email multiple invoices: Send multiple invoices by email using the same email template. The same invoice template is used to generate the attachment. Each invoice is sent as a separate email.

      To send multiple invoices by email, select two or more invoices in the Invoices table, right-click them (or ctrl-click on macOS) to show the contextual menu and then select Email Invoice.

    • "Send me a copy" using Bcc: Fanurio now uses the Bcc (Blind carbon copy) field instead of Cc (Carbon copy) to send the copy if the "Send me a copy" option is checked in the Email Invoice window. It's irrelevant for the recipient that users send a copy to themselves and they shouldn't know this.

    • Preview attachment: Redesigned the attachment field from the Email Invoice window. You can now click the attachment link to preview the document that will be sent by email.

    • Address validation: Checks if a client has an email address before sending an invoice by email.

  • Other fields

    • Legal name for clients: Added a new field called Legal Name to clients. This field is useful if you need to bill clients with long names.

      Invoices must display the full name of a client but long names are not very practical in the user interface, especially in the timer window. To handle this problem, we added a new Legal Name field. Now you can enter a short name in the Name field (e.g. Coca Cola) and the full name in the Legal Name field (The Coca-Cola Company). The name is used to display the client in the application and the legal name can be displayed on invoices.

      To display the legal name on your invoices, use the ${client.legalName} placeholder instead of ${client.name}.

    • Product date: Added a new field called Date to products. You can use it to track the date when the product was added to the project.

      For invoiced products, the ${item.date} placeholder represents the product date instead of invoice date (what was used in previous versions).

    • Accurate trip distance: The distance of a trip can now be entered using two decimals. This makes it possible to record mileage more accurately than before when only whole numbers were allowed.

  • Import/Export

    • CSV import improvements

      • Duration fields require text in the standard format for durations (PTnHnMnS) instead of hh:mm:ss. If you already have a CSV format that you use to import time in Fanurio, you need to update the mapping for the Time field.

      • CSV format fields whose names start with an asterisk are mandatory and must have a mapping expression.

      • Added a separate section that explains how to create a CSV import format.

      • Error messages includes the line number if the CSV file can't be parsed.

      • Remembers the last folder used to import a CSV file.

      • Redesigned clients import from CSV to use a format similar to that of trips, expenses and time. Also moved all clients import actions (CSV and Apple Contacts) to File » Import+Import Clients. Contacts from Apple Contacts can be imported only on macOS.

    • Imports trips and expenses: Added new import wizards for trips (File » Import+Import Trips) and expenses (File » Import+Import Expenses) that can import data from CSV or XML (created by Fanurio).

      When importing trips and expenses from CSV, you need to define your own formats that specify how data from the CSV file is converted into records. This is similar to how time is imported from CSV.

    • Exports trips and expenses to XML: Trips and expenses can now be exported to XML. This is useful if you need to import them in another instance of Fanurio.

    • Exports to Microsoft Excel 2007 (XLSX): Data that could be exported to Microsoft Excel 97 (XLS) can now be exported to Microsoft Excel 2007 (XLSX) as well. This includes table exports for tasks, time entries, expenses, trips, products, invoices, payments and clients.

    • Export multiple invoices: Export multiple invoices using the same invoice template. Each invoice is exported as a separate file to the same folder.

      To export multiple invoices, select two or more invoices in the Invoices table, right-click them (or ctrl-click on macOS) to show the contextual menu and then select Export Invoice.

    • Invoice file name pattern: Added a new setting to configure the file name for exported invoices.

      Let's say you have an invoice for client ABC with number 123. If you export it to PDF, Fanurio will give it the name 123.pdf by default. The new setting allows you to define a pattern for the exported file that includes other details (e.g. client name, invoice period, current date, etc) than the invoice number. Instead of naming the file 123.pdf you can now define a pattern to export it as ABC - 123.pdf so you can find it easier on disk by client name.

      To define your own pattern, you need to edit the settings file manually and add one of the following lines at step #4:

      invoice.export.file.pattern = ${client.name} - ${invoice.number}
      invoice.export.file.pattern = ${client.name} - ${.now?string("MM-dd-yyyy")} - ${invoice.number}
      invoice.export.file.pattern = ${template} - ${invoice.number}
      
    • New "Importing and exporting data" section: Added a new section to the manual that expains how data can be imported to and exported from Fanurio.

  • Templates

    • Invoice meta-template: The invoice template editor (available from File » Template Editor) has a new Meta-template field that contains the meta-template used to create the actual invoice template. In previous versions, the meta-template was private and couldn't be edited.

      This will help users who need to make more complex changes to their templates that couldn't be done within the template editor. Changes done to a template outside Fanurio were lost when it was edited in the template editor again. These changes can now be made on the meta-template and they will never be lost.

      The meta-template uses angle bracket tag syntax (e.g. <#directive> ... </#directive>) and square bracket interpolation syntax (e.g. [=variable]) while the actual template uses square bracket tag syntax (e.g. [#directive] ... [/#directive]) and dollar interpolation syntax (e.g. ${variable}).

    • Multiple-page letterhead: Letterhead documents used as background layers can have multiple pages. This is useful if you are using a slightly different letterhead for the first page than for the other pages.

      The first page from the background layer is used as background for the first page of the document, the second page from the background layer is used as background for the second page of the document and so on. If the background layer has fewer pages, the last one is repeated for the remaining pages. This means that if the background layer has just one page, that page is used as background for all the pages of the document.

    • QR-bill: QR-bill is a new standard that replaces inpayment slips throughout Switzerland starting on June 30, 2020. To support this new standard, the template editor has a new setting that enables QR-bill for existing invoice templates.

      Advanced users can use the new qrbill Freemarker directive to integrate QR-bill in their invoice templates.

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

  • User interface improvements

    • The Duplicate action (available for tasks, time entries, expenses, trips and products) allows you to review the duplicated record before it's created instead of creating it automatically.

    • Remembers the size of the windows used to create and edit projects, tasks, time entries, expenses, trips, and products.

    • Toolbar icons are highlighted when the mouse hovers over them. This is useful when clicking the Start New Timer arrow icon.

    • Using the default date format to display the date for 1) the Finish date picker from the New Time / Edit Time dialogs that is displayed when the 'Enter time relative to both' option is selected and 2) the End Time date picker from the New Trip / Edit Trip dialogs. Previously, the date format was set to "MMM dd" (e.g. May 12).

    • The Uninvoiced Quantity field is no longer selected automatically when Pricing is set to unit-based in the Task dialog because it can interfere with the selection of a category for the task.

    • Added a new Start Date filter for the tasks tables.

    • Added a new Tags column to the task dialog time table.

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

    • Asks for confirmation when creating non-billable projects for billable clients to avoid mistakes.

  • Root folder for tar.gz package: The .tar.gz file has a root folder so that its contents are easier to extract. For version 3.3, the root folder is called fanurio-3.3.

  • Runs on Java 8: Fanurio now requires Java 8 to run because Java 6 is no longer maintained.

    This means Fanurio no longer runs on older operating systems like Mac OS X 10.5, Mac OS X 10.6, and Windows XP because Java 8 doesn't support them. The minimum platform versions required by the Java distribution used by Fanurio are Linux with glibc 2.5, Windows Server 2008 R2, Windows Client 7, or Mac OS X 10.10 Yosemite but our tests show that Fanurio can also run on Mac OS X 10.8 and Mac OS X 10.9.

Bug Fixes

  • Failed to export clients marked as foreign to CSV or Excel.

  • Custom locale was not always set when the application started.

  • If the Date filter was set to an interval other than All Dates in the Timesheet view, the default date for new time entries was sometimes set to a date before the Start Date of the task.

  • Fixed printing issues, direct printing is now identical to indirect printing (via PDF export).

  • The Business » New Product action was enabled even if products were not enabled under Business » My Business Details+Projects.

  • Fixed the Time Statistics.html time report template and the Sales Statistics.html sales report template to display charts for clients, projects and task categories that have names with quotes (for instance Scarlett O'Hara).

  • Failed to validate negative money amounts and quantities for locales (e.g. Sweden) that use the minus sign (−) instead of hyphen minus (-), a symbol that is found on all keyboards. This bug can be observed if Fanurio runs with Java 9 or later and it's not a concern for most users since Fanurio is bundled with Java 8 on Windows and macOS and it recommends Java 8 on Linux.

    Here's how to type the minus sign (Unicode codepoint 0x2212 in hexadecimal):

    • macOS: Click the keyboard icon from the menu bar and select Show Emoji & Symbols. Then search for "minus sign" and double-click the minus sign to enter it.

    • Windows: Hold down Alt and press + on the numeric keyboard. Type 2212 and release Alt. A registry key needs to be enabled for this to work.

    • Linux: Press Ctrl+Shift+U, an underlined u letter should appear. Then release Ctrl and Shift and type 2212, it will be displayed next to the underlined u character so that when you're done it should display u2212 (the Unicode code for the minus sign). Press Enter so that the Unicode code is replaced with the actual minus sign.

    See Unicode input for more details.

    Technical note: This behavior can be noticed starting with Java 9 (Use CLDR locale data by default) or with Java 8 if you set the java.locale.providers system property to -Djava.locale.providers=SPI,CLDR explictly (Adoption of Unicode CLDR Data and the java.locale.providers System Property).

  • macOS: The folder chooser uses the native look.

  • macOS: Failed to show exported files (reports or invoices) in Finder if their paths contained spaces.

  • Linux: Failed to start with Java 8 Update 242. The Windows and macOS versions don't have this problem since they have their own Java.

  • Windows: The font of some components like text areas and spinners doesn't scale if display scaling is enabled. Text is very hard to read when scaling is set to 150%.

    This bug was introduced in the previous release when the application was bundled with Azul's Zulu OpenJDK. To fix it, the Windows version is now bundled with AdoptOpenJDK.