Magento: Código para criar pedidos

No momento estou trabalhando na integração da loja R2Estilos com a Rakuten. Nessa integração é preciso que os pedidos feitos na loja na Rakuten sejam importados para a loja Magento, de forma que o logista não precise se preocupar em acessar duas interfaces administrativas. Na internet encontrei alguns scripts para a criação de pedidos que não funcionam 100%, principalmente para pedidos com produtos configuráveis. Fiz algumas alterações e adaptações que podem servir como base para outros projetos:

public function createOrderTest() {
$quote = Mage::getModel('sales/quote')->setStoreId(Mage::app()->getStore('default')->getId());

/* No meu caso, todos os pedidos são criados com clientes "visitantes". Se você precisar associar
* o novo pedido a um cliente já cadastrado, subistitua a linha abaixo por:
*
* $customer = Mage::getModel('customer/customer')->setWebsiteId(1)->loadByEmail('customer@test.com.br');
* $quote->assignCustomer($customer);
*/
$quote->setCustomerEmail('customer@test.com.br');

// Carregue o produto presente no pedido. No caso abaixo, utilizamos o produto com ID igual a 10
$product = Mage::getModel('catalog/product')->load(10);

// Agora definimos a quantidade comprada.
$buyInfo = array();
$buyInfo['qty'] = 1;

/* Caso seja um produto configurável é necessário definir
* os valores dos atributos configuráveis. */
$buyInfo['super_attribute'] = array( '13' => '35');

//Adicione o produto ao novo pedido
$quote->addProduct($product, new Varien_Object($buyInfo));

// Criamos arrays com os endereços de entrega e cobrança
$billingAddress = $quote->getBillingAddress()->addData($this->getAddressData());
$shippingAddress = $quote->getShippingAddress()->addData($this->getAddressData());

// Definimos a forma de entrega. Nesse caso utilizamos uma das formas de entrega padrão do magento: flatrate.
$shippingAddress->setCollectShippingRates(true)->collectShippingRates()
->setShippingMethod('flatrate_flatrate')

// Definimos a forma de pagamento. Nesse caso utilizamos uma das formas de pagamento padrão do magento: cheque/dinheiro
$quote->getPayment()->importData(array('method' => 'checkmo'));

$quote->collectTotals()->save();
$service = Mage::getModel('sales/service_quote', $quote);
$service->submitAll();
$order = $service->getOrder();
printf("Created order %s\n", $order->getIncrementId());
}

protected function getAddressData() {
$region = $regionModel = Mage::getModel('directory/region')->loadByCode('PE', 'BR');
return array(
'firstname' => 'Primeiro nome',
'lastname' => 'Sobrenome',
'street' => 'Rua, av...',
'city' => 'Cidade',
'postcode' => '56200000',
'telephone' => '123456',
'country_id'=> 'BR',
'region_id' => $region->getId() );

Observações:

1 – O script utiliza a forma de entrega flatrate (taxa fixa) e a forma de pagamento “cheque/dinheiro”. Para que o pedido seja criado com sucesso é preciso que ambas estejam ativadas no admin do magento. Com um pouco mais de trabalho é possivel utilizar formas de entrega e pagamento que não apareçam disponiveis para os clientes no frontend.

2- Para produtos configuráveis (linha 21) é preciso definir o ID do atributo configurável e o ID do valor do atributo no produto simples associado. Para ajudar a preencher esses valores, pode-se utilizar o método abaixo:

$configurableAttributes = $configurableProduct->getTypeInstance()->getConfigurableAttributes();
$super_attribute = array();
foreach ($configurableAttributes as $attribute) {
$attributeCode = $attribute->getProductAttribute()->getAttributeCode();
$super_attribute[$attribute->getAttributeId()] = $simpleProduct->getData($attributeCode);
}
$buyInfo['super_attribute'] = $super_attribute;

[toggle title=”Fonte”]
http://renatomarcelino.com
[/toggle]

2014-07-25T19:49:14+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x