Changelog Acumulus web shop extensions
======================================

This file contains a historical overview of changes in our code.

8.7.0 (2025-11-04) (ALL)
------------------------
Features:
- All: Updated (and aligned) the acumulus_customise_invoice modules for all supported
  shops to this version of this library.

- Bugs:
- OC4: Changes in OC4 Mail handling.
- OC4.1: Changes to composing event names (no more '/' or  a '|', but a '.').
- OC4.1: fields date_added and date_updated removed from table tax_rate, these fields
  were queried by us, but not used, so simply changed the query.
- OC4: doUpdate() did not work correctly, did to much or to few.
- MA: Error extracting order id in handler for event 'sales_order_invoice_save_after'.
- MA: incorrect arguments passed to 'acumulus_line_collect_after' event handlers.
- MA: Mail components were swapped in 2.4.8; our mail did no longer work on 2.4.8.

Refactorings:
- ALL: Clearer error message when API call 'lookups/lookup_vatinfo' returns an error.
- MA: Updated event handling in siel_acumulus_ma2 module.
- ALL: Refactored test utilities and added Log and Mail end-to-end checking features.
- MA: Magento deprecated their own log levels in favor of the Monolog levels.
- ALL: Refactored metadata handling (adding list arrays, converting to API value).


8.6.5 (2025-10-21) (PS|HS|VM)
-----------------------------
Features:
- PS|JOO: Updated the acumulus_customise_invoice module to this version of the module and
  base library.
- PS: Added support for Mollie payment fees on the Acumulus invoice status tab.

Bugs:
- ALL: Completors should complete, not overwrite, values already set.
- JOO|WP: CMS version not mentioned in <connector> tag in messages to the Acumulus API.
- JOO: Mails were not sent as HTML mails but as text mails with HTML tags.
- JOO: Joomla does not accept parameters named 'result' in their event handling system.
- PS: TypeError: LineCollector::addVatRateLookupMetadata(): Argument #2 ($addressId) must
  be of type int, string given, called in ItemLineCollector.php on line 90 and ...

Refactorings:
- ALL: Generalised class totals towards a class Amount (split into part amount and part
  VAT) allowing to retrieve its separate parts and which parts were calculated.
- ALL: BasicSubmit: removed needContract as a parameter and introduced it as a parameter
  during collecting, so we do not collect contract data (and store it in the BasicSubmit
  object) if we do not need it. Also added a complete phase, even if for now it is
  handled by the (newly introduced) NoopCompletor.
- PS: extracted payment fee handling into a separate class that adds support for 3rd
  party modules.


8.6.4 (2025-10-15) (PS)
-----------------------
Features:
- PS: Added support for Mollie payment fees.


8.6.3 (2025-10-14) (OC)
-----------------------
Bugs:
- OC3: Our own autoLoader is still needed.
- OC3(|OC4?): TypeError: Siel\Acumulus\Shop\InvoiceManager::getSourceByIdOrSource():
  Argument #2 ($idOrSource) must be of type object|array|int, string given.

Refactorings:
- ALL: Error handling: throw an AcumulusException when a JsonException is thrown.


8.6.2 (2025-10-14) (OC)
-----------------------
Refactorings:
- typos, docu, code inspections.


8.6.1 (2025-10-09) (PS)
-----------------------
Features:
- PS: Support for PrestaShop 9.

Bugs:
- ALL: Link to the documentation on invoice types has been updated (in help texts and
  code documentation).
- PS: PS truncates password fields to 16 characters leading to unwanted password changes
  when submitting the settings form.


8.6.0 (2025-08-28) (MA|WC)
--------------------------
Features:
- ALL: Added support for the API field "warehousecountry": a mapping, an accompanying UI,
  and adapted logic to determine the vat type.

Bugs:
- ALL: MappingsForm contained a lot of incorrect field names when validating a form
  submission, and some packing slip fields were missing completely.
- ALL: TypeError: Container::getCompletor(): Return value must be of type
  BaseCompletor|Completor, null returned in Container.php:533.

Refactorings:
- ALL: Removed PHP 8.4 warnings and deprecations.
- ALL: Started using PHP 8.1 language constructs.


8.5.4 (2025-08-16) (none)
8.5.3 (2025-08-09) (none)
-------------------------
- ALL: Added the API field "warehousecountry" to the definition of Invoice.
  No other support for it has been added, but custom code can now use it.
- 8.5.4: Corrected the property name by removing a space from the end.


8.5.2 (2025-07-08) (MA)
-----------------------
- MA: Siel\Acumulus\Magento\Config\ConfigStore::load(): Return value must be of type
  array, null returned.


8.5.1 (2025-05-28) (PS)
-----------------------
Bugs:
- PS: TypeError: Cannot assign string to property Siel\Acumulus\Invoice\Item::$id of type
  int in /modules/acumulus/vendor/siel/acumulus/src/PrestaShop/Invoice/Item.php:30


8.5.0 (2025-04-30) (WC)
-----------------------
Features:
- ALL: Added a setting to set a value for the "disable duplicates" flag to Acumulus as
  part of the invoice-add message.


8.4.3 (2025-03-31) (WC)
-----------------------
Bugs:
- WC: TypeError: FormRenderer::renderLabel(): Argument #1 ($text) must be of type string,
  null given. Als betaalmethodes 'null' als titel hebben (en niet de lege string).


8.4.2 (2025-03-10) (PS|WC)
--------------------------
Bugs:
- ALL: InvalidArgumentException: false is not considered a numeric value in Number.php:155
- PS: Error: Call to undefined method
  Siel\Acumulus\PrestaShop\Invoice\Source::metadataGet() in
  \Siel\Acumulus\PrestaShop\Collectors\PaymentFeeLineCollector::collectPaymentFeeLine:68.


8.4.1 (2025-01-02) (WC)
-----------------------
Bugs:
- ALL: DomainException: lang: not an allowed value: 'de' in AcumulusProperty.php:226.
- ALL: TypeError: CompletorInvoiceLines::getUniqueVatRate(): Argument #1 ($vatRateInfos)
  must be of type array, null given, called in CompletorInvoiceLines.php on line 256 and
  defined in CompletorInvoiceLines.php:515
- ALL: TypeError: Completor::changeInvoiceToConcept(): Argument #4 must be of type string,
  float given, called in Completor.php on line 714 and defined in Completor.php:1797.


8.4.0 (2024-12-27) (WC)
-----------------------
Features:
- WC: Stock management: automatic sending of stock mutations to Acumulus.

Bugs:
- ALL: Voucher lines should be treated as "vat free", not as "0%".
- ALL: Minor: custom mappings for the packing slip email to and BCC addresses were not
  stored correctly.
- WC: Fatal error: Uncaught TypeError: Acumulus::addShopOrderMetaBox(): Argument #2
  ($shopOrderOrPost) must be of type WP_Post|WC_Order, WP_Comment given, called in
  class-wp-hook.php on line 324 and defined in acumulus.php:440.

Refactorings:
- ALL: Renamed Source::getTypeLabel() to Source::GetLabel(): Check your mappings!
- Converted legacy completors in Invoice namespace from array to object use, including new
  methods on AcumulusObjects and deep cloning them. Class AcumulusObject no longer
  implements interface ArrayAccess.


8.3.6 (2024-11-27)
------------------
Bugs:
- ALL: TypeError: Siel\Acumulus\Helpers\Form::getAboutBlock(): Argument #1
  ($accountStatus) must be of type ?bool, string given.
- WC: Division by zero in WooCommerce/Collectors/ItemLineCollector.php:72
- ALL: TypeError: Siel\Acumulus\Helpers\FormRenderer::addAttribute(): Argument #3 ($value)
  must be of type array|string|bool|null, int given, called in Helpers/FormRenderer.php on
  line 427 and defined in Helpers/FormRenderer.php:712.
- Form rendering: we encountered some:
  - Violations against the HTML specifications
  - Missing id attributes on `<fieldset>`s, `<summary>`s, and on the wrapper around radio
    buttons and checkboxes. By adding this attribute, they can be individually addressed
    by CSS.
  - Typos.

Testing:
- Added integration tests for our forms (creation, field definitions, and rendering). This
  might help prevent bugs like the TypeError in the FormRenderer (see above).

Refactorings:
- Basic submit structure now created and collected as an AcumulusObject.
- Basic stock management added but not yet operational.
- A lot of ongoing refactorings: clean-up, removing old example code, ...

8.3.5 (2024-11-01) (WC) (actually: all shops that use our own form renderer)
-----------------------
Bugs:
- WC: TypeError: Siel\Acumulus\Helpers\FormRenderer::addAttribute(): Argument #3 ($value)
  must be of type array|string|bool|null, int given, called in Helpers/FormRenderer.php
  on line 427 and defined in Helpers/FormRenderer.php:712.


8.3.4 (2024-11-01) (ALL)
------------------------
Features:
- ALL: to determine which menu items should be shown, an Acumulus API call was made on
  every admin page (to check the account settings). This result is now cached and only
  refreshed on our own pages.

Bugs:
- ALL: Uncaught RuntimeException: "curl_exec(): 28 - Connection timed out ..." lead to
  a WSOD on all admin pages (and client-side pages where Acumulus API calls are made). The
  solution is to fail silently, letting the (admin) page render but without Acumulus
  plugin features.
- ALL: minor: the mail that was sent in those situations did not contain a header.


8.3.3 (2024-10-19) (WC)
-----------------------
Bugs:
- ALL: TypeError: Siel\Acumulus\Helpers\Container::getCompletorInvoiceLines(): Return
  value must be of type Siel\Acumulus\Invoice\CompletorInvoiceLines, null returned in
  Helpers/Container.php:526


8.3.2 (2024-10-19) (WC)
-----------------------
Bugs:
- WC: Error: Class "Siel\Acumulus\collectors\LineCollector" not found in
  WooCommerce/Collectors/LineCollector.php:21.


8.3.1 (2024-10-18) (WC)
-----------------------
Features:
- ALL: Extended batch form features by allowing combined filters and a filter on status.
- WC: Tried to improve accuracy of shipping lines to prevent rounding errors on the total.

Bugs:
- ALL: Help text for (your) phone number on the 'register' form was not used but overruled
  by the help text for the field phone number on the 'mappings' form.

Refactorings:
- ALL: Moved margin scheme handling from the ItemLineCollectors to CompleteMarginScheme.
- ALL: Moved adding vat range from the Line Collector phase to the Completor phase.


8.3.0 (2024-09-26) (MA, JOO)
----------------------------
Minimal requirements:
- This plugin now requires PHP 8.0. This means that support has been dropped for the
  following shop/CMS versions:
    * Joomla 3
    * PrestaShop 1.7
    * VirtueMart 3
  Note that PHP 8.0 already reached its end of life and will no longer receive security
  updates. So, in the NEAR future we will upgrade our minimal requirements to PHP 8.1.

Incompatibilities:
- Mappings: For those who have custom mappings: lots of "objects" were renamed. If, in the
  past, you have defined mappings for order item lines in the 'mappings' form, you MUST
  check and probably adapt those settings. The following properties are no longer
  available. Note that we try to update most of them automatically:
  - invoiceSource::...: use source::...
  - invoiceSource::getSource()::...: use source::getShopObject()::...
  - invoiceSourceType::label: use source:getTypeLabel(2)
  - originalInvoiceSource: ...
  - originalInvoiceSourceType: ...
  - refund: use source::isCreditNote()::...
  - order or refundedOrder: use source::getOrder() resp. source::getParent().
  - refundedInvoiceSource: ...
  - refundedInvoiceSourceType: ...
- Events: For those that have custom code on top of our library: events have been renamed
  and parameters have changed. The customise_acumulus_invoice example plugins that we
  publish have not ye been updated and will thus no longer work.

Features:
- JOO: Native support for Joomla 5, our component and plugins do no longer need the compat
  plugin. However, please note that VirtueMart still needs that plugin. HikaShop has its
  own compat layer, so probably does not need that plugin.
- ALL: improved register message after installation.

Bugs:
- OC: Strict typing error in AcumulusEntry::getSourceId().
- PS: Settings form: set of order statuses to trigger sending the invoice data to Acumulus
  was not stored or displayed correctly.
- ALL: mapping for a metadata value may be the constant null, but this was rejected when
  expanding mappings (as fields may not set to null).
- ALL: Only still valid Pro-support should be listed in the About section on our forms.
- ALL (minor): Comparison of codes of Messages changed due to changes in how PHP8 compares
  strings and numbers.

Refactorings:
- ALL: Removed class Creator (replaced by Collectors)
- ALL: Introduced Item and Product as wrapper/adapter around item lines and product
  objects from the web shop. Extracted common wrapper/adapter code into WrapperTrait.
- ALL: Started using Line collectors and completors the new way, gradually moving code
  from the old Creator and Completor to the new Collectors, Mappings, and Completors.
- ALL: Removed the old Creator and Completor code from the Invoice namespace and moved the
  Completors\Legacy namespace "back" to invoice. This lead to many clean-ups of no longer
  used code all over the code base.
- ALL: Removed vat breakdown from Totals. A Totals object now merely represents an amount
  (broken down in a price inc, price ex, and vat amount).
- ALL: Moved to using DateTimeImmutable and, as a consequence, DateTimeInterface for type
  hinting.


8.2.0 (2024-07-11) (ALL)
------------------------
Features:
- ALL: A new setting has been introduced that allows adding the e-invoice to the Acumulus
  invoice PDF when it gets mailed to the customer either on sending the invoice data to
  Acumulus or using the specific buttons to mail the invoice PDF (on the invoice list
  and/or details screens).

Bugs:
- ALL: If tax is based on shipping address, and the shipping country differs from the
  invoice country, the vat rate lookups/checks would still use the invoice country.


8.1.5 (2024-07-02) (OC)
-----------------------
Bugs:
- ALL: External links on our forms: were not all opened in a new tab; and some referred to
  outdated URLs.
- ALL: Field product name on the 'mappings' form does not correspond with mapping for
  product name. As it was not yet really used, this is no big deal.
- ALL: Completing invoice lines: computing unitprice based on unitpriceinc with a vatrate
  of -1 (vat free) was not done correctly. Known usages: OC.
- OC4: Source::getPaymentMethod(): storage of this info has changed in OC4 compared to OC3
  and a 2nd time within OC4.
- OC4: Order statuses were not presented by their name (but by their language_id).

Refactorings:
- OC: Implemented the new "collect-complete architecture" for OpenCart.


8.1.4 (2024-05-22) (JOO)
------------------------
Bugs:
- JOO3: TypeError: Return value of Siel\Acumulus\Joomla\Helpers\Event::getCMSApplication()
  must be an instance of Joomla\CMS\Application\CMSApplicationInterface, instance of
  Joomla\CMS\Application\AdministratorApplication returned in Joomla/Helpers/Event.php:51
- JOO3: Return value of AcumulusController::getApp() must be an instance of
  Joomla\CMS\Application\CMSApplicationInterface, instance of
  Joomla\CMS\Application\AdministratorApplication returned.
- VM: TypeError: Argument 4 passed to
  Siel\Acumulus\Joomla\VirtueMart\Completors\Legacy\Creator::getVatData() must be of the
  type int, string given, called in Joomla\VirtueMart\Completors\Legacy\Creator.php on
  line 162 and defined in Joomla\VirtueMart\Completors\Legacy\Creator.php:414.
- VM: TypeError: Argument 2 passed to
  Siel\Acumulus\Joomla\VirtueMart\Completors\Legacy\Creator::getVariantLines() must be of
  the type int, string given, called in Joomla\VirtueMart\Completors\Legacy\Creator.php on
  line 181 and defined in Joomla\VirtueMart\Completors\Legacy\Creator.php:201.


8.1.3 (2024-05-21) (JOO)
------------------------
Bugs:
- JOO: Update procedure was not adapted to new library location.


8.1.2 (2024-05-15) (PS, WC)
---------------------------
Features
- ALL: Message "Required property vatRate is not set ..." prevents the xml-message being
  sent and subsequently, as the request will fail, be part of the mail. Add it as a
  meta-error and do send the message, even knowing it will fail.

Bugs:
- ALL: NOTICE ...\Collector::expandAndSet: Siel\Acumulus\Data\EmailInvoiceAsPdf does not
  have a property emailAsPdfType, nor is it considered metadata.

Refactorings:
- PS: Implemented the new "collect-complete architecture" for PrestaShop.
- PS: Better handling of discounts in refunds, including adding tests for it. This
  revealed that PS does make errors itself. We follow the shop, so we follow the incorrect
  calculations the shop makes.
- PS: Use Version::VERSION to get the version, not _PS_VERSION_ or AppKernel::VERSION.
- ALL: Renamed some meta-keys (key + string value).


8.1.1 (2024-01-04) (WC)
-----------------------
NOTE: code changes are breaking backwards compatibility, but as the changed methods are
  only called form within the library, this may only be a problem with custom code.

Bugs:
- WC: Metadata in an in-memory Order object does not get updated when AcumulusEntry
  metadata updated or deleted. The Acumulus status meta-box does not get updated after
  clicking the "Send Now" button, even while the data has been successfully sent to
  Acumulus.


8.1.0 (2024-01-03) (JOO, WC)
----------------------------
Features:
- WC: We now support HPOS.

