Módulo Entrega Motoboy para o Magento

Módulo Entrega Motoboy para o Magento

Recentemente desenvolvi um pequeno módulo para colocar nas formas de envio  em qualquer loja virtual Magento (1.6.x) a entrega por bairros através do serviço de motoboy. A implementação do módulo foi simples mas supriu as necessidades do cliente. Havendo interesse do público eu poderei melhorar e lançar novas versões.

O módulo mostra os bairros da região e seus respectivos preços de entrega. Ao selecionar um bairro específico o preço total é calculado. O módulo funciona corretamente com integrações de pagamento como o PagSeguro. Ao ser redirecionado para o PagSeguro o mesmo lista corretamente o valor de frete.

A imagem abaixo mostra o módulo em funcionamento no "One Page Checkout":

magento-entrega-motoboy

A instalação do módulo é bastante simples. Os arquivos devem ser upados para o servidor seguindo a ordem e estrutura de pastas presente no módulo. Utilizando o Filezilla é possível enviar a pasta "app" inteira no diretório raiz da loja que o envio dos subdiretórios e arquivos ocorrerá de forma automática.

Depois de todo o conteúdo enviado é necessário acessar o backend ir em "configurações" => "Métodos de Envio" => "Tresloukadu" para ativar o método.

Atualmente esta é a única opção do módulo. Para adicionar novos bairros de valores de entrega é preciso editar o array presente no arquivo MotoboyMethod.php em / app / code / community / Tresloukadu / Motoboy / Model / Carrier /.  Abaixo listo o código deste módulo onde encontra-se o array com os bairros e preços para exemplificar como fácil adicionar novas entradas:

