public static String generateFilter(String field, String[] values) { /* * Ejemplo: * * (SPAC_EXPEDIENTES.NUMEXP='EXP2011/000002' OR SPAC_EXPEDIENTES.NUMEXP='EXP2011/000005' OR * SPAC_EXPEDIENTES.NUMEXP='EXP2011/000001' OR SPAC_EXPEDIENTES.NUMEXP='EXP2011/000003' OR * SPAC_EXPEDIENTES.NUMEXP='EXP2011/000006' OR SPAC_EXPEDIENTES.NUMEXP='EXP2011/000004') */ StringBuffer filter = new StringBuffer(); if (!ArrayUtils.isEmpty(values)) { filter.append("("); filter.append(field).append("='").append(DBUtil.replaceQuotes(values[0])).append("'"); for (int i = 1; i < values.length; i++) { filter .append(" OR ") .append(field) .append("='") .append(DBUtil.replaceQuotes(values[i])) .append("'"); } filter.append(")"); } return filter.toString(); }
public void deletePermission(int typeObject, int idObject, String resp, int typePermission) throws ISPACException { StringBuffer sqlWhere = new StringBuffer(); CollectionDAO objlist = null; sqlWhere.append(" WHERE PERMISO= ").append(typePermission); switch (typePermission) { case ISecurityAPI.PERMISSION_INIT_EXP_PCD: case ISecurityAPI.PERMISSION_DELETE_EXP_PCD: sqlWhere .append(" AND ID_PCD = ") .append(idObject) .append(" AND UID_USR = '******' "); objlist = new CollectionDAO(PermissionsDAO.class); objlist.delete(mDbCnt, sqlWhere.toString()); break; default: sqlWhere .append(" AND TP_OBJ = ") .append(typeObject) .append(" AND ID_OBJ = ") .append(idObject) .append(" AND ID_RESP = '") .append(DBUtil.replaceQuotes(resp)) .append("' "); objlist = new CollectionDAO(PermissionDAO.class); objlist.delete(mDbCnt, sqlWhere.toString()); } }
/** * Obtener el contenido del documento que tenga asignado el CSV recibido. * * @param context Contexto de tramitación. * @param csv CSV del documento * @return Contenido del documento. * @throws ISPACException Si se produce algún error. */ public static byte[] getContenidoDocumento(IClientContext context, String csv) throws ISPACException { // Contenido del documento byte[] content = null; // Consulta String sqlQuery = "WHERE COD_COTEJO = '" + DBUtil.replaceQuotes(csv) + "'"; IItemCollection documents = context.getAPI().getEntitiesAPI().queryEntities(SpacEntities.SPAC_DT_DOCUMENTOS, sqlQuery); if (documents.next()) { IItem document = documents.value(); // Obtener el identificador del documento en el repositorio String guid = document.getString("INFOPAG_RDE"); if (StringUtils.isBlank(guid)) { guid = document.getString("INFOPAG"); } // Obtener el contenido del documento content = ieci.tdw.ispac.services.helpers.DocumentsHelper.getContenidoDocumento(context, guid); } return content; }
/** * Valida la información del formulario. * * @throws ISPACException si ocurre algún error. */ public boolean validate() throws ISPACException { boolean ret = super.validate(); if (ret) { IInvesflowAPI invesFlowAPI = mContext.getAPI(); ICatalogAPI catalogAPI = invesFlowAPI.getCatalogAPI(); // Bloqueo de la tabla catalogAPI.setCTEntitiesForUpdate(ICatalogAPI.ENTITY_CT_STAGE, ""); // Nombre único de fase String nombre = getString("NOMBRE"); IItemCollection itemcol = catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_CT_STAGE, " WHERE NOMBRE = '" + DBUtil.replaceQuotes(nombre) + "' AND ID != " + getString("ID")); if (itemcol.next()) { addError( new ValidationError( "property(NOMBRE)", "error.stage.nameDuplicated", new String[] {nombre})); return false; } return true; } else { return false; } }
public IItemCollection getSubstitutesHistorics(String sustitutoUID) throws ISPACException { CollectionDAO collDAO = SustitucionDAO.getSustitutosHistorics( mDbCnt, sustitutoUID, DBUtil.getToDateByBD(mDbCnt, new Date(System.currentTimeMillis()))); return collDAO.disconnect(); }
public static String addInResponsibleOrExistPermissionCondition(String resp) throws ISPACException { String sql = " "; // Obtener la condición SQL de responsabilidad y de permisos // siempre que la responsabilidad no sea de Supervisor if (StringUtils.isNotBlank(resp) && !Responsible.SUPERVISOR.equalsIgnoreCase(resp)) { String sqlResponsibles = DBUtil.addInResponsibleCondition("ID_RESP", resp); // Añadir la responsabilidad y consultar los permisos asignados sql = getSqlInResponsibleOrExistPermissionCondition( sqlResponsibles, DBUtil.addInResponsibleCondition("SPC_PERMS.ID_RESP", resp)); } return sql; }
public static int countProcess(DbCnt cnt, String numexp, String query) throws ISPACException { String sql = "WHERE "; if (StringUtils.isNotBlank(numexp)) { sql += " NUMEXP = '" + DBUtil.replaceQuotes(numexp) + "'"; } if (sql != null && sql.length() > 0) sql += query; CollectionDAO objlist = new CollectionDAO(TXProcesoDAO.class); return objlist.count(cnt, sql); }
private static IItemCollection getProcess(DbCnt cnt, String numexp, ClientContext ctx, int type) throws ISPACException { Object[] argsarr = new Object[1]; argsarr[0] = ctx; String sql = "WHERE NUMEXP = '" + DBUtil.replaceQuotes(numexp) + "' AND TIPO = " + type; CollectionDAO objlist = new CollectionDAO(TXProcesoDAO.class, argsarr); objlist.query(cnt, sql); return objlist.disconnect(); }
public static CollectionDAO getOutdatedProcess(DbCnt cnt) throws ISPACException { String sql = new StringBuffer("WHERE ESTADO=") .append(IProcess.OPEN) .append(" AND FECHA_LIMITE <= ") .append(DBUtil.getToDateByBD(cnt, new Date())) .append(" ORDER BY ID ASC ") .toString(); CollectionDAO objlist = new CollectionDAO(TXProcesoDAO.class); objlist.query(cnt, sql); return objlist; }
/** * Comprobar si existe un documento que tenga asignado el CSV recibido. * * @param context Contexto de tramitación. * @param csv CSV del documento * @return Cierto si existe un documento con el CSV asignado en su Código de Cotejo, en caso * contrario, retorna falso. * @throws ISPACException Si se produce algún error. */ public static boolean existeDocumento(IClientContext context, String csv) throws ISPACException { boolean existe = false; // Consulta String sqlQuery = "WHERE COD_COTEJO = '" + DBUtil.replaceQuotes(csv) + "'"; int count = context.getAPI().getEntitiesAPI().countEntities(SpacEntities.SPAC_DT_DOCUMENTOS, sqlQuery); if (count > 0) { existe = true; } return existe; }
public static IItemCollection getExpedients( DbCnt cnt, String query, int limit, String fechaInicio, String fechaEliminacion, int idProcedimiento) throws ISPACException { TableJoinFactoryDAO factory = new TableJoinFactoryDAO(); factory.addTable(TABLENAME, "PROCESOS"); factory.addTable("SPAC_P_PROCEDIMIENTOS", "PPROCEDIMIENTOS"); String sql = " WHERE PPROCEDIMIENTOS.ID = PROCESOS.ID_PCD" + " AND " + query; // Fecha de inicio if (StringUtils.isNotBlank(fechaInicio)) { sql += " AND PROCESOS.FECHA_INICIO >= " + DBUtil.getToTimestampByBD(cnt, fechaInicio); } // Fecha de eliminacion if (StringUtils.isNotBlank(fechaEliminacion)) { sql += " AND PROCESOS.FECHA_ELIMINACION <= " + DBUtil.getToTimestampByBD(cnt, fechaEliminacion); } if (idProcedimiento != -1) { sql += " AND PROCESOS.ID_PCD=" + idProcedimiento; } sql += " ORDER BY PPROCEDIMIENTOS.NOMBRE"; return factory.queryTableJoin(cnt, sql, limit).disconnect(); }
/** * Devuelve cierto si el usuario tiene el permiso * * @param respList cadena de responsabilidad * @param type Tipo de permiso a comprobar 0-->Eliminar expediente (enviar a la papelera) * 1->Iniciar expediente * @param idpcd Identificador del procedimiento para el que se va a comprobar el permiso * @return Cierto si el usuario tiene el permiso, falso en caso contrario * @throws ISPACException */ public boolean isPermission(String respList, int type, int idpcd) throws ISPACException { if (!respList.equals(Responsible.SUPERVISOR)) { String sql = "WHERE ID_PCD = " + idpcd + DBUtil.addAndInResponsibleCondition("UID_USR", respList) + " AND PERMISO=" + type; CollectionDAO objlist = new CollectionDAO(PermissionsDAO.class); return objlist.exist(mDbCnt, sql); } return false; }
/** * Elimina todos los permisos de un responsable para un idObject en particular. * * @param typeObject * @param idObject * @param resp * @throws ISPACException */ public void deletePermission(int typeObject, int idObject, String resp) throws ISPACException { StringBuffer sqlWhere = new StringBuffer(); sqlWhere .append(" WHERE ") .append(" TP_OBJ = ") .append(typeObject) .append(" AND ID_OBJ = ") .append(idObject) .append(" AND ID_RESP = '") .append(DBUtil.replaceQuotes(resp)) .append("' "); CollectionDAO objlist = new CollectionDAO(PermissionDAO.class); objlist.delete(mDbCnt, sqlWhere.toString()); }
public CollectionDAO getSubprocess(DbCnt cnt, String numexp) throws ISPACException { try { String sql = "WHERE NUMEXP = '" + DBUtil.replaceQuotes(numexp) + "' AND TIPO=" + IProcess.SUBPROCESS_TYPE; ; CollectionDAO objlist = new CollectionDAO(TXProcesoDAO.class); objlist.query(cnt, sql); return objlist; } catch (ISPACException e) { throw new ISPACException("Error en TXProcesoDAO:getSubprocess()", e); } }
public List validate(String name, SessionAPI session) throws ISPACException { ArrayList mErrorList = new ArrayList(); ValidationError error = null; if (StringUtils.isBlank(name)) { error = new ValidationError( "property(NEW_CALENDAR_NAME)", "errors.required", new String[] { Messages.getString( session.getClientContext().getAppLanguage(), "form.calendar.propertyLabel.name") }); mErrorList.add(error); } else { IInvesflowAPI invesFlowAPI = session.getAPI(); ICatalogAPI catalogAPI = invesFlowAPI.getCatalogAPI(); // Bloqueo IItemCollection itemcol = catalogAPI.queryCTEntities(ICatalogAPI.ENTITY_SPAC_CALENDARIOS, ""); // Nombre único de calendario itemcol = (IItemCollection) catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_SPAC_CALENDARIOS, " WHERE NOMBRE = '" + DBUtil.replaceQuotes(name) + "'"); if (itemcol.next()) { error = new ValidationError( "property(NEW_CALENDAR_NAME)", "error.calendar.nameDuplicated", new String[] {name}); mErrorList.add(error); } } return mErrorList; }
/* (non-Javadoc) * @see ieci.tdw.ispac.api.IWorklistAPI#getCreateProcedures() */ public IItemCollection getCreateProcedures() throws ISPACException { // Si es supervisor podra crear todos, sino le corresponderan los suyos y y los que pueden crear // los que sustituye String resp = null; DbCnt cnt = context.getConnection(); try { Responsible user = context.getUser(); SecurityMgr securityMgr = new SecurityMgr(cnt); // Comprobar si el usuario tiene asignada la función de Supervisor Total if (securityMgr.isSupervisorTotal(user.getUID())) { resp = Responsible.SUPERVISOR; } else { // los que sustituye resp = getSubstitutesRespString(); } CollectionDAO pcdset = new CollectionDAO(PProcedimientoDAO.class); /* Procedimientos en vigor */ String sqlquery = "WHERE ESTADO=" + IProcedure.PCD_STATE_CURRENT + " AND TIPO=" + IProcedure.PROCEDURE_TYPE + " AND ID IN" + " (SELECT ID_PCD FROM SPAC_SS_PERMISOS WHERE PERMISO=" + ISecurityAPI.ISPAC_RIGHTS_CREATEEXP + DBUtil.addAndInResponsibleCondition("UID_USR", resp) + ") ORDER BY NOMBRE"; pcdset.query(cnt, sqlquery); return pcdset.disconnect(); } catch (ISPACException ie) { throw new ISPACException("Error en WLWorklist:getProcs()", ie); } finally { context.releaseConnection(cnt); } }
public boolean isInResponsibleList(String sUID, int supervisionType, IItem item) throws ISPACException { DbCnt cnt = context.getConnection(); List listSupervisados = new ArrayList(); List listSustituidos = new ArrayList(); int i = 0; try { // Comprobar el UID en la cadena de responsabilidad directa del usuario Responsible user = context.getUser(); if (user.isInResponsibleList(sUID)) { return true; } if (mWorkMode == IWorklistAPI.SUPERVISOR) { SecurityMgr securityMgr = new SecurityMgr(cnt); // Comprobar si el usuario es Supervisor en Modo Modificación if (securityMgr.isFunction(user.getUID(), ISecurityAPI.FUNC_TOTALSUPERVISOR)) { return true; } // Comprobar si el usuario es Supervisor en Modo Consulta, si aplica if ((supervisionType != ISecurityAPI.SUPERV_TOTALMODE) && securityMgr.isFunction(user.getUID(), ISecurityAPI.FUNC_MONITORINGSUPERVISOR)) { return true; } // Comprobar las responsabilidades referentes a las supervisiones IItemCollection collection = null; if (supervisionType == ISecurityAPI.SUPERV_TOTALMODE) { collection = securityMgr.getAllSuperviseds(user, ISecurityAPI.SUPERV_TOTALMODE); } else { collection = securityMgr.getAllSuperviseds(user); } while (collection.next()) { IItem supervisor = (IItem) collection.value(); listSupervisados = getRespListFromEntryUID(supervisor.getString("UID_SUPERVISADO")); if (listSupervisados.contains(sUID)) { return true; } } // Comprobar las responsabilidades referentes a las sustituciones collection = securityMgr.getAllSubstitutes(user); while (collection.next()) { IItem substitute = (IItem) collection.value(); listSustituidos = getRespListFromEntryUID(substitute.getString("UID_SUSTITUIDO")); if (listSustituidos.contains(sUID)) return true; } // Comprobar si tenemos permisos a nivel de catálogo if (item != null) { if (logger.isDebugEnabled()) { logger.debug( "El responsable " + sUID + "No tiene permisos genéricos, " + "vamos a comprobar si tiene permisos a nivel" + "de catálogo (permisos sobre un procedimiento)"); } ISecurityAPI securityAPI = context.getAPI().getSecurityAPI(); int[] permisos = new int[1]; permisos[0] = ISecurityAPI.PERMISSION_TYPE_EDIT; // Componemos la cadena de responsabilidad separada por comas List resp = user.getRespList(); String cadenaResp = ""; // Al menos esta el propio usuario cadenaResp = "'" + DBUtil.replaceQuotes(resp.get(0).toString()) + "'"; for (i = 1; i < resp.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(resp.get(i).toString()) + "'"; } for (i = 0; i < listSupervisados.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(listSupervisados.get(i).toString()) + "'"; } for (i = 0; i < listSustituidos.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(listSustituidos.get(i).toString()) + "'"; } // Item puede ser IProcess , IStage , ITask if (item instanceof ITask) { return securityAPI.existPermissions((ITask) item, cadenaResp, permisos); } else if (item instanceof IStage) { if (IPcdElement.TYPE_SUBPROCEDURE == item.getInt("TIPO")) { IInvesflowAPI api = context.getAPI(); IEntitiesAPI entitiesAPI = api.getEntitiesAPI(); String sql = "WHERE TIPO=" + IPcdElement.TYPE_PROCEDURE + " AND"; sql += " NUMEXP = '" + DBUtil.replaceQuotes(item.getString("NUMEXP")) + "'"; IItemCollection col = entitiesAPI.queryEntities(SpacEntities.SPAC_FASES, sql); if (col.next()) { IItem fasePadre = col.value(); int id = fasePadre.getKeyInt(); IStage stage = api.getStage(id); return securityAPI.existPermissions(stage, cadenaResp, permisos); } } return securityAPI.existPermissions((IStage) item, cadenaResp, permisos); } else if (item instanceof IProcess) { return securityAPI.existPermissions((IProcess) item, cadenaResp, permisos); } } } } finally { context.releaseConnection(cnt); } return false; }
public ActionForward executeAction( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, SessionAPI session) throws Exception { // Comprobar si el usuario tiene asignadas las funciones adecuadas FunctionHelper.checkFunctions( request, session.getClientContext(), new int[] {ISecurityAPI.FUNC_INV_DOCTYPES_EDIT, ISecurityAPI.FUNC_INV_TEMPLATES_EDIT}); IInvesflowAPI invesFlowAPI = session.getAPI(); ICatalogAPI catalogAPI = invesFlowAPI.getCatalogAPI(); ITemplateAPI templateAPI = invesFlowAPI.getTemplateAPI(); // Formulario asociado a la acción UploadForm defaultForm = (UploadForm) form; int keyId = Integer.parseInt(defaultForm.getKey()); int entityId = Integer.parseInt(defaultForm.getEntity()); String name = defaultForm.getProperty("NOMBRE"); String code = defaultForm.getProperty("COD_PLANT"); CTTemplate template = null; try { if (keyId == ISPACEntities.ENTITY_NULLREGKEYID) { int type = Integer.parseInt(defaultForm.getProperty("ID_TPDOC")); String expresion = defaultForm.getProperty("EXPRESION"); FormFile fichero = defaultForm.getUploadFile(); EntityApp entityapp = catalogAPI.getCTDefaultEntityApp(entityId, getRealPath("")); // Comprobar si existe otra plantilla con el mismo nombre IItemCollection itemcol = catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_CT_TEMPLATE, " WHERE NOMBRE = '" + DBUtil.replaceQuotes(name) + "'"); if (itemcol.next() && !isGeneric(templateAPI, itemcol)) { ActionMessages errors = new ActionMessages(); errors.add( "property(NOMBRE)", new ActionMessage("error.template.nameDuplicated", new String[] {name})); saveAppErrors(request, errors); return new ActionForward(mapping.getInput()); } // Comprobar si existe otra plantilla con el mismo código if (StringUtils.isNotBlank(code)) { itemcol = catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_CT_TEMPLATE, " WHERE COD_PLANT = '" + DBUtil.replaceQuotes(code) + "'"); if (itemcol.next()) { ActionMessages errors = new ActionMessages(); errors.add( "property(COD_PLANT)", new ActionMessage("error.template.codeDuplicated", new String[] {code})); saveAppErrors(request, errors); return new ActionForward(mapping.getInput()); } } if (!entityapp.validate()) { ActionMessages errors = new ActionMessages(); List errorList = entityapp.getErrors(); Iterator iteError = errorList.iterator(); while (iteError.hasNext()) { ValidationError validError = (ValidationError) iteError.next(); ActionMessage error = new ActionMessage(validError.getErrorKey(), validError.getArgs()); errors.add(ActionMessages.GLOBAL_MESSAGE, error); } saveAppErrors(request, errors); return new ActionForward(mapping.getInput()); } if (fichero.getFileName().equals("")) { template = templateAPI.newTemplate(type, name, code, 0, expresion, null); } else { if (fichero.getFileSize() > 0) { // Comprobar si el tipo MIME de la plantilla está soportado String mimeType = MimetypeMapping.getFileMimeType(fichero.getFileName()); // Se comprueba si esta habilitado el uso de plantillas ODT if (StringUtils.equals(mimeType, "application/vnd.oasis.opendocument.text") && !ConfigurationMgr.getVarGlobalBoolean( session.getClientContext(), ConfigurationMgr.USE_ODT_TEMPLATES, false)) { throw new ISPACInfo( getResources(request).getMessage("exception.template.odt.disabled")); } if (templateAPI.isMimeTypeSupported(mimeType)) { template = templateAPI.newTemplate( type, name, code, 0, expresion, fichero.getInputStream(), mimeType); } else { throw new ISPACInfo( getResources(request).getMessage("exception.template.document.invalidFile")); } } else { throw new ISPACInfo("exception.uploadfile.empty"); } } } else { EntityApp entityapp = catalogAPI.getCTDefaultEntityApp(entityId, getRealPath("")); // Comprobar si existe otra plantilla con el mismo nombre IItemCollection itemcol = catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_CT_TEMPLATE, " WHERE NOMBRE = '" + DBUtil.replaceQuotes(name) + "' AND ID != " + keyId); if (itemcol.next() && !isGeneric(templateAPI, itemcol)) { ActionMessages errors = new ActionMessages(); errors.add( "property(NOMBRE)", new ActionMessage("error.template.nameDuplicated", new String[] {name})); saveAppErrors(request, errors); return new ActionForward(mapping.getInput()); } // Comprobar si existe otra plantilla con el mismo código if (StringUtils.isNotBlank(code)) { itemcol = catalogAPI.queryCTEntities( ICatalogAPI.ENTITY_CT_TEMPLATE, " WHERE COD_PLANT = '" + DBUtil.replaceQuotes(code) + "' AND ID != " + keyId); if (itemcol.next()) { ActionMessages errors = new ActionMessages(); errors.add( "property(COD_PLANT)", new ActionMessage("error.template.codeDuplicated", new String[] {code})); saveAppErrors(request, errors); return new ActionForward(mapping.getInput()); } } defaultForm.processEntityApp(entityapp); entityapp.getItem().set("FECHA", new Date()); entityapp.store(); } } catch (Exception e) { ActionForward action = mapping.findForward("success"); String url = action.getPath() + "?entity=" + entityId + "&type=" + defaultForm.getProperty("ID_TPDOC") + "&key=" + keyId; request.getSession().setAttribute(BaseAction.LAST_URL_SESSION_KEY, url); if (e instanceof ISPACInfo) { throw e; } else { throw new ISPACInfo(e.getMessage()); } } if (template != null) { keyId = template.getInt("TEMPLATE:ID"); } ActionForward action = mapping.findForward("success"); String redirected = action.getPath() + "?entity=" + entityId + "&type=" + defaultForm.getProperty("ID_TPDOC") + "&key=" + keyId; return new ActionForward(action.getName(), redirected, true); }
public void deletePermissions(int idpcd, String uid) throws ISPACException { String sql = "WHERE ID_PCD = " + idpcd + " AND UID_USR = '******'"; CollectionDAO objlist = new CollectionDAO(PermissionsDAO.class); objlist.delete(mDbCnt, sql); }