package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.context.RequestContext;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.TransferenciaProdutoDTO;
import br.com.ec.domain.model.Fornecedor;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.NotaFiscal;
import br.com.ec.domain.model.NotaFiscalProduto;
import br.com.ec.domain.model.Produto;
import br.com.ec.domain.model.Transferencia;
import br.com.ec.domain.model.TransferenciaProduto;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.tipos.nfe.TipoModeloNotaFiscal;
import br.com.ec.domain.model.tipos.nfe.TipoNotaFiscal;
import br.com.ec.domain.service.email.impl.GerenciadorEmailImpl;
import br.com.ec.domain.service.fornecedor.FornecedorService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.notafiscal.NotaFiscalProdutoService;
import br.com.ec.domain.service.notafiscal.NotaFiscalService;
import br.com.ec.domain.service.produto.ProdutoService;
import br.com.ec.domain.service.produtodaloja.ProdutoLojaService;
import br.com.ec.domain.service.transferencia.TransferenciaService;
import br.com.ec.domain.service.transferenciaproduto.TransferenciaProdutoService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;
@Named
@Scope
("view")
public class TransferirProdutoBean
extends AbstractBean
<Transferencia
> implements Serializable {
private static final long serialVersionUID = 1L
;
private Loja lojaSelecionada
;
private Long sequencialLojaSelecionada
;
private String senhaUsuarioTransferencia
;
private Usuario usuarioTransferencia
;
private String codigoProduto
;
private Produto produtoSelecionado
;
private TransferenciaProdutoDTO transferenciaProdutoSelecionadoDTO
;
private Integer quantidadeProdutoSelecionado
;
private Boolean indicadorAlterarEstoqueProdutoSelecionado =
true;
private String senhaUsuarioTransporte
;
private String senhaUsuarioReceptor
;
private TransferenciaService transferenciaService
;
private TransferenciaProdutoService transferenciaProdutoService
;
private LojaService lojaService
;
private UsuarioService usuarioService
;
private ProdutoService produtoService
;
private ProdutoLojaService produtoLojaService
;
private NotaFiscalService notaFiscalService
;
private NotaFiscalProdutoService notaFiscalProdutoService
;
private FornecedorService fornecedorService
;
@Inject
public TransferirProdutoBean
(TransferenciaService transferenciaService, TransferenciaProdutoService transferenciaProdutoService,
LojaService lojaService, UsuarioService usuarioService, ProdutoService produtoService, ProdutoLojaService produtoLojaService,
NotaFiscalService notaFiscalService, NotaFiscalProdutoService notaFiscalProdutoService, FornecedorService fornecedorService
) {
this.
transferenciaService = transferenciaService
;
this.
transferenciaProdutoService = transferenciaProdutoService
;
this.
lojaService = lojaService
;
this.
usuarioService = usuarioService
;
this.
produtoService = produtoService
;
this.
produtoLojaService = produtoLojaService
;
this.
notaFiscalService = notaFiscalService
;
this.
notaFiscalProdutoService = notaFiscalProdutoService
;
this.
fornecedorService = fornecedorService
;
}
@
Override
public void preCarregamento
() {
entidade =
new Transferencia
();
entidade.
setLojaEntrada(getLojaSelecionada
());
entidade.
setLojaSaida(getLojaSelecionada
());
setSenhaUsuarioTransferencia
("");
}
@
Override
public void limparEntidade
() {
setEntidade
(new Transferencia
());
setSenhaUsuarioTransferencia
("");
setUsuarioTransferencia
(null);
setLojaSelecionada
(null);
setCodigoProduto
("");
}
@
Override
public GenericService
<Transferencia
> getService
() {
return transferenciaService
;
}
@
Override
public Transferencia getEntidade
() {
return entidade
;
}
@
Override
public Transferencia getId
() {
return getEntidade
();
}
public Loja getLojaSelecionada
() {
if (VerificadorUtil.
estaNulo(lojaSelecionada
)) {
if (VerificadorUtil.
naoEstaNulo(getSequencialLojaSelecionada
())) {
Loja loja =
new Loja
();
loja.
setSequencial(getSequencialLojaSelecionada
());
lojaSelecionada = lojaService.
consultarPorId(loja
);
}
}
return lojaSelecionada
;
}
public void setLojaSelecionada
(Loja lojaSelecionada
) {
this.
lojaSelecionada = lojaSelecionada
;
}
public Long getSequencialLojaSelecionada
() {
if (VerificadorUtil.
naoEstaNulo(getParametro
("sequencialLoja"))) {
setSequencialLojaSelecionada
(new Long(getParametro
("sequencialLoja").
toString()));
}
return sequencialLojaSelecionada
;
}
public void setSequencialLojaSelecionada
(Long sequencialLojaSelecionada
) {
this.
sequencialLojaSelecionada = sequencialLojaSelecionada
;
}
public String getSenhaUsuarioTransferencia
() {
return senhaUsuarioTransferencia
;
}
public void setSenhaUsuarioTransferencia
(String senhaUsuarioTransferencia
) {
this.
senhaUsuarioTransferencia = senhaUsuarioTransferencia
;
}
public Usuario getUsuarioTransferencia
() {
return usuarioTransferencia
;
}
public void setUsuarioTransferencia
(Usuario usuarioTransferencia
) {
this.
usuarioTransferencia = usuarioTransferencia
;
}
public Boolean possuiUsuarioTransferencia
() {
return VerificadorUtil.
naoEstaNulo(getUsuarioTransferencia
());
}
public String getCodigoProduto
() {
return codigoProduto
;
}
public void setCodigoProduto
(String codigoProduto
) {
this.
codigoProduto = codigoProduto
;
}
public Produto getProdutoSelecionado
() {
return produtoSelecionado
;
}
public void setProdutoSelecionado
(Produto produtoSelecionado
) {
this.
produtoSelecionado = produtoSelecionado
;
}
public TransferenciaProdutoDTO getTransferenciaProdutoSelecionadoDTO
() {
return transferenciaProdutoSelecionadoDTO
;
}
public void setTransferenciaProdutoSelecionadoDTO
(TransferenciaProdutoDTO transferenciaProdutoSelecionadoDTO
) {
this.
transferenciaProdutoSelecionadoDTO = transferenciaProdutoSelecionadoDTO
;
}
public Integer getQuantidadeProdutoSelecionado
() {
return quantidadeProdutoSelecionado
;
}
public void setQuantidadeProdutoSelecionado
(Integer quantidadeProdutoSelecionado
) {
this.
quantidadeProdutoSelecionado = quantidadeProdutoSelecionado
;
}
public Boolean getIndicadorAlterarEstoqueProdutoSelecionado
() {
return indicadorAlterarEstoqueProdutoSelecionado
;
}
public void setIndicadorAlterarEstoqueProdutoSelecionado
(Boolean indicadorAlterarEstoqueProdutoSelecionado
) {
this.
indicadorAlterarEstoqueProdutoSelecionado = indicadorAlterarEstoqueProdutoSelecionado
;
}
public String getSenhaUsuarioTransporte
() {
return senhaUsuarioTransporte
;
}
public void setSenhaUsuarioTransporte
(String senhaUsuarioTransporte
) {
this.
senhaUsuarioTransporte = senhaUsuarioTransporte
;
}
public String getSenhaUsuarioReceptor
() {
return senhaUsuarioReceptor
;
}
public void setSenhaUsuarioReceptor
(String senhaUsuarioReceptor
) {
this.
senhaUsuarioReceptor = senhaUsuarioReceptor
;
}
/***************************************************************/
public Integer quantidadeTransferencias
(Loja loja
) {
return transferenciaService.
obterQuantidadeDeTransferenciasAbertas(loja
);
}
@
Override
public void preAlterar
(Transferencia transferencia
) {
limparEntidade
();
transferencia.
setProdutosDTO(transferenciaService.
consultarProdutos(transferencia
));
super.
preAlterar(transferencia
);
}
@
Override
public void preDetalhar
(Transferencia transferencia
) {
limparEntidade
();
transferencia.
setProdutosDTO(transferenciaService.
consultarProdutos(transferencia
));
super.
preDetalhar(transferencia
);
}
public Boolean todosProdutosRecebidos
() {
for (TransferenciaProdutoDTO produto : getEntidade
().
getProdutosDTO()) {
if (!produto.
getRecebido()) {
return false;
}
}
return true;
}
public void retirarVerificacaoProdutos
() {
for (TransferenciaProdutoDTO produto : getEntidade
().
getProdutosDTO()) {
produto.
setRecebido(false);
}
}
public void escolherProduto
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Produto produtoConsultado = produtoService.
consultarProdutoPorCodigoOuCodigoEAN(getCodigoProduto
());
if (VerificadorUtil.
estaNulo(produtoConsultado
)) {
LancadorMensagem.
lancarErro("Produto não encontrado!");
} else {
setProdutoSelecionado
(produtoConsultado
);
setQuantidadeProdutoSelecionado
(1);
RequestContext.
getCurrentInstance().
addCallbackParam("confirmado",
true);
}
}
});
}
public void escolherProduto
(Produto produto
) {
setProdutoSelecionado
(produto
);
setQuantidadeProdutoSelecionado
(1);
setIndicadorAlterarEstoqueProdutoSelecionado
(true);
}
public void adicionarProduto
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransferencia = getUsuarioTransferencia
();
TransferenciaProduto transferenciaProduto =
new TransferenciaProduto
();
transferenciaProduto.
setProduto(getProdutoSelecionado
());
transferenciaProduto.
setQuantidadeTransferir(getQuantidadeProdutoSelecionado
());
transferenciaProduto.
setIndicadorAlterarEstoque(getIndicadorAlterarEstoqueProdutoSelecionado
());
transferenciaProduto.
setIndicadorRecebido(false);
transferenciaProduto.
setTransferencia(getEntidade
());
transferenciaProduto.
setUsuarioSaida(usuarioTransferencia
);
verificarParametros
(transferenciaProduto
);
verificarAlertas
(transferenciaProduto
);
transferenciaProdutoService.
alterar(transferenciaProduto
);
preAlterar
(getEntidade
());
setCodigoProduto
(null);
setUsuarioTransferencia
(usuarioTransferencia
);
LancadorMensagem.
lancarSucesso("Produto adicionado, código: " + getProdutoSelecionado
().
getCodigoProdutoPadrao());
}
});
}
private void verificarAlertas
(TransferenciaProduto transferenciaProduto
) {
Integer estoqueProdutoLojaSaida = produtoLojaService.
consultarEstoqueProdutoEeLoja(transferenciaProduto.
getProduto(), transferenciaProduto.
getTransferencia().
getLojaSaida());
if (estoqueProdutoLojaSaida
< transferenciaProduto.
getQuantidadeTransferir()) {
transferenciaProduto.
setObservacao("QUANTIDADE SUPERIOR AO ESTOQUE");
}
if (estoqueProdutoLojaSaida
< 0) {
transferenciaProduto.
setObservacao("QUANTIDADE SUPERIOR AO ESTOQUE (ESTOQUE NEGATIVO)");
}
}
private void verificarParametros
(TransferenciaProduto transferenciaProduto
) {
if (VerificadorUtil.
estaNulo(transferenciaProduto.
getQuantidadeTransferir()) || transferenciaProduto.
getQuantidadeTransferir().
equals(0)) {
throw new NegocioException
("Obrigatório informar a quantidade para transferência.");
}
verificarSeProdutoJaFoiAdicionado
(transferenciaProduto.
getSequencialDoProduto());
}
protected void verificarSeProdutoJaFoiAdicionado
(Long sequencialProduto
) {
if (getEntidade
().
verificarSeProdutoJaConstaNaLista(sequencialProduto
)) {
throw new NegocioException
("Produto já foi adicionando anteriormente!");
}
}
public void removerProduto
(final TransferenciaProdutoDTO transferenciaProdutoDTO
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransferencia = getUsuarioTransferencia
();
transferenciaProdutoService.
excluirTransferenciaProduto(transferenciaProdutoDTO
);
preAlterar
(getEntidade
());
setUsuarioTransferencia
(usuarioTransferencia
);
LancadorMensagem.
lancarSucesso("Produto removido, código: " + transferenciaProdutoDTO.
getCodigoProdutoPadrao());
}
});
}
public void escolherTransferenciaProduto
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNuloOuVazio(getCodigoProduto
())) {
LancadorMensagem.
lancarErro("Informe o código do produto!");
} else {
boolean produtoLocalizado =
false;
for (TransferenciaProdutoDTO transferenciaProdutoDTO : getEntidade
().
getProdutosDTO()) {
if (transferenciaProdutoDTO.
verificarSeCodigoEhIgual(getCodigoProduto
())) {
setTransferenciaProdutoSelecionadoDTO
(transferenciaProdutoDTO
);
produtoLocalizado =
true;
break;
}
}
if (produtoLocalizado
) {
RequestContext.
getCurrentInstance().
addCallbackParam("confirmado",
true);
} else {
LancadorMensagem.
lancarErro("Produto não localizado!");
}
}
}
});
}
public void receberProduto
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (TransferenciaProdutoDTO transferenciaProdutoDTO : getEntidade
().
getProdutosDTO()) {
if (transferenciaProdutoDTO.
verificarSeCodigoEhIgual(getCodigoProduto
())) {
if (transferenciaProdutoDTO.
getRecebido()) {
LancadorMensagem.
lancarErro("Produto já foi recebido anteriormente!");
break;
}
transferenciaProdutoDTO.
setRecebido(true);
receberProduto
(transferenciaProdutoDTO
);
setCodigoProduto
(null);
LancadorMensagem.
lancarSucesso("Produto recebido com sucesso!");
break;
}
}
}
});
}
public void receberProduto
(final TransferenciaProdutoDTO transferenciaProdutoDTO
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransferencia = getUsuarioTransferencia
();
transferenciaProdutoDTO.
setUsuarioEntrada(usuarioTransferencia
);
transferenciaProdutoService.
receberProduto(transferenciaProdutoDTO, transferenciaProdutoDTO.
getRecebido());
preDetalhar
(getEntidade
());
setUsuarioTransferencia
(usuarioTransferencia
);
}
});
}
public void verificarTodasTransferenciaProduto
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransferencia = getUsuarioTransferencia
();
setEntidade
(transferenciaService.
detalharTransferencia(getEntidade
()));
List<TransferenciaProduto
> produtosRecebidosPosteriormente =
new ArrayList<TransferenciaProduto
>();
for (TransferenciaProduto transferenciaProduto : getEntidade
().
getListaProdutos()) {
if (!transferenciaProduto.
getIndicadorRecebido()) {
produtosRecebidosPosteriormente.
add(transferenciaProduto
);
transferenciaProduto.
setUsuarioEntrada(usuarioTransferencia
);
transferenciaProduto.
setIndicadorRecebido(true);
}
}
getService
().
alterar(getEntidade
());
preDetalhar
(getEntidade
());
setUsuarioTransferencia
(usuarioTransferencia
);
enviarEmailProcedimentoVerificarTudo
(getEntidade
(), usuarioTransferencia, produtosRecebidosPosteriormente
);
}
private void enviarEmailProcedimentoVerificarTudo
(Transferencia tranferencia, Usuario usuarioTransferencia,
List<TransferenciaProduto
> produtosRecebidosPosteriormente
) {
String diaAtual = DataUtils.
converterDataParaString(DataUtils.
getDataAtual());
new GerenciadorEmailImpl
()
.
comEmailsDestino(ConstantesSEC.
DESTINATARIOS_EMAIL_SUPERVISAO)
.
comAssunto("ESPAÇO CASE - RECEBIMENTO VERIFICANDO TUDO : " + diaAtual
)
.
comConteudo(montarDadosDaTransferencia
(tranferencia, usuarioTransferencia, produtosRecebidosPosteriormente
))
.
enviar();
}
private String montarDadosDaTransferencia
(Transferencia tranferencia, Usuario usuarioTransferencia,
List<TransferenciaProduto
> produtosRecebidosPosteriormente
) {
StringBuilder conteudo =
new StringBuilder();
conteudo.
append("OPERAÇÃO REALIZADA POR: " + usuarioTransferencia.
getNome() +
"\n");
conteudo.
append("LOJA ORIGEM: " + tranferencia.
getLojaSaida().
getDescricao() +
"\n");
conteudo.
append("LOJA DESTINO: " + tranferencia.
getLojaEntrada().
getDescricao() +
"\n");
conteudo.
append("DATA DA SOLICITAÇÃO: " + DataUtils.
converterDataComHorarioParaString(tranferencia.
getDataSolicitacao()) +
"\n");
conteudo.
append("__________________________________________________\n\n");
conteudo.
append("ITENS RECEBIDOS VERIFICANDO TUDO: " + produtosRecebidosPosteriormente.
size() +
"\n");
conteudo.
append("__________________________________________________\n");
for (TransferenciaProduto produtoRecebido : produtosRecebidosPosteriormente
) {
conteudo.
append(produtoRecebido.
getProduto().
getCodigoProdutoPadrao() +
" | ");
conteudo.
append(produtoRecebido.
getProduto().
getDescricaoComModeloCompleta() +
", ");
conteudo.
append("QUANTIDADE: " + produtoRecebido.
getQuantidadeTransferir());
conteudo.
append("\n");
}
conteudo.
append("__________________________________________________\n\n");
conteudo.
append("TRANSFERÊNCIA:\n");
conteudo.
append("__________________________________________________\n");
for (TransferenciaProduto transferenciaProduto : tranferencia.
getListaProdutos()) {
conteudo.
append(transferenciaProduto.
getProduto().
getCodigoProdutoPadrao() +
" | ");
conteudo.
append(transferenciaProduto.
getProduto().
getDescricaoComModeloCompleta() +
", ");
conteudo.
append("QUANTIDADE: " + transferenciaProduto.
getQuantidadeTransferir());
conteudo.
append("\n");
}
conteudo.
append("__________________________________________________\n\n");
return conteudo.
toString();
}
});
}
public void solicitarTransferencia
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setConferido(false);
cadastrar
();
}
});
}
public void cadastrarTransferencia
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setConferido(true);
cadastrar
();
}
});
}
public void cadastrar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransferencia = verificarSenhaUsuario
(getSenhaUsuarioTransferencia
());
getEntidade
().
setLojaSaida(getLojaSelecionada
());
getService
().
cadastrar(getEntidade
());
preAlterar
(getEntidade
());
setLojaSelecionada
(getEntidade
().
getLojaSaida());
setUsuarioTransferencia
(usuarioTransferencia
);
LancadorMensagem.
lancarSucesso("TRANSFERÊNCIA INICIADA");
}
});
}
public void alterarSolicitacaoTransferencia
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setUsuarioTransferencia
(verificarSenhaUsuario
(getSenhaUsuarioTransferencia
()));
}
});
}
public void iniciarTransferencia
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setConferido(true);
retirarVerificacaoProdutos
();
alterar
();
LancadorMensagem.
lancarSucesso("TRANSFERÊNCIA INICIADA");
}
});
}
public void solicitarNovamenteTransferencia
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setConferido(false);
retirarVerificacaoProdutos
();
alterar
();
LancadorMensagem.
lancarSucesso("SOLICITAÇÃO DE TRANSFERÊNCIA INICIADA");
}
});
}
private Usuario verificarSenhaUsuario
(String senha
) {
return usuarioService.
consultarUsuarioPorSenha(senha
);
}
public void receberProdutos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
transferenciaService.
receberProdutos(getEntidade
());
setTipoOperacao
(TipoOperacao.
CONSULTAR);
LancadorMensagem.
lancarSucesso("TRANSFERÊNCIA CONCLUÍDA COM SUCESSO");
Transferencia transferencia = transferenciaService.
detalharTransferencia(getEntidade
());
gerarNotaFiscalRemessa
(transferencia
);
limparEntidade
();
}
});
}
public void excluirTransferencia
(final Transferencia transferencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
excluir
(transferencia
);
LancadorMensagem.
lancarSucesso("RANSFERÊNCIA EXCLUÍDA COM SUCESSO");
}
});
}
public void verificarTodosProdutos
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
for (TransferenciaProdutoDTO transferenciaProdutoDTO : getEntidade
().
getProdutosDTO()) {
transferenciaProdutoDTO.
setRecebido(true);
}
LancadorMensagem.
lancarSucesso("Produtos verificados com sucesso!");
}
});
}
public void gerarNotaFiscalRemessa
(final Transferencia transferencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (sePermitidoEnvio
(transferencia
)) {
String numeroNota =
"" + notaFiscalService.
consultarProximoNumeroNotaFiscal(TipoNotaFiscal.
NFE_REMESSA.
getValor(), transferencia.
getLojaSaida().
getPessoaJuridica());
NotaFiscal notaFiscal =
new NotaFiscal
();
notaFiscal.
setNumeroNotaFiscal(new Long(numeroNota
));
notaFiscal.
setTipoModeloNotaFiscal(TipoModeloNotaFiscal.
MODELO_NFE_55.
getValor());
notaFiscal.
setTipoNotaFiscal(TipoNotaFiscal.
NFE_REMESSA.
getValor());
notaFiscal.
setSerie(TipoNotaFiscal.
NFE_REMESSA.
getSerie());
notaFiscal.
setDataHoraEmissao(DataUtils.
getDataAtual());
notaFiscal.
setPessoaEmitente(transferencia.
getLojaSaida().
getPessoaJuridica());
notaFiscal.
setPessoaDestinatario(transferencia.
getLojaEntrada().
getPessoaJuridica());
notaFiscalService.
cadastrar(notaFiscal
);
// ADICIONAR PRODUTOS COM FORNECEDORES APTOS
NotaFiscal notaFiscalRemessa = notaFiscalService.
consultarPeloNumeroEeTipo(notaFiscal.
getNumeroNotaFiscal(), notaFiscal.
getTipoNotaFiscal());
List<Fornecedor
> fornecedoresEmitemNota = fornecedorService.
consultarFornecedoresComEmissaoNota();
List<TransferenciaProduto
> transferenciaProdutos = transferenciaService.
consultarProdutosVerificandoFornecedores(transferencia, fornecedoresEmitemNota
);
for (TransferenciaProduto transferenciaProduto : transferenciaProdutos
) {
NotaFiscalProduto notaFiscalProduto =
new NotaFiscalProduto
();
notaFiscalProduto.
setNotaFiscal(notaFiscalRemessa
);
notaFiscalProduto.
setProduto(transferenciaProduto.
getProduto());
notaFiscalProduto.
setQuantidade(transferenciaProduto.
getQuantidadeTransferir());
notaFiscalProdutoService.
cadastrar(notaFiscalProduto
);
}
transferencia.
setNotaFiscalRemessa(notaFiscalRemessa
);
transferenciaService.
alterar(transferencia
);
LancadorMensagem.
lancarSucesso("NOTA DE REMESSA: INICIADA COM SUCESSO");
}
}
private boolean sePermitidoEnvio
(Transferencia transferencia
) {
if (VerificadorUtil.
estaNulo(transferencia.
getLojaEntrada().
getPessoaJuridica())
|| VerificadorUtil.
estaNulo(transferencia.
getLojaSaida().
getPessoaJuridica())) {
return false;
}
return seEmitenteForMatriz
(transferencia
) && transferencia.
getLojaEntrada().
getReceberNotaFiscalRemessa() && !seCnpjsIguais
(transferencia
);
}
private boolean seEmitenteForMatriz
(final Transferencia transferencia
) {
return transferencia.
getLojaSaida().
getPessoaJuridica().
getCpfCnpj().
equals(ConstantesSEC.
Empresa.
CNPJ_21494821000100);
}
private boolean seCnpjsIguais
(final Transferencia transferencia
) {
return transferencia.
getLojaSaida().
getPessoaJuridica().
getCpfCnpj().
equals(transferencia.
getLojaEntrada().
getPessoaJuridica().
getCpfCnpj());
}
});
}
public void iniciarTransporte
(Transferencia transferencia
) {
setEntidade
(transferencia
);
transferencia.
setProdutosDTO(transferenciaService.
consultarProdutos(transferencia
));
}
public void iniciarTransporte
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioTransporte = usuarioService.
consultarUsuarioPorSenha(getSenhaUsuarioTransporte
());
getEntidade
().
setUsuarioTransportador(usuarioTransporte
);
getEntidade
().
setDataHoraInicioTransporte(DataUtils.
getDataAtual());
transferenciaService.
alterar(getEntidade
());
setSenhaUsuarioTransporte
("");
LancadorMensagem.
lancarSucesso("Iniciando transporte da transferência ID: " + getEntidade
().
getSequencial());
}
});
}
public void receberTransporte
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Usuario usuarioReceptor = usuarioService.
consultarUsuarioPorSenha(getSenhaUsuarioReceptor
());
getEntidade
().
setUsuarioReceptor(usuarioReceptor
);
transferenciaService.
alterar(getEntidade
());
setSenhaUsuarioReceptor
("");
LancadorMensagem.
lancarSucesso("Transferência recebida com sucesso, ID: " + getEntidade
().
getSequencial());
}
});
}
}