package br.com.centralit.controller;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import br.com.centralit.api.model.EventoAditivo;
import br.com.centralit.api.service.DominioService;
import br.com.centralit.api.service.EventoAditivoService;
import br.com.centralit.api.service.InternacionalizacaoService;
import br.com.centralit.api.viewHelper.ViewsContrato;
import br.com.centralit.framework.controller.GenericController;
import br.com.centralit.framework.controller.ReportController;
import br.com.centralit.framework.exception.BusinessException;
import br.com.centralit.framework.json.ResponseBodyWrapper;
import br.com.centralit.framework.model.Dominio;
import br.com.centralit.framework.model.Usuario;
import br.com.centralit.framework.util.UtilDataBase;
/**
*
*

*
* Company: Central IT - Governança Corporativa -
*
* Title:
*
* Description:
*
* Iniciativa(s): NUMERO_INICIATIVA
*
* Regra(s) de negócio: NUMERO_REGRA_DE_NEGOCIO
*
* @since 15/03/2016 - 18:30:22
*
* @version 1.0.0
*
* @author geovane.filho
*
*/
@Controller
@RequestMapping("/rest/eventoAditivo")
public class EventoAditivoController extends GenericController{
private EventoAditivoService eventoAditivoService;
@Autowired
private DominioService dominioService;
@Autowired
private InternacionalizacaoService internacionalizacaoService;
@Autowired
private ReportController reportController;
public EventoAditivoController() {
super();
}
@Autowired
public EventoAditivoController(EventoAditivoService eventoAditivoService) {
super(eventoAditivoService);
this.eventoAditivoService = eventoAditivoService;
}
@Override
public Class getEditView() {
return ViewsContrato.EventoAditivoEditView.class;
}
@RequestMapping(value = "/findAllByContrato", method = RequestMethod.POST)
@ResponseBody
public ResponseBodyWrapper findAllByContrato(@RequestBody Long contratoId) {
Collection aditivos = this.eventoAditivoService.findAllByContrato(contratoId);
ResponseBodyWrapper responseBody = new ResponseBodyWrapper(aditivos, ViewsContrato.EventoAditivoEditView.class);
return responseBody;
}
@RequestMapping(method = RequestMethod.GET, value = "/gerarAditivo")
@ResponseBody
public void generatePdfRMB(@RequestParam(value="idAditivo") Long idAditivo, @RequestParam(value="download") boolean download, HttpServletResponse response,
HttpServletRequest request) throws SQLException, JRException, IOException {
Dominio idioma = this.dominioService.findByChaveAndCodigo(Dominio.TIPO_IDIOMA, Dominio.TIPO_IDIOMA_PT_BR_CODIGO);
Usuario user = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Connection conn = null;
ByteArrayOutputStream baos = null;
try {
conn = reportController.getConnection();
String titulo = this.internacionalizacaoService.getTranslate("CONTRATOS.LABEL.TITULO_RELATORIO_ADITIVO", idioma);
JasperPrint jasperPrint = this.eventoAditivoService.getJasperPrintAditivo(idAditivo, conn, user, titulo);
// Responsavel por verificar a presenca de dados no relatorio
reportController.gerarRelatorio(download, "pdf", jasperPrint, response, baos, titulo);
} catch (JRException jre) {
throw new RuntimeException(jre);
} catch (Exception e) {
throw new BusinessException();
}finally {
UtilDataBase.closeResources(conn, baos);
}
}
@RequestMapping(value = "/permiteExclusaoAditivo", method = RequestMethod.GET)
@ResponseBody
public Boolean permiteExclusaoAditivo(@RequestParam(value="aditivoId") Long idAditivo) {
return this.eventoAditivoService.permiteExclusaoAditivo(idAditivo);
}
@RequestMapping(value = "/existeAditivoPrazoPosterior", method = RequestMethod.GET)
@ResponseBody
public Boolean existeAditivoPrazoPosterior(@RequestParam(value="aditivoId") Long idAditivo) {
return this.eventoAditivoService.existeAditivoPrazoPosterior(idAditivo);
}
}