package br.com.citframework.integracao;
import java.math.BigDecimal;
import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citcorpore.bean.ContratosGruposDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.ContratosGruposService;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.LookupDTO;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Campo;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.LookupFieldUtil;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilFormatacao;
public class LookupProcessContrato extends LookupProcessDefaultDao {
@SuppressWarnings({ "rawtypes", "unchecked" })
public List processLookup(LookupDTO lookupObject) throws LogicException, Exception{
String sql = "";
// Collection colRetorno = new ArrayList();
LookupFieldUtil lookUpField = new LookupFieldUtil();
Collection colCamposRet = lookUpField.getCamposRetorno(lookupObject.getNomeLookup());
Iterator itRet = colCamposRet.iterator();
Campo cp;
while (itRet.hasNext()) {
cp = (Campo) itRet.next();
if (!sql.equalsIgnoreCase("")) {
sql = sql + ",";
}
sql = sql + cp.getNomeFisico();
}
sql = "SELECT " + sql;
sql += " FROM CONTRATOS PRJ INNER JOIN CLIENTES CLI on CLI.idCliente = PRJ.idCliente INNER JOIN Fornecedor FORN on FORN.idFornecedor = PRJ.idFornecedor ";
String where = " (PRJ.deleted IS NULL or PRJ.deleted = 'N')";
ContratosGruposService contratosGruposService = (ContratosGruposService) ServiceLocator.getInstance().getService(ContratosGruposService.class, null);
String COLABORADORES_VINC_CONTRATOS = ParametroUtil.getValorParametroCitSmartHashMap(br.com.centralit.citcorpore.util.Enumerados.ParametroSistema.COLABORADORES_VINC_CONTRATOS, "N");
if (COLABORADORES_VINC_CONTRATOS == null)
COLABORADORES_VINC_CONTRATOS = "N";
if (COLABORADORES_VINC_CONTRATOS.equalsIgnoreCase("S")) {
where += " AND PRJ.idContrato in (-1";
UsuarioDTO usuarioDto = (UsuarioDTO) lookupObject.getUser();
if (usuarioDto != null) {
Collection<ContratosGruposDTO> colContratosColab = contratosGruposService.findByIdEmpregado(usuarioDto.getIdEmpregado());
if (colContratosColab != null) {
for (ContratosGruposDTO contratosGruposDto : colContratosColab) {
where += ","+contratosGruposDto.getIdContrato();
}
}
}
where += ")";
}
Collection colCamposPesq = lookUpField.getCamposPesquisa(lookupObject.getNomeLookup());
Iterator itPesq = colCamposPesq.iterator();
String obj = null;
int count = 1;
while (itPesq.hasNext()) {
cp = (Campo) itPesq.next();
obj = null;
obj = this.getValueParmLookup(lookupObject, count);
if (obj != null) {
String[] trataGetNomeFisico = cp.getNomeFisico().split("\\.");
String nomeFisico = cp.getNomeFisico();
if (trataGetNomeFisico.length > 1) {
cp.setNomeFisico(trataGetNomeFisico[1]);
nomeFisico = trataGetNomeFisico[0] + "." + trataGetNomeFisico[1];
}
if (!obj.equalsIgnoreCase("")) {
if (!where.equalsIgnoreCase("")) {
where = where + " AND ";
}
if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXT").trim()) || cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXTAREA").trim())) {
String func = Constantes.getValue("FUNCAO_CONVERTE_MAIUSCULO");
if (func != null && !func.trim().equalsIgnoreCase("")) {
where = where + func + "(" + nomeFisico + ")";
} else {
where = where + cp.getNomeFisico();
}
where = where + " LIKE '%";
} else {
if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_COMBO").trim())) {
where = where + cp.getNomeFisico();
where = where + " IN (";
} else if (cp.getType().equalsIgnoreCase("DATE")) {
where = where + cp.getNomeFisico();
where = where + " = '";
} else {
where = where + nomeFisico;
where = where + " = ";
}
}
if (cp.isSomenteBusca()) {
obj = obj.trim();
obj = obj.toUpperCase();
obj = Normalizer.normalize(obj, Normalizer.Form.NFD);
obj = obj.replaceAll("[^\\p{ASCII}]", "");
}
if (StringUtils.contains(obj, "'") && !cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_COMBO").trim())) {
obj = StringEscapeUtils.escapeSql(obj);
}
where = where + obj;
if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXT").trim()) || cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXTAREA").trim())) {
where = where + "%'";
} else if (cp.getType().equalsIgnoreCase("DATE")) {
where = where + "'";
} else if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_COMBO").trim())) {
where = where + ")";
}
}
}
count++;
}
String strAux;
if (!where.equalsIgnoreCase("")) {
sql = sql + " WHERE " + where;
strAux = lookUpField.getWhere(lookupObject.getNomeLookup());
if (!strAux.equalsIgnoreCase("")) {
sql = sql + " AND ";
sql = sql + strAux;
}
} else {
strAux = lookUpField.getWhere(lookupObject.getNomeLookup());
if (!strAux.equalsIgnoreCase("")) {
sql = sql + " WHERE " + strAux;
}
}
Collection colCamposOrd = lookUpField.getCamposOrdenacao(lookupObject.getNomeLookup());
Iterator itOrd = colCamposOrd.iterator();
String ordem = "";
while (itOrd.hasNext()) {
cp = (Campo) itOrd.next();
if (!ordem.equalsIgnoreCase("")) {
ordem = ordem + ",";
}
ordem = ordem + cp.getNomeFisico();
}
if (!ordem.equalsIgnoreCase("")) {
sql = sql + " ORDER BY " + ordem;
}
sql = sql.toUpperCase();
List lista = execSQL(sql, null);
if (lista == null || lista.size() == 0) {
TransactionControler tc = this.getTransactionControler();
if (tc != null) {
tc.close();
}
return null;
}
// Processa o resultado.
List result = new ArrayList();
if (lista == null || lista.size() == 0) {
TransactionControler tc = this.getTransactionControler();
if (tc != null) {
tc.close();
}
return result;
}
if (lista.size() > 400) {
TransactionControler tc = this.getTransactionControler();
if (tc != null) {
tc.close();
}
throw new LogicException("citcorpore.comum.consultaEstourouLimite");
}
Iterator it = lista.iterator();
Campo campoAux;
int i;
Collection colAux;
Object auxObj;
while (it.hasNext()) {
Object[] row = (Object[]) it.next();
itRet = colCamposRet.iterator();
i = 0;
campoAux = null;
colAux = new ArrayList();
while (itRet.hasNext()) {
cp = (Campo) itRet.next();
campoAux = new Campo(cp.getNomeFisico(), cp.getDescricao(), cp.isObrigatorio(), cp.getType(), cp.getTamanho());
if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXT").trim()) || cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_TEXTAREA").trim())) {
if (row[i] == null) {
auxObj = new String("");
} else {
String str = new String(row[i].toString());
auxObj = str.replaceAll("\"", """).replaceAll("'", "´");
/*
* alteracao feita por Cleon, pois ao tentar restaurar atrav�s de uma lookup um elemento textarea com quebra de linha, o setretorno nao estava comportando de forma correta
* disparando um erro
*/
auxObj = str.replaceAll("\n", " ");
}
campoAux.setObjValue(auxObj);
} else if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_DATE").trim())) {
if (row[i] == null) {
campoAux.setObjValue(null);
} else {
auxObj = row[i];
if ((auxObj instanceof java.sql.Date)) {
campoAux.setObjValue(UtilDatas.dateToSTR((java.sql.Date) auxObj));
} else if ((auxObj instanceof java.sql.Timestamp)) {
campoAux.setObjValue(UtilDatas.dateToSTR((java.sql.Timestamp) auxObj));
} else {
campoAux.setObjValue(auxObj.toString());
}
}
} else if (cp.getType().equalsIgnoreCase(Constantes.getValue("FIELDTYPE_MOEDA").trim())) {
if (row[i] == null) {
campoAux.setObjValue(null);
} else {
auxObj = row[i];
String valorTransf = null;
if ((auxObj instanceof Double)) {
valorTransf = UtilFormatacao.formatBigDecimal(new BigDecimal(((Double) auxObj).doubleValue()), 2);
} else if ((auxObj instanceof BigDecimal)) {
valorTransf = UtilFormatacao.formatBigDecimal(((BigDecimal) auxObj), 2);
} else {
valorTransf = auxObj.toString();
}
campoAux.setObjValue(valorTransf);
}
}
colAux.add(campoAux);
i++;
}
result.add(colAux);
}
TransactionControler tc = this.getTransactionControler();
if (tc != null) {
tc.close();
}
return result;
}
}