Nous passons d'un ancien système de point de vente obsolète à l'utilisation exclusive de Magento 1.7 comme point de vente. Sans surprise, l'un des défis auxquels nous sommes confrontés est de savoir comment obtenir presque 20 ans d'enregistrements de l'ancien système vers Mage sans catastrophe.
Mis à part le défi de même migrer les enregistrements clients, le problème sur lequel je me concentre dans cette question est de savoir comment je vais migrer les données de commande historiques de l'ancien POS vers Mage. Je ne suis pas sûr à 100% des chiffres exacts quand il s'agit de nombreux enregistrements de commandes, mais je dirais au moins un million.
Voici ce que je pense en termes d'approche:
- Découvrez exactement comment les données doivent être formatées pour que Magento fonctionne correctement. La question de savoir si nous pouvons le retirer de l'ancien POS dans un format qui fonctionne, mais supposons un instant que cela se passe bien ...
- Créez un fichier .CSV avec des données historiques bien formatées
- Trouvez un moyen de lire ce fichier .CSV dans l'
$order
objet de Magento ligne par ligne -> save () - Profit!
Mon problème est que je suis un peu flou sur la façon d'approcher les points 2 et 3, allez comprendre. Je peux formater les données provenant de l'ancien point de vente comme je le souhaite, même si elles sont très lourdes et impliquent Perl, mais une fois que j'ai le fichier .CSV (ou quel que soit le type de fichier qui fonctionnerait réellement pour ce processus), je ne suis pas assez clair sur comment je l'introduirais dans l'objet de commande de Magento.
J'ai fait quelques recherches sur Google, et j'ai trouvé des exemples de personnes utilisant l'objet de commande de Mage pour importer des commandes par programme, mais peu de discussion sur la façon dont ils connectent des sources de données autres que le chariot frontal à cet objet. J'ai étudié une version de l'objet de commande:
$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();
Voici donc mes questions spécifiques:
- Cela semble-t-il être une approche même à distance sensible à ce problème? Et sinon, comment pensez-vous que je pourrais aborder cette question comme moins idiote?
- S'il s'agit d'une approche sensée, ai-je besoin d'un .CSV différent pour chaque modèle appelé par le processus de commande? c'est-à-dire Mage :: getModel ('sales / order'), Mage :: getModel ('sales / order_address'), etc?
- Un .CSV est-il même le chemin à parcourir?
- Comment pourrais-je introduire mes données dans cet objet, que ces données soient contenues dans un .CSV ou qu'avez-vous?
- Comment feriez-vous pour limiter les frais généraux?
Même si j'y pense de manière totalement idiote et que vous me le dites, j'apprécie vraiment tout commentaire.
Merci merci merci!