IncomeStatement.aspx

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<xml  runat="server" id="dimensions">
	<dimensions>
		<entities>
			<entity>1</entity>
		</entities>
		<scenarios>All</scenarios>
		<measures>
			<measure>Output</measure>
		</measures>
		<accounts>
			<account>1030.00.000</account>
			<account>1040.00.000</account>
			<account>-</account>
			<account>1070.00.000</account>
			<account></account>
			<account>1080.00.010</account>
			<account>1080.00.020</account>
			<account>1080.00.030</account>
			<account>-</account>
			<account>1080.00.000</account>
			<account>1115.00.000</account>
			<account>1110.00.000</account>
			<account>-</account>
			<account>1150.00.000</account>
			<account></account>
			<account>1160.00.000</account>
			<account>1170.00.000</account>
			<account>-</account>
			<account>1200.00.000</account>
			<account></account>
			<account>1240.00.000</account>
			<account>1420.00.000</account>
			<account>-</account>
			<account>1600.00.000</account>
			<account>1690.00.000</account>
			<account>-</account>
			<account>1700.00.000</account>
			<account></account>
			<account>1730.00.000</account>
			<account></account>
			<account>1750.00.000</account>
			<account>=</account>
			<account></account>
			<account>7027.00.000</account>
			<account></account>
			<account>1800.00.000</account>
			<account>-</account>
			<account>1850.00.000</account>
			<account></account>
			<account>1900.00.000</account>
			<account></account>
			<account></account>
		</accounts>
		<time>All</time>
	</dimensions>
