public static string MeterStatusSummaryDrillDown(List<SpaceStatusModel> modelForView, CustomerConfig customerCfg) { StringBuilder sb = new StringBuilder(); // Build list of unique meters -- which will be our grouping List<int> uniqueMeterIDs = new List<int>(); foreach (SpaceStatusModel nextSpaceModel in modelForView) { if (uniqueMeterIDs.IndexOf(nextSpaceModel.MeterID) == -1) uniqueMeterIDs.Add(nextSpaceModel.MeterID); } // Loop for each meter foreach (int nextMeterID in uniqueMeterIDs) { // Build list of indexes inside modelForView that are for the current meter List<int> itemIndexesForCurrentMeter = new List<int>(); for (int loIdx = 0; loIdx < modelForView.Count; loIdx++) { if (modelForView[loIdx].MeterID == nextMeterID) itemIndexesForCurrentMeter.Add(loIdx); } SpaceStatusModel currentSpaceStatusModel = modelForView[itemIndexesForCurrentMeter[0]]; int totalSpaces = 0; int totalExpired = 0; int totalPaid = 0; int totalOther = 0; foreach (int itemIdx in itemIndexesForCurrentMeter) { SpaceStatusModel nextSpaceModel = modelForView[itemIdx]; totalSpaces++; /* if (nextSpaceModel.BayExpiryState == ExpiryState.Expired) totalExpired++; else if (nextSpaceModel.BayExpiryState == ExpiryState.Safe) totalPaid++; else if (nextSpaceModel.BayExpiryState == ExpiryState.Critical) totalPaid++; else totalOther++; */ if (nextSpaceModel.BayOccupancyState == OccupancyState.Empty) totalExpired++; else if (nextSpaceModel.BayOccupancyState == OccupancyState.Occupied) totalPaid++; else totalOther++; } // The TagBuilder class built-into the .NET framework is pretty nice, but it can get pretty tedious // trying to properly handle the InnerHtml if there are a lot of nested tags. To alleviate this problem, // I created a "BaseTagHelper" class that is very similar to the TagBuilder, but it hides the InnerHtml // property and replaces it with a "Children" property which is used to hold a a collection of nested // BaseTagHelper objects. When you call the ToString() method on BaseTagHelper, the InnerHtml will be // rendered automatically based on the children, and handles any level of nesting. This makes the whole // process simpler, because you can create a BaseTagHelper, add as many children (and grand-children) as // needed, then call one ToString() method that will render the main tag and all of its nested children! // Create tag for outer boundary of this entire block BaseTagHelper OuterPanel = new BaseTagHelper("div"); OuterPanel.AddCssClass("dtNoLinesOrGaps"); // Create a tag that will be used as a header row -- child of the outer boundary BaseTagHelper tbTitleRow = new BaseTagHelper("span"); OuterPanel.Children.Add(tbTitleRow); tbTitleRow.AddCssClass("dtr"); // display table-row tbTitleRow.MergeAttribute("style", "background-color:#CCFFFF;"); // Create tags that will be used as column headers -- child of the title row BaseTagHelper tbColHeader = new BaseTagHelper("span"); tbTitleRow.Children.Add(tbColHeader); tbColHeader.AddCssClass("dtc hcenter"); //display table-cell and horizontally centered tbColHeader.SetInnerText("Group"); tbColHeader = new BaseTagHelper("span"); tbTitleRow.Children.Add(tbColHeader); tbColHeader.AddCssClass("dtc hcenter"); tbColHeader.SetInnerText("Expired"); tbColHeader = new BaseTagHelper("span"); tbTitleRow.Children.Add(tbColHeader); tbColHeader.AddCssClass("dtc hcenter"); tbColHeader.SetInnerText("Vacant"); // Create a tag to be used as a group row -- child of the outer panel BaseTagHelper tbGroupRow = new BaseTagHelper("span"); OuterPanel.Children.Add(tbGroupRow); tbGroupRow.AddCssClass("dtr"); tbGroupRow.MergeAttribute("style", "background-color:#33FFFF;"); // Create a tag to be used as a column in the group row -- child of the group row BaseTagHelper tbGroupCol = new BaseTagHelper("span"); tbGroupRow.Children.Add(tbGroupCol); tbGroupCol.AddCssClass("dtc hcenter vcenter"); //display table-cell and both horizontally and vertically centered tbGroupCol.SetInnerText("Meter: " + currentSpaceStatusModel.MeterID.ToString()); // Column #2 of group row tbGroupCol = new BaseTagHelper("span"); tbGroupRow.Children.Add(tbGroupCol); tbGroupCol.AddCssClass("dtc hcenter vcenter"); //display table-cell and both horizontally and vertically centered tbGroupCol.SetInnerText(" "); // BaseTagHelper tbRoundPanel = new BaseTagHelper("span"); tbGroupCol.Children.Add(tbRoundPanel); tbRoundPanel.AddCssClass("rounded-corners NewMeterBlock"); tbRoundPanel.MergeAttribute("style", "width:120px; text-align:center; background-color:#99FFCC; border-collapse:separate; boder-spacing:1px;"); BaseTagHelper helloCell = new BaseTagHelper("span"); tbRoundPanel.Children.Add(helloCell); helloCell.SetInnerText(totalExpired.ToString() + "/" + totalSpaces.ToString()); BaseTagHelper tbTbl1 = new BaseTagHelper("div"); tbRoundPanel.Children.Add(tbTbl1); tbTbl1.MergeAttribute("style", "display:table; border:1px solid black; width:90%; margin:4px; border-collapse:separate; boder-spacing:1px;"); BaseTagHelper tbTbl1Row1 = new BaseTagHelper("span"); tbTbl1.Children.Add(tbTbl1Row1); tbTbl1Row1.AddCssClass("dtr"); BaseTagHelper tempCell = new BaseTagHelper("span"); tbTbl1Row1.Children.Add(tempCell); tempCell.AddCssClass("dtc"); tempCell.SetInnerText("Col1"); tempCell = new BaseTagHelper("span"); tbTbl1Row1.Children.Add(tempCell); tempCell.AddCssClass("dtc"); tempCell.MergeAttribute("style", "background-color:gray; width:100%;"); BaseTagHelper tbTbl2 = new BaseTagHelper("div"); tempCell.Children.Add(tbTbl2); tbTbl2.MergeAttribute("style", "display:table; width:100%;"); BaseTagHelper tbTbl2Row1 = new BaseTagHelper("span"); tbTbl2.Children.Add(tbTbl2Row1); tbTbl2Row1.AddCssClass("dtr"); int percent = 0; if (totalSpaces > 0) percent = Convert.ToInt32((Convert.ToDouble(totalExpired) / Convert.ToDouble(totalSpaces)) * 100.0f); if (percent > 0) { tempCell = new BaseTagHelper("span"); tbTbl2Row1.Children.Add(tempCell); tempCell.AddCssClass("dtc"); tempCell.MergeAttribute("style", "width:" + percent.ToString() + "%; padding:0px; background-color:Red; overflow:none;"); tempCell.SetInnerHtml(" "); // DEBUG: How do we use a not-breaking space? } percent = 0; if (totalSpaces > 0) percent = Convert.ToInt32((Convert.ToDouble(totalOther) / Convert.ToDouble(totalSpaces)) * 100.0f); if (percent > 0) { tempCell = new BaseTagHelper("span"); tbTbl2Row1.Children.Add(tempCell); tempCell.AddCssClass("dtc"); tempCell.MergeAttribute("style", "width:" + percent.ToString() + "%; padding:0px; background-color:Yellow; overflow:none;"); tempCell.SetInnerHtml(" "); } percent = 0; if (totalSpaces > 0) percent = Convert.ToInt32((Convert.ToDouble(totalPaid) / Convert.ToDouble(totalSpaces)) * 100.0f); if (percent > 0) { tempCell = new BaseTagHelper("span"); tbTbl2Row1.Children.Add(tempCell); tempCell.AddCssClass("dtc"); tempCell.MergeAttribute("style", "width:" + percent.ToString() + "%; padding:0px; background-color:Green; overflow:none;"); tempCell.SetInnerHtml(" "); //DEBUG: onclick="alert('clicked the green');" } // Column #3 of group row tbGroupCol = new BaseTagHelper("span"); tbGroupRow.Children.Add(tbGroupCol); tbGroupCol.AddCssClass("dtc hcenter vcenter"); //display table-cell and both horizontally and vertically centered tbGroupCol.SetInnerText("col3"); // tbRoundPanel = new BaseTagHelper("span"); tbGroupCol.Children.Add(tbRoundPanel); tbRoundPanel.AddCssClass("rounded-corners NewMeterBlock"); tbRoundPanel.MergeAttribute("style", "width:120px; text-align:center; background-color:#99FFCC; border-collapse:separate; boder-spacing:1px;"); tbRoundPanel.SetInnerText("Hello2"); // // Now render the outer panel tag, and we will obtain the Html for all of its children too sb.AppendLine(OuterPanel.ToString(TagRenderMode.Normal)); } return sb.ToString(); }
public static string RenderSystemInfo(ViewDataDictionary ViewData) { string result = string.Empty; BaseTagHelper table = null; BaseTagHelper tblRow = null; BaseTagHelper tblHeader = null; BaseTagHelper tblData = null; // Create table table = new BaseTagHelper("table"); // Create table header tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblRow.AddCssClass("yellow"); tblHeader = new BaseTagHelper("th"); tblRow.Children.Add(tblHeader); tblHeader.SetInnerText("Property"); tblHeader = new BaseTagHelper("th"); tblRow.Children.Add(tblHeader); tblHeader.SetInnerText("Value"); // Try to log some application and framework component version information. Ignore any exceptions here try { Assembly thisWebAppAssembly = MethodBase.GetCurrentMethod().DeclaringType.Assembly; // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Application"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(thisWebAppAssembly.GetName().Name + " v" + thisWebAppAssembly.GetName().Version.ToString()); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("MS MVC"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("ASP.NET MVC " + typeof(Controller).Assembly.ImageRuntimeVersion); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("MS .NET"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(".NET Framework " + typeof(Object).Assembly.ImageRuntimeVersion); } catch { } // Try to get info about the IIS version try { string iisVersion = string.Empty; iisVersion = (ViewData["SERVER_SOFTWARE"] as string); //Request.ServerVariables["SERVER_SOFTWARE"]; if (string.IsNullOrEmpty(iisVersion)) { string loFilename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "inetsrv\\inetinfo.exe"); if (!File.Exists(loFilename)) { loFilename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "inetsrv\\InetMgr.exe"); } if (File.Exists(loFilename)) { FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(loFilename); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("MS IIS"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Internet Information Services v" + myFileVersionInfo.FileVersion); } } else { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("MS IIS"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(iisVersion); } } catch { } // Try to log info about which user the website's AppPool/WorkerProcess runs as. Ignore any exceptions here try { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Process User Context"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(System.Security.Principal.WindowsIdentity.GetCurrent().Name); } catch { } // Try to log info about which app pool we are running under. Ignore any exceptions here try { string webAppPool = Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process); if (!string.IsNullOrEmpty(webAppPool)) { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Web App Pool"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(webAppPool); } } catch { } // Try to log some Operating System info. Ignore any exceptions here try { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Machine Name"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(Environment.MachineName); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Machine Type"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); if (Environment.Is64BitOperatingSystem) { tblData.SetInnerText("64-Bit, " + Environment.ProcessorCount.ToString() + " processors"); } else { tblData.SetInnerText("32-Bit, " + Environment.ProcessorCount.ToString() + " processors"); } // Try to get processer info try { string Query = "Select Name from Win32_Processor"; System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(Query); string processorInfo = string.Empty; foreach (System.Management.ManagementObject Win32 in searcher.Get()) { processorInfo = Win32["Name"] as string; if (!string.IsNullOrEmpty(processorInfo)) { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Processor"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(processorInfo); } } searcher.Dispose(); } catch { } // Try to get memory information try { string Query = "Select TotalVisibleMemorySize from Win32_OperatingSystem"; System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(Query); string sysMem = string.Empty; foreach (System.Management.ManagementObject Win32 in searcher.Get()) { sysMem = (Convert.ToInt32(Win32["TotalVisibleMemorySize"]) / 1024).ToString() + " MB"; // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("System Memory"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(sysMem); } searcher.Dispose(); } catch { } // Try to get the operating system name from management searcher. If that fails, // fallback to Environment.OSVersion, which unfortunately isn't as accurate try { string Query = "Select Name from Win32_OperatingSystem"; System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(Query); string OSVersion = string.Empty; foreach (System.Management.ManagementObject Win32 in searcher.Get()) { OSVersion = Win32["Name"] as string; if (!string.IsNullOrEmpty(OSVersion)) { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Windows OS"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(OSVersion); //break; } if (string.IsNullOrEmpty(OSVersion)) { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Windows OS"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(Environment.OSVersion.ToString()); } } } catch { } } catch { } // Let's try to get some info about server times try { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("IIS Server Timezone"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(CustomerLogic.CustomerManager.Instance.ServerTimeZone.StandardName + " [ " + CustomerLogic.CustomerManager.Instance.ServerTimeZone.DisplayName + " ]"); tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("IIS Server Clock"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(DateTime.Now.ToString("yyyy-M-d H:m:s")); tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("DB Server Clock"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(CustomerLogic.CustomerManager.GetDBServerTime().ToString("yyyy-M-d H:m:s")); tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Your Browser Clock"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerHtml( "<script language=\"javascript\">" + Environment.NewLine + "ourDate = new Date();" + Environment.NewLine + "document.write(ourDate.getFullYear() + \"-\" + (ourDate.getMonth() + 1) + \"-\" + ourDate.getDate() + \" \" +" + "ourDate.getHours() + \":\" + ourDate.getMinutes() + \":\" + ourDate.getSeconds());" + Environment.NewLine + /*"document.write(ourDate.toLocaleString());" + Environment.NewLine +*/ "</script>" ); } catch { } try { SqlConnectionStringBuilder dbConnectBuilder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["RBACDBConnection"].ConnectionString); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("RBAC DB"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(dbConnectBuilder.InitialCatalog + " on " + dbConnectBuilder.DataSource + " via user " + dbConnectBuilder.UserID); } catch { } try { SqlConnectionStringBuilder dbConnectBuilder = new SqlConnectionStringBuilder(CustomerLogic.CustomerManager.Instance._DBConnectStr_ReinoComm); // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("ReinoComm DB"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText(dbConnectBuilder.InitialCatalog + " on " + dbConnectBuilder.DataSource + " via user " + dbConnectBuilder.UserID); } catch { } try { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("PAM Connection"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); if (!string.IsNullOrEmpty(CustomerLogic.CustomerManager.Instance.PAMServerTCPAddress)) { tblData.SetInnerText(CustomerLogic.CustomerManager.Instance.PAMServerTCPAddress + ":" + CustomerLogic.CustomerManager.Instance.PAMServerTCPPort); } else { tblData.SetInnerText(CustomerLogic.CustomerManager.Instance.PaymentXMLSource); } } catch { } try { // Add data row and its cells tblRow = new BaseTagHelper("tr"); table.Children.Add(tblRow); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); tblData.SetInnerText("Loaded Customer Count"); tblData = new BaseTagHelper("td"); tblRow.Children.Add(tblData); tblData.AddCssClass("tdLeft"); List <CustomerConfig> allDTOs = CustomerLogic.CustomerManager.GetAllCustomerDTOs(); tblData.SetInnerText(allDTOs.Count.ToString()); } catch { } // Get final string from the tag builder for our table result = table.ToString(); return(result); }