Subversion Repositories Integrator Subversion

Rev

Rev 195 | 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.inject.Inject;
import javax.inject.Named;

import org.springframework.context.annotation.Scope;

import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ProdutoHistoricoDTO;
import br.com.ec.domain.dto.ProdutoHistoricoDetalhesDTO;
import br.com.ec.domain.model.FornecedorProduto;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Produto;
import br.com.ec.domain.model.ProdutoLoja;
import br.com.ec.domain.model.tipos.TipoGenero;
import br.com.ec.domain.model.tipos.TipoGeneroProduto;
import br.com.ec.domain.model.tipos.TipoLancamentoHistorico;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.fornecedorproduto.FornecedorProdutoService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.produto.ProdutoService;
import br.com.ec.domain.service.produtodaloja.ProdutoLojaService;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
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 ProdutoDetalheBean extends AbstractBean<Produto> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private ProdutoService produtoService;
        private ProdutoLojaService produtoLojaService;
        private FornecedorProdutoService fornecedorProdutoService;
        private LojaService lojaService;
       
        private Produto produtoSelecionado;
        private List<ProdutoHistoricoDTO> produtosHistorico;
        private List<ProdutoHistoricoDetalhesDTO> produtosHistoricoDetalhes;
        private List<ProdutoHistoricoDetalhesDTO> resumoProdutosHistoricoDetalhes;
       
        private String descricaoDetalhamento;
        private Integer mesesConsultaHistorico;
       
        @Inject
        public ProdutoDetalheBean(ProdutoService produtoService, ProdutoLojaService produtoLojaService,
                        FornecedorProdutoService fornecedorProdutoService, LojaService lojaService, ContextoSeguranca contextoSeguranca) {
                this.produtoService = produtoService;
                this.produtoLojaService = produtoLojaService;
                this.fornecedorProdutoService = fornecedorProdutoService;
                this.lojaService = lojaService;
        }
       
        @Override
        public void preCarregamento() {
                entidade = new Produto();
        }
       
        @Override
        public void limparEntidade() {
                setEntidade(new Produto());
        }

        @Override
        public GenericService<Produto> getService() {
                return produtoService;
        }
       
        @Override
        public Produto getEntidade() {
                return entidade;
        }

        @Override
        public Produto getId() {
                return getEntidade();
        }
       
        public Produto getProdutoSelecionado() {
                return produtoSelecionado;
        }
        public void setProdutoSelecionado(Produto produtoSelecionado) {
                this.produtoSelecionado = produtoSelecionado;
        }
       
        public List<ProdutoHistoricoDTO> getProdutosHistorico() {
                return produtosHistorico;
        }
        public void setProdutosHistorico(List<ProdutoHistoricoDTO> produtosHistorico) {
                this.produtosHistorico = produtosHistorico;
        }
       
        public List<ProdutoHistoricoDetalhesDTO> getProdutosHistoricoDetalhes() {
                return produtosHistoricoDetalhes;
        }
        public void setProdutosHistoricoDetalhes(List<ProdutoHistoricoDetalhesDTO> produtosHistoricoDetalhes) {
                this.produtosHistoricoDetalhes = produtosHistoricoDetalhes;
        }
       
        public List<ProdutoHistoricoDetalhesDTO> getResumoProdutosHistoricoDetalhes() {
                return resumoProdutosHistoricoDetalhes;
        }
        public void setResumoProdutosHistoricoDetalhes(List<ProdutoHistoricoDetalhesDTO> resumoProdutosHistoricoDetalhes) {
                this.resumoProdutosHistoricoDetalhes = resumoProdutosHistoricoDetalhes;
        }
       
        public Integer subtotalResumoDetalhado() {
                Integer subtotal = 0;
                for (ProdutoHistoricoDetalhesDTO detalhado : getProdutosHistoricoDetalhes()) {
                        if (VerificadorUtil.naoEstaNulo(detalhado.getTipoLancamento()) &&
                                        VerificadorUtil.naoEstaNulo(detalhado.getQuantidadeLancamentos())) {
                                if (detalhado.ehTipoLancamentoHistoricoAvarias()) {
                                        subtotal = subtotal - detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoCompras()) {
                                        subtotal = subtotal + detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoContagensEntrada()) {
                                        subtotal = subtotal + detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoContagensSaida()) {
                                        subtotal = subtotal - detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoProducaoEntrada()) {
                                        subtotal = subtotal + detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoProducaoSaida()) {
                                        subtotal = subtotal - detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoTrocas()) {
                                        subtotal = subtotal - detalhado.getQuantidadeLancamentos();
                                }
                                if (detalhado.ehTipoLancamentoHistoricoVendas()) {
                                        subtotal = subtotal - detalhado.getQuantidadeLancamentos();
                                }
                        } else {
                                subtotal++;
                        }
                }
                return subtotal;
        }
       
        public String getDescricaoDetalhamento() {
                return descricaoDetalhamento;
        }
        public void setDescricaoDetalhamento(String descricaoDetalhamento) {
                this.descricaoDetalhamento = descricaoDetalhamento;
        }
       
        public Integer getMesesConsultaHistorico() {
                return mesesConsultaHistorico;
        }
        public void setMesesConsultaHistorico(Integer mesesConsultaHistorico) {
                this.mesesConsultaHistorico = mesesConsultaHistorico;
        }
       
        /***************************************************************/
       
        public Integer consultarEstoque(Produto produto) {
                return produtoLojaService.consultarEstoqueProduto(produto);
        }
       
        public Integer consultarEstoque(Produto produto, Long sequencialLoja) {
                return produtoLojaService.consultarEstoqueProdutoEeLoja(produto, new Loja(sequencialLoja));
        }
       
        public ProdutoLoja consultarProdutoLoja(Produto produto, Long sequencialLoja) {
                return produtoLojaService.consultarProdutoLoja(produto, new Loja(sequencialLoja));
        }
       
        public TipoProduto[] getTiposProduto() {
                return TipoProduto.values();
        }
       
        public TipoGenero[] getTiposGenero() {
                return TipoGenero.values();
        }
       
        public TipoGeneroProduto[] getTiposGeneroProduto() {
                return TipoGeneroProduto.values();
        }
       
        public void consultarHistorico(final Produto produto) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                setProdutoSelecionado(produto);
                                setMesesConsultaHistorico(12);
                                setProdutosHistorico(produtoService.consultarHistorico(produto, getMesesConsultaHistorico()));
                        }
                });
        }
       
        public void detalharHistorico(ProdutoHistoricoDTO produtoHistorico) {
                setDescricaoDetalhamento(TipoLancamentoHistorico.parse(produtoHistorico.getTipoLancamento()).getDescricao());
                setProdutosHistoricoDetalhes(produtoService.detalharHistorico(produtoHistorico));
                montarResumoHistorico();
        }
       
        private void montarResumoHistorico() {
                List<ProdutoHistoricoDetalhesDTO> resumos = new ArrayList<ProdutoHistoricoDetalhesDTO>();
                List<Loja> lojasAtivas = lojaService.listarLojasAtivasEspacoCase();
                for (Loja loja : lojasAtivas) {
                        ProdutoHistoricoDetalhesDTO resumoLoja = new ProdutoHistoricoDetalhesDTO();
                        resumoLoja.setLoja(loja);
                        resumoLoja.setQuantidadeLancamentos(0);
                        resumos.add(resumoLoja);
                }
               
                for (ProdutoHistoricoDetalhesDTO produtoHistoricoDetalhes : getProdutosHistoricoDetalhes()) {
                        for (ProdutoHistoricoDetalhesDTO resumo : resumos) {
                                if (resumo.getLoja().equals(produtoHistoricoDetalhes.getLoja())) {
                                        resumo.setQuantidadeLancamentos(resumo.getQuantidadeLancamentos()+1);
                                }
                        }
                }
                setResumoProdutosHistoricoDetalhes(resumos);
        }
       
        public void excluirVinculo(final FornecedorProduto fornecedorProduto) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                fornecedorProdutoService.excluirPorFornecedorEeProduto(fornecedorProduto);
                                setEntidade(produtoService.detalharProduto(fornecedorProduto.getProduto()));
                                LancadorMensagem.lancarSucesso("VÍNCULO EXCLUÍDO COM SUCESSO");
                        }
                });
        }
       
        public void consultarMaisHistorico() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                setMesesConsultaHistorico(getMesesConsultaHistorico() + 12);
                                setProdutosHistorico(produtoService.consultarHistorico(getProdutoSelecionado(), getMesesConsultaHistorico()));
                        }
                });
        }
       
}