Dolibarr 21.0.0
27 March 2025
Dolibarr version 21.0.0 is now available (major release).
Upgrading to Dolibarr 21.0.0
Dolibarr 21.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 21.0.0 upgrade prior to applying it live. Get started managing your Dolibarr installations with Installatron
What's New in Dolibarr 21.0.0
Security
- security avoid RCE using -'- sequence to pass --checkpoint-action parameter in tar command.
- FIX Security path transversal with modulepart=medias (viewimage.php and download.php)
Breaking Changes
- Prepare your module for deprecation of triggers code XXX_INSERT to support also XXX_CREATE.
- More class properties (with old name in french) are now deprecated in favor of the property name in english.
- The json emulator dol_json_encode/decode() is removed. The native json PHP module must be enabled/available (this is the case by default with most PHP installation).
- The deprecated GET parameter "&sall=" has been removed, use now the "&search_all=".
- The experimental and deprecated module WebserviceClient is completely removed (was never released and use deprecated architecture). It may be replaced with the stable module Webhook.
- The dynamic properties ->no_button_delete, ->no_button_edit, ->no_button_copy for $object Product that could be set by an external module must no more be
- set (not allowed by PHP 8.2). A module can already return an array with key 'no_button_delete', 'no_button_edit', 'no_button_copy' for the same purpose.
- The old function dol_bc($var, $moreclass = '') has been removed. If you called it, just stop to call it (the function has no effect since a long time).
- The trigger code CATEGORY_LINK and CATEGORY_UNLINK have been replaced with code CATEGORY_MODIFY. You can read ->context['linkto'] or ->context['unlinkoff'] to detect if we want to make a link or unlink.
- The property ->domiciliation and ->propio on bank accounts has been deprecated and replaced with property ->address and ->owner_name everywhere.
- If you were using the substitution key __MEMBER_CIVILITY__, you must now use __MEMBER_TITLE__
- The hidden title of tab that was hidden by the CSS class tabTitleText has been completely removed from HTML content.
Highlights
- NEW Module - help to setup OpenID Connect (#30317)
- Module AI moved from experimental to stable
- Add hidden option CONTRACT_HIDE_MYCOMPANY_SIGNATURE_SECTION_PDF
- Add a tab on recurring invoice card to see the list of invoices generated from this recurring invoice (customer and supplier invoices) (#31463)
- #28871 signed_status to commande (#30359)
- #30269 linked project in column of last record tables (#30344)
- Accountancy - Add general account on thirdparty
- Accountancy - Add partial reconcile on subledger (#30027)
- Accountancy - Option to select the label of operation (#31200)
- Accountancy - Allow grouping taxes with primary line price (#26732)
- Activate PHPUnit with tests on permission on $action ==...
- Add advice for max size on list for better performance
- Add an advanced permission to validate knowledge (#30855)
- Add a test mode into the setup of AI module to test the AI prompts.
- Add a tool to decrypt data encrypted in database.
- Add auto generate document when reception is created (#30688)
- Add badge for generate invoice client tab (#31559)
- Add caldav on fichinter (#30582)
- Add column agenda_id to implement the link between files and event
- Add column "comment" in list of payment
- Add constant to hide version (#30865)
- Add country in search of project
- add duration extrafields (#31595)
- Add export for thirdparty bank accounts (#30807)
- Add export profile to export MO and lines of consumption/production
- Add option to store the text content of uploaded files into database (with conversion with pdftotext)
- Add Filter Assistance for Filling Filters Field (#31646)
- add last stock movement and product nature to StocksWithBatch export (#30578)
- Add member title to the labels (#31710)
- Add mode Customer price + level price (#31091)
- add option to add external billing contact on the supplier_proposal pdf (#30298)
- Add option to clone its default BOM when cloning a product (#30088)
- Add option to enable PDF frame rounded corners
- Add option to round weight and volume on shipment PDF
- add pdf regeneration to mass action for shipments (#29970)
- Add picto on list of notification email templates
- add recurring supplier invoice on supplier tab #30945 #30949
- Add sort by ref warehouse/product or ref product/warehouse on inventory product list (#31639)
- Add some improvement for ODT Contracts (#31715)
- Add terms of sale on documents (#24846)
- Add thirdparty state in substitution array (#31549)
- Add tooltip on closing accounting setup
- add trigger for linking and unlinking invoices (#30182)
- Add Unit price on supplier order stat product (#31055)
- add warehouseId parameters in select_produit to limit result to existing product in select (#30477)
- allow link feature to task (#30235)
- Authorize modification of a partially shipped order (#31423)
- autogenerate project reference in API (#30638)
- automatically change status on answering a ticket (#30556)
- Browser notifications use now jnotify (fix browser compatibility)
- can add extrafields with dol_move (#30574)
- Can change the type of a social contribution if no payment
- can delete a category translation (#31396)
- Can link an object to another using the ref. Close #31001
- Can set a class on the tr lines of form setup lines
- Can set border radius of list and tables
- Can set date of transmission in 1 click when validating SEPA
- Can set parameters with setup type yesno.
- Can set the contact type for the autoassigned user that creates a project (#30444)
- Can show raw value of oauth token
- Can use a specific profile to send email for password forgotten
- option to care grandchild (#31314)
- Look and feel - checkbox to choose thirdparty nature (#30192)
- Color line total and sub total (#26172)
- Constant to hide user login times (#29815)
- Const ASSET_ROUND_INTEGER_NUMBER_UPWARDS for ASSET Module. Compatibility to migrate from other accounting solutions. (#31615)
- Content of tab "attached files" is more compact.
- Contract signed status update (#30779)
- Create thirdparty notification by action code (#30541)
- Customer price and level price together
- default configuration for event reminder (#31407)
- determine multi-currency price on object line create tpl (#28021)
- Display for socialnetworks admin
- display mark rates in objectLineCreate (#30872)
- due date in accounting bookkeeping list and card (#30061)
- enhance the OAUTH2 token manager. Can refresh a token from page.
- EPC QR CODE - Use bank owner account name instead of company (#31735)
- fichinter list disable details option (#30884)
- filter on invoice dates in product margin tab (#29997) and thirdparty margin tab (#29998)
- FIX: Display invoice widgets by amount instead of number (#30215)
- Add the Clone of company (#29755)
- function for Preview In CKeditor products
- FY Changed Period handle in Module Asset (#31618)
- hidden option MAIN_TE_PRIVATE_FIRST_AND_LASTNAME_TO_UPPER (#31143)
- Hide completed items in Link to (#31329)
- Iban is saved encrypted
- if a user is associated with the expense report, then that user will get an associated credit line ($tabtp) generated.
- Implementing Billable tasks on projects using new attribute "billable" (#30092)
- Include a protection into check update of module to detect malware
- intervention signed status update (#30629)
- INTRA VAT ID field optionally mandatory and/or invoice mandatory in thirdparty module setup (#31663)
- Invoice - Generate payment information - Structured communication (#31376)
- Invoice line import - fk_product can be a ref (#30795)
- Look and feel v21 - Can have rounded border on tables
- Look and feel v21 - Toolbar for WYSIWYG editor is short on smartphone
- Management of extrafields on customer prices, level prices and default prices (#31313)
- manage several type of dangerous goods for a same parcel (#30238)
- Member - Can upload a file with drag and drop (#30265)
- Move the picto in the first tab label always visible
- ODTSubsitution for date_start_real / Contracts
- Look and feel - Opacity for finished lines (#30219)
- option: assign default roles to "individual" third-party contacts (#30499)
- option to allow freezing qty in BOM service's line (#29990)
- Add a page to list the lines of orderse (#31521)
- pagination in product margin tab
- payment term and mode on creating supplier (#31166) and third-party (#31067)
- PDF Add Customer accountancy code (#31544)
- PDF Add discount total if line discount exists (#31483)
- PDF Add option to print rounded corner frames (#31172)
- PDF Add shipping address in sales orders (#31293)
- PDF Add total discount if line discount exists
- PDF frame rounded corners
- Prelevement - Use structured payment data for Belgium (#31383)
- Preview product list when we choose model email layout Commerce (#30185)
- Can upload a file with drag and drop: Thirdparty (#30263) - Product/Service (#30250) - Project (#30276) - Propale (#30315)
- Public and private note options in thirdparty list (#31062)
- redirect to expedition card if global search has unique result (#30108)
- replenishment if the warehouse is set to the default selected user (#31229)
- retrieve Thirdparty by account (#31283)
- Share msg "not found" for widgets and add a button to add new record when none exists (#31309)
- shipment signed status update (#30928)
- Show detail of each multicurrency amount in popup of price
- show holidays at bottom of activity/permonth.php page (#31550)
- Show tooltip on number of qualified records
- Signature or proposal from the Web portal (#30062)
- Star Field Type for Extra Fields (#31348) and for for Module Builder (#31216)
- Support option PDF_ADD_POSITION on shipment espadon template
- Auto-suspend facture rec when nb gen max is reached (#31623)
- The margin section can now be shown/hidden
- Deal change in fiscal year period adjustments to shortened or extended periods (e.g., fiscal years of 9 or 15 months)
- (ticket, admin): More options entries (#30548)
- Update warehouse product list to add another sorting option (#30971)
- Can set blacklist of words into answer of AI (#30385)
- user list country filter (#30770)
- vat rate with department in dict (#31628) (#31627)
- When we export data of unlaterable log, we add an unalterable line in logs
- Add option THEME_STICKY_TOPMENU = 'scrollleftmenu_after_mainpage' (or 'disabled')
- value for FICHINTER_DISABLE_DETAILS. If FICHINTER_DISABLE_DETAILS is set to '2' details are disabled only on intervention list.
Performance
- Reduce nb of requests into num_public_holiday
- Reduce size for VCF files and virtualcard qrcode
- Reduce time to show the page of unalterable logs with high data
For Developers
- translation with action triggers API (#30595)
- more complete stock product API call (#30567)
- Projet - Add hook formconfirm (#31408)
- Can choose the zip handler to build ODT.
- Can force ip into log file name using a define('SYSLOG_FILE_ADDIP')
- Can force log file name using a define('SYSLOG_FILE_ADDSUFFIX')
- Can define the text on tooltip on a yesno check.
- Introduce value 'password' for mode of sanitization in GETPOST.
- Add getImageFromHtmlContent() method
- Add gitleaks into pre-commit
- Add hook after the line is processed in the sell journal page (#31439)
- add hook dolibarrDelConst (#30672)
- Add hook getLoginPageExtraContent, getPasswordResetPageExtraContent
- add hook in dolibarr_set_const admin.lib.php (#30605)
- Add hook on sell journal page for overwrite the processed journal data after the SQL request (#31033)
- force_install_noedit : add value 3 to block all technical parameters excepted main_url (#30080)
- Add a new hook on order list (#31315)
- Add ID of the line in the trigger context for addLine(), updateLine() and deleteLine() on contract (#30343)
- Add more log information
- Add pagination data to some api routes (#29895)
- Add test to forbidden NOW() SQL function.
- API call to re-generate a users password. (#30590)
- API close proposal now supports both private and public note (#30659)
- API_LOGINS_ALLOWED_FOR_GET_EXTRAFIELD (#30562)
- API /setup endpoint for getting action triggers (#30538)
- HOOK FORMCONFIRM IN TICKET (#31321)
- hook on expensereport added (#31380)
- Line classes for various business object classes have been moved to individual files.
- #30122 (#30131)
- AccountancySystem: maintenance work to uniformize and clean up (#31391)
- All $conf->global->module->enabled are replaced with isModEnabled()
- bankline category table name (#30419)
- Clean code
- conformity PR for data structure of #29964 (#30014)
- Edition of currency is shared in a common tpl file
- Ergo btn and fix (#30947)
- Move function csvClean into functions2.lib.php
- Move the public css file into the public directory
- Removed inclusion of the file json.lib.php
- simplifying readability of sql
- Standardize name of user cookies
- Suffix table name to have them created on module install
- The property ->domiciliation and ->propio on bank accounts has been
- Update inc.php (#29822)
- Use archiveOrBackupFile for MAIN_MAIL_DEBUG_LOG_WITH_DATE
- Use table_element in sql queries (#31355)
- rename const WORKFLOW_EXPEDITION_CLASSIFY_NEWD_INVOICE to WORKFLOW_RECEPTION_CLASSIFY_NEWD_INVOICE
- This configuration change in phan will report NEW: array types in phpdoc