Novidade: Frete por tamanho FREE no Virtuemart 1.1.x

  • Fabio Cardoso
  • Avatar de Fabio Cardoso Autor do Tópico
  • Offline
  • JCB! Hero
  • JCB! Hero
Mais
13 anos 8 meses atrás #64353 por Fabio Cardoso
Fabio Cardoso created the topic: Novidade: Frete por tamanho FREE no Virtuemart 1.1.x
Prezados,

Faz tempo que venho procurando um esquema para driblar o limite de tamanho de frete dos Correios. Mas graças a Deus e ao digníssimo Luiz Felipe Weber, disponho o código que ele criou para mim num gesto extremamente bondoso e louvável, de forma gratuita. Foi uma demonstração de puro espírito open source.

Inserindo esse código, o Virtuemart não exibirá os módulos de Sedex e Pac como forma de transporte caso o produto adquirido tenha mais de 105cm de lado, que é o limite dos Correios.

Esse código deve ser inserido no arquivo standard_shipping.php (além dos arquivos de módulos de outros desenvolvedores, como o Fernando Soares, se for o caso), conforme segue:
class standard_shipping {
	
	/**
	 * returns a html list with selectable rates
	 * $d[]: Array with search criteria
	 *             "country", "zip", "weight"
	 * @param array $d
	 * @return string
	 */
	function list_rates( &$d ) {
		global $VM_LANG, $CURRENCY_DISPLAY, $vmLogger ;

         /** inserir o código aqui */

Segue o código:
$lista_produtos = array();
		$qtde_produtos 	= 0;
		$qt_produtos = array();
		// pega todos os produtos do carrinho da sessão
		foreach($_SESSION['cart'] as $k=>$v) {
			if (is_numeric($k)) {
				$lista_produtos[] 	= $v['product_id'];
				$qtde_produtos 		+= $v['quantity'];
				$qt_produtos[$v['product_id']]  = $v['quantity'];
			}
		}

		// captura os dados de todos os produtos
		$q  = "SELECT product_id, (product_height) as hp, (product_length) as lp, (product_width) as wp FROM #__{vm}_product
				WHERE product_id in (".implode(',',$lista_produtos).")";
		$dbpc = new ps_DB;	
		$dbpc->query($q);
		while( $dbpc->next_record() ) {
		   for($i=0;$i<$qt_produtos&#91;$dbpc->f('product_id')&#93;;$i++) {
				$Order_Height 	+= ($dbpc->f('hp') > 0)?$dbpc->f('hp'):''; // sempre aumenta a altura
				$Order_Length 	= ($dbpc->f('lp') > 0 && $dbpc->f('lp') > $Order_Length )?$dbpc->f('lp'):$Order_Length; // se o comprimento do produto for maior, mantem o maior
				$Order_Width	= ($dbpc->f('wp') > 0 && $dbpc->f('wp') > $Order_Width)?$dbpc->f('wp'):$Order_Width; // se a largura do produto for maior, mantem sempre o maior
			}
		}
		
		// não mostra o modulo se as medidas forem abaixo do permitido
		if ($Order_Height < 105 and  $Order_Length < 105 and  $Order_Width < 105) {
				// encerra o módulo e parte para a exibição de outro                                        
				return false;
		}


Ao companheiro Luiz Felipe Weber, meus agradecimentos pela disposição e boa vontade ao disponibilizar a funcionalidade.

Aos companheiros moderadores, meu perdão por porventura dispor essa funcionalidade em local inadequado no fórum.

um abraço,
Fabio.

"Vencer a si mesmo é a maior das vitórias."
[i:3c4s7sku]Platão[/i:3c4s7sku]

"Ensinar é mostrar que é possível. Aprender é tornar possível a si mesmo."
[i:3c4s7sku]Paulo Coelho[/i:3c4s7sku]

[b:3c4s7sku]Não respondo dúvidas sobre Joomla em MP. Use o fórum.[/b:3c4s7sku]

[color=#000080:3c4s7sku]
Criação e hospedagem de sites, e-commerce. Consultoria em Joomla.
<!--...

Please Entrar ou Registrar to join the conversation.