⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 finreport.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				.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 + -