From d831e30869e1e17edc881458d6b8851376a5c377 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 30 Jan 2025 08:29:46 +0100 Subject: [PATCH 1/9] FIX multicompany compatibility --- htdocs/admin/multicurrency.php | 6 +++--- htdocs/multicurrency/multicurrency_rate.php | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php index 2a6713ef599..a4b503b3f24 100644 --- a/htdocs/admin/multicurrency.php +++ b/htdocs/admin/multicurrency.php @@ -130,9 +130,9 @@ if ($action == 'add_currency') { } } elseif ($action == 'setapilayer') { if (GETPOSTISSET('modify_apilayer')) { - dolibarr_set_const($db, 'MULTICURRENCY_APP_ID', GETPOST('MULTICURRENCY_APP_ID', 'alpha')); - dolibarr_set_const($db, 'MULTICURRENCY_APP_SOURCE', GETPOST('MULTICURRENCY_APP_SOURCE', 'alpha')); - //dolibarr_set_const($db, 'MULTICURRENCY_ALTERNATE_SOURCE', GETPOST('MULTICURRENCY_ALTERNATE_SOURCE', 'alpha')); + dolibarr_set_const($db, 'MULTICURRENCY_APP_ID', GETPOST('MULTICURRENCY_APP_ID', 'alpha'), 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, 'MULTICURRENCY_APP_SOURCE', GETPOST('MULTICURRENCY_APP_SOURCE', 'alpha'), 'chaine', 0, '', $conf->entity); + //dolibarr_set_const($db, 'MULTICURRENCY_ALTERNATE_SOURCE', GETPOST('MULTICURRENCY_ALTERNATE_SOURCE', 'alpha'), 'chaine', 0, '', $conf->entity); } else { $multiurrency = new MultiCurrency($db); $result = $multiurrency->syncRates(getDolGlobalString('MULTICURRENCY_APP_ID')); diff --git a/htdocs/multicurrency/multicurrency_rate.php b/htdocs/multicurrency/multicurrency_rate.php index ef05976018e..7cfe91e5e14 100644 --- a/htdocs/multicurrency/multicurrency_rate.php +++ b/htdocs/multicurrency/multicurrency_rate.php @@ -354,7 +354,8 @@ if ($search_rate) { if ($search_code) { $sql .= natural_search('m.code', $search_code); } -$sql .= " WHERE m.code <> '".$db->escape($conf->currency)."'"; +$sql .= " WHERE cr.entity IN (".getEntity('multicurrency').")"; +$sql .= " AND m.code <> '".$db->escape($conf->currency)."'"; // Add where from hooks $parameters = array(); From b4e9367e3d1e73472751556d3dc9ac482b9d4a61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Lukas?= Date: Fri, 31 Jan 2025 14:28:34 +0100 Subject: [PATCH 2/9] Fix #32890 --- htdocs/emailcollector/class/emailcollector.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index c6e97db9d6b..4d9b5a5574d 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -3360,7 +3360,7 @@ class EmailCollector extends CommonObject foreach ($attachments as $attachment) { // $attachment->save($destdir.'/'); $typeattachment = (string) $attachment->getDisposition(); - $filename = $attachment->getFilename(); + $filename = $attachment->getName(); $content = $attachment->getContent(); $this->saveAttachment($destdir, $filename, $content); } From 46125921b1efe625686002d386f8a2767e359c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Lukas?= Date: Fri, 31 Jan 2025 14:41:19 +0100 Subject: [PATCH 3/9] Fix #32892 --- htdocs/emailcollector/class/emailcollector.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index c6e97db9d6b..755222224ac 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -2872,7 +2872,7 @@ class EmailCollector extends CommonObject $this->errors = $actioncomm->errors; } else { if ($fk_element_type == "ticket" && is_object($objectemail)) { - if ($objectemail->status == Ticket::STATUS_CLOSED || $objectemail->status == Ticket::STATUS_CANCELED) { + if ($objectemail->status == Ticket::STATUS_CLOSED || $objectemail->status == Ticket::STATUS_CANCELED || $objectemail->status == Ticket::STATUS_NEED_MORE_INFO || $objectemail->status == Ticket::STATUS_WAITING) { if ($objectemail->fk_user_assign != null) { $res = $objectemail->setStatut(Ticket::STATUS_ASSIGNED); } else { From ae81f8bf5009ecc81d1be7e666061b5facc64ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Lukas?= Date: Fri, 31 Jan 2025 14:55:04 +0100 Subject: [PATCH 4/9] Fix #32894 --- htdocs/emailcollector/class/emailcollector.class.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index c6e97db9d6b..95aea5f8e36 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -3345,6 +3345,13 @@ class EmailCollector extends CommonObject $tickettocreate->context['actionmsg'] = $langs->trans("ActionAC_EMAIL_IN").' - '.$langs->trans("TICKET_CREATEInDolibarr"); //$tickettocreate->email_fields_no_propagate_in_actioncomm = 0; + // Add sender to context array to make sure that confirmation e-mail can be sent by trigger script + $sender_contact = New Contact($this->db); + $sender_contact->fetch(0, null, '', $from); + if (!empty($sender_contact->id)) { + $tickettocreate->context['contactid'] = $sender_contact->id; + } + $result = $tickettocreate->create($user); if ($result <= 0) { $errorforactions++; From adbaaac256ef225472b05250466731d2d54eb27a Mon Sep 17 00:00:00 2001 From: Eric Seigne Date: Fri, 31 Jan 2025 17:19:20 +0100 Subject: [PATCH 5/9] add test on null for situation_percent --- htdocs/compta/facture/class/facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 67926aa4bdb..d10bf9fd0b3 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3870,7 +3870,7 @@ class Facture extends CommonInvoice if (empty($fk_prev_id)) { $fk_prev_id = 'null'; } - if (!isset($situation_percent) || $situation_percent > 100 || (string) $situation_percent == '') { + if (!isset($situation_percent) || $situation_percent > 100 || (string) $situation_percent == '' || $situation_percent == null) { $situation_percent = 100; } if (empty($ref_ext)) { @@ -4131,7 +4131,7 @@ class Facture extends CommonInvoice if (empty($special_code) || $special_code == 3) { $special_code = 0; } - if (!isset($situation_percent) || $situation_percent > 100 || (string) $situation_percent == '') { + if (!isset($situation_percent) || $situation_percent > 100 || (string) $situation_percent == '' || $situation_percent == null) { $situation_percent = 100; } if (empty($ref_ext)) { From c39f295d76c5d1735f3b497ae95a4ac3c9092485 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 1 Feb 2025 06:07:12 +0100 Subject: [PATCH 6/9] FIX #32801 VAT type is inverted in form VAT selector --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index ad27dc50266..a72d7dbd176 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6774,7 +6774,7 @@ class Form // Keep only the VAT qualified for $type_vat $arrayofvatrates = array(); foreach ($this->cache_vatrates as $cachevalue) { - if (empty($cachevalue['type_vat']) || $cachevalue['type_vat'] != $type_vat) { + if (empty($cachevalue['type_vat']) || $cachevalue['type_vat'] == $type_vat) { $arrayofvatrates[] = $cachevalue; } } From d32f1e716a1bad67ec05e31e3f4fc173d8834e85 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 1 Feb 2025 14:48:39 +0100 Subject: [PATCH 7/9] FIX missing entity filter --- .../class/api_multicurrencies.class.php | 12 ++++++---- .../class/multicurrency.class.php | 23 ++++++++++--------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/htdocs/multicurrency/class/api_multicurrencies.class.php b/htdocs/multicurrency/class/api_multicurrencies.class.php index 09ad43b6dbe..6df6c15347c 100644 --- a/htdocs/multicurrency/class/api_multicurrencies.class.php +++ b/htdocs/multicurrency/class/api_multicurrencies.class.php @@ -65,7 +65,7 @@ class MultiCurrencies extends DolibarrApi $sql = "SELECT t.rowid"; $sql .= " FROM ".$this->db->prefix()."multicurrency as t"; - $sql .= ' WHERE 1 = 1'; + $sql .= " WHERE t.entity IN (".getEntity('multicurrency').")"; // Add sql filters if ($sqlfilters) { $errormessage = ''; @@ -386,11 +386,13 @@ class MultiCurrencies extends DolibarrApi $object = parent::_cleanObjectDatas($object); // Clear all fields out of interest - foreach ($object as $key => $value) { - if ($key == "id" || $key == "rate" || $key == "date_sync") { - continue; + if (!empty($object)) { + foreach ($object as $key => $value) { + if ($key == "id" || $key == "rate" || $key == "date_sync") { + continue; + } + unset($object->$key); } - unset($object->$key); } return $object; diff --git a/htdocs/multicurrency/class/multicurrency.class.php b/htdocs/multicurrency/class/multicurrency.class.php index a8f805814c3..ba36292f6c4 100644 --- a/htdocs/multicurrency/class/multicurrency.class.php +++ b/htdocs/multicurrency/class/multicurrency.class.php @@ -192,13 +192,11 @@ class MultiCurrency extends CommonObject { dol_syslog('MultiCurrency::fetch', LOG_DEBUG); - global $conf; - - $sql = "SELECT"; - $sql .= ' c.rowid, c.name, c.code, c.entity, c.date_create, c.fk_user'; - $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' AS c'; + $sql = "SELECT c.rowid, c.name, c.code, c.entity, c.date_create, c.fk_user"; + $sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element." AS c"; if (!empty($code)) { - $sql .= ' WHERE c.code = \''.$this->db->escape($code).'\' AND c.entity = '.$conf->entity; + $sql .= " WHERE c.code = '".$this->db->escape($code)."'"; + $sql .= " AND c.entity IN (".getEntity($this->element).")"; } else { $sql .= ' WHERE c.rowid = '.((int) $id); } @@ -244,9 +242,10 @@ class MultiCurrency extends CommonObject public function fetchAllCurrencyRate() { $sql = "SELECT cr.rowid"; - $sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line.' as cr'; - $sql .= ' WHERE cr.fk_multicurrency = '.((int) $this->id); - $sql .= ' ORDER BY cr.date_sync DESC'; + $sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element_line." as cr"; + $sql .= " WHERE cr.entity IN (".getEntity($this->element).")"; + $sql .= " AND cr.fk_multicurrency = ".((int) $this->id); + $sql .= " ORDER BY cr.date_sync DESC"; $this->rates = array(); @@ -482,8 +481,10 @@ class MultiCurrency extends CommonObject { $sql = "SELECT cr.rowid"; $sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element_line." as cr"; - $sql .= " WHERE cr.fk_multicurrency = ".((int) $this->id); - $sql .= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX.$this->table_element_line." AS cr2 WHERE cr2.fk_multicurrency = ".((int) $this->id).")"; + $sql .= " WHERE cr.entity IN (".getEntity($this->element).")"; + $sql .= " AND cr.fk_multicurrency = ".((int) $this->id); + $sql .= " AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM ".MAIN_DB_PREFIX.$this->table_element_line." AS cr2"; + $sql .= " WHERE cr2.entity IN (".getEntity($this->element).") AND cr2.fk_multicurrency = ".((int) $this->id).")"; dol_syslog(__METHOD__, LOG_DEBUG); $resql = $this->db->query($sql); From 76ab4d7ce5a554a021f77c47cc855e6d9977e920 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 2 Feb 2025 01:21:57 +0100 Subject: [PATCH 8/9] Update emailcollector.class.php --- htdocs/emailcollector/class/emailcollector.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index 95aea5f8e36..082b4ac6f67 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -3346,7 +3346,7 @@ class EmailCollector extends CommonObject //$tickettocreate->email_fields_no_propagate_in_actioncomm = 0; // Add sender to context array to make sure that confirmation e-mail can be sent by trigger script - $sender_contact = New Contact($this->db); + $sender_contact = new Contact($this->db); $sender_contact->fetch(0, null, '', $from); if (!empty($sender_contact->id)) { $tickettocreate->context['contactid'] = $sender_contact->id; From 01d9ff6a1b194dd437e102b17149631ca4ca316b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 2 Feb 2025 07:10:28 +0100 Subject: [PATCH 9/9] FIX phan error --- .../multicurrency/class/api_multicurrencies.class.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/htdocs/multicurrency/class/api_multicurrencies.class.php b/htdocs/multicurrency/class/api_multicurrencies.class.php index 6df6c15347c..3d044f2dc10 100644 --- a/htdocs/multicurrency/class/api_multicurrencies.class.php +++ b/htdocs/multicurrency/class/api_multicurrencies.class.php @@ -386,13 +386,11 @@ class MultiCurrencies extends DolibarrApi $object = parent::_cleanObjectDatas($object); // Clear all fields out of interest - if (!empty($object)) { - foreach ($object as $key => $value) { - if ($key == "id" || $key == "rate" || $key == "date_sync") { - continue; - } - unset($object->$key); + foreach ($object as $key => $value) { + if ($key == "id" || $key == "rate" || $key == "date_sync") { + continue; } + unset($object->$key); } return $object;