/** * Get Lookup Data for Field in context * * @param AD_Field_ID field * @param context context * @param refresh requery * @return lookup pair array */ public ArrayList<NamePair> getLookupData( int windowNo, int AD_Field_ID, Map<String, String> context, boolean refresh) { UIField field = getField(AD_Field_ID, windowNo); if (field == null) { log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); return null; } CContext ctx = new CContext(m_context.entrySet()); ctx.addWindow(windowNo, context); if (field.isLookup() || field.isButtonLookup()) return field.getAllLookupData(ctx, windowNo); else log.warning("No Lookup: " + field.getColumnName()); return null; } // getLookupData
/** * Is Period Open for Doc Base Type * * @param DocBaseType document base type * @param dateAcct accounting date * @return error message or null */ public String isOpen(String DocBaseType, Timestamp dateAcct) { if (!isActive()) { s_log.warning("Period not active: " + getName()); return "@C_Period_ID@ <> @IsActive@"; } MAcctSchema as = MClient.get(getCtx(), getAD_Client_ID()).getAcctSchema(); if (as != null && as.isAutoPeriodControl()) { if (!as.isAutoPeriodControlOpen(dateAcct)) return "@PeriodClosed@ - @AutoPeriodControl@"; // We are OK Timestamp today = new Timestamp(System.currentTimeMillis()); if (isInPeriod(today) && as.getC_Period_ID() != getC_Period_ID()) { as.setC_Period_ID(getC_Period_ID()); as.save(); } return null; } // Standard Period Control if (DocBaseType == null) { log.warning(getName() + " - No DocBaseType"); return "@NotFound@ @DocBaseType@"; } MPeriodControl pc = getPeriodControl(DocBaseType); if (pc == null) { log.warning(getName() + " - Period Control not found for " + DocBaseType); return "@NotFound@ @C_PeriodControl_ID@: " + DocBaseType; } log.fine(getName() + ": " + DocBaseType); if (pc.isOpen()) return null; return "@PeriodClosed@ - @C_PeriodControl_ID@ (" + DocBaseType + ", " + dateAcct + ")"; } // isOpen
/** * Get Field Lookup Value Direct * * @param windowNo Window * @param AD_Field_ID * @param keyValues array of id values * @param cache * @return list of display values */ public ArrayList<NamePair> getLookupValueDirect( int AD_Field_ID, ArrayList<String> keyValues, boolean cache) { int windowNo = 0; // No Context ArrayList<NamePair> displayValues = new ArrayList<NamePair>(); UIField field = getField(AD_Field_ID, windowNo); // if (cache && field.isLookup()) // field.getLookup().removeAllElements(); if (field == null) log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); // for (int i = 0; i < keyValues.size(); i++) { String key = keyValues.get(i); String value = null; if (field != null) value = field.getLookupDisplay(m_context, windowNo, key, cache); if (value == null) { /* * if(key == null) value = ""; else value = "<" + key + ">"; */ value = ""; } NamePair pp = new ValueNamePair(key, value); displayValues.add(pp); } return displayValues; } // getLookupValueDirect
/** * Find Period of Date based on Client Calendar, it need not be a standard period (used in MRP) * * @param ctx context * @param C_Calendar_ID calendar * @param Date date * @param trx trx * @return active Period or null */ public static MPeriod getPeriod(Ctx ctx, int C_Calendar_ID, Timestamp Date, Trx trx) { if (Date == null) { s_log.warning("No Date"); return null; } if (C_Calendar_ID == 0) { s_log.warning("No Calendar"); return null; } // Get it from DB PreparedStatement pstmt = null; ResultSet rs = null; MPeriod retValue = null; String sql = "SELECT * FROM C_Period " + "WHERE C_Year_ID IN " + "(SELECT C_Year_ID FROM C_Year WHERE C_Calendar_ID=?)" + " AND ? BETWEEN TRUNC(StartDate,'DD') AND TRUNC(EndDate,'DD')" + " AND IsActive='Y' "; try { pstmt = DB.prepareStatement(sql, trx); pstmt.setInt(1, C_Calendar_ID); pstmt.setTimestamp(2, TimeUtil.getDay(Date)); rs = pstmt.executeQuery(); if (rs.next()) { retValue = new MPeriod(ctx, rs, trx); } } catch (SQLException e) { s_log.log(Level.SEVERE, "DateAcct=" + Date, e); } finally { DB.closeResultSet(rs); DB.closeStatement(pstmt); } if (retValue == null) s_log.warning("No Period for " + Date + " (C_Calendar_ID=" + C_Calendar_ID + ")"); return retValue; } // getPeriod
/** * Get Field * * @param AD_Field_ID id * @param windowNo relative windowNo * @return field or null */ public UIField getField(int AD_Field_ID, int windowNo) { Integer key = Integer.valueOf(AD_Field_ID); UIField field = m_fields.get(key); if (field == null) { UIFieldVOFactory fieldFactory = new UIFieldVOFactory(); UIFieldVO vo = fieldFactory.get(m_context, AD_Field_ID); // m_context.setSOTrx(windowNo, isSOTrx); if (vo != null) { field = new UIField(vo); field.initialize(m_context, windowNo); log.warning("Loaded directly: " + field); // SOTrx may not // be correct m_fields.put(key, field); // save in cache } } // create new return field; } // getField
/** * Field Changed * * @param windowNo relative window * @param AD_Field_ID field * @param AD_Tab_ID tab * @param oldValue old field value * @param newValue new field value * @param context record context * @return Field Change VO */ public ChangeVO fieldChanged( int windowNo, int AD_Field_ID, int AD_Tab_ID, String oldValue, String newValue, Map<String, String> context) { // Same Values if (oldValue == null || oldValue.equals(Null.NULLString)) oldValue = ""; if (newValue == null || newValue.equals(Null.NULLString)) newValue = ""; if (oldValue.equals(newValue)) return null; // UITab tab = getTab(AD_Tab_ID); if (tab == null) { log.config("Not found AD_Tab_ID=" + AD_Tab_ID); return null; } UIField field = getField(AD_Field_ID, windowNo); if (field == null) { log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); return null; } CContext ctx = new CContext(m_context.entrySet()); ctx.addWindow(windowNo, context); CContext origCtx = new CContext(m_context.entrySet()); origCtx.addWindow(windowNo, context); ChangeVO change = null; try { // reset the thread active flag, in case the thread is reused later on CThreadUtil.setCalloutActive(false); change = tab.fieldChanged( origCtx, ctx, new ArrayList<UIField>(5), windowNo, field, oldValue, newValue); CThreadUtil.setCalloutActive(false); ctx.setContext(windowNo, field.getColumnName(), change.newConfirmedFieldValue); } catch (Exception e) { log.severe("fieldChange error:" + field.getColumnName() + e.getMessage()); } finally { CThreadUtil.setCalloutActive(false); } return change; } // fieldChanged
/** * Get Field Lookup Value Direct * * @param windowNo Window * @param AD_Field_ID * @param keyValues array of id values * @param cache * @return list of display values */ public ArrayList<String> getLookupValueOnlyDirect( int AD_Field_ID, ArrayList<String> keyValues, boolean cache) { int windowNo = 0; // No Context ArrayList<String> displayValues = new ArrayList<String>(); UIField field = getField(AD_Field_ID, windowNo); if (field == null) log.warning("Cannot find AD_Field_ID=" + AD_Field_ID); // for (int i = 0; i < keyValues.size(); i++) { String key = keyValues.get(i); String value = null; if (field != null) value = field.getLookupDisplay(m_context, windowNo, key, cache); if (value == null) { /* * if(key == null) value = ""; else value = "<" + key + ">"; */ value = ""; } displayValues.add(value); } return displayValues; } // getLookupValueDirect