List of usage examples for org.hibernate.criterion Restrictions isNotNull
public static Criterion isNotNull(String propertyName)
From source file:org.openbravo.erpCommon.ad_forms.ModuleManagement.java
License:Open Source License
@SuppressWarnings("unchecked") private void printPageSettings(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException { VariablesSecureApp vars = new VariablesSecureApp(request); boolean activeInstance = ActivationKey.getInstance().isActive(); // Possible maturity levels are obtained from CR, obtain them once per session and store MaturityLevel levels = (MaturityLevel) vars.getSessionObject("SettingsModule|MaturityLevels"); if (levels == null) { levels = new MaturityLevel(); if (!levels.hasInternetError()) { vars.setSessionObject("SettingsModule|MaturityLevels", levels); }/*from ww w . java2 s . co m*/ } String discard[] = { "", "" }; OBError myMessage = null; try { OBContext.setAdminMode(); SystemInformation sysInfo = OBDal.getInstance().get(SystemInformation.class, "0"); if (vars.commandIn("SETTINGS_ADD", "SETTINGS_REMOVE")) { String moduleId; if (vars.commandIn("SETTINGS_ADD")) { moduleId = vars.getStringParameter("inpModule", IsIDFilter.instance); } else { moduleId = vars.getStringParameter("inpModuleId", IsIDFilter.instance); } org.openbravo.model.ad.module.Module mod = OBDal.getInstance() .get(org.openbravo.model.ad.module.Module.class, moduleId); if (mod != null) { // do not update the audit info here, as its a local config change, which should not be // treated as 'local changes' by i.e. update.database try { boolean warn = false; OBInterceptor.setPreventUpdateInfoChange(true); if (vars.commandIn("SETTINGS_ADD")) { // GA is not allowed for community instances int level = Integer.parseInt(vars.getNumericParameter("inpModuleLevel")); if (!activeInstance && level >= MaturityLevel.CS_MATURITY) { myMessage = OBErrorBuilder.buildMessage(myMessage, "Warning", Utility.messageBD(this, "OBUIAPP_GAinCommunity", vars.getLanguage()) .replace("%0", levels.getLevelName(Integer.toString(level)))); warn = true; } else { mod.setMaturityUpdate(Integer.toString(level)); } } else { mod.setMaturityUpdate(null); } OBDal.getInstance().flush(); OBDal.getInstance().commitAndClose(); // clean module updates if there are any if (!warn) { boolean isCleaned = cleanModulesUpdates(); if (isCleaned) { myMessage = OBErrorBuilder.buildMessage(myMessage, "Info", Utility.messageBD(this, "ModuleUpdatesRemoved", vars.getLanguage())); } myMessage = OBErrorBuilder.buildMessage(myMessage, "Success", Utility.messageBD(this, "ModuleManagementSettingSaved", vars.getLanguage())); } } finally { OBInterceptor.setPreventUpdateInfoChange(false); } } else { log4j.error("Module does not exists ID:" + moduleId); } } else if (vars.commandIn("SETTINGS_SAVE")) { boolean warn = false; // Save global maturity levels. GA is not allowed for community instances String maturityWarnMsg = ""; try { int maturitySearch = Integer.parseInt(vars.getNumericParameter("inpSearchLevel")); if (!activeInstance && maturitySearch >= MaturityLevel.CS_MATURITY) { maturityWarnMsg = Utility.messageBD(this, "OBUIAPP_GAinCommunity", vars.getLanguage()) .replace("%0", levels.getLevelName(Integer.toString(maturitySearch))); warn = true; } else { sysInfo.setMaturitySearch(Integer.toString(maturitySearch)); } int maturityScan = Integer.parseInt(vars.getNumericParameter("inpScanLevel")); if (!activeInstance && maturityScan >= MaturityLevel.CS_MATURITY) { if (maturityWarnMsg.isEmpty()) { maturityWarnMsg += Utility.messageBD(this, "OBUIAPP_GAinCommunity", vars.getLanguage()) .replace("%0", levels.getLevelName(Integer.toString(maturityScan))); } warn = true; } else { sysInfo.setMaturityUpdate(Integer.toString(maturityScan)); } } catch (Exception e) { log4j.error("Error reading maturity search", e); } // Save enforcement String warnMsg = ""; for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) { String parameter = e.nextElement(); if (parameter.startsWith("inpEnforcement")) { String depId = parameter.replace("inpEnforcement", ""); String value = vars.getStringParameter(parameter); org.openbravo.model.ad.module.ModuleDependency dep = OBDal.getInstance() .get(org.openbravo.model.ad.module.ModuleDependency.class, depId); if (dep != null) { boolean save = true; if ("MINOR".equals(value)) { // Setting Minor version enforcement, check the configuration is still valid VersionComparator vc = new VersionComparator(); if (dep.getLastVersion() == null && vc.compare(dep.getFirstVersion(), dep.getDependentModule().getVersion()) != 0) { save = false; warn = true; warnMsg += "<br/>" + Utility .messageBD(this, "ModuleDependsButInstalled", vars.getLanguage()) .replace("@module@", dep.getDependentModule().getName()) .replace("@version@", dep.getFirstVersion()) .replace("@installed@", dep.getDependentModule().getVersion()); } else if (dep.getLastVersion() != null && !(vc.compare(dep.getFirstVersion(), dep.getDependentModule().getVersion()) <= 0 && vc.compare(dep.getLastVersion(), dep.getDependentModule().getVersion()) >= 0)) { save = false; warn = true; warnMsg += "<br/>" + Utility .messageBD(this, "ModuleDependsButInstalled", vars.getLanguage()) .replace("@module@", dep.getDependentModule().getName()) .replace("@version@", dep.getFirstVersion() + " - " + dep.getLastVersion()) .replace("@installed@", dep.getDependentModule().getVersion()); } } if (save) { if (value.equals(dep.getDependencyEnforcement())) { // setting no instance enforcement in case the selected value is the default dep.setInstanceEnforcement(null); } else { dep.setInstanceEnforcement(value); } } } } } // clean module updates if there are any final boolean isCleaned = cleanModulesUpdates(); if (isCleaned) { myMessage = OBErrorBuilder.buildMessage(myMessage, "Info", Utility.messageBD(this, "ModuleUpdatesRemoved", vars.getLanguage())); } if (warn) { String msgBody = ""; if (!maturityWarnMsg.isEmpty()) { msgBody += maturityWarnMsg; } if (!warnMsg.isEmpty()) { msgBody += "<br/>" + Utility.messageBD(this, "CannotSetMinorEnforcements", vars.getLanguage()) + warnMsg; } myMessage = OBErrorBuilder.buildMessage(myMessage, "Warning", msgBody); } else { myMessage = OBErrorBuilder.buildMessage(myMessage, "Success", Utility.messageBD(this, "ModuleManagementSettingSaved", vars.getLanguage())); } } // Populate module specific grid OBCriteria<org.openbravo.model.ad.module.Module> qModuleSpecific = OBDal.getInstance() .createCriteria(org.openbravo.model.ad.module.Module.class); qModuleSpecific .add(Restrictions.isNotNull(org.openbravo.model.ad.module.Module.PROPERTY_MATURITYUPDATE)); qModuleSpecific.addOrder(Order.asc(org.openbravo.model.ad.module.Module.PROPERTY_NAME)); ArrayList<HashMap<String, String>> moduleSpecifics = new ArrayList<HashMap<String, String>>(); List<org.openbravo.model.ad.module.Module> moduleSpecificList = qModuleSpecific.list(); if (moduleSpecificList.isEmpty()) { discard[0] = "moduleTable"; } for (org.openbravo.model.ad.module.Module module : moduleSpecificList) { HashMap<String, String> m = new HashMap<String, String>(); m.put("id", module.getId()); m.put("name", module.getName()); if (!activeInstance && Integer.parseInt(module.getMaturityUpdate()) >= MaturityLevel.CS_MATURITY) { m.put("level", levels.getLevelName(Integer.toString(MaturityLevel.QA_APPR_MATURITY))); } else { m.put("level", levels.getLevelName(module.getMaturityUpdate())); } moduleSpecifics.add(m); } // Populate combo of modules without specific setting OBCriteria<org.openbravo.model.ad.module.Module> qModule = OBDal.getInstance() .createCriteria(org.openbravo.model.ad.module.Module.class); qModule.add(Restrictions.isNull(org.openbravo.model.ad.module.Module.PROPERTY_MATURITYUPDATE)); qModule.addOrder(Order.asc(org.openbravo.model.ad.module.Module.PROPERTY_NAME)); ArrayList<HashMap<String, String>> modules = new ArrayList<HashMap<String, String>>(); List<org.openbravo.model.ad.module.Module> moduleList = qModule.list(); if (moduleList.isEmpty()) { discard[0] = "assignModule"; } for (org.openbravo.model.ad.module.Module module : moduleList) { HashMap<String, String> m = new HashMap<String, String>(); m.put("id", module.getId()); m.put("name", module.getName()); modules.add(m); } // Dependencies table OBCriteria<org.openbravo.model.ad.module.ModuleDependency> qDeps = OBDal.getInstance() .createCriteria(org.openbravo.model.ad.module.ModuleDependency.class); qDeps.add(Restrictions .eq(org.openbravo.model.ad.module.ModuleDependency.PROPERTY_USEREDITABLEENFORCEMENT, true)); qDeps.addOrder(Order.asc(org.openbravo.model.ad.module.ModuleDependency.PROPERTY_MODULE)); qDeps.addOrder(Order.asc(org.openbravo.model.ad.module.ModuleDependency.PROPERTY_ISINCLUDED)); qDeps.addOrder(Order.asc(org.openbravo.model.ad.module.ModuleDependency.PROPERTY_DEPENDANTMODULENAME)); List<org.openbravo.model.ad.module.ModuleDependency> deps = qDeps.list(); if (deps.isEmpty()) { discard[1] = "enforcementTable"; } else { discard[1] = "noEditableEnforcement"; } FieldProvider fpDeps[] = new FieldProvider[deps.size()]; FieldProvider fpEnforcements[][] = new FieldProvider[deps.size()][]; int i = 0; String lastName = ""; Boolean lastType = null; // Get the static text values once, not to query db each time for them OBCriteria<org.openbravo.model.ad.domain.List> qList = OBDal.getInstance() .createCriteria(org.openbravo.model.ad.domain.List.class); qList.add(Restrictions.eq(org.openbravo.model.ad.domain.List.PROPERTY_REFERENCE + ".id", "8BA0A3775CE14CE69989B6C09982FB2E")); qList.addOrder(Order.asc(org.openbravo.model.ad.domain.List.PROPERTY_SEQUENCENUMBER)); SQLReturnObject[] fpEnforcementCombo = new SQLReturnObject[qList.list().size()]; for (org.openbravo.model.ad.domain.List value : qList.list()) { SQLReturnObject val = new SQLReturnObject(); val.setData("ID", value.getSearchKey()); val.setData("NAME", Utility.getListValueName("Dependency Enforcement", value.getSearchKey(), vars.getLanguage())); fpEnforcementCombo[i] = val; i++; } String inclusionType = Utility.messageBD(this, "InclusionType", vars.getLanguage()); String dependencyType = Utility.messageBD(this, "DependencyType", vars.getLanguage()); String defaultStr = Utility.messageBD(this, "Default", vars.getLanguage()); i = 0; for (org.openbravo.model.ad.module.ModuleDependency dep : deps) { HashMap<String, String> d = new HashMap<String, String>(); d.put("baseModule", dep.getDependentModule().getName()); d.put("currentVersion", dep.getDependentModule().getVersion()); d.put("firstVersion", dep.getFirstVersion()); d.put("lastVersion", dep.getLastVersion()); d.put("depId", dep.getId()); // Grouping by module and dependency String currentName = dep.getModule().getName(); Boolean currentType = dep.isIncluded(); if (lastName.equals(currentName)) { d.put("modName", ""); if (!currentType.equals(lastType)) { d.put("depType", dep.isIncluded() ? inclusionType : dependencyType); } else { d.put("depType", ""); } } else { d.put("modName", currentName); d.put("depType", dep.isIncluded() ? inclusionType : dependencyType); lastName = currentName; lastType = currentType; } d.put("selectedEnforcement", dep.getInstanceEnforcement() == null ? dep.getDependencyEnforcement() : dep.getInstanceEnforcement()); fpDeps[i] = FieldProviderFactory.getFieldProvider(d); fpEnforcements[i] = getEnforcementCombo(dep, fpEnforcementCombo, defaultStr); i++; } final XmlDocument xmlDocument = xmlEngine .readXmlTemplate("org/openbravo/erpCommon/ad_forms/ModuleManagementSettings", discard) .createXmlDocument(); xmlDocument.setData("moduleDetail", FieldProviderFactory.getFieldProviderArray(moduleSpecifics)); xmlDocument.setData("moduleCombo", FieldProviderFactory.getFieldProviderArray(modules)); // Populate maturity levels combos String selectedScanLevel; String selectedSearchLevel; if (activeInstance) { selectedScanLevel = sysInfo.getMaturityUpdate() == null ? Integer.toString(MaturityLevel.CS_MATURITY) : sysInfo.getMaturityUpdate(); selectedSearchLevel = sysInfo.getMaturitySearch() == null ? Integer.toString(MaturityLevel.CS_MATURITY) : sysInfo.getMaturitySearch(); } else { // Community instances cannot use GA, setting CR if it is used int actualScanLevel = sysInfo.getMaturityUpdate() == null ? MaturityLevel.QA_APPR_MATURITY : Integer.parseInt(sysInfo.getMaturityUpdate()); int actualSearchLevel = sysInfo.getMaturitySearch() == null ? MaturityLevel.QA_APPR_MATURITY : Integer.parseInt(sysInfo.getMaturitySearch()); if (actualScanLevel >= MaturityLevel.CS_MATURITY) { actualScanLevel = MaturityLevel.QA_APPR_MATURITY; } if (actualSearchLevel >= MaturityLevel.CS_MATURITY) { actualSearchLevel = MaturityLevel.QA_APPR_MATURITY; } selectedScanLevel = Integer.toString(actualScanLevel); selectedSearchLevel = Integer.toString(actualSearchLevel); } xmlDocument.setParameter("selectedScanLevel", selectedScanLevel); xmlDocument.setData("reportScanLevel", "liststructure", levels.getCombo()); xmlDocument.setParameter("selectedSearchLevel", selectedSearchLevel); xmlDocument.setData("reportSearchLevel", "liststructure", levels.getCombo()); xmlDocument.setData("reportModuleLevel", "liststructure", levels.getCombo()); // less and most mature values xmlDocument.setParameter("lessMature", levels.getLessMature()); xmlDocument.setParameter("mostMature", levels.getMostMature()); response.setContentType("text/html; charset=UTF-8"); final PrintWriter out = response.getWriter(); xmlDocument.setParameter("directory", "var baseDirectory = \"" + strReplaceWith + "/\";\n"); xmlDocument.setParameter("language", "defaultLang=\"" + vars.getLanguage() + "\";"); xmlDocument.setData("dependencyDetail", fpDeps); xmlDocument.setDataArray("reportEnforcementType", "liststructure", fpEnforcements); // Interface parameters final ToolBar toolbar = new ToolBar(this, vars.getLanguage(), "ModuleManagement", false, "", "", "", false, "ad_forms", strReplaceWith, false, true); toolbar.prepareSimpleToolBarTemplate(); xmlDocument.setParameter("toolbar", toolbar.toString()); try { final WindowTabs tabs = new WindowTabs(this, vars, "org.openbravo.erpCommon.ad_forms.ModuleManagement"); xmlDocument.setParameter("theme", vars.getTheme()); final NavigationBar nav = new NavigationBar(this, vars.getLanguage(), "ModuleManagement.html", classInfo.id, classInfo.type, strReplaceWith, tabs.breadcrumb()); xmlDocument.setParameter("navigationBar", nav.toString()); final LeftTabsBar lBar = new LeftTabsBar(this, vars.getLanguage(), "ModuleManagement.html", strReplaceWith); xmlDocument.setParameter("leftTabs", lBar.manualTemplate()); } catch (final Exception ex) { throw new ServletException(ex); } if (myMessage != null) { xmlDocument.setParameter("messageType", myMessage.getType()); xmlDocument.setParameter("messageTitle", myMessage.getTitle()); xmlDocument.setParameter("messageMessage", myMessage.getMessage()); } out.println(xmlDocument.print()); out.close(); } finally { OBContext.restorePreviousMode(); } }
From source file:org.openbravo.erpCommon.ad_forms.ModuleManagement.java
License:Open Source License
/** * Checks whether there are any updates available for the installed modules and cleans the update * info if so./*from ww w . j av a 2 s . c om*/ */ private boolean cleanModulesUpdates() throws ServletException { boolean hasChanged = false; if (ModuleManagementData.selectUpdateable(this).length > 0) { // cleaning modules updates ModuleManagementData.cleanModulesUpdates(this); hasChanged = true; } // cleaning module upgrades OBCriteria<org.openbravo.model.ad.module.Module> qUpgr = OBDal.getInstance() .createCriteria(org.openbravo.model.ad.module.Module.class); qUpgr.add(Restrictions.isNotNull(org.openbravo.model.ad.module.Module.PROPERTY_UPGRADEAVAILABLE)); try { OBInterceptor.setPreventUpdateInfoChange(true); for (org.openbravo.model.ad.module.Module mod : qUpgr.list()) { mod.setUpgradeAvailable(null); hasChanged = true; } OBDal.getInstance().flush(); try { // A commit is necessary to avoid a lock which can happen because xsql statements are being // executed (but not committed yet) in parallel with DAL statements over the same tables // (see issue 18697) OBDal.getInstance().getConnection().commit(); } catch (SQLException e) { // Do nothing, this will not happen } } finally { OBInterceptor.setPreventUpdateInfoChange(false); } return hasChanged; }
From source file:org.openbravo.erpCommon.ad_reports.GeneralAccountingReports.java
License:Open Source License
private boolean isNotClosed(Year year, Organization org, String strcAcctSchemaId) { OBContext.setAdminMode(false);//from ww w. jav a 2s . co m try { OBCriteria<OrganizationClosing> obc = OBDal.getInstance().createCriteria(OrganizationClosing.class); obc.createAlias(OrganizationClosing.PROPERTY_ORGACCTSCHEMA, "oa"); obc.add(Restrictions.eq("organization", org)); obc.add(Restrictions.eq(OrganizationClosing.PROPERTY_YEAR, year)); obc.add(Restrictions.eq("oa.accountingSchema.id", strcAcctSchemaId)); obc.add(Restrictions.isNotNull(OrganizationClosing.PROPERTY_CLOSINGFACTACCTGROUP)); obc.setMaxResults(1); return obc.uniqueResult() == null ? true : false; } finally { OBContext.restorePreviousMode(); } }
From source file:org.openbravo.erpCommon.utility.SystemInfo.java
License:Open Source License
/** * Reads all information about session:/*from w w w .ja va2s . co m*/ * <ul> * <li>First and last login in the instance * <li>Number o total of logins in the instance * <li>Maximum concurrent users during last month * <li>Average concurrent users during last month * <li>Percentage of usage time during last month * <ul> */ private static void loadSessionInfo() { // Obtain login counts StringBuilder hql = new StringBuilder(); hql.append("select min(s.creationDate) as firstLogin, "); hql.append(" max(s.creationDate) as lastLogin, "); hql.append(" count(*) as totalLogins"); hql.append(" from ADSession s"); Query q = OBDal.getInstance().getSession().createQuery(hql.toString()); if (q.list().size() != 0) { Object[] logInfo = (Object[]) q.list().get(0); firstLogin = (Date) logInfo[0]; lastLogin = (Date) logInfo[1]; numberOfLogins = (Long) logInfo[2]; } // Calculate statistics // Obtain all sessions that have been alive during last 30 days try { long computationTime = System.currentTimeMillis(); Calendar now = Calendar.getInstance(); Calendar startOfPeriod = getStartOfPeriod(); OBCriteria<Session> qSession = OBDal.getInstance().createCriteria(Session.class); qSession.add(Restrictions.isNotNull(Session.PROPERTY_LASTPING)); qSession.add(Restrictions.ge(Session.PROPERTY_LASTPING, startOfPeriod.getTime())); qSession.addOrder(Order.asc(Session.PROPERTY_CREATIONDATE)); // Prepare a list of events based on logins and logouts. List<Event> events = new ArrayList<Event>(); List<Session> sessions = qSession.list(); numberOfLoginsThisMonth = sessions.size(); for (Session session : sessions) { Event newSession = new Event(); newSession.eventDate = session.getCreationDate(); newSession.sessionCount = 1; Event closeSession = new Event(); closeSession.eventDate = session.getLastPing(); closeSession.sessionCount = -1; events.add(newSession); events.add(closeSession); } Collections.sort(events); // At this point we have all events of last month, let's compute them to obtain summarized // information. For each login sum 1 to number of concurrent users at this time, for each // logout subtract 1. maxUsers = 0; int concurrentUsers = 0; BigDecimal totalUsageTime = BigDecimal.ZERO; BigDecimal usersPeriod = BigDecimal.ZERO; for (int i = 0; i < events.size() - 1; i++) { Event event = events.get(i); concurrentUsers += event.sessionCount; if (log4j.isDebugEnabled()) { log4j.debug("Period " + event.eventDate + " - " + events.get(i + 1).eventDate + " u:" + concurrentUsers + " t:" + ((events.get(i + 1).eventDate.getTime() - event.eventDate.getTime()) / 60000)); } if (concurrentUsers > 0) { if (concurrentUsers > maxUsers) { maxUsers = concurrentUsers; } // If there is at least one user, the system is in use. Sum it up. BigDecimal periodTime = new BigDecimal(events.get(i + 1).eventDate.getTime()) .subtract(new BigDecimal(event.eventDate.getTime())); totalUsageTime = totalUsageTime.add(periodTime); usersPeriod = usersPeriod.add(periodTime.multiply(new BigDecimal(concurrentUsers))); } } calculateNumberOfRejectedLoginsDueConcurrentUsersLastMonth(startOfPeriod); BigDecimal totalTime = new BigDecimal(now.getTimeInMillis() - startOfPeriod.getTimeInMillis()); if (totalUsageTime.compareTo(BigDecimal.ZERO) != 0) { avgUsers = usersPeriod.divide(totalUsageTime, 3, RoundingMode.HALF_DOWN); usagePercentageTime = totalUsageTime.divide(totalTime, 5, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)); } log4j.debug("max:" + maxUsers + " total:" + totalUsageTime + " " + usagePercentageTime.toString() + "% avg usr:" + avgUsers.toString()); // WS calls maxDayWsLogins = 0L; long totalWsLogins = 0L; for (Long dayWsLogins : getWsLogins("WS", startOfPeriod.getTime())) { totalWsLogins += dayWsLogins; if (dayWsLogins > maxDayWsLogins) { maxDayWsLogins = dayWsLogins; } } avgWsLogins = BigDecimal.valueOf(totalWsLogins).divide(BigDecimal.valueOf(30), 3, RoundingMode.HALF_DOWN); log4j.debug("WS Calls: total:" + totalWsLogins + " - max:" + maxDayWsLogins + " - avg:" + avgWsLogins.toString()); // Rejected WS calls maxDayRejectedWsLogins = 0L; long totalRejectedWsLogins = 0L; for (Long dayRWsLogins : getWsLogins("WSR", startOfPeriod.getTime())) { totalRejectedWsLogins += dayRWsLogins; if (dayRWsLogins > maxDayRejectedWsLogins) { maxDayRejectedWsLogins = dayRWsLogins; } } avgRejectedWsLogins = BigDecimal.valueOf(totalRejectedWsLogins).divide(BigDecimal.valueOf(30), 3, RoundingMode.HALF_DOWN); log4j.debug("WS Rejected Calls: total:" + totalRejectedWsLogins + " - max:" + maxDayRejectedWsLogins + " - avg:" + avgRejectedWsLogins.toString()); // Connector calls maxDayWsCLogins = 0L; long totalWsCLogins = 0L; for (Long dayWsCLogins : getWsLogins("WSC", startOfPeriod.getTime())) { totalWsCLogins += dayWsCLogins; if (dayWsCLogins > maxDayWsCLogins) { maxDayWsCLogins = dayWsCLogins; } } avgWsCLogins = BigDecimal.valueOf(totalWsCLogins).divide(BigDecimal.valueOf(30), 3, RoundingMode.HALF_DOWN); log4j.debug("WSC Calls: total:" + totalWsCLogins + " - max:" + maxDayWsCLogins + " - avg:" + avgWsCLogins.toString()); log4j.debug("Total time computing sessions:" + (System.currentTimeMillis() - computationTime)); } catch (Exception e) { log4j.error("Error calculating login information", e); } }
From source file:org.openbravo.financial.paymentreport.erpCommon.ad_reports.PaymentReportDao.java
License:Open Source License
/** * // w ww .j a v a 2 s. co m * This method returns a list of transactions without a payment associated */ private java.util.List<FIN_FinaccTransaction> getTransactionsList(String strInclSubOrg, String strOrg, String strcBPartnerIdIN, String strFinancialAccountId, String strDocumentDateFrom, String strDocumentDateTo, String strPaymentDateFrom, String strPaymentDateTo, String strAmountFrom, String strAmountTo, String strcBPGroupIdIN, String strcProjectIdIN, String strfinPaymSt, String strcCurrency, String strPaymType, String strGroupCrit, String strOrdCrit, String strcNoBusinessPartner, String strDueDateFrom, String strDueDateTo, String strExpectedDateFrom, String strExpectedDateTo) { Organization[] organizations; if (strInclSubOrg.equalsIgnoreCase("include")) { Set<String> orgChildTree = OBContext.getOBContext().getOrganizationStructureProvider() .getChildTree(strOrg, true); organizations = getOrganizations(orgChildTree); } else { organizations = new Organization[1]; organizations[0] = OBDal.getInstance().get(Organization.class, strOrg); } java.util.List<BusinessPartner> bPartners = OBDao.getOBObjectListFromString(BusinessPartner.class, strcBPartnerIdIN); java.util.List<Project> projects = OBDao.getOBObjectListFromString(Project.class, strcProjectIdIN); OBContext.setAdminMode(true); try { OBCriteria<FIN_FinaccTransaction> obCriteriaTrans = OBDal.getInstance() .createCriteria(FIN_FinaccTransaction.class); obCriteriaTrans.createAlias(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER, "bp", OBCriteria.LEFT_JOIN); obCriteriaTrans.createAlias("bp." + BusinessPartner.PROPERTY_BUSINESSPARTNERCATEGORY, "bpc", OBCriteria.LEFT_JOIN); obCriteriaTrans.createAlias(FIN_FinaccTransaction.PROPERTY_PROJECT, "p", OBCriteria.LEFT_JOIN); obCriteriaTrans.createAlias(FIN_FinaccTransaction.PROPERTY_CURRENCY, "c", OBCriteria.LEFT_JOIN); obCriteriaTrans.createAlias(FIN_FinaccTransaction.PROPERTY_ACCOUNT, "acc", OBCriteria.LEFT_JOIN); obCriteriaTrans.add(Restrictions.isNull(FIN_FinaccTransaction.PROPERTY_FINPAYMENT)); obCriteriaTrans.add(Restrictions.eq(FIN_FinaccTransaction.PROPERTY_PROCESSED, true)); obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_ORGANIZATION, organizations)); // Empty Business Partner included if (strcNoBusinessPartner.equals("include")) { // BPartners if (!bPartners.isEmpty()) { obCriteriaTrans.add(Restrictions.or( Restrictions.in(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER, bPartners), Restrictions.isNull(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER))); } // BPartner Category if (!strcBPGroupIdIN.equals("")) { obCriteriaTrans.add(Restrictions.or( Restrictions.eq("bp." + BusinessPartner.PROPERTY_BUSINESSPARTNERCATEGORY, strcBPGroupIdIN), Restrictions.isNull(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER))); } // Empty Business Partner excluded } else if (strcNoBusinessPartner.equals("exclude")) { // BPartners if (!bPartners.isEmpty()) { obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER, bPartners)); } // BPartner Category if (!strcBPGroupIdIN.equals("")) { obCriteriaTrans.add(Restrictions.eq("bp." + BusinessPartner.PROPERTY_BUSINESSPARTNERCATEGORY, strcBPGroupIdIN)); } if (bPartners.isEmpty() && strcBPGroupIdIN.equals("")) { obCriteriaTrans.add(Restrictions.isNotNull(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER)); } // Only empty Business Partners } else { // if if (strcNoBusinessPartner.equals("only")) obCriteriaTrans.add(Restrictions.isNull(FIN_FinaccTransaction.PROPERTY_BUSINESSPARTNER)); } // Financial Account if (!strFinancialAccountId.equals("")) { obCriteriaTrans.add(Restrictions.eq(FIN_FinaccTransaction.PROPERTY_ACCOUNT, OBDal.getInstance().get(FIN_FinancialAccount.class, strFinancialAccountId))); } // Document Date, Payment Date & Due Date if (!strDocumentDateFrom.equals("")) { obCriteriaTrans.add(Restrictions.ge(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strDocumentDateFrom))); } if (!strDocumentDateTo.equals("")) { obCriteriaTrans.add(Restrictions.le(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strDocumentDateTo))); } if (!strPaymentDateFrom.equals("")) { obCriteriaTrans.add(Restrictions.ge(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strPaymentDateFrom))); } if (!strPaymentDateTo.equals("")) { obCriteriaTrans.add(Restrictions.le(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strPaymentDateTo))); } if (!strDueDateFrom.equals("")) { obCriteriaTrans.add(Restrictions.ge(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strDueDateFrom))); } if (!strExpectedDateTo.equals("")) { obCriteriaTrans.add(Restrictions.le(FIN_FinaccTransaction.PROPERTY_DATEACCT, FIN_Utility.getDate(strExpectedDateFrom))); } // Amount if (!strAmountFrom.equals("")) { obCriteriaTrans.add(Restrictions.or( Restrictions.ge(FIN_FinaccTransaction.PROPERTY_DEPOSITAMOUNT, new BigDecimal(strAmountFrom)), Restrictions.ge(FIN_FinaccTransaction.PROPERTY_PAYMENTAMOUNT, new BigDecimal(strAmountFrom)))); } if (!strAmountTo.equals("")) { obCriteriaTrans.add(Restrictions.or( Restrictions.le(FIN_FinaccTransaction.PROPERTY_DEPOSITAMOUNT, new BigDecimal(strAmountTo)), Restrictions.le(FIN_FinaccTransaction.PROPERTY_PAYMENTAMOUNT, new BigDecimal(strAmountTo)))); } // Projects if (!projects.isEmpty()) { obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_PROJECT, projects)); } // Status if (!strfinPaymSt.isEmpty() && !strfinPaymSt.equalsIgnoreCase("('')")) { strfinPaymSt = strfinPaymSt.replace("(", ""); strfinPaymSt = strfinPaymSt.replace(")", ""); strfinPaymSt = strfinPaymSt.replace("'", ""); strfinPaymSt = strfinPaymSt.replace(" ", ""); String[] status = strfinPaymSt.split(","); obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_STATUS, status)); } // Currency if (!strcCurrency.equals("")) { obCriteriaTrans.add(Restrictions.eq(FIN_FinaccTransaction.PROPERTY_CURRENCY, OBDal.getInstance().get(Currency.class, strcCurrency))); } // payment type if (strPaymType.equalsIgnoreCase("FINPR_Receivables")) { String[] status = { "PWNC", "RPPC" }; obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_STATUS, status)); } else if (strPaymType.equalsIgnoreCase("FINPR_Payables")) { String[] status = { "RDNC", "RPPC" }; obCriteriaTrans.add(Restrictions.in(FIN_FinaccTransaction.PROPERTY_STATUS, status)); } // order if (strGroupCrit.equalsIgnoreCase("APRM_FATS_BPARTNER")) { obCriteriaTrans.addOrder(Order.asc("bp." + BusinessPartner.PROPERTY_NAME)); } else if (strGroupCrit.equalsIgnoreCase("Project")) { obCriteriaTrans.addOrder(Order.asc("p." + Project.PROPERTY_NAME)); } else if (strGroupCrit.equalsIgnoreCase("FINPR_BPartner_Category")) { obCriteriaTrans.addOrder(Order.asc("bpc." + Category.PROPERTY_NAME)); } else if (strGroupCrit.equalsIgnoreCase("INS_CURRENCY")) { obCriteriaTrans.addOrder(Order.asc("c." + Currency.PROPERTY_ISOCODE)); } else if (strGroupCrit.equalsIgnoreCase("ACCS_ACCOUNT_ID_D")) { obCriteriaTrans.addOrder(Order.asc("acc." + FIN_FinancialAccount.PROPERTY_NAME)); } obCriteriaTrans.addOrder(Order.asc(FIN_FinaccTransaction.PROPERTY_STATUS)); if (!strOrdCrit.isEmpty()) { String[] strOrdCritList = strOrdCrit.substring(2, strOrdCrit.length() - 2).split("', '"); for (int i = 0; i < strOrdCritList.length; i++) { if (strOrdCritList[i].equalsIgnoreCase("Date")) { obCriteriaTrans.addOrder(Order.asc(FIN_FinaccTransaction.PROPERTY_DATEACCT)); } if (strOrdCritList[i].contains("Project")) { obCriteriaTrans.addOrder(Order.asc("p." + Project.PROPERTY_NAME)); } if (strOrdCritList[i].contains("FINPR_BPartner_Category")) { obCriteriaTrans.addOrder(Order.asc("bpc." + Category.PROPERTY_NAME)); } if (strOrdCritList[i].contains("APRM_FATS_BPARTNER")) { obCriteriaTrans.addOrder(Order.asc("bp." + BusinessPartner.PROPERTY_NAME)); } if (strOrdCritList[i].contains("INS_CURRENCY")) { obCriteriaTrans.addOrder(Order.asc("c." + Currency.PROPERTY_ISOCODE)); } if (strOrdCritList[i].contains("ACCS_ACCOUNT_ID_D")) { obCriteriaTrans.addOrder(Order.asc("acc." + FIN_FinancialAccount.PROPERTY_NAME)); } if (strOrdCritList[i].equalsIgnoreCase("DueDate")) { obCriteriaTrans.addOrder(Order.asc(FIN_FinaccTransaction.PROPERTY_TRANSACTIONDATE)); } } } obCriteriaTrans.addOrderBy(FIN_FinaccTransaction.PROPERTY_ID, true); final java.util.List<FIN_FinaccTransaction> transList = obCriteriaTrans.list(); return transList; } catch (Exception e) { log4j.error(e.getMessage(), e); return new ArrayList<FIN_FinaccTransaction>(); } finally { OBContext.restorePreviousMode(); } }
From source file:org.openbravo.test.costing.TestCosting.java
License:Open Source License
/********************************************** Specific methods for tests **********************************************/ // Create a new product cloning costing Product 1 private Product cloneProduct(int num, String productType, BigDecimal purchasePrice, BigDecimal salesPrice, BigDecimal cost, String costType, int year, String currencyId, List<String> productIdList, List<BigDecimal> quantityList) { try {/*from w w w. j a v a2s . c o m*/ Product product = OBDal.getInstance().get(Product.class, PRODUCT_ID); Product productClone = (Product) DalUtil.copy(product, false); setGeneralData(productClone); productClone.setSearchKey("costingProduct" + num); productClone.setName("costing Product " + num); productClone.setMaterialMgmtMaterialTransactionList(null); productClone.setProductType(productType); OBDal.getInstance().save(productClone); if (productIdList.isEmpty()) { OBCriteria<ProductPrice> criteria = OBDal.getInstance().createCriteria(ProductPrice.class); criteria.add(Restrictions.eq(ProductPrice.PROPERTY_PRODUCT, product)); criteria.addOrderBy(ProductPrice.PROPERTY_CREATIONDATE, true); int i = 0; for (ProductPrice productPrice : criteria.list()) { ProductPrice productPriceClone = (ProductPrice) DalUtil.copy(productPrice, false); setGeneralData(productPriceClone); if (i % 2 == 0) { if (currencyId.equals(CURRENCY2_ID)) productPriceClone .setPriceListVersion(OBDal.getInstance().get(Product.class, LANDEDCOSTTYPE3_ID) .getPricingProductPriceList().get(0).getPriceListVersion()); productPriceClone.setStandardPrice(purchasePrice); productPriceClone.setListPrice(purchasePrice); } else { productPriceClone.setStandardPrice(salesPrice); productPriceClone.setListPrice(salesPrice); } productPriceClone.setProduct(productClone); productClone.getPricingProductPriceList().add(productPriceClone); i++; } if (cost != null) { Costing productCosting = OBProvider.getInstance().get(Costing.class); setGeneralData(productCosting); if (year != 0) productCosting.setStartingDate(DateUtils.addYears(product.getPricingProductPriceList() .get(0).getPriceListVersion().getValidFromDate(), year)); else productCosting.setStartingDate(today); Calendar calendar = Calendar.getInstance(); calendar.set(9999, 11, 31); productCosting.setEndingDate(calendar.getTime()); productCosting.setManual(true); productCosting.setCostType(costType); productCosting.setCost(cost); productCosting.setCurrency(OBDal.getInstance().get(Currency.class, CURRENCY1_ID)); productCosting.setWarehouse(OBDal.getInstance().get(Warehouse.class, WAREHOUSE1_ID)); productCosting.setProduct(productClone); productClone.getMaterialMgmtCostingList().add(productCosting); } } else { productClone.setBillOfMaterials(true); int i = 0; for (String productBOMId : productIdList) { ProductBOM productBOMClone = OBProvider.getInstance().get(ProductBOM.class); setGeneralData(productBOMClone); productBOMClone.setLineNo(new Long((i + 1) * 10)); productBOMClone.setProduct(productClone); productBOMClone.setBOMProduct(OBDal.getInstance().get(Product.class, productBOMId)); productBOMClone.setBOMQuantity(quantityList.get(i)); i++; OBDal.getInstance().save(productBOMClone); OBDal.getInstance().flush(); OBDal.getInstance().refresh(productBOMClone); } OBDal.getInstance().save(productClone); OBDal.getInstance().flush(); OBDal.getInstance().refresh(productClone); verifyBOM(productClone.getId()); productClone.setBOMVerified(true); } OBDal.getInstance().save(productClone); OBDal.getInstance().flush(); OBDal.getInstance().refresh(productClone); OBCriteria<ProductAccounts> criteria = OBDal.getInstance().createCriteria(ProductAccounts.class); criteria.add(Restrictions.eq(ProductAccounts.PROPERTY_PRODUCT, product)); criteria.add(Restrictions.isNotNull(ProductAccounts.PROPERTY_INVOICEPRICEVARIANCE)); productClone.getProductAccountsList().get(0) .setInvoicePriceVariance(criteria.list().get(0).getInvoicePriceVariance()); OBDal.getInstance().save(productClone); OBDal.getInstance().flush(); OBDal.getInstance().refresh(productClone); return productClone; } catch (Exception e) { throw new OBException(e); } }
From source file:org.openbravo.test.datasource.FICTest.java
License:Open Source License
/** * Tests FIC doesn't change date-time value when row is retrieved to be edited * /* ww w . ja v a2s .co m*/ * See issue #28541 */ @Test public void dateTimeShouldntChange() throws Exception { OBCriteria<CostingRule> qRule = OBDal.getInstance().createCriteria(CostingRule.class); qRule.add(Restrictions.isNotNull(CostingRule.PROPERTY_STARTINGDATE)); qRule.setMaxResults(1); assertThat(qRule.list(), not(empty())); CostingRule rule = qRule.list().get(0); Map<String, String> params = new HashMap<String, String>(); params.put("MODE", "EDIT"); params.put("_action", "org.openbravo.client.application.window.FormInitializationComponent"); params.put("TAB_ID", "6868B706DA8340158DE353A6C252A564"); // Costing Rules params.put("ROW_ID", rule.getId()); String response = doRequest("/org.openbravo.client.kernel", params, 200, "POST"); String ficDateFromValue = new JSONObject(response).getJSONObject("columnValues").getJSONObject("Datefrom") .getString("value"); // FIC returns date-time in UTC, let's convert actual date-time to UTC... SimpleDateFormat utcFormatter = new DateUIDefinition().getFormat(); utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); String utcFormattedDateTime = utcFormatter.format(rule.getStartingDate()); // ...and compare it with the returned value assertThat(ficDateFromValue, startsWith(utcFormattedDateTime)); }
From source file:org.openbravo.userinterface.selector.SelectorComponent.java
License:Open Source License
public Map<String, String> getHiddenInputs() { final Map<String, String> hiddenInputs = new HashMap<String, String>(); if (getSelector().getTable() == null) { return hiddenInputs; }//from w ww. j a v a 2s . c o m final String getElementString = "document.getElementById('@id@')"; final String columnName = getOutHiddenInputPrefix(); OBContext.setAdminMode(); try { final Criterion selectorConstraint = Restrictions.eq(SelectorField.PROPERTY_OBUISELSELECTOR, getSelector()); final Criterion isOutFieldConstraint = Restrictions.eq(SelectorField.PROPERTY_ISOUTFIELD, true); final Criterion hasSuffixConstraint = Restrictions.isNotNull(SelectorField.PROPERTY_SUFFIX); List<SelectorField> fields = OBDao.getFilteredCriteria(SelectorField.class, selectorConstraint, isOutFieldConstraint, hasSuffixConstraint).list(); for (final SelectorField field : fields) { hiddenInputs.put(columnName + field.getSuffix(), getElementString.replaceAll("@id@", columnName + field.getSuffix())); } } catch (Exception e) { log.error("Error getting hidden input for selector " + getParameter(SelectorConstants.PARAM_TAB_ID) + ": " + e.getMessage(), e); } finally { OBContext.restorePreviousMode(); } return hiddenInputs; }
From source file:org.openbravo.userinterface.selector.SelectorDataSourceFilter.java
License:Open Source License
@Override public void doFilter(Map<String, String> parameters, HttpServletRequest request) { final long t1 = System.currentTimeMillis(); try {//from w w w . j a va 2 s . c o m OBContext.setAdminMode(); String selectorId = parameters.get(SelectorConstants.DS_REQUEST_SELECTOR_ID_PARAMETER); String requestType = parameters.get(SelectorConstants.DS_REQUEST_TYPE_PARAMETER); if (selectorId == null || selectorId.equals("")) { return; } Selector sel = OBDal.getInstance().get(Selector.class, selectorId); String filterExpression = sel.getFilterExpression() == null ? "" : sel.getFilterExpression(); String filterHQL = ""; filterHQL = applyFilterExpression(filterExpression, sel, parameters, request); String processId = parameters.get(SelectorConstants.DS_REQUEST_PROCESS_DEFINITION_ID); if (!StringUtils.isEmpty(processId)) { OBCriteria<Parameter> qParam = OBDal.getInstance().createCriteria(Parameter.class); qParam.add(Restrictions.eq(Parameter.PROPERTY_ID, parameters.get(SelectorConstants.DS_REQUEST_SELECTOR_FIELD_ID))); Parameter param = qParam.list().get(0); Validation validation = qParam.list().get(0).getValidation(); if (validation != null) { if (validation.getType().equals("HQL_JS")) { String validationCode = qParam.list().get(0).getValidation().getValidationCode(); String validationHQL = applyFilterExpression(validationCode, sel, parameters, request); if (!StringUtils.isEmpty(validationHQL)) { if (StringUtils.isEmpty(filterHQL)) { filterHQL = validationHQL; } else { filterHQL = "(" + filterHQL + ") and (" + validationHQL + ")"; } } } else { log.error("Unsupported validation type '" + validation.getType() + "' in " + param.getObuiappProcess().getName() + "->" + param.getName() + ". Only 'HQL_JS' type is supported. No validation is applied!!!"); } } } if (!StringUtils.isEmpty(filterHQL)) { log.debug("Adding to where clause (based on filter expression): " + filterHQL); String currentWhere = parameters.get(JsonConstants.WHERE_PARAMETER); if (currentWhere == null || currentWhere.equals("null") || currentWhere.equals("")) { parameters.put(JsonConstants.WHERE_PARAMETER, filterHQL); } else { parameters.put(JsonConstants.WHERE_PARAMETER, currentWhere + " and " + filterHQL); } } // Applying default expression for selector fields when is not a selector window request if (!"Window".equals(requestType)) { OBCriteria<SelectorField> sfc = OBDal.getInstance().createCriteria(SelectorField.class); sfc.add(Restrictions.isNotNull(SelectorField.PROPERTY_DEFAULTEXPRESSION)); sfc.add(Restrictions.eq(SelectorField.PROPERTY_OBUISELSELECTOR, sel)); applyDefaultExpressions(sel, parameters, sfc, request); verifyPropertyTypes(sel, parameters); } } catch (Exception e) { log.error("Error executing filter: " + e.getMessage(), e); } finally { OBContext.restorePreviousMode(); log.debug("doFilter took: " + (System.currentTimeMillis() - t1) + "ms"); } }
From source file:org.openbravo.userinterface.selector.SelectorDefaultFilterActionHandler.java
License:Open Source License
@Override protected JSONObject execute(Map<String, Object> parameters, String content) { JSONObject result = new JSONObject(); Map<String, String> params = getParameterMap(parameters); OBContext.setAdminMode();// w w w. j a v a 2 s. co m try { if (!params.containsKey("_selectorDefinitionId")) { return result; } String selectorId = params.get("_selectorDefinitionId"); Selector sel = OBDal.getInstance().get(Selector.class, selectorId); final Table table; // Some selectors have a definition that do not use a table but a datasource if (sel.getTable() != null) { table = sel.getTable(); } else if (sel.getObserdsDatasource() != null && sel.getObserdsDatasource().getTable() != null) { table = sel.getObserdsDatasource().getTable(); } else { // no table, don't do anything return result; } final String entityName = table.getName(); final Entity entity = ModelProvider.getInstance().getEntity(entityName); OBCriteria<SelectorField> obc = OBDal.getInstance().createCriteria(SelectorField.class); obc.add(Restrictions.eq(SelectorField.PROPERTY_OBUISELSELECTOR, sel)); obc.add(Restrictions.isNotNull(SelectorField.PROPERTY_DEFAULTEXPRESSION)); if (obc.count() == 0) { return result; } final ScriptEngineManager manager = new ScriptEngineManager(); final ScriptEngine engine = manager.getEngineByName("js"); engine.put("OB", new OBBindings(OBContext.getOBContext(), params, (HttpSession) parameters.get(KernelConstants.HTTP_SESSION))); Object exprResult = null; for (SelectorField f : obc.list()) { try { exprResult = engine.eval(f.getDefaultExpression()); if (exprResult != null && !exprResult.equals("") && !exprResult.equals("''")) { Property property = null; if (f.getColumn() != null) { property = KernelUtils.getInstance().getPropertyFromColumn(f.getColumn()); } else if (f.getProperty() != null) { property = DalUtil.getPropertyFromPath(entity, f.getProperty()); } if (property != null && property.getTargetEntity() != null && !property.isOneToMany()) { final BaseOBObject bob = OBDal.getInstance().get(property.getTargetEntity().getName(), exprResult); exprResult = bob.getIdentifier(); } } if (sel.isCustomQuery()) { result.put(f.getDisplayColumnAlias().replace(DalUtil.DOT, DalUtil.FIELDSEPARATOR), exprResult); } else if (exprResult != null && !exprResult.equals("") && !exprResult.equals("''")) { String fieldName = f.getProperty(); result.put(fieldName.replace(DalUtil.DOT, DalUtil.FIELDSEPARATOR), exprResult); } } catch (Exception e) { log.error("Error evaluating expression for property " + f.getProperty() + f.getDisplayColumnAlias() + ": " + e.getMessage(), e); } } // Obtaining the filter Expression from Selector. Refer issue // https://issues.openbravo.com/view.php?id=21541 Object dynamicFilterExpression = null; if (sel.getFilterExpression() != null) { dynamicFilterExpression = engine.eval(sel.getFilterExpression()); result.put("filterExpression", dynamicFilterExpression.toString()); } } catch (Exception e) { log.error("Error generating Default Filter action result: " + e.getMessage(), e); } finally { OBContext.restorePreviousMode(); } return result; }