Script de exclusão de endereço de clientes

Um serviço recente que eu fiz foi excluir registros de endereço de clientes. Por que me pediram isso? Começaram a utiliar um modulo novo, onde o bairro era um campo necessário, e antes não era. Me deram a tarefa de incluir o campo bairro no cadastro do cliente. Ok, campo incluído, e agora? O que fazer com o registro dos clientes ANTERIORES a esssa exclusão?

A ideia foi excluir os endereços! Somentes os endereços de clientes criados ANTES de uma data X. (Como exemplo, colocarei 01/Jan/2012)

Pensando em facilitar meu trablho, resolvi criar um script pra isso. Faria esse exclusão utilizando a API do Magento.
Meu primeiro passo era descobrir os clientes criados antes de 01/01/2012.

Para fazer consultas no magento é usado um array como filtro.
Ex.:

$complexFilter = array(
'complex_filter' => array(
array(
'key' => 'created_at',
'value' => array('key' => 'lt', 'value' => '2012-01-01 00:01:00')
)
)
);

Nesse meu filtro, eu procuro clientes  que o campo “created_at” sejá menor que 2012/01/01 as 00:01:00.

O LT como key significa “less than" que é “menor que”

Opções existentes:

array("from"=>$fromValue, "to"=>$toValue)
array("like"=>$como)
array("neq"=>$naoIgual)
array("in"=>array($comOsValores))
array("nin"=>array($semOsValores))
array("eq"=>$igual)
array("nlike"=>$nãoComo)
array("is"=>$is )
array("gt"=>$maiorQue)
array("lt"=>$menorQue)
array("gteq"=>$MaioOuIgualQue)
array("lteq"=>$menorOuIgualQue)
array("finset"=>$unknown )

Decidido os filtros, você chama seu metodo assim:

$result = $proxy->customerCustomerList($session, $complexFilter);

No meu caso, como eu queria clientes (customer), eu chamei a customerCustomerList, mas os filtros podem ser usados para qualquer List. Clique aqui para saber sobre as funções da API.

Antes de continuar, é importante você saber que um cliente pode ter vários endereços. Isos é uma coisa que o magento permite, você ter um endereço pra cobrança, um pra entrega, e quando qiser entregar em outro endereço, você pode cadastrar outro. Então, o primeiro passo para começar a deletar os endereços é saber quais são os endereços dos clientes retornados e se eles possuem endereço.

Algum cadastros de clientes foramf eitos, mas ele ainda pode não etr efetuado nenhuma compra, e nem tenha endereço. Então, vamos fazer uma verificação apra ver se o cliente possui endereço.

try{
$adressClient = $proxy->customerAddressList($sessionId, $idClient);
}catch(exception $e) {
}

Coloquei a minha chamado de metodo dentro de um try…catch, pois, caso o id do cliente não exista  ele irá dar erro. Abaixo disso, eu fiz uma verificação se a variavel $adressClient era diferente de NULL, ou seja, se o cliente possuir endereço.

Para excluir o enderço, você irá usar o ID DO ENDEREÇO e não o ID DO CLIENTE. Atenção nisso, encontrei muitos erros relacionados a isso. Com a consulta anterior você irá obter todos os ids de endereço do cliente procurado.

O codigo terá que ficar dentro de um foreach, pois o endereço, como eu já disse, pode retornar mais de um.


foreach($adressClient as $ad){
$idAddress = $ad->customer_address_id;
$deletanteAdress = $proxy->customerAddressDelete($sessionId, $idAddress);
}

Gostei muito deste post, pois apesar de ele ser simples, tem vários itens que geram confusão. Os filtros complexo são algo com pouca documentação existente. Pude perceber nas minhas buscas pela internet, que muita pessoas utilizando o ID DO CLIENTE com as funções de endereço, e isso não funciona. O certo é usar o ID DO ENDEREÇO. Isso é muito importante, os topicos do forum mostram muitas coisas erradas em relação a isso.

Anúncios

3 responses to this post.

  1. Posted by Marcos Curcio Gomes on 27 de agosto de 2012 at 2:15 pm

    Caramba Mariana! Gostei muito do seu blog! Sou meio que novo em desenvolvimento com magento. No meu caso trabalhamos com a api e c# no visual studio. Vamos combinar que o material sobre a api do magento é meio escasso né ^_^ ?
    Essas opções de filtro eu não conhecia, só o “from” e o “to”. Será de grande ajuda para mim. Muito obrigado. ;D

    Responder

    • Posted by Mariana Dutra on 12 de setembro de 2012 at 2:01 pm

      Sim, a api do magento é MTO escassa, e trata tudo muito genericamente.. Não msotra tods as opções possiveis.. Mostra uma só e você q se vire pra descobrir o resto. Mas… tem que ir tentando neh?! Importate é não desistir! 😀

      Responder

  2. Posted by Francisco on 24 de fevereiro de 2016 at 5:46 pm

    Muito útil o seu post Mariana. Você salvou meu dia passando as opções existentes para o key dos filtros.

    Valeu mesmo, muito obrigado!

    Responder

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: