From 6d6e6ff70c8ada313776d1364b7da0f40da3b8d7 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Wed, 16 Mar 2022 10:49:16 +0100 Subject: [PATCH 1/4] NEW clean values and amount in FEC import --- .../class/accountancyimport.class.php | 40 +++++++++++++++++-- .../modules/import/import_csv.modules.php | 2 +- .../modules/import/import_xlsx.modules.php | 2 +- htdocs/core/modules/modAccounting.class.php | 2 + 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/htdocs/accountancy/class/accountancyimport.class.php b/htdocs/accountancy/class/accountancyimport.class.php index ea88534b6ed..5231d3a0e36 100644 --- a/htdocs/accountancy/class/accountancyimport.class.php +++ b/htdocs/accountancy/class/accountancyimport.class.php @@ -39,6 +39,35 @@ */ class AccountancyImport { + /** + * Clean amount + * + * @param array $arrayrecord Array of read values: [fieldpos] => (['val']=>val, ['type']=>-1=null,0=blank,1=string), [fieldpos+1]... + * @param string $fieldname Field name with alias + * @param array $listfields Fields list to add + * @param array $listvalues Values list to add + * @param int $record_key Record key + * @return int <0 if KO, >0 if OK + */ + public function cleanAmount(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) { + $value_trim = trim($arrayrecord[$record_key]['val']); + $arrayrecord[$record_key]['val'] = floatval($value_trim); + } + + /** + * Clean value with trim + * + * @param array $arrayrecord Array of read values: [fieldpos] => (['val']=>val, ['type']=>-1=null,0=blank,1=string), [fieldpos+1]... + * @param string $fieldname Field name with alias + * @param array $listfields Fields list to add + * @param array $listvalues Values list to add + * @param int $record_key Record key + * @return int <0 if KO, >0 if OK + */ + public function cleanValue(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) { + $arrayrecord[$record_key]['val'] = trim($arrayrecord[$record_key]['val']); + } + /** * Compute amount * @@ -55,13 +84,19 @@ class AccountancyImport $fieldname = $fieldArr[1]; } - $debit = floatval(trim($arrayrecord[11]['val'])); - $credit = floatval(trim($arrayrecord[12]['val'])); + $debit_index = 11; + $credit_index = 12; + $debit_val = trim($arrayrecord[$debit_index]['val']); + $credit_val = trim($arrayrecord[$credit_index]['val']); + $debit = floatval($debit_val); + $credit = floatval($credit_val); if (!empty($debit)) { $amount = $debit; } else { $amount = $credit; } + $listvalues[$debit_index] = "'" . $debit . "'"; + $listvalues[$credit_index] = "'" . $credit . "'"; $listfields[] = $fieldname; $listvalues[] = "'" . abs($amount) . "'"; @@ -69,7 +104,6 @@ class AccountancyImport return 1; } - /** * Compute sens * diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 781c22ce7e3..0ff69e9ffa0 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -612,7 +612,7 @@ class ImportCsv extends ModeleImports break; } $classinstance = new $class($this->db); - $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord)); + $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $key - 1)); if ($res < 0) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 1c38f52cbfc..804b4b00c2c 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -653,7 +653,7 @@ class ImportXlsx extends ModeleImports break; } $classinstance = new $class($this->db); - $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord)); + $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $key - 1)); if ($res < 0) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 73494a6cb04..2331d4da118 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -354,8 +354,10 @@ class modAccounting extends DolibarrModules 'b.sens'=>'rule-computeDirection' ); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent) $this->import_convertvalue_array[$r]=array( + 'b.piece_num' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanValue', 'element' => 'Accountancy'), 'b.numero_compte'=>array('rule'=>'accountingaccount'), 'b.subledger_account'=>array('rule'=>'accountingaccount'), + 'b.multicurrency_amount' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanAmount', 'element' => 'Accountancy'), 'b.montant' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'computeAmount', 'element' => 'Accountancy'), 'b.sens' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'computeDirection', 'element' => 'Accountancy'), ); From 4ad6cc6a65c77254581ac77dcec748da8286bec9 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Wed, 16 Mar 2022 11:00:14 +0100 Subject: [PATCH 2/4] FIX stickler-ci --- htdocs/accountancy/class/accountancyimport.class.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/class/accountancyimport.class.php b/htdocs/accountancy/class/accountancyimport.class.php index 5231d3a0e36..b2211b8cf7c 100644 --- a/htdocs/accountancy/class/accountancyimport.class.php +++ b/htdocs/accountancy/class/accountancyimport.class.php @@ -49,7 +49,8 @@ class AccountancyImport * @param int $record_key Record key * @return int <0 if KO, >0 if OK */ - public function cleanAmount(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) { + public function cleanAmount(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) + { $value_trim = trim($arrayrecord[$record_key]['val']); $arrayrecord[$record_key]['val'] = floatval($value_trim); } @@ -64,7 +65,8 @@ class AccountancyImport * @param int $record_key Record key * @return int <0 if KO, >0 if OK */ - public function cleanValue(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) { + public function cleanValue(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) + { $arrayrecord[$record_key]['val'] = trim($arrayrecord[$record_key]['val']); } From cbbfe684824906e2d04e4c51d39223c1b622bfc8 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Wed, 16 Mar 2022 11:06:14 +0100 Subject: [PATCH 3/4] FIX stickler-ci --- htdocs/accountancy/class/accountancyimport.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/accountancy/class/accountancyimport.class.php b/htdocs/accountancy/class/accountancyimport.class.php index b2211b8cf7c..a79484b2a83 100644 --- a/htdocs/accountancy/class/accountancyimport.class.php +++ b/htdocs/accountancy/class/accountancyimport.class.php @@ -33,7 +33,6 @@ */ - /** * Manage the different format accountancy import */ From 566bced9dc012a087796f04d1c8babe308b64055 Mon Sep 17 00:00:00 2001 From: lvessiller Date: Fri, 18 Mar 2022 08:53:54 +0100 Subject: [PATCH 4/4] FIX escape values and find indexed columns by key --- .../class/accountancyimport.class.php | 60 +++++++++++-------- .../modules/import/import_csv.modules.php | 2 +- .../modules/import/import_xlsx.modules.php | 2 +- htdocs/core/modules/modAccounting.class.php | 2 + 4 files changed, 39 insertions(+), 27 deletions(-) diff --git a/htdocs/accountancy/class/accountancyimport.class.php b/htdocs/accountancy/class/accountancyimport.class.php index bd771742f26..4e058136c66 100644 --- a/htdocs/accountancy/class/accountancyimport.class.php +++ b/htdocs/accountancy/class/accountancyimport.class.php @@ -67,10 +67,12 @@ class AccountancyImport * @param int $record_key Record key * @return int <0 if KO, >0 if OK */ - public function cleanAmount(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) + public function cleanAmount(&$arrayrecord, $fieldname, $listfields, $listvalues, $record_key) { $value_trim = trim($arrayrecord[$record_key]['val']); $arrayrecord[$record_key]['val'] = floatval($value_trim); + + return 1; } /** @@ -83,9 +85,11 @@ class AccountancyImport * @param int $record_key Record key * @return int <0 if KO, >0 if OK */ - public function cleanValue(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $record_key) + public function cleanValue(&$arrayrecord, $fieldname, $listfields, $listvalues, $record_key) { $arrayrecord[$record_key]['val'] = trim($arrayrecord[$record_key]['val']); + + return 1; } /** @@ -104,22 +108,23 @@ class AccountancyImport $fieldname = $fieldArr[1]; } - $debit_index = 11; - $credit_index = 12; - $debit_val = trim($arrayrecord[$debit_index]['val']); - $credit_val = trim($arrayrecord[$credit_index]['val']); - $debit = floatval($debit_val); - $credit = floatval($credit_val); - if (!empty($debit)) { - $amount = $debit; - } else { - $amount = $credit; - } - $listvalues[$debit_index] = "'" . $debit . "'"; - $listvalues[$credit_index] = "'" . $credit . "'"; + // get fields indexes + $field_index_list = array_flip($listfields); + if (isset($field_index_list['debit']) && isset($field_index_list['credit'])) { + $debit_index = $field_index_list['debit']; + $credit_index = $field_index_list['credit']; - $listfields[] = $fieldname; - $listvalues[] = "'" . abs($amount) . "'"; + $debit = floatval($arrayrecord[$debit_index]['val']); + $credit = floatval($arrayrecord[$credit_index]['val']); + if (!empty($debit)) { + $amount = $debit; + } else { + $amount = $credit; + } + + $listfields[] = $fieldname; + $listvalues[] = "'" . $this->db->escape(abs($amount)) . "'"; + } return 1; } @@ -141,15 +146,20 @@ class AccountancyImport $fieldname = $fieldArr[1]; } - $debit = floatval(trim($arrayrecord[11]['val'])); - if (!empty($debit)) { - $sens = 'D'; - } else { - $sens = 'C'; - } + $field_index_list = array_flip($listfields); + if (isset($field_index_list['debit'])) { + $debit_index = $field_index_list['debit']; - $listfields[] = $fieldname; - $listvalues[] = "'" . $sens . "'"; + $debit = floatval($arrayrecord[$debit_index]['val']); + if (!empty($debit)) { + $sens = 'D'; + } else { + $sens = 'C'; + } + + $listfields[] = $fieldname; + $listvalues[] = "'" . $this->db->escape($sens) . "'"; + } return 1; } diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 0ff69e9ffa0..5cb0f6e8426 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -612,7 +612,7 @@ class ImportCsv extends ModeleImports break; } $classinstance = new $class($this->db); - $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $key - 1)); + $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, $listfields, $listvalues, $key - 1)); if ($res < 0) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 804b4b00c2c..28eda4c5207 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -653,7 +653,7 @@ class ImportXlsx extends ModeleImports break; } $classinstance = new $class($this->db); - $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, &$listfields, &$listvalues, $key - 1)); + $res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, $listfields, $listvalues, $key - 1)); if ($res < 0) { if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict'])); diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php index 2331d4da118..5e30978693e 100644 --- a/htdocs/core/modules/modAccounting.class.php +++ b/htdocs/core/modules/modAccounting.class.php @@ -357,6 +357,8 @@ class modAccounting extends DolibarrModules 'b.piece_num' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanValue', 'element' => 'Accountancy'), 'b.numero_compte'=>array('rule'=>'accountingaccount'), 'b.subledger_account'=>array('rule'=>'accountingaccount'), + 'b.debit' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanAmount', 'element' => 'Accountancy'), + 'b.credit' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanAmount', 'element' => 'Accountancy'), 'b.multicurrency_amount' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanAmount', 'element' => 'Accountancy'), 'b.montant' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'computeAmount', 'element' => 'Accountancy'), 'b.sens' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'computeDirection', 'element' => 'Accountancy'),