</xml>
<script runat="server">
	protected void Page_Load(object sender, System.EventArgs eventArgs)
	{
		string user = Request.Params["user"];
		if (user == null || user == "") user = "username";
		string password = Request.Params["password"];
		if (password == null || password == "") password = "password";
		string hsfServer = Request.Params["hsfServer"];
		if (hsfServer == null || hsfServer == "") hsfServer = "HSFServer";
		string database = Request.Params["database"];
		string entity = Request.Params["entity"];
		if (entity == null || entity == "") entity = "1";
		string scenario = Request.Params["scenario"];
		if (scenario == null || scenario == "") scenario = "Base";
		string measure = Request.Params["measure"];
		if (measure == null || measure == "") measure = "Output";

		bool entityOpened = false;
		string sessionID = "";
		HSFEntityWebService.HSFEntityWebService hsfEntityWebService = null;
		
		try
		{
			// Create general web service link.
			HSFWebService.HSFWebService hsfWebService = new HSFWebService.HSFWebService();

			// Create session with user/password.
			sessionID = hsfWebService.CreateSession(user, password);
			if (sessionID == "") throw new Exception("Can not create a valid session.");

			// Open server.
			hsfWebService.OpenServer(sessionID, hsfServer);

			// Enum databases and make sure there is at least one.
			string[] databases = hsfWebService.EnumDatabases(sessionID);
			if (databases.Length < 1) throw new Exception("There are no databases in the current server.");

			// Open database.
			if (database == null || database == "") database = databases[0];
			hsfWebService.OpenDatabase(sessionID, database);

			// Get a list of entities.
			System.Data.DataSet entities = hsfWebService.EnumEntities(sessionID, "", "All");

			if(entities == null || entities.Tables["Entities"] == null) throw new Exception("There are no entities in this database");
			System.Data.DataRow[] entityRows = entities.Tables["Entities"].Select();
			if (entityRows.Length < 1) throw new Exception("There are no entities in this database");
			entity = (string)entityRows[0]["ID"];

			// Create entity web service link.
			hsfEntityWebService = new HSFEntityWebService.HSFEntityWebService();
						
			// Open entity.
			hsfEntityWebService.OpenEntity(sessionID, entity, false);
			
			// Mark entity as opened.
			entityOpened = true;

			// Get list of time periods.
			System.Data.DataSet timePeriods = hsfEntityWebService.EnumTimePeriods(sessionID);
			if(timePeriods == null || timePeriods.Tables["TimePeriods"] == null) throw new Exception("There are no time periods in this entity");
			System.Data.DataRow[] timePeriodRows = timePeriods.Tables["TimePeriods"].Select();
			if (timePeriodRows.Length < 1) throw new Exception("here are no time periods in this entity");
			int timeCols = timePeriodRows.Length;

			System.Data.DataSet scenarios = hsfEntityWebService.EnumScenarios(sessionID);
			if (scenarios == null || scenarios.Tables["Scenarios"] == null) throw new Exception("There are no scenarios in this entity");
			System.Data.DataRow[] scenarioRows = scenarios.Tables["Scenarios"].Select();
			if (scenarioRows.Length < 1) throw new Exception("here are no scenarios in this entity");
			
			System.Data.DataSet accounts = hsfEntityWebService.EnumAccounts(sessionID);
			if (accounts == null || accounts.Tables["Accounts"] == null) throw new Exception("There are no accounts in this entity");
			System.Data.DataTable accountTable = accounts.Tables["Accounts"];
			System.Data.DataRow[] accountRows = accountTable.Select();
			if (accountRows.Length < 1) throw new Exception("here are no accounts in this entity");
			
			string[] accountList = null;
			string xml = this.dimensions.InnerText;
			System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
			xmlDoc.LoadXml(xml);
			System.Xml.XmlNodeList accountNodes = xmlDoc.SelectNodes("descendant::dimensions/accounts/account");
			if (accountNodes != null && accountNodes.Count > 0)
			{
				accountList = new string[accountNodes.Count];
				for (int j = 0; j < accountNodes.Count; j++)
				{
					// Get node and create a new data cell info object.
					System.Xml.XmlNode accountNode = accountNodes.Item(j);
					if (accountNode != null)
					{
						accountList[j] = accountNode.InnerText;
						if (accountList[j] == "") accountList[j] = " ";
					}
				}
			}

			System.Data.DataSet dataCellsOut = null;
			// Create data set for GetCellData call.
			System.Data.DataSet dataCellsIn = new System.Data.DataSet();
			System.Data.DataTable dataCellsInTable = dataCellsIn.Tables.Add("DataCells");

			// Add columns to the table.
			dataCellsInTable.Columns.Add("Entity", typeof(string));
			dataCellsInTable.Columns.Add("Account", typeof(string));
			dataCellsInTable.Columns.Add("Time", typeof(string));
			dataCellsInTable.Columns.Add("Scenario", typeof(string));
			dataCellsInTable.Columns.Add("Measure", typeof(string));
			dataCellsInTable.Columns.Add("CustomMembers", typeof(string));

			foreach (string account in accountList)
			{
				for (int j = 0; j < timeCols; j++)
				{
					System.Data.DataRow dataRow = dataCellsInTable.NewRow();
					dataRow["Entity"] = entity;
					dataRow["Account"] = account;
					dataRow["Measure"] = measure;
					dataRow["Scenario"] = scenario;
					dataRow["Time"] = timePeriodRows[j]["ID"];
					dataRow["CustomMembers"] = "";
					dataCellsInTable.Rows.Add(dataRow);
				}
			}

			// Call GetDataCells.
			dataCellsOut = hsfEntityWebService.GetEntityDataCells(sessionID, dataCellsIn);
			if (dataCellsOut == null) throw new Exception("DataCells data set not found.");					
			
			System.Data.DataTable dataCellsOutTable = dataCellsOut.Tables["DataCells"];
			if (dataCellsOutTable == null) throw new Exception("DataCells table not found.");

			// Create table.
			HtmlTable table = new HtmlTable();
			HtmlTableRow row;
			HtmlTableCell cell;

			// Create the top header row.
			row = new HtmlTableRow();

			// Create the first two header cells and add them to the current row.
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell("th");
			cell.Align = "center";
			cell.InnerHtml = "Account Names";
			row.Cells.Add(cell);

			// Create the time header.
			int i;
			for (i = 0; i < timeCols; i++)
			{
				System.Data.DataRow timePeriodRow = timePeriodRows[i];

				cell = new HtmlTableCell("th");
				cell.InnerHtml = (string)timePeriodRow["Name"];
				row.Cells.Add(cell);
			}

			// Add the row to the table.
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "left";
			cell.ColSpan = 4;
			cell.InnerHtml = "File: 1.alc Last Calculated 9:38:05 PM 6/10/2008";
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "right";
			cell.ColSpan = timeCols - 3;
			string scenarioList = "Scenario:<select name=\"scenarioList\" onChange=\"gotosite(this.options[this.selectedIndex].value)\">";
			for (i = 0; i < scenarioRows.Length; i++)
			{
				scenarioList += "<option value=\"IncomeStatement.aspx?scenario=" + (string)scenarioRows[i]["ID"] + "\"";
				if (scenario == (string)scenarioRows[i]["ID"]) scenarioList += " selected";
				scenarioList += ">" + scenarioRows[i]["ID"] + "</option>";
			}
			scenarioList += "</select>";
			cell.InnerHtml = scenarioList;
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "center";
			cell.ColSpan = timeCols + 1;
			cell.InnerHtml = "Income Statement for Sample Incorporated";
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "center";
			cell.ColSpan = timeCols + 1;
			cell.InnerHtml = "Strategic Plan 2006-2012";
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.ColSpan = timeCols + 1;
			cell.InnerHtml = " ";
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.InnerHtml = "Author:  Hyperion Solutions";
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "left";
			cell.ColSpan = timeCols;
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.InnerHtml = "SIC Code:  4800";
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "left";
			cell.ColSpan = timeCols;
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.InnerHtml = "Scenario:  Base";
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "left";
			cell.ColSpan = timeCols;
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.InnerHtml = "Millions of Dollars";
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.Align = "left";
			cell.ColSpan = timeCols;
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.ColSpan = timeCols + 1;
			cell.InnerHtml = " ";
			row.Cells.Add(cell);
			table.Rows.Add(row);

			// Create the top header row.
			row = new HtmlTableRow();

			// Create the first two header cells and add them to the current row.
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell("td");
			row.Cells.Add(cell);

			// Create the time cells.
			for (i = 0; i < timeCols; i++)
			{
				System.Data.DataRow timePeriodRow = timePeriodRows[i];
				
				cell = new HtmlTableCell();
				cell.Align = "center";
				cell.InnerHtml = (string)timePeriodRow["Name"];
				row.Cells.Add(cell);
			}

			// Add the row to the table.
			table.Rows.Add(row);

			// Create the next header row and add it to the table;
			row = new HtmlTableRow();
			cell = new HtmlTableCell("th");
			row.Cells.Add(cell);
			cell = new HtmlTableCell();
			cell.ColSpan = timeCols + 1;
			cell.InnerHtml = " ";
			row.Cells.Add(cell);
			table.Rows.Add(row);

			foreach (string account in accountList)
			{
				// Create the account row.
				row = new HtmlTableRow();

				if (account == "-")
				{
					cell = new HtmlTableCell("th");
					row.Cells.Add(cell);
					cell = new HtmlTableCell();
					row.Cells.Add(cell);
					for (i = 0; i < timeCols; i++)
					{
						cell = new HtmlTableCell();
						cell.InnerHtml = "<hr />";
						row.Cells.Add(cell);
					}
				}
				else if (account == "=")
				{
					cell = new HtmlTableCell("th");
					row.Cells.Add(cell);
					cell = new HtmlTableCell();
					row.Cells.Add(cell);
					for (i = 0; i < timeCols; i++)
					{
						cell = new HtmlTableCell();
						cell.InnerHtml = "======";
						row.Cells.Add(cell);
					}
				}
				else if (account == " ")
				{
					cell = new HtmlTableCell("th");
					row.Cells.Add(cell);
					cell = new HtmlTableCell();
					cell.ColSpan = timeCols + 1;
					cell.InnerHtml = " ";
					row.Cells.Add(cell);
				}
				else
				{
					cell = new HtmlTableCell("th");
					cell.Align = "left";
					cell.InnerHtml = account;
					row.Cells.Add(cell);
					cell = new HtmlTableCell();
					cell.Align = "left";
					accountRows = accountTable.Select("ID='" + account + "'");
					if (accountRows.Length > 0)
					{
						cell.InnerHtml = (string)accountRows[0]["Name"];
					}
					row.Cells.Add(cell);
					for (int j = 0; j < timeCols; j++)
					{
						cell = new HtmlTableCell();
						cell.Align = "right";
						
						try
						{
							System.Data.DataRow[] valueRows = dataCellsOutTable.Select("Account='" + account + "' AND Time='" + timePeriodRows[j]["ID"] + "'");
							if (valueRows.Length > 0)
							{
								Double d = Double.Parse((string)valueRows[0]["Value"]) / 1000000;
								cell.InnerHtml = d.ToString("N2");
							}
							else
							{
								cell.InnerHtml = "N/A";
							}
						}
						catch (Exception)
						{
							cell.InnerHtml = "N/A";
						}
						row.Cells.Add(cell);
					}
				}
				
				table.Rows.Add(row);
			}

			// Add the table to the page.
			this.Controls.Add(table);
		}
		catch (Exception e)
		{
			Response.Write("<center><h3>" + e.Message + "</h3></center>");
		}

		try
		{
			if (hsfEntityWebService != null && entity != null && entity != "" && entityOpened)
			{
				hsfEntityWebService.ReleaseEntityLock(sessionID, entity);
			}
		}
		catch (Exception e)
		{
		}
	}
</script>
<script language="JavaScript">
	function gotosite(site)
	{
		if(site != "")
		{
			self.location=site;
		}
	}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
   <title>Income Statement</title>
	<style type="text/css">
		th { color: white; background-color: darkgray }
		table { font-size: 90%; }
	</style>
</head>
	<body>
	</body>
</html>