Skip to content

Instantly share code, notes, and snippets.

@felipehummel
Last active August 29, 2015 13:57
Show Gist options
  • Save felipehummel/9514328 to your computer and use it in GitHub Desktop.
Save felipehummel/9514328 to your computer and use it in GitHub Desktop.
erp webservice test
<?php
namespace Anima\Core\Services;
interface AnimaErpDataObject {
public function validate();
public function toArray();
}
class AnimaErpPayment implements AnimaErpDataObject
{
//...
}
class AnimaErpServiceSent implements AnimaErpDataObject
{
// ...
}
class AnimaErpClient implements AnimaErpDataObject
{
var $indicadorTipoPessoa; // string
var $nomePessoa; // string
var $codigoDocumentoFederal; // string
var $dataImplantacaoCliente; // dateTime
var $codigoPaisNascimento; // string
var $codigoEstadoNascimento; // string
var $nomeLogradouroEndereco; // string
var $numeroLogradouroEndereco; // string
var $complementoEndereco; // string
var $nomeBairroEndereco; // string
var $codigoCidadeEndereco; // int
var $codigoPaisEndereco; // string
var $codigoCEPEndereco; // string
var $numeroTelefone; // string
var $numeroRamal; // string
var $enderecoEmail; // string
var $nomeEnderecoCobranca; // string
var $numeroEnderecoCobranca; // string
var $complementoEnderecoCobranca; // string
var $nomeBairroCobranca; // string
var $codigoCidadeCobranca; // int
var $codigoPaisCobranca; // string
var $codigoCEPCobranca; // string
var $numeroDocumentoEstadualFisica; // string
var $indicadorTipoPessoaJuridica; // string
var $orgaoEmissorDocumentoEstadual; // string
var $nomeMaePessoaFisica; // string
var $codigoUFEmissorDocumentoEstadual; // string
var $dataNascimentoPessoaFisica; // dateTime
var $nomeNacionalidadePessoaFisica; // string
var $nomeProfissaoPessoaFisica; // string
var $indicadorEstadoCivilPessoaFisica; // string
var $numeroInscricaoEstadual; // string
var $numeroInscricaoMunicipal; //string
public function validate()
{
$cepRules = 'size:10|regex:/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/';
$rules = array(
'indicadorTipoPessoa' => 'required|in:Fisica,Juridica',
'nomePessoa' => 'required|min:3|max:40',
// 'codigoDocumentoFederal' => 'required|min:11|max:20|regex:/[0-9]+/', // TODO: VER SE É 12 mesmo, e se tem a pontuação !!!TODO!!
'dataImplantacaoCliente' => 'required|date',
'codigoPaisNascimento' => 'max:3',
'codigoEstadoNascimento' => 'required|max:3',
'nomeLogradouroEndereco' => 'required|min:1|max:33',
'numeroLogradouroEndereco' => 'required|min:1|max:5',
'complementoEndereco' => 'max:10',
'nomeBairroEndereco' => 'required|min:1|max:20',
'codigoCidadeEndereco' => 'required|integer', // TODO: PRECISAMOS DA TABELA
'codigoPaisEndereco' => 'required|size:3',
'codigoCEPEndereco' => 'required|'.$cepRules, // FORMAT: 99.999-999
'numeroTelefone' => 'max:20',
'numeroRamal' => 'max:7',
'enderecoEmail' => 'required|max:40|email',
'nomeEnderecoCobranca' => 'max:33',
'numeroEnderecoCobranca' => 'max:5',
'complementoEnderecoCobranca' => 'max:10',
'nomeBairroCobranca' => 'max:20',
'codigoCidadeCobranca' => 'integer', // TODO: PRECISAMOS DA TABELA
'codigoPaisCobranca' => 'max:3',
'nomeMaePessoaFisica' => 'max:40', // probably won't be used
'dataNascimentoPessoaFisica' => 'date',
'nomeNacionalidadePessoaFisica' => 'max:40',
'nomeProfissaoPessoaFisica' => 'max:40',
'indicadorEstadoCivilPessoaFisica' => 'max:10',
'codigoCEPCobranca' => $cepRules);
$validator = \Validator::make($this->toArray(), $rules);
$validator->sometimes('codigoDocumentoFederal', 'required|size:14/regex:/[0-9]+/', function ($input)
{
return $this->isPJ($input);
});
$validator->sometimes('codigoDocumentoFederal', 'required|size:11/regex:/[0-9]+/', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('numeroDocumentoEstadualFisica', 'required|in:ISENTO', function ($input)
{
return $this->isPJ($input);
});
$validator->sometimes('numeroDocumentoEstadualFisica', 'required|max:20', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('indicadorTipoPessoaJuridica', 'required|max:7|in:Publico,Privado', function ($input)
{
return $this->isPJ($input);
});
$validator->sometimes('orgaoEmissorDocumentoEstadual', 'required|max:10', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('codigoUFEmissorDocumentoEstadual', 'required|max:3', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('numeroInscricaoEstadual', 'required|in:ISENTO', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('numeroInscricaoEstadual', 'required|max:18', function ($input)
{
return $this->isPJ($input);
});
$validator->sometimes('numeroInscricaoMunicipal', 'required|in:ISENTO', function ($input)
{
return $this->isPF($input);
});
$validator->sometimes('numeroInscricaoMunicipal', 'required|max:18', function ($input)
{
return $this->isPJ($input);
});
return $validator;
}
private function isPF($input)
{
return $input['indicadorTipoPessoa'] === 'Fisica';
}
private function isPJ($input)
{
return $input['indicadorTipoPessoa'] === 'Juridica';
}
public function toArray()
{
return array(
'indicadorTipoPessoa' => $this->indicadorTipoPessoa,
'nomePessoa' => $this->nomePessoa,
'codigoDocumentoFederal' => $this->codigoDocumentoFederal,
'dataImplantacaoCliente' => $this->dataImplantacaoCliente,
'codigoPaisNascimento' => $this->codigoPaisNascimento,
'codigoEstadoNascimento' => $this->codigoEstadoNascimento,
'nomeLogradouroEndereco' => $this->nomeLogradouroEndereco,
'numeroLogradouroEndereco' => $this->numeroLogradouroEndereco,
'complementoEndereco' => $this->complementoEndereco,
'nomeBairroEndereco' => $this->nomeBairroEndereco,
'codigoCidadeEndereco' => $this->codigoCidadeEndereco,
'codigoPaisEndereco' => $this->codigoPaisEndereco,
'codigoCEPEndereco' => $this->codigoCEPEndereco,
'numeroTelefone' => $this->numeroTelefone,
'numeroRamal' => $this->numeroRamal,
'enderecoEmail' => $this->enderecoEmail,
'nomeEnderecoCobranca' => $this->nomeEnderecoCobranca,
'numeroEnderecoCobranca' => $this->numeroEnderecoCobranca,
'complementoEnderecoCobranca' => $this->complementoEnderecoCobranca,
'nomeBairroCobranca' => $this->nomeBairroCobranca,
'codigoCidadeCobranca' => $this->codigoCidadeCobranca,
'codigoPaisCobranca' => $this->codigoPaisCobranca,
'codigoCEPCobranca' => $this->codigoCEPCobranca,
'numeroDocumentoEstadualFisica' => $this->numeroDocumentoEstadualFisica,
'indicadorTipoPessoaJuridica' => $this->indicadorTipoPessoaJuridica,
'orgaoEmissorDocumentoEstadual' => $this->orgaoEmissorDocumentoEstadual,
'nomeMaePessoaFisica' => $this->nomeMaePessoaFisica,
'codigoUFEmissorDocumentoEstadual' => $this->codigoUFEmissorDocumentoEstadual,
'dataNascimentoPessoaFisica' => $this->dataNascimentoPessoaFisica,
'nomeNacionalidadePessoaFisica' => $this->nomeNacionalidadePessoaFisica,
'nomeProfissaoPessoaFisica' => $this->nomeProfissaoPessoaFisica,
'indicadorEstadoCivilPessoaFisica' => $this->indicadorEstadoCivilPessoaFisica,
'numeroInscricaoEstadual' => $this->numeroInscricaoEstadual,
'numeroInscricaoMunicipal' => $this->numeroInscricaoMunicipal);
}
}
/**
* Service responsible for integrating with Anima's ERP (Datasul)
*/
interface AnimaErpServiceInterface
{
public function sendClient(AnimaErpClient $animaClient);
public function sendService(AnimaErpServiceSent $animaService);
public function sendPayment(AnimaErpPayment $animaPayment);
}
<?php
namespace Anima\Core\Services;
use Anima\Core\Services\AnimaErpServiceInterface,
Anima\Core\Services\AnimaErpClient;
/**
* Service responsible for integrating with Anima's ERP (Datasul)
*/
class SoapAnimaErpService implements AnimaErpServiceInterface
{
var $soapClient;
public function __construct()
{
$this->soapClient = new \SoapClient(SoapAnimaErpService::SERVICE_URI.'?WSDL', array('trace' => true, 'soap_version' => SOAP_1_2));
}
const SEND_CLIENT_FUNCTION = 'clienteEnviar';
const SEND_SERVICE_FUNCTION = 'ServicoEnviar';
const SEND_PAYMENT_FUNCTION = 'PagamentoEnviar';
const SERVICE_URI = 'http://testeservicos.animaeducacao.com.br/PortalAnima/dsv/Service.asmx';
public function sendClient(AnimaErpClient $animaClient)
{
if ($this->validateDataObject($animaClient)) {
$result = $this->executeRemoteFunction(SoapAnimaErpService::SEND_CLIENT_FUNCTION, $animaClient);
$this->debugResult($result);
}
}
public function sendService(AnimaErpServiceSent $animaService)
{
// ...
}
public function sendPayment(AnimaErpPayment $animaPayment)
{
// ...
}
private function validateDataObject(AnimaErpDataObject $animaObj)
{
$validator = $animaObj->validate();
if ($validator->passes()) {
return true;
}
else {
throw new \Exception($validator->messages()->toJson());
}
}
private function executeRemoteFunction($functionName, AnimaErpDataObject $argumentObject)
{
$arguments= array($functionName => $argumentObject->toArray());
$options = array('location' => SoapAnimaErpService::SERVICE_URI);
$result = $this->soapClient->__soapCall($functionName, $arguments, $options);
return $result;
}
}
<?
$client = new SoapAnimaErpService();
$animaClient = new AnimaErpClient();
$animaClient->indicadorTipoPessoa = 'Fisica';
$animaClient->nomePessoa = 'João Pedro';
$animaClient->codigoEstadoNascimento = 10;
// $animaClient->codigoEstadoNascimento = 'AM';
$animaClient->codigoDocumentoFederal = '93325959253';
$animaClient->dataImplantacaoCliente = date('c', strtotime(date('Y-m-d H:i:s')));
$animaClient->dataNascimentoPessoaFisica = date('c', strtotime(date('Y-m-d H:i:s')));
$animaClient->nomeLogradouroEndereco = 'sei la rua, alguma coisa blabla';
$animaClient->numeroLogradouroEndereco = '202';
$animaClient->nomeBairroEndereco = 'vila madalena';
$animaClient->codigoPaisEndereco = 'BRA';
$animaClient->codigoCidadeEndereco = 10;
$animaClient->codigoCidadeCobranca = 10;
$animaClient->codigoCEPEndereco = '05.435-020';
// $animaClient->codigoCEPCobranca = '05.435-020';
$animaClient->enderecoEmail = 'felipehummel@gmail.com';
$animaClient->numeroDocumentoEstadualFisica = '19402180';
$animaClient->orgaoEmissorDocumentoEstadual = 'SSP';
$animaClient->codigoUFEmissorDocumentoEstadual = 'AM';
$animaClient->numeroInscricaoEstadual = 'ISENTO';
$animaClient->numeroInscricaoMunicipal = 'ISENTO';
$client->sendClient($animaClient);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment