necco Posted October 15, 2015 Share Posted October 15, 2015 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 More sharing options...
necco Posted October 15, 2015 Author Share Posted October 15, 2015 Rezolvat. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now