Magento сохранить платежный адрес в цитате - PullRequest
0 голосов
/ 16 ноября 2011

С самого начала я хочу извиниться за мой плохой английский!У меня есть задача сделать правильное хранение информации в сеансе клиента в Magento на странице оформления заказа.Когда я пытаюсь сохранить адрес выставления счета гостя, я переписал модель выставления счетов и все в порядке.Но когда пользователь вошел в систему и имеет несколько адресов в своей адресной книге, я увидел интересную вещь ... Мне пришлось больше переписать модель биллинга, чтобы сохранить идентификатор адреса клиента и сохранить выбранный адрес, но когда пользователь выбрал опцию в разделе «Новый адрес», сохранить данные формы в кавычках, и когда я пытаюсь получить его с помощью getQuote () -> getBillingAddress (), я взял адрес пользователя по умолчанию (когда пользователь не вошел в систему, все работает хорошо) Как я могу сделать эту задачу ??Мне нужна помощь, потому что это важное для меня задание ... Большое спасибо !!!

1 Ответ

0 голосов
/ 31 мая 2012

Если я правильно анализирую ваш вопрос, вы говорите, что getQuote()->getBillingAddress() получает платежный адрес клиента по умолчанию вместо нового адреса, введенного клиентом в заказе?

У меня есть эта проблема в Magento1.4.0.1. Я обошел его, получив все адреса от клиента и сравнив каждый атрибут с адресом, указанным в заказе, чтобы узнать действительный идентификатор объекта этого адреса.

Я скопировал это изМой код с некоторыми частями пользовательской бизнес-логики удален, так что считайте его непроверенным, но вы поняли:

(код протестирован только на Magento 1.4.0.1 и может не применяться к Magento 1.5)

$currentCustomer = Mage::getModel('customer/customer')->load($order['customer_id']);
$attributesToCompare = array('firstname', 'lastname', 'country_id', 'region', 'region_id', 'city', 'telephone', 'postcode', 'company', 'fax', 'prefix', 'middlename', 'suffix', 'street');
$orderAddresses = array(
  'billing' => $order->getBillingAddress()->getData(),
  'shipping' => $order->getShippingAddress()->getData()
  );
$foundExistingCustomerAddressEntityId = array(
  'billing' => false,
  'shipping' => false
  );
$billingSameAsShipping = false;
$currentCustomerAddresses = $currentCustomer->getAddressesCollection();
// is the billing/shipping address currently found in the customer's address book?
foreach ($orderAddresses as $orderAddressKey => $orderAddress) {
  //var_dump($orderAddress);
  foreach ($currentCustomerAddresses as $currentCustomerAddressObj) {
    $currentCustomerAddress = $currentCustomerAddressObj->getData();
    $attributesMatchCount = 0;
    foreach ($attributesToCompare as $attributeToCompare) {
      if (empty($currentCustomerAddress[$attributeToCompare])) {
        $currentCustomerAddress[$attributeToCompare] = false;
      }
      $attributesMatchCount += ($orderAddress[$attributeToCompare] == $currentCustomerAddress[$attributeToCompare])?1:0;
      //echo 'attributesMatchCount: '.$attributesMatchCount." {$orderAddress[$attributeToCompare]} {$currentCustomerAddress[$attributeToCompare]}\n";
    }
    if ($attributesMatchCount == count($attributesToCompare)) {
      $foundExistingCustomerAddressEntityId[$orderAddressKey] = $currentCustomerAddress['entity_id'];
      //echo 'foundExistingCustomerAddressEntityId['.$orderAddressKey.']: '.$foundExistingCustomerAddressEntityId[$orderAddressKey]."\n\n";
      break;
    }
  }
}
$billingShippingExactMatchCount = 0;
foreach ($attributesToCompare as $attributeToCompare) {
  $billingShippingExactMatchCount += ($orderAddresses['billing'][$attributeToCompare] == $orderAddresses['shipping'][$attributeToCompare])?1:0;
}
if ($billingShippingExactMatchCount == count($attributesToCompare)) {
  $billingSameAsShipping = true;
}
...