📄 finreport.java
字号:
.append(" AND Record_ID=0 AND Fact_Acct_ID=0");
int no = DB.executeUpdate(update.toString());
if (no != 1)
log.error("lineRelativePeriod - no=" + no + " for " + update);
else if (Log.isTraceLevel(10))
log.debug(update);
}
} // lineRelativePeriod
/**
* For all columns (in a line) with segment values
* @param line line
*/
private void lineSegmentValue (int line)
{
// for all columns
for (int col = 0; col < m_columns.length; col++)
{
// Only segment Values (from Column)
if (m_columns[col].isColumnTypeSegmentValue ())
{
log.debug("lineSegmentValue - from column " + m_columns[col]
+ " - c=" + col + ", l=" + line);
}
}
} // lineSegmentValue
/*************************************************************************/
/**
* Line + Column calculation
*/
private void doCalculations()
{
log.debug("doCalculations");
// for all lines ***************************************************
for (int line = 0; line < m_lines.length; line++)
{
if (!m_lines[line].isLineTypeCalculation ())
continue;
int oper_1 = m_lines[line].getOper_1_ID();
int oper_2 = m_lines[line].getOper_2_ID();
// Adding
if (m_lines[line].isCalculationTypeAdd() || m_lines[line].isCalculationTypeRange())
{
// Reverse range
if (oper_1 < oper_2)
{
int temp = oper_1;
oper_1 = oper_2;
oper_2 = temp;
}
StringBuffer sb = new StringBuffer ("UPDATE T_Report SET (");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("Col_").append (col);
}
sb.append(") = (SELECT ");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("COALESCE(SUM(Col_").append (col).append("),0)");
}
sb.append(" FROM T_Report WHERE AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND PA_ReportLine_ID IN (");
if (m_lines[line].isCalculationTypeAdd())
sb.append(oper_1).append(",").append(oper_2);
else
sb.append(getLineIDs (oper_1, oper_2)); // list of columns to add up
sb.append(") AND Record_ID=0 AND Fact_Acct_ID=0) "
+ "WHERE AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND PA_ReportLine_ID=").append(m_lines[line].getPA_ReportLine_ID())
.append(" AND Record_ID=0 AND Fact_Acct_ID=0");
int no = DB.executeUpdate(sb.toString());
if (no != 1)
log.error("doCalculations (+) #=" + no + " for " + m_lines[line] + " - " + sb.toString());
else
{
log.debug ("doCalculations (lin) " + m_lines[line]);
if (Log.isTraceLevel(8))
log.debug ("doCalculations - " + sb.toString ());
}
}
else // No Add (subtract, percent)
{
// Step 1 - get First Value or 0 in there
StringBuffer sb = new StringBuffer ("UPDATE T_Report SET (");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("Col_").append (col);
}
sb.append(") = (SELECT ");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("COALESCE(r2.Col_").append (col).append(",0)");
}
sb.append(" FROM T_Report r2 WHERE r2.AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND r2.PA_ReportLine_ID=").append(oper_1)
.append(" AND r2.Record_ID=0 AND r2.Fact_Acct_ID=0) "
//
+ "WHERE AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND PA_ReportLine_ID=").append(m_lines[line].getPA_ReportLine_ID())
.append(" AND Record_ID=0 AND Fact_Acct_ID=0");
int no = DB.executeUpdate(sb.toString());
if (no != 1)
{
log.error ("doCalculations (1) #=" + no + " for " + m_lines[line] + " - " + sb.toString ());
continue;
}
// Step 2 - do Calculation with Second Value
sb = new StringBuffer ("UPDATE T_Report r1 SET (");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("Col_").append (col);
}
sb.append(") = (SELECT ");
for (int col = 0; col < m_columns.length; col++)
{
if (col > 0)
sb.append(",");
sb.append ("r1.Col_").append (col);
if (m_lines[line].isCalculationTypeSubtract())
sb.append("-");
else
sb.append("/");
sb.append ("COALESCE(r2.Col_").append (col).append(",0)");
if (m_lines[line].isCalculationTypePercent())
sb.append(" *100");
}
sb.append(" FROM T_Report r2 WHERE r2.AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND r2.PA_ReportLine_ID=").append(oper_2)
.append(" AND r2.Record_ID=0 AND r2.Fact_Acct_ID=0) "
//
+ "WHERE AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND PA_ReportLine_ID=").append(m_lines[line].getPA_ReportLine_ID())
.append(" AND Record_ID=0 AND Fact_Acct_ID=0");
no = DB.executeUpdate(sb.toString());
if (no != 1)
log.error ("doCalculations (1) #=" + no + " for " + m_lines[line] + " - " + sb.toString ());
else
{
log.debug ("doCalculations (lin) - " + m_lines[line]);
if (Log.isTraceLevel(8))
log.debug ("doCalculations - " + sb.toString());
}
}
} // for all lines
// for all columns ***********************************************
for (int col = 0; col < m_columns.length; col++)
{
// Relative Period Column
if (!m_columns[col].isColumnTypeCalculation ())
continue;
StringBuffer sb = new StringBuffer ("UPDATE T_Report SET ");
// Column to set
sb.append ("Col_").append (col).append("=");
// First Operand
int ii_1 = getColumnIndex(m_columns[col].getOper_1_ID());
if (ii_1 < 0)
{
log.error("doCalculations - Column Index for Operator 1 not found - " + m_columns[col]);
continue;
}
// Second Operand
int ii_2 = getColumnIndex(m_columns[col].getOper_2_ID());
if (ii_2 < 0)
{
log.error("doCalculations - Column Index for Operator 2 not found - " + m_columns[col]);
continue;
}
// Reverse Range
if (ii_1 > ii_2 && m_columns[col].isCalculationTypeRange())
{
int temp = ii_1;
ii_1 = ii_2;
ii_2 = temp;
}
sb.append ("Col_").append (ii_1);
if (m_columns[col].isCalculationTypeAdd())
sb.append("+");
else if (m_columns[col].isCalculationTypeSubtract())
sb.append("-");
else if (m_columns[col].isCalculationTypePercent())
sb.append("/");
if (m_columns[col].isCalculationTypeRange())
{
for (int ii = ii_1+1; ii <= ii_2; ii++)
sb.append("+Col_").append (ii);
}
else // single second operator
sb.append ("Col_").append (ii_2);
if (m_columns[col].isCalculationTypePercent())
sb.append("*100");
//
sb.append(" WHERE AD_PInstance_ID=").append(getAD_PInstance_ID()).append(" AND Record_ID=0 AND Fact_Acct_ID=0");
int no = DB.executeUpdate(sb.toString());
if (no < 1)
log.error ("doCalculations #=" + no + " for " + m_columns[col] + " - " + sb.toString());
else
{
log.debug ("doCalculations (col) - " + m_columns[col]);
if (Log.isTraceLevel(8))
log.debug ("doCalculations - " + sb.toString ());
}
} // for all columns
} // doCalculations
/**
* Get List of PA_ReportLine_ID from .. to
* @param fromID from ID
* @param toID to ID
* @return comma separated list
*/
private String getLineIDs (int fromID, int toID)
{
StringBuffer sb = new StringBuffer();
sb.append(fromID);
boolean addToList = false;
for (int line = 0; line < m_lines.length; line++)
{
int PA_ReportLine_ID = m_lines[line].getPA_ReportLine_ID();
if (addToList)
{
sb.append (",").append (PA_ReportLine_ID);
if (PA_ReportLine_ID == toID) // done
break;
}
else if (PA_ReportLine_ID == fromID) // from already added
addToList = true;
}
return sb.toString();
} // getLineIDs
/**
* Get Column Index
* @param PA_ReportColumn_ID PA_ReportColumn_ID
* @return zero based index or if not found
*/
private int getColumnIndex (int PA_ReportColumn_ID)
{
for (int i = 0; i < m_columns.length; i++)
{
if (m_columns[i].getPA_ReportColumn_ID() == PA_ReportColumn_ID)
return i;
}
return -1;
} // getColumnIndex
/*************************************************************************/
/**
* Get Financial Reporting Period based on reportong Period and offset.
* @param relativeOffset offset
* @return reporting period
*/
private FinReportPeriod getPeriod (BigDecimal relativeOffset)
{
if (relativeOffset == null)
return getPeriod(0);
return getPeriod(relativeOffset.intValue());
} // getPeriod
/**
* Get Financial Reporting Period based on reportong Period and offset.
* @param relativeOffset offset
* @return reporting period
*/
private FinReportPeriod getPeriod (int relativeOffset)
{
// find current reporting period C_Period_ID
if (m_reportPeriod < 0)
{
for (int i = 0; i < m_periods.length; i++)
{
if (m_C_Period_ID == m_periods[i].getC_Period_ID())
{
m_reportPeriod = i;
break;
}
}
}
if (m_reportPeriod < 0 || m_reportPeriod >= m_periods.length)
throw new UnsupportedOperationException ("FinReport.getPeriod - Period index not found - ReportPeriod="
+ m_reportPeriod + ", C_Period_ID=" + m_C_Period_ID);
// Bounds check
int index = m_reportPeriod + relativeOffset;
if (index < 0)
{
log.error("getPeriod - Relative Offset(" + relativeOffset + ") not valid for selected Period(" + m_reportPeriod + ")");
index = 0;
}
else if (index >= m_periods.length)
{
log.error("getPeriod - Relative Offset(" + relativeOffset + ") not valid for selected Period(" + m_reportPeriod + ")");
index = m_periods.length - 1;
}
// Get Period
return m_periods[index];
} // getPeriod
/*************************************************************************/
/**
* Set Detail Lines if enabled
*/
private void setDetailLines()
{
log.info("setDetailLines");
if (!m_report.isListSources())
return;
// for all source lines
for (int line = 0; line < m_lines.length; line++)
{
// Line Segment Value (i.e. not calculation)
if (m_lines[line].isLineTypeSegmentValue ())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -