From 83263cc174380ba1300cf15aca45bfe4da1bf199 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jun 2020 21:19:31 +0200 Subject: [PATCH 1/5] Fix supplier sepa --- htdocs/compta/facture/class/facture.class.php | 29 ++++++++++++++----- htdocs/compta/facture/prelevement.php | 13 +++++++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 80b68182363..3a1b4d7dc9e 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4083,11 +4083,13 @@ class Facture extends CommonInvoice * Create a withdrawal request for a standing order. * Use the remain to pay excluding all existing open direct debit requests. * - * @param User $fuser User asking the direct debit transfer - * @param float $amount Amount we request direct debit for - * @return int <0 if KO, >0 if OK + * @param User $fuser User asking the direct debit transfer + * @param float $amount Amount we request direct debit for + * @param string $type 'direct-debit' or 'bank-transfer' + * @param string $source_type Source ('facture' or 'supplier_invoice') + * @return int <0 if KO, >0 if OK */ - public function demande_prelevement($fuser, $amount = 0) + public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $source_type = 'facture') { // phpcs:enable @@ -4103,7 +4105,11 @@ class Facture extends CommonInvoice $sql = 'SELECT count(*)'; $sql .= ' FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande'; - $sql .= ' WHERE fk_facture = '.$this->id; + if ($type == 'bank-transfer') { + $sql .= ' WHERE fk_facture_fourn = '.$this->id; + } else { + $sql .= ' WHERE fk_facture = '.$this->id; + } $sql .= ' AND traite = 0'; dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG); @@ -4128,8 +4134,13 @@ class Facture extends CommonInvoice if (is_numeric($amount) && $amount != 0) { - $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande'; - $sql .= ' (fk_facture, amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib)'; + $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'prelevement_facture_demande('; + if ($type == 'bank-transfer') { + $sql .= 'fk_facture_fourn, '; + } else { + $sql .= 'fk_facture, '; + } + $sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, source_type)'; $sql .= ' VALUES ('.$this->id; $sql .= ",'".price2num($amount)."'"; $sql .= ",'".$this->db->idate($now)."'"; @@ -4137,7 +4148,9 @@ class Facture extends CommonInvoice $sql .= ",'".$bac->code_banque."'"; $sql .= ",'".$bac->code_guichet."'"; $sql .= ",'".$bac->number."'"; - $sql .= ",'".$bac->cle_rib."')"; + $sql .= ",'".$bac->cle_rib."'"; + $sql .= ",'".$source_type."'"; + $sql .= ")"; dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG); $resql = $this->db->query($sql); diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index 984c29d75ed..bdf45514229 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -24,7 +24,7 @@ /** * \file htdocs/compta/facture/prelevement.php * \ingroup facture - * \brief Management of direct debit order of invoices + * \brief Management of direct debit order or credit tranfer of invoices */ require '../../main.inc.php'; @@ -83,7 +83,13 @@ if (empty($reshook)) { $db->begin(); - $result = $object->demande_prelevement($user, GETPOST('withdraw_request_amount')); + $newtype = $type; + $source_type = 'facture'; + if ($type == 'bank-transfer') { + $source_type = 'supplier_invoice'; + } + + $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount'), 'alpha'), $newtype, $source_type); if ($result > 0) { $db->commit(); @@ -103,7 +109,7 @@ if (empty($reshook)) { if ($object->id > 0) { - $result = $object->demande_prelevement_delete($user, GETPOST('did')); + $result = $object->demande_prelevement_delete($user, GETPOST('did', 'int')); if ($result == 0) { header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); @@ -199,6 +205,7 @@ if ($object->id > 0) $morehtmlref .= '
'; $morehtmlref .= ''; $morehtmlref .= ''; + $morehtmlref .= ''; $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); $morehtmlref .= ''; $morehtmlref .= '
'; From f9da31e6584e882f8b2a8c087441c8ac3863c2f5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jun 2020 21:21:18 +0200 Subject: [PATCH 2/5] Fix rounding --- htdocs/compta/facture/prelevement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index bdf45514229..541ae9cb459 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -89,7 +89,7 @@ if (empty($reshook)) $source_type = 'supplier_invoice'; } - $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount'), 'alpha'), $newtype, $source_type); + $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $source_type); if ($result > 0) { $db->commit(); From 964f17c5076db0eec7e5ac118d7f5e5e5aa463ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jun 2020 21:22:44 +0200 Subject: [PATCH 3/5] Fix escape fields --- htdocs/compta/facture/class/facture.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 3a1b4d7dc9e..1b1169d6fad 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4086,10 +4086,10 @@ class Facture extends CommonInvoice * @param User $fuser User asking the direct debit transfer * @param float $amount Amount we request direct debit for * @param string $type 'direct-debit' or 'bank-transfer' - * @param string $source_type Source ('facture' or 'supplier_invoice') + * @param string $sourcetype Source ('facture' or 'supplier_invoice') * @return int <0 if KO, >0 if OK */ - public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $source_type = 'facture') + public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $sourcetype = 'facture') { // phpcs:enable @@ -4140,16 +4140,16 @@ class Facture extends CommonInvoice } else { $sql .= 'fk_facture, '; } - $sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, source_type)'; + $sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, sourcetype)'; $sql .= ' VALUES ('.$this->id; $sql .= ",'".price2num($amount)."'"; $sql .= ",'".$this->db->idate($now)."'"; $sql .= ",".$fuser->id; - $sql .= ",'".$bac->code_banque."'"; - $sql .= ",'".$bac->code_guichet."'"; - $sql .= ",'".$bac->number."'"; - $sql .= ",'".$bac->cle_rib."'"; - $sql .= ",'".$source_type."'"; + $sql .= ",'".$this->db->escape($bac->code_banque)."'"; + $sql .= ",'".$this->db->escape($bac->code_guichet)."'"; + $sql .= ",'".$this->db->escape($bac->number)."'"; + $sql .= ",'".$this->db->escape($bac->cle_rib)."'"; + $sql .= ",'".$this->db->escape($sourcetype)."'"; $sql .= ")"; dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG); From 15dd1bd7057198c1b1aa450246a641c204670665 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jun 2020 21:46:32 +0200 Subject: [PATCH 4/5] Merge --- htdocs/compta/facture/class/facture.class.php | 7 ++++-- htdocs/compta/facture/list.php | 2 +- htdocs/compta/facture/prelevement.php | 10 ++++++--- htdocs/core/lib/invoice.lib.php | 1 + .../install/mysql/migration/11.0.0-12.0.0.sql | 4 ++++ .../llx_prelevement_facture_demande.key.sql | 22 +++++++++++++++++++ 6 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 htdocs/install/mysql/tables/llx_prelevement_facture_demande.key.sql diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 1b1169d6fad..9a80ad91d24 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4080,7 +4080,7 @@ class Facture extends CommonInvoice // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Create a withdrawal request for a standing order. + * Create a withdrawal request for a direct debit order or a credit transfer order. * Use the remain to pay excluding all existing open direct debit requests. * * @param User $fuser User asking the direct debit transfer @@ -4092,6 +4092,7 @@ class Facture extends CommonInvoice public function demande_prelevement($fuser, $amount = 0, $type = 'direct-debit', $sourcetype = 'facture') { // phpcs:enable + global $conf; $error = 0; @@ -4110,6 +4111,7 @@ class Facture extends CommonInvoice } else { $sql .= ' WHERE fk_facture = '.$this->id; } + $sql .= ' AND ext_payment_id IS NULL'; // To exclude record done for some online payments $sql .= ' AND traite = 0'; dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG); @@ -4140,7 +4142,7 @@ class Facture extends CommonInvoice } else { $sql .= 'fk_facture, '; } - $sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, sourcetype)'; + $sql .= ' amount, date_demande, fk_user_demande, code_banque, code_guichet, number, cle_rib, sourcetype, entity)'; $sql .= ' VALUES ('.$this->id; $sql .= ",'".price2num($amount)."'"; $sql .= ",'".$this->db->idate($now)."'"; @@ -4150,6 +4152,7 @@ class Facture extends CommonInvoice $sql .= ",'".$this->db->escape($bac->number)."'"; $sql .= ",'".$this->db->escape($bac->cle_rib)."'"; $sql .= ",'".$this->db->escape($sourcetype)."'"; + $sql .= ",".$conf->entity; $sql .= ")"; dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG); diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 8b9e204f17e..b09f7f00ffe 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -381,7 +381,7 @@ elseif ($massaction == 'withdrawrequest') foreach ($listofbills as $aBill) { $db->begin(); - $result = $aBill->demande_prelevement($user, $aBill->resteapayer); + $result = $aBill->demande_prelevement($user, $aBill->resteapayer, 'direct-debit', 'facture'); if ($result > 0) { $db->commit(); diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php index 541ae9cb459..bc3762b41ea 100644 --- a/htdocs/compta/facture/prelevement.php +++ b/htdocs/compta/facture/prelevement.php @@ -84,12 +84,12 @@ if (empty($reshook)) $db->begin(); $newtype = $type; - $source_type = 'facture'; + $sourcetype = 'facture'; if ($type == 'bank-transfer') { - $source_type = 'supplier_invoice'; + $sourcetype = 'supplier_invoice'; } - $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $source_type); + $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype); if ($result > 0) { $db->commit(); @@ -515,6 +515,7 @@ if ($object->id > 0) $sql .= " WHERE fk_facture = ".$object->id; } $sql .= " AND pfd.traite = 0"; + $sql .= " AND pfd.ext_payment_id IS NULL"; $sql .= " ORDER BY pfd.date_demande DESC"; $result_sql = $db->query($sql); @@ -538,6 +539,7 @@ if ($object->id > 0) $sql .= " WHERE fk_facture = ".$object->id; } $sql .= " AND pfd.traite = 0"; + $sql .= " AND pfd.ext_payment_id IS NULL"; $result_sql = $db->query($sql); if ($result_sql) @@ -630,6 +632,7 @@ if ($object->id > 0) $sql .= " WHERE fk_facture = ".$object->id; } $sql .= " AND pfd.traite = 0"; + $sql .= " AND pfd.ext_payment_id IS NULL"; $sql .= " ORDER BY pfd.date_demande DESC"; $result_sql = $db->query($sql); @@ -684,6 +687,7 @@ if ($object->id > 0) $sql .= " WHERE fk_facture = ".$object->id; } $sql .= " AND pfd.traite = 1"; + $sql .= " AND pfd.ext_payment_id IS NULL"; $sql .= " ORDER BY pfd.date_demande DESC"; $result = $db->query($sql); diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 703d50c97f8..a669b12adfe 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -62,6 +62,7 @@ function facture_prepare_head($object) $sql = "SELECT COUNT(pfd.rowid) as nb"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= " WHERE pfd.fk_facture = ".$object->id; + $sql .= " AND pfd.ext_payment_id IS NULL"; $resql = $db->query($sql); if ($resql) { diff --git a/htdocs/install/mysql/migration/11.0.0-12.0.0.sql b/htdocs/install/mysql/migration/11.0.0-12.0.0.sql index b7ac95b8cea..7a6f2333346 100644 --- a/htdocs/install/mysql/migration/11.0.0-12.0.0.sql +++ b/htdocs/install/mysql/migration/11.0.0-12.0.0.sql @@ -307,4 +307,8 @@ ALTER TABLE llx_emailcollector_emailcollector ADD COLUMN hostcharset varchar(16) ALTER TABLE llx_adherent_type MODIFY subscription varchar(3) NOT NULL DEFAULT '1'; ALTER TABLE llx_adherent_type MODIFY vote varchar(3) NOT NULL DEFAULT '1'; +UPDATE llx_prelevement_facture_demande SET entity = 1 WHERE entity IS NULL; + +ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture); +ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn); diff --git a/htdocs/install/mysql/tables/llx_prelevement_facture_demande.key.sql b/htdocs/install/mysql/tables/llx_prelevement_facture_demande.key.sql new file mode 100644 index 00000000000..4f9aedb9cdf --- /dev/null +++ b/htdocs/install/mysql/tables/llx_prelevement_facture_demande.key.sql @@ -0,0 +1,22 @@ +-- =================================================================== +-- Copyright (C) 2005 Rodolphe Quiedeville +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- =================================================================== + + +ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture); +ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn); + From 7b64e8643fe2e78a78ca877ee9533bf59078e941 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jun 2020 16:08:48 +0200 Subject: [PATCH 5/5] Trans and css --- htdocs/langs/en_US/admin.lang | 2 +- htdocs/theme/eldy/info-box.inc.php | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7cf5788f53d..c31a480239e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1983,7 +1983,7 @@ SmallerThan=Smaller than LargerThan=Larger than IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects. WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/. -EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set a value here to use this feature. Note that you must also use a read/write login account. +EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\s([^\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 604aff91a3e..c5f4b8d248c 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -28,9 +28,9 @@ if (!defined('ISLOADEDBYSTEELSHEET')) die('Must be call by steelsheet'); ?> } .info-box-more { float: right; - top: 6px; + top: 5px; position: absolute; - right: 10px; + right: 8px; } .info-box small { @@ -385,6 +385,16 @@ if (GETPOSTISSET('THEME_SATURATE_RATIO')) $conf->global->THEME_SATURATE_RATIO = min-width: 350px; max-width: 350px; } +.info-box-title { + width: calc(100% - 20px); +} +@media only screen and (max-width: 767px) { + .info-box-module { + min-width: 260px; + } +} + + .info-box-module .info-box-content { height: 6.4em; }