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;
}
}