git push origin developMerge branch 'Easya-Solutions-new-import-fec-clean-values-and-amounts' into develop

This commit is contained in:
Laurent Destailleur 2022-03-23 15:32:30 +01:00
commit 8fbb79734d
4 changed files with 78 additions and 43 deletions

View File

@ -29,7 +29,7 @@
/**
* \file htdocs/accountancy/class/accountancyimport.class.php
* \ingroup Accountancy (Double entries)
* \brief Class accountancy import
* \brief Class with methods for accountancy import
*/
@ -52,68 +52,91 @@ class AccountancyImport
*/
public function __construct(DoliDB $db)
{
global $conf;
$this->db = $db;
}
/**
* Clean amount
*
* @param array $arrayrecord Array of read values: [fieldpos] => (['val']=>val, ['type']=>-1=null,0=blank,1=string), [fieldpos+1]...
* @param array $listfields Fields list to add
* @param int $record_key Record key
* @return mixed Value
*/
public function cleanAmount(&$arrayrecord, $listfields, $record_key)
{
$value_trim = trim($arrayrecord[$record_key]['val']);
return 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 array $listfields Fields list to add
* @param int $record_key Record key
* @return mixed Value
*/
public function cleanValue(&$arrayrecord, $listfields, $record_key)
{
return trim($arrayrecord[$record_key]['val']);
}
/**
* Compute 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
* @return int <0 if KO, >0 if OK
* @param int $record_key Record key
* @return mixed Value
*/
public function computeAmount(&$arrayrecord, $fieldname, &$listfields, &$listvalues)
public function computeAmount(&$arrayrecord, $listfields, $record_key)
{
$fieldArr = explode('.', $fieldname);
if (count($fieldArr) > 0) {
$fieldname = $fieldArr[1];
// 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'];
$debit = floatval($arrayrecord[$debit_index]['val']);
$credit = floatval($arrayrecord[$credit_index]['val']);
if (!empty($debit)) {
$amount = $debit;
} else {
$amount = $credit;
}
return "'" . $this->db->escape(abs($amount)) . "'";
}
$debit = floatval(trim($arrayrecord[11]['val']));
$credit = floatval(trim($arrayrecord[12]['val']));
if (!empty($debit)) {
$amount = $debit;
} else {
$amount = $credit;
}
$listfields[] = $fieldname;
$listvalues[] = "'" . abs($amount) . "'";
return 1;
return "''";
}
/**
* Compute sens
* Compute direction
*
* @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
* @return int <0 if KO, >0 if OK
* @param int $record_key Record key
* @return mixed Value
*/
public function computeDirection(&$arrayrecord, $fieldname, &$listfields, &$listvalues)
public function computeDirection(&$arrayrecord, $listfields, $record_key)
{
$fieldArr = explode('.', $fieldname);
if (count($fieldArr) > 0) {
$fieldname = $fieldArr[1];
$field_index_list = array_flip($listfields);
if (isset($field_index_list['debit'])) {
$debit_index = $field_index_list['debit'];
$debit = floatval($arrayrecord[$debit_index]['val']);
if (!empty($debit)) {
$sens = 'D';
} else {
$sens = 'C';
}
return "'" . $this->db->escape($sens) . "'";
}
$debit = floatval(trim($arrayrecord[11]['val']));
if (!empty($debit)) {
$sens = 'D';
} else {
$sens = 'C';
}
$listfields[] = $fieldname;
$listvalues[] = "'" . $sens . "'";
return 1;
return "''";
}
}

View File

@ -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, $listfields, ($key - 1)));
$newval = $res; // We get new value computed.
} elseif ($objimport->array_import_convertvalue[0][$val]['rule'] == 'numeric') {
$newval = price2num($newval);
@ -740,7 +740,11 @@ class ImportCsv extends ModeleImports
break;
}
$classinstance = new $class($this->db);
$res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname));
$res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $listfields, ($key - 1)));
$fieldArr = explode('.', $fieldname);
if (count($fieldArr) > 0) {
$fieldname = $fieldArr[1];
}
$listfields[] = $fieldname;
$listvalues[] = $res;
}

View File

@ -782,6 +782,10 @@ class ImportXlsx extends ModeleImports
}
$classinstance = new $class($this->db);
$res = call_user_func_array(array($classinstance, $method), array(&$arrayrecord, $fieldname, &$listfields, &$listvalues));
$fieldArr = explode('.', $fieldname);
if (count($fieldArr) > 0) {
$fieldname = $fieldArr[1];
}
$listfields[] = $fieldname;
$listvalues[] = $res;
}

View File

@ -354,8 +354,12 @@ 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.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'),
);