Posts Tagged ‘endereço’

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.