Start work to allow updates in import module
This commit is contained in:
parent
34b4d0225e
commit
e6411dd246
@ -268,7 +268,7 @@ class ImportCsv extends ModeleImports
|
|||||||
* @param string $importid Import key
|
* @param string $importid Import key
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields,$importid)
|
function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields,$importid,$updatekeys)
|
||||||
{
|
{
|
||||||
global $langs,$conf,$user;
|
global $langs,$conf,$user;
|
||||||
global $thirdparty_static; // Specific to thirdparty import
|
global $thirdparty_static; // Specific to thirdparty import
|
||||||
@ -554,11 +554,45 @@ class ImportCsv extends ModeleImports
|
|||||||
//print "$alias/$tablename/$listfields/$listvalues<br>";
|
//print "$alias/$tablename/$listfields/$listvalues<br>";
|
||||||
if (!empty($listfields))
|
if (!empty($listfields))
|
||||||
{
|
{
|
||||||
//var_dump($objimport->array_import_convertvalue); exit;
|
$updatedone = false;
|
||||||
|
if(!empty($updatekeys)) {
|
||||||
// Build SQL UPDATE request
|
// Build SQL UPDATE request
|
||||||
$sqlstart = 'UPDATE '.$tablename;
|
$sqlstart = 'UPDATE '.$tablename;
|
||||||
|
|
||||||
|
$data = array_combine($listfields, $listvalues);
|
||||||
|
$set = array();
|
||||||
|
foreach ($data as $key => $val) {
|
||||||
|
$set[] = $key.' = '.$val;
|
||||||
|
}
|
||||||
|
$sqlstart.= ' SET '.implode(', ', $set);
|
||||||
|
|
||||||
|
$where = array();
|
||||||
|
foreach ($updatekeys as $key) {
|
||||||
|
$key=preg_replace('/^.*\./i','',$key);
|
||||||
|
$where[] = $key.' = '.$data[$key];
|
||||||
|
}
|
||||||
|
$sqlend = ' WHERE '.implode(' AND ', $where);
|
||||||
|
|
||||||
|
$sql = $sqlstart.$sqlend;
|
||||||
|
|
||||||
|
// Run update request
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if($resql) {
|
||||||
|
echo $sql;
|
||||||
|
echo '<pre>';
|
||||||
|
//print_r($this->db);
|
||||||
|
//print_r($this->db->db);
|
||||||
|
echo '</pre>';
|
||||||
|
echo '<b>'.var_dump($this->db->db->affected_rows).'</b>';
|
||||||
|
if($this->db->db->affected_rows > 0) {
|
||||||
|
$this->nbupdate++;
|
||||||
|
$updatedone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update not done, we do insert
|
||||||
|
if(!$updatedone) {
|
||||||
// Build SQL INSERT request
|
// Build SQL INSERT request
|
||||||
$sqlstart = 'INSERT INTO '.$tablename.'('.implode(', ', $listfields).', import_key';
|
$sqlstart = 'INSERT INTO '.$tablename.'('.implode(', ', $listfields).', import_key';
|
||||||
$sqlend = ') VALUES('.implode(', ', $listvalues).", '".$importid."'";
|
$sqlend = ') VALUES('.implode(', ', $listvalues).", '".$importid."'";
|
||||||
@ -571,12 +605,9 @@ class ImportCsv extends ModeleImports
|
|||||||
$sqlend.=', '.$user->id;
|
$sqlend.=', '.$user->id;
|
||||||
}
|
}
|
||||||
$sql = $sqlstart.$sqlend.')';
|
$sql = $sqlstart.$sqlend.')';
|
||||||
|
echo $sql;
|
||||||
dol_syslog("import_csv.modules", LOG_DEBUG);
|
dol_syslog("import_csv.modules", LOG_DEBUG);
|
||||||
|
|
||||||
//print '> '.join(',',$arrayrecord);
|
|
||||||
//print 'sql='.$sql;
|
|
||||||
//print '<br>'."\n";
|
|
||||||
|
|
||||||
// Run insert request
|
// Run insert request
|
||||||
if ($sql)
|
if ($sql)
|
||||||
{
|
{
|
||||||
@ -584,7 +615,7 @@ class ImportCsv extends ModeleImports
|
|||||||
$last_insert_id_array[$tablename] = $this->db->last_insert_id($tablename); // store the last inserted auto_increment id for each table, so that dependent tables can be inserted with the appropriate id. This must be done just after the INSERT request, else we risk losing the id (because another sql query will be issued somewhere in Dolibarr).
|
$last_insert_id_array[$tablename] = $this->db->last_insert_id($tablename); // store the last inserted auto_increment id for each table, so that dependent tables can be inserted with the appropriate id. This must be done just after the INSERT request, else we risk losing the id (because another sql query will be issued somewhere in Dolibarr).
|
||||||
if ($resql)
|
if ($resql)
|
||||||
{
|
{
|
||||||
//print '.';
|
$this->nbinsert++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -595,6 +626,7 @@ class ImportCsv extends ModeleImports
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/*else
|
/*else
|
||||||
{
|
{
|
||||||
dol_print_error('','ErrorFieldListEmptyFor '.$alias."/".$tablename);
|
dol_print_error('','ErrorFieldListEmptyFor '.$alias."/".$tablename);
|
||||||
|
|||||||
@ -340,6 +340,7 @@ class modSociete extends DolibarrModules
|
|||||||
//$this->import_convertvalue_array[$r]=array('s.fk_soc'=>array('rule'=>'lastrowid',table='t');
|
//$this->import_convertvalue_array[$r]=array('s.fk_soc'=>array('rule'=>'lastrowid',table='t');
|
||||||
$this->import_regex_array[$r]=array('s.status'=>'^[0|1]','s.client'=>'^[0|1|2|3]','s.fournisseur'=>'^[0|1]','s.fk_typent'=>'id@'.MAIN_DB_PREFIX.'c_typent','s.datec'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])?$');
|
$this->import_regex_array[$r]=array('s.status'=>'^[0|1]','s.client'=>'^[0|1|2|3]','s.fournisseur'=>'^[0|1]','s.fk_typent'=>'id@'.MAIN_DB_PREFIX.'c_typent','s.datec'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])?$');
|
||||||
$this->import_examplevalues_array[$r]=array('s.nom'=>"MyBigCompany",'s.status'=>"0 (closed) or 1 (active)",'s.client'=>'0 (no customer no prospect)/1 (customer)/2 (prospect)/3 (customer and prospect)','s.fournisseur'=>'0 or 1','s.datec'=>dol_print_date(dol_now(),'%Y-%m-%d'),'s.code_client'=>'CU01-0001 or empty or "auto"','s.code_fournisseur'=>'SU01-0001 or empty or "auto"','s.address'=>"61 jump street",'s.zip'=>"123456",'s.town'=>"Big town",'s.fk_pays'=>'US, FR, DE...','s.phone'=>"0101010101",'s.fax'=>"0101010102",'s.url'=>"http://mycompany.com",'s.email'=>"test@mycompany.com",'s.siret'=>"",'s.siren'=>"",'s.ape'=>"",'s.idprof4'=>"",'s.idprof5'=>"",'s.idprof6'=>"",'s.tva_intra'=>"FR0123456789",'s.capital'=>"10000",'s.note_private'=>"This is an example of private note for record",'s.note_public'=>"This is an example of public note for record",'s.fk_typent'=>"2",'s.fk_effectif'=>"3","s.fk_forme_juridique"=>"1",'s.fk_prospectlevel'=>'PL_MEDIUM','s.fk_stcomm'=>'0','s.default_lang'=>'en_US','s.barcode'=>'123456789','s.datec'=>"2015-01-01 or 2015-01-01 12:30:00");
|
$this->import_examplevalues_array[$r]=array('s.nom'=>"MyBigCompany",'s.status'=>"0 (closed) or 1 (active)",'s.client'=>'0 (no customer no prospect)/1 (customer)/2 (prospect)/3 (customer and prospect)','s.fournisseur'=>'0 or 1','s.datec'=>dol_print_date(dol_now(),'%Y-%m-%d'),'s.code_client'=>'CU01-0001 or empty or "auto"','s.code_fournisseur'=>'SU01-0001 or empty or "auto"','s.address'=>"61 jump street",'s.zip'=>"123456",'s.town'=>"Big town",'s.fk_pays'=>'US, FR, DE...','s.phone'=>"0101010101",'s.fax'=>"0101010102",'s.url'=>"http://mycompany.com",'s.email'=>"test@mycompany.com",'s.siret'=>"",'s.siren'=>"",'s.ape'=>"",'s.idprof4'=>"",'s.idprof5'=>"",'s.idprof6'=>"",'s.tva_intra'=>"FR0123456789",'s.capital'=>"10000",'s.note_private'=>"This is an example of private note for record",'s.note_public'=>"This is an example of public note for record",'s.fk_typent'=>"2",'s.fk_effectif'=>"3","s.fk_forme_juridique"=>"1",'s.fk_prospectlevel'=>'PL_MEDIUM','s.fk_stcomm'=>'0','s.default_lang'=>'en_US','s.barcode'=>'123456789','s.datec'=>"2015-01-01 or 2015-01-01 12:30:00");
|
||||||
|
$this->import_updatekeys_array[$r]=array('s.nom'=>'Name','s.code_client'=>'CustomerCode','s.code_fournisseur'=>'SupplierCode','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode');
|
||||||
|
|
||||||
// Import list of contact and attributes
|
// Import list of contact and attributes
|
||||||
$r++;
|
$r++;
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class Import
|
|||||||
var $array_import_fieldshidden;
|
var $array_import_fieldshidden;
|
||||||
var $array_import_entities;
|
var $array_import_entities;
|
||||||
var $array_import_regex;
|
var $array_import_regex;
|
||||||
|
var $array_import_updatekeys;
|
||||||
var $array_import_examplevalues;
|
var $array_import_examplevalues;
|
||||||
var $array_import_convertvalue;
|
var $array_import_convertvalue;
|
||||||
var $array_import_run_sql_after;
|
var $array_import_run_sql_after;
|
||||||
@ -153,6 +154,8 @@ class Import
|
|||||||
$this->array_import_entities[$i]=$module->import_entities_array[$r];
|
$this->array_import_entities[$i]=$module->import_entities_array[$r];
|
||||||
// Tableau des alias a exporter (cle=champ, valeur=alias)
|
// Tableau des alias a exporter (cle=champ, valeur=alias)
|
||||||
$this->array_import_regex[$i]=$module->import_regex_array[$r];
|
$this->array_import_regex[$i]=$module->import_regex_array[$r];
|
||||||
|
// Array of columns allowed as UPDATE options
|
||||||
|
$this->array_import_updatekeys[$i]=$module->import_updatekeys_array[$r];
|
||||||
// Array of examples
|
// Array of examples
|
||||||
$this->array_import_examplevalues[$i]=$module->import_examplevalues_array[$r];
|
$this->array_import_examplevalues[$i]=$module->import_examplevalues_array[$r];
|
||||||
// Tableau des regles de conversion d'une valeur depuis une autre source (cle=champ, valeur=tableau des regles)
|
// Tableau des regles de conversion d'une valeur depuis une autre source (cle=champ, valeur=tableau des regles)
|
||||||
|
|||||||
@ -77,6 +77,7 @@ $hexa = GETPOST('hexa');
|
|||||||
$importmodelid = GETPOST('importmodelid');
|
$importmodelid = GETPOST('importmodelid');
|
||||||
$excludefirstline = (GETPOST('excludefirstline') ? GETPOST('excludefirstline') : 1);
|
$excludefirstline = (GETPOST('excludefirstline') ? GETPOST('excludefirstline') : 1);
|
||||||
$endatlinenb = (GETPOST('endatlinenb') ? GETPOST('endatlinenb') : '');
|
$endatlinenb = (GETPOST('endatlinenb') ? GETPOST('endatlinenb') : '');
|
||||||
|
$updatekeys = (GETPOST('updatekeys') ? GETPOST('updatekeys') : array());
|
||||||
$separator = (GETPOST('separator') ? GETPOST('separator') : (! empty($conf->global->IMPORT_CSV_SEPARATOR_TO_USE)?$conf->global->IMPORT_CSV_SEPARATOR_TO_USE:','));
|
$separator = (GETPOST('separator') ? GETPOST('separator') : (! empty($conf->global->IMPORT_CSV_SEPARATOR_TO_USE)?$conf->global->IMPORT_CSV_SEPARATOR_TO_USE:','));
|
||||||
$enclosure = (GETPOST('enclosure') ? GETPOST('enclosure') : '"');
|
$enclosure = (GETPOST('enclosure') ? GETPOST('enclosure') : '"');
|
||||||
|
|
||||||
@ -1167,6 +1168,7 @@ if ($step == 5 && $datatoimport)
|
|||||||
$param2 = $param; // $param2 = $param without excludefirstline and endatlinenb
|
$param2 = $param; // $param2 = $param without excludefirstline and endatlinenb
|
||||||
if ($excludefirstline) $param.='&excludefirstline='.$excludefirstline;
|
if ($excludefirstline) $param.='&excludefirstline='.$excludefirstline;
|
||||||
if ($endatlinenb) $param.='&endatlinenb='.$endatlinenb;
|
if ($endatlinenb) $param.='&endatlinenb='.$endatlinenb;
|
||||||
|
if (!empty($updatekeys)) $param.='&updatekeys[]='.implode('&updatekeys[]=', $updatekeys);
|
||||||
|
|
||||||
llxHeader('',$langs->trans("NewImport"),'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones');
|
llxHeader('',$langs->trans("NewImport"),'EN:Module_Imports_En|FR:Module_Imports|ES:Módulo_Importaciones');
|
||||||
|
|
||||||
@ -1272,6 +1274,24 @@ if ($step == 5 && $datatoimport)
|
|||||||
}
|
}
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr><td>';
|
||||||
|
print $langs->trans("KeysToUseForUpdates");
|
||||||
|
print '</td><td>';
|
||||||
|
if($action=='launchsimu') {
|
||||||
|
print $form->multiselectarray('updatekeysbis', $objimport->array_import_updatekeys[0], $updatekeys, 0, 0, '', 1, '', 'disabled');
|
||||||
|
foreach($updatekeys as $val) {
|
||||||
|
print '<input type="hidden" name="updatekeys[]" value="'.$val.'">';
|
||||||
|
}
|
||||||
|
print ' <a href="'.$_SERVER["PHP_SELF"].'?step=5'.$param.'">'.$langs->trans("Modify").'</a>';
|
||||||
|
} else {
|
||||||
|
print $form->multiselectarray('updatekeys', $objimport->array_import_updatekeys[0], $updatekeys, 0, 0, '', 1, '80%');
|
||||||
|
print $form->textwithpicto("", $langs->trans("SelectColumnsOfYourFileForUpdateAttempt"));
|
||||||
|
}
|
||||||
|
/*echo '<pre>';
|
||||||
|
print_r($objimport->array_import_updatekeys);
|
||||||
|
echo '</pre>';*/
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
@ -1405,7 +1425,7 @@ if ($step == 5 && $datatoimport)
|
|||||||
if ($endatlinenb && ($sourcelinenb > $endatlinenb)) continue;
|
if ($endatlinenb && ($sourcelinenb > $endatlinenb)) continue;
|
||||||
|
|
||||||
// Run import
|
// Run import
|
||||||
$result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid);
|
$result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,count($fieldssource),$importid,$updatekeys);
|
||||||
|
|
||||||
if (count($obj->errors)) $arrayoferrors[$sourcelinenb]=$obj->errors;
|
if (count($obj->errors)) $arrayoferrors[$sourcelinenb]=$obj->errors;
|
||||||
if (count($obj->warnings)) $arrayofwarnings[$sourcelinenb]=$obj->warnings;
|
if (count($obj->warnings)) $arrayofwarnings[$sourcelinenb]=$obj->warnings;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user