Quando um cliente chega à nossa loja e faz check-out de vários itens, preciso escrever um módulo para calcular o frete com base em vários fatores. Decidi de minha pesquisa que o seguinte deveria acontecer:
Primeiro, preciso separar os itens do carrinho em pedidos diferentes para o cálculo da remessa. Quero que os pedidos sejam classificados pelo valor do atributo "vendor". "Fornecedor" é um atributo que adicionamos ao sistema aplicável a todos os produtos simples. Digamos que no carrinho haja uma camisa rosa com o valor "fornecedor" "1", um lápis com o valor "fornecedor" "1" e uma camisa azul com o valor "fornecedor" "2". Todos os itens com valor "fornecedor" "1" precisam ser de um pedido, enquanto o item com valor "fornecedor" "2" precisa ser um pedido diferente. Vejo que essa outra pergunta responde a esse dilema, mas depois levanta outra.
Segundo, preciso calcular a remessa com as funcionalidades padrão de remessa UPS e Fedex do Magento, mas com um endereço de origem determinado pelo número do valor do "fornecedor" (armazenado em uma tabela separada do banco de dados). Todas as sugestões são bem-vindas!
Estou usando trechos de código para começar aqui e aqui .
Provavelmente terei várias perguntas, mas as primeiras são aquelas em negrito acima.
ATUALIZAÇÃO Decidi que seria melhor substituir o módulo principal do Magento de várias remessas para fazer o que estou tentando fazer. Por favor, ajude-me a encontrar onde e o que colocar para manipular a funcionalidade multiponto do Magento para dividir os itens de um pedido em remessas com base no atributo "fornecedor"! Eu estou lutando com isso.
Respostas:
Algo a considerar aqui é que você pode precisar aplicar apenas algumas alterações cosméticas de front-end aos modelos de multiponto (
template/checkout/multishipping/
) para que os dois pedidos apareçam simplesmente como um pedido ao cliente. Os modelosshipping.phtml
eoverview.phtml
dividem os dois pedidos, cada um com um cabeçalho (Endereço 1 de 2, etc.) e outra cópia para mostrar que são dois pedidos.Em vez do padrão, sugiro que seja um pouco criativo nesses modelos, para que os dois pedidos sejam simplesmente divididos, para que apareçam como dois itens de linha separados.
O próximo passo seria lidar com diferentes origens de remessa com base no atributo do fornecedor. Talvez isso possa ser feito no Mage_Shipping_Model_Shipping. Você pode ver no topo, onde o Magento está pegando o endereço de origem da configuração e, mais adiante, no
requestToShipment()
método, os elementos do endereço de origem são atribuídos à solicitação de envio (que eu suponho que seria usada mais tarde, dependendo do método de envio) chamado).Pode ser pelo menos uma direção a seguir. Lendo sua pergunta e sua atualização, tenho a impressão de que você está tornando isso mais difícil do que o necessário. Lembre-se sempre de que geralmente é melhor deixar o Magento fazer o que quer e modificar apenas pequenos bits para lidar com seus casos específicos. A maior parte do que você precisa já está pronta, então parece um pouco tolo reescrever os componentes de envio múltiplo quando houver opções mais simples.
fonte
Mage_Shipping_Model_Shipping
simplesmente substituem o endereço de origem na solicitação de remessa pela origem atribuída a esse fornecedor. O Magento continuaria com seus negócios e aplicaria as taxas de envio aplicáveis a esse pedido. Eu poderia ver um dos módulos de remessa do WebShopApps sendo útil aqui, pois permite atribuir métodos de remessa com base em vários critérios. - novamente, isso é tudo em teoria, eu nunca fiz algo assim antes, então pode haver algumas advertências (sempre existem). -/app/code/core/Mage/Sales/Model/Quote.php
- Lembre-se de que o Magento não é tão linear quanto os outros carrinhos de compras. Desça a toca do coelho e veja como as cotações são alteradas para pedidos (e créditos, etc.). Em algum momento, você encontrará o (s) método (s) que deseja alterar. Novamente, como eu disse anteriormente, geralmente é vantajoso investir simplesmente em um módulo de back-end de qualidade (e com a mesma importância, no suporte) que realizará o que você precisa rapidamente. Algumas porcas e parafusos não gostam de ser trocados.