[php] <?php /** * Carlos Eduardo da Silva (aka Tresloukadu). * * NOTICE OF LICENSE * * * The MIT License * * Copyright (c) 2012 TRESLOUKADU * * https://blog.tetranet.com.br/category/php/magento/ * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * * * @category Tresloukadu * @package Tresloukadu_Motoboy * @copyright Copyright (c) 2013 Carlos Eduardo da Silva (https://blog.tetranet.com.br) * @author Carlos Eduardo da Silva <carlosedasilva@gmail.com> * @license http://opensource.org/licenses/MIT */ /** * Tresloukadu_Motoboy_Model_Carrier_MotoboyMethod * * @category Tresloukadu * @package Tresloukadu_Motoboy * @author Carlos Eduardo da Silva <carlosedasilva@gmail.com> */ class Tresloukadu_Motoboy_Model_Carrier_MotoboyMethod extends Mage_Shipping_Model_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface { /** * Unique internal shipping method id. * @var string */ protected $_code = 'tresloukadu_motoboy'; /** * Collect Rates for this shipping method based on information in $request * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { Mage::log('Tresloukadu_Motoboy: Disabled'); return false; } //entregas gratis e produtos virtuais $freeBoxes = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getFreeShipping() && !$item->getProduct()->isVirtual()) { $freeBoxes+=$item->getQty(); } } } $this->setFreeBoxes($freeBoxes); /** * @todo Precisa trazer estes dados do banco de dados ou de um arquivo xml. O usuário deve * fornecer estes dados no admin e depois armazenar no banco/xml. * NESTA PARTE NOVOS BAIRROS E PREÇOS DEVEM SER ADICIONADOS. CASO ALGUM BAIRRO A ENTRGA FOR GRÁTIS * SIMPLESMENTE ADICIONE 0.00. NESTA VERSÃO OS NOMES DOS BAIRROS NÃO DEVEM CONTER ACENTOS. */ $bairros = array( 'Armacao'=>'50.00', 'Area Industrial de sao Jose'=>'17.00', 'Agronomica'=>'25.00', 'Alto Aririu'=>'25.00', 'Aeroporto'=>'35.00', 'Av. das Torres'=>'20.00', 'Abraao'=>'17.00', 'Aririu'=>'25.00', 'Areias'=>'17.00', 'Area Ind. da Palhoca'=>'20.00', 'Barreiros'=>'17.00', 'Bela Vista'=>'15.00', 'Bela Vista da Palhoca'=>'20.00', 'Balneario do estreito'=>'17.00', 'Biguacu'=>'25.00', 'Barra da Lagoa'=>'40.00', 'Barra do Aririu'=>'25.00', 'Centro'=>'20.00', 'Corrego Grande'=>'30.00', 'Coloninha'=>'17.00', 'Campeche'=>'30.00', 'Cacupe'=>'35.00', 'Canasvieiras'=>'50.00', 'Ceniro Martins'=>'12.00', 'Colonia Santana'=>'25.00', 'Costeira'=>'25.00', 'Caminho Novo'=>'25.00', 'Centro de Sao Jose'=>'15.00', 'Campinas'=>'15.00', 'Carvoeira'=>'25.00', 'Capoeiras'=>'17.00', 'Coqueiros'=>'17.00', 'Cachoeira do bom Jesus'=>'50.00', 'Forquilinhas'=>'10.00', 'Forquilhas'=>'15.00', 'Floresta'=>'12.00', 'Fazenda do Max'=>'15.00', 'Ingleses'=>'50.00', 'Itacorobi'=>'25.00', 'jardim el Dourado'=>'15.00', 'Joao Paulo'=>'30.00', 'Jurere'=>'45.00', 'Janaina'=>'25.00', 'Kobrassol'=>'15.00', 'Lisboa'=>'10.00', 'Palhoca(centro)'=>'17.00', 'Ponta de baixo'=>'15.00', 'Ponte do Imaruim'=>'15.00', 'Pantanal'=>'25.00', 'Rocado'=>'12.00', 'Rio Tavares'=>'30.00', 'Ratones'=>'45.00', 'Serraria'=>'20.00', 'Sertao do Imaruim'=>'15.00', 'Saco grande'=>'30.00', 'Santa Monica'=>'30.00', 'Santo Antonio de Lisboa'=>'35.00', 'Sao Sebastiao'=>'30.00', 'Sao Pedro de Alcantara'=>'40.00', 'Santo Amaro'=>'35.00', 'Tapera'=>'45.00', 'Trindade'=>'25.00', 'Vila Formosa'=>'12.00', 'Zanelato'=>'20.00'); $result = Mage::getModel('shipping/rate_result'); foreach($bairros as $chave => $valor ) { $shippingPrice = $valor; $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($chave); $method->setMethodTitle($chave); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; } public function getAllowedMethods() { return array($this->_code => $this->getConfigData('title')); } } [/php]
Conforme mencionei, caso haver interesse dos usuários eu posso melhorar este módulo para que todos os bairros e preços sejam cadastros a partir do backend evitando desta forma uma alteração direta no código fonte do módulo. Esta seria uma primeira melhoria a ser feita para as próximas versões.
Um ponto interessante a ser mencionado é que se você tiver a compilação ativada em seu Magento é necessário executar a mesma antes de utilizar o módulo. Caso você acessar o módulo no admin e ver uma mensagem de erro mesmo depois do processo de compilação experimente sair do backend e logar-se novamente. Por último não esqueça de limpar o cache.
Os requisitos para este módulo é o PHP versão 5.2.x e o Magento 1.7.x.
O módulo encontra-se no Github assim se outros desenvolvedores quiserem contribuir com melhorias com certeza é algo bem-vindo. O link do módulo e para baixar é: https://github.com/tresloukadu/tresloukadu-motoboy-magento
  • Antonio Mineiro

    Show hein!! Nem lembrava mais como tem poucos bairros aí rssrsr. Vou instalar ele e modificar os bairros para Zonas, tipo Zona Sul, leste, etc… tem mais bairro em SP do que água no oceano! Vlw

  • Ricardo Pantani

    Bom tarde! Gostaria de saber se a possibilidade de colocar um menu dropdown para não a parecer a lista enorme de bairros?

  • mediabrazilhost

    Olá amigo, é possível sim!! Você tem que editar no seu template na no laço que cria os radios buttons e colocar para dar um echo nos options de um select. Não esquece de favoritar (star) o módulo no github assim vai me motivar a continuar atualizado. Obrigado!!

  • Ricardo Pantani

    Sou leigo em programação! Se não for pedir muito, poderia disponibilizar o codigo para adicionar o menu dropdow?

  • Forsaken Brasil

    Amigo como faço mostrar apenas os bairros na hora do cliente selecionar, sem mostrar o valor do frete para cada um?

  • Bruno Baller

    sim é só alterar os nomes e valores

  • bruno

    Olá mediabrazilhost,
    Não consegui encontrar qual arquivo que carrega o laço que cria os raios buttons, tem como dar um norte ?