Subversion Repositories Integrator Subversion

Rev

Rev 127 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.managedbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletContext;

import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;

import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.EtiquetaDTO;
import br.com.ec.domain.model.Compra;
import br.com.ec.domain.model.CompraProduto;
import br.com.ec.domain.model.Produto;
import br.com.ec.domain.service.compraproduto.CompraProdutoService;
import br.com.ec.domain.service.etiqueta.EtiquetaService;
import br.com.ec.domain.service.produto.ProdutoService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.domain.shared.Ordenador;
import br.com.ec.domain.shared.OrdenadorImpl;
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;

@Named
@Scope("view")
public class EtiquetaBean extends AbstractBean<EtiquetaDTO> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private CompraProdutoService compraProdutoService;
        private EtiquetaService etiquetaService;
        private ProdutoService produtoService;

        private List<EtiquetaDTO> etiquetas;
        private Long loteCompra;
        private String codigoProduto;
        private Ordenador ordenador;
       
        @Inject
        public EtiquetaBean(CompraProdutoService compraProdutoService, EtiquetaService etiquetaService, ProdutoService produtoService) {
                this.compraProdutoService = compraProdutoService;
                this.etiquetaService = etiquetaService;
                this.produtoService = produtoService;
                this.ordenador = new OrdenadorImpl();
        }
       
        @Override
        public void preCarregamento() {
                entidade = new EtiquetaDTO();
                parametrosConsulta = new ParametrosConsulta<EtiquetaDTO>();
                parametrosConsulta.setEntidade(entidade);
        }
       
        @Override
        public void limparEntidade() {
                EtiquetaDTO etiqueta = new EtiquetaDTO();
                setEntidade(etiqueta);
                setCodigoProduto("");
        }

        @Override
        public GenericService<EtiquetaDTO> getService() {
                return null;
        }
       
        @Override
        public EtiquetaDTO getEntidade() {
                return entidade;
        }

        @Override
        public EtiquetaDTO getId() {
                return getEntidade();
        }
       
        public List<EtiquetaDTO> getEtiquetas() {
                return etiquetas;
        }
        public void setEtiquetas(List<EtiquetaDTO> etiquetas) {
                this.etiquetas = etiquetas;
        }
       
        public Long getLoteCompra() {
                return loteCompra;
        }
        public void setLoteCompra(Long loteCompra) {
                this.loteCompra = loteCompra;
        }
       
        public String getCodigoProduto() {
                return codigoProduto;
        }
        public void setCodigoProduto(String codigoProduto) {
                this.codigoProduto = codigoProduto;
        }
       
        /***************************************************************/
       
        public void prepararProdutosParaEtiquetas() {
                limparEntidade();
                setEtiquetas(new ArrayList<EtiquetaDTO>());
                preDetalhar(getEntidade());
        }
       
        public void prepararProdutosParaEtiquetas(Compra compra) {
                limparEntidade();
                preencherEtiquetas(compraProdutoService.consultarProdutosDaCompra(compra));
                setEtiquetas((List<EtiquetaDTO>) ordenador.ordenar(getEtiquetas()));
                preDetalhar(getEntidade());
        }
       
        public void preencherEtiquetas(List<CompraProduto> listaCompraProduto) {
                setEtiquetas(new ArrayList<EtiquetaDTO>());
                for (CompraProduto compraProduto : listaCompraProduto) {
                        EtiquetaDTO etiqueta = new EtiquetaDTO();
                        etiqueta.setProduto(compraProduto.getProduto());
                        etiqueta.setQuantidade(compraProduto.getQuantidade());
                        etiqueta.setLote(compraProduto.getCompra().getSequencial());
                        getEtiquetas().add(etiqueta);
                }
        }
       
        public void removerProduto(final EtiquetaDTO etiqueta) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                getEtiquetas().remove(etiqueta);
                                LancadorMensagem.lancarSucesso("Etiqueta removida com sucesso!");
                        }
                });
        }
       
        public void escolherProduto(Produto produto) {
                limparEntidade();
                getEntidade().setProduto(produto);
        }
       
        public void consultarProduto() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                Produto produtoSelecionado = produtoService.consultarProdutoPorCodigoOuCodigoEAN(getCodigoProduto());
                                if (produtoSelecionado != null) {
                                        getEntidade().setProduto(produtoSelecionado);
                                        getEntidade().setLote(getLoteCompra());
                                        adicionandoParametroArgsConfirmandoAcao(true);
                                } else {
                                        LancadorMensagem.lancarErro("Produto não encontrado");
                                }
                        }
                });
        }
       
        public void adicionarEtiqueta() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                if (VerificadorUtil.estaNuloOuVazio(getEntidade().getProduto().getValorVarejo())) {
                                        throw new NegocioException("Não é possível gerar etiqueta sem preço");
                                }
                                getEtiquetas().add(getEntidade());
                                limparEntidade();
                                LancadorMensagem.lancarSucesso("Etiqueta adicionada com sucesso!");
                        }
                });
        }
       
        public StreamedContent emitirEtiquetasComBarras() {
                List<EtiquetaDTO> etiquetas = adicionarEtiquetas();
                return etiquetaService.gerarEtiquetas(etiquetas, ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()), true, false);
        }
       
        public StreamedContent emitirEtiquetasComBarrasAtacado() {
                List<EtiquetaDTO> etiquetas = adicionarEtiquetas();
                return etiquetaService.gerarEtiquetas(etiquetas, ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()), true, true);
        }
       
        public StreamedContent emitirEtiquetasSemBarras() throws Exception {
                List<EtiquetaDTO> etiquetas = adicionarEtiquetas();
                return etiquetaService.gerarEtiquetas(etiquetas, ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()), false, false);
        }

        private List<EtiquetaDTO> adicionarEtiquetas() {
                List<EtiquetaDTO> etiquetas = new ArrayList<EtiquetaDTO>();
                for (EtiquetaDTO etiqueta : getEtiquetas()) {
                        Integer quantidadeEmitir = etiqueta.getQuantidade();
                        for (int i = 1; i <= quantidadeEmitir; i++) {
                                etiquetas.add(etiqueta);
                        }
                }
                return etiquetas;
        }
       
        public int getQuantidadeItens() {
                if (VerificadorUtil.naoEstaNulo(getEtiquetas())) {
                        Integer quantidade = 0;
                        for (EtiquetaDTO etiqueta : getEtiquetas()) {
                                quantidade = quantidade + etiqueta.getQuantidade();
                        }
                        return quantidade;
                }
                return 0;
        }
       
        public int getQuantidadePaginas() {
                return VerificadorUtil.naoEstaNulo(getEtiquetas()) ? getQuantidadeItens() > 0 ? ((getQuantidadeItens() / ConstantesSEC.Etiqueta.QUANTIDADE_MAXIMA_POR_FOLHA) + 1) : 0 : 0;
        }
       
        public int getQuantidadeEtiquetasVazias() {
                return VerificadorUtil.naoEstaNulo(getEtiquetas()) ? getQuantidadeItens() > 0 ? (ConstantesSEC.Etiqueta.QUANTIDADE_MAXIMA_POR_FOLHA - (getQuantidadeItens() % ConstantesSEC.Etiqueta.QUANTIDADE_MAXIMA_POR_FOLHA)) : 0 : 0;
        }
       
}