Roadmap and Release 20.0.0

Version: 20.0 (List of other versions on page Category:RoadMap)
Release date: 16/09/2024
Main focus (What developers has mainly worked on, but not only, so for full list of changes see the detailed ChangeLog):


Fr verysmall.png What's new on accounting : https://www.youtube.com/watch?v=JxRUM6V6w0I

Fr verysmall.png https://www.atm-consulting.fr/les-nouveautes-de-la-version-20-de-dolibarr/

Detailed Changelog:

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: WebPortal module 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: 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-determine piece number in FEC import (#29672) 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: fuctionnality 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: Option to transfer only reconciliated lines from bank (#29408) 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: separation of expense report from salary accounting code 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: Various payment - Use list of account when edit (#27992) 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: $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 emojisNEW: 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()