FIX escape values and find indexed columns by key

This commit is contained in:
lvessiller 2022-03-18 08:53:54 +01:00
parent 254ae943e1
commit 566bced9dc
4 changed files with 39 additions and 27 deletions

View File

@ -67,10 +67,12 @@ class AccountancyImport
* @param int $record_key Record key * @param int $record_key Record key
* @return int <0 if KO, >0 if OK * @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']); $value_trim = trim($arrayrecord[$record_key]['val']);
$arrayrecord[$record_key]['val'] = floatval($value_trim); $arrayrecord[$record_key]['val'] = floatval($value_trim);
return 1;
} }
/** /**
@ -83,9 +85,11 @@ class AccountancyImport
* @param int $record_key Record key * @param int $record_key Record key
* @return int <0 if KO, >0 if OK * @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']); $arrayrecord[$record_key]['val'] = trim($arrayrecord[$record_key]['val']);
return 1;
} }
/** /**
@ -104,22 +108,23 @@ class AccountancyImport
$fieldname = $fieldArr[1]; $fieldname = $fieldArr[1];
} }
$debit_index = 11; // get fields indexes
$credit_index = 12; $field_index_list = array_flip($listfields);
$debit_val = trim($arrayrecord[$debit_index]['val']); if (isset($field_index_list['debit']) && isset($field_index_list['credit'])) {
$credit_val = trim($arrayrecord[$credit_index]['val']); $debit_index = $field_index_list['debit'];
$debit = floatval($debit_val); $credit_index = $field_index_list['credit'];
$credit = floatval($credit_val);
if (!empty($debit)) {
$amount = $debit;
} else {
$amount = $credit;
}
$listvalues[$debit_index] = "'" . $debit . "'";
$listvalues[$credit_index] = "'" . $credit . "'";
$listfields[] = $fieldname; $debit = floatval($arrayrecord[$debit_index]['val']);
$listvalues[] = "'" . abs($amount) . "'"; $credit = floatval($arrayrecord[$credit_index]['val']);
if (!empty($debit)) {
$amount = $debit;
} else {
$amount = $credit;
}
$listfields[] = $fieldname;
$listvalues[] = "'" . $this->db->escape(abs($amount)) . "'";
}
return 1; return 1;
} }
@ -141,15 +146,20 @@ class AccountancyImport
$fieldname = $fieldArr[1]; $fieldname = $fieldArr[1];
} }
$debit = floatval(trim($arrayrecord[11]['val'])); $field_index_list = array_flip($listfields);
if (!empty($debit)) { if (isset($field_index_list['debit'])) {
$sens = 'D'; $debit_index = $field_index_list['debit'];
} else {
$sens = 'C';
}
$listfields[] = $fieldname; $debit = floatval($arrayrecord[$debit_index]['val']);
$listvalues[] = "'" . $sens . "'"; if (!empty($debit)) {
$sens = 'D';
} else {
$sens = 'C';
}
$listfields[] = $fieldname;
$listvalues[] = "'" . $this->db->escape($sens) . "'";
}
return 1; return 1;
} }

View File

@ -612,7 +612,7 @@ class ImportCsv extends ModeleImports
break; break;
} }
$classinstance = new $class($this->db); $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 ($res < 0) {
if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { 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'])); $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict']));

View File

@ -653,7 +653,7 @@ class ImportXlsx extends ModeleImports
break; break;
} }
$classinstance = new $class($this->db); $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 ($res < 0) {
if (!empty($objimport->array_import_convertvalue[0][$val]['dict'])) { 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'])); $this->errors[$error]['lib'] = $langs->trans('ErrorFieldValueNotIn', $key, $newval, 'code', $langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$val]['dict']));

View File

@ -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.piece_num' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'cleanValue', 'element' => 'Accountancy'),
'b.numero_compte'=>array('rule'=>'accountingaccount'), 'b.numero_compte'=>array('rule'=>'accountingaccount'),
'b.subledger_account'=>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.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.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'), 'b.sens' => array('rule' => 'compute', 'classfile' => '/accountancy/class/accountancyimport.class.php', 'class' => 'AccountancyImport', 'method' => 'computeDirection', 'element' => 'Accountancy'),