diff --git a/src/main/java/br/com/correios/api/postagem/CorreiosPostagemApi.java b/src/main/java/br/com/correios/api/postagem/CorreiosPostagemApi.java index 7acf248..50a6fc4 100644 --- a/src/main/java/br/com/correios/api/postagem/CorreiosPostagemApi.java +++ b/src/main/java/br/com/correios/api/postagem/CorreiosPostagemApi.java @@ -9,9 +9,10 @@ import br.com.correios.api.postagem.exception.ObjetoPlpFoiPostadoException; import br.com.correios.api.postagem.exception.ObjetoPlpInexistenteOuJaFoiCanceladoException; import br.com.correios.api.postagem.exception.ObjetoPlpJaFoiCanceladoException; -import br.com.correios.api.postagem.plp.CorreiosLogToPlpDocumentoConverter; +import br.com.correios.api.postagem.plp.CorreiosLogToDocumentoPlpConverter; import br.com.correios.api.postagem.plp.DocumentoPlp; -import br.com.correios.api.postagem.plp.NovoPlpBuilder; +import br.com.correios.api.postagem.plp.NovaPlpBuilder; +import br.com.correios.api.postagem.plp.NovaPlpToCorreiosLogConverter; import br.com.correios.api.postagem.plp.ObjetoPostado; import br.com.correios.api.postagem.webservice.CorreiosClienteWebService; import br.com.correios.api.postagem.xml.XmlPlpParser; @@ -27,7 +28,7 @@ public class CorreiosPostagemApi { private final CorreiosServicoPostagemAPI correiosServicoPostagemAPI; public CorreiosPostagemApi(CorreiosCredenciais credenciais) { - this.correiosServicoPostagemAPI = new SoapCorreiosServicoPostagemAPI(credenciais, new CorreiosClienteWebService(), new ClienteRetornadoDosCorreiosToClienteConverter(), new XmlPlpParser(), new CorreiosLogToPlpDocumentoConverter()); + this.correiosServicoPostagemAPI = new SoapCorreiosServicoPostagemAPI(credenciais, new CorreiosClienteWebService(), new ClienteRetornadoDosCorreiosToClienteConverter(), new XmlPlpParser(), new CorreiosLogToDocumentoPlpConverter(), new NovaPlpToCorreiosLogConverter()); } /** @@ -78,14 +79,8 @@ public void cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta) throws ObjetoP throw exceptionCancelamento; } } - - - public Long fechaPlp() { - return correiosServicoPostagemAPI.fechaPlp(documentoPlp, codigoPlpCliente); - } - - public NovoPlpBuilder novaPlp() { - return new NovoPlpBuilder(); + public NovaPlpBuilder novaPlp() { + return new NovaPlpBuilder(correiosServicoPostagemAPI); } } diff --git a/src/main/java/br/com/correios/api/postagem/CorreiosServicoPostagemAPI.java b/src/main/java/br/com/correios/api/postagem/CorreiosServicoPostagemAPI.java index 6f325cf..c80435e 100644 --- a/src/main/java/br/com/correios/api/postagem/CorreiosServicoPostagemAPI.java +++ b/src/main/java/br/com/correios/api/postagem/CorreiosServicoPostagemAPI.java @@ -5,6 +5,8 @@ import br.com.correios.api.postagem.cliente.ClienteEmpresa; import br.com.correios.api.postagem.cliente.ContratoEmpresa; import br.com.correios.api.postagem.plp.DocumentoPlp; +import br.com.correios.api.postagem.plp.NovaPlp; +import br.com.correios.api.postagem.plp.Plp; public interface CorreiosServicoPostagemAPI { @@ -16,5 +18,5 @@ public interface CorreiosServicoPostagemAPI { boolean cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta); - Long fechaPlp(DocumentoPlp documentoPlp, Long codigoPlpCliente); + Plp fechaPlp(String cartaoDePostagem, Long codigoPlpCliente, NovaPlp novaPlp); } diff --git a/src/main/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPI.java b/src/main/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPI.java index fe8763d..f75f6e4 100644 --- a/src/main/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPI.java +++ b/src/main/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPI.java @@ -14,8 +14,11 @@ import br.com.correios.api.postagem.exception.CorreiosPostagemAutenticacaoException; import br.com.correios.api.postagem.plp.CorreiosLogToDocumentoPlpConverter; import br.com.correios.api.postagem.plp.DocumentoPlp; -import br.com.correios.api.postagem.plp.DocumentoPlpToCorreiosLogConverter; -import br.com.correios.api.postagem.plp.ObjetoPostado; +import br.com.correios.api.postagem.plp.NovaPlp; +import br.com.correios.api.postagem.plp.NovaPlpToCorreiosLogConverter; +import br.com.correios.api.postagem.plp.ObjetoPlp; +import br.com.correios.api.postagem.plp.Plp; +import br.com.correios.api.postagem.plp.PlpNaoFechadaException; import br.com.correios.api.postagem.webservice.CorreiosClienteApi; import br.com.correios.api.postagem.xml.Correioslog; import br.com.correios.api.postagem.xml.XmlPlpParser; @@ -32,14 +35,12 @@ class SoapCorreiosServicoPostagemAPI implements CorreiosServicoPostagemAPI { private final ClienteRetornadoDosCorreiosToClienteConverter clienteEmpresaConverter; private final XmlPlpParser xmlPlpParser; private final CorreiosLogToDocumentoPlpConverter documentoPlpConverter; - private final DocumentoPlpToCorreiosLogConverter correiosPlpConverter; + private final NovaPlpToCorreiosLogConverter correiosPlpConverter; - SoapCorreiosServicoPostagemAPI(CorreiosCredenciais credenciais, - CorreiosClienteApi clienteApi, - ClienteRetornadoDosCorreiosToClienteConverter clienteEmpresaConverter, - XmlPlpParser xmlPlpParser, - CorreiosLogToDocumentoPlpConverter documentoPlpConverter, - DocumentoPlpToCorreiosLogConverter correiosPlpConverter) { + SoapCorreiosServicoPostagemAPI(CorreiosCredenciais credenciais, CorreiosClienteApi clienteApi, + ClienteRetornadoDosCorreiosToClienteConverter clienteEmpresaConverter, XmlPlpParser xmlPlpParser, + CorreiosLogToDocumentoPlpConverter documentoPlpConverter, + NovaPlpToCorreiosLogConverter correiosPlpConverter) { this.credenciais = credenciais; this.clienteApi = clienteApi; @@ -54,10 +55,8 @@ public Optional buscaCliente(ContratoEmpresa contratoEmpresa) { try { ClienteERP clienteRetornadoDosCorreios = clienteApi.getCorreiosWebService().buscaCliente(contratoEmpresa.getContrato(), contratoEmpresa.getCartaoDePostagem(), credenciais.getUsuario(), credenciais.getSenha()); - return Optional.fromNullable(clienteRetornadoDosCorreios) - .transform(clienteEmpresaConverter::convert) - .transform(Optional::of) - .or(Optional.absent()); + return Optional.fromNullable(clienteRetornadoDosCorreios).transform(clienteEmpresaConverter::convert) + .transform(Optional::of).or(Optional.absent()); } catch (AutenticacaoException e) { throw new CorreiosPostagemAutenticacaoException(format("Ocorreu um erro ao se autenticar nos correios com a seguinte credencial: %s", credenciais)); @@ -105,24 +104,6 @@ public boolean cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta) { } } - @Override - public Long fechaPlp(DocumentoPlp documentoPlp, Long codigoPlpCliente) { - try { - Correioslog correiosLog = correiosPlpConverter.convert(documentoPlp); - - String numeroDoCartaoDePostagem = documentoPlp.getPlp().getNumeroDoCartaoDePostagem(); - List numerosDasEtiquetas = new LinkedList<>(); - for (ObjetoPostado objetoPostado : documentoPlp.getObjetoPostado()) { - numerosDasEtiquetas.add(objetoPostado.getNumeroEtiqueta()); - } - - return clienteApi.getCorreiosWebService().fechaPlpVariosServicos(xmlPlpParser.getXmlFrom(correiosLog), codigoPlpCliente, numeroDoCartaoDePostagem, numerosDasEtiquetas, credenciais.getUsuario(), credenciais.getSenha()); - } catch (Exception e) { - //TODO - } - return null; //TODO - } - private Optional getDocumentoPlpValidadoAPartirDo(String xmlPlp) { boolean xmlPlpDosCorreiosEstaValido = xmlPlp != null && !xmlPlp.isEmpty(); @@ -137,4 +118,26 @@ private Optional getDocumentoPlpValidadoAPartirDo(String xmlPlp) { return Optional.absent(); } + @Override + public Plp fechaPlp(String cartaoDePostagem, Long codigoPlpCliente, NovaPlp novaPlp) { + try { + Correioslog correiosLog = correiosPlpConverter.convert(novaPlp); + + List etiquetasSemDigitoVerificador = new LinkedList<>(); + + for (ObjetoPlp objetoPlp : novaPlp.getObjetosPlp()) { + etiquetasSemDigitoVerificador.add(objetoPlp.getNumeroDaEtiquetaSemDigitoVerificador()); + } + + String xmlFrom = xmlPlpParser.getXmlFrom(correiosLog); + + Long plpId = clienteApi.getCorreiosWebService() + .fechaPlpVariosServicos(xmlFrom, codigoPlpCliente, cartaoDePostagem, etiquetasSemDigitoVerificador, credenciais.getUsuario(), credenciais.getSenha()); + + return new Plp(plpId); + } catch (Exception e) { + throw new PlpNaoFechadaException(e); + } + } + } diff --git a/src/main/java/br/com/correios/api/postagem/plp/DestinatarioDoObjetoPlpBuilder.java b/src/main/java/br/com/correios/api/postagem/plp/DestinatarioDoObjetoPlpBuilder.java index e309065..10f011f 100644 --- a/src/main/java/br/com/correios/api/postagem/plp/DestinatarioDoObjetoPlpBuilder.java +++ b/src/main/java/br/com/correios/api/postagem/plp/DestinatarioDoObjetoPlpBuilder.java @@ -18,7 +18,7 @@ public DestinatarioDoObjetoPlpComNomeBuilder(DestinatarioDoObjetoPlpBuilder buil this.builder = builder; } - public DestinatarioDoObjetoPlpComEnderecoBuilder ComEndereco(Endereco enderecoDoDestinatario) { + public DestinatarioDoObjetoPlpComEnderecoBuilder comEndereco(Endereco enderecoDoDestinatario) { builder.endereco = enderecoDoDestinatario; return new DestinatarioDoObjetoPlpComEnderecoBuilder(builder); } diff --git a/src/main/java/br/com/correios/api/postagem/plp/DestinatarioPlp.java b/src/main/java/br/com/correios/api/postagem/plp/DestinatarioPlp.java deleted file mode 100644 index 29cd92f..0000000 --- a/src/main/java/br/com/correios/api/postagem/plp/DestinatarioPlp.java +++ /dev/null @@ -1,5 +0,0 @@ -package br.com.correios.api.postagem.plp; - -public class DestinatarioPlp { - -} diff --git a/src/main/java/br/com/correios/api/postagem/plp/DimensoesObjetoPlp.java b/src/main/java/br/com/correios/api/postagem/plp/DimensoesObjetoPlp.java deleted file mode 100644 index ece080c..0000000 --- a/src/main/java/br/com/correios/api/postagem/plp/DimensoesObjetoPlp.java +++ /dev/null @@ -1,5 +0,0 @@ -package br.com.correios.api.postagem.plp; - -public class DimensoesObjetoPlp { - -} diff --git a/src/main/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverter.java b/src/main/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverter.java deleted file mode 100644 index 6fe1dc7..0000000 --- a/src/main/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -package br.com.correios.api.postagem.plp; - - -import br.com.correios.api.converter.Converter; -import br.com.correios.api.postagem.xml.Correioslog; -import br.com.correios.api.postagem.xml.DadosPlp; -import br.com.correios.api.postagem.xml.ObjetoPostal; -import br.com.correios.api.postagem.xml.Remetente; - -public class DocumentoPlpToCorreiosLogConverter implements Converter { - - @Override - public Correioslog convert(DocumentoPlp documentoPlp) { - Correioslog correioslog = new Correioslog(); - DadosPlp plp = new DadosPlp(); - - plp.setIdPlp(documentoPlp.getPlp().getId()); - - - plp.setCartaoPostagem(CARTAO_POSTAGEM); - Remetente rementente = RemetenteBuilder.build(incompletePostageList.getSender()); - - correioslog.setTipoArquivo(POSTAGEM); - correioslog.setVersaoArquivo(VERSAO_ARQUIVO); - - correioslog.setPlp(plp); - correioslog.setRemetente(rementente); - - for (PostageItem item : incompletePostageList.getItems()) { - ObjetoPostal objetoPostal = ObjetoPostalBuilder.build(item); - correioslog.getObjetoPostal().add(objetoPostal); - } - - return correioslog; - } - -} diff --git a/src/main/java/br/com/correios/api/postagem/plp/NovaPlp.java b/src/main/java/br/com/correios/api/postagem/plp/NovaPlp.java new file mode 100644 index 0000000..8beca42 --- /dev/null +++ b/src/main/java/br/com/correios/api/postagem/plp/NovaPlp.java @@ -0,0 +1,23 @@ +package br.com.correios.api.postagem.plp; + +import java.util.Set; + +public class NovaPlp { + + private final RemetentePlp remetente; + private final Set objetosPlp; + + public NovaPlp(RemetentePlp remetente, Set objetosPlp) { + this.remetente = remetente; + this.objetosPlp = objetosPlp; + } + + public RemetentePlp getRemetente() { + return remetente; + } + + public Set getObjetosPlp() { + return objetosPlp; + } + +} diff --git a/src/main/java/br/com/correios/api/postagem/plp/NovaPlpBuilder.java b/src/main/java/br/com/correios/api/postagem/plp/NovaPlpBuilder.java new file mode 100644 index 0000000..07dbf24 --- /dev/null +++ b/src/main/java/br/com/correios/api/postagem/plp/NovaPlpBuilder.java @@ -0,0 +1,81 @@ +package br.com.correios.api.postagem.plp; + +import static com.google.common.collect.Sets.newHashSet; + +import java.util.Set; + +import br.com.correios.api.postagem.CorreiosServicoPostagemAPI; + +public class NovaPlpBuilder { + + private String cartaoDePostagem; + private RemetentePlp remetente; + private Set objetosPlp; + private Long codigoPlpCliente = 0l; + private CorreiosServicoPostagemAPI correiosServicoPostagemAPI; + + public NovaPlpBuilder(CorreiosServicoPostagemAPI correiosServicoPostagemAPI) { + this.correiosServicoPostagemAPI = correiosServicoPostagemAPI; + } + + public NovaPlpComCartaoDePostagemBuilder comCartaoDePostagem(String cartaoDePostagem) { + this.cartaoDePostagem = cartaoDePostagem; + return new NovaPlpComCartaoDePostagemBuilder(this); + } + + public class NovaPlpComCartaoDePostagemBuilder { + + private NovaPlpBuilder builder; + + public NovaPlpComCartaoDePostagemBuilder(NovaPlpBuilder builder) { + this.builder = builder; + } + + public NovaPlpComRemetenteBuilder deRemetente(RemetentePlp remetente) { + builder.remetente = remetente; + return new NovaPlpComRemetenteBuilder(builder); + } + + } + + public class NovaPlpComRemetenteBuilder { + + private NovaPlpBuilder builder; + + private NovaPlpComRemetenteBuilder(NovaPlpBuilder builder) { + this.builder = builder; + } + + public NovaPlpComObjetoAdicionadoBuilder adicionandoObjeto(ObjetoPlp objetoPlp) { + builder.objetosPlp = newHashSet(objetoPlp); + return new NovaPlpComObjetoAdicionadoBuilder(builder); + } + + } + + public class NovaPlpComObjetoAdicionadoBuilder { + + private NovaPlpBuilder builder; + + private NovaPlpComObjetoAdicionadoBuilder(NovaPlpBuilder builder) { + this.builder = builder; + } + + public NovaPlpComObjetoAdicionadoBuilder adicionandoObjeto(ObjetoPlp objetoPlp) { + builder.objetosPlp.add(objetoPlp); + return new NovaPlpComObjetoAdicionadoBuilder(builder); + } + + public NovaPlpComObjetoAdicionadoBuilder comCodigoPlpCliente(Long codigoPlpCliente) { + builder.codigoPlpCliente = codigoPlpCliente; + return this; + } + + public Plp fechaPlp() { + return correiosServicoPostagemAPI.fechaPlp(cartaoDePostagem, codigoPlpCliente, new NovaPlp(builder.remetente, builder.objetosPlp)); + } + + } + + +} diff --git a/src/main/java/br/com/correios/api/postagem/plp/NovaPlpToCorreiosLogConverter.java b/src/main/java/br/com/correios/api/postagem/plp/NovaPlpToCorreiosLogConverter.java new file mode 100644 index 0000000..196dff1 --- /dev/null +++ b/src/main/java/br/com/correios/api/postagem/plp/NovaPlpToCorreiosLogConverter.java @@ -0,0 +1,115 @@ +package br.com.correios.api.postagem.plp; + +import java.math.BigDecimal; + +import br.com.correios.api.converter.Converter; +import br.com.correios.api.postagem.dimensao.DimensoesDoObjeto.TipoDoObjetoSendoEnviado; +import br.com.correios.api.postagem.xml.Correioslog; +import br.com.correios.api.postagem.xml.DadosPlp; +import br.com.correios.api.postagem.xml.Destinatario; +import br.com.correios.api.postagem.xml.DimensaoObjeto; +import br.com.correios.api.postagem.xml.Nacional; +import br.com.correios.api.postagem.xml.ObjetoPostal; +import br.com.correios.api.postagem.xml.Remetente; +import br.com.correios.api.postagem.xml.ServicoAdicional; + +public class NovaPlpToCorreiosLogConverter implements Converter { + + private static final String POSTAGEM = "Postagem"; + private static final String CARTAO_POSTAGEM = ""; + private static final BigDecimal VERSAO_ARQUIVO = BigDecimal.valueOf(2.3); + + @Override + public Correioslog convert(NovaPlp novaPlp) { + + Correioslog correioslog = new Correioslog(); + correioslog.setTipoArquivo(POSTAGEM); + correioslog.setVersaoArquivo(VERSAO_ARQUIVO); + + DadosPlp plp = new DadosPlp(); + plp.setCartaoPostagem(CARTAO_POSTAGEM); + + correioslog.setPlp(plp); + + correioslog.setRemetente(asRemetente(novaPlp.getRemetente())); + + for (ObjetoPlp objetoPlp : novaPlp.getObjetosPlp()) { + correioslog.getObjetoPostal().add(asObjetoPostal(objetoPlp)); + } + + return correioslog; + } + + private Remetente asRemetente(RemetentePlp remetentePlp) { + Remetente remetente = new Remetente(); + + remetente.setNomeRemetente(remetentePlp.getNome()); + remetente.setEmailRemetente(remetentePlp.getEmail()); + remetente.setNumeroContrato(remetentePlp.getNumeroContrato()); + remetente.setNumeroDiretoria(Byte.parseByte(remetentePlp.getNumeroDeDiretoria())); + remetente.setCodigoAdministrativo(remetentePlp.getCodigoAdministrativo()); + + Endereco enderecoPlp = remetentePlp.getEndereco(); + remetente.setBairroRemetente(enderecoPlp.getBairro()); + remetente.setCepRemetente(enderecoPlp.getCep().value()); + remetente.setCidadeRemetente(enderecoPlp.getCidade()); + remetente.setComplementoRemetente(enderecoPlp.getComplemento()); + remetente.setLogradouroRemetente(enderecoPlp.getLogradouro()); + remetente.setNumeroRemetente(String.valueOf(enderecoPlp.getNumero())); + remetente.setUfRemetente(enderecoPlp.getUf()); + + return remetente; + } + + private ObjetoPostal asObjetoPostal(ObjetoPlp objetoPlp) { + ObjetoPostal objetoPostal = new ObjetoPostal(); + Endereco endereco = objetoPlp.getDestinatarioDoObjeto().getEndereco(); + DimensoesDoObjetoPlp dimensoesDoObjeto = objetoPlp.getDimensoesDoObjeto(); + + objetoPostal.setNumeroEtiqueta(objetoPlp.getNumeroDaEtiqueta()); + objetoPostal.setCodigoServicoPostagem(objetoPlp.getCodigoDeServico()); + objetoPostal.setPeso(objetoPlp.getPesoDoObjeto().emGramas().toBigInteger()); + + Destinatario destinatario = new Destinatario(); + destinatario.setComplementoDestinatario(endereco.getComplemento()); + destinatario.setLogradouroDestinatario(endereco.getLogradouro()); + destinatario.setNomeDestinatario(objetoPlp.getDestinatarioDoObjeto().getNome()); + destinatario.setNumeroEndDestinatario(String.valueOf(endereco.getNumero())); + + objetoPostal.setDestinatario(destinatario); + + Nacional nacional = new Nacional(); + nacional.setBairroDestinatario(endereco.getBairro()); + nacional.setCidadeDestinatario(endereco.getCidade()); + nacional.setUfDestinatario(endereco.getUf()); + nacional.setCepDestinatario(endereco.getCep().value()); + + objetoPostal.setNacional(nacional); + + ServicoAdicional servicoAdicional = new ServicoAdicional(); + objetoPlp.getCodigoServicosAdicionais().forEach(servicoAdicional::addCodigoServicoAdicional); + objetoPlp.getValorDeclaradoParaEncomenda().ifPresent(valorDeclaradoParaEncomenda -> { + servicoAdicional.setValorDeclarado(valorDeclaradoParaEncomenda.toEngineeringString()); + }); + + objetoPostal.setServicoAdicional(servicoAdicional); + + DimensaoObjeto dimensaoObjeto = new DimensaoObjeto(); + + TipoDoObjetoSendoEnviado tipoDoObjetoSendoEnviado = objetoPlp.getDimensoesDoObjeto().getTipoDoObjetoSendoEnviado(); + + if(TipoDoObjetoSendoEnviado.ENVELOPE != tipoDoObjetoSendoEnviado) { + dimensaoObjeto.setDimensaoAltura(dimensoesDoObjeto.getAltura().toEngineeringString()); + dimensaoObjeto.setDimensaoComprimento(dimensoesDoObjeto.getComprimento().toEngineeringString()); + dimensaoObjeto.setDimensaoDiametro(dimensoesDoObjeto.getDiametro().signum()); + dimensaoObjeto.setDimensaoLargura(dimensoesDoObjeto.getLargura().toEngineeringString()); + } + + dimensaoObjeto.setTipoObjeto(Short.valueOf(dimensoesDoObjeto.getTipoDoObjetoSendoEnviado().getCodigoInternoDosCorreios())); + + objetoPostal.setDimensaoObjeto(dimensaoObjeto); + + return objetoPostal; + } + +} diff --git a/src/main/java/br/com/correios/api/postagem/plp/NovoPlpBuilder.java b/src/main/java/br/com/correios/api/postagem/plp/NovoPlpBuilder.java deleted file mode 100644 index 2d3f473..0000000 --- a/src/main/java/br/com/correios/api/postagem/plp/NovoPlpBuilder.java +++ /dev/null @@ -1,32 +0,0 @@ -package br.com.correios.api.postagem.plp; - -public class NovoPlpBuilder { - - public NovoPlpComRemetenteBuilder deRemetente(RemetentePlp remetente) { - - } - - public class NovoPlpComRemetenteBuilder { - - public NovoPlpComObjetoAdicionadoBuilder adicionandoObjeto(ObjetoPlp objetoPlp) { - return null; - } - - } - - public class NovoPlpComObjetoAdicionadoBuilder { - - public NovoPlpComObjetoAdicionadoBuilder adicionandoObjeto(ObjetoPlp objetoPlp) { - // TODO Auto-generated method stub - return null; - } - - public void fechaPlp() { - // TODO Auto-generated method stub - - } - - } - - -} diff --git a/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlp.java b/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlp.java index 15127a0..c30deae 100644 --- a/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlp.java +++ b/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlp.java @@ -1,5 +1,61 @@ package br.com.correios.api.postagem.plp; +import java.math.BigDecimal; +import java.util.Optional; +import java.util.Set; + public class ObjetoPlp { + private final DimensoesDoObjetoPlp dimensoesDoObjeto; + private final PesoDoObjetoPlp pesoDoObjeto; + private final String codigoDeServico; + private final String numeroDaEtiqueta; + private final DestinatarioDoObjetoPlp destinatarioDoObjeto; + private final Set codigoServicosAdicionais; + private final BigDecimal valorAdicionalDoSeguro; + + ObjetoPlp(DimensoesDoObjetoPlp dimensoesDoObjeto, PesoDoObjetoPlp pesoDoObjeto, String codigoDeServico, + String numeroDaEtiqueta, DestinatarioDoObjetoPlp destinatarioDoObjeto, Set codigoServicosAdicionais, + BigDecimal valorAdicionalDoSeguro) { + this.dimensoesDoObjeto = dimensoesDoObjeto; + this.pesoDoObjeto = pesoDoObjeto; + this.codigoDeServico = codigoDeServico; + this.numeroDaEtiqueta = numeroDaEtiqueta; + this.destinatarioDoObjeto = destinatarioDoObjeto; + this.codigoServicosAdicionais = codigoServicosAdicionais; + this.valorAdicionalDoSeguro = valorAdicionalDoSeguro; + } + + public DimensoesDoObjetoPlp getDimensoesDoObjeto() { + return dimensoesDoObjeto; + } + + public PesoDoObjetoPlp getPesoDoObjeto() { + return pesoDoObjeto; + } + + public String getCodigoDeServico() { + return codigoDeServico; + } + + public String getNumeroDaEtiqueta() { + return numeroDaEtiqueta; + } + + public String getNumeroDaEtiquetaSemDigitoVerificador() { + return numeroDaEtiqueta.substring(0, 10) + numeroDaEtiqueta.substring(11); + } + + public DestinatarioDoObjetoPlp getDestinatarioDoObjeto() { + return destinatarioDoObjeto; + } + + public Set getCodigoServicosAdicionais() { + return codigoServicosAdicionais; + } + + public Optional getValorDeclaradoParaEncomenda() { + return Optional.ofNullable(valorAdicionalDoSeguro); + } + } diff --git a/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlpBuilder.java b/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlpBuilder.java index 6ed3f96..ed28d41 100644 --- a/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlpBuilder.java +++ b/src/main/java/br/com/correios/api/postagem/plp/ObjetoPlpBuilder.java @@ -1,81 +1,113 @@ package br.com.correios.api.postagem.plp; -import java.math.BigDecimal; +import static com.google.common.collect.Sets.newHashSet; -import br.com.correios.api.postagem.destinatario.DestinatarioDoObjeto; -import br.com.correios.api.postagem.dimensao.DimensoesDoObjeto; -import br.com.correios.api.postagem.plp.EnderecoBuilder.EnderecoComUfBuilder; -import br.com.correios.api.postagem.plp.ObjetoPlpBuilder.ObjetoPlpComServicoAdicionalBuilder; +import java.math.BigDecimal; +import java.util.Set; public class ObjetoPlpBuilder { + private final static String CODIGO_DE_SERVICO_ADICIONAL_SEGURO = "019"; + private final static String CODIGO_DE_SERVICO_REGISTRO_NACIONAL = "025"; + + private DimensoesDoObjetoPlp dimensoesDoObjeto; + private PesoDoObjetoPlp pesoDoObjeto; + private String codigoDeServico; + private String numeroDaEtiqueta; + private DestinatarioDoObjetoPlp destinatarioDoObjeto; + private Set codigoServicosAdicionais = newHashSet(CODIGO_DE_SERVICO_REGISTRO_NACIONAL); + private BigDecimal valorAdicionalDoSeguro; + public ObjetoPlpComDimensoesDoObjetoBuilder comDimensoes(DimensoesDoObjetoPlp dimensoesDoObjeto) { - return null; + this.dimensoesDoObjeto = dimensoesDoObjeto; + return new ObjetoPlpComDimensoesDoObjetoBuilder(this); } - + public class ObjetoPlpComDimensoesDoObjetoBuilder { + private ObjetoPlpBuilder builder; + + private ObjetoPlpComDimensoesDoObjetoBuilder(ObjetoPlpBuilder builder) { + this.builder = builder; + } + public ObjetoPlpComPesoDoObjetoPlpBuilder comPeso(PesoDoObjetoPlp pesoDoObjeto) { - return null; + builder.pesoDoObjeto = pesoDoObjeto; + return new ObjetoPlpComPesoDoObjetoPlpBuilder(builder); } - + } - + public class ObjetoPlpComPesoDoObjetoPlpBuilder { + private ObjetoPlpBuilder builder; + + private ObjetoPlpComPesoDoObjetoPlpBuilder(ObjetoPlpBuilder builder) { + this.builder = builder; + } + public ObjetoPlpComCodigoDeServicoBuilder usandoCodigoDeServico(String codigoDeServico) { - return null; + builder.codigoDeServico = codigoDeServico; + return new ObjetoPlpComCodigoDeServicoBuilder(builder); } - + } - + public class ObjetoPlpComCodigoDeServicoBuilder { + private ObjetoPlpBuilder builder; + + private ObjetoPlpComCodigoDeServicoBuilder(ObjetoPlpBuilder builder) { + this.builder = builder; + } + public ObjetoPlpComNumeroDaEtiquetaBuilder comNumeroDaEtiqueta(String numeroDaEtiqueta) { - // TODO Auto-generated method stub - return null; + builder.numeroDaEtiqueta = numeroDaEtiqueta; + return new ObjetoPlpComNumeroDaEtiquetaBuilder(builder); } - + } - + public class ObjetoPlpComNumeroDaEtiquetaBuilder { + private ObjetoPlpBuilder builder; + + private ObjetoPlpComNumeroDaEtiquetaBuilder(ObjetoPlpBuilder builder) { + this.builder = builder; + } + public ObjetoPlpComDestinatarioBuilder paraDestinatario(DestinatarioDoObjetoPlp destinatarioDoObjetoPlp) { - return null; + builder.destinatarioDoObjeto = destinatarioDoObjetoPlp; + return new ObjetoPlpComDestinatarioBuilder(builder); } - + } - + public class ObjetoPlpComDestinatarioBuilder { - public ObjetoPlp build() { - return null; - } + private ObjetoPlpBuilder builder; - public ObjetoPlpComServicoAdicionalBuilder adicionandoServicoAdicionalComCodigo(String codigoServicoAdicional) { - return null; - } - - } - - public class ObjetoPlpComServicoAdicionalBuilder { + private ObjetoPlpComDestinatarioBuilder(ObjetoPlpBuilder builder) { + this.builder = builder; + } - public ObjetoPlpComValorDeclaradoDoServicoAdicionalBuilder comValorDeclarado(BigDecimal valorDeclaradoDoServicoAdicional) { - return null; + public ObjetoPlpComDestinatarioBuilder adicionandoServicoAdicionalComCodigo(String codigoServicoAdicional) { + builder.codigoServicosAdicionais.add(codigoServicoAdicional); + return new ObjetoPlpComDestinatarioBuilder(builder); } - public ObjetoPlpComServicoAdicionalBuilder adicionandoServicoAdicionalComCodigo(String string) { - return null; + public ObjetoPlpComDestinatarioBuilder comValorAdicionalDoSeguro(BigDecimal valorAdicionalDoSeguro) { + builder.codigoServicosAdicionais.add(CODIGO_DE_SERVICO_ADICIONAL_SEGURO); + builder.valorAdicionalDoSeguro = valorAdicionalDoSeguro; + return new ObjetoPlpComDestinatarioBuilder(builder); } - - } - - public class ObjetoPlpComValorDeclaradoDoServicoAdicionalBuilder { public ObjetoPlp build() { - return null; + return new ObjetoPlp(builder.dimensoesDoObjeto, builder.pesoDoObjeto, builder.codigoDeServico, + builder.numeroDaEtiqueta, builder.destinatarioDoObjeto, builder.codigoServicosAdicionais, + builder.valorAdicionalDoSeguro); } - + } } diff --git a/src/main/java/br/com/correios/api/postagem/plp/Plp.java b/src/main/java/br/com/correios/api/postagem/plp/Plp.java new file mode 100644 index 0000000..bc52693 --- /dev/null +++ b/src/main/java/br/com/correios/api/postagem/plp/Plp.java @@ -0,0 +1,23 @@ +package br.com.correios.api.postagem.plp; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +public class Plp { + + private final Long plpId; + + public Plp(Long plpId) { + this.plpId = plpId; + } + + public Long getPlpId() { + return plpId; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.NO_CLASS_NAME_STYLE); + } + +} diff --git a/src/main/java/br/com/correios/api/postagem/plp/PlpNaoFechadaException.java b/src/main/java/br/com/correios/api/postagem/plp/PlpNaoFechadaException.java new file mode 100644 index 0000000..2110eb1 --- /dev/null +++ b/src/main/java/br/com/correios/api/postagem/plp/PlpNaoFechadaException.java @@ -0,0 +1,10 @@ +package br.com.correios.api.postagem.plp; + +public class PlpNaoFechadaException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public PlpNaoFechadaException(Exception e) { + super("Erro ao tentar fechar a PLP", e); + } +} diff --git a/src/main/java/br/com/correios/api/postagem/xml/XmlPlpParser.java b/src/main/java/br/com/correios/api/postagem/xml/XmlPlpParser.java index 4117c6d..e54019f 100644 --- a/src/main/java/br/com/correios/api/postagem/xml/XmlPlpParser.java +++ b/src/main/java/br/com/correios/api/postagem/xml/XmlPlpParser.java @@ -33,7 +33,7 @@ public String getXmlFrom(Correioslog correiosLog) { Marshaller marshaller = jaxbContext.createMarshaller(); StringWriter writer = new StringWriter(); - marshaller.marshal(marshaller, writer); + marshaller.marshal(correiosLog, writer); return writer.toString(); diff --git a/src/test/java/br/com/correios/api/postagem/CorreiosPostagemApiTest.java b/src/test/java/br/com/correios/api/postagem/CorreiosPostagemApiTest.java index 952f6e8..1f4615b 100644 --- a/src/test/java/br/com/correios/api/postagem/CorreiosPostagemApiTest.java +++ b/src/test/java/br/com/correios/api/postagem/CorreiosPostagemApiTest.java @@ -1,6 +1,7 @@ package br.com.correios.api.postagem; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; import java.math.BigDecimal; @@ -12,13 +13,10 @@ import br.com.correios.Cep; import br.com.correios.api.postagem.cliente.ClienteEmpresa; import br.com.correios.api.postagem.cliente.ContratoEmpresa; -import br.com.correios.api.postagem.destinatario.DestinatarioDoObjeto; -import br.com.correios.api.postagem.dimensao.DimensoesDoObjeto; -import br.com.correios.api.postagem.dimensao.DimensoesDoObjeto.TipoDoObjetoSendoEnviado; -import br.com.correios.api.postagem.plp.DestinatarioDoObjetoPlpBuilder; import br.com.correios.api.postagem.plp.DestinatarioDoObjetoPlp; -import br.com.correios.api.postagem.plp.DimensoesDoObjetoPlpBuilder; +import br.com.correios.api.postagem.plp.DestinatarioDoObjetoPlpBuilder; import br.com.correios.api.postagem.plp.DimensoesDoObjetoPlp; +import br.com.correios.api.postagem.plp.DimensoesDoObjetoPlpBuilder; import br.com.correios.api.postagem.plp.DocumentoPlp; import br.com.correios.api.postagem.plp.Endereco; import br.com.correios.api.postagem.plp.EnderecoBuilder; @@ -26,6 +24,7 @@ import br.com.correios.api.postagem.plp.ObjetoPlpBuilder; import br.com.correios.api.postagem.plp.ObjetoPostado; import br.com.correios.api.postagem.plp.PesoDoObjetoPlp; +import br.com.correios.api.postagem.plp.Plp; import br.com.correios.api.postagem.plp.RemetentePlp; import br.com.correios.api.postagem.plp.RemetentePlpBuilder; import br.com.correios.credentials.CorreiosCredenciais; @@ -37,12 +36,12 @@ public class CorreiosPostagemApiTest { @Before public void startUp() { - credenciais = new CorreiosCredenciais("seu-usuario", "sua-senha"); + credenciais = new CorreiosCredenciais("usuario", "senha"); postagemApi = new CorreiosPostagemApi(credenciais); } @Test - public void deveriaBuscarOClienteDosCorreiosAPartirDasInformacoesDoCadastroDoCliente() throws Exception { + public void deveriaBuscarOClienteDosCorreiosAPartirDasInformacoesDoCadastroDoCliente() { String cnpj = "123456878"; ContratoEmpresa informacoesDeCadastro = new ContratoEmpresa(cnpj, "123456878", "123456878"); @@ -52,14 +51,14 @@ public void deveriaBuscarOClienteDosCorreiosAPartirDasInformacoesDoCadastroDoCli } @Test - public void deveriaBuscarOsDadosDaPlpViaPlpId() throws Exception { + public void deveriaBuscarOsDadosDaPlpViaPlpId() { Optional cliente = postagemApi.buscaDocumentoPlp(67488374L); assertThat(cliente.isPresent()).isTrue(); } @Test - public void deveriaRetornasOsDadosDeUmaEtiquetaEspecificaDadaUmaPlp() throws Exception { + public void deveriaRetornarOsDadosDeUmaEtiquetaEspecificaDadaUmaPlp() { Optional plp = postagemApi.buscaDocumentoPlp(48925409L); Optional objetoPostado = plp.get().getObjetoPostadoComEtiqueta("PJ938918208BR"); @@ -68,7 +67,7 @@ public void deveriaRetornasOsDadosDeUmaEtiquetaEspecificaDadaUmaPlp() throws Exc } @Test - public void deveriaRetornasOsDadosDeUmaEtiquetaEspecificaDadaUmaPlp2() throws Exception { + public void deveriaRetornarUmaPlpInexistenteDadoOsDadosDeUmaEtiquetaInvalida() { long plpIdInextistente = 250045L; Optional plp = postagemApi.buscaDocumentoPlp(plpIdInextistente); @@ -81,54 +80,52 @@ public void deveriaCancelarUmObjetoDePlp() { } @Test - public void testName() { + public void deveriaFecharUmaPlp() { Endereco endereco = new EnderecoBuilder() .cep(new Cep("11045530")) .logradouro("Rua Pindorama") .numero(15) .complemento("apto 31") - .bairro("Boqueirão") + .bairro("Boqueirao") .cidade("Santos") .uf("SP") .build(); - + RemetentePlp remetente = new RemetentePlpBuilder() .comNome("gabriel") .comEmail("gabriel.lima.ads@gmail.com") .comNumeroDeContrato("123") - .comNumeroDeDiretoria("456") + .comNumeroDeDiretoria("72") .comCodigoAdministrativo("") .comEndereco(endereco) .build(); - + DestinatarioDoObjetoPlp destinatario = new DestinatarioDoObjetoPlpBuilder() .comNome("Greg") - .ComEndereco(endereco) + .comEndereco(endereco) .build(); - + PesoDoObjetoPlp peso = PesoDoObjetoPlp.emGramas(BigDecimal.valueOf(1000)); - + DimensoesDoObjetoPlp dimensoes = new DimensoesDoObjetoPlpBuilder() .doTipoEnvelope() .build(); - + ObjetoPlp objetoPlp = new ObjetoPlpBuilder() .comDimensoes(dimensoes) .comPeso(peso) - .usandoCodigoDeServico("04669") - .comNumeroDaEtiqueta("DW123456BR") + .usandoCodigoDeServico("04162") + .comNumeroDaEtiqueta("PP143256624BR") .paraDestinatario(destinatario) - .adicionandoServicoAdicionalComCodigo("025") - .adicionandoServicoAdicionalComCodigo("069") - .comValorDeclarado(BigDecimal.TEN) .build(); - - - postagemApi.novaPlp() + + Plp plp = postagemApi.novaPlp() + .comCartaoDePostagem("numeroDoCartaoDePostagem") .deRemetente(remetente) .adicionandoObjeto(objetoPlp) - .adicionandoObjeto(objetoPlp) .fechaPlp(); + + assertNotNull(plp.getPlpId()); } } diff --git a/src/test/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPITest.java b/src/test/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPITest.java index 20279a9..36744da 100644 --- a/src/test/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPITest.java +++ b/src/test/java/br/com/correios/api/postagem/SoapCorreiosServicoPostagemAPITest.java @@ -26,7 +26,7 @@ import br.com.correios.api.postagem.exception.CorreiosPostagemAutenticacaoException; import br.com.correios.api.postagem.plp.CorreiosLogToDocumentoPlpConverter; import br.com.correios.api.postagem.plp.DocumentoPlp; -import br.com.correios.api.postagem.plp.DocumentoPlpToCorreiosLogConverter; +import br.com.correios.api.postagem.plp.NovaPlpToCorreiosLogConverter; import br.com.correios.api.postagem.webservice.CorreiosClienteApi; import br.com.correios.api.postagem.xml.Correioslog; import br.com.correios.api.postagem.xml.XmlPlpParser; @@ -50,7 +50,7 @@ public class SoapCorreiosServicoPostagemAPITest { @Mock private CorreiosLogToDocumentoPlpConverter documentoPlpConverter; @Mock - private DocumentoPlpToCorreiosLogConverter correiosPlpConverter; + private NovaPlpToCorreiosLogConverter correiosPlpConverter; @Mock private ContratoEmpresa contratoEmpresa; @Mock diff --git a/src/test/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverterTest.java b/src/test/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverterTest.java deleted file mode 100644 index 39ed8aa..0000000 --- a/src/test/java/br/com/correios/api/postagem/plp/DocumentoPlpToCorreiosLogConverterTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package br.com.correios.api.postagem.plp; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class DocumentoPlpToCorreiosLogConverterTest { - - @Test - public void test() { - fail("Not yet implemented"); - } - -} diff --git a/src/test/java/br/com/correios/api/postagem/plp/ObjetoPlpTest.java b/src/test/java/br/com/correios/api/postagem/plp/ObjetoPlpTest.java new file mode 100644 index 0000000..410c793 --- /dev/null +++ b/src/test/java/br/com/correios/api/postagem/plp/ObjetoPlpTest.java @@ -0,0 +1,28 @@ +package br.com.correios.api.postagem.plp; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class ObjetoPlpTest { + + @Mock + private DimensoesDoObjetoPlp dimensoesDoObjetoPlp; + @Mock + private PesoDoObjetoPlp pesoDoObjeto; + @Mock + private DestinatarioDoObjetoPlp destinatarioDoObjetoPlp; + + @Test + public void deveriaRetornarONumeroDaEtiquetaSemDigitoVerificador() { + ObjetoPlp objetoPlp = new ObjetoPlp(dimensoesDoObjetoPlp, pesoDoObjeto, "04162", "SI973006763BR", destinatarioDoObjetoPlp, null, null); + + assertEquals("SI973006763BR", objetoPlp.getNumeroDaEtiqueta()); + assertEquals("SI97300676BR", objetoPlp.getNumeroDaEtiquetaSemDigitoVerificador()); + } + +}