우리는 오래되고 오래된 구식 POS 시스템에서 POS로 Magento 1.7을 사용하는 것으로 전환하고 있습니다. 당연히 우리가 겪고있는 과제 중 하나는 기존 시스템에서 20 년 동안 거의 재앙없이 Mage에 기록을 얻는 방법입니다.
고객 레코드를 마이그레이션하는 문제를 해결하면서이 질문에서 중점을 둔 문제는 이전 주문 데이터를 이전 POS에서 Mage로 마이그레이션하는 방법입니다. 많은 주문 기록을 말할 때 정확한 숫자를 100 % 확신 할 수는 없지만 적어도 백만 개를 말할 것입니다.
여기에 접근하는 방법에 대한 생각은 다음과 같습니다.
- Magento가 데이터를 제대로 재생하기 위해 데이터를 어떻게 포맷해야하는지 정확히 파악하십시오. 작동하는 형식으로 이전 POS에서 가져올 수 있는지 여부는 의문의 여지가 있지만 잠시 동안 잘 진행된다고 가정합시다 ...
- 멋진 형식의 기록 데이터가 포함 된 .CSV 파일 만들기
- .CSV를 Magento의
$order
객체 로 읽는 방법을 찾으십시오 -> save () - 이익!
내 문제는 포인트 2 & 3에 접근하는 방법에 대해 조금 모호하다는 것입니다. 이전 POS에서 나오는 데이터를 포맷 할 수는 있지만 매우 번거롭고 Perl과 관련되어 있어도 필요합니다.하지만 일단 .CSV 파일 (또는 실제로이 프로세스에 사용할 수있는 파일 유형)이 있으면 명확하지 않습니다. 어떻게 Magento의 주문 객체에 그것을 공급할 것입니다.
나는 인터넷 검색을 수행했으며 Mage의 주문 객체를 사용하여 프로그래밍 방식으로 주문을 가져 오는 사람들의 예제를 생각해 냈지만 프런트 엔드 카트 이외의 데이터 소스를 해당 객체에 연결하는 방법에 대해서는 거의 논의하지 않았습니다. 주문 객체의 버전을 연구하고 있습니다.
$id=1; // get Customer Id
$customer = Mage::getModel('customer/customer')->load($id);
$transaction = Mage::getModel('core/resource_transaction');
$storeId = $customer->getStoreId();
$reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
$order = Mage::getModel('sales/order')
->setIncrementId($reservedOrderId)
->setStoreId($storeId)
->setQuoteId(0)
->setGlobal_currency_code('USD')
->setBase_currency_code('USD')
->setStore_currency_code('USD')
->setOrder_currency_code('USD');
// set Customer data
$order->setCustomer_email($customer->getEmail())
->setCustomerFirstname($customer->getFirstname())
->setCustomerLastname($customer->getLastname())
->setCustomerGroupId($customer->getGroupId())
->setCustomer_is_guest(0)
->setCustomer($customer);
// set Billing Address
$billing = $customer->getDefaultBillingAddress();
$billingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultBilling())
->setCustomer_address_id($billing->getEntityId())
->setPrefix($billing->getPrefix())
->setFirstname($billing->getFirstname())
->setMiddlename($billing->getMiddlename())
->setLastname($billing->getLastname())
->setSuffix($billing->getSuffix())
->setCompany($billing->getCompany())
->setStreet($billing->getStreet())
->setCity($billing->getCity())
->setCountry_id($billing->getCountryId())
->setRegion($billing->getRegion())
->setRegion_id($billing->getRegionId())
->setPostcode($billing->getPostcode())
->setTelephone($billing->getTelephone())
->setFax($billing->getFax());
$order->setBillingAddress($billingAddress);
$shipping = $customer->getDefaultShippingAddress();
$shippingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultShipping())
->setCustomer_address_id($shipping->getEntityId())
->setPrefix($shipping->getPrefix())
->setFirstname($shipping->getFirstname())
->setMiddlename($shipping->getMiddlename())
->setLastname($shipping->getLastname())
->setSuffix($shipping->getSuffix())
->setCompany($shipping->getCompany())
->setStreet($shipping->getStreet())
->setCity($shipping->getCity())
->setCountry_id($shipping->getCountryId())
->setRegion($shipping->getRegion())
->setRegion_id($shipping->getRegionId())
->setPostcode($shipping->getPostcode())
->setTelephone($shipping->getTelephone())
->setFax($shipping->getFax());
$order->setShippingAddress($shippingAddress)
->setShipping_method('flatrate_flatrate')
->setShippingDescription($this->getCarrierName('flatrate'));
$orderPayment = Mage::getModel('sales/order_payment')
->setStoreId($storeId)
->setCustomerPaymentId(0)
->setMethod('purchaseorder')
->setPo_number(' - ');
$order->setPayment($orderPayment);
// let say, we have 2 products
$subTotal = 0;
$products = array(
'1001' => array(
'qty' => 1
),
'1002' ->array(
'qty' => 3
),
);
foreach ($products as $productId=>$product) {
$_product = Mage::getModel('catalog/product')->load($productId);
$rowTotal = $_product->getPrice() * $product['qty'];
$orderItem = Mage::getModel('sales/order_item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(NULL)
->setProductId($productId)
->setProductType($_product->getTypeId())
->setQtyBackordered(NULL)
->setTotalQtyOrdered($product['rqty'])
->setQtyOrdered($product['qty'])
->setName($_product->getName())
->setSku($_product->getSku())
->setPrice($_product->getPrice())
->setBasePrice($_product->getPrice())
->setOriginalPrice($_product->getPrice())
->setRowTotal($rowTotal)
->setBaseRowTotal($rowTotal);
$subTotal += $rowTotal;
$order->addItem($orderItem);
}
$order->setSubtotal($subTotal)
->setBaseSubtotal($subTotal)
->setGrandTotal($subTotal)
->setBaseGrandTotal($subTotal);
$transaction->addObject($order);
$transaction->addCommitCallback(array($order, 'place'));
$transaction->addCommitCallback(array($order, 'save'));
$transaction->save();
구체적인 질문은 다음과 같습니다.
- 이것은이 문제에 대한 원격 감각적 인 접근 방식처럼 보입니까? 그렇지 않다면 어떻게하면 바보처럼 덜이 문제에 접근 할 수 있다고 생각하십니까?
- 이것이 감각적 인 접근이라면, 주문 프로세스에 의해 호출 된 각 모델마다 다른 .CSV가 필요합니까? 즉 Mage :: getModel ( 'sales / order'), Mage :: getModel ( 'sales / order_address') 등?
- .CSV도 갈 수 있습니까?
- 데이터가 .CSV에 포함되어 있거나 무엇을 포함하는지에 관계없이이 개체에 데이터를 어떻게 제공합니까?
- 오버 헤드 제한에 대해 어떻게 생각하십니까?
내가 완전히 바보 같은 방식으로 생각하고 당신이 나에게 많은 것을 말해도, 나는 모든 의견을 정말로 고맙게 생각합니다.
감사합니다 감사합니다