Jump to content

Import clienti si adrese din fisier CSV


necco

Recommended Posts

Buna ziua,

 

Am creat un alt controller de import modificand-ul pe cel original. Am creat si un script PHP de import prin care import din acealasi fisier CSV atat clientii cat si adresele dar si agentii clientilor.

 

Pentru primul import totul decurge normal, se importa clientii, agentii, adresele. Importul este de fapt un task repetitiv de actualizare.

 

La executarea din nou a task-ului, in fisierul CSV mai apar in plus clienti noi (linii noi inserate aleatoriu in fisierul CSV).

 

Problema pe care nu reusesc sa o lamuresc este ca, parcurgand CSV-ul linie cu linie, pentru clientii noi aparuti fata de importul initial, la fiecare dintre acesti noi clienti pe langa adresa clientului respectiv se insereaza o a doua adresa care este de fapt adresa clientului de la linia anterioara din CSV.

 

Astfel daca am client nou in linia 15 din CSV imi importa adresa lui dar tot la el insereaza si adresa de la linia 14.

Si tot asa mai departe... la clientul nou din linia 27 imi apare si o a doua adresa si anume cea de la linia 26.

 

In AdminImportController.php am modificat doar partea finala a functiei: addressImport() astfel:

public function addressImport()
{

la fel ca in functia originala  ...................................

$res = false;
if (($field_error = $address->validateFields(UNFRIENDLY_ERROR, true)) === true &&
	($lang_field_error = $address->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
{
/* cod comentat
if (isset($customer_list) && count($customer_list) > 0)
{
   $filter_list = array();
  foreach ($customer_list as $customer)
  {
	if (in_array($customer['id_customer'], $filter_list))
		continue;

	$filter_list[] = $customer['id_customer'];

	unset($address->id);
	$address->id_customer = $customer['id_customer'];
	$res = $address->add();
						
	if (!$res)
	$this->errors[] = sprintf(
	Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
				$info['alias'],
				(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
			);
	}
}
 else
{
sfarsit cod comentat*/
	
$address->force_id = (bool)Tools::getValue('forceIDs');

if ($address->id && $address->addressExists($address->id)) 
{
    $res = $address->update();
}	
if (!$res) {
    $res = $address->add();				
}	
//}
}
if (!$res)
{
	$this->errors[] = sprintf(
				Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
				$info['alias'],
				(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
				);
	$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
	Db::getInstance()->getMsgError();
 }
 }
 $this->closeCsvFile($handle);
}

Functia addressImport() o folosesc astfel:

$import = New AdminImportControllerERPImport();
loadAddressesPost();
$import->addressImport();

function loadAddressesPost() {
    $_POST = array (
        'tab' => 'AdminImport',
        'skip' => '1',
        'csv' => 'clienti.csv',
        'convert' => '1',
        'entity' => '4',
        'separator' => ';',
        'multiple_value_separator' => ',',
        'forceIDs' => '1', 
        'import' => 'Import .CSV data',
        'type_value' =>
        array (
				0 => 'id',
				2 => 'customer_email',
				4 => 'lastname',
				5 => 'firstname',
				8 => 'company',
				9 => 'registru',
				12 => 'vat_number',
				14 => 'address1',
				15 => 'city',
				16 => 'state',
				17 => 'banca_nume',
				18 => 'banca_cont',
				19 => 'alias',
				20 => 'country'
			)
    );
}

Functioneaza importul OK dar nu-mi pot explica de ce mai adauga adresa anterioara (ca si cand ar face si un update) pentru liniile (clientii noi din CSV) pentru care a facut insert!

 

Multumesc.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...