Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v2.x.
#60300
Pesso(ALL)

Boa Tarde.

Eis o Dilema:

Temos uma promoção na nossa loja, e em cima desta promoção temos um desconto especial para compras acima de 2 itens. Explico
A promoção:
Item A de: R$16.99 por R$12.99
O Desconto Especial:
comprando acima de 2 itens A cada um sai por R$9.99

Ja tentei varias combinações entre Promoção e Desconto, subindo ou descendo as prioridades destes grupos, porem o preço permanece dando prioridade para os cálculos no Grupo PROMOÇÃO, ele desconsidera totalmente o grupo DESCONTO, logo se o cliente seleciona 2 itens, ele não soma 2x R$9,99 e sim ele consideraria que estaria na categoria PROMOÇÃO e efetua a soma de 2x R$12,99.

Pergunto: Existe uma maneira de que a soma dos itens em promoção se encaixem com os descontos especiais, e este cálculos sejam feito de acordo com o estipulado em desconto e considerando o valor da promoção?

Que zona né eu sei, mas tem que haver uma maneira...eu acho...LOL
Editado pela última vez por afarias em 15 Jul 2015, 10:18, em um total de 2 vezes.
dariopencart gostou disso
#60327
Após analisar a biblioteca responsável pelo carrinho que fica em system/library/cart.php
Confirmo que é realmente como imaginei, primeiro ele analisa se tem desconto, e caso tenha, coloca o preço com desconto como preço do produto, depois ele analisa se tem promoção, se tiver, ele coloca o preço da promoção como preço do produto, neste caso, uma simples alteração no código pode resolver isso, vamos lá:
- Edite o arquivo:
system/library/cart.php
- Localize o código:
Código: Selecionar todos
					$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1");
					if ($product_discount_query->num_rows) {
						$price = $product_discount_query->row['price'];
					}
					// Product Specials
					$product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");
					if ($product_special_query->num_rows) {
						$price = $product_special_query->row['price'];
					}
- E substitua por:
Código: Selecionar todos
					// Product Specials
					$product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");
					if ($product_special_query->num_rows) {
						$price = $product_special_query->row['price'];
					}
					$product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1");
					if ($product_discount_query->num_rows) {
						$price = $product_discount_query->row['price'];
					}
Salve as alterações no arquivo e faça um teste.

Explicação: Apenas invertemos os códigos, para que o carrinho da loja procure primeiro pelo preço em promoção e depois pelo com desconto, assim sempre o desconto será o valor predominante, e caso não haja desconto mas tenha promoção, a promoção vai funcionar sem problemas.

Observação: Pode ser necessário atualizar o cache das modificações, para atualizar, na administração da loja, acesse o menu Extensões->Modificações e clique no botão Atualizar, que fica no alto da tela na cor azul.

O ideal é fazer isso em OCMod, mas como estou longe do meu notebook, vou ficar devendo essa. :)

Espero ter ajudado. :D
#72211
Sei que este já é um topico antigo, mas estou enfrentando o mesmo problema de as promoções prevalecerem sobre os descontos por quantidade.
Esta alteração de código que você Manoel explicou, também é válida para a versão oc2.3.0.2? Sabe dizer? OU se já existe alguma extensão OCmod para eu comprar ou baixar.
Obrigado.
#76554
Olá pessoal. Tudo bem?

Estou com o seguinte problema. Estou colocando alguns produtos em promoção mas o preço do valor normal e do valor com desconto está aparecendo o mesmo na home. Veja nesse print: http://prntscr.com/hsuq1j

No admin eu estou fazendo assim: http://prntscr.com/hsuq8b

Só que ao colocar alí o preço promocional ele não mostra na home o preço normal. Ele só mostra quando abre o produto. Veja nesse print: http://prntscr.com/hsuqrf

Alguém sabe como resolver?

Desde já agradeço.
#80122
No meu caso é o seguinte eu tenho um grupo de usuários chamado club onde os usuários desse grupo tem um valor menor nos produtos então criei as promoções correto, mais a pessoa só vê esse valor se tiver logado e só aparece tbem na página do produto, mais eu preciso independente da pessoa estiver logado que esse valor aparece em baixo do preço de cada produto dizendo que é para clientes do clube, aí preciso colocar na página dos produtos e nos módulos tbem
#88151
Boa tarde,
Estou com o mesmo problema, porem utilizo opencart 3.0.3.3 com o tema Journal 3.
Alguém saberia dizer onde fica o arquivo correspondente ao system/library/cart.php para tentar fazer a alteração?
Obrigado.
#88454
Para quem estiver com duvida sobre o caminho nas nas versões 3x, segue abaixo o caminho correto ;)

/system/library/cart/cart.php

Ao invés de copiar o código informado acima pelo nosso colega, apenas inverta os códigos do seu cart.php. Assim você evita possíveis erros, pode ser que mude alguma coisa com o passar das atualizações.

Espero ter ajudado!

Gente preciso de ajuda urgente. Na migraç&a[…]

Caro @reds , muito obrigado pela resposta.

PHP 8+ incompatibilidade

Toda tradução para a versão 3[…]

Ola @alex3257 Se você precisa apenas ver […]