Below are the most significant features, functional aims and changes in the most recent versions.
- Flexible and easy to use
- Operating system independent
- Web browser based user interface (supports browsers that support modern standards)
- Secure login also when using insecure communication channels (e.g. server hotels without https support)
- Possibility to define multiple invoicing companies
- Client registry
- Product registry
- Stock balance handling
- Automatic running invoice numbering and reference numbers, also supports manual numbering
- Prefill invoice rows from product information
- User-defined units in invoice rows
- VAT percent per invoice row
- Notification letters
- Calculation of notification fee and interest on arrears
- Reimbursement invoices, linking between original and reimbursing invoice
- PDF creation
- Archiving of invoices - invoices can be stored for reporting, but they don't show up in normal invoice lists
- Sending of invoices via email
- Finvoice XML creation (also ready for other XML formats via an XSL transformation process)
- Order confirmations, also via email
- Receipts, also via email
- Dispatch notes
- Integration with external mail services
- Invoicing report
- Product report
- Product stock report
- Accounting report
- HTML or PDF format
- Users and access permissions (admin/normal user/normal user with backup rights/read-only)
- Built-in database backup function (creates SQL statements that can be used to recreate the whole database)
- Export and import of data in CSV, XML and JSON formats
- Works in typical AMP style (Apache, MySQL, PHP) platforms
- InnoDB tables in MySQL to take care of referential integrity and overall robustness
- UTF-8 character set support, possibility also to use ISO-8859-1(5) character set
- CRAM style (Challenge Response Authentication Mechanism) secure login also when using insecure HTTP connection (does not protect updating of user information or other data transmitted over the network)
- Uses jQuery UI themes, configurable
Screen Captures (from version 1.9.0)
(in Finnish for now, sorry)
Changes in Version 1.19.0 (7 Sep 2018)
- New: Initial setup program to ease the setup process.
- New: Docker support.
- New: Postita.fi integration for sending Finvoice invoices and paper printouts (see instructions).
- New: Client-specific fefaults for foreword and afterword.
- New: Possibility to mark a client to always receive invoices without VAT.
- New: Possibility to display stock balance in the product selection list.
- New: Invoice report can be grouped by product and description.
- New: Long product lines are split to multiple rows in Finvoice to avoid errors caused by them.
- Change: Dates can be entered also without delimiters.
- Change: Warning displayed when modifying a non-open invoice is displayed in a dialog that must dismissed manually.
- Fix: Erroneous dates are reported instead of saving them in an invalid form.
- Fix: Browser's autocomplete is disabled in date fields.
- Fix: Default text selection list does not show the search box anymore to avoid on-screen keyboard from interfering on mobile devices.
- Fix: Importing account statement does not require admin privileges anymore.
Changes in Version 1.18.1 (30 Jun 2018)
- Fix: Rounding of zero and negative prices in invoice printout work properly.
- Fix: Focus is set to the login field on the login form.
- Fix: Invoice row total price is displayed with the number of decimals defined in settings.
Changes in Version 1.18.0 (6 Jun 2018)
- New: Users can now change their password and other information.
- New: Users can now request a password recovery link to email.
- New: Possibility to include row order number in invoice printout.
- New: Possibility to include delivery method and terms in invoices etc.
- New: Quick link to display client's info field in invoice form.
- New: Possibility to use translation keys in period for complaints and payment terms.
- New: Possibility to customize translations per printout type.
- Change: Major code style cleanup and automatic checks.
- Change: Switch to salted passwords and remove the obsolete login js hashing mechanism. Change your password so that it is saved in the improved format!
- Change: Old-style bank account number is no longer required.
- Change: List page and quick search terms are not reset if returning to the list using breadcrumbs.
- Change: Some of the JS code moved from HTML page to separate file so that it doesn't need to be loaded for every page.
- Fix: Increase margins of invoice PDF and move barcode higher from bottom. Make the barcode a bit higher too.
- Fix: Version information displayed on the front page is reset when the software is updated.
- Fix: Customer number is only added when the customer is saved to avoid conflicts.
- Fix: Updater can now report unwritable files properly.
- Fix: Selecting a product now updates unit type properly in invoice rows.
- Fix: Updating multiple invoice rows no longer messes up unit types.
- Fix: Updating a single invoice row no longer tries to add a unit type if there was none before.
- Fix: Adding a new product without unit type now behaves properly.
- Fix: Default texts from invoicing company are applied properly to an invoice when there is only one company.
- Fix: A default text can be re-selected without reloading the page.
- Fix: Ctrl/Cmd-clicking a row opens it only in a new window.
- Fix: Order confirmation terms are included in the order confirmation printout.
- Fix: Import now handles updates of existing rows properly.
- Fix: Third footer row above invoice form is displayed properly in the PDF.
- Fix: Truncation of prices should never try to divide by zero.
- Fix: Make sure session cleanup is not executed too often and that it can't cause the request to fail.
- Fix: Additional info in default texts is now optional.
- Fix: Proper page title and breadcrumb for default texts.
Changes in Version 1.17.0 (27 Feb 2018)
- New: Support for automatic updates. If update check is enabled, user will be prompted. Otherwise updates can be checked in the System menu.
- New: Products in invoice rows are now linked to the product page.
- Fix: Make sure sorting by client-specific price is always disabled (it's dynamically calculated and does not support sorting).
- Fix: Fix price rounding so that it's only applied to totals.
- Fix: Shorten invoice state heading in invoice report PDF to avoid a mess.
- Fix: Display general settings menu item only to admins.
Changes in Version 1.16.1 (22 Dec 2017)
- Fix: YTJ Search has been fixed.
Changes in Version 1.16.0 (20 Dec 2017)
- New: Possibility to define client-specific product prices using a discount percent or a price multiplier, or by changing individual product prices. See instructions for more information.
- New: Warning, if payment date is set to future.
- New: Invoice rows can be re-ordered by dragging.
- New: Selected invoice rows and be modified or deleted at once.
- New: A cover letter can be printed from the client screen.
- New: Invoicing companies can be deactivated.
- New: Product now have weight, and total weight is displayed below invoice rows on the invoice form.
- New: Reports can be opened in a new window so that the settings can be easily modified in the original window.
- New: A running number can be displayed in the invoice printout.
- New: Product group is displayed and searchable in the product selection.
- New: Placeholders can be used in the info field. Added placeholders for date and time.
- New: Added possibility to send a link to the invoice PDF instead of an attachment. See instructions for more information.
- New: Other email fields can be defined in default text of type Email. See instructions for more information.
- Change: A slightly cleaner look for the tables.
- Change: Completed offers are not displayed on the front page anymore.
- Change: A better title for credit invoices.
- Change: A better error message if an email address is found invalid when sending email.
- Change: Contact person's name can be left empty e.g. if only an email address is needed.
- Change: Improved the log messages when previewing account statement import to make it clear that changes were not made.
- Fix: Improved handling of long foreword and afterword to avoid situations where they pushed other content outside the printable area.
- Fix: Saving an invoice no longer changes product stock balance every time.
- Fix: Product and company name are handled properly when outputting report printing parameters.
- Fix: Extended the maximum length of email address fields to accommodate long email addresses.
- Fix: States belonging to offers are no longer selected by default in reports.
Changes in Version 1.15.5 (22 Sep 2017)
- Fixed Finvoice XML creation.
- Fixed printing of offers with PHP 5.4.
Changes in Version 1.15.4 (20 Aug 2017)
- Fixed Price column in printouts to always display the VAT-less price.
- Fixed sorting of VAT breakdown.
Changes in Version 1.15.3 (5 Jul 2017)
- Fixed printing of customer number in printouts.
- Fixed installation path detection on Windows.
- Fixed date column width detection in printouts so that the English titles always fit.
- Fixed default due date calculation.
Changes in Version 1.15.2 (28 Jun 2017)
- Fixed search/filtering in lists.
- Fixed some of the printouts to always use the full page height.
- Changed the database handling so that it doesn't require mysqlnd anymore.
- Changed loading of lists to reset page and filter.
- Added a couple of .htaccess files.
- Switched New Offer and New Invoice buttons around.
Changes in Version 1.15.1 (13 Jun 2017)
- Fixed an issue that prevented modification of invoice rows.
Changes in Version 1.15.0 (11 Jun 2017)
- Added Previous and Next buttons to record screens.
- Added possibility to enter discount in value in addition to percentage.
- Added possiblity to add tags to clients and their contacts. For now in MLInvoice tags are only used in extended client search, but they can be useful in external systems (see examples).
- Added a better error message on printing Finvoice if the XSL module is missing.
- Added a short description to the accounting report.
- Added vendor and vendor's product code to product.
- Added part of product description, vendor, vendor's product code and unit price to product selection list.
- Added possibility to use Markdown in product name and description, additional information, foreword and afterword in printouts (toggle in general settings). More information about Markdown syntax e.g. at https://daringfireball.net/projects/markdown/syntax. This feature is experimental, and Markdown is only rendered in printouts.
- Added possibility to open records from lists to new tabs or windows by clicking with the middle button or by keeping Ctrl or Cmd (Mac) pressed while clicking.
- Added import and export of delivery terms, delivery methods, stock balance logs and default values.
- Added possibility to define default texts for email messages and selection of a default text when sending email.
- Added VAT breakdown to prinouts (can be toggled in settings).
- Changed the version check to use HTTPS.
- Changed list total sums to load only after list contents have loaded.
- Moved the Copy to Invoice button of offers to the top button bar.
- Improved printout layout so that column widths are automatically adjusted to the content and any foreword and afterword are displayed with the same margins as the rows. Also title is aligned better and there's now a horizontal line between table headings and content.
- Improved the look of the email screen.
- Improved the performance of the import function. Depending on underlying hardware the import can now be from tens of percents to at least 100 times faster.
- Fixed handling of decimal values and empty lines in CSV import.
- Fixed a problem in the email messages that may have caused them to display incorrectly depending of the receiving client.
- Fixed the payment terms calculation of offers to use defaults instead of the valid until date of the offer.
- Fixed a problem that prevented normal users from modifying default texts.
- Fixed handling of delivery time field of offers.
- Fixed the quick add client function to store empty fields as empty instead of zeros.
- Fixed extended search of archived invoices and offers.
Changes in Version 1.14.2 (26 Mar 2017)
N.B. MLInvoice 1.14.2 requires at least PHP 5.4.
- Fixed a 500 error when saving an invoice before printing if it didn't have an invoice number or reference number.
Changes in Version 1.14.1 (18 Mar 2017)
N.B. MLInvoice 1.14.1 requires at least PHP 5.4.
- Separated invoices and offers more from each other.
- Removed from the offer form fields specific to invoices.
- Tweaked terminology to work better with offers.
- YTJ searches are now done over HTTPS so that they work also when MLInvoice is used over HTTPS.
- Added a maximum width to recipient address rows. If a row is longer, it is split to multiple rows.
- Fixed offers so that they don't get an invoice number or reference number.
- Fixed offers so that they don't affect product stock balance.
- Fixed the horizontal positioning of the recipient address in printouts.
- Fixed sending of email to update the invoice or offer state accordingly.
- Fixed the space allowed for invoice rows on the first page of invoice printout so that they don't get moved to a separate statement needlessly.
- Fixed PHP notices when printing an invoice without a recipient.
Changes in Version 1.14.0 (5 Mar 2017)
N.B. MLInvoice 1.14.0 requires at least PHP 5.4.
- Added support for invoicing intervals between 2 and 6 months.
- Added support for importing camt.054.001.02 XML invoice statement.
- Added timestamps to all script and css links to avoid caching issues.
- Added a preset for Säästöpankki invoice statements.
- Added print parameters to report printouts and tweaked the PDF report columns etc. a bit.
- Added support for offers.
- Added a notification about creating a copy of a repeating invoice.
- Added a warning when modifying an invoice that's not unfinished.
- Added an accounting report.
- Added possibility to display dispatch note printing buttons per day.
- Added contact type to client contacts and usage of them as the email recipient.
- Added support for foreword and afterword in the printouts.
- Added support for defining preset values for foreword, afterword and info texts.
- Added support for using placeholders for company contact information.
- Added possibility to include company contact name in the recipient address.
- Added a setting for including both sender’s logo and address in printouts.
- Added possibility to ignore invoices already marked as paid in the account statement import.
- Added support for fetching basic client information from the YTJ open API.
- Added terms of payment and period for complaints strings to invoicing company data so that e.g. a two companies can be used for invoices in two languages.
- Added support for sending emails with sendmail or an SMTP server in addition to PHP's mail function.
- Changed invoicing company list to be alphabetically sorted in invoice form.
- Changed copying of invoice to use the default info text from invoicing company.
- Changed the printing buttons to collapse choices from 6th on when there are more than six options.
- Changed terminology from "open" to "unfinished" invoices to properly convey their idea and to avoid mixups with accounting.
- Disabled foreign key checks in the backup script so that the database can always be restored regardless of whether there are invalid references (they might be present in older databases converted from MyISAM)
- Fixed the xsd location in the generated Finvoice xml.
- Fixed import preset handling to use the value instead of preset name when searching for preset values.
- Fixed the logic that gives an invoice a new invoice number to avoid duplicates from simultaneous actions.
- Fixed invoice printout to display the amount to pay as zero when the invoice is paid.
- Fixed invoicing company table definition to only require one bank account.
- Fixed some of the printout types to use the correct init params.
- Fixed handling of hidden int fields in the advanced search form.
- Fixed several issues in the Swedish translation.
- Fixed validity check of reference number in barcode printing to avoid errors when the number contains non-numeric characters.
- Fixed the stock balance update to also update the displayed log table properly.
- Fixed select list full match sorting that pushes the full match up as the first result when searching with a numeric keyword.
- Refactored some of the invoice check and print js functions into a separate js file and class.
- Removed XML declaration from the Finvoice SOAP envelope due to validation issues encountered in production use.
- Relicensed create_finvoice.xsl and create_finvoice_soap_envelope.xsl under the MIT license so that they can be used also in non-GPL applications.
- Switched TCPDF to a Composer dependency and updated it to a new version.
- Tweaked the theme to improve contrast slightly.
- Updated jQuery, jQuery UI and the theme.
Changes in Version 1.13.1 (17 Nov 2016)
N.B. MLInvoice 1.13.1 requires at least PHP 5.4.
- Fixed copying of invoice.
- Fixed position of email in invoice printout.
- Fixed a PHP notice from export.
- Fixed clearing of invoice row values after a row is added.
- Fixed table conversion to convert only MLInvoice's tables to InnoDB format.
- Fixed too long URLs in DataTables by switching it to use POST requests.
- Fixed null value handling for integer columns in import.
Changes in Version 1.13.0 (3 Apr 2016)
N.B. MLInvoice 1.13.0 requires at least PHP 5.4.
N.B. This version contains changes to recipient address positioning in the invoice printout. Please check the results and adjust the settings found in the General Settings as necessary.
- Improved printing of recipient address so that the position can be defined exactly and it fits more information.
- Added possibility to display reports in interactive tables that support sorting, filtering and export in multiple formats such as an Excel worksheet.
- Added possibility to define default additional info text in the billing company.
- Added possibility to display the additional info also in the invoice form at the bottom.
- Added support for importing account statement in the Finnish KTL format.
- Upgraded Finvoice to version 2.01.
- Fixed Finvoice with the SOAP envelope to pass validation.
- Fixed the duplicate detection and other issues in import functionality.
- Fixed a session handling issue that prevented MLInvoice from working with PHP 7.
- Fixed the language selection to take effect immediately.
- Fixed the company logo selection popup position and font size.
- Fixed invoice report grouped by VAT to not duplicate rows.
- Fixed report parameter selection so that also the labels of checkboxes can be clicked.
Changes in Version 1.12.2 (31 Dec 2015)
N.B. MLInvoice 1.12.2 requires at least PHP 5.4.
- Fixed database version and updating a database created with version 1.12.0 or 1.12.1.
Changes in Version 1.12.1 (23 Dec 2015)
N.B. MLInvoice 1.12.1 requires at least PHP 5.4.
- Fixed product and client selection so that they display any exact match first.
- Fixed unpaid invoice list to not contain open invoices.
- Fixed a MySQL error when user with only read privileges tries to display an invoice. Also improved the layout of read-only invoices.
- Fixed invoice statement import to take all unpaid statuses into account when checking if a found invoice is unpaid.
- Fixed the import function to not try to start import if the import file is not defined.
- Fixed some automatic file formatting mistakes.
Changes in Version 1.12.0 (6 Dec 2015)
N.B. MLInvoice 1.12.0 does not work with PHP 5.3 anymore but requires at least PHP 5.4.
- Added possibility to accept partial payments.
- Added conversion of legacy MyISAM tables to the InnoDB format.
- Added discount to order confirmation printouts.
- Added an option to not mark invoices archived when importing an account statement.
- Added possibility to group the invoice report by VAT percent.
- Added VAT breakdown to the invoice report.
- Added possibility to cut invoice row descriptions so that they fit on a single line.
- Fixed a problem that caused inactive companies to be displayed in the company selection.
- Fixed extended search to find also archived invoices.
- Fixed tables to remember last sort order and other options.
- Fixed a bug that caused a copy of an archived invoice to be archived by default.
- Fixed XML export of clients to use proper tag name for contacts.
- Fixed a problem that could have caused invoice printing to fail if due date was before invoice date.
- Fixed an invoice sum rounding error in invoice list.
- Fixed a problem that caused invoice rows without unit to display 'null'.
- Fixed Mark as paid button to leave "Paid in cash" status unchanged.
- Fixed a problem that caused import to lose decimals with separator other than a period.
Changes in Version 1.11.1 (14 Mar 2015)
- Fixed copying of invoice to update invoice row dates properly. Records copied with version 1.10.0 or 1.11.0 are automatically fixed in the database.
- Fixed unit not displaying in invoice row list.
- Fixed product and stock balance report PDFs to handle longer product codes properly.
- Reworked the way product report calculates sums so that rounding errors don't cause the numbers to differ from those shown in the invoices.
- Fixed wrapping of client's reference in printouts.
Changes in Version 1.11.0 (21 Feb 2015)
- Added possibility to disable automatic state change to paid when payment date is set.
- Added possibility to search in the middle of client and product names in the selection lists.
- Fixed extended search to display the client selection properly.
- Fixed VAT rounding in product report.
Changes in Version 1.10.0 (8 Feb 2015)
- Added support for product stock balance handling and reporting (stock balance and stock value).
- Added support for Finvoice with SOAP envelope.
- Added displaying of product codes in invoice rows.
- Added back empty choice to product selection.
- Added sorting of product selection by order number, product code and product name.
- Added hiding of the list of repeating invoices when there are none.
- Added support for printout type placeholders.
- Added support for displaying product EAN codes and other barcodes in dispatch notes.
- Added option to primarily consider invoices of current year when determining next invoice number.
- Added separate default subjects and email bodies for email receipts and order confirmations.
- Added possibility to cancel printing an invoice if there is a notification of past date or something.
- Added possibility to choose which invoice states are listed in the open or unpaid invoices lists.
- Added invoice row date and type as limits in invoice report.
- Added client's reference to all printout types.
- Added client-specific payment days and terms of payment.
- Added automatic state change when payment date is set, and a button to quickly set it to today.
- Added automatic column mapping in import when column heading matches table field name.
- Made order confirmation terms in settings optional.
- Made client selection list dynamic.
- Switched database layer from deprecated mysql to mysqli.
- Fixed rounding of invoice total in invoice statement import so that it's always done the same way as in the invoice.
- Fixed rounding of invoice totals in the invoice lists.
- Fixed grouping of product report so that it uses product id instead of name.
- Fixed the behavior of update invoice number button.
- Fixed indication of deleted records in lists.
- Fixed backup file creation to add tables in correct order.
- Fixed the length of session id to allow 255 characters.
- Fixed saving of records where a field begins with an opening parenthesis.
- Fixed version update check to properly handle semantic versioning.
- Fixed handling of multiline CSV fields in import.
- Fixed recipient address handling so that only invoices are ever sent to the invoicing address.
- Fixed all invoices list so that it doesn't contain archived invoices.
Changes in Version 1.9.0 (10 Mar 2014)
- Improved layout of bank name and IBAN in invoice printout.
- Added possibility to mark invoices paid according to a account statement file.
- Added order column to products.
- Increased maximum length of user id's to 255 characters.
- Added payment date to archived invoices list.
- Added kilogram to default row types.
- Improved client and product selection in invoice form with a search feature.
- Fixed rounding of row sums.
- Fixed advanced search so that trailing zeros in search terms are not lost.
- Fixed export.
- Added order confirmation printout and email.
- Changed lists to load contents dynamically as necessary. Makes it possible to have e.g. a large amount of products without performance implications.
- Added "Paid in Cash" status.
- Added possibility to update all invoice row dates at once.
- Fixed Finvoice character set to ISO-8859-15 (was ISO-8859-1).
- Fixed handling of placeholders in email invoice file name.
- Fixed reports for a single date.
- Fixed email error messages to use a red error message.
- Fixed customer number handling when a new customer is added directly from the invoice form.
- Added product code to product report.
Changes in Version 1.8.0 (6 Mar 2013)
- Added product code to the product selection list so that the product can be selected by typing the first characters in the code.
- Added option to display product codes in invoice printouts.
- Changed reminders to be sent to the clients' mail address by default and added an option to always use invoicing address.
- Deferred loading of Google Places API for autocomplete so that it doesn't hinder the loading of the page content.
- Fixed session expiration when MySQL time zone was different from MLInvoice.
- Fixed session garbage collection to not delete newly created sessions immediately (PHP configuration issue).
- Fixed the order of tables in database backup so that restoring data works without having to execute the script out of line order.
- Made sure autocommit is enabled in MySQL.
Changes in Version 1.7.0 (13 Feb 2013)
- Added Swedish translations contributed by Sebastian Åstrand.
- Added column selection, landscape PDF and payment date range selection to invoice report.
- Added the option to show/hide recipient email in the printed invoice.
- Added optional street address autocompletion using Google Places API.
- Added possibility to use all the placeholders available in the email template also in the invoice file name.
- Added print templates for email receipts.
- Added links from invoice form to invoicing company and client.
- Fixed default VAT percent decimal separator in invoice form.
- Fixed barcode generation for English invoice when invoice sum was at least 1000.
- Fixed a problem with v1.5 database update script that caused prices equal to or more than 10000 to be truncated.
- Fixed displaying custom invoice states in invoice and product reports.
- Fixed billing / recipient address handling in invoice printouts.
- Fixed multiple issues with the date range pickers especially in non-Finnish locales.
- Fixed decimal display in product form.
- Fixed penalty interest calculation to ignore any reminder fees.
Changes in Version 1.6.1 (15 Oct 2012)
- Fixed "Update Invoice and Reference Numbers" button.
- Fixed an intermittent blank screen displayed instead of the login screen.
- Fixed the text of VAT ID in invoice footer.
Changes in Version 1.6.0 (25 Aug 2012)
- Added English UI translation and customisable localisation (independently customisable for UI and invoices).
- Added total sums to the main screen.
- Added highlighting of due dates in past.
- Added an improved date range picker for reports with presets and easier date selection.
- Added grouping by month to invoice report and fixed alignment of group totals.
- Added logic for returning back to previous page upon login after a session has expired.
- Added automatic database upgrade mechanism.
- Added version number display and optional update notifications to the main screen.
- Added support for repeating invoices.
- Added optional country field to company and client address and invoice.
- Moved invoice states, row types and print templates from Settings tab to System tab.
- Moved translations to ini files and added possibility to override translations locally.
- Tweaked report parameter forms.
- Fixed a problem that could have caused invoice total to be displayed on wrong row in invoice lists.
- Fixed extended/quick search with strings.
- Fixed database definition to allow invoice item price higher than 10000, and 100 percent discount.
- Fixed displaying invoice rows containing deleted products.
- Additional minor fixes and cleanup.