Commit graph

155602 commits

Author SHA1 Message Date
MDW
316832dc51
Qual: Update Dolibarr Development AI SKILL (#39353)
* fix: Update Dolibarr Development Best Practices documentation

Updated the Dolibarr Development Best Practices documentation to include core principles, security guidelines, code structure, and workflow guidance. Added detailed sections on database interaction, module development, testing, and reference material. Removed outdated information and improved clarity and organization.

* Update SKILL.md to remove GETPOSTALPHA reference

Removed mention of GETPOSTALPHA shorthand from best practices.

* Qual: Correct extrafields documentation and code examples

Updated SKILL.md with improved extrafields documentation and code examples. The changes include:
- Simplified extrafields loading and access, removed unnecessary code
- Correcte field creation code

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-08-05 10:24:23 +02:00
MDW
d418a0a54c
Qual: More specific typing for setEventMessage(s) (#39383) 2026-08-05 10:19:17 +02:00
MDW
a8c244f366
fix: Update error message type in SMS sending process (#39385)
# FIX: Update error message type in SMS sending process

- Changed the error message type from 'error' to 'errors'
2026-08-04 22:28:43 +02:00
Pichinov-Jose
271f241cc2
NEW printEmailRecipients hook in FormMail::get_form() (#39349)
Add a granular hook right before the recipients block of the email form so a
module can render the whole To/CC/BCC recipients area (e.g. a modern tokenized
field) instead of the native "select and/or free text" rows. If the hook
handles it (returns > 0), the native recipient rows are skipped; otherwise they
are printed as before, so the change is additive and backward compatible.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-04 19:01:12 +02:00
MDW
fb14661435
Qual: Cleanup after #39325 (#39350)
* Qual: Replace hardcoded status and type values with constants, sanitized

# Qual: Replace hardcoded status and type values with constants, sanitized

Replace hardcoded status and type values with constants.

Added missing sanitizations.

* Qual: Apply formatting rules, null test
2026-08-04 18:59:31 +02:00
MDW
93c353c0f6
qual: Update Phan baseline and suppress duplicate array key warnings (#39352)
* qual: Update Phan baseline and suppress duplicate array key warnings

# QUAL: Update Phan baseline and suppress duplicate array key warnings

- Updated the Phan baseline to reflect reduced occurrences of certain issues
- Removed entries for fixed issues in the baseline file
- Added file-level suppression for PhanPluginDuplicateArrayKey in mod_syslog_file.php

* Qual: Suppress Phan notice
2026-08-04 18:53:06 +02:00
Pichinov-Jose
6049574af7
Ticket API: allow postNewMessage to target ticket by id or ref (#39360)
POST /tickets/newmessage could only reach a ticket via its track_id
(fetch was hardcoded to id=0). This resolves the ticket by id, then ref,
then track_id (kept as fallback), so integrations that store the Dolibarr
ticket id can append messages without knowing the track_id.
2026-08-04 18:36:51 +02:00
MDW
2be65df31f
NEW: Add Dolibarr Hurl Test Skill (#39366)
# NEW: Add Dolibarr Hurl Test Skill

Added comprehensive documentation for creating and maintaining Hurl tests for Dolibarr ERP/CRM. The documentation covers file naming conventions, authentication requirements, test structure, and best practices for Dolibarr-specific Hurl testing.
2026-08-04 18:26:12 +02:00
spsolauv
2172989699
NEW element_element : add user & date creat/modif columns (#39380)
* NEW element_element : add user & date creat/modif columns

* Update 24.0.0-25.0.0.sql

* Update llx_element_element.key.sql

* Update llx_element_element.sql

* Update 24.0.0-25.0.0.sql

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-08-04 18:25:43 +02:00
Frédéric FRANCE
d88668d097
do not index Agent workflow artifacts (#39371)
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-08-04 16:38:51 +02:00
Francis Appels
da4f89d577
Add .claude to gitignore (#39372) 2026-08-04 16:21:14 +02:00
Laurent Destailleur
ab7e60406d
Update vulnerability reporting instructions in SECURITY.md 2026-08-02 20:00:33 +02:00
Laurent Destailleur
7627fa1554
Clarify reporting process for vulnerabilities 2026-08-02 19:58:01 +02:00
Anthony Berton
f8de2b8704
NEW - Definition of a global email signature (#37427)
* Debug v23

* Debug v23

* Doc

* New import Leave Balance (Datastructure) (#37001)

* New import Leave Balance (Datastructure)

* fix

---------

Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>

* Qual: Update Phan baseline.txt with reduced issue counts (#36996)

This commit updates the Phan baseline.txt file.

* Better log

* Log

* Better error management

* Doc

* Fix error message

* CI

* Try to fix CI

* fix phan (#37007)

* CI

* fix phan (#37008)

PhanTypeMismatchArgumentNullable Argument 3 ($txt) is $productlot->batch of type ?string but \TCPDF::MultiCell() takes string defined at htdocs/includes/tecnickcom/tcpdf/tcpdf.php:5871 (expected type to be non-nullable)

* CI

* NEW Add new EUID number (#36997)

* Doc

* ci

* Fix CI

* Improve OAuth HTTP error details (#36951)

Keep throwing TokenResponseException on HTTP 4xx/5xx while also capturing the response body (ignore_errors) to include a short snippet for admins.

Co-authored-by: caminotravelcenter <caminotravelcenter@localhost>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW add import of leave balance (Implementation) (#37011)

* New add import Leave Balance

* add eof

* Update modHoliday.class.php

---------

Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW add image format avif (#37014)

* add format avif

* Update functions.lib.php

* Exclude non interesting warning

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* CI

* CI

* CI

* Trans

* CI

* CI

* CI

* Fix typo in phpstan.neon.dist for isset() rule (#37018)

See https://github.com/Dolibarr/dolibarr/actions/runs/21444577128/job/61756970301?pr=37017

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Try to fix phan

* CI

* CI

* ci

* ci

* css

* qual: Update french texts (comments) to english (#37009)

* qual: Update french texts (comments) to english

* Qual: Update comment to english in card-rec.php and card.php

Translation of comments in the files card-rec.php and card.php.

* Qual: Translate comments to English

* Qual: Translate comments to English

* Fix space into tab

* Fix spelling

* Qual: Translate comments to English

* Update website.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* ci

* Clean code

* Fix test

* Debug v23

* Merge manually changes from #37012 that seems good.

* Log

* More robust phpunit

* Populate openid data from wellknow url (#37023)

* Delete inexistant file

File jstz.min.js was deleted in
5599ac733b

* Populate openid parameters from wellknow url

* CI

* Debug v23 - fix code for rounding

* MCP server sql part (#37025)

* Create llx_ai_request_log.sql

* Create llx_ai_request_log.key.sql

* Update 23.0.0-24.0.0.sql

* Update llx_ai_request_log.sql

* Update 23.0.0-24.0.0.sql

* Remove foreign key constraint from llx_ai_request_log

Removed foreign key constraint for fk_user in llx_ai_request_log.

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Debug v24

* Fix syntax error

* NEW allow to disable freezone product on takepos (#37004)

* allow to disable freezone product on takepos

* Conditionally add FreeZone product to menus

* Add NoFreeZoneProduct language entry

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix label of dispute

* [database] Minimum amount and subscription's amount formula description (#37021)

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* css

* Update llx_adherent_type.sql

add minimumamount and amountformuladescription rows

* Update 22.0.0-23.0.0.sql

add minimumamount and amountformuladescription column

---------

Co-authored-by: hansemschnokeloch <hansemschnokeloch@users.noreply.github.com>
Co-authored-by: atm-jonathan <146709163+atm-jonathan@users.noreply.github.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW: Display thirdparty name with ref in supplier orders linked objects (#36952)

Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>

* css

* Debug v23

* Fix type

* CI

* CI

* Test without file list

* CI

* Add api document management for holiday (#36915)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW Invoice - List - use select2 multiselect for status (#36834)

* NEW Invoice - List - use select2 multiselect for status

* Optimize

* CI

* CI

* Review

* Duplicate line and last problem

* CI

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX Pb in total price of line when adding the discount of a down payment
when unit price was using a high accuracy.

* Clean code

* try to fix phan

* Fix phan

* Clean code

* Clean code

* Debug v23

* Fix LDAP

* fix facture.class.php (#37031)

* Debug v23

* Qual: Update french comments with 'nombre' (#37032)

Update french comments with 'nombre' in their phrasing

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* fix phan (#37029)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* fix phan (#37030)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Doc

* Doc comment

* FIX When bank direct debit SEPA ref is > 99

* Fix when there is more than 99 direct debit in same month

* Debug v24

* Merge branch '23.0' of git@github.com:Dolibarr/dolibarr.git into 23.0

* CSS

* Fix when there is more than 99 direct debit in same month

* Debug v24

* FIX Division by zero

* FIX Division by zero

* More log

* More log

* More log

* More Log

* Fix IPN payment

* Fix IPN

* Log

* Clean code

* Debug v23 - Fix ipn for dispute and withdraw funds.

* fix CI (#37033)

* fix CI (#37033)

* CI

* fix french doc (#36897)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix

* fix

* fix

* fix

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* Update html.form.class.php

* Update html.form.class.php

* Update index.php

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* Update modules_facture.php

* Update phpstan.neon.dist

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Qual: Translate French comments to English (#37044)

* Qual: Translate French comments to English

* Qual: Translate French comments to English

* Qual: Translate French comments to English ("niveau") (#37041)

Translate French comments to English (comments with "niveau")

* fix french doc (#37040)

* warning error if no societe->id defined (#37039)

* fix french doc (#37037)

* fix french doc

* Update dispatch.php

* Update dispatch.php

* Update graph.php

* fix french doc (#37047)

* fix french doc

* Update index.php

* Update index.php

* Fix CI

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* CI

* Fix CI

* Minimum amount and subscription's amount formula description (#37006)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Warning on export/import - Add isset() protection in Export::load_arrays() & Import::load_arrays() (#37043)

* Warning on export - Add isset() protection in Export::load_arrays()

* Warning on import - Add isset() protection in Import::load_arrays()

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Clean comment

* Warning on account model (#37042)

* Error on account model

* Simplify rowid assignment in accountmodel.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix #35394 Display public note on first page (#36993)

* Display public note (an incoterms and sales rep signat) only on real first page

* Display public note (an incoterms and sales rep signat) only on real first page

---------

Co-authored-by: vmaury <vmaury@vmaury-Lafite-Pro-16-AMD>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX: Add htmlname and selectedrate to parameters array for hook (#36998)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX: Add htmlname and selectedrate to parameters array for hook (#36998)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix CI

* Fix CI

* Fix CI

* Fix ci

* Qual: Translate French comments to English (#37052)

* Qual: Translate French 'valeur' in comments to English (#37051)

* NEW Accountancy - Select between accrual accounting and cash accounting (#37050)

* Qual: Translate french 'avec' comments to English (#37049)

# Qual: Translate french 'avec' comments to English

* FIX divisa rate indirect to direct because Dolibarr use indirect for default (#37046)

* FIX rate_indirect to rate_direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect	: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* Divisa rate direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* Add col rate_direct because Dolibarr use for.default rate indirect

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* CI

* Add thumbnails for avif (#37045)

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX #36892

* NEW : Manage discount for all lines for supplier elements. (#36954)

* NEW : Manage remise for all lines for supplier elements.

* Cast remise_percent to float in updateline call

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix Signature position (#37048)

Move up the position of the signature to fix its explosion on 3 pages

* remove french doc and fix travis migration missing (#37053)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* Clean up comments in card.php

Removed unnecessary comments from card.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Debug v23

* Fix CSS

* Fix CSS

* Fix sql syntax error

* Fix sql syntax error

* Add optionnal img to openid login (#37060)

* fix french doc (#37056)

* fix french doc

* fix french doc

* fix french doc

* doc translation

* doc translation

* doc translation

* doc translation

* doc translation

* load tables in init for create categorie table associated (#37059)

* Fix situation invoice

* Fix situation invoice

* Debug v23

* Link and filter on ountry for holiday types

* Link and filter on ountry for holiday types

* Trans

* Debug v23

* css

* CSS on current day

* Debug v23

* css

* More complete message

* Make array of dispute status a shared constant

* Debug v23

* Debug v23

* bad link on sql in fichinter list (#37081)

* bad link on sql in fichinter list (#37081)

* FIX: TakePOS, webapp-hardware-bridge and TakePOS-Connector for modern weighing scales (#37078)

* feat: CustomerDisplay through Webapp-Hardware-Bridge

* feat: WeighingScale through Webapp-Hardware-Bridge

* feat: WeighingScale through Webapp-Hardware-Bridge

* fix: looks like a typo

* feat: for small screens

* fix: attribut contenant le prix du produit ajouté

* feat: ajout d'un callback de gestion d'erreur

* Clean code for Takepos

* Debug v23

* Fix new path of dolreceiptprinter.class.php

* Adjust signature appearance position in PDF generation (#37076)

* EmailCollector: exclude sender emails/domains (#37075)

# Conflicts:
#	htdocs/langs/en_US/admin.lang

Co-authored-by: braito4 <braito4@users.noreply.github.com>

* fix: dev/examples/zapier/package.json to reduce vulnerabilities (#37071)

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-LODASH-15053838

Co-authored-by: snyk-bot <snyk-bot@snyk.io>

* translate french doc to english (#37064)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix

* fix

* fix

* fix

* Trans

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* Change translation function to transnoentities (#37065)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Change translation function to transnoentities (#37065)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW Show total multicurrency on payment (#37070)

* Total multicurrency

* Total multicurrency paiment

* total result multicurrency

* show total multicurrency

* Fix CI

* CLOSE #37085 - Popup notif is just under the menu bar

* fix: add missing geturl lib (#37088)

* Fix CI

* Restrict to modiied files

* #36843 Update card-rec.php (#37062)

The item desc is already added into the line when selecting the Item. No Need to concat it again when clicking the "add" button.

* Clean code

* Fix CI

* Doc

* Fix CI

* family assignment logic on user perms of external modules (#36456)

* family assignment logic on user perms of external modules

Updated family assignment logic to default to 'other' if family does not exist in $familyinfo.

* Update copyright year for Charlene Benke

* family assignment logic on user perms of external modules (#36456)

* family assignment logic on user perms of external modules

Updated family assignment logic to default to 'other' if family does not exist in $familyinfo.

* Update copyright year for Charlene Benke

* Fix comment and keep external modules out of core modules

* Close #36975

* Close #36975

* css

* NEW : hide remise_except unit price on invoice lines (#37066)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW(API): create fixed amount discount (#37091)

* NEW(API): create fixed amount discount

* FIX CI

* FIX CI

---------

Co-authored-by: Benjamin Falière <benjamin.faliere@altairis.fr>

* Fix phan

* CI

* FIX

* FIX

* NEW - Definition of a global email signature

* Fix parameter in DolEditor instantiation

* Fix DolEditor instantiation parameter

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Laurent Destailleur <eldy@users.sourceforge.net>
Co-authored-by: Lucas Marcouiller <45882981+Hystepik@users.noreply.github.com>
Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>
Co-authored-by: MDW <mdeweerd@users.noreply.github.com>
Co-authored-by: Frédéric FRANCE <frederic34@users.noreply.github.com>
Co-authored-by: Alexandre SPANGARO <alexandre.spangaro@gmail.com>
Co-authored-by: Braito <braito4@hotmail.com>
Co-authored-by: caminotravelcenter <caminotravelcenter@localhost>
Co-authored-by: hansemschnokeloch <hansemschnokeloch@users.noreply.github.com>
Co-authored-by: atm-jonathan <146709163+atm-jonathan@users.noreply.github.com>
Co-authored-by: sonikf <93765174+sonikf@users.noreply.github.com>
Co-authored-by: Charlène Benke <1179011+defrance@users.noreply.github.com>
Co-authored-by: Thatoo <Thatoo@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <48571684+Boushabazakaria@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>
Co-authored-by: Vincent Maury <artec.vm@arnac.net>
Co-authored-by: vmaury <vmaury@vmaury-Lafite-Pro-16-AMD>
Co-authored-by: Jyhere <jyhere@gmail.com>
Co-authored-by: Lenin Rivas <53640168+leninrivas@users.noreply.github.com>
Co-authored-by: ThomasNgr-OpenDSI <tnegre@open-dsi.fr>
Co-authored-by: Pierre Ardoin <32256817+mapiolca@users.noreply.github.com>
Co-authored-by: LePat <patrick.muscat@gmail.com>
Co-authored-by: braito4 <braito4@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Vanyo <vanyolai@gmail.com>
Co-authored-by: AWeerWolf <74211972+AWeerWolf@users.noreply.github.com>
Co-authored-by: Benjamin Falière <121813548+BenjaminFlr@users.noreply.github.com>
Co-authored-by: Benjamin Falière <benjamin.faliere@altairis.fr>
Co-authored-by: Anthony Berton <anthony.berton@bb2a.fr>
2026-08-02 16:59:36 +02:00
Pichinov-Jose
9d437967ef
NEW printObjectRightToolbar hook on object event pages (propal, ticket) + modulebuilder (#39348)
Add a hook before print_barre_liste() in the dedicated object event pages
(messaging.php + agenda.php of propal and ticket) and in the modulebuilder
agenda template, so external modules can add buttons to the object right
toolbar without patching/overriding core pages. The hook passes morehtmlright
by reference and the object element type, so a listener can scope itself
(e.g. only on event pages). Mirrors the existing showActionsLoadFicheTitre.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 00:11:28 +02:00
Laurent Destailleur
e5263fb06e Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop
2026-08-01 01:19:27 +02:00
Laurent Destailleur
31bc79d9df Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop 2026-08-01 00:21:38 +02:00
Laurent Destailleur
da0e7185db Doc 2026-08-01 00:21:12 +02:00
Anthony Berton
78f9d31454
NEW - API Get sales representative (#39338)
* Doc

* New import Leave Balance (Datastructure) (#37001)

* New import Leave Balance (Datastructure)

* fix

---------

Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>

* Qual: Update Phan baseline.txt with reduced issue counts (#36996)

This commit updates the Phan baseline.txt file.

* Better log

* Log

* Better error management

* Doc

* Fix error message

* CI

* Try to fix CI

* fix phan (#37007)

* CI

* fix phan (#37008)

PhanTypeMismatchArgumentNullable Argument 3 ($txt) is $productlot->batch of type ?string but \TCPDF::MultiCell() takes string defined at htdocs/includes/tecnickcom/tcpdf/tcpdf.php:5871 (expected type to be non-nullable)

* CI

* NEW Add new EUID number (#36997)

* Doc

* ci

* Fix CI

* Improve OAuth HTTP error details (#36951)

Keep throwing TokenResponseException on HTTP 4xx/5xx while also capturing the response body (ignore_errors) to include a short snippet for admins.

Co-authored-by: caminotravelcenter <caminotravelcenter@localhost>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW add import of leave balance (Implementation) (#37011)

* New add import Leave Balance

* add eof

* Update modHoliday.class.php

---------

Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW add image format avif (#37014)

* add format avif

* Update functions.lib.php

* Exclude non interesting warning

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* CI

* CI

* CI

* Trans

* CI

* CI

* CI

* Fix typo in phpstan.neon.dist for isset() rule (#37018)

See https://github.com/Dolibarr/dolibarr/actions/runs/21444577128/job/61756970301?pr=37017

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Try to fix phan

* CI

* CI

* ci

* ci

* css

* qual: Update french texts (comments) to english (#37009)

* qual: Update french texts (comments) to english

* Qual: Update comment to english in card-rec.php and card.php

Translation of comments in the files card-rec.php and card.php.

* Qual: Translate comments to English

* Qual: Translate comments to English

* Fix space into tab

* Fix spelling

* Qual: Translate comments to English

* Update website.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* ci

* Clean code

* Fix test

* Debug v23

* Merge manually changes from #37012 that seems good.

* Log

* More robust phpunit

* Populate openid data from wellknow url (#37023)

* Delete inexistant file

File jstz.min.js was deleted in
5599ac733b

* Populate openid parameters from wellknow url

* CI

* Debug v23 - fix code for rounding

* MCP server sql part (#37025)

* Create llx_ai_request_log.sql

* Create llx_ai_request_log.key.sql

* Update 23.0.0-24.0.0.sql

* Update llx_ai_request_log.sql

* Update 23.0.0-24.0.0.sql

* Remove foreign key constraint from llx_ai_request_log

Removed foreign key constraint for fk_user in llx_ai_request_log.

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Debug v24

* Fix syntax error

* NEW allow to disable freezone product on takepos (#37004)

* allow to disable freezone product on takepos

* Conditionally add FreeZone product to menus

* Add NoFreeZoneProduct language entry

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix label of dispute

* [database] Minimum amount and subscription's amount formula description (#37021)

* Remove jstz.min.js from JavaScript array (#37017)

jstz.min.js was deleted in 5599ac733b

* prevent ST_AsWKT() (#37013)

* prevent ST_AsWKT()

* Update commonobject.class.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* css

* Update llx_adherent_type.sql

add minimumamount and amountformuladescription rows

* Update 22.0.0-23.0.0.sql

add minimumamount and amountformuladescription column

---------

Co-authored-by: hansemschnokeloch <hansemschnokeloch@users.noreply.github.com>
Co-authored-by: atm-jonathan <146709163+atm-jonathan@users.noreply.github.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW: Display thirdparty name with ref in supplier orders linked objects (#36952)

Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>

* css

* Debug v23

* Fix type

* CI

* CI

* Test without file list

* CI

* Add api document management for holiday (#36915)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW Invoice - List - use select2 multiselect for status (#36834)

* NEW Invoice - List - use select2 multiselect for status

* Optimize

* CI

* CI

* Review

* Duplicate line and last problem

* CI

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX Pb in total price of line when adding the discount of a down payment
when unit price was using a high accuracy.

* Clean code

* try to fix phan

* Fix phan

* Clean code

* Clean code

* Debug v23

* Fix LDAP

* fix facture.class.php (#37031)

* Debug v23

* Qual: Update french comments with 'nombre' (#37032)

Update french comments with 'nombre' in their phrasing

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* fix phan (#37029)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* fix phan (#37030)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Doc

* Doc comment

* FIX When bank direct debit SEPA ref is > 99

* Fix when there is more than 99 direct debit in same month

* Debug v24

* Merge branch '23.0' of git@github.com:Dolibarr/dolibarr.git into 23.0

* CSS

* Fix when there is more than 99 direct debit in same month

* Debug v24

* FIX Division by zero

* FIX Division by zero

* More log

* More log

* More log

* More Log

* Fix IPN payment

* Fix IPN

* Log

* Clean code

* Debug v23 - Fix ipn for dispute and withdraw funds.

* fix CI (#37033)

* fix CI (#37033)

* CI

* fix french doc (#36897)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix

* fix

* fix

* fix

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* Update html.form.class.php

* Update html.form.class.php

* Update index.php

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* Update modules_facture.php

* Update phpstan.neon.dist

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Qual: Translate French comments to English (#37044)

* Qual: Translate French comments to English

* Qual: Translate French comments to English

* Qual: Translate French comments to English ("niveau") (#37041)

Translate French comments to English (comments with "niveau")

* fix french doc (#37040)

* warning error if no societe->id defined (#37039)

* fix french doc (#37037)

* fix french doc

* Update dispatch.php

* Update dispatch.php

* Update graph.php

* fix french doc (#37047)

* fix french doc

* Update index.php

* Update index.php

* Fix CI

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* CI

* Fix CI

* Minimum amount and subscription's amount formula description (#37006)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Warning on export/import - Add isset() protection in Export::load_arrays() & Import::load_arrays() (#37043)

* Warning on export - Add isset() protection in Export::load_arrays()

* Warning on import - Add isset() protection in Import::load_arrays()

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Clean comment

* Warning on account model (#37042)

* Error on account model

* Simplify rowid assignment in accountmodel.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix #35394 Display public note on first page (#36993)

* Display public note (an incoterms and sales rep signat) only on real first page

* Display public note (an incoterms and sales rep signat) only on real first page

---------

Co-authored-by: vmaury <vmaury@vmaury-Lafite-Pro-16-AMD>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX: Add htmlname and selectedrate to parameters array for hook (#36998)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX: Add htmlname and selectedrate to parameters array for hook (#36998)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix CI

* Fix CI

* Fix CI

* Fix ci

* Qual: Translate French comments to English (#37052)

* Qual: Translate French 'valeur' in comments to English (#37051)

* NEW Accountancy - Select between accrual accounting and cash accounting (#37050)

* Qual: Translate french 'avec' comments to English (#37049)

# Qual: Translate french 'avec' comments to English

* FIX divisa rate indirect to direct because Dolibarr use indirect for default (#37046)

* FIX rate_indirect to rate_direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect	: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* FIX divisa rate indirect to direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* Divisa rate direct

Direct	: 	1 Divisa Currency = X Currency Main.
Indirect: 	1 Currency Main = X Divisa Currency.
Then for Dolibarr use is Indirect for default

* Add col rate_direct because Dolibarr use for.default rate indirect

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* CI

* Add thumbnails for avif (#37045)

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* vignette for avif

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* FIX #36892

* NEW : Manage discount for all lines for supplier elements. (#36954)

* NEW : Manage remise for all lines for supplier elements.

* Cast remise_percent to float in updateline call

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Fix Signature position (#37048)

Move up the position of the signature to fix its explosion on 3 pages

* remove french doc and fix travis migration missing (#37053)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* Clean up comments in card.php

Removed unnecessary comments from card.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Debug v23

* Fix CSS

* Fix CSS

* Fix sql syntax error

* Fix sql syntax error

* Add optionnal img to openid login (#37060)

* fix french doc (#37056)

* fix french doc

* fix french doc

* fix french doc

* doc translation

* doc translation

* doc translation

* doc translation

* doc translation

* load tables in init for create categorie table associated (#37059)

* Fix situation invoice

* Fix situation invoice

* Debug v23

* Link and filter on ountry for holiday types

* Link and filter on ountry for holiday types

* Trans

* Debug v23

* css

* CSS on current day

* Debug v23

* css

* More complete message

* Make array of dispute status a shared constant

* Debug v23

* Debug v23

* bad link on sql in fichinter list (#37081)

* bad link on sql in fichinter list (#37081)

* FIX: TakePOS, webapp-hardware-bridge and TakePOS-Connector for modern weighing scales (#37078)

* feat: CustomerDisplay through Webapp-Hardware-Bridge

* feat: WeighingScale through Webapp-Hardware-Bridge

* feat: WeighingScale through Webapp-Hardware-Bridge

* fix: looks like a typo

* feat: for small screens

* fix: attribut contenant le prix du produit ajouté

* feat: ajout d'un callback de gestion d'erreur

* Clean code for Takepos

* Debug v23

* Fix new path of dolreceiptprinter.class.php

* Adjust signature appearance position in PDF generation (#37076)

* EmailCollector: exclude sender emails/domains (#37075)

# Conflicts:
#	htdocs/langs/en_US/admin.lang

Co-authored-by: braito4 <braito4@users.noreply.github.com>

* fix: dev/examples/zapier/package.json to reduce vulnerabilities (#37071)

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-LODASH-15053838

Co-authored-by: snyk-bot <snyk-bot@snyk.io>

* translate french doc to english (#37064)

* fix french doc

* fix french doc

* fix french doc

* fix french doc

* fix

* fix

* fix

* fix

* Trans

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* Change translation function to transnoentities (#37065)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Change translation function to transnoentities (#37065)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW Show total multicurrency on payment (#37070)

* Total multicurrency

* Total multicurrency paiment

* total result multicurrency

* show total multicurrency

* Fix CI

* CLOSE #37085 - Popup notif is just under the menu bar

* fix: add missing geturl lib (#37088)

* Fix CI

* Restrict to modiied files

* #36843 Update card-rec.php (#37062)

The item desc is already added into the line when selecting the Item. No Need to concat it again when clicking the "add" button.

* Clean code

* Fix CI

* Doc

* Fix CI

* family assignment logic on user perms of external modules (#36456)

* family assignment logic on user perms of external modules

Updated family assignment logic to default to 'other' if family does not exist in $familyinfo.

* Update copyright year for Charlene Benke

* family assignment logic on user perms of external modules (#36456)

* family assignment logic on user perms of external modules

Updated family assignment logic to default to 'other' if family does not exist in $familyinfo.

* Update copyright year for Charlene Benke

* Fix comment and keep external modules out of core modules

* Close #36975

* Close #36975

* css

* NEW : hide remise_except unit price on invoice lines (#37066)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* NEW(API): create fixed amount discount (#37091)

* NEW(API): create fixed amount discount

* FIX CI

* FIX CI

---------

Co-authored-by: Benjamin Falière <benjamin.faliere@altairis.fr>

* Fix phan

* CI

* FIX

* FIX

* NEW - Add in API for thirdparies getRepresentative

* FIX

* Update api_thirdparties.class.php

* Update api_thirdparties.class.php

* Enhance return type annotation in API documentation

Updated return type documentation for representatives.

---------

Co-authored-by: Laurent Destailleur <eldy@users.sourceforge.net>
Co-authored-by: Lucas Marcouiller <45882981+Hystepik@users.noreply.github.com>
Co-authored-by: Lucas Marcouiller <lmarcouiller@dolicloud.com>
Co-authored-by: MDW <mdeweerd@users.noreply.github.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Frédéric FRANCE <frederic34@users.noreply.github.com>
Co-authored-by: Alexandre SPANGARO <alexandre.spangaro@gmail.com>
Co-authored-by: Braito <braito4@hotmail.com>
Co-authored-by: caminotravelcenter <caminotravelcenter@localhost>
Co-authored-by: hansemschnokeloch <hansemschnokeloch@users.noreply.github.com>
Co-authored-by: atm-jonathan <146709163+atm-jonathan@users.noreply.github.com>
Co-authored-by: sonikf <93765174+sonikf@users.noreply.github.com>
Co-authored-by: Charlène Benke <1179011+defrance@users.noreply.github.com>
Co-authored-by: Thatoo <Thatoo@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <48571684+Boushabazakaria@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>
Co-authored-by: Vincent Maury <artec.vm@arnac.net>
Co-authored-by: vmaury <vmaury@vmaury-Lafite-Pro-16-AMD>
Co-authored-by: Jyhere <jyhere@gmail.com>
Co-authored-by: Lenin Rivas <53640168+leninrivas@users.noreply.github.com>
Co-authored-by: ThomasNgr-OpenDSI <tnegre@open-dsi.fr>
Co-authored-by: Pierre Ardoin <32256817+mapiolca@users.noreply.github.com>
Co-authored-by: LePat <patrick.muscat@gmail.com>
Co-authored-by: braito4 <braito4@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Vanyo <vanyolai@gmail.com>
Co-authored-by: AWeerWolf <74211972+AWeerWolf@users.noreply.github.com>
Co-authored-by: Benjamin Falière <121813548+BenjaminFlr@users.noreply.github.com>
Co-authored-by: Benjamin Falière <benjamin.faliere@altairis.fr>
Co-authored-by: Anthony Berton <anthony.berton@bb2a.fr>
2026-07-31 23:51:57 +02:00
Frédéric FRANCE
0ace4d500b
FIX: Remove always-true error checks in mysql dump export (#39339)
$errormsg is initialized to '' just above and nothing sets it before
these checks in the mysql branch, so PHPStan correctly flags both
negated conditions as always true (booleanNot.alwaysTrue). Unlike the
postgresql branch below, this is the first $what branch evaluated, so
there is no earlier code path that could have set $errormsg yet.

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-07-31 21:34:51 +02:00
Pichinov-Jose
efe2b3d3d4
NEW Product/service creation in a dialog popup from the add-line block ('@FIXME Not working yet') (#39307)
* FIX Product/service creation in a dialog popup from the add-line block (marked '@FIXME Not working yet')

product/card.php is now popup-aware: it reads dol_openinpopup (added to
the URL by dolButtonToOpenUrlInDialogPopup), propagates it into the
creation form, closes properly on Cancel (buttonsSaveCancel), and after a
successful creation reloads the parent page on backtopage (with the new
id substituted) instead of navigating inside the iframe.

In the add-line block, the popup buttons (MAIN_FEATURES_LEVEL >= 2) no
more pass the callback 'jsRefreshProductCombo' (a function that was never
defined, and passed in the jsonopen slot instead of jsonclose, see the
phan suppress) : the child page now drives the parent reload itself. The
backtopage now includes the object id, so combined with the 'idprod_ID'
preselection fix, the created product can be autoselected in the combo.

Tested end-to-end on a real 23.0.3 database.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add copyright

* FIX phpcs: indentation of hidden field

* chore: retrigger CI (lock check setup canceled by GitHub infra)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:48:34 +02:00
Frédéric FRANCE
1714bb76ca
Create llx_links_extrafields.sql (#39347)
* Create llx_links_extrafields.sql

* Create llx_links_extrafields.key.sql

* Update 24.0.0-25.0.0.sql
2026-07-31 18:28:18 +02:00
Laurent Destailleur
2ac021d188 Try to fix error on pgsql 2026-07-31 14:32:27 +02:00
Laurent Destailleur
2bdb3c093a Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop 2026-07-31 13:53:30 +02:00
Laurent Destailleur
dfa927eea4 Merge branch '24.0' of git@github.com:Dolibarr/dolibarr.git into develop 2026-07-31 13:53:20 +02:00
Laurent Destailleur
ed57e239b8 Trans 2026-07-31 02:55:36 +02:00
Laurent Destailleur
8d1258490a Fix restore version 2026-07-31 02:49:52 +02:00
Laurent Destailleur
4f3b783e46 Merge branch '24.0' of git@github.com:Dolibarr/dolibarr.git into 24.0 2026-07-31 01:04:59 +02:00
Laurent Destailleur
cdb7694041 Fix autocomplete 2026-07-31 01:04:47 +02:00
dev2a
94cf8c69c5
Fix: Add verification for allowed table from listofreferent in unlink project (#38310) 2026-07-30 19:39:32 +02:00
Pichinov-Jose
557d79d0bc
FIX supplier product combo does not preselect a product without supplier price ('idprod_ID' value) (#39300)
* FIX phpstan: Societe::$client (int<0,3>) does not accept -1 (#39244)

Societe::$client is annotated @var int<0,3> (domain 0=no customer,
1=customer, 2=prospect, 3=both) in societe.class.php, but the create
form in societe/card.php pre-set it to -1 as a transient "nothing
pre-selected" placeholder, tripping PHPStan level 10 on develop.

The value is never persisted (save paths compute 0..3) and the only
reader, the switch() building the form, treats -1 and 0 identically via
its default case. Use 0 (the property's own default) so the assignment
matches the declared type. No behavior change.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* FIX supplier product combo does not preselect a product without supplier price ('idprod_ID' selected value)

Form::select_produits_fournisseurs() only fills the ajax search input when
the selected value is a supplier price id ((int) > 0). When the value is
'idprod_ID' (product without supplier price for this supplier — the format
documented for the $selected parameter and used by the backtopage of the
product creation popup), nothing was preselected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add copyright

* chore: retrigger CI (lock check setup canceled by GitHub infra)

---------

Co-authored-by: Jam Balaya <jambalaya.pyoncafe@outlook.jp>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:49:34 +02:00
Pichinov-Jose
fcf3006ddd
FIX Whole session loses its menus after a login done from inside a dialog popup (#39312)
* FIX phpstan: Societe::$client (int<0,3>) does not accept -1 (#39244)

Societe::$client is annotated @var int<0,3> (domain 0=no customer,
1=customer, 2=prospect, 3=both) in societe.class.php, but the create
form in societe/card.php pre-set it to -1 as a transient "nothing
pre-selected" placeholder, tripping PHPStan level 10 on develop.

The value is never persisted (save paths compute 0..3) and the only
reader, the switch() building the form, treats -1 and 0 identically via
its default case. Use 0 (the property's own default) so the assignment
matches the declared type. No behavior change.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* FIX Whole session loses its menus after a login done from inside a dialog popup

The URLs opened by dolButtonToOpenUrlInDialogPopup() carry
dol_hide_topmenu=1 and dol_hide_leftmenu=1. If the session expires and
the user logs in again from inside the popup iframe, these flags were
stored into $_SESSION at login and applied to every following page: the
user 'loses' the top and left menus for the whole session, until logout.

Do not persist the two hide-menu flags when the login is done in a
dol_openinpopup context.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Jam Balaya <jambalaya.pyoncafe@outlook.jp>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-07-30 18:48:21 +02:00
Frédéric FRANCE
174af16b66
FIX: Undefined array key "text" in dolGetButtonAction dropdown (#39311)
* FIX phpstan: Societe::$client (int<0,3>) does not accept -1 (#39244)

Societe::$client is annotated @var int<0,3> (domain 0=no customer,
1=customer, 2=prospect, 3=both) in societe.class.php, but the create
form in societe/card.php pre-set it to -1 as a transient "nothing
pre-selected" placeholder, tripping PHPStan level 10 on develop.

The value is never persisted (save paths compute 0..3) and the only
reader, the switch() building the form, treats -1 and 0 identically via
its default case. Use 0 (the property's own default) so the assignment
matches the declared type. No behavior change.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* NEW Accountancy - FEC export - Add constant ACCOUNTING_EXPORT_FEC_ADD_TIMESTAMP to add a timestamp in export file name

* The test on dolibarr_main_restrict_os_commands was moved into
dumpDatabase()

* Fix missing extrafields propagation and object links when creating supplier credit note (#39285)

Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>

* NEW Filecheck can show diff of modified files (#39022)

* NEW: Show diff against original file in filecheck integrity report

* NEW: Compare against develop branch for alpha/beta versions in filecheck diff

* NEW: Improve filecheck diff granularity on large files with anchor-based split

* Update version.inc.php

* FIX: Undefined array key "text" in dolGetButtonAction dropdown

Button entries built without a 'text' key (e.g. the subtotals module's
"Add title line"/"Add subtotal line" dropdown) triggered a PHP warning on the multi-button branch, which already guarded every other optional key the same way.

---------

Co-authored-by: Jam Balaya <jambalaya.pyoncafe@outlook.jp>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Alexandre SPANGARO <alexandre.spangaro@gmail.com>
Co-authored-by: Alexandre SPANGARO <aspangaro.dolibarr@gmail.com>
Co-authored-by: Zakaria Boushaba <48571684+Boushabazakaria@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>
2026-07-30 18:47:32 +02:00
David Beniamine
2f073fb469
Avoid autofill button being considered as submit button by web browsers (#39330) 2026-07-30 18:23:58 +02:00
Vincent Maury
9e6804de64
NEW add method confirmProduced in MOs API (#39324)
* FIX commande/stats: do not default "Created by" filter to current user (#39256)

The order statistics query is not filtered on the current user on first
page load, so the results shown are global. However the "Created by"
selector defaulted to the current user (select_dolusers auto-selects
$user->id when the passed value is empty), wrongly suggesting the
displayed figures were limited to that user.

Pass -1 instead of 0 when no user is selected so the combo keeps its
empty entry, matching the unfiltered query. The empty option posts -1,
which the query turns back into "no user filter", so the round-trip
stays consistent after a refresh.

* FIX Missing translation for "Weight"

* Fix/supplier doc keep project (#39306)

* FIX : situation invoice credit note wrong amount in progressive mode

When creating a credit note "with same lines" from a situation invoice,
the code always subtracts the previous situation invoice's line values
before inverting the sign, assuming lines are stored cumulative
(INVOICE_USE_SITUATION = 1, legacy mode).

In progressive mode (INVOICE_USE_SITUATION = 2), each situation invoice
line already stores its own delta amount and percent, so this extra
subtraction credits the wrong amount and percent (e.g. 60% / 1272
instead of the correct 20% / 424 on a real cycle).

Skip the subtraction in progressive mode so the credit note reuses the
source line's own delta values, as expected.

* FIX supplier order/proposal loses project after supplier selection

On the create form of a supplier order (fourn/commande/card.php) and a supplier
price request (supplier_proposal/card.php), the project select was filtered on
the supplier third party as soon as one was chosen: the `if ($socid > 0)` branch
took precedence over the PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS constant.

As a result, a supplier document created from a customer project lost its
preselected project when the page reloaded after picking the supplier (the
customer project is not linked to the supplier, so it was filtered out).

This aligns the behavior with the supplier invoice (fourn/facture/card.php),
which gives priority to PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS. The external
user restriction now targets $user->socid (the real external-user marker)
instead of $socid > 0, which also matched internal users after selecting a
supplier.

* Fix Standalone reception creation (#39299)

Fatal error: Uncaught Error: Call to a member function fetch_optionals() on null

* Fix missing include

* add method confirmProduced in MOs API

which was missing

---------

Co-authored-by: atm-corentin <165782689+atm-corentin@users.noreply.github.com>
Co-authored-by: Alexandre SPANGARO <alexandre.spangaro@gmail.com>
Co-authored-by: Alexandre SPANGARO <aspangaro.dolibarr@gmail.com>
Co-authored-by: atm-jonathan <146709163+atm-jonathan@users.noreply.github.com>
Co-authored-by: sonikf <93765174+sonikf@users.noreply.github.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-07-30 18:22:44 +02:00
Lucas Marcouiller
624d9c97e5
Fix member subscription with empty date valid (#39310)
* NEW : Add support of customer discount of the invoice in the sell journal

* Correction phpstan

* Correction phpstan

* Correction phpstan

* Correction phan

* Correction phan

* Correction phan

* Correction phan

* FIX #39146 : add SQL structure in llx_societe_perentity

* FIX phpstan: Societe::$client (int<0,3>) does not accept -1 (#39244)

Societe::$client is annotated @var int<0,3> (domain 0=no customer,
1=customer, 2=prospect, 3=both) in societe.class.php, but the create
form in societe/card.php pre-set it to -1 as a transient "nothing
pre-selected" placeholder, tripping PHPStan level 10 on develop.

The value is never persisted (save paths compute 0..3) and the only
reader, the switch() building the form, treats -1 and 0 identically via
its default case. Use 0 (the property's own default) so the assignment
matches the declared type. No behavior change.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* NEW Accountancy - FEC export - Add constant ACCOUNTING_EXPORT_FEC_ADD_TIMESTAMP to add a timestamp in export file name

* The test on dolibarr_main_restrict_os_commands was moved into
dumpDatabase()

* Fix missing extrafields propagation and object links when creating supplier credit note (#39285)

Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>

* NEW Filecheck can show diff of modified files (#39022)

* NEW: Show diff against original file in filecheck integrity report

* NEW: Compare against develop branch for alpha/beta versions in filecheck diff

* NEW: Improve filecheck diff granularity on large files with anchor-based split

* Update version.inc.php

* Fix member subscription with empty date valid

* Create migration script 24.0.0-25.0.0.sql

* FIX #39146: Fos thirdparties, Manage fk_account, payment method and payment term per entity if MAIN_COMPANY_PERENTITY_SHARED is set.

* Missign migration file

* Update paymentok.php

---------

Co-authored-by: Kamel Khelifa <kkhelifa@open-dsi.fr>
Co-authored-by: tnegre <tnegre@open-dsi.fr>
Co-authored-by: Jam Balaya <jambalaya.pyoncafe@outlook.jp>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Alexandre SPANGARO <alexandre.spangaro@gmail.com>
Co-authored-by: Alexandre SPANGARO <aspangaro.dolibarr@gmail.com>
Co-authored-by: Zakaria Boushaba <48571684+Boushabazakaria@users.noreply.github.com>
Co-authored-by: Zakaria Boushaba <z.boushaba@vold.africa>
Co-authored-by: Frédéric FRANCE <frederic34@users.noreply.github.com>
2026-07-30 18:03:44 +02:00
Laurent Destailleur
689572a332 Fix trans 2026-07-30 17:50:18 +02:00
Frédéric FRANCE
cdc6063405
fix delete in paymentvat.class.php (#39323)
Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-07-30 17:35:24 +02:00
Laurent Destailleur
8739e98012 Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop 2026-07-30 17:13:55 +02:00
Laurent Destailleur
e8fcc48710 Merge branch '24.0' of git@github.com:Dolibarr/dolibarr.git into develop 2026-07-30 17:13:37 +02:00
MDW
d8ad7a940d
FIX: CDavLib getSqlCalEvents broken after actioncomm_cdav table removal, Add CalDav tests (#39322)
* # FIX: CDavLib getSqlCalEvents broken after actioncomm_cdav table removal

# FIX: CDavLib getSqlCalEvents broken after actioncomm_cdav table removal, Add CalDav tests

Add CalDav tests, which resulted in detecting Issue.

## Issue

The `CDavLib::getSqlCalEvents()` method in `htdocs/dav/dav.class.php` has been generating broken SQL queries, causing the new `CDavLibTest::testGetFullCalendarObjects` test to fail.

## Root Cause

The issue stems from the removal of the `actioncomm_cdav` table. The original code referenced:
- `ac.sourceuid` field (from a non-existent `ac` alias)
- `ac.uuidext` field (from the removed `actioncomm_cdav` table)
- Used incorrect phone field names (`sp.phone`, `sp.phone_perso`, `sp.phone_mobile`)
- Used incorrect country field `sp.fk_pays` instead of `sp.fk_country`
- Missing JOIN for the `user` table (`sp` alias)

## Fixes Applied

### 1. SQL String Concatenation
Upgraded to the use of `$this->db->prefix()` instead of `.MAIN_DB_PREFIX.` literal strings.

### 2. Phone Field Names
Updated phone field names to match current Dolibarr schema:
- `sp.phone` → `sp.office_phone as phone`
- `sp.phone_perso` → `sp.personal_mobile as phone_perso`
- `sp.phone_mobile` → `sp.user_mobile as phone_mobile`

### 3. Country Field
Fixed the country JOIN to use the correct field:
- `sp.fk_pays` → `sp.fk_country`
- `s.fk_pays` remains unchanged (correct for societe table)

### 4. Removed Non-Existent Fields
Removed `ac.sourceuid` and `a.sourceuid` from the SELECT clause as these fields do not exist in the `actioncomm` table. These were likely from the removed `actioncomm_cdav` table.

### 5. Added Missing JOINs
Added proper JOIN for the user table:
```php
LEFT JOIN ' . $this->db->prefix() . 'user as sp ON sp.rowid = a.fk_user_action
```

### 6. OURI Parameter Handling
Fixed the `$ouri` parameter handling to use `a.recurid` instead of the non-existent `ac.uuidext`:
```php
// When both OID and OURI are provided
$sql .= ' AND (a.id = ' . ((int) $oid) . ' OR a.recurid = \''. $this->db->escape($ouri) . '\')';

// When only OURI is provided
} elseif ($ouri !== false) {
    $sql .= ' AND a.recurid = \''. $this->db->escape($ouri) . '\'';
}
```

## Test Cases Added

Added test cases to `test/phpunit/CDavLibTest.php` to verify:
1. OID and OURI parameters together produce SQL with both `a.id =` and `a.recurid =` conditions
2. OURI parameter alone produces SQL with only `a.recurid =` condition (no `a.id =`)

## Regression Origin

This regression dates back to when the `actioncomm_cdav` table was removed from Dolibarr. The code was not properly updated to handle the removal, leaving broken references to fields and tables that no longer exist.

## Files Modified

- `htdocs/dav/dav.class.php` - Method `getSqlCalEvents()` (lines 69-111)
- `test/phpunit/CDavLibTest.php` - Method `testGetSqlCalEvents()` (lines 123-138)

## Verification

All CDavLibTest tests pass:
- testCdavLibConstruct
- testGetSqlCalEvents
- testToVCalendar
- testGetFullCalendarObjects

* FIX: Phan type warnings and PHPUnit 7.x compatibility

- Fix Phan type warnings in dav.class.php by casting $ouri to string before escape()
- Add PHPUnit compatibility helper in CommonClassTest for assertMatchesRegularExpression
  which was introduced in PHPUnit 8.0, providing backward compatibility with PHPUnit 7.x

Fixes:
- PhanTypeMismatchArgument warnings for $ouri parameter
- assertMatchesRegularExpression undefined method error in CI with PHPUnit < 8.0
2026-07-30 17:09:34 +02:00
MDW
dd5df7d121
Qual: Rename $from as $from_line (filecheck_diff.php) (#39319)
# Qual: Rename $from as $from_line (filecheck_diff.php)

SqlInjectionPlugin is configured to consider that '$from' is an SQL expression
and requires that assignments to it are protected from Sql Injection.

Renaming '$from' fixes false positives.
2026-07-30 17:05:49 +02:00
Laurent Destailleur
403e6b4640 Fix CI 2026-07-30 16:59:25 +02:00
Laurent Destailleur
e9c84e8926 Trans 2026-07-30 13:32:58 +02:00
MDW
273917d775
NEW: Add dolibarr-interactive-test skill for creating interactive test cases (#39328)
# NEW: Add dolibarr-interactive-test skill for creating interactive test cases

This skill provides guidance on creating PHP scripts for Dolibarr that:
- Set up test data in the database
- Provide direct links to view results in the web interface
- Allow users to tear down/clean up test data
- Handle proper authentication and CSRF protection
- Debug database errors including InnoDB monitor output
2026-07-30 13:12:43 +02:00
Laurent Destailleur
c3a8c2d57c Merge 2026-07-30 11:58:16 +02:00
Laurent Destailleur
f8e5f7f4cc Trans 2026-07-30 11:56:51 +02:00
Laurent Destailleur
2cc7bcebed Merge branch '24.0' of git@github.com:Dolibarr/dolibarr.git into develop 2026-07-30 11:23:34 +02:00
Laurent Destailleur
7011475563 Prepare release 2026-07-30 11:23:07 +02:00
Laurent Destailleur
9415c5c17b Doc 2026-07-30 11:20:44 +02:00