Dolibarr 20.0.0
7 October 2024
Dolibarr version 20.0.0 is now available (major release).
Upgrading to Dolibarr 20.0.0
Dolibarr 20.0.0 can be upgraded to (or installed) using any of Installatron's products. Use Installatron's optional Automatic Update feature to automatically apply Dolibarr updates as new versions are released, or use Installatron's Clone feature to duplicate an existing Dolibarr install to test the 20.0.0 upgrade prior to applying it live. Get started managing your Dolibarr installations with Installatron
What's New in Dolibarr 20.0.0
For users:
- NEW: Compatibility with PHP 8.2 (with no need to disable warnings)
- NEW: Font param Look and Feel THEME_FONT_FAMILY (#29302)
- NEW: Param to show main menu logo in color (#29305)
- NEW: #27048 add form to globally set "VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT" variable (#27049)
- NEW: #29274 Add possibility to have different mail for autocopy for holiday (#29275)
- NEW: Module WebPortal experimental
- NEW: Module Bookcal is now experimental (TimeZone not yet supported)
- NEW: #24031 add option MAIN_GRANDTOTAL_LIST_SHOW to always show grand total to lists (#27247)
- NEW: #28070 Adding mobile phone to thirdparty
- NEW: Accept the __NOW__ and __USER_ID__key into filters
- NEW: Accountancy - Add possibility for specific format FEC to sort with the FEC name (#29722)
- NEW: Accountancy - Expense report - Add an option to use end period for transfer (#26706)
- NEW: Accountancy - Show accounting result on balance
- NEW: Accountancy - Show import key if exist (#29265)
- NEW: Accountancy - Auto-determine piece number in FEC import (#29672)
- NEW: Accountancy - Option to transfer only reconciled lines from bank (#29408)
- NEW: Accountancy - Separation of accounting default account for salary and expense report
- NEW: Various payment - Use list of accounting account when edit (#27992)
- NEW: Add option to change all service dates at once
- NEW: Add a default limit in nb to agenda export
- NEW: Add a Feedback-ID into email headers
- NEW: Add a link "Fill with layout"
- NEW: Add a link to add a website category in edit page properties
- NEW: Add ALT+s to save a website page in edit mode
- NEW: Add a protection in inventory when a product has stock of lot and is
- NEW: Add a warning if invoice payment is Credit Transfer on newpayment.php (#29685)
- NEW: Add Categorie filter for ActionComm (#28041)
- NEW: Add code+label of payment mode and term in purchase invoice export
- NEW: Add column data payment on VAT list
- NEW: add column for barcode in ticket
- NEW: add column to store a label for a supplier price (#27238)
- NEW: add constant TAKEPOS_ALTERNATIVE_PAYMENT_SCREEN
- NEW: add constant TICKETS_NO_COMPANY_ON_FORM
- NEW: add constant VATUPDATE_NO_TRANSACTION
- NEW: add const PROJECT_HIDE_OPEN_PROJECTS_LIST_ON_PROJECT_AREA to have the ability to hide the potentially very long list of open projects in any case
- NEW: add data type 'project' to blockedlog
- NEW: Add default User roles for Thirdparties (#29242)
- NEW: Added a configuration in workflows (#26959)
- NEW: added address, zip & town to resource object
- NEW: add field Reply to in emailing
- NEW: Add Filter on product referring object status(Order and Order Supplier) (#28275)
- NEW: add geometrics extrafield (#28239)
- NEW: Add global PRODUCT_STOCK_LIST_SHOW_WITH_COMPILED_PHYSICAL_STOCK for this is based on compiled physical stock, not the sum of product stocks on existing links. (#28171)
- NEW: Add id of last page accessed in website
- NEW: Add import ID in list of products
- NEW: Adding a recipient on emails sent, change status to sent partially.
- NEW: Add invoice subtype (some countries need this like greece)
- NEW: Add link to export ICS file of an event.
- NEW: Add maintenance tool to switch utf8 -> utf8mb4
- NEW: Add option MAIN_USE_FULL_TEXT_INDEXATION
- NEW: Add option PDF_ADD_POSITION
- NEW: Add option position['find'] to DolEditor (#29546)
- NEW: Add option THIRDPARTY_MIN_NB_PROF_ID and THIRDPARTY_MAX_NB_PROF_ID
- NEW: Add option TICKET_INCLUDE_SUSPENDED_STATUS (Suspended status no more
- NEW: Add option to open files in new tab (#29604)
- NEW: Add picto favicon
- NEW: add position column in category table (#27425)
- NEW: add position field into category add view
- NEW: add relation type on element_element (#29329)
- NEW: Add shipments and reception stats on product stat tab (#29395)
- NEW: Add SMTP AUTH method PLAIN
- NEW: add some bank info on odt
- NEW: Adds payment terms and percent discount to the creation of an invoice from time entries in projects (#29694)
- NEW: add state province filter field
- NEW: Add support of [IF] tag other than in the core content (ex: headers who is in stylesXml) (#29357)
- NEW: add table to store product relation with thirdparty
- NEW: Allow smileys into emailing html content
- NEW: Allow to set a default project for POS sales (#27042)
- NEW: animation for display spinner when waiting response
- NEW: Asset Module - make asset model creation in a single step (#26982)
- NEW: auto fill infos in template email
- NEW: Automatically fill matching extra fields of object on line creation. (#27240)
- NEW: Can add documents on a payment (#29660)
- NEW: Can create new membership type from the create member form
- NEW: Can export security events.
- NEW: Can force language of a page in website module with xx/pagename
- NEW: Can force position of signature on PDF using a setup constant (#29676)
- NEW: Can generate the email selector file
- NEW: Can setup phone mobile for the main company (#28410)
- NEW: Can show legal form of company into the list
- NEW: Can show the legal form in address of recipient in PDF
- NEW: Can show the list of projects having at least one contact that is a contact of the third party
- NEW: Complete the thirdparty index page with last modified contacts
- NEW: constant MAIN_DISCARD_NEWD_PROJECTS_IN_SELECT
- NEW: Constant to select if typent helps define whether the thirdparty is a company
- NEW: contact type on auto add contributor (#26077)
- NEW: contenteditable is supported on table,header,footer and menu tags
- NEW: cronjob: deny to launch a method from a deactivated module
- NEW: determine multi-currency price on object line create tpl (#28021)
- NEW: dev: Add tool to update license with developer info
- NEW: Dev documentation about setting up pre-commit locally
- NEW: Develop new quick edit opportunity status (#27892)
- NEW: display product and qty in stock_movement table in project overview (#29296)
- NEW: dol_copy added to forbidden functions
- NEW: Dolibarr can now re-open ticket upon customer reply on the same ticket via email#28303 (#28451)
- NEW: Edit ticket (#29497)
- NEW: Expense Report: Add conf to block line creation if line date is out of range (#29427)
- NEW: Expense Report: new line add conf to Block if line date out of range
- NEW: export invoice source id (backport v17)
- NEW: export order client code
- NEW: Export RSS of event can be filter on action type and code (useful for smartphone notification with feeder)
- NEW: feature to merge 2 tasks (#29214)
- NEW: fetch object by element for website account card
- NEW: filter on sale representative in contact list
- NEW: Filter shipments by selecting multiple shipping methods (#28376)
- NEW: Font param Look and Feel (#29302)
- NEW: functionality for stock configuration prompt in AI module (#28030)
- NEW: functionality to delete contact of company list
- NEW: functionality to display codebar on pdf files (#29623)
- NEW: functionality to list event for user
- NEW: functionality for salaries massaction (bank-transfer)
- NEW: function for removing company contacts
- NEW: get html template example for each model
- NEW: hide external and non employee users in combobox
- NEW: hide external user in combobox
- NEW: Implement EPC QR Code on Invoices (#29445)
- NEW: in project overview, stock movement section, we only stock movement ref, but not the product and not the quantity
- NEW: input in emailForm to put AI instructions
- NEW: input reason label in customer proposal and order export (#29540)
- NEW: intervention list date filter
- NEW: Invoice Creditor Reference and banking barcode (FI) (#29328)
- NEW: Invoice PDF If bank account is empty, not print "Bank" and "Account"
- NEW: Label on Price fix:#28544
- NEW: layout and prompt AI on create emailing
- NEW: Look and feel v20 - add picto to full list on summaries tables.
- NEW: Look and field: The operator 'or' on category filter visible only
- NEW: make "sell" or "eat by" mandatory in product lot
- NEW: Management of the In-Reply-To and References for ticket answers.
- NEW: module user rights enhancement (#29150)
- NEW: Module Website: Can link/unlink translation between web pages
- NEW: Move dir of cache for widgets
- NEW: multiselect with checkbox in categories/tags search for thirdparty list (#28335)
- NEW: new consts to redirect from massaction createbills (#29436)
- NEW: new global string to preselect yes for one bill per thirparty in orderlist massaction (#29359)
- NEW: notification action triggers for cancelling orders and invoices
- NEW: now button when editing an event
- NEW: online signature of shipments (#29559)
- NEW: On OAuth Google login, no prompt at all if already logged in Google
- NEW: Param to show main menu logo in color look and feel (#29305)
- NEW: Payment page received from donations
- NEW: possibility to define a completely inactive module (#29289)
- NEW: preview example page in website when create page
- NEW: propal canceled status
- NEW: receptions in dolibarr search box (#29700)
- NEW: redirect link in the config module in the event of an error client
- NEW: remove auto selected user for taxes-charges by default
- NEW: resource address, phone, email & maxusers (#28185)
- NEW: Script for fast identification of missing/unused/duplicate translations
- NEW: search member by date
- NEW: See the documents of my subordinates (#28318)
- NEW: Show error on ical parse
- NEW: Show the profit per attendee on events
- NEW: signed status CRUD to contract and fichinter
- NEW: Simplify the verification of context in hook (#27105)
- NEW: Sort variants list by product ref on combinations page (#27969)
- NEW: Statistic page donation (#28463)
- NEW: Supplier Invoice - List - Selector with choice on ECC country
- NEW: supplier order submit method message (#27855)
- NEW: Supplier Proposal API extended with DELETE, POST and PUT possibilities
- NEW: Support $moreinheader with SwiftMailer
- NEW: Support a date selector with type 'html'
- NEW: Support Reply-To tracking in emails sending (tickets only for the
- NEW: Take image from content for RSS
- NEW: TakePOS - add buttons to allow keyboard usage for discounts (#24819)
- NEW: TakePOS - add constant to show line subprices
- NEW: TAKEPOS - Clear search results
- NEW: TAkePOS - don't allow payment if no thirdparty selected
- NEW: TakePOS - Option TAKEPOS_NO_GENERIC_THIRDPARTY to disallow payment if no specific thirdparty selected (generic not allowed)
- NEW: Test send triggercode to url (#29675)
- NEW: Trigger for Knowledge (#29645)
- NEW: Add branches into apstats security report (cti.dolibarr.org)
- NEW: updated resource list for new fields (#28705)
- NEW: Update expense report card.php to allow pdf preview even without thumbnail (#29491)
- NEW: update price with auto to use const for rounding prices (#29350)
- NEW: Use a nicer combo list to select the export accounting format
- NEW: users can set their own length for short lists
- NEW: warning message when cloning a product whose status is not to sell (#28374)
- PERF: Performance enhancement on Invoice/Paiement area page
- PERF: Use cache for loaded users/contact on project list
- SEC: add some dolibarr functions to dol_eval forbidden functions (#29459)
- SEC: #28168 Correct protocol limitations (PHP7.4/Win) (#28172)
- SEC: Add a protection against installation of external module bypassing
- SEC: A user with export permission can export module data without
- SEC: Reduce nb of var without WAF used when using the website module
For developers or integrators:
- NEW: Situation invoice - Add new official progressive mode - (constant INVOICE_USE_SITUATION = 2)
- NEW: $noescapetags param of dol_escape_html works if attributes
- NEW: Add createInvoiceFromContract to API invoice (#27277)
- NEW: add debugging info to api/status if non-production
- NEW: Add functions to manipulate emojis* NEW: add hook addMoreCategoryList to list category from external module
- NEW: add hook AFTER_VAT_UPDATE
- NEW: Add hook on printsheet barcode page
- NEW: adding online_payment_url to invoices API (#28107)
- NEW: Add method getPublicImageOfObject() for website module
- NEW: Add sql stddev_pop db function.
- NEW: Show the process ID and user ID into log files
- NEW: Add trigger on modify of user bank account
- NEW: Add Windows ci workflow
- NEW: All apis has a hook context of "api" initialized
- NEW: All fetchAll() method now support the USF syntax.
- NEW: allow [] in dol_eval (#27290)
- NEW: API Add some api endpoints (#25126)
- NEW: API can create, get and update extrafields #29249 (#29270)
- NEW: Api can force invoice ref (#28547)
- NEW: API can Post extrafields #29249 v2
- NEW: API delete extrafields from name and elementtype
- NEW: API GET projects by REF and by email_msgid
- NEW: Api parameters are sanitized by the WAF, same code than GET/POST
- NEW: API setup delete extrafields from name and elementtype v2 (#29269)
- NEW: API setup update extrafields from name, elementtype and json
- NEW: API setup update extrafields from name, elementtype and json (#29273)
- NEW: api_thirdparties add and delete representatives (#27943)
- NEW: Extend of module options Setup
- NEW: Factoring and Fix external module elementType (#28666)
- NEW: class ai for generate content with api
- NEW: consider document lines in element properties
- NEW: DolDeprecationHandler for deprecations
- NEW: Execute the doAction hook on other ticket pages (#29701)
- NEW: FormSetupItem: show picto in front of confs applied across all entities (#28024)
- NEW: Global constant for deprecated module mapping (#28348)
- NEW: Hook after total Table on PDF (#28092)
- NEW: Hooks tab in debugbar (#24992)
- NEW: Init of a module with a website template copy also the preview
- NEW: llxHeader body css for asset, for command see #26856, for donation
- NEW: ModuleBuilder : add type genericpassword entry types
- NEW: Makes it possible to update html text fields besides integer and alpha fields for a custom build module.
- NEW: method to help declare dictionaries more easily
- NEW: Upgrade jsChantImproved to 2.8.10
- NEW: Upgrade Sabre lib to 4.6.0
- QUAL: Add sqlfluff (SQL code and style check) (#29097)
- QUAL: Check lang files does not contains 'notranslate'
- QUAL: Clean code around dol_eval use
- QUAL: clean deprecated code
- QUAL: Deprecated "domiciliation". Replaced with "address"
- QUAL: DiscountAbsolute: inherit CommonObject to implement errorsToString
- QUAL: Enhance API description - BOM, Documents (#27492), Setup
- QUAL: extend api/status
- QUAL: feature parity between vendor and customer template invoice (#26588)
- QUAL: FichinterTest: add errorsToString()
- QUAL: Force subclass MINVERSION (#26314)
- QUAL: Make the same condition only once.
- QUAL: phpstan github action
- QUAL: professional identifiers - remove TODO by adding profid.lib.php
- QUAL: Properties ->date_update and ->date_modification were merged
- QUAL: removed duplicate language file
- QUAL: Remove the external js library jstimezonedetect
- QUAL: Remove use of customurl filter. Must use the USF syntax.
- QUAL: Rename all input fields "tel" into "phone"
- QUAL: Rename column fk_origin_line on shipment lines into fk_elementdet to match a generic use. (#28989)
- QUAL: replace $conf->global with getDolGlobalString()
- QUAL: Send API response data before completing post-processing tasks
- QUAL: Sending API response data to clients before completing post-processing tasks.
- QUAL: Start to rewrite the export of accountancy. Misconception generates
- QUAL: the config_extended of phpstan will be kept on apstats only for the
- QUAL: The signature for all ->delete() method has been modified to match
- QUAL: Use phan to help detect new issues (#27706)
- QUAL: use real time when creating action from list
- QUAL: replace hard-coded dictionary IDs with constants (#29501)
WARNING - The following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
- If a filter is defined into and extrafields "Select from a table", this filter MUST use the Universai Search Filter syntax (field:=:value) instead of field=value. See https://wiki.dolibarr.org/index.php?title=Universal_Search_Filter_Syntax
- The parameter $filter of methods fetchAll() does not accept array of SQL commands but must be a string of an Universal Search Filter syntax. See https://wiki.dolibarr.org/index.php?title=Universal_Search_Filter_Syntax
- Some API HTTP return code were moved from 401 to 403 to better follow REST specification.
- More class properties (with old name in french) are now deprecated in favor of the property name in english.
- dolibarrtriggers class VERSION_XXX constants have been deprecated. Please use array dictionary VERSIONS['XXX'].
- Properties ->date_update and ->date_modification were merged into date_modification.
- All CLI tools (into /scripts) return a positive value to the shell if error (0 remains success) for a better cross platform compatibility. On linux the exit(-1) was caught as 255, it may be now exit(1) so will be caught as 1.
- Ldap class methods connect_bind() & dump_content() have been renamed
- Use of dol_eval with parameter $returnvalue=0 is deprecated.
- The signature for all ->delete() method has been modified to match the modulebuilder template (so first param is now always $user), except the delete for thirdparty (still accept the id of thirdparty to delete as first parameter). Will probably be modified into another version.
- Route for API /thirdparties/gateways has been renamed into /thirdparties/accounts to better match the api object name.
- The AGENDA_ENABLE_DONEBY hidden option has been removed. So $userdoneid in actioncomm class is deprecated. Please use $userownerid instead. Also, the deprecated field $fk_user_done in actioncomm table is removed. Please use $fk_user_action instead.
- The table commande_fournisseur_dispatch has been renamed into receptiondet_batch to better match its goal and the field fk_commande and fk_commandefourndet were renamed into fk_element and fk_elementdet
- Removed trigger BILLREC_CREATEBILL. This trigger was not a CRUD event. If you used it, you can already use the trigger BILL_CREATE and test that ($object->fac_rec > 0) to know if creation trigger is from a recurring invoice or not. Also this old trigger was never enabled into table llx_c_action_trigger.
- Renamings in expedition line table and class, fk_origin_line is now fk_elementdet in table and class.
- The signature of method fetch() of class CompanyBankAccount has been modified to match the signature of method Account->fetch()