protected function getInstance($record, CsvImportProfile $profile) { pp('User address import get instance'); $fields = $profile->getSortedFields(); if (isset($fields['UserAddress']['ID'])) { $instance = ActiveRecordModel::getInstanceByID('UserAddress', $record[$fields['UserAddress']['ID']], true); } else { if (isset($fields['AddressUser']['ID'])) { $owner = User::getInstanceByID($record[$fields['AddressUser']['ID']], true); } else { if (isset($fields['AddressUser']['email'])) { $owner = User::getInstanceByEmail($record[$fields['AddressUser']['email']]); } } } if (isset($owner)) { if ($profile->isColumnSet('AddressUser.isShipping')) { $type = $this->evalBool(strtolower($record[$profile->getColumnIndex('AddressUser.isShipping')])) ? 'ShippingAddress' : 'BillingAddress'; } else { $type = 'BillingAddress'; } $owner->loadAddresses(); } if (empty($instance)) { if (empty($owner)) { return; } $isDefault = $profile->isColumnSet('AddressUser.isDefault') && $this->evalBool(strtolower($record[$profile->getColumnIndex('AddressUser.isDefault')])); if ($isDefault) { $field = 'default' . $type; $addressType = $owner->{$field}->get(); $instance = $addressType->userAddress->get(); } if (empty($addressType)) { $instance = UserAddress::getNewInstance(); $addressType = call_user_func_array(array($type, 'getNewInstance'), array($owner, $instance)); if ($isDefault) { $owner->{$field}->set($addressType); } } $addressType->userAddress->set($instance); $instance->addressType = $addressType; } return $instance; }
public function getColumnValue($record, CsvImportProfile $profile, $fieldName) { if ($profile->isColumnSet($fieldName)) { return $record[$profile->getColumnIndex($fieldName)]; } }
/** * Import or update an ordered product */ protected function set_OrderedItem_sku($instance, $value, $record, CsvImportProfile $profile) { if (!$value) { return; } $product = Product::getInstanceBySKU($value); if (!$product) { return; } $items = $instance->getItemsByProduct($product); // create initial shipment if (!$instance->getShipments()->size()) { $shipment = Shipment::getNewInstance($instance); $shipment->save(); } // any particular shipment? $shipment = $item = null; if ($profile->isColumnSet('OrderedItem.shipment')) { // internal indexes are 0-based, but the import references are 1-based $shipmentNo = $this->getColumnValue($record, $profile, 'OrderedItem.shipment') - 1; if (is_numeric($this->getColumnValue($record, $profile, 'OrderedItem.shipment'))) { foreach ($instance->getShipments() as $key => $shipment) { if ($key == $shipmentNo) { break; } $shipment = null; } // create a new shipment if (!$shipment) { $shipment = Shipment::getNewInstance($instance); $shipment->save(); } foreach ($items as $item) { if ($item->shipment->get() == $shipment) { break; } unset($item); } } } if (!$item) { $item = array_shift($items); } if (!$item) { $count = $this->getColumnValue($record, $profile, 'OrderedItem.count'); $item = OrderedItem::getNewInstance($instance, $product, max(1, $count)); $instance->addItem($item); } if ($profile->isColumnSet('OrderedItem.count')) { $count = $this->getColumnValue($record, $profile, 'OrderedItem.count'); $item->count->set(max(1, $count)); } if ($profile->isColumnSet('OrderedItem.price')) { $item->price->set($this->getColumnValue($record, $profile, 'OrderedItem.price')); } if (!$shipment) { $shipment = $instance->getShipments()->get(0); } $item->shipment->set($shipment); $item->save(); $instance->finalize(array('customPrice' => true, 'allowRefinalize' => true)); }