[BUG] Désactivation service / Dolibarr 18.0.1 et 18.0.2

Bonjour,

Informations :

  • Version Dolibarr 18.0.1 et 18.0.2 / Installation non initiale
  • Pas de modules externes
  • Installation : LAMP / Apache/2.4.52 - Mariadb-10.6 - PHP 8.1.2
  • Système : Ubuntu 22.04.3 LTS à jour

Suite au passage à la version 18.0.0 à la version 18.0.1, nous ne pouvons plus désactiver un service dans un contrat. Je suis passé à la version 18.0.2 mais même problème.

Le problème

Quand on clique sur le bouton permettant de désactiver un service dans un contrat, cela nous renvoie vers une page web du même contrat avec la ligne en question uniquement mais le service reste actif (URL/contrat/card.php?id=49&ligne=233&action=unactivateline&page_y=138).

Cette erreur PHP s’affiche dans le logs d’Apache2 au moment du clic sur le bouton de désactivation du service : [php:error] [pid 289254] [client IP:53390] PHP Fatal error: Uncaught TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in /var/www/dolibarr/htdocs/core/lib/date.lib.php:148\nStack trace:\n#0 /var/www/dolibarr/htdocs/core/lib/date.lib.php(148): abs()\n#1 /var/www/dolibarr/htdocs/contrat/card.php(2027): dol_time_plus_duree()\n#2 {main}\n thrown in /var/www/dolibarr/htdocs/core/lib/date.lib.php on line 14

Quelqu’un rencontre-t-il le même problème ?

Je vous remercie par avance pour votre aide.

Bonsoir prière de désactivé et réactivé le moducle contrat et revenez nous …

Bonjour,

Merci pour cette piste mais le problème demeure. J’ai également redémarré le serveur, utilisé le mode « navigation privé » de Firefox et essayé avec Chrome et Chromium mais toujours le même problème avec la même erreur PHP indiquée plus haut :confused:

J’ai enlevé la date prévue de fin du service et tenté de désactiver le service mais cela a donné l’erreur suivante :
[Tue Oct 24 08:26:11.372647 2023] [php:error] [pid 768] [client IP:46018] PHP Fatal error: Uncaught TypeError: Unsupported operand types: string * int in /var/www/dolibarr/htdocs/core/lib/date.lib.php:135\nStack trace:\n#0 /var/www/dolibarr/htdocs/contrat/card.php(2027): dol_time_plus_duree()\n#1 {main}\n thrown in /var/www/dolibarr/htdocs/core/lib/date.lib.php on line 135, referer: URL/contrat/card.php?id=383

J’ai enlevé les dates prévues de démarrage et de fin du service mais même erreur initiale.

Je suis passé en version 18.0.3 et j’ai toujours le même problème et la même erreur dans les logs d’Apache2 :

[Fri Nov 10 08:05:32.828080 2023] [php:error] [pid 1172] [client IP:43336] PHP Fatal error:  Uncaught TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in /var/www/dolibarr/htdocs/core/lib/date.lib.php:148\nStack trace:\n#0 /var/www/dolibarr/htdocs/core/lib/date.lib.php(148): abs()\n#1 /var/www/dolibarr/htdocs/contrat/card.php(2027): dol_time_plus_duree()\n#2 {main}\n  thrown in /var/www/dolibarr/htdocs/core/lib/date.lib.php on line 148, referer: URL/contrat/card.php?id=3&save_lastsearch_values=1

J’ai modifié le fichier dolibarr/htdocs/core/lib/date.lib.php ligne 148 :

Avant :

        if ($duration_value < 0) {
                $deltastring .= abs($duration_value);
                $sub = true;
        }

Après

        if ($duration_value < 0) {
                $deltastring .= abs((float) $duration_value);
                $sub = true;
        }

J’ai eu également un souci ligne 135 du même fichier
Avant :

        if ($duration_unit == 'h') {
                return $time + (3600 * $duration_value);
        }

Après :

        if ($duration_unit == 'h') {
                return $time + (3600 * intval($duration_value));
        }

Je peux de nouveau désactiver un service dans un contrat