Bugs:
- JOO: Message on uninstall: com_acumulusInstallerScript::preflight(): Argument #2
  ($parent) must be of type Joomla\CMS\Installer\Adapter\ComponentAdapter,
  Joomla\CMS\Installer\Adapter\PluginAdapter given.

Refactorings:
- JOO: Implemented the new "collect-complete architecture" for VirtueMart and HikaShop.


8.0.2 (2023-09-21) (MA+WC)
--------------------------
Bugs:
- WC: Typo in default mapping for field VatNumber: Vat Number instead of VAT Number for
  WooCommerce EU/UK VAT Compliance plugin.
- MA 2.4.6: The Zend_Mail framework has been removed in favor of the Laminas mail library.
- MA: Form values were not set for elements with different id and name (array style name).
- MA: Radio options with an "empty" value (e.g. 0 or "0") did not have their button
  rendered.
- countryautoname should be sent alongside countrycode, as the default implies that
  country will not be looked up. Also added a configuration option and a UI to specify
  the behaviour of these fields.

Features:
- Updated the PHP compatibility table by adding a column for PHP 8.2.

Refactorings:
- MA: Implemented the new "collect-complete architecture" for Magento.
- ALL: many small, but possibly breaking, changes:
  - Source: not all getters were correctly implemented. However, most errors had low risk
    of appearing in live situations.
  - Source: stricter type handling.
  - Extract number from order or invoice reference: changed, should be more logical now.
  - Call parent method more often, even if it is currently a no-op.
  - Moved field Salutation from Address to Customer as there is no field altSalutation.


8.0.1 (2023-07-25) (WC)
-----------------------
Bugs:
- DomainException: type: not an allowed value: 0 in .../Data/AcumulusProperty.php:207.
- TypeError: Siel\Acumulus\Helpers\Countries::isNl(): Argument #1 ($countryCode) must be
  of type string, null given, called in src/Completors/Legacy/Completor.php on line 1531
  and defined in src/Helpers/Countries.php:26
- TypeError: preg_replace(): Argument #3 ($subject) must be of type array|string, int
  given in src/Completors/Invoice/CompleteInvoiceNumber.php:51
- Error: Call to protected method
  Siel\Acumulus\Completors\Legacy\Completor::changeInvoiceToConcept() from context
  'Siel\Acumulus\Completors\Legacy\CompletorInvoiceLines' in
  siel/acumulus/src/Completors/Legacy/CompletorInvoiceLines.php:262
