Fórum OpenCart Brasil

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

#41605
é que são 2 arquivos que precisam ser mudados: Um para mudança de status manual e outra para retorno dos módulos de pagamento. pelo que vi este vqmode somente altera o arquivo de retorno de estoque com mundana de status manual (admin/model/sale/order.php) . Tem que aplicar as alterações no arquivo catalog/model/checkout/order.php tambem conforme postado acima.
não esqueça de que, se utilizar array de codigos de retorno, ajustar os códigos de acordo com o seu site também.
ah! outra coisa. Existe um modulo do cadastro Brasil que, caso voce use, precisa incluir alguns campos manualmente ( numero da casa, complemento), Não esqueça de fazer isto, caso você use os códigos gentilmente cedido pelos nossos colegas acima.

at;
#50124
rgtobr escreveu:Pessoal, vejo que tem muita gente batendo a cabeça aí por causa da reposição do produto em estoque.

No início eu disse que é possível fazer os produtos voltarem ao estoque ao excluir o pedido, sim, basta fazer os ajustes que comentei. Vejo que vocês estão tendo a necessidade de reabastecer o estoque somente ao adicionar no histórico do pedido a situação CANCELADO, correto?

Então segue a solução:

1. edite o arquivo /admin/model/sale/order.php

2. procure pelo comentário // Send out any gift voucher mails por volta da linha 490, este comentário fica dentro da function addOrderHistory, então adicione o código abaixo uma linha acima deste comentário:
Código: Selecionar todos
        // Retorna ao estoque se cancelado (verificar a tabela ORDER_STATUS se o item CANCELED é número 7 e mudar na linha abaixo este número se necessário)
		if ((int)$data['order_status_id'] == 7) {
			$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'");

			if ($order_query->num_rows) {
				$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

				foreach($product_query->rows as $product) {
					$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "'");

					$option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'");

					foreach ($option_query->rows as $option) {
						$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
					}
				}
			}
		}
* se precisarem que os produtos retornem ao estoque em outras situações além do CANCELADO, modifique a condição "if" ajustando-a para as suas necessidades

Espero ter ajudado mais uma vez.


*************************************

OBSERVAÇÃO IMPORTANTE: caso utilize este recurso com o módulo da MoIP, cuidado com as mensagens de retorno automático que retornam o status "cancelado", pois, se a MoIP retornar o status de "cancelado" mais de uma vez, é provável que os produtos sejam adicionados várias vezes. Portanto, se isto ocorrer, edite o arquivo retorno_moip.php, no final há o código abaixo:

Código: Selecionar todos
	if (isset($errors)){
	  header("HTTP 200");
	} else {
	  header("HTTP 500");
	}
Então substitua essas linhas por:
Código: Selecionar todos
	  header("HTTP 200");
... até que alguém encontre uma solução melhor. Esta sugestão obtive após a leitura da documentação* disponível no sandbox da MoIP, já que notei que a variável $errors nestas linhas não estava definida em lugar algum, portanto, a resposta para a MoIP era sempre "que houve erro".

* = https://desenvolvedor.moip.com.br/sandb ... nManual.do[/i]

Obrigado!!!!!

ALTER TABLE `ocwj_product` CHANGE COLUMN `upc` `u[…]

Bom dia! chamo-me Gabriel, atualmente trabalho em […]

Your lucky day could be today! Enter now!

Enter and become the owner of a cool prize!