$f = fopen(SYSTEM_CSV_FILE, 'r'); if ($f === false) { throw new IOException('Could not open ' . SYSTEM_CSV_FILE . ' for reading'); } $reader = new CsvFileReader($f); $reader->addFields($config['csv.fields']); $pos = 0; $counter = new Counter(true, [COUNT_CREATED, COUNT_EXISTING, COUNT_NEXT_PASS]); while (!$reader->eof() && ++$pos) { $row = $reader->read(); $logger->debug('-- Read CSV row', [$row]); $qb = $client->createQueryBuilder(); $qb->select('Id')->from('Account')->where('Name = :dealership'); $account = $qb->setMaxResults(1)->setParameter('dealership', $row->dealership)->getQuery()->getOneOrNullResult(); if ($account === null) { $counter->inc(COUNT_NEXT_PASS); continue; } $logger->debug('Found Account with Id ' . $account->Id, [$account]); $qb = $client->createQueryBuilder(); $qb->select('Id')->from('Contact')->where('AccountId = :id')->andWhere($qb->expr()->orX('Phone like :phone', 'Phone_2__c like :phone', 'Phone like :alt', 'Phone_2__c like :alt')); $contact = $qb->setMaxResults(1)->setParameter('id', $account->Id)->setParameter('phone', getPhoneLikeStatement($row->phone))->setParameter('alt', getPhoneLikeStatement($row->altPhone))->getQuery()->getOneOrNullResult(); if ($contact !== null) { $counter->inc(COUNT_EXISTING); continue; } $sob = new SObject(); $sob->type = 'Contact'; $sob->fields = ['AccountId' => $account->Id, 'FirstName' => $row->firstName, 'LastName' => $row->lastName, 'Phone' => $row->phone, 'Phone_2__c' => $row->altPhone, 'Job_Title__c' => $row->position, 'Street' => $row->street, 'City' => $row->city, 'State' => $row->state, 'PostalCode' => $row->zip]; $logger->info('Creating new Contact on Account (' . $account->Id . ')', [$sob]); if (!DRY_RUN) {
$account = new stdClass(); $account->Id = sprintf('row#%d', $pos); $account->fresh = true; $logger->info(sprintf(MSG_SF_ACCOUNT_CREATED . ' from row %d', $row->phone, $pos)); } } else { if (strtolower($account->fields->Name) === strtolower($row->dealership)) { continue; } else { if (in_array(cleanPhone($account->fields->Phone), [$row->phone, $row->altPhone])) { continue; } } $account->fresh = false; } $counter->inc($account->fresh ? COUNT_ACCOUNT_CREATED : COUNT_ACCOUNT_EXISTING); if (!$account->fresh) { if (strlen($row->phone) !== 10) { $logger->warning(sprintf(MSG_SF_UNRELIABLE_PHONE_LOOKUP, $pos)); } $qb = $client->createQueryBuilder(); $qb->select('Id')->from('Contact')->where('AccountId = :id')->andWhere($qb->expr()->orX('Phone like :phone', 'Phone_2__c like :phone', 'Phone like :alt', 'Phone_2__c like :alt')); $contact = $qb->setMaxResults(1)->setParameter('id', $account->Id)->setParameter('phone', getPhoneLikeStatement($row->phone))->setParameter('alt', getPhoneLikeStatement($row->altPhone))->getQuery()->getOneOrNullResult(); if ($contact !== null) { $counter->inc(COUNT_CONTACT_EXISTING); continue; } } $sob = new SObject(); $sob->type = 'Contact'; $sob->fields = ['AccountId' => $account->Id, 'FirstName' => $row->firstName, 'LastName' => $row->lastName, 'Phone' => $row->phone, 'Phone_2__c' => $row->altPhone, 'Job_Title__c' => $row->position, 'Street' => $row->street, 'City' => $row->city, 'State' => $row->state, 'PostalCode' => $row->zip];