- 10 Ago 2014, 00:11
#52598
Tenho o OC 1.5.5.1.
Há algum tempo tenho habilitado (e funcionando) em minha loja a modificação de vender produtos "Sob-Encomenda" (tópico https://forum.opencartbrasil.com.br/ ... 9&start=10 ). Trecho do XML que fiz para o meu caso:
Quando um cliente compra 1 produto que NÃO está disponível para venda "Sob-Encomenda" é exibido (no carrinho de compras) uma mensagem "personalizada" de que os produtos marcados com *** não se encontram disponíveis em estoque ou que só é possível comprá-lo sob-encomenda (com um prazo adicional de 45 dias para a entrega). Através de um arquivo VQMOD (Cart Stock Status - www.amberpixels.com and JFOC - modificação free disponível em opencart.com) também é exibido ao lado do produto (no carrinho de compras) a informação de que o produto está esgotado.
Entretanto, apesar das mensagens acima, isto não impede que alguns clientes continuem e finalizem a compra.
Motivado por 2 casos, efetuei uma alteração no VQMOD Cart Stock Status para que (no carrinho) quando aparecesse a mensagem de alerta *** e o motivo desse alerta fossem produto com estoque esgotado e não disponível sob-encomenda, o botão finalizar compras sumisse e aparecesse no lugar a mensagem "Diminua a quantidade do item esgotado<br>para poder finalizar a compra".
Código da alteração VQMOD (Cart Stock Status) modificada abaixo:
Apesar disso, mais uma compra aconteceu (não sei se o cliente teve intenção de burlar ou não percebeu que estava comprando um item não disponível).
Percebi que apesar de ter feito o botão finalizar "sumir" quando o produto não era sob-encomenda e o estoque estivesse inferior a quantidade selecionada, era possível de burlar de 3 maneiras:
1- Clicando no link de "finalizar Pedido" no header; (fácil de resolver)
2- Adicionando o link do carrinho diretamente na barra de endereços (no botão, quando habilitado, aparece a url do checkout);
3- se o cliente tivesse aberto uma nova janela, direcionando para o checkout, quando as condições estivessem ok, e, posteriormente, fizesse uma alteração no carrinho e atualizasse a página do checkout.
A 1ª opção consegui solucionar. Mas a 2ª e a 3ª opção não tive sucesso. Pesquisei muito atrás da solução, testei algumas coisas, mas não funcionou.
A outra opção que pensei para resolver o caso (que inclusive seria a ideal) seria baseado no sistema "original" do open cart, que impede o acesso das 3 maneiras (relatadas acima) se as vendas sem estoque estiverem desabilitadas, mas com uma modificação que proibisse a venda sem estoque se o produto não estivesse disponível para a compra sob-encomenda, mas que permitisse caso a situação do estoque quando esgotado fosse diferente de "Esgotado".
Estou tentando implementar essa alteração que mencionei no parágrafo acima, mas por não ter muito conhecimento nos arquivos principais do sistema do open cart (acredito que a mudança deve ser feita nos arquivos de controller) e minha formação e conhecimento em programação ser baseado, principalmente, em Pascal/Delphi, que são completamente diferente de C, C++, java e PHP tenho encontrado bastante dificuldade de solucionar a questão, que acredito que deve ser bem mais simples de resolver por aqueles que já possuam conhecimento a fundo do OC ou das linguagens semelhantes a do PHP.
Agradeço qualquer ajuda.
Há algum tempo tenho habilitado (e funcionando) em minha loja a modificação de vender produtos "Sob-Encomenda" (tópico https://forum.opencartbrasil.com.br/ ... 9&start=10 ). Trecho do XML que fiz para o meu caso:
Código: Selecionar todos
Entretanto, para essa modificação funcionar é obrigatório habilitar no sistema de configuração da loja a opção de "venda sem estoque" e isso gera um outro problema:<file name="catalog/view/theme/default/template/product/product.tpl">
<operation error="skip">
<search position="replace" ><![CDATA[<input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />]]></search>
<add><![CDATA[
<!--BOTÃO ENCOMENDAR-->
<?php if ($stock == 'Em Estoque') {?>
<input type="button" value="<?php echo $button_cart; ?>" id="button-cart" class="button" />
<?php } elseif ($stock == 'Encomendar (15 a 45 dias)') { ?>
<input type="button" value="<?php echo $stock; ?>" id="button-cart" class="button" />
<?php } elseif ($stock == 'Encomendar (10 a 20 dias)') { ?>
<input type="button" value="<?php echo $stock; ?>" id="button-cart" class="button" />
<?php } else { ?>
<input type="button" value="<?php echo $stock; ?>" id="button-cart" class="button" disabled />
<?php } ?>
<!--FIM ENCOMENDAR-->
]]></add>
</operation>
</file>
Quando um cliente compra 1 produto que NÃO está disponível para venda "Sob-Encomenda" é exibido (no carrinho de compras) uma mensagem "personalizada" de que os produtos marcados com *** não se encontram disponíveis em estoque ou que só é possível comprá-lo sob-encomenda (com um prazo adicional de 45 dias para a entrega). Através de um arquivo VQMOD (Cart Stock Status - www.amberpixels.com and JFOC - modificação free disponível em opencart.com) também é exibido ao lado do produto (no carrinho de compras) a informação de que o produto está esgotado.
Entretanto, apesar das mensagens acima, isto não impede que alguns clientes continuem e finalizem a compra.
Motivado por 2 casos, efetuei uma alteração no VQMOD Cart Stock Status para que (no carrinho) quando aparecesse a mensagem de alerta *** e o motivo desse alerta fossem produto com estoque esgotado e não disponível sob-encomenda, o botão finalizar compras sumisse e aparecesse no lugar a mensagem "Diminua a quantidade do item esgotado<br>para poder finalizar a compra".
Código da alteração VQMOD (Cart Stock Status) modificada abaixo:
Código: Selecionar todos
<file path="catalog/controller/checkout/" name="cart.php">
<operation>
<search position="before"><![CDATA[$this->data['products'][] = array(]]></search>
<add><![CDATA[ $this->language->load('product/product');
$this->load->model('catalog/product');
$product_info = $this->model_catalog_product->getProduct($product['product_id']);
if ($product['stock'] == false) {
$stock = $product_info['stock_status'];
} else {
$stock = $this->language->get('text_instock');
}
$this->language->load('checkout/cart');]]></add>
</operation>
<operation>
<search position="before"><![CDATA['reward' => ($product['reward'] ? sprintf($this->language->get('text_points'), $product['reward']) : ''),]]></search>
<add><![CDATA['stock_status' => $stock,]]></add>
</operation>
</file>
<file path="catalog/view/theme/*/template/checkout/" name="cart.tpl">
<operation>
<search position="replace"><![CDATA[<span class="stock">***</span>]]></search>
<add><![CDATA[
<?php if (!$product['stock']) { ?>
<span class="stock">***</span><span style="color:red; font-weight:bold"> <?php echo $product['stock_status'];
if ($product['stock_status']=='Esgotado') { echo "<br><br>Quantidade superior a do estoque. Diminua a quantidade desse item";
$controle = "Sem Estoque";
}
?></span>
<?php } ?>]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[<div class="right"><a href="<?php echo $checkout; ?>" class="button"><?php echo $button_checkout; ?></a></div>]]></search>
<add><![CDATA[<?php if ($controle == 'Sem Estoque') { ?>
<div class="right"><?php echo 'Diminua a quantidade do item esgotado<br>para poder finalizar a compra'; ?></div>
<?php } else { ?>
<div class="right"><a href="<?php echo $checkout; ?>" class="button"><?php echo $button_checkout; ?></a></div>
<?php } ?>
]]></add>
</operation>
</file>
Apesar disso, mais uma compra aconteceu (não sei se o cliente teve intenção de burlar ou não percebeu que estava comprando um item não disponível).
Percebi que apesar de ter feito o botão finalizar "sumir" quando o produto não era sob-encomenda e o estoque estivesse inferior a quantidade selecionada, era possível de burlar de 3 maneiras:
1- Clicando no link de "finalizar Pedido" no header; (fácil de resolver)
2- Adicionando o link do carrinho diretamente na barra de endereços (no botão, quando habilitado, aparece a url do checkout);
3- se o cliente tivesse aberto uma nova janela, direcionando para o checkout, quando as condições estivessem ok, e, posteriormente, fizesse uma alteração no carrinho e atualizasse a página do checkout.
A 1ª opção consegui solucionar. Mas a 2ª e a 3ª opção não tive sucesso. Pesquisei muito atrás da solução, testei algumas coisas, mas não funcionou.
A outra opção que pensei para resolver o caso (que inclusive seria a ideal) seria baseado no sistema "original" do open cart, que impede o acesso das 3 maneiras (relatadas acima) se as vendas sem estoque estiverem desabilitadas, mas com uma modificação que proibisse a venda sem estoque se o produto não estivesse disponível para a compra sob-encomenda, mas que permitisse caso a situação do estoque quando esgotado fosse diferente de "Esgotado".
Estou tentando implementar essa alteração que mencionei no parágrafo acima, mas por não ter muito conhecimento nos arquivos principais do sistema do open cart (acredito que a mudança deve ser feita nos arquivos de controller) e minha formação e conhecimento em programação ser baseado, principalmente, em Pascal/Delphi, que são completamente diferente de C, C++, java e PHP tenho encontrado bastante dificuldade de solucionar a questão, que acredito que deve ser bem mais simples de resolver por aqueles que já possuam conhecimento a fundo do OC ou das linguagens semelhantes a do PHP.
Agradeço qualquer ajuda.

