Subversion Repositories Integrator Subversion

Rev

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

package br.com.ec.domain.service.avaliacao.impl;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.RankingVendedorDTO;
import br.com.ec.domain.model.Avaliacao;
import br.com.ec.domain.model.AvaliacaoFuncionario;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Pendencia;
import br.com.ec.domain.model.Perfil;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.avaliacao.AvaliacaoService;
import br.com.ec.domain.service.email.impl.GerenciadorEmailImpl;
import br.com.ec.domain.service.pendencia.PendenciaService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.infrastructure.repository.AvaliacaoRepository;
import br.com.ec.web.util.DataUtil;

@Service
public class AvaliacaoServiceImpl extends AbstractService<Avaliacao> implements AvaliacaoService {
       
        private AvaliacaoRepository avaliacaoRepository;
       
        private PendenciaService pendenciaService;
        private UsuarioService usuarioService;

        @Autowired
        public AvaliacaoServiceImpl(Validador validador, AvaliacaoRepository avaliacaoRepository, PendenciaService pendenciaService,
                        UsuarioService usuarioService) {
                super(validador);
                this.avaliacaoRepository = avaliacaoRepository;
                this.pendenciaService = pendenciaService;
                this.usuarioService = usuarioService;
        }

        @Override
        protected GenericRepository<Avaliacao> getRepository() {
                return avaliacaoRepository;
        }
       
        @Override
        public Avaliacao detalhar(Avaliacao avaliacao) {
                return avaliacaoRepository.detalhar(avaliacao);
        }
       
        @Override
        public Avaliacao consultarAvaliacaoDaVigencia(Vigencia vigencia) {
                return avaliacaoRepository.consultarAvaliacaoDaVigencia(vigencia);
        }
       
        @Override
        public List<Avaliacao> consultarAvaliacoesDivulgadas() {
                return avaliacaoRepository.consultarAvaliacoesDivulgadas();
        }
       
        @Override
        public void solicitarReavaliacao(RankingVendedorDTO rankingVendedor, String solicitacao) {
                StringBuilder conteudo = new StringBuilder();
                conteudo.append("SOLICITANTE: " + rankingVendedor.getVendedor().getNomeDaPessoa() + "\n");
                conteudo.append("DATA DA SOLICITAÇÃO: " + DataUtil.retornarDataFormatadaEmFormatoTexto("dd/MM/yyyy 'às' HH:mm", DataUtils.getDataAtual()) + "\n");
                conteudo.append("OBSERVAÇÕES: \n");
                conteudo.append(solicitacao);
               
                Pendencia pendencia = new Pendencia();
                pendencia.setDescricao("SOLICITAÇÃO DE REAVALIAÇÃO: " + rankingVendedor.getVendedor().getNomeDaPessoa());
                pendencia.setUsuario(usuarioService.consultarUsuarioPorPessoa(rankingVendedor.getVendedor().getPessoa()));
                pendencia.setData(DataUtils.getDataAtual());
                if (VerificadorUtil.estaNulo(rankingVendedor.getVendedor().getLoja())) {
                        pendencia.setLoja(new Loja(ConstantesSEC.SEQUENCIAL_MATRIZ_ESTOQUE_9.longValue()));
                } else {
                        pendencia.setLoja(rankingVendedor.getVendedor().getLoja());
                }
                Perfil perfilRh = new Perfil();
                perfilRh.setCodigo(ConstantesSEC.PERFIL_RECURSOS_HUMANOS_11);
                pendencia.setPerfil(perfilRh);
                pendenciaService.cadastrar(pendencia);
               
                new GerenciadorEmailImpl()
                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_SUPERVISAO)
                        .comAssunto("SOLICITAÇÃO DE REAVALIAÇÃO")
                        .comConteudo(conteudo.toString())
                        .enviar();
        }
       
        @Override
        public byte[] emitirRelatorioImportacaoFolhaPagamento(ServletContext contexto, Avaliacao avaliacao) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
               
                try {
                        String caminhoArquivo = "/arquivos/modelos/Relatório de Importação - Folha de Pagamento Espaço Case.xls";
                        InputStream arquivo = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(caminhoArquivo);
                        HSSFWorkbook workbook = new HSSFWorkbook(arquivo);
                        HSSFSheet sheet = workbook.getSheetAt(0);
       
                        Iterator rowIterator = sheet.rowIterator();
                        while (rowIterator.hasNext()) {
                                Row row = (Row) rowIterator.next();
                                if (row.getRowNum() < 11) {
                                        continue;
                                } else if (row.getRowNum() < 52) {
                                        Iterator cellIterator = row.cellIterator();
                                        Integer codigoFolha = null;
                                        while (cellIterator.hasNext()) {
                                                Boolean atualizar = true;
                                                Cell cell = (Cell) cellIterator.next();
                                                switch (cell.getColumnIndex()) {
                                                        case 1:
                                                                Integer tipoCelula = cell.getCellType();
                                                                if (tipoCelula.equals(Cell.CELL_TYPE_NUMERIC)) {
                                                                        Double codigo = cell.getNumericCellValue();
                                                                        codigoFolha = codigo.intValue();
                                                                } else {
                                                                        atualizar = false;
                                                                }
                                                                break;
                                                        case 3:
                                                                if (atualizar) {
                                                                        for (AvaliacaoFuncionario avaliacaoFunc : avaliacao.getParticipantes()) {
                                                                                if (avaliacaoFunc.getFuncionario().getCodigoContabilidade().equals(codigoFolha)) {
                                                                                        String valor = StringUtil.formatarValorComDoisDigitos(avaliacaoFunc.getValorComissao().toString());
                                                                                        cell.setCellValue(valor.replace(".", ","));
                                                                                        break;
                                                                                }
                                                                        }
                                                                }
                                                                break;
                                                }
                                        }
                                }
                        }
               
                        try {
                        workbook.write(baos);
                        return baos.toByteArray();
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                                baos.close();
                                arquivo.close();
                                workbook.close();
                        }
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (Exception e) {
                        e.printStackTrace();
                }
               
        return null;
        }
       
}