- PC|OC: PHP Fatal error: Uncaught Exception: Error: Duplicate entry '1' for key
  'acumulus_idx_entry_id'<br />Error No: 1062<br />INSERT INTO `oc_acumulus_entry`
  (store_id, entry_id, token, source_type, source_id, updated) VALUES (0, 1, 'Send locked,
  delete if too old', 'Order', ..., '...')
  Drop and recreate index (to make it non-unique). Already done in 6.0.0, but the create
  statement was not adapted, so users who started using this module after 6.0.0, but
  before 8.0.1, will still get a unique index.


8.0.0 (2023-07-14) (WC)
-----------------------
Features:
- Support for alternative address. You can now send the invoice and shipping address to
  Acumulus and you define which address becomes the main and which becomes the alternative
  address.

Bugs:
- ValueError: DOMDocument::loadHTML(): Argument #1 ($source) must not be empty
  in siel/acumulus/src/Helpers/Util.php:251.
- HS: TypeError: date(): Argument #2 ($timestamp) must be of type ?int, string given in
  siel/acumulus/src/Joomla/HikaShop/Invoice/Source.php:192.
- OC: Fatal error: Uncaught TypeError: Argument 1 passed to ...eventViewSaleOrderInfo()
  must be of type int, string given, called in
  admin/controller/extension/module/acumulus.php on line 221.

Refactorings:
[Most of these refactorings are not yet completely finished. To start with, they will only
 be available for WordPress/WooCommerce. Other webshops will follow soon.]
- Introduced classes Currency and Totals that contain the meta information and can act on
  it, convert amounts resp. complete totals.
- Class Source:
  - Throws on construction based on an invalid source, making isValid() superfluous.
    Therefore, isValid() has been removed.
  - Added getTypeLabel(int $case) to get the translated source type.
  - Added some methods to traverse from credit note to order and to find out if a given
    Source is an order or a credit note. Useful in mapping definitions.
  - getCreditNotes() does no longer return null but this for a credit note.
  - getCurrency() and getTotals() to use the new Currency and Totals classes.
- Renamed ShopCapabilities::getShopDefaults() to ShopCapabilities::getDefaultShopConfig()
  and added ShopCapabilities::getDefaultShopMappings(). Moved all mappings in the
  getShopDefaults() of each shop to getDefaultShopMappings().
- Renamed Config::InvoiceDate_... constants to Config::IssueDateSource_...
- Class Creator and Completor: extracted single task completors into the new Completors
  namespace.
- Default source for the invoice number changed to the (recommended) "Let Acumulus create
  the invoice number".
- Complete overhaul from array to "smart" objects.
  - Test set of orders and credit notes to check the correct working of the module
    when making changes.
  - More exact way of defining field references. It is also more self explaining.
  - Increasing type correctness.
  - Better DX (fewer errors when developing software).
- WC: libAcumulus is now added to the plugin via composer, i.e. via a vendor folder in the
  plugin folder, as WordPress does not offer a central vendor folder.


7.6.8 (2023-06-11) (JOO)
------------------------
Bugs:
- HS: AcumulusController::invoice(): Argument #1 ($orderId) must be of type ?int, string
  given, called in plugins/hikashop/acumulus/acumulus.php on line 135.
- PS: Nauwkeurigheid van bedragen bij creditfacturen is slechter dan aangenomen, precisie
  is nu op 1 cent gezet.
- WC: TypeError: DateTime::createFromFormat() expects parameter 2 to be string, null given
  in wp-content/plugins/acumulus/lib/siel/acumulus/src/Shop/AcumulusEntry.php:230.

Refactoring:
- ALL: Use distinct messages for the cases where an invoice is not sent because a lock
  exists versus a lock could not be obtained.
- PS: Use Appkernel::VERSION as version not the indirect _PS_VERSION_.


7.6.7 (2023-03-30) (PS)
-----------------------
Bugs:
- PS: Error: Unsupported operand types in ..PrestaShop\Invoice\Creator->mergeProductLines.
  Actually this looks like a corrupt database, but maybe there is indeed just no product
  detail info for a given order line.


7.6.6 (2023-03-05) (WC)
-----------------------
Bugs
- WC: TypeError: substr() expects parameter 1 to be string, null given in
  FormHelper.php:207.


7.6.5 (2023-03-02) (JOO+PS+WC)
------------------------------
Bugs:
- PS: Wrong conversion specification in sprintf() in AcumulusEntryManager::insert.
- JOO4: Call to undefined method Joomla\CMS\Installer\Adapter\ComponentAdapter::get(),
  Extension Update: Custom install routine failure.
- WC: PHP Fatal error: declaration of WooCommerce\FormHelper::getMeta() must be compatible
  with parent definition.
- WC: TypeError: Return value of Siel\Acumulus\WooCommerce\Helpers\Token::getMetaDataValue()
  must be of the type string or null, bool returned.


7.6.4 (2023-02-07) (MA+PS)
--------------------------
Features:
- PHP8.2 awareness: removed use of a dynamic property in class Log.
- ALL: Fatal errors will now log stack trace (fallback for when mail does not work).

Bugs:
- MA (+ some other?): FormHelper::getMeta() could return null, leading to errors. This
  method will now return an empty array when there is no meta field.
- MA: Magento\Helpers\Registry.php(49): substr(): Argument #3 ($length) must be of type
  ?int, bool given.

Refactorings:
- MA: Added strict typing (PHP7.4 level).


7.6.3 (2023-02-06) (JOO)
------------------------
Features:
- PHP8.1 awareness: Added the #[ReturnTypeWillChange] attribute where necessary. Turned
  out to be needed in only 1 place, code that isn't yet functional.
- PHP8.2 awareness: Added the #[SensitiveParameter] attribute to all parameters that may
  contain the Acumulus API password. This syntax is seen as a comment in PHP 7.4 and
  ignored as an attribute in PHP 8.0 and 8.1, so this is a forward compatible change.
  Notes:
  - It is unclear whether this attribute needs to be repeated on overriding methods. For
    now this is not done, so this might turn out to be a documentation-only feature. We
    will test this on PHP 8.2 when possible.
  - For now, only the password used to connect to the Acumulus API is considered
    sensitive. Privacy-related client data, e.g. (e-mail) addresses, are not protected
    intrinsically, though, the parameter being the whole message to send to Acumulus, they
    will often be protected as well.
  - For years, our own logging already masks passwords. This will not change by this
    feature.


Bugs:
- JOO3: Logging did no longer work. (and JOO4?)
- HS: Revisit/improve commit 2021-01-26 (6.2.0): HS 4+ has a setting on shipping methods
  "Automatic taxes"/"Automatische belastingen" that determines [...]. Improvement: if a
  product line has no vat class (probably vat free) the amounts of the weighed shipping
  lines would not add up as no line would be created for the missing vat class.


7.6.2 (2023-02-01) (OC+WC)
--------------------------
Features:
- OC: Support for OpenCart 4. Note that OpenCart 4 will only run on PHP 8 and seems to
  contain some errors regarding tax totals not including tax on shipping costs (and
  therefore not in the amount to be paid).

Bugs:
- WC: Error after fresh install: Plugin kon niet worden geactiveerd omdat hij een fatale
  fout veroorzaakt.
- OC,PS (and perhaps others): test to see if new order status is in set of order statuses
  on which to send the invoice data to Acumulus should not use strict typing.
- OC: Define title for back button.
- ALL: Acumulus customise invoice module may need access to container without having
  creating it, place the instance in a public static property.


7.6.1 (2023-01-24) (PS)
-----------------------
Features:
- ALL: The batch form now allows white space (at the start or end) in the
  from-to fields which will be removed. This allows for easier copy & paste from
  order lists.

Bugs:
- PS: Error after fresh install: Type Error: Return value of
  \Siel\Acumulus\PrestaShop\Config\ConfigStore::load() must be of the type
  array, bool returned.
- PS: Some changes had to be made to be compatible with PS 8.0.
- ALL: TypeError: Mailer::sendInvoiceAddMailResult(): Argument #3
  ($invoiceSourceReference) must be of type string, int given.

Refactorings:
- ALL: Shop/InvoiceManager.php: made trigger... methods abstract, as all shops
  implement them.
- ALL: protected method InvoiceManager::getInvoiceAddResult() renamed to
  createInvoiceAddResult().


7.6.0 (2023-01-17) (WC)
-----------------------
Features:
- ALL: A new setting "Do you charge EU VAT?" replaces the setting "Which tax
  classes define EU vat rates?" and this new setting is only used in case no
  choice can be made between EU VAT and Dutch VAT.
- WC: Support for the free version of the "EU/UK VAT Compliance for WooCommerce"
  plugin (from David Anderson). Especially the setting "Tax classes used for
  customer place-of-supply goods" is used to select the vat type for an invoice
  where the vat rates of the country-of-supply are the same as in the
  Netherlands.
  NOTE: This setting trumps the new setting introduced above, so, please update
  this setting when you change from Dutch to Foreign VAT or back!!!
  NOTE: vat exempt invoices are part of the premium version of this invoice. We
  don't currently have the code of that version, so we cannot know what meta key
  is used to store vat numbers. Please let us know if you have this plugin.

Bugs:
- We do no longer throw an exception when the HTTP status code and the response
  status are inconsistent. The Acumulus API can return inconsistent status codes
  for some calls.
- Number class: We do no longer require float values to be strict floats, but
  they must be convertible to float (in a rather strict sense). This will
  prevent errors like TypeError: Argument 2 passed to Number::floatsAreEqual()
  must be of the type float, string given, defined in Number.php:76.
- WC: TypeError: Siel\Acumulus\WooCommerce\Helpers\Token::getObjectProperty():
  Return value must be of type ?string, array returned in getObjectProperty:31.

Refactorings:
- Introduced PHP 7.4 syntax constructions all over the code meaning an older
  version of PHP now will fail fatally (without a proper warning).
- We are now using "declare(strict_types=1);" in almost all source files. This
  may lead to error messages that were not discovered during testing, even
  though we did test a lot and we did discover quite some places where this
  error might occur.
- Copied (and improved) class Token to Field and added tests for it. However,
  this new class is not yet used in the rest of the code.
- Renamed AboutBlockTranslations to AboutFormTranslations.
- Prettier logging (prevent escaped double quotes in meta values).


7.5.0 (2022-12-09)
------------------
Requirements:
- PHP 7.4 is now the minimally required version.
- PHP 8.0 and 8.1 have been tested and do work.
- PHP 8.2 has not yet been tested.

Features:
- MA: Added buttons to the invoice status screen to mail the Acumulus invoice or
  packing slip.
- ALL: The messages on the batch form are now more precise and clearer.
- ALL: The "About" block on our forms will show fewer sections when the account
  data has not yet been completed or is incorrect. This prevents duplicate
  messages saying "no contract data yet".
- WC: Support for the "WooCommerce EU VAT Number" plugin (from WooCommerce).

Bugs:
- MA2.4: Finally tested with Magento 2.4 and PHP 8.1. Below the findings:
- MA: <details> sections could not be opened and remained closed.
- MA: config form: Error: Payment model name is not provided in config!
- MA: Automatically sending invoice data to Acumulus on Magento invoice
  creation (instead of order status change) did not work.
- MA: TypeError: Siel\Acumulus\Helpers\Number::isZero(): Argument #1 ($f1) must
  be of type float, null given.
- MA: Our severity "exception" had no mapping to a Magento severity.
- MA: ResourceCollection instance for Acumulus entries was reused instead of
  recreated, leading to same results being returned for each subsequent query.
- MA: ResourceCollection instances for orders or credit notes were reused
  instead of recreated, leading to same results being returned for each
  subsequent query.
- ALL: Edge case: If an order has no order lines, an invoice without invoice
  lines would be sent, which is not permitted by the Acumulus API.
- ALL: PHP Warning: Undefined array key "meta-vatrate-range-matches" in
  .../Invoice/Completor.php on line 1291.
- OC: Styling improvement on our forms (markup element).
- JOO: The 'cancel' button gave a fatal, will now redirect to the dashboard.
- ALL: PHP 8.1: Deprecated: DOMDocument::createTextNode(): Passing null to
  parameter #1 ($data) of type string is deprecated in .../Util.php on line 104.

Refactorings:
- ALL: Introduced a 'collection' form element that is treated as a simple
  element, thus 1 label and description and the collection of subfields is
  rendered without additional markup. This was needed to be able to show the
  documents part on the InvoiceStatusOverview block in Magento.
- ALL: The meta field on our forms is now placed in the first fieldset/details
  element to prevent problems with rendering. PrestaShop requires this anyway,
  so that code was lifted to the general FormHelper.
- ALL: Created an empty ModuleSpecificTranslations base class, to be overridden
  by the webshops.
- ALL: So far the phpdoc comments in this code were only used within PhpStorm.
  They have now been fed to a phpdoc generator, which revealed that some changes
  needed to be made.
- ALL: Refactored InvoiceManager::createAndSend() from a large set of nested
  if-else constructs to a set of early returns.
- ALL: - Use full path on include/require[_once] (do not rely on include_path).

- The refactorings below are in a "Development/Proof of Concept" phase. The old
  (creator/completor) code is still there and is still the code that gets called
  when invoked by an actual plugin:
- Introduced "smart" objects for the invoice-add array parts (customer, invoice,
  line, emailaspdf) on top of the base classes AcumulusObject, AcumulusProperty,
  MetadataProperty, and MetadataValue. Unused as long as the next point has not
  been realised.
- TODO:
  Redefined the creator and completor phase into a collector and a completor
  phase, where the collector phase is dumber and only contains data retrieval
  from the shop data, enriched with metadata to guide the completor phase.
  The completor phase now only acts on the collected data, possibly guided by
  the metadata, to create the Acumulus invoice. This phase should now be fully
  shop independent.


7.4.3 (2022-10-31) (All but MA)
-------------------------------
Features:
- All: Added possibility to refer to the translated term for "Order" or
  "CreditNote" in field references. You can use:
  - [InvoiceSourceType::label] for the current invoice to send (order or credit
    note)
  - [originalInvoiceSourceType::label] for the order of this credit note if is a
    refund, or the order itself.
  - [refundedInvoiceSourceType::label] for the order if it is credit note, empty
    otherwise.
  The default configuration value for the "description" field will use these new
  values.
- Added a field "Bcc e-mail address for the packing slip" to the "Documents" -
  "Packing slip" section of the Acumulus settings. The "To address" now also
  accepts multiple addresses.
- PS+JOO: Added mail (pdf document) buttons on Acumulus invoice status overview.
- WC+OC: Improved styling of document links and buttons on status overview.

Bugs:
- All: configuration fields for mail-addresses that allow field references
  should not be of html type="email" and should only be validated as containing
  valid mail addresses when no field references are used.


7.4.2 (2022-10-25) (OC)
-----------------------
Features:
- OC: Added mail (pdf document) buttons on Acumulus invoice status overview.
- To improve showing the documents links and buttons on the invoice status
  overview (on the order detail page), the 'markup' field type of our own form
  handling now accepts an array of 'inputs'. These will be rendered (by our own
  form rendering) as the 'contents' of the 'markup' field. This allows to place
  multiple buttons on 1 line. (Feature added to FormRenderer only, not yet to
  FormMapper).

Bugs:
- Note that this is the first version released for OC that contains the bug
  solutions from 7.4.0.


7.4.1 (2022-10-25) (WC)
-----------------------
Bugs:
- Error in e-mail address validation on forms.


7.4.0 (2022-10-24) (WC)
-----------------------
Features:
- WC: Added buttons to the invoice status screen to mail the Acumulus invoice or
  packing slip.
- WC: Added icons to open the Acumulus invoice or packing slip from the order
  list page.
- Added support for the email packing slip as pdf API call.

Known problems:
- Field references (token expansion) when manually e-mailing invoice or packing
  slip.
- InvoiceStatusForm contains WooCommerce specific code: refactor!

Bugs:
- OC: Siel\Acumulus\OpenCart\Shop\AcumulusEntryManager::getByInvoiceSource():
  Return value must be of type Siel\Acumulus\Shop\AcumulusEntry, null given.
- OC: Exception: Error: Could not load model Catalog/Product! in model:97.

Refactorings:
- Renamed Acumulus::getPackingSlipUri() to Acumulus::getPackingSlipPdfUri().


7.3.3 (2022-10-09)
------------------
Bugs:
- All: It might be possible to determine the vat rate for a line that has
  multiple vat range matches, if and after the vat type has been determined.
  Use this to prevent warnings/errors for this edge case.
- WC: SearchToken: WooCommerce can have the property customer_id set to null,
  while the data store does contain a non-null value.
- OC: Uncaught Error: Call to undefined method
  Siel\Acumulus\OpenCart\Helpers\Registry::getEventModel() in
  /system/library/siel/acumulus/src/OpenCart/Helpers/OcHelper.php:736.

Refactorings:
- WC: Property customer_user is legacy, is now customer_id.
- WC: Do not crash, e.g. with a "Class 'WC_Logger' not found" if WC has not yet
  been activated.


7.3.2 (2022-08-08)
------------------
Bugs:
- TypeError: Argument 3 passed to
  Siel\Acumulus\WooCommerce\Invoice\Creator::isPriceIncRealistic() must be an
  instance of WC_Product or null, bool given, called in
  wp-content/plugins/acumulus/lib/siel/acumulus/src/WooCommerce/Invoice/Creator.php
  on line 140 and defined in
  wp-content/plugins/acumulus/lib/siel/acumulus/src/WooCommerce/Invoice/Creator.php:667
- Een fout van het type E_ERROR werd veroorzaakt op regel 120 van het bestand
  wp-content/plugins/acumulus/lib/siel/acumulus/src/Config/ConfigUpgrade.php.
  Foutmelding: Uncaught RuntimeException: Requirement check failed: The
  minimally required PHP version for the Acumulus module will soon be raised to
  PHP 7.4. Start upgrading your PHP version now ...


7.3.1 (2022-06-27)
------------------
Bugs:
- VM, but probably ALL: TypeError: Argument 1 passed to
   Siel\Acumulus\Invoice\CompletorStrategy\ApplySameVatRate::tryVatRate()
  must be of the type float, null given, called in ApplySameVatRate.php on line
  45 and defined in ApplySameVatRate.php:58.
- ALL (PHP 8.1): Deprecated Functionality: preg_split(): Passing null to
  parameter #3 ($limit) of type int is deprecated.


7.3.0 (2022-06-13)
------------------
Features:
- Added Pro-support:
  * An "Activate pro-support" form to register your pro-support token bought
    from Siel Acumulus.
  * Added pro-support info to the "About" block.
  * Added pro-info support to the mail-template when creating an issue from the
    "About" block.
- Extracted Form::getInformationBlock() into a separate class AboutForm and
  renamed it to getAboutBlock.

Bugs:
- ALL: The server name was not correctly extracted from the $_SERVER info and
  always resulted in example.com.
- MA: Form <details> rendering went wrong.


7.2.3 (2022-06-01) (HS, WM)
---------------------------
Features:
- JOO: Changed Joomla specific parts to run on Joomla 4. Note: VirtueMart will
  NOT run on Joomla 4, even not VM4! HikaShop: yet to be tested.
- ALL: Allow also warnings when checking requirements.

Bugs:
- ALL: PHP Warning:  Undefined array key "vattypeid" in Invoice/Completor.php on
 line 1214.
- WC: Argument 1 passed to Siel\Acumulus\Helpers\Number::floatsAreEqual() must
  be of the type float, string given, called in WooCommerce/Invoice/Creator.php
  on line 435.
- ALL: PHP Warning: count(): Parameter must be an array or an object that
  implements Countable in Shop/InvoiceStatusForm.php on line 670.
  You will notice this error when turning a concept into a definitive invoice
  and then visiting the order page. The Acumulus tab or box will show an error
  message instead of the details of the definitive invoice.


7.2.2 (2022-05-13) (OC, PS)
---------------------------
Features:
- PS, OC: Added crash reporting (explained in the notes for 7.1.0).

Bugs:
- PHP 7.4 syntax: ParseError: syntax error, unexpected '=' in
  ApiClient/Acumulus.php:858.
  To solve: upgrade to PHP 7.4 or change the given line to:
    $logLevel = $logLevel ?? Severity::Exception;


7.2.1 (2022-05-12) (MA, WC)
---------------------------
Bugs:
- MA: Magento coding standards: The use of function assert() is forbidden.
- WC: PHP Fatal error: Uncaught Error: Class 'Siel\Acumulus\Invoice\Source' not
  found in acumulus.php:788.


7.2.0 (2022-05-10)
------------------
Features:
- ALL: The API web server will no longer send e-mails on errors or warnings. The
  error handling of this plugin is robust enough to catch and communicate all
  errors and warnings issued by the API web server. So we do no longer send the
 e-mail address as provided by you to the server. The plugin will continue
  to use it to send e-mails from your web shop to you.
- ALL: Added support for the 'invoicetype' parameter (reminder or normal
  invoice) in the Acumulus::getInvoicePdfUri() method.
  NOTE for developers: this makes this call backwards incompatible if you did
  call it with the $applyGraphics parameter set!
- WC, MA: Added crash reporting (explained in the notes for 7.1.0).

Bugs:
- Text unknown severity in Log for success messages.
- CRITICAL Uncaught Error: Call to a member function toLogMessages() on null in
  InvoiceAddResult.php:294.


7.1.1 (2022-05-03) (JOO)
------------------------
Bugs:
- Error checking on forms was not yet adapted to new way of error reporting from
  the communication layer. Impossible to enter account details on the config
  form.
- JOO: Extended error catching to also cover the display() phase of our forms.
- ALL: PHP Deprecated: strpos(): Non-string needles will be interpreted as
  strings in the future. Use an explicit chr() call to preserve the current
  behavior in Helpers\Log.php on line 230.

Refactorings:
- Pulled method checkAccountSettings() from BaseConfigForm up to Form.


7.1.0 (2022-05-02) (JOO)
------------------------
Features:
- JOO: We now look for uncaught errors at the highest level of our operations,
  controller tasks, or event handlers, and log and mail those errors. On Admin
  screens we also display a short error message. The mail should facilitate
  support. Other plugins will follow in future versions.

Refactorings:
- Extracted the environment part out of Config into its own class Environment,
  added database name and version to it, and removed json version from it.
- Redesigned the error handling around the communication with the Acumulus API
  server. The library now better recognises and distinguishes errors at the
  protocol and the application level. By encapsulating this in the ApiClient
  namespace layer, the other code can become more robust as it becomes less
  dependent on specific error codes (that changed form API v4 to v5).
- Introduced AcumulusException and AcumulusResponseException to handle
  communication errors.
- Log class now allows to log exceptions and 'success' messages. A method has
  been added to retrieve all logged messages. This can be used to prevent
  logging messages twice. Log::exception() will already check if an exception
  has already been logged by adding a dynamic property $hasBeenLogged to an
  exception that gets logged.
- Changes to the mailer: getFrom(), getFromName(), and getTo() are now public
  and getTo() is to be overridden to return some kind of administrator e-mail
  address.
- Code documentation: changed {@see ...} with external links to {@link ...}.


7.0.3 (2022-04-20) (WC)
-----------------------
Bugs:
- PHP Fatal error:  Uncaught TypeError: Return value of ConfigStore::load() must
  be of the type array, bool returned in WooCommerce/Config/ConfigStore.php:16.

7.0.2 (2022-04-20) (WC)
-----------------------
Bugs:
- WC: "Je site heeft een technisch probleem: Een fout van het type E_ERROR werd
  veroorzaakt op regelnummer 87 van het bestand .../Number.php. Foutmelding:
  Uncaught TypeError: Argument 1 passed to Number::floatsAreEqual() must be of
  the type float, string given, called in .../WooCommerce/Invoice/Creator.php on
  line 487 and ..."


7.0.1 (2022-04-19) (WC)
-----------------------
Bugs:
- WC: "Je site heeft een technisch probleem: Een fout van het type E_ERROR werd
  veroorzaakt op regelnummer 76 van het bestand .../Number.php. Foutmelding:
  Uncaught TypeError: Argument 1 passed to Number::floatsAreEqual() must be of
  the type float, string given, called in .../WooCommerce/Invoice/Creator.php on
  line 436 and ..."


7.0.0 (2022-04-14) (WC)
-----------------------
Note: Due to the large number of changes, especially the PHP7 strict typing
introduced in many places, this version has only been released for WooCommerce.
Other web shops will follow soon.

Features:
- ALL: At the HTTP level we now send a User-Agent header. For that, we added
  keys cmsName and cmsConfig to the Config. Class ShopCapabilities gives it a
  value for Joomla and WordPress. Presenting it to the user on forms has also
  been adapted accordingly.
- OC: The Acumulus settings form now also appears as a menu-item under "Sales -
  Acumulus". Before, it could only be accessed via "Extensions - Modules - Edit
  (Acumulus module)", so this makes it easier to access the basic settings.

Bugs:
- ALL: Correcting 0% vat to vat free (one of the last phases during invoice
  completion) was not done when 0% is not allowed in the given situation.
- MA (possibly others as well): Free shipping on foreign invoices could get
  Dutch default vat rate assigned (wrong order in strategy ApplySameVatRate).
- MA: PHP7.4 Error : Unparenthesized `a ? b : c ? d : e` is deprecated.
  Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)`.
- ALL: Error in help text for 0% vat rate class setting: %-sign not properly
  printed.

Refactorings:
- PHP 7.2 is now the minimal requirement. we DO use language constructs that are
  new to PHP 7.2, so this module WILL fail fatally when you are still running an
  older PHP version.
- Refactored the ApiClient namespace to better separate the different layers and
  concerns:
  - Separate HttpRequest and HttpResponse classes that implement HTTP(S)
    communication and error handling, with no Acumulus knowledge at all. This
    facilitates communication with other services (e.g. GitHub or VIES).
  - A ConnectionHandler class that supports connection reuse. This prevents
    time costly HTTPS connection set-ups during a PHP request.
  - Renamed Result to AcumulusResult, and in the Invoice namespace: renamed
    Result to InvoiceAddResult which also no longer extends (Acumulus)Result.
  - AcumulusRequest and AcumulusResult classes that implement Acumulus Api
    knowledge like the submit and response structures, and error handling at the
    Acumulus level.
  - The Acumulus class still represents the Acumulus service calls as PHP
    methods.
- Refactored upgrading config values: we now store the actual config version
  with the other config values:
  - We check for an update on every load() of the config, thus independent of
    a plugin update.
  - The version of the config is now in line with the library version, not the
    plugin version. Again, this allows to separately update the library.
  - Plugins should still force setting the initial version on installation, but
    do no longer have to initiate updates to it.
  - Data model updates should still be applied by the plugin as this is often
    done in a host environment specific way. So with data model changes a new
    version of a plugin is still needed together with an update of the library.
  - Update methods are separated into its own class ConfigUpgrade, it became too
    much code to remain part of Config.
- Refactored Message creation, copying, and collection and, in doing so, removed
  the need for the static Translator::$instance property.
- PS: Use of deprecated Tab::getIdFromClassName() replaced.
- PS: Config upgrades do not have to be repeated in install files: removed all
  but the latest call to Config(Upgrade)->upgrade().
- MA1: Removed MA1 specific code and constructions needed for MA1
  (Container::setBaseDir()). Merged code, classes and method overrides, in
  namespace \Siel\Acumulus\Magento\Magento2 into \Siel\Acumulus\Magento.
- WC2: Removed WC2 specific code (\Siel\Acumulus\WooCommerce\WooCommerce2
  namespace) and constructions needed for WC2 (version checks, hooks, argument
  number and order passed to hooks, ...)
- OC1|OC23: Removed OC1 and OC23 specific code (their namespaces and
  constructions needed to determine version, ...). Refactored the registry
  accordingly.
- Defined parameter and return types to methods where applicable and according
  to PHP 7.1 language constructs, i.e:
  - nullable types, void return type.
  - And thus not: object instead of StdClass (7.2), co and contravariance (7.4),
    typed properties (7.4).)
- Added visibility to class constants.


6.4.2 (2022-03-24) (JOO, but retracted)
---------------------------------------
Bugs:
- HS: property order->order_shipping_params may be present but be an "empty"
  object (order->order_shipping_params->prices is an empty array).
- JOO,OC,PS: Error "Error: Invalid default value for 'updated' Error No: 1067
  CREATE TABLE IF NOT EXISTS `acumulus_entry`" in MySql when NO_ZERO_DATE and
  strict mode are enabled. Solved by requiring MySql 5.6+ so we can define
  multiple columns with default current_timestamp.

6.4.1 (2022-02-23) (MA2)
------------------------
Bugs:
- MA24: Magento now requires a declarative data schema and does no longer allow
  Setup/InstallSchema.php, Setup/UpgradeSchema.php, and Setup/Uninstall.php.
- MA24: Data patches are also applied on install: automated installation failed
  because no config was stored yet (Fatal error: Uncaught TypeError: Argument 1
  passed to Config::save() must be of the type array, bool given, called in
  Config.php on line 1469).

Refactorings:
- MA: Removed a number of warnings generated by the automated technical review.
- MA24: Attribute setup_version in etc/module.xml has been deprecated: we have
  removed it.
- ALL: As of this version we will store the data model version in our own config
  and gradually phase out other ways of keeping track of it.

6.4.0 (2022-02-21)
------------------
Features:
- ALL: Added support for the vat rules regarding the UK and Northern Ireland!
    * For the UK it is now possible to use the UK vat rates with vat type = 7
      (other foreign vat).
    * Addresses in Northern Ireland are given country code 'XI', and for this
      "country" vat types 3 (EU reversed vat) or 6 (EU vat) are allowed (for
      goods) as well as vat types = 1 (Dutch vat with vat or vat free) or 7
      (other foreign vat) for services.
- ALL: Added support for the API v5.0 changes to the vat_info API call: Vat
  rates for GB are now (again) returned, but with an additional field: the
  'countryregion'. This allows to decide if a country is EU, or if special vat
  arrangements are made (UK and Northern Ireland). Note that with this change in
  the API, older versions of this library will now erroneously decide that GB is
  EU!

Bugs:
- ALL: Warnings can be added to the invoice data that is sent to Acumulus. These
  are placed under the key Meta::Warning. If multiple warnings were added, it
  should become an array instead of a single string. This was not handled
  correctly in all places leading to this PHP error message: CRITICAL Uncaught
  Error: [] operator not supported for strings.
- WC: Responding to order status changes did not work completely correctly:
  - Starting state of new orders (normally pending) was not reacted on.
  - Custom states defined by the "WooCommerce order status manager" were not
    reacted on.
- PS: Assumed precision of compute vat amount turns ou to be too high. The
  precision has been reduced to about half a cent.
- VM: Call to method VirtueMartModelOrders::getMyOrderDetails(), where
  VirtueMartModelOrders::getOrder() is the correct method to call (no need for
  access checks).
- ALL: Invoice status form: erroneous assignment to local variable $description
  when concept was not found.
- ALL: Error in config::getHostName(): using non-bracketed assignment operator
  in if condition. Minor consequences.

Refactorings:
- VM: Logic of Joomla/VirtueMart/Invoice/Source::getInvoiceReference() and
  getInvoiceDate() moved to getInvoiceReferenceOrder() resp.
  getInvoiceDateOrder().
- ALL: Added the vat region constants and vat type 7 (ForeignOtherVat). Renamed
  vat type 6 to ForeignEuVat, including variables, methods, and configuration
  values that are named after that vat type. This includes an upgrade function
  that renames the config variables.
- ALL: Gave the Config::Nature_... constants other values, so they can be
  treated as combinable bit values, including an upgrade function.
- ALL: Completor::getVatRatesByCountryAndInvoiceDate() now returns an array of
  vat infos instead of an array of vat rates.
- ALL: Result::simplifyResponse() now changed to return an empty list when
  a list is expected but the main response key was not found: This probably
  indicates an error but that should be found out e.g. by checking the status or
  the messages. simplifyResponse() is an internal method but influences the
  return value of Result::getResponse().

6.3.7 (2022-01-22)
------------------
Bugs:
- PS: Notice undefined index unit_amount in Creator.php, line 166

Refactorings:
- Documentation
- Case of Classes was not always consistent (API => Api)

6.3.6 (2022-01-15)
------------------
Features:
- JOO: Add library version to log lines.

Bugs:
- VM: In some cases amounts are calculated based on vat rates. The "vat free"
  vat rate is stored as -1, to be able to differ it from the "0% vat rate". But
  this means that the calculations should use 0% instead of -1%. This affects
  all plugins, but it looks like that only for VM it can really cause problems.
- VM: Use of is_numeric() replaced by ctype_digit() (or other more or less
  similar functions) as is_numeric()'s definition of a string being numeric is
  too accepting for our case. This affects all plugins, but it looks like that
  only for VM it can really cause problems.
- WOO: When creating variant lines, we should ignore order item metadata that is
  an array (like we already do for serialized data) or starts with an underscore
  (_) as that (almost) always also is hidden metadata.

Refactorings:
- Documentation typos.
- Tag <sourceuri> now points to GitHub instead of www.siel.nl.

6.3.5 (2021-11-15) (WC)
-----------------------
Bugs:
- WC: Ignore hidden metadata from the "WooCommerce TM Extra Product Options"
  plugin when adding child lines for variants/options.
- WC|MA (and maybe others): een factuur met verlegde btw en gratis verzending
  levert een waarschuwing en dus een conceptfactuur op omdat het 'standaard'
  btw-tarief van verzendkosten aan de gratis verzending word toegekend i.p.v.
  0%.

Refactorings:
- WC: de method WC_Logger::add() is deprecated. Onze log helper is hier op
  aangepast Zichtbaar gevolg: de datum wordt nu in de ISO-standaard afgedrukt.

6.3.4 (2021-10-22)
------------------
Bugs:
- WC: Error on php 8: Uncaught TypeError: Unsupported operand types: string /
  int in .../Creator.php:429 with free shipping or in-store pickup.

6.3.3 (2021-09-23)
------------------
Bugs:
- WC: Regression: the solution regarding the problem with our "please rate our
  plugin" message introduced another error in the "invoice status overview box"
  with as result that it did no longer autoload the actual content.
- WC: Notice: undefined index 'class' ...
- ALL: Message "Bedankt voor het beoordelen van de Acumulus plugin/module"
  verscheen 2 keer.

6.3.2 (2021-09-21)
------------------
Bugs:
- ALL: Invoice status overview: Acumulus no longer distinguishes between Dutch
  and EU vat. As a result, the amounts in the get_entry API call changed,
  leading to warnings about incorrect vat and amount ex vat.
- ALL: ajax event handlers where not refreshed after an ajax (partial) page
  refresh.
- WC: The html for our "please rate our plugin" message triggered WP to move our
  message above the title "Dashboard", leading to our js no longer reacting
  correctly to the "No thanks" button.
- PS: 1.7.7.0 introduced new hooks to add content to the order view page. As a
  result, our status invoice overview was no longer shown.
- ALL: Non-expanded %-code in help text in Configuration form.
- ALL: Verwijzing naar "Elektronische diensten in de EU" gewijzigd in
  "Buitenlandse (EU) btw".

6.3.1 (2021-07-27)
------------------
Features:
- ALL: The internal order/refund id is now added as metadata to the invoice
  data sent to Acumulus.

Bugs:
- HS: Revisit/improve commit 2021-01-26 (6.2.0): HS 4+ has a setting on shipping
  methods "Automatic taxes"/"Automatische belastingen" that determines [...].
  Improvement: property taxes is not always defined, handle that case as well.
- WC: Error in commit of 2021-06-20 (6.3.0) that tried to solve a problem with
  rounded tax amounts in WC.
- ALL: Typos and unescaped %-sign in message (about EU limit) that gets passed
  through sprintf().
- ALL: During the upgrade to 6.3.0 you can get a possible notice "undefined
  index: foreignVat in Config.php on line 1387". Similar notices but with
  different index names and slightly higher line numbers are also possible.

Refactorings:
- ALL: Latest IDE used to develop the plugins contains even more inspections
  that are honored where possible.

6.3.0 (2021-06-29)
------------------
Features:
- ALL: Changed the settings under "About your shop":
  * For the fields related to the different tax classes (foreign vat, vat free,
    0 vat) there is now just 1 (drop down) setting instead of the former radio
    button + dropdown. A "Not applicable" value has been added to the drop-down.
  * Labels and descriptions for the foreign vat classes have been changed to
    reflect the new rules regarding international sales in the EU that apply as
    of 1 july 2021.
- ALL: Added the ReportThresholdEuCommerce API call to AcumulusClient. It is
  used in the "About Acumulus" block to give you insight into your EU sales
  relative to the threshold.
- ALL: Added the setting 'Percentage EU Omzetdrempel' to 'Uw factuurinstellingen'
  on the advanced settings form. This feature checks your invoices against the
  new EU Commerce threshold above which you should use foreign vat.
- ALL: Added the field vattypeid to the InvoiceAdd API call.

Bugs:
- OC: Update functions were not executed as a call to install(), executed before
  update(), already increased the "data model" version to the new version.
- HS: reinstated use of fallback name for shipping method.
- WC: Sometimes, vat amounts on item lines are stored with a precision of being
  rounded to the cent. If so, the price ex has a higher precision than the price
  inc, even if prices are entered including vat. So, in these cases we should
  not recalculate the price ex after we have obtained a corrected vat rate.
- ALL: Leaving config settings empty was not well-supported. This has been
  improved to better distinguish between e.g. 0 and empty.

Refactorings:
- HS: better logging with warnings in method getShippingLines().

6.2.0 (2021-02-10)
------------------
Features:
- ALL: New settings that allow to better distinguish between vat-free and 0% vat
  rates. This is important to get correct vat declarations and reports.
  Please visit the settings page and fill in these new settings.
- HS: HS 4+ has a setting on shipping methods "Automatic taxes"/"Automatische
  belastingen" that determines how the vat on shipping is calculated. The value
  "Proportion"/"Verhouding" uses the (weighed) average vat rate on the item
  lines as vat rate for the shipping. This component now supports this value.
  Note that it may result in multiple shipping lines if there are different vat
  rates on the item lines.
- ALL: These new settings and some already existing ones use the term "vat
  class"/"belastingklasse", but this does not always match the shop's way of
  naming this concept. Help texts now use the shop's name.

Bugs:
- OC: PHP 7 syntax (?? instead of isset(a) ? a : b) in OC::ConfigStore removed.
- WC|MA2: Het laden van de javascript voor het "geef deze plugin een waardering"
  bericht ging niet goed.

Refactorings:
- ALL: Interface PluginConfig has been removed. All Configuration related
  constants are now in Config, the library version constant is now directly in
  the base namespace: /Siel/Acumulus/Version, and the sql timestamp format is
  taken from API.
- ALL: Warnings that turn an invoice into a concept, ar now also added to the
  xml message within a "meta-warning" tag.
- ALL: Ubiquitous use of PHP5.4 to 5.6 constructs, notably short array syntax,
  can now be found in the code.
- MA2: Replaced use of deprecated method getResource().

6.1.2 (2021-01-16)
------------------
Features:
- ALL: The completor phase now makes an even greater effort to determine the vat
  type:
  * Code has been added to allow for easy shop specific overrides if the
    shop stores some data that not all shops store and that may help in
    determining the vat type with absolute certainty. Example: the WooCommerce
    EU Vat assistant stores if an invoice is vat exempt.
  * Code has been added to guess the vat type if the standard effort results in
    2 possible vat types, e.g. an order for vat-free services to an EU company.
    If this guess results in assigning a vat type, the invoice will no longer be
    sent as concept.
- WC: The completor phase now makes an even greater effort to determine the vat
  type by looking at the result of the 'woocommerce_order_is_vat_exempt' filter
  (mostly based on the 'is_vat_exempt' metadata as set by (a.o.) the
  woocommerce-eu-vat-assistant plugin).
- HS: Look up the "non vat exempt" vat rate of the product for this customer's
  location as vat rate metadata.

Bugs:
- ALL: Due to changes on the API server, a 0% vat rate is now returned for all
  EU countries. As a consequence, the library could have difficulties
  determining the vat type and send the invoice as a concept.

Refactorings:
- ALL: Creator::setInvoiceSource(): parameter in overrides was not everywhere
  named as in parent method.
- HS: Use VatRateSource::Exact0 for 0 vat rates.

6.1.1 (2020-12-22) (MA)
-----------------------
Bugs:
- MA2: Renaming the registration form into the register form (done in 6.0.2) was
  not done in MA2 specific code.
- ALL: id 'intro' was used twice in the register form (and MA2 faults on it).

6.1.0 (2020-12-21)
------------------
Important new features:
- ALL: Maak de plugin brexit-proof door geen gebruik meer te maken van een hard
  gecodeerde lijst van EU-landen. Dit wordt nu aan de API gevraagd zodat de
  plugin in de toekomst niet meer bijgewerkt hoeft te worden bij een wijziging
  hierin.
- PS|OC|VM|HS: Het factuurstatusoverzicht is nu ook aan PrestaShop, OpenCart,
  VirtueMart en HikaShop toegevoegd.

Features:
- ALL: Het factuurstatusoverzicht wordt nu geladen via lazy-load.
- ALL: Op het factuurstatusoverzicht kun je nu de factuurgegevens opnieuw
  versturen als er een fout is ontdekt tussen de bestelling in de webshop en de
  factuur in Acumulus.
- ALL: Op het factuurstatusoverzicht heeft het veld waarop je de betaaldatum
  kunt invullen nu een standaardwaarde die op dezelfde manier bepaald wordt als
  bij automatische verzending.
- PS: html5 details elements worden nu nagebootst met javascript en css opmaak.
- PS: PS 1.5 and 1.6 will probably not work anymore, so only PS1.7 remains
  supported.
- WC: Tekst "buitenlandse btw" ingekort.
- ALL: Het registratieformulier maakt geen gebruik meer van html <details>. Dit
  zodat het in alle ondersteunde webshops correct getoond wordt.
- ALL: Sta toe dat fieldsets geen fields hebben, alleen een titel en
  beschrijving.
- JOO: Use html 5 date fields instead of old date fields from Joomla self.
- WC: Use html 5 date fields instead of adding the jquery date picker.
- ALL: Added support for "Rekening buiten Acumulus" as account.

Bugs:
- PS: PS1.7.7.0 introduced a property Module::confirmUninstall that we already
  use in our AcumulusModule, so we had to rename our (internal) property.
- PS: Instellingenformulier: wachtwoord wordt niet meegestuurd, dus maak het
  niet verplicht en accepteer leeg als "geen verandering".
- PS: Het registratieformulier dient niet zichtbaar te zijn in het admin menu.
- JOO: Each instance of AcumulusModelAcumulus created its own instance of the
  Acumulus Container.
- ALL: Accept negative values as id when processing picklists into dropdown
  lists.

Refactorings:
- ALL: Added support for API calls Picklists/Products and Stock/Stock_Add
- ALL: Added support for the enabled/disabled filter on the accounts picklist.
- ALL: Generalised webshop specific form field processing (e.g. adding icons in
  PrestaShop).
- ALL: Property (+ method) Form::needsFormAndSubmitButton renamed to isFullPage.
- ALL: Naming: do not use "Header" in fieldset ids.
- ALL: Naming: shorten form id's to acumulus-{type}.
- ALL: Do no longer place hidden fields in wrappers.
- OC: Improved multi class handling in FormRenderer.
- PS: Controllers now inherits from ModuleAdminController (was AdminController).
- JOO: Refactored base module file and AcumulusController class, moved css
  loading to view, we do no longer use a template for just 3 lines of html.
- MA: Lazy loading of the invoice status form is now done on page load, not on
  tab show.

6.0.4 (2020-11-15)
------------------
Features:
- PS: Added the registration form to PS.
- ALL: verbeterde helpteksten op de instellingenformulieren als de logingegevens
  ontbreken of fout zijn.
- ALL: Over Acumulus info-blok bevat bij een proefcontract nu ook info over het
  aantal resterende boekingen en of er problemen zijn met e-mailverzending.

Bugs:
- ALL: Acumulus API misc/about en misc/my_acumulus geven geen 401 meer terug,
  maar een 403.
- JOO: Improved styling of forms and added logo to register form.
- ALL: Allow attribute values in class FormRenderer to be defined as an array.
- ALL: Gebruik van PHP 7 language construct.

6.0.3 (2020-10-26)
------------------
Features:
- OC: Added the registration form to OC.

Bugs:
- MA: Aanpasbare opties worden niet op de factuur gezet.
- WC: Bundle lines with price info on their children might not get a correct vat
  rate.

6.0.2 (2020-09-03)
------------------
Features:
- ALL: Nature van additionele services bepalen a.d.h.v. hoofdbestanddeel van de
  factuur.
- JOO: Added the registration form to JOO.

Bugs:
- ALL: The example modules that show how to use the events generated by this
  module were not upgraded wrt some incompatible changes made in 6.0.0. The
  latest versions are now downloadable from the Acumulus forum at:
  https://forum.acumulus.nl/index.php?board=18.0
- JOO: Niet alle module-specifieke vertalingen werden correct geladen.

Refactorings:
- ALL: RegistrationForm => RegisterForm
- ALL: Due to incorporating unit tests to libAcumulus, the copy and hard linking
  process to get install packages and development environments for the various
  supported web shops has been overhauled. No visible changes for users, other
  than that some readme or license files may have been renamed or moved.

6.0.1 (2020-08-06)
------------------
Bugs:
- WC: Knoppen op het statusoverzicht werken niet meer (en een knop met als
  tekst "button_submit_invoice" verschijnt onderaan het overzicht).

6.0.0 (2020-08-05)
------------------
NOTE: The minimum PHP version requirement is now set to 5.6.

NOTE: Magento 1 reached end of life in june 2020. We no longer maintain Magento
  1 specific code, nor add features to it. You may continue to open (bug)
  tickets for Magento 1 and these will be addressed within the limits of a
  "reasonable" effort.

Features:
- Added a registration form that uses the API sign_up to apply for an Acumulus
  test account.
- Added a link to the registration form on the settings page, if login
  credentials are not yet set or are incorrect.
- Complete make-over of the information block on the settings forms. This block
  is now also shown on the batch form and the registration success screen.
- Added sign_up, MyAcumulus and picklist Company types API calls.
- WC: If form error messages are for a specific field that field will be given
  a red border.
- WC: If form error messages are for a specific field they are now clickable,
  upon which the focus will be set to the erroneous form field.
- Upgrade function to 6.0.0 checks strengthened Requirements.

Bugs:
- JOO: Parameter to update NULL values should be set to TRUE in calls to
  JTable::store(). (In not doing so, the token field for concepts was not set to
  NULL.)
- ALL: Empty vatinfo list response leads to a PHP Warning: reset() expects
  parameter 1 to be array, bool given in ApiClient\Result.php on line 254.
- ALL (but WC): table index on acumulus_entry.entry_id should not be unique
  as lock records all have entry_id = 1.
- MA2: Magento uses weak comparison to check for a selected value: 0 may clash
  with ''.
- ALL(?): Warning 901 on send new.
- MA2: Minor bug: when invoice gets sent directly on create, child items may
  appear as main items in getVisibleItems().
- WC: Support for TM Extra Product Options did not add the meta tag
  meta-line-type.
- MA|WC: Filling in some lacking error handling on the invoice status screen.
- WC: Ensure that the rate plugin on one of our own form pages do not treat form
  submission of the whole page as its own form submission (link expired error).

Refactorings:
- Pushed method getLogoUrl to the base Form class
- Allow labels to contain html.
- Added some unit tests for basic classes in the Web namespace. As a consequence
  a lot of classes and methods were moved, renamed, or split:
- Renamed Web namespace to ApiClient.
- Renamed class Service to Acumulus and parameters/properties/variables for this
  type to acumulusApiClient.
- Split class Communicator into ApiCommunicator and HttpCommunicator. This gives
  us a better separation of concerns and testability as we can more easily mock
  http communication.
- Introduced an interface Helpers/Severity, defining constants for severity and
  log levels, replacing similar constants from both Helpers/Log and Web/Result.
- Introduced a Helpers/Message class that wraps a Message (internal message, API
  message, exception, success message, debug message). Extracted (more or less)
  from Web/Result, used by Helpers/MessageCollection, Web/Result, and,
  Helpers/Form and everywhere messages are shown, logged, or mailed.
- Introduced a Helpers/MessageCollection class that wraps a set of Message
  objects (see above). Extracted from Web/Result, used by Web/Result and,
  Helpers/Form.
- Many methods or parameters of methods in Web/Result were renamed or have
  (subtly) changed their (default) behavior.
- Requirements regarding required php extensions are completed in both
  Helpers/Requirements and composer.json.

5.9.0 (2020-04-21)
------------------
NOTE: The minimum PHP version requirement is now set to 5.4.

NOTE: Magento 1 reaches end of life at june 2020. As of this version we will no
  longer maintain Magento 1 specific code, nor add features to Magento 1. You
  may continue to open (bug) tickets for Magento 1 and these will be addressed
  within the limits of a "reasonable" effort.

Features:
- ALL: Added an option to show or hide the status invoice screen and options to
  show or hide the pdfs on that status invoice screen (for now only MA2|WC).
- MA2: Added a message to ask to rate our module on Magento marketplace.
- MA2: Added an Acumulus tab to the view order page, showing the status of the
  invoice for that order and its credit notes, if any, in Acumulus.
- WC: Message asking to rate our plugin is now also shown on our own pages.

Bugs:
- WC3: WC introduced new 'hidden' order item meta keys ('method_id', 'cost',
  '_reduced_stock') that are not variant info.
- ALL: Using order date to send as invoice date did not work correctly.
- MA|JOO: ModuleTranslations were not loaded: refactored to be loaded
  automatically after loading any ModuleSpecificTranslations.

Refactorings:
- ALL: Refactored handling the meta field on our forms.
- ALL: Added method ShopCapabilities::hasInvoiceStatusScreen().
- MA2: Refactored inheritance structure of controller classes.
- MA2: Refactored naming of full page block classes.
- MA: Refactored the FormMapper to allow for the new (in Magento) Invoice status
  overview form to be rendered as required.
- MA2|WC: Changed labels on the Acumulus invoice status overview page, as it has
  much more space than in WooCommerce. For Woocommerce these labels are now
  overridden to remain short.
- ALL: Tightened Source creation to cover for non-validated input.
- WC: Refactored ajax handling to make it usable in other shops as well.
- ALL: Move class Siel\Acumulus\WooCommerce\Shop\InvoiceStatusOverviewForm (and
  Siel\Acumulus\WooCommerce\Shop\InvoiceStatusOverviewFormTranslations) to
  Siel\Acumulus\Shop\InvoiceStatusForm (resp.
  Siel\Acumulus\Shop\InvoiceStatusFormTranslations).
- WC: Extract checking for the Woocommerce version into a separate method.
- MA2: Extract helper and access to it into a "Helper" trait.
- MA2: Allow to work with symlinks.
- MA2: Schema locations in xml files.
- ALL: Add required PHP extensions to composer.json.
- ALL: removed method Source::getPaymentState() (deprecated since 5.4).

5.8.3 (2020-03-22)
------------------
Bugs:
- WC: Support for the "WooCommerce TM Extra Product Options" plugin updated so
  it also works with the latest versions.

Refactorings:
- WC: Do not use query_posts().
- WC: Performance: switched to using get_plugins() instead of get_plugin_data()
  as the former caches its data.
- ALL : Documentation improvements

5.8.2 (2020-01-19)
------------------
Features:
- WC: Vraag gebruikers om de plugin te beoordelen op de WP plugin directory.
- ALL: Add the form type as data to an ajax button.
- ALL: Allows to not render an empty form label.

5.8.1 (2020-01-07)
------------------
Bugs:
- OC1: Multiple errors in OC1 getTotalLineTaxClassLookupQuery() leading to mal
  constructed queries.
- OC1: setting config_complete_status is not an array in OC1 and thus cannot be
  used for determining the payment status.
- HS: Vat range calculation of discounts used incorrect precisions.
- MA2(.3?): Exception #0 (InvalidArgumentException): Unknown form type or
  acumulus.ERROR: Unknown block type
  Siel\AcumulusMa2\Block\Adminhtml\Batch\Form\Interceptor.
- WC3.8: border around status icon in status overview meta box removed.

5.8.0 (2019-10-28)
------------------
Features:
- ALL: Support for API v4.3.0 (https://www.siel.nl/acumulus/API/Changelog/):
  Store conceptid if invoice has been created as concept.

Bugs:
- WC: If the setting "Rond belastingen af bij subtotalen, in plaats van per
  regel" was not enabled and if the setting "Prijzen ingevoerd met belastingen"
  was set to "Ja, ik wil prijzen inclusief belasting invoeren", the plugin
  would recalculate the unit price ex vat incorrectly.
- WC3: WC3 changed what actions are fired during order create/update. As a
  result this plugin missed checking the status on order creation.
- WC: An invoice that gets saved in Acumulus will return '0000-00-00 00:00:00'
  for the field 'deleted', leading to an error in recognising if an entry has
  been deleted or not.
- WC: Use billing address if shipping address is not available and tax is based
  on shipping address.

5.7.4 (2019-08-29)
------------------
Bugs:
- MA2: Versie die getoond werd bij de support-informatie was de databaseschema-
  versie (uit module.xml), niet de moduleversie van de module (uit
  composer.json).
- MA2: Kortingen worden niet goed doorgegeven als prijzen excl. btw zijn
  ingevoerd. getBaseShippingDiscountAmount() is inc of excl. btw afhankelijk van
  of korting voor of na btw verrekend wordt. MA1 heeft dit waarschijnlijk ook,
  maar daar gaat de winkel ook de fout in.
- WC: CRITICAL Uncaught ArgumentCountError: Too few arguments to function
  ...::woocommerce_attribute_label(), 2 passed and exactly 3 expected.
- WC: Acumulus info box op bestellingspagina verdwijnt bij handmatige sortering
  van de info boxen.
- WC: Acumulus info box op bestellingspagina toont verkeerde bedragen, en
  daardoor een waarschuwing, bij facturen met buitenlandse btw.

Refactorings:
- WC: Use $recalculatePrice (with the tag to recalculate as value) instead of
  boolean $recalculateUnitPrice.
- WC: WooCommerce 3.7 renamed get_used_coupons() to get_coupon_codes().

5.7.3 (2019-06-25) (MA2)
------------------------
Features:
- Added support for the Fooman surcharge payment module.

5.7.2 (2019-05-15) (JOO)
------------------------
Bugs:
- Errors in the installation process:
  * syntax error in <version> tag in xml files.
  * class inheritance dependency on VirtueMart.

Refactorings:
- JOO: Registration of our own autoloader now takes place in only 1 place: the
  Acumulus Joomla model.

5.7.1 (2019-05-02) (WC)
-----------------------
Bugs:
- WC: tweaked the precision settings again.
- WC: Acumulus info box op bestellingspagina toont verkeerde status voor credit
  facturen (namelijk dezelfde status als voor de oorspronkelijke bestelling).
- WC: Acumulus info box op bestellingspagina stuurt de oorspronkelijke factuur
  bij klik op "Opnieuw verzenden" bij een credit factuur.

Refactorings:
- ALL: Number::getDivisionRange(): all parameters are now obligatory.

5.7.0 (2019-04-03)
------------------
Features:
- ALL: Prevent sending an invoice twice at the same moment. Some online payment
  methods can trigger multiple status updates within a short time interval,
  possibly triggering sending the invoice a 2nd time while the 1st is still
  being executed. We are adding measures to prevent and, if it still occurs,
  recognise this situation, so we can warn about it.

Refactorings:
- Renamed Result::Sent_... constants to Result::Send_.

5.6.1 (2019-04-01)
------------------
Features:
- WC: Added more support for WC_Bookings (resource info is now available).
- MA1: Support for betaalkosten van de MultiSafePay.com module toegevoegd.
- ALL: Recalculate unitpriceinc to get accurate line totals.
- WC/MA/PS: (These are the web shops that do support credit notes.): "Property
  source" 'originalInvoiceOrder' in ere hersteld. Deze info is af en toe toch
  nodig. Deze property verwijst nu naar de Acumulus wrapper om de
  (oorspronkelijke) order heen. NB: deze property bestaat alleen in shops die
  creditfacturen ondersteunen.
- WC/MA/PS: (These are the web shops that do support credit notes.): "Property
  sources" 'refundedInvoiceSource' en 'refundedOrder' toegevoegd. In
  tegenstelling tot de property sources 'originalInvoiceSource' en
  'originalOrder' hebben deze nieuwe property sources alleen een waarde als het
  daadwerkelijk een refund betreft.
- ALL: Standaard waarde voor het veld 'toelichting' bevat voor een creditfactuur
  nu ook een verwijzing naar de oorspronkelijke bestelling.
- WC/MA/PS: (These are the web shops that do support credit notes.): Het niet
  automatisch verzenden van een creditfactuur werd niet duidelijk gelogd.
- ALL: Een helptekst over factuurnummers verbeterd.

Bugs:
- ALL: Facturen voor klanten buiten de EU waar gewoon btw wordt geheven kregen
  niet factuurtype 1 toegewezen.
- MA: kolom 'updated' van tabel 'acumulus_entry' kreeg geen waarde. Niet bij
  toevoegen en niet bij updaten.

5.6.0 (2019-03-13)
------------------
Features:
- WC/MA/PS: (These are the web shops that do support credit notes.) Added a
  setting to define whether to automatically send credit invoices to Acumulus
  upon their creation.
- ALL: Added some validations to the configuration form.
- ALL: Improved some warning/error messages.

Bugs:
- ALL: (but mostly WC) to retrieve vat rates based on vat classes, we normally
  need a country code. If no country code has been saved in the customer info,
  this might fail. so "completing" the country code (with nl as default) will
  now be done directly when retrieving the address data.
- WC: You can refund a fraction of an article (price) but Woocommerce will still
  store quantity as an integer rounded towards 0 (and thus possibly even 0). We
  now do accept this, but unit prices may be strange, though line totals should
  be correct.
- PS: Some of our database queries failed to run correctly with PS1.7.5 and/or
  PHP7.2.
- PS: PS 1.7.5 changed the log folder again.
- JOO: 'Error Library path src not found' on order status updates. No automatic
  sending of invoices to Acumulus has been possible since version 5.4.9...

Refactoring:
- PS: Source::addProperties() is no longer needed, so only execute it on older
  versions.

5.5.4 (2019-02-25)
------------------
Bugs:
- WC: Precision was set to strict, especially for older invoices.

5.5.3 (2019-02-11)
------------------
Features:
- ALL: Better logging on status change, new status and set of statuses on which
  to send are now also logged when the invoice has been sent (was only when it
  was not sent).

Bugs:
- WC: [SIEL #123927] Dubbele concept-facturen.
- WC: update_meta_data() also returns false when the new value is the same as
  the old value.
- ALL: Property sources refund an order were not defined with credit notes and
  therefore their properties were not accessible. Especially problematic for WC.
- WC: Prevent notices on missing city and postal code if they are not provided.

Refactorings:
- ALL: Add type hint to AcumulusEntryManager::save() method parameter.

5.5.2 (2019-01-23)
------------------
Features:
- WC: Added actions to the 'invoice status overview' meta box on the edit order
  screen.
- WC: Added support for the 'Custom Order Numbers for WooCommerce' plugin.
- ALL: Verander de factuur in een concept als een regel een onbekend
  btw-percentage bevat.
- ALL: To prevent recurring "404 - Error - Bad Request - Requested invoice for
  entry 123456 not found. - XGYBSN000", the data for a no longer existing
  Acumulus entry are deleted from the local database.

Bugs:
- ALL: For refunds, the "property source" 'order' referred to an Invoice\Source
  object instead of to the hosting webshops's order object/array. The property
  source 'orderSource' now no longer exists in WC.
  NOTE: This may have consequences for your field references (veldverwijzingen)
  in your advanced settings!
- ALL: Setting "Concept" was not used: plugin would make an invoice a concept on
  warnings regardless the value for this setting.

Refactorings:
- OC: Cache geo zones.
- WC: Use add_meta_boxes_{post_type} instead of add_meta_boxes action.
- ALL: Make field references handling more robust (though catchable fatal errors
  are still not caught).
- ALL: Form refactoring: do not add success/error message if none specified;
  added getSubmittedValue() method; added getType() method.
- ALL: FormRenderer: changed list of parameters into 1 $field parameter on most
  render methods; added addAjax() method to support ajax submissions.
- ALL: InvoiceManager: added send1() method; made send() protected.
- ALL: Removed a lot of code warnings.
- ALL: Moved some translatable strings from batch to module.

5.5.1 (2018-12-13)
------------------
Features:
- ALL: Make better use of available vat class metadata to reduce the possible
  vat types of a line.
- ALL: Make better use of available metadata (by combining them) to get the vat
  rate of a line.
- WC3: WC seems to return amounts with an increased precision (was: rounded to
  the cent. now: it seems not any longer rounded).
- WC3: Follow setting 'woocommerce_tax_based_on' to determine the country code.
- WC: Use country, city and postal code of Acumulus invoice (instead of Customer
  object) to get lookup tax rates. (this also makes
  WooCommerce\Creator::getVatRateLookupMetadataByTaxClass() work in WC2...)

Bugs:
- ALL: only use the setting that defines EU vat classes when the shop might sell
  articles subject to EU vat.
- ALL: looked up vat rate metadata may be an empty array: use empty() instead
  of isset().
- ALL: looked up vat rate may still be a single float, not necessarily an array:
  'array' type hint in Completor::metaDataHas0VatRate() is incorrect.
- ALL: allow, recognise, and store empty multi-select fields on the config forms.
- ALL: notice Undefined index nature in completor.php on line 336.
- OC2/OC3: mail did not use the correct property names for the smtp settings.
- WC: PHP Fatal error:  Uncaught TypeError: Argument 1 passed to
  WooCommerce\Helpers\Token::getDataValue() must be of the type array, string
  given: only descend recursively if the property found by tokenizing on _, is a
  (data) array itself.

Refactorings:
- WC: Remove properties $order and $refund from Creator class.
- WC: Only call WC method WC_Tax::get_tax_class_slugs() once in getVatClasses().
- ALL: Rename Creator::LineType_Order to Creator::LineType_OrderItem.

5.5.0 (2018-11-14)
------------------
Features:
- ALL: There are more products than the digital services that are subject to
  foreign vat for EU customers:
  - Rephrase everything that has to do with digital services (vat type 6).
  - Rename option digitalServices to foreignVat.
- ALL: better differentiate between invoice type 1 and 6 for countries having
  the same vat rate as NL:
  * Meta::VatRateLookupLabel is now also an array.
  * Add vat class information as metadata.
  * Add method ShopCapabilities::getVatClasses().
  * Add setting foreignVatClasses (default, UI on config form).
  * Use setting foreignVatClasses and vat class metadata to select between vat
    type 1 and 6.
- OC: Improved filling vat class/rate lookup metadata by matching zones of
  order address with geo zones of tax rates.
- ALL: Support for new roles and permissions to access the web server API.
- ALL: Added logging to execution stage of batch form.
- ALL: Make "property specification not found" a debug level message.
- JOO: Access rights revisited so that menu-items remain visible in the admin
  menu for people who only have access to the batch send form.
- WC: Now supports WC3.5 and WP5. Better update handling.
- WC2: show message that support for WC2 will end in a next version.
- Improved precision handling: getVatRangeTags() now adds the precision meta
  tags, removed from the shop specific Creator classes.

Bugs:
- ALL: Capitalise country adjectives (e.g. dutch -> Dutch) in code documentation
  and comments).
- MA: The size attribute on a multi select form element was not taken from our
  form settings.
- WC3: Since WC3, the shipping tax class can be "inherited" from the product
  items (which should be the preferred value for this setting). The plugin did
  not handle this value correctly.
- WC3: Code to get the vat rate lookup metadata did not use customer location
  and would therefore be based on shop location.
- WC3: Code to improve precision of shipping costs ex vat ignores zone based
  shipping method settings of WC3.
- ALL: Warning: implode(): Invalid arguments passed in Completor.php on line 835.
- ALL: module specific translations were not loaded on case-sensitive systems
  (e.g. linux).
- ALL: Warning 511: Incorrect vattype value used (false) in vattype tag as part
  of invoice section in the XML. Using default value of 1(national, regular
  invoice). (CE005BVTC)
- ALL: Message 'message_warning_no_vattype_must_split' was not translated.
- OC: Breadcrumb on settings page was incorrect.

5.4.9 (2018-10-03)
------------------
Features:
- JOO: Add access right to config, advanced config and batch screens.

Bugs:
- JOO: Install/update: Call to a member function getAcumulusConfig() on boolean.
- JOO: Install: File does not exist .../com_acumulus/admin/language/en-GB.com_acumulus.ini

5.4.8 (2018-08-27)
------------------
Bugs:
- OC: SplitLine strategy was removed as having no usages: it turns out that
  OpenCart coupons need it.
- ALL: Error in assigning strategy to the vatrate-source tag in
  CompletorInvoiceLines::addVatRateToLookupLines.
- ALL: Error in initializing possible vat types.
- ALL: Empty country code now handled as NL.
- OC1/OC23: getVatRateLookupByTotalLineType() did not return any tax class id.
- ALL: Handle the case where a vat rate lookup results in multiple vat rates.
- ALL: If a parent line must be handled by the strategy phase , ensure that the
  child lines also are handled by the strategy phase if they have 'vat rate
  source' = 'parent'.

5.4.7 (2018-07-20)
------------------
Features:
- ALL: Added an option that covers how to handle missing amounts.

Bugs:
- OC (bug/feature?): Better handling of total lines (e.g. shipping) regarding
  whether the amount is inc or ex vat and vat rate lookup for those lines.
- ALL: Option "Send consumer client records to Acumulus." removes country code
  before it is used to determine the vat type.
- ALL: goods outside EU may use vat type = 1 when you can't or don't want to
  prove that the goods will leave the EU.
- ALL: improved handling of costprice and margin lines.
- ALL: Use host name instead of shop software name when creating fictitious
  email addresses.

5.4.6 (2018-07-10 JOO)
5.4.6 (2018-07-09 OC)
---------------------
- JOO: com_acumulusInstallerScript.php still contained references to the old
  library path and defined a psr0 namespace instead of a psr4 one.
- OC: Warning: lsprintf(): Too few arguments in Opencart/Shop/AcumulusEntryManager.php
  on line 93. Warning: mysqli::Query(): Empty query.

5.4.5 (2018-07-04)
------------------
- ALL: Notice: Undefined index: nature_shop in ConfigForm.php on line 85.

5.4.4 (2018-06-05)
------------------
- ALL: better filling and handling of field nature, especially for non-item
  fields (shipping costs, payment fee).
- WC: Styling van popup-help in het statusoverzicht op bestellingspagina.
- WC2: Fatal error: Uncaught Error: Call to a member function get_items() on
  null in Creator.
- WC2: Fatal error: Uncaught Error: Call to undefined method
  WC_Order_Refund::get_parent_id() in Source.
- WC2: Fatal error: Uncaught RuntimeException: Source::getPaymentMethodOrder()
  not implemented for Source.

5.4.3 (2018-05-31)
------------------
- ALL: feature: added support for costprice setting in all plugins, was only for
  WooCommerce and, not completely correct, PrestaShop.
- ALL: feature: removed invoice setting useMargin in favor of shop setting
  marginProducts.
- ALL: feature: based on the new settings, the code to determine the vat type
  and any warning to give when no vat type could be determined, has been
  improved.
- ALL: feature: Added configuration settings to determine the nature of the
  products in the catalog and if goods are sold using the margin scheme. These
  settings are used to fill in the nature tag and to better determine the vat
  type.
- ALL: bug: validation between send customer and email invoice as pdf on
  advanced config could go wrong.
- WC: bug Rendering of invoice and packing slip contained errors possibly
  leading to 2 pdf icons before the invoice.
- ALL: bug: Warning: strpos() expects parameter 1 to be string, array given in
  Config.php on line 1129/1155.

5.4.2 (2018-05-15)
------------------
- WC: typo in css class is-dismissible on messages.
- WC: Op een bestellingspagina in de backend wordt nu een statusoverzicht
  getoond van de Acumulus factuur. In een volgende versie zullen acties als bv.
  'Opnieuw verzenden' en 'Op betaald zetten' toegevoegd worden. Laat ons weten
  wat u hier van vindt. Suggesties en opmerkingen zijn van harte welkom!
- ALL: moved Creator::getInvoiceTotals() to Source::getTotals().
- ALL: moved Creator::completeInvoiceTotals() to Source::completeTotals().
- ALL: renamed Source::getTotals() to Source::getAvailableTotals().
- ALL: renamed Source::getPaymentState() to Source::getPaymentStatus().
- ALL: Legend or summary are not required: Notice:  Undefined index: legend ...

5.4.1 (2018-05-13)
------------------
Important note:
- ALL: Version 5.4.0 has been released to solve some fatal errors for Magento.
  This has been done while not all the documentation had been finished yet, so
  more backwards incompatible changes (for developers) will be found in this
  5.4.1 version.

Changes:
- ALL: To "clean up" the appearance of the forms, especially the advanced config
  form, use of the html5 details tag has been introduced. A number of fieldsets
  are made collapsible/expandable and will be closed by default. PrestaShop does
  not support this tag, nor js collapsable fieldsets.
- ALL (MOST): Errors and warnings weren't shown when generated during saving the
  config.
- ALL: Not all curl libraries define the CURL_SSLVERSION_TLSv1_2 constant, even
  if they support that TLS version.
- HS: Trying to get property of non-object in Joomla\HikaShop\Invoice\Source.php
  on line 139
- ALL: Looked up vat rates were not copied from parent to children.
- ALL: Config form now also displays the exception message when an exception
  was raised.
- WC: update_option() also returns false when there are no changes. We want to
  return true to prevent a user message "There was an error saving the config".
- ALL: As a consequence of documenting this library from a developers view
  point, non backwards compatible changes were made that simplify or reduce the
  amount of code that needs to be written when developing a new extension:
  - Order of constructor parameters changed to make it consistent among the
    various classes. This should only affect the Container class in the
    library.
  - Container::getManager() renamed to Container::getInvoiceManager().
  - Now that (since long) the library version is a constant, it can be passed
    to the constructor of Log, instead of setting it when the Config has been
    created.
  - Meta tags renamed to make them more consistent.
  - Form::addWarningMessage() renamed to Form::addWarningMessages().
  - Form::addErrorMessage() renamed to Form::addErrorMessages().
  - Form::isSubmitted() moved to a separate FormHelper class.
  - Form::getPostedValues() moved to a separate FormHelper class.
  - Form::systemValidate() removed, should be done in the webshop specific part.
  - Property source 'originalInvoiceSource' renamed to order.
  - Property source 'refund' added.
  - Refactored ShopCapabilities::getTokenInfo().
- ALL: Continued adding extensive overview documentation aimed at developers
  that want to create a new extension on their own based on this library.
- ALL: As part of the developers documentation: added a MyWebShop namespace
  containing "template" code that can be used when developing a new extension
  based on this library.

5.4.0 (2018-04-17)
------------------
- MA: main.CRITICAL: Exception message: SQLSTATE[23000]: Integrity constraint
  violation: 1062 Duplicate entry.
- MA2: Fatal error: Call to undefined method Creator::getSign().
- ALL: Added extensive overview documentation aimed at developers that want to
  create a new extension on their own based on this library.
- ALL: As a consequence of documenting this library from a developers view
  point, simplifications were made to the code by removing interfaces in favor
  of the base class that implements that interface:
  - Removed TranslatorInterface
  - Removed ContainerInterface
  - Removed ConfigStoreInterface
  - Removed ConfigInterface
  - Removed ShopCapabilitiesInterface
  - Removed CommunicatorInterface
- ALL: As a consequence of documenting this library from a developers view
  point, non backwards compatible changes were made that simplify or reduce the
  amount of code that needs to be written when developing a new extension:
  - ConfigStore was simplified, it now only should store the one array value as
    passed in.
  - Order of constructor parameters changed to make it consistent among the
    various Classes.

5.3.0 (2018-04-09)
------------------
- WC: statusoverzicht uitgeschakeld voor deze versie.
- ALL: Gebruik de opgezochte btw-percentages van de productinformatie als de
  berekende btw bandbreedte zo wijd is dat er meerdere btw-percentages mogelijk
  zijn.
- ALL: Do not render the for attribute with a label for a markup element.
- ALL: Controls op Batchscherm aangepast: radio buttons voor verzendwijzen en
  een aparte checkbox voor dry-run.
- ALL: Methods Form::getDateFormat() en Form::geShopDateFormat() zijn
  verwijderd. Die shops die nog geen html5 input type=date gebruiken, krijgen
  een (html5 attribuut) placeholder met het verwachte formaat dat
  gestandaardiseerd is op wat een date field verstuurt (yyyy-mm-dd).
- Refactor: centralise date formats.

5.2.2 (2018-03-16)
------------------
- ALL: security review: better code and document security measures taken. Some
  additional escaping was added, mostly input coming from the Acumulus API, so
  no real security risks were discovered.
- WC: 2e versie van de "dashboard" functionaliteit.
- ALL: Moved order/credit note related getting methods from Creator to Source.
- ALL: Replace FormRenderer::setUsePopupDescription() with more generic
  FormRenderer:::setProperty().
- All: Allow for label and label wrapper specific attributes in form fields.
- All: Notice: Undefined index: vatrate in Completor.php on line 989.

5.2.1 (2018-03-05)
------------------
- WC: Toon status van de boeking in Acumulus in het admnin shop order formulier.
  dit is de eerste versie van de "dashboard" functionaliteit.
- ALL: voeg een berichttype "opmerking" toe zodat de melding over het
  overschrijven van een bestaande factuur er minder ernstig uitziet.
- ALL: Add Source::getRefunds() and rename Source::getOriginalInvoiceSource to
  Source::getOrder().
- ALL: Form rendering: Allow to use shop specific help texts, often in a hover
  popup.
- Error in Container::getAcumulusEntry().
- WC: Change WordPress form rendering to accommodate the new Acumulus invoice
  overview form.

5.2.0 (2018-02-26)
------------------
- PS: Log folder is in 1.7 /app/logs/ en niet meer /log/.
- ALL: Als een factuur als concept wordt opgeslagen voeg dan een verwijzing naar
  waar deze te vinden toe aan de waarschuwingstekst.
- ALL: Als er een bedrag mist wordt er nu een waarschuwing en, indien mogelijk,
  een correctieregel toegevoegd. Dit kan gebeuren als bv een betaalmodule die
  (nog) niet door ons wordt ondersteund betaalkosten toevoegt.
- ALL: een 0-factuur kon bij een aantal shops leiden tot een onterechte
  waarschuwing en dus een concept-factuur. Deze situatie wordt nu beter
  aangepakt waardoor de waarschuwing niet meer gegeven zal worden.
- ALL: Als je vanaf nu een factuur opnieuw en geforceerd verstuurd, zal de oude
  boeking de "verwijderd" status krijgen. Je ontvangt hierover een mail. Ook de
  waarschuwing bij geforceerd verzenden is aangepast.
- ALL: Het te gebruiken factuursjabloon wordt nu pas bepaald na het
  invoice_created event zodat het eventueel corrigeren van de betaalstatus in
  dat event doorwerkt in de keuze van het factuursjabloon.
- ALL: meerdere spelfouten uit de NL en EN vertalingen gehaald.
- ALL: fouten en waarschuwingen van een ander API-request (vooralsnog opvragen
  btw-tarieven en verwijderen oude entry) worden toegevoegd aan het
  overall-resultaat van de hoofdbewerking (add invoice).
- ALL: toegang op veldniveau tot acumulus entry records is nu beter geregeld
  door het wrappen van een db record/object in een nieuwe class AcumulusEntry.
- ALL: Rename AcumulusEntryModel naar AcumulusEntryManager.
- ALL: A number of API calls have been added:
  * Set Delete Status: https://siel.nl/acumulus/API/Entry/Set_Delete_Status/
  * Get Entry (Boeking) Details: https://siel.nl/acumulus/API/Entry/Get_Entry_Details/
  * Payment - Get status: https://siel.nl/acumulus/API/Invoicing/Payment_Get_Status/
  * Payment - Set status: https://siel.nl/acumulus/API/Invoicing/Payment_Set_Status/
  * Email invoice or reminder: https://siel.nl/acumulus/API/Invoicing/Email/
  * Get PDF Invoice: https://siel.nl/acumulus/API/Invoicing/Get_PDF_Invoice/
  * Get PDF Packing Slip: https://siel.nl/acumulus/API/Delivery/Get_PDF_Packing_Slip/
  This allows us to add numerous features in upcoming releases.

5.1.2 (2018-02-14)
------------------
- ALL: currency metadata wordt nu gebruikt om bestellingen in andere
  currencies te converteren naar euro's. Dit werkt voor zover de shop de meta
  info correct weet aan te leveren.
- ALL: Als de standaard currency van de shop geen euro is, maar de order wel,
  maar bedragen worden opgeslagen in de standaard valuta wordt de factuur ook
  geconverteerd naar euros.
- VM: Ondersteuning voor andere currencies. Alleen metadata, opslag is altijd
  in base currency.
- HS: Ondersteuning voor andere currencies. Er zit een fout in HS zelf als je
  een getoonde, maar niet gepubliceerde valuta gebruikt: de verzendkosten worden
  dan fout getoond en opgeslagen.
- WC: Ondersteuning voor andere currencies. Alleen metadata, WC ondersteunt
  geen andere currencies.
- MA: Ondersteuning voor andere currencies. Alleen metadata, opslag is altijd
  in base currency.
- OC: Ondersteuning voor andere currencies. Alleen metadata, opslag is altijd
  in default currency.
- PS: Ondersteuning voor andere currencies.
- PS: FatalThrowableError: Access to undeclared static property: Acumulus::$module_version

5.1.1 (2018-02-07)
------------------
- ALL: Ernstige fout in Container bij creatie Communicator object.
- MA: getBillingAddress() kan leeg zijn en tot een warning/foutmelding leiden.
- MA: Ondersteun multi-currency door alleen nog maar de Base velden te gebruiken.

5.1.0 (2018-02-07)
------------------
- MA2: Ondersteuning toegevoegd voor betaalkosten via de PayCheckout en Sisow
  betaalproviders.
- WC: Moved support for other plugins to a separate class.
- ALL: Maak (waar mogelijk) onderscheid tussen 0% btw en btw-vrij.
- ALL: Als een factuur niet verzonden wordt omdat het totaal 0 is, werd het
 'verzenden tegengehouden door het event "AcumulusInvoiceCreated' gelogd.

5.0.5 (2018-01-25)
------------------
- composer.json: Message from packagist: siel/acumulus failed to update, invalid
  composer.json data:  License "GPL-3.0" is a deprecated SPDX license
  identifier, use "GPL-3.0-only" or "GPL-3.0-or-later" instead.
- PSR-1: use true, false, and null instead of TRUE, FALSE, and NULL.

5.0.4 (2018-01-22)
------------------
- WC: Eigen oplossing voor WooCommerce bug #18357 ging de fout in.

5.0.3 (2018-01-19)
------------------
- ALL: Backslashes worden niet goed verstuurd naar Acumulus waardoor met name
  Nieuwe regels en tabs niet werken in de velden beschrijving en notities.
- WC: Oude folder libraries was nog niet verwijderd uit svn.

5.0.2 (2018-01-18)
------------------
- ALL: originalInvoiceSource als bron van veldverwijzingen werkte niet.
- OC23/OC3: Ondersteuning voor quick_status_updater module.
- WC: WooCommerce bug #18357 is nu in onze eigen code opgelost zodat deze versie
  van onze plugin met zowel oude als toekomstige WC versies goed werkt.
- PS: Fout in ondersteuning voor paypal module (veld payment_fee).

5.0.1 (2018-01-11)
------------------
- HS, PS, VM: Je kunt in het batchverzendscherm nu (ipv referenties) ook id's van de
  bestellingen gebruiken om de reeks te verzenden bestellingen aan te geven.
- ALL: Own autoloader is back in the library, but at the root folder. It was to
  much copy & paste after all, but the new version does not execute
  automatically upon including.
- ALL: Optie testmodus staat nu ook op het batchverzendformulier.
- PS: Process fields payment_fee and payment_fee_rate on the invoice source,
  not on the original order (thus not on refunds).
- MA1: Support Magento1 compiled mode.
- MA: Tested and corrected event triggering and its parameter passing.
- MA: Created example modules for MA1 and MA2 to handle events defined by the Acumulus module.
- ALL: All plugins (HS, MA1 + MA2, OC1 + OC23 + OC3, PS, VM, and WC are now on
  the 5.x structure.
- ALL: Verduidelijking v/d vraag "Verkoopt u btw-vrije producten".
- Changes to readme.md and leesmij.md

5.0.0 (2017-12-26)
------------------
- ALL: Merged all 4.x changes up to 4.9.6 into this branch.
- ALL: Added changelog.txt (this file) to the root of this library.
- ALL: Own autoloader is no longer part of the library but will be copied to
  those shops that still need it.
- PS: PS is now on the 5.x structure
- PS: Created an example module to handle hooks defined by the Acumulus module.
- PS: Tested and corrected hook triggering.

5.0.0-alpha1 (2017-09-26)
-------------------------
- ALL: Logberichten op batchscherm ietsje verbeterd.
- MA2: Bij opslaan van het instellingenformulier werd de configuratiecache niet
  goed geleegd.
- MA2 overgezet naar nieuwe library.
- Library op github en packagist geplaatst.
  * Deze is nu apart te downloaden via:
    * https://github.com/SIELOnline/libAcumulus
    * Via composer.json:
      {
        "require": {
          "siel/acumulus": "^5@dev"
        }
      }
  * Voor die webshops/cms die het ondersteunen zal de library voortaan niet
    meer mee geleverd worden, maar via composer apart gedownload moeten worden.
  * De folderstructuur en naamgeving is aangepast aan de huidige "best
    practices", met name die van php libraries die met composer werken.

4.9.6 (2017-12-22)
------------------
- BTW aangepast naar btw.
- PS: Ondersteuning voor de velden payment_fee en payment_fee_rate (PayPal with
  a fee module).

4.9.5 (2017-11-13)
------------------
- OC23/OC3: The own events of the Acumulus extension caused warnings and fatal
  errors on the catalog side (i.e. with automatic invoice sending based on
  order status changes, not with batch sending).

4.9.4 (2017-11-10)
------------------
- JOO: Fout bij controleren of event handlers de verzending willen tegenhouden.
- ALL: Verzendkostenregels kregen meta-line-type = manual ipv shipping.
- WC: Shipping tax class lookup voegt niet altijd meta-vatrate-lookup-source
  tag toe.

4.9.3 (2017-11-03)
------------------
- PS: Misschien ging er iets fout met het disablen en enablen van de hooks
  waardoor de koppeling niet meer reageerde op bestelstatuswijzigingen.

4.9.2 (2017-10-24)
------------------
- JOO: Support for Joomla 3.8 toegevoegd.
- WC3: Ondersteuning toegevoegd voor de WooCommerce EU vat number plugin, ging
  waarschijnlijk ook fout bij de WooCommerce EU vat assistant.

4.9.1 (2017-09-26)
------------------
- WordPress 4.8.2 heeft de wpdb::prepare() method aangepast aan zijn
  documentatie: %u is niet langer toegestaan. Dit gaf een foutmelding bij
  batchverzending op basis van bestelnummers.
- WC3: Ondersteuning toegevoegd voor de WooCommerce Bookings plugin.
- ALL: Bepalen van veldreferenties is iets aangepast. Bij wel of niet meenemen
  van letterlijke tekenreeksen wordt nu beter gekeken naar de erop volgende
  property.
- HS: Precisie is zeer hoog: we hebben ofwel exacte btw percentages beschikbaar
  ofwel prijzen en btw-bedragen met 5 cijfers achter de komma. Dus geen
  probleem met precisie in HikaShop.
- VM: Precisie is zeer hoog: we hebben ofwel exacte btw percentages beschikbaar
  ofwel prijzen en btw-bedragen met 5 cijfers achter de komma. Dus geen
  probleem met precisie in VirtueMart.

4.9.0 (2017-09-25)
------------------
- ALL: Since 2017-09-19 the Acumulus web service only accepts TLS 1.2.
  Apparently, some libraries do support this version but do not use it by
  default, so we force it.
- ALL: Aanpassingen aan de events:
  * Event InvoiceCompleted hernoemd naar InvoiceSendBefore.
  * Event InvoiceSent hernoemd naar InvoiceSendAfter.
    (Noot: de webshop specifieke events/filters/... die worden aangeroepen
    volgen de naamgeving zoals gebruikelijk in die webshop).
  * Parametervolgorde van de events InvoiceCreated InvoiceSendBefore
    veranderd.
  * InvoiceSendAfter event wordt nu aangeroepen voor het mailen van het
    resultaat, waardoor custom toegevoegde waarschuwingen of fouten ook gemaild
    worden.
- OC3: Ondersteuning voor OpenCart 3 toegevoegd.
- OC23: Triggers getest (mbv example code van punt hier beneden): ze bleken
  niet te werken.
- OC23: voorbeeld module voor het ontwikkelen van event handlers is ontwikkeld.
  Deze is als afzonderlijke zip te downloaden en dient als documentatie voor de
  events die de Acumulus extensie definieert.
- OC23: Locatie van de bestanden waaruit de extensie is opgebouwd was fout.
  Sinds 2.3 behoren ze onder extension/module ipv onder module geplaatst te
  worden. Hierdoor werden de uninstall en install acties niet goed uitgevoerd.
- OC22: Wordt niet langer ondersteund.
- OC: Precisie: bedragen worden ex btw opgegeven, ook verzend en administratie-
  kosten. Dus hier geen problemen met de precisie.

4.8.1 (2017-08-09)
------------------
- PS: Enkele parameters voor de door deze module gedefinieerde events/hooks
  aangepast.
- PS: Precisie is al hoog in PS, dus geen aanpassingen nodig.
- MA: Verhoogde precisie voor verzendkostenregels als deze inclusief btw worden
  ingegeven door de administrator.
- MA: Verhogen precisie voor productregels veranderd door gebruik te maken van
  hetzelfde algoritme als voor WC.

4.8.0 (2017-08-01)
------------------
- WC3: Precisie voor productregels verhoogd. Dit zou een groot gedeelte van
  verschillen tussen de winkelfactuur en de Acumulus factuur moeten voorkomen.
  Laat het weten als u toch nog verschillen blijft houden!
- WC3: Precisie voor verzendkostenregels verhoogd. Dit zou een groot gedeelte
  van verschillen tussen de winkelfactuur en de Acumulus factuur moeten
  voorkomen.
  Laat het weten als u toch nog verschillen blijft houden!
- ALL: Onderzoek naar en verhoging van de precisie voor de andere webshops zal
  in de volgende versies van 4.8.x toegevoegd worden.
- WC3: Opzoeken van het btw-tarief voor verzendkosten ging de fout in door een
  wijziging in de datastructuur.
- WC: Houd rekening met meerdere vezendkostenregels: bedrag per regel was gelijk
  aan het totaal bedrag voor de verzendkosten.
- Constants gedefinieerd voor alle API tags en eigen meta tags.

4.8.0-alpha3 (2017-07-10)
-------------------------
- ALL: btw berekening gebruikt nu een iets grotere marge omdat het met .5 cent
  die naar beneden afgerond wordt fout kon gaan.
- WC3: Precisie van de btw berekening is nog slechter dan gedacht: gebruik nog
  grotere marges.
- MA21: psr4.php en classes voor andere webshops worden niet meer mee
  uitgeleverd omdat dit tot fouten bij het commando "magento setup:di:compile"
  leidt.
- WC: Als de kinderen van een bundelproduct niet getoond worden, en de info
  overgenomen moet worden naar het hoofdproduct kan de berekening van het btw
  percentage fout gaan.
- WC2: heeft nu ook support for the woocommerce-bundle-products extension
  (visibility settings are ignored for now).
- WC2: Ging nog steeds fout (met wit scherm) bij reageren op statuswijzigingen van
  bestellingen. Foutmelding in log: Fatal Error: call to undefined method
  WC_Order::get_date_created().
- WC: Foutieve link naar het formulier met de basisinstellingen.
- ALL: Mail en logberichten zijn sterk verbeterd, ze bevatten meer details,
  betere aanwijzingen en houden rekening met de wat meer recente opties als
  testmodus, versturen als concept, en dry-run.
- ALL: Het resultaat van een web service call wordt nu in een
  \Siel\Acumulus\Web\Result object gezet. Heeft gevolgen voor het
  acumulus_invoice_sent event dat nu een Result object ontvangt ipv een array.
- ALL: Lokaal ontdekte fouten en waarschuwingen worden nu aan de
  acumulus_invoice_created en acumulus_invoice_completed events meegegeven als
  localResult. Deze events mogen deze variabele ook gebruiken om waarschuwingen
  of foutboodschappen toe te voegen. Als het een foutboodschap betreft wordt de
  invoice ook niet verstuurd en wordt er een mail verstuurd met daarin de
  foutboodschap.
- MA: Bundelproducten kunnen nog steeds de fout ingaan omdat de precisie
  slechter kan zijn dan 1 cent.

4.8.0-alpha2 (2017-06-07)
-------------------------
- PS/MA: Fout in checkbox afhandeling op het geavanceerde instellingen formulier.

4.8.0-alpha1 (2017-06-07)
-------------------------
- MA: Bundel product krijgt vaak 0% als btw percentage: negeer en gebruik andere
  beschikbare info.
- ALL: Als een factuur vanwege waarschuwingen als concept verstuurd wordt, wordt
  er geen pdf factuur verstuurd. Vermeld dit bij de waarschuwing.
- JOO: Support Joomla 3.7.
- WC: Houd rekening met meerdere vezendkostenregels.
- Code refactorings: Move getShopEnvironment() from ConfigStore to
  ShopCapabilities.
- Code refactorings: Refactor to instantiate a FormRenderer or FormMapper via
  the container.
- Code refactorings: Move config related classes and interface to separate
  namespace.
- Code refactorings: Separate InjectorInterface and its implementation in
  Config(Interface) into a separate ContainerInterface and Container class.

4.7.8 (2017-06-01)
------------------
- PS17: Verzenden van email ging fout.
- PS17: Deze versie heeft een iets andere menustructuur, het menu-item "Acumulus
  geavanceerde instellingen" staat nu op een andere plek.
- PS: Opslaan van verzonden facturen (om dubbel versturen te voorkomen ging mis
  sinds 4.6.0. Er is geen manier om de ontbrekende gegevens alsnog aan de tabel
  toe te voegen.
- PS: default voor full name bevat een fout (sinds 4.7.0).

4.7.7 (2017-05-25)
-------------------
- WC2: Gaat fout met wit scherm op case-sensitive systemen (ofwel linux) door
  een typefout in een namespace.
- WC: Als gebundelde producten niet getoond worden dan moet de prijsinfo daarvan
  nog wel overgenomen worden.
- WC: voorkom notice Source::callTypeSpecificMethod: method does not exist:
  getInvoiceDateOrder
- WC: Verwijderen van de plugin gaat fout: "Verwijderen van mislukt.".
- MA1: Call to undefined method Varien_Db_Adapter_Pdo_Mysql::renameTablesBatch()
  in upgrade-3.4.4-4.0.0.php on line 70. Dit gaat alleen fout in Magento 1.7.

4.7.6 (2017-05-04)
------------------
- ALL: versturen als concept of definitieve factuur is nu een instelling.
- WC: Batch verzending werd gelimiteerd tot het standaard aantal posts per
  pagina aan bestellingen bij selectie op basis van datum of bij gebruik van 1
  v/d ondersteunde sequential order number plugins.
- WC3: support for the woocommerce-bundle-products extension (visibility
  settings are ignored for now).
- WC3: notices worden nu ook voorkomen. NB: onze plugin is binnen WC3 nog niet
  getest op compatibiliteit met woocommerce-tm-extra-product-options.
- PS: Voorkom dat de naam van de verzendwijze leeg is op de factuur.
- ALL: class token kan nu overgeërft worden, WC doet dit nu ook.

4.7.5 (2017-04-10)
------------------
- WC3: LET OP: WC3 bevat een aantal subtiele wijzigingen die onze plugin kan
  raken. Controleer alle facturen op afwijkingen en laat het meteen weten als u
  iets vreemds tegenkomt!
- WC3: btw bedrag wordt niet langer met hoge precisie opgeslagen maar afgerond
  op een cent. Hierdoor werden de onder en bovenmarges voor het btw percentage
  verkeerd berekend en kon het btw percentage gemist worden.

4.7.4 (2017-04-07)
------------------
- WC: Acumulus plugin geschikt gemaakt voor WC 3.0 (alleen het voorkomen van
  fatals)
- WC: Onterechte foutmelding bij opslaan configuratie als die niet gewijzigd is.
- ALL: Foutief succes bericht bij formulieren and vreemde karakters in versie
  info.

4.7.3 (2017-04-05)
------------------
- ALL: Instelling toegevoegd om opties/varianten/deelproducten niet te tonen.
- ALL: Alle "Email as pdf" velden op het geavanceerde instellingenformulier
  geplaatst en meer "Email as pdf" velden (<emailaspdf> tag in invoice-add
  bericht) configureerbaar gemaakt:
  * emailto
  * emailFrom kan nu veldverwijzingen bevatten.
  * emailBcc kan nu veldverwijzingen bevatten.
  * subject kan nu veldverwijzingen bevatten ipv [#b] en [#f].
- ALL: Factuurregel velden (<lime> tag in invoice-add bericht) configureerbaar
  gemaakt:
  * itemnumber
  * product
  * nature
  * costprice
- WC: Log info over (meta) queries die uitgevoerd worden.
- OC: NitroPack van Isenselabs zet op Windows \ in DIR_APPLICATION ipv /,
  waardoor de bepaling van catalog vs admin fout gaat.

4.7.2 (2017-03-13)
------------------
- JOO/OC/WC: quotes in formveld attributen werden niet geëscaped.
- WC: WC gebruikt zijn eigen "magic quotes" (wp_magic_quotes()): maak dit
  ongedaan.
- ALL: batchscherm: bericht over verstuurde berichten en succes bericht werden
  verkeerd vertaald.
- PS: Wijzigingen op het geavanceerde instellingenformulier worden niet
  opgeslagen.
- ALL: (of iig WC) Lege string kan ten onrechte als waarde voor een niet
  bestaande veldverwijzing teruggegeven worden.
- MA2 (maar eigenlijk ALL): Samengestelde producten werken nog niet in alle
  situaties.
- ALL: Invoice velden in invoice-add bericht configureerbaar gemaakt:
  * description
  * descriptiontext
  * invoicenotes
- ALL: Veldverwijzingen kunnen nu concatenatie zonder spaties en letterlijke
  tekst bevatten.
- ALL: class Source toevoegen als bron voor veldverwijzingen.

4.7.1 (2017-02-24)
------------------
- ALL: Loggen als veldverwijzingen niet gevonden worden.
- MA1: formulierverzending werkte niet.
- MA: code voor verschillende versies waar mogelijk samengevoegd.
- ALL: Bij samengestelde of bundelproducten kregen de kinderen geen
  "meta-line-type" waarde.
- ALL: bundelproducten kunnen de fout in gaan als de kinderen geen of 0% als
  btw percentage hebben, of als het bundelproduct juist geen of 0% als btw
  percentage heeft. NB: Dit is nog steeds niet naar alle tevredenheid opgelost!

4.7.0 (2017-02-15)
------------------
- ALL: Customer velden in invoice-add bericht configureerbaar maken:
  * contactyourid
  * companyname1
  * companyname2
  * fullname
  * salutation
  * address1
  * address2
  * postalcode
  * city
  * vatnumber
  * telephone
  * fax
  * email
  * mark (kenmerk)
- MA1: checkboxes op het geavanceerde instellingen formulier werkten niet.
- MA1: rechten per Acumulus formulier waren niet in te stellen.
- WC: refunds hebben een negatieve "quantity" bij teruggestuurde producten en
  hierdoor ook een onterechte correctieregel.
- WC: btw over teruggegeven verzendkosten bij een refund zijn op de cent
  nauwkeurig ipv op 4 cijfers achter de komma zoals bij een bestelling. Hierdoor
  kon de btw berekening fout gaan.
- ALL: gebruik een fictief email adres (<shopname>@nul.sielsystems.nl) wanneer
  de webshop geen email adres van de klant heeft opgeslagen. Dit voorkomt dat er
  steeds een nieuwe relatie aangemaakt wordt.
- ALL: gebruik van consumer.<shopname>@nul.sielsystems.nl als fictief email
  adres wanneer de optie "Uw (niet zakelijke) klanten automatisch aan uw
  relaties in Acumulus toevoegen." niet aan staat
- ALL: Prevent json error when XML is returned.
- JOO: "Notice: Indirect modification of overloaded element has no effect" of
  "Fatal error: Cannot use object of type stdClass as array" in ConfigStore.php,
  regel 98.
- WC: Status on-hold/in de wacht wordt nu ook als niet betaald gezien.
- OC: Keuze voor OC factuurnummer als factuurnummer werd niet gegeven.

4.6.6 (2016-12-27)
------------------
- Verbeterde en gecorrigeerde afhandeling van de foutstatus.
- OC20: OC 2.0/2.1 gebruikt nog de oude benamingen van events. Daardoor werkte
  het automatisch versturen niet.
- OC2: Instantiate correct OC helper.

4.6.5 (2016-12-06)
------------------
- OC23: Error: model/localisation/tax_class not found bij verzenden factuur
  nav status wijziging (niet in batch).

4.6.4 (2016-12-06)
------------------
- ALL: Formvalidatie mbt "verzenden factuur als PDF" was fout.
- JOO: Fout in installer script.

4.6.3 (2016-11-17)
------------------
- MA1: Fatal error: Class 'Varien_Data_Form_Element_Number' not found in ...
- MA1: install file had een verkeerd versienummer.

4.6.2 (2016-11-10)
------------------
- OC2: Error in template (in 4.6.0 opgelost voor OC23, maar de rename was niet
  doorgevoerd in de gereleasede zip.

4.6.1 (2016-11-09)
------------------
- OC2: Error in template (in 4.6.0 opgelost voor OC23, maar speelde ook in OC2).

4.6.0 (2016-11-07)
------------------
- Support voor OpenCart 2.3 en Magento 2.1.
- ALL: Configuratie-optie 'verzend geen gratis verzending regels' veranderd in
  'verzend gratis verzending regels'.
- ALL: Configuratie-optie verzend 0-bedrag facturen toegevoegd.
- ALL: Configuratie-optie contact status toegevoegd.
- ALL: De configuratie-instellingen zijn nu verdeeld over 2 schermen: standaard
  en geavanceerd. De groepering en de helpteksten zijn verbeterd.
- ALL: Sommige recent toegevoegde customer tags werden niet ge-unset, maar nog
  steeds verstuurd met de 'fictieve klant' optie.
- ALL: Toevoegen van een set van vertalingen overschrijft bestaande vertalingen
  niet meer. Hierdoor is het eenvoudiger om webshop-specifieke vertalingen te
  gebruiken.
- ALL: Opslag van concept facturen kon leiden tot "Duplicate key" fouten.
- ALL: Shop namespaces mogen nu willekeurig diepte hebben.
- WC: Fatal error: Call to a member function get_order_number() on boolean in
  Siel\Acumulus\WooCommerce\Invoice\Source.php on line 45, geïntroduceerd op
  13-07-2016 in 4.5.5, waardoor refunds niet meer gecreëerd worden.
- OC23: en weer een aantal geniepige veranderingen door die klojos van OC
  waardoor de plugin niet correct werkt met 2.3. Wat ging er mis:
  * configuratiescherm: all actieve betaalmethodes werden weergegeven als
    'OpenCart'.
  * Could not load template admin/view/template/module/acumulusform.tpl!
  * De meegeleverde ocmod werkt niet meer.
- WC: Ondersteuning voor de plugin "WooCommerce Extra Product Options"
  (https://codecanyon.net/item/woocommerce-extra-product-options/7908619).
- WC: Fout in herkennen van de woocommerce-sequential-order-numbers-pro plugin,
  waardoor deze niet ondersteund werd.
- ALL: overwriteifexist werd niet op 0 gezet als dat zo was ingesteld. Idem voor
  concept op 0 (geen concept) zetten, maar dat had geen gevolgen want dat is de
  default bij afwezigheid van het veld.
- ALL: "dry run" optie met verbeterde logging toegevoegd aan batch scherm..
- ALL: Instellingen toegevoegd om opmaak varianten/opties/samengestelde goederen
  te beïnvloeden.
- HS/VM: omschrijving opties/varianten wordt nu toegevoegd aan bestelregels.
- ALL: already deprecated const ServiceConfigInterface::Debug_StayLocal removed.
- ALL: Gebruik de naam van de verzendmethode op de factuurregel voor de
  verzendkosten (was: de algemene term "Verzendkosten").
- PS: Verzendkosten (ex btw) worden op de cent nauwkeurig doorgegeven door PS.
  Dit leidt vaak tot 1 cent afwijkende facturen in Acumulus. Reken terug vanuit
  verzendkosten inc btw + btw tarief dat ook opgeslagen wordt.
- MA/OC: Opties opnemen op meerdere lijnen ging fout door overnemen btw bedrag
  waardoor correcties en strategieën niet meer correct werkten.
- OC22+: Better logging with mail errors.

4.5.6 (2016-09-15)
------------------
- OC2: ocmod problems.
- OC22: event handling overhaul waardoor automatisch versturen niet meer werkte.
- MA2: versienummer opvragen is veranderd.
- MA2: $bootstrap is niet altijd geïnitialiseerd (bv bij een cmdline update).

4.5.5 (2016-06-28)
------------------
- OC: gratis verzending regels dienen niet door een strategie behandeld te
  worden.

4.5.4 (2016-06-15)
------------------
- HS: payment_name is geen uniek id voor een betaalmethode: gebruik payment_id.
- HS: enabled is niet genoeg om te bepalen of een betaalmethode aanstaat: er is
  ook een property payment_published.
- ALL: Laat een refund naar de originele order verwijzen in de beschrijving.
- WC: Only a static class method or function can be used in an uninstall hook.

4.5.3 (2016-06-15)
------------------
- ALL: setting triggerInvoiceSendEvent verwijderd: deze gaf te veel
  onduidelijkheid en problemen. Voor alle webshops geld dat de logica hiervan
  vervangen is door de waarde van triggerOrderStatus (met name de waarde 0).
  Voor MA is triggerInvoiceEvent geïntroduceerd om de functionaliteit van
  verzending op basis van factuur events te behouden.

4.5.2 (2016-06-13)
------------------
- ALL: Fout tijdens upgrade process waardoor triggerInvoiceSendEvent niet
  gecorrigeerd wordt.

4.5.1 (2016-06-10)
------------------
- WC: Fout tijdens upgrade process.
- WC: Ondersteuning voor de gratis EU VAT Assistant plugin (deze plugin
  ondersteunt zowel B2B (verlegde btw) als B2C (digital goods)).
- ALL: Waarschuwing bij regels zonder btw wordt ten onrechte ook getoond bij
  factuur met verlegde btw.

4.5.0 (2016-06-09) [4.5.0-beta2 (2016-06-07)]
---------------------------------------------
- ALL: Fout in ondersteuning voor de margeregeling als die via custom code
  toegepast wordt.

4.5.0-beta2 (2016-06-01)
-------------------------
- ALL: Rekening en kostenplaats op basis van betaalmethode.
- ALL: Toon het 'Moment van versturen' formveld niet als er geen keus is.
- ALL: Het "Support & debug" formveld is hernoemd naar "Factuur verzendmodus".
- MA2: Magento 2 ondersteuning toegevoegd.
- ALL: Stay local optie voor "Invoice send mode" (voorheen debug and support)
  verwijderd.
- ALL: Waarschuwing als er btw vrije regels op de factuur voorkomen terwijl is
  ingesteld dat er geen btw vrije producten of diensten verkocht worden.
- ALL: Waarschuwing als de strategieën niet alle ontbrekende velden ingevuld
  krijgen
- ALL: Via de globale variabele $sielAcumulusCustomNamespace is het nu mogelijk
  om classes in de koppeling te overriden.
- ALL: Betere ondersteuning voor de margeregeling als die via custom code
  toegepast wordt.
- PS: Undefined index: type op het config formulier als de accountgegevens nog
  niet, of niet correct, zijn ingevuld.

4.5.0-alpha1 (2016-05-13)
-------------------------
- MA2: Magento 2 ondersteuning
- ALL: kleine refactorings (logging, teksten, commentaar).

4.4.3 (2016-04-19)
------------------
- ALL: prevent double listings in meta-calculated-fields.
- PS: Splitsen van kortingsregels over de 2 voorkomende btw tarieven ging fout
  als er ook een (incorrecte) 0%-regel in de bestelling voorkomt.
- MA1: Incorrecte en incomplete free shipping regel op refunds.

4.4.2
-----
- OC: Verzenden orders via statuswijziging werkt niet (OC1 gaat alleen fout aan
  de catalog kant).

4.4.1 (2016-04-12)
------------------
- PS(/ALL): Split strategieën herzien, deze gaven, iig voor PS, niet de juiste
  resultaten.

4.4.0 (2016-04-11)
------------------
- ALL: Als een factuur als concept verzonden wordt, stuurt Acumulus geen
  entry_id terug. Toch willen we ook hier een beveiliging tegen dubbel
  versturen: sta null toe als waardes voor entry_id en token en sla dit ook op.
- ALL: Fout in TryallVatRatePermutations waardoor die nooit succesvol kan zijn.
- ALL: (dummy) Fail strategie is niet meer nodig en daarom verwijderd.
- ALL: Forceer verzenden wanneer de debuginstelling op testmodus of lokaal
  staat (3e of 4e optie: 'Verzend berichten naar Acumulus maar Acumulus zal
  alleen de invoer controleren op fouten en waarschuwingen en geen
  veranderingen opslaan.'of 'Verzend geen berichten naar Acumulus, verstuur
  alleen een mail met het bericht dat verstuurd zou worden.').
- ALL: Betere logging in Strategy classes.
- JOO: checkbox waarden worden niet goed opgeslagen in de config.
- JOO: Bij installatie: You have an error in your SQL syntax ... near '`id`
  int(11) NOT NULL auto_increment, ...
- MA1: Prevent warnings in Magento whose own autoloader does log warnings when a
  class cannot be loaded.
- ALL: Notice: Undefined index: meta-vattypes-possible in
  Siel/Acumulus/Invoice/Completor.php on line 662.

4.3.0 (2016-03-08)
------------------
- ALL: Op PHP5.3: Fatal error: Uncaught exception 'ReflectionException' with
  message 'Class Siel\Acumulus\WooCommerce\Shop\AcumulusEntryModel does not
  have a constructor, so you cannot pass any constructor arguments' in
  /wp-content/plugins/acumulus/libraries/Siel/Acumulus/Shop/Config.php:211.
- OC1: Eerste versie op deze library: Europese btw tarieven; Batch verzending.
  Nog geen refunds.
- OC2: Typo die voorkomt dat coupon regels gesplitst kunnen worden over
  verschillende btw tarieven.
- OC2: Typo die voorkomt dat het acumulus.invoice.sent event uitgevoerd word.
- ALL: Waarden voor de instellingen "moment van versturen" en  "Bestelstatus"
  worden niet getoond op formulier (wel opgeslagen en gebruikt).
- WC: Class batchform verwijderd, base batchform is niet meer abstract.
- PS: PS specifieke code volgens standards van https://addons.prestashop.com.
- ALL: Code nu volgens PSR-2 coding standard opgemaakt.

4.2.1 (2016-02-24)
------------------
- PS: Form submit van instellingenformulier wordt niet herkend en verwerkt.
- WC: Variabele producten waarbij de variaties niet als aparte SKUs aangemaakt
  zijn kwamen zonder variantomschrijving terecht op de factuurregels.
- ALL: Nieuwe optie toegevoegd om facturen met verlegde btw te kunnen
  onderscheiden van facturen met alleen btw vrije producten. Dit voorkomt een
  hoop waarschuwingen bij de meeste winkels die toch geen btw vrije producten
  of diensten leveren.

4.2.0 (2016-02-16)
------------------
- ALL: De completor kijkt nu naar de bestellingstotalen en de totalen van de
  afzonderlijke bestellingsregels en voegt een correctieregel toe als deze niet
  gelijk zijn. Dit leverde fouten in verschillende plugins op, met name bij
  kortingen in refunds:
  * MA1: btw op korting op verzendkosten in een credit note worden niet
    opgeslagen, bereken aan de hand van ontbrekende bedragen.
  * PS: Kortingsbedrag (ex btw) op een order dat teruggevorderd wordt op een
    credit slip is niet bekend: bereken aan de hand van het matchen van
    ontbrekende bedragen met kortingen op de oorspronkelijke order.
  * VM3: Verbeterde behandeling van kortingen zowel via calc rules als coupons.
- ALL: Sla geen leeg wachtwoord op (staat toe dat, eenmaal ingevuld, het niet
  meer naar en van de browser verstuurd hoeft te worden).
- ALL: type fout waardoor removeEmptyShipping optie niet correct werkte.
- PS: Mogelijke PHP warning als een order via batchformulier verzonden wordt.
- MA1: Foute verzendkosten werden verstuurd als een korting ook van toepassing is
  op die verzendkosten.
- MA1: Payment fee kan vooralsnog niet worden herkend: getPaymentchargeAmount()
  is een niet bestaande method.
- ALL: Source:;getStatus() toegevoegd. allows further refactorings.
- ALL: refactorings, waaronder
  * hernoemen van een aantal 'meta-...' tags.
  * introductie en gebruik van ShopConfig::getForm().
  * introductie en gebruik van Source:;getStatus().
- OC2: bug fixing.

4.2.0-beta9 (2016-01-25)
------------------------
- OC2: Eerste versie op deze library: Europese btw tarieven; Batch verzending.
  Nog geen refunds.
- ALL: Verbeterde verwerking van facturen die (mogelijk of zeker) gesplitst
  moeten worden. Als er meerdere factuurtypes mogelijk zijn, wordt er een
  conceptfactuur verstuurd die in Acumulus gecorrigeerd en evt gesplitst moet
  worden.
- HS: zelf aangemaakte statussen werden niet herkend bij een orderstatuswijziging.

4.2.0-beta8 (2016-01-18)
------------------------
- ALL: Optie toegevoegd om aan te geven of u in uw winkel digitale diensten
  aanbiedt. Dit wordt gebruikt voor een betere selectie van en controle op de
  mogelijke btw types. GEEF DEZE OPTIE EEN WAARDE IN HET INSTELLINGENSCHERM!
- WC: Klikbare link naar de changelog in de WP readme.txt.
- WC: filters.txt aangepast zodat huidige parameters en hun type beschreven
  worden.
- PS: do no longer update not changed fields id_shop and id_shop_group.


4.2.0-beta7 (2016-01-13)
------------------------
- WC: Gebruik WC logging ipv de wel erg basic (= afwezige) WP logging. Acumulus
  heeft nu zijn eigen log onder WooCommerce - Systeem status - Logs.
- ALL: Verwijder dubbele email adresseringen en display names.
- ALL: Verbeterde verwerking van gelijke btw percentages (b.v. BE en NL 21%).
  Als er meerdere factuurtypes mogelijk zijn wordt er een conceptfactuur
  verstuurd die in Acumulus gecorrigeerd en evt gesplitst kan worden.
- ALL: Meer logging.
- HS/VM3: log message (gebruikt voor debugging) verwijderd.

4.2.0-beta6 (2016-01-11)
------------------------
- HS/VM3: Logging werkte alleen als Joomla in debug modus is en ook dan nog niet
  voor debug messages. Acumulus heeft nu zijn eigen log file.
- ALL: empty <line> in XML als item with key = 0 is verwijderd, bv. door de
 "Verzend geen gratis verzending regels" optie.

4.2.0-beta5 (2016-01-07)
------------------------
- HS/VM3: Corrected bad fix introduced in 4.2.0-beta3 (PHP5.5 constructs).

4.2.0-beta4 (2016-01-06)
------------------------
- WC, PS, MA1:  Uncaught exception 'ReflectionException' with message 'Class
  Siel\Acumulus\WooCommerce\Shop\ConfigStore does not have a constructor, so you
  cannot pass any constructor arguments' (error introduced in 4.2.0-beta2).
- WC: Hoofdlettergevoeligheid bij doorgeven van namespace. Geeft: Fatal error:
  Cannot instantiate abstract class Siel\Acumulus\Shop\InvoiceManager in
  /Siel/Acumulus/Shop/Config.php on line 203 (error introduced in 4.2.0-alpha1).

4.2.0-beta3 (2016-01-05)
------------------------
- VM3,HS: PHP5.5 constructs in Joomla\Shop\InvoiceManager.php.
- WC: Added to Wordpress.org

4.2.0-beta2 (2016-01-05)
------------------------
- VM3,HS: Joomla componenten mogen dezelfde naam hebben.

4.2.0-beta1 (2016-01-04)
------------------------
- HS: Orders verzenden werkt, refunds nog niet

4.2.0-alpha5 (2015-12-31)
-------------------------
- VM3,HS: Meer logging tijdens installeren.
- PS: Ondersteun versies voor 1.6.0.x door te controleren of getOrderDetailTaxes
  wel aanwezig is.
- HS: customer gedeelte van facturen zo nu correct moeten werken.

4.2.0-alpha3 (2015-12-28)
-------------------------
- VM3: Define and trigger Joomla events onAcumulusInvoice[Created|Completed|Sent].
- WC: Added readme.txt conform the wordpress.org instructions.
- WC: Add our own manual line to the manual lines of the system instead of
  replacing them.
- VM3: return type van AcumulusEntryModel::getByEntryId en getByInvoiceSourceId
  waren fout.
- VM3: Sta selecteren statussen om te verzenden toe op ConfigForm.

4.2.0-alpha1
------------
- Groot aantal refactorings om ondersteuning voor HikaShop toe te voegen. Code
  die geen gebruik maakt van VM3 functies maar alleen maar van Joomla functies
  is apart gezet.
- VM3: Ondersteuning voor automatische versturing.
- VM3: return type van AcumulusEntryModel::getByEntryId en getByInvoiceSourceId
  waren fout, maar worden (nog) niet gebruikt.
- PS,WC: handmatig ingevoerde regels bij refunds konden genegeerd worden.
- VM3: Error in install script: readme-nl.txt is hernoemd naar leesmij.txt.
- PS: De koppeling werkt ook met PS1.5. Minimale versie requirement aangepast.
- ALL: Prevent autoloader warnings when file does not exist.
- VM3: Parse error: syntax error, unexpected T_OBJECT_OPERATOR in
  com_acumulusInstallerScript.php on line 68: PHP5.3 incompatibiliteit.

4.1.1 (2015-11-07)
------------------
- ALL: Batchverzending: onterechte/verkeerde melding "niet verzonden omdat
  factuur al verzonden is" als factuurverzending wordt tegengehouden door een
  event.
- WC: Versienummer van de plugin zelf was niet bijgewerkt, alleen die van de
  library.
- WC: Updated the documentation of filters and actions in filters.txt
- ALL: Undefined index: countrycode in Siel/Acumulus/Invoice/Creator.php line 294
- ALL: API hernoemd naar Library (in versie-info).
- ALL [#39961]: Er bestaan producten die niet onderhevig aan btw zijn.

4.1.0 (2015-10-31)
------------------
- MA1,PS,WC [#33383]: Het is nu mogelijk om meerdere order statussen te kiezen
  waarbij de order naar Acumulus verstuurd moet worden.
- WC [#33222]: Om de betaalstatus van een order te bepalen, wordt niet meer
  gekeken naar paid_date, alleen nog maar naar needs_payments().
- WC [https://forum.acumulus.nl/index.php?topic=4984.0]: In WC is het mogelijk
  om producten te verwijderen.


4.0.3 (2015-10-11)
------------------
- WC [https://forum.acumulus.nl/index.php?topic=4963 ]: Regression: WC denkt
  altijd dat factuur al verzonden is.


4.0.2 (2015-10-07)
------------------
- PS,WC: Support upgrading from 3.x.
- WC: Lazy load config (LogLevel, debug).


4.0.1 (2015-10-04)
------------------
- WC [https://forum.acumulus.nl/index.php?topic=4942.0]: PHP Fatal error: Class
  'Requirements' not found in AcumulusSetup.php line 81.


4.0.0 (2015-10-02)
------------------
De library 4.x is volledig vernieuwd. Er is meer gemeenschappelijke code en er
is meer documentatie. Hierdoor kan de library ook losstaand gebruikt worden.

Alle kennis en ervaring die met de library 3.x is opgedaan is verwerkt in deze
versie. Uiteraard zijn alle problemen die in 3.x zijn gevonden en ook van
toepassing waren op 4.x ook hier opgelost. Vanwege de grote verschillen is de
3.x changelog verwijderd en beginnen we hier met een schone lijst.

- ALL: Europese btw tarieven.
- MA1,PS,WC: Ondersteuning voor credit memo's.
- ALL: Batch verzendformulier.
- VM: Ondersteuning voor VirtueMart 3. Doch nog geen ondersteuning voor credit
  memos, automatische verzending en de betaalde EU VAT checker extensie.
- WC: Ondersteuning voor de EU VAT extensie.
- WC: Ondersteuning voor de plugins woocommerce-sequential-order-numbers(-pro)
  en wc-sequential-order-numbers.
