public List<ProviderReport> SearchProvidersByName(string apiKey, string query) { string procName = "[dbo].[ProvidersReport_ExtDev_Search_byName]"; List<ProviderReport> list = null; _data.ExecuteCmd(procName, paramCol => { paramCol.AddWithValue("@apiKey", apiKey); paramCol.AddWithValue("@search", query); }, (reader, set) => { ProviderReport providerReport = HydrateProvidersReport(reader); if (list == null) { list = new List<ProviderReport>(); } list.Add(providerReport); }); return list; }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { Title = "Tobii Interaction (Core)", Description = "Tracks head and eye movement. Requires a Tobii device, see https://tobiigaming.com/", API = "Tobii.Interaction", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName }, ErrorMessage = _providerError }; if (_isLive) { foreach (var deviceReport in _deviceReports) { var report = GetDeviceReport(deviceReport.Key); if (report != null) { providerReport.Devices.Add(report); } } } return(providerReport); }
private static ProviderReport HydrateProvidersReport(IDataReader reader, out int index) { ProviderReport providerReport = new ProviderReport(); index = 0; providerReport.Id = reader.GetSafeInt32(index++); providerReport.Title = reader.GetSafeString(index++); providerReport.FirstName = reader.GetSafeString(index++); providerReport.Mi = reader.GetSafeString(index++); providerReport.LastName = reader.GetSafeString(index++); providerReport.Gender = reader.GetSafeString(index++); providerReport.Phone = reader.GetSafeString(index++); providerReport.Fax = reader.GetSafeString(index++); providerReport.Email = reader.GetSafeString(index++); providerReport.UserId = reader.GetSafeInt32(index++); providerReport.DateAttested = reader.GetSafeDateTime(index++); providerReport.Compliant = reader.GetSafeInt32(index++); //refactor this code with hydrateproviderdetails after hector gives guidance providerReport.Professional = reader.GetSafeJSON <ProfessionalDetailsReport>(index++); providerReport.Practices = reader.GetSafeJSON <List <PracticeReport> >(index++); providerReport.Affiliations = reader.GetSafeJSON <List <AffiliationReport> >(index++); providerReport.Certifications = reader.GetSafeJSON <List <TypeTableBase> >(index++); providerReport.Expertise = reader.GetSafeJSON <List <TypeTableBase> >(index++); providerReport.Languages = reader.GetSafeJSON <List <TypeTableBase> >(index++); providerReport.Licenses = reader.GetSafeJSON <List <ProviderLicenseReport> >(index++); providerReport.Specializations = reader.GetSafeJSON <List <SpecializationReport> >(index++); return(providerReport); }
public List<ProviderReport> GetProvidersByExpertise(string apiKey, string expertise) { string procName = "[dbo].[ProvidersReport_ExtDev_Select_byExpertise]"; List<ProviderReport> list = null; _data.ExecuteCmd(procName, paramCol => { paramCol.AddWithValue("@apiKey", apiKey); paramCol.AddWithValue("@expertise", expertise); }, (reader, set) => { ProviderReport providerReport = HydrateProvidersReport(reader); if (list == null) { list = new List<ProviderReport>(); } list.Add(providerReport); }); return list; }
private static void PopulateSharedBaseExcelCells(ExcelWorksheet worksheet, ProviderReport providerReport, int rowIndex, out int colIndex) { colIndex = 1; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Id; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.FirstName; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.LastName; }
public List<ProviderReport> GetProvidersBySpecialization(string apiKey, string specialization) { string procName = "[dbo].[ProvidersReport_ExtDev_Select_bySpecialization]"; List<ProviderReport> list = null; _data.ExecuteCmd(procName, paramCol => { paramCol.AddWithValue("@apiKey", apiKey); paramCol.AddWithValue("@specialization", specialization); }, (reader, set) => { ProviderReport providerReport = HydrateProvidersReport(reader); if (list == null) { list = new List<ProviderReport>(); } list.Add(providerReport); }); return list; }
public List<ProviderReport> GetAllProviderDetails(string apiKey) { string procName = "[dbo].[ProvidersReport_ExtDev_SelectAll_Details]"; List<ProviderReport> list = null; _data.ExecuteCmd(procName, paramCol => { paramCol.AddWithValue("@apiKey", apiKey); }, (reader, set) => { ProviderReport providerReport = HydrateProvidersReport(reader); if (list == null) { list = new List<ProviderReport>(); } list.Add(providerReport); }); return list; }
public Device(DeviceReport device, ProviderReport providerReport, DeviceIoType type) : this() { Title = device.DeviceName; ProviderName = providerReport.ProviderDescriptor.ProviderName; DeviceHandle = device.DeviceDescriptor.DeviceHandle; DeviceNumber = device.DeviceDescriptor.DeviceInstance; DeviceBindingMenu = GetDeviceBindingMenu(device.Nodes, type); }
public Device(DeviceReport device, ProviderReport providerReport, List <DeviceBindingNode> deviceBindingMenu) : this() { Title = device.DeviceName; ProviderName = providerReport.ProviderDescriptor.ProviderName; DeviceHandle = device.DeviceDescriptor.DeviceHandle; DeviceNumber = device.DeviceDescriptor.DeviceInstance; DeviceBindingMenu = deviceBindingMenu; IsCache = false; }
public static string GetProviderStatus(string name, ProviderReport providerReport) { var providerInstance = IOW.Instance.GetProvider(name); var str = $"{name} with {providerReport.Devices.Count} devices. IsLive = {providerInstance.IsLive}"; if (!providerInstance.IsLive) { str += $", Reason = {providerReport.ErrorMessage}"; } return(str); }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { Title = "XInput (Core)", Description = "Reads Xbox gamepads", API = "XInput", ProviderDescriptor = _providerDescriptor, Devices = _deviceReports }; return(providerReport); }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { Title = "SpaceMouse (Core)", Description = "Allows reading of SpaceMouse devices.", API = "HidLibrary", ProviderDescriptor = _providerDescriptor }; providerReport.Devices.Add(GetInputDeviceReport(_spaceMouseProDescriptor)); return(providerReport); }
public ProviderReport GetOutputList() { providerReport = new ProviderReport { Title = "ViGEm", API = "ViGEm", Description = "Allows emulation of Gamepads (Xbox, PS etc)", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName } }; providerReport.Devices = devicesHandler.GetDeviceList(); return(providerReport); }
private static void PopulateBaseExcelCells(ExcelWorksheet worksheet, ProviderReport providerReport, int rowIndex, out int colIndex) { colIndex = 1; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Id; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Title; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.FirstName; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Mi; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.LastName; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Gender; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Phone; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Fax; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Email; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.DateAttested; worksheet.Cells[rowIndex, colIndex++].Value = providerReport.Compliant == 1 ? "Compliant" : "Noncompliant"; }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { Title = "Tobii Interaction (Core)", Description = "Tracks head and eye movement. Requires a Tobii device, see https://tobiigaming.com/", API = "Tobii.Interaction", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName }, Devices = deviceReports }; return(providerReport); }
public Core_ViGEm() { logger = new Logger(ProviderName); _providerReport = new ProviderReport { Title = "ViGEm", API = "ViGEm", Description = "Allows emulation of Gamepads (Xbox, PS etc)", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName } }; InitLibrary(); }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { API = "DS4WindowsApi", Description = "Provides access to DS4 controllers", Title = "DS4Windows", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName } }; providerReport.Devices.Add(GetInputDeviceReport(0)); return(providerReport); }
public ProviderReport GetOutputList() { var pr = new ProviderReport { Title = "vJoy (Core)", Description = "Allows emulation of DirectInput sticks. Requires driver from http://vjoystick.sourceforge.net/", API = "vJoy", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName }, Devices = deviceReports }; return(pr); }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { Title = "SpaceMouse (Core)", Description = "Allows reading of SpaceMouse devices.", API = "HidLibrary", ProviderDescriptor = _providerDescriptor }; for (var i = 0; i < _connectedDevices.Count; i++) { providerReport.Devices.Add(GetInputDeviceReport(BuildDeviceDescriptor(i))); } return(providerReport); }
public ProviderReport GetOutputList() { var providerReport = new ProviderReport { Title = "Titan One", Description = "Allows interaction with the ConsoleTuner Titan One device", API = "TitanOne", ProviderDescriptor = new ProviderDescriptor { ProviderName = "Core_TitanOne" } }; foreach (var deviceClass in outputHandlers) { providerReport.Devices.Add(deviceClass.Value.GetOutputReport()); } return(providerReport); }
public ProviderReport GetInputList() { var providerReport = new ProviderReport { API = "DS4WindowsApi", Description = "Provides access to DS4 controllers", Title = "DS4Windows", ProviderDescriptor = new ProviderDescriptor { ProviderName = ProviderName } }; for (var i = 0; i < connectedControllers.Count; i++) { providerReport.Devices.Add(GetInputDeviceReport(i)); } return(providerReport); }
private void BuildProviderReport() { _providerReport = new ProviderReport { Title = "DirectInput (Core)", Description = "Allows reading of generic (DirectInput) joysticks.", API = "DirectInput", ProviderDescriptor = _providerDescriptor }; foreach (var guidList in _connectedDevices) { for (var i = 0; i < guidList.Value.Count; i++) { var deviceDescriptor = new DeviceDescriptor { DeviceHandle = guidList.Key, DeviceInstance = i }; _providerReport.Devices.Add(GetInputDeviceReport(deviceDescriptor)); } } }
private void BuildInputDeviceList() { var providerReport = new ProviderReport { Title = "MIDI Input (Core)", Description = "Provides support for MIDI devices", API = "Midi", ProviderDescriptor = _providerDescriptor }; foreach (var deviceIdList in _connectedInputDevices) { for (var i = 0; i < deviceIdList.Value.Count; i++) { var deviceDescriptor = new DeviceDescriptor { DeviceHandle = deviceIdList.Key, DeviceInstance = i }; providerReport.Devices.Add(GetInputDeviceReport(deviceDescriptor)); } } _inputProviderReport = providerReport; }
public int GetWeeklyProviderReports() { int result = 0; //0: success, 1: member is null, 2: serveList if (Validator.OnlyRunOnceFlagForProvider) { Validator.OnlyRunOnceFlagForProvider = false; List <ProviderReport> providerReports = null; try { //TimeSpan startDate;//calculate start date from schedule; //NOT USED! REMOVE? //TimeSpan endDate;//calculate end date from schedule; //NOT USED! REMOVE? //compare the current time with the time set while (true) { Schedule _schedule = scheduleList.GetSchedule(ReportType.ProviderReportType); DateTime nTime = DateTime.Now; //String _nowTime = DateTime.Now.ToString("hh:mm"); String _nowTime = nTime.Hour.ToString() + ":" + nTime.Minute.ToString(); String _schTime = _schedule.Time.Hours.ToString() + ":" + _schedule.Time.Minutes.ToString(); Console.WriteLine("now -> system: " + _nowTime + "->" + _schTime); if (_nowTime.Equals(_schTime)) { providerReports = new List <ProviderReport>(); List <Provider> providers = providerList.GetAllProviders(); if (providers != null) { foreach (Provider provider in providers) { ProviderReport providerReport = new ProviderReport(); String fileName; _nowTime = _nowTime.Replace(":", "_"); fileName = "Provider_" + provider.Name + "_" + _nowTime + ".txt"; // System.IO.File.WriteAllText(@"WriteText.txt", text); using (System.IO.StreamWriter file = new System.IO.StreamWriter(PathFactory.ReportPath() + fileName)) { file.WriteLine("----------------------Provider Report--------------------"); file.WriteLine("Provider ID: " + provider.ID); file.WriteLine("Provider Name: " + provider.Name); file.WriteLine("City: " + provider.City); file.WriteLine("State: " + provider.State); file.WriteLine("Street Address: " + provider.StreetAddress); file.WriteLine("Zip Code: " + provider.ZipCode); List <ServiceRecord> serveList = serviceRecordList.GetAllServiceRecordForProvider(provider.ID); if (serveList != null) { int counter = 0; foreach (ServiceRecord s in serveList) { counter++; int serviceCode = s.ServiceCode; Service service = providerDirectory.GetService(serviceCode); if (service != null) { file.WriteLine("\nService:" + counter); file.WriteLine("Service Name: " + service.ServiceName); file.WriteLine("Service Code: " + service.ServiceCode); file.WriteLine("Service Fee: " + service.ServiceFee); } } } else { result = 2;//serveList is null; //break; } } providerReports.Add(providerReport); } } else { result = 1;//providers is null; //break; } } Thread.Sleep(40000); } } catch (Exception e) { providerReports = null; if (e.GetType() != typeof(HttpResponseException)) { throw new HttpResponseException( Request.CreateErrorResponse(HttpStatusCode.BadRequest, e.Message)); } else { throw e; } } } return(result); }
public string GenerateProviderReport(User provider, List <UserServiceLinker> services) { Report providerReport = new ProviderReport(provider, services); return(providerReport.ReportBody); }
public void RefreshConnectedDevices() { _deviceHandleToId = new Dictionary <string, List <int> >(); _deviceReports = new List <DeviceReport>(); string handle; for (var i = 1; i < 11; i++) { if (ManagedWrapper.IsKeyboard(i) != 1) { continue; } handle = ManagedWrapper.GetHardwareStr(_deviceContext, i, 1000); if (handle == "") { continue; } int vid = 0, pid = 0; GetVidPid(handle, ref vid, ref pid); var name = ""; if (vid != 0 && pid != 0) { name = DeviceHelper.GetDeviceName(vid, pid); } if (name == "") { name = handle; } handle = $@"Keyboard\{handle}"; if (!_deviceHandleToId.ContainsKey(handle)) { _deviceHandleToId.Add(handle, new List <int>()); } var instance = _deviceHandleToId[handle].Count; _deviceHandleToId[handle].Add(i); name = $"K: {name}"; if (instance > 0) { name += $" #{instance + 1}"; } _deviceReports.Add(new DeviceReport { DeviceName = name, DeviceDescriptor = new DeviceDescriptor { DeviceHandle = handle, DeviceInstance = instance }, Nodes = new List <DeviceReportNode> { _keyboardList } }); //Log(String.Format("{0} (Keyboard) = VID: {1}, PID: {2}, Name: {3}", i, vid, pid, name)); } for (var i = 11; i < 21; i++) { if (ManagedWrapper.IsMouse(i) != 1) { continue; } handle = ManagedWrapper.GetHardwareStr(_deviceContext, i, 1000); if (handle == "") { continue; } int vid = 0, pid = 0; GetVidPid(handle, ref vid, ref pid); var name = ""; if (vid != 0 && pid != 0) { name = DeviceHelper.GetDeviceName(vid, pid); } if (name == "") { name = handle; } handle = $@"Mouse\{handle}"; if (!_deviceHandleToId.ContainsKey(handle)) { _deviceHandleToId.Add(handle, new List <int>()); } var instance = _deviceHandleToId[handle].Count; _deviceHandleToId[handle].Add(i); name = $"M: {name}"; if (instance > 0) { name += $" #{instance + 1}"; } _deviceReports.Add(new DeviceReport { DeviceName = name, DeviceDescriptor = new DeviceDescriptor { DeviceHandle = handle, DeviceInstance = instance }, Nodes = new List <DeviceReportNode> { _mouseButtonList, StaticData.MouseAxisList } }); //Log(String.Format("{0} (Mouse) = VID/PID: {1}", i, handle)); //Log(String.Format("{0} (Mouse) = VID: {1}, PID: {2}, Name: {3}", i, vid, pid, name)); } _providerReport = new ProviderReport { Title = "Interception (Core)", Description = "Supports per-device Keyboard and Mouse Input/Output, with blocking\nRequires custom driver from http://oblita.com/interception", API = "Interception", ProviderDescriptor = _providerDescriptor, Devices = _deviceReports }; }
public MemoryStream ReportSelectAll(ProviderDetailCategories categories, int userId) { string procName; if (userId == 0) { procName = "[dbo].[ProvidersReport_SelectAll_Details]"; } else { procName = "[dbo].[ProvidersReport_SelectAll_DetailsV2]"; } List <ProviderReport> list = null; _data.ExecuteCmd(procName, paramCol => { if (userId == 0) { ModifyReportParams(paramCol, categories); } else { ModifyReportParamsV2(paramCol, categories, userId); } }, (reader, set) => { ProviderReport provider = HydrateProvidersReport(reader, out int lastIndex); if (list == null) { list = new List <ProviderReport>(); } list.Add(provider); }); //this dict will keep track of the longest count across each category Dictionary <string, int> countDict = new Dictionary <string, int>(); bool catIsSelected; //filter categories by truthy, and add an entries to the dictionary "countDict" PropertyInfo[] truthyCategories = categories.GetType() .GetProperties() .Where(prop => { bool.TryParse(prop.GetValue(categories).ToString(), out catIsSelected); return(catIsSelected); }).ToArray(); foreach (PropertyInfo propertyInfo in truthyCategories) { countDict.Add(propertyInfo.Name, 0); } //get all properties of type List that are truthy within categories, and store them in arrayProperties for future access Type type = typeof(ProviderReport); PropertyInfo[] allProperties = type.GetProperties(); PropertyInfo[] arrayProperties = allProperties .Where(property => property.PropertyType.IsGenericType && countDict.ContainsKey(property.Name)).ToArray(); //iterate over each provider and update counts in dict foreach (ProviderReport providerReport in list) { foreach (PropertyInfo property in arrayProperties) { //nullcheck current prop ICollection propCollection = GetPropValue <ICollection>(providerReport, property.Name); if (propCollection != null) { //compare this particular instanced count to the count in the dict if (countDict[property.Name] < propCollection.Count) { countDict[property.Name] = propCollection.Count; } } } } var stream = new MemoryStream(); using (var package = new ExcelPackage(stream)) { #region concatenated details worksheet //create new worksheet with base info ExcelWorksheet concatenated = package.Workbook.Worksheets.Add("Concatenated Details"); ModifyBaseExcelHeaders(concatenated, out int concatenatedHeaderIndex); if (categories.Professional) { concatenated.Cells[1, concatenatedHeaderIndex++].Value = "NPI"; concatenated.Cells[1, concatenatedHeaderIndex++].Value = "Genders Accepted"; } //sort arrayProperties to ensure consistent excel column ordering between worksheets PropertyInfo[] sortedArrayProperties = arrayProperties.OrderBy(p => p.Name).ToArray(); //add cell to worksheet with value of property name for (int i = 0; i < sortedArrayProperties.Length; i++) { concatenated.Cells[1, concatenatedHeaderIndex++].Value = sortedArrayProperties[i].Name; } //call this before filling concatenated w/s using (var r = concatenated.Cells[1, 1, 1, concatenatedHeaderIndex - 1]) { r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; } //fill w/s with data int concatenatedRowIndex = 2; foreach (ProviderReport providerReport in list) { PopulateBaseExcelCells(concatenated, providerReport, concatenatedRowIndex, out int concatenatedColIndex); if (categories.Professional) { concatenated.Cells[concatenatedRowIndex, concatenatedColIndex].Value = providerReport.Professional?.NPI; concatenatedColIndex++; if (providerReport.Professional?.GendersAccepted != null) { concatenated.Cells[concatenatedRowIndex, concatenatedColIndex].Value = providerReport.Professional.GendersAccepted; } concatenatedColIndex++; } for (int i = 0; i < sortedArrayProperties.Length; i++) { ICollection propCollection = GetPropValue <ICollection>(providerReport, sortedArrayProperties[i].Name); if (propCollection != null) { string concatProp = ""; foreach (var prop in propCollection) { if (concatProp != "") { concatProp += $"; "; } string propName = ""; if (sortedArrayProperties[i].Name == "Licenses") { propName = GetPropValue <string>(prop, "State"); } else { propName = GetPropValue <string>(prop, "Name"); } concatProp += $"{propName}"; } concatenated.Cells[concatenatedRowIndex, concatenatedColIndex++].Value = concatProp; } else { concatenatedColIndex++; } } concatenatedRowIndex++; } concatenated.Cells.AutoFitColumns(0, 30); #endregion #region expanded details worksheet ExcelWorksheet expanded = package.Workbook.Worksheets.Add("Expanded Details"); ModifyBaseExcelHeaders(expanded, out int expandedHeaderIndex); if (categories.Professional) { expanded.Cells[1, expandedHeaderIndex++].Value = "NPI"; expanded.Column(expandedHeaderIndex).Style.Numberformat.Format = "#"; expanded.Cells[1, expandedHeaderIndex++].Value = "Genders Accepted"; } for (int i = 0; i < sortedArrayProperties.Length; i++) { for (int j = 0; j < countDict[sortedArrayProperties[i].Name]; j++) { string truncatedName = sortedArrayProperties[i].Name.EndsWith("s") ? sortedArrayProperties[i].Name.Substring(0, sortedArrayProperties[i].Name.Length - 1) : sortedArrayProperties[i].Name; expanded.Cells[1, expandedHeaderIndex++].Value = $"{truncatedName}{j + 1}"; } } using (var r = expanded.Cells[1, 1, 1, expandedHeaderIndex - 1]) { r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; } //fill w/s with data int expandedRowIndex = 2; foreach (ProviderReport providerReport in list) { PopulateBaseExcelCells(expanded, providerReport, expandedRowIndex, out int expandedColIndex); if (categories.Professional) { expanded.Cells[concatenatedRowIndex, expandedColIndex].Value = providerReport.Professional?.NPI; expandedColIndex++; if (providerReport.Professional?.GendersAccepted != null) { expanded.Cells[concatenatedRowIndex, expandedColIndex].Value = providerReport.Professional.GendersAccepted; } expandedColIndex++; } for (int i = 0; i < sortedArrayProperties.Length; i++) { ICollection propCollection = GetPropValue <ICollection>(providerReport, sortedArrayProperties[i].Name); int dictCount = countDict[sortedArrayProperties[i].Name]; if (propCollection != null) { foreach (var prop in propCollection) { string propName = ""; if (sortedArrayProperties[i].Name == "Licenses") { propName = GetPropValue <string>(prop, "State"); } else { propName = GetPropValue <string>(prop, "Name"); } expanded.Cells[expandedRowIndex, expandedColIndex++].Value = propName; } int propCount = propCollection.Count; if (propCount < dictCount) { expandedColIndex += dictCount - propCount; } } else { expandedColIndex += dictCount; } } expandedRowIndex++; } expanded.Cells.AutoFitColumns(0, 40); #endregion #region individual detail worksheets Dictionary <string, ExcelWorksheet> worksheets = new Dictionary <string, ExcelWorksheet>(); //creates appropriate worksheet detail names foreach (PropertyInfo propertyInfo in truthyCategories) { string friendlyWsName = propertyInfo.Name.EndsWith("s") ? propertyInfo.Name.Substring(0, propertyInfo.Name.Length - 1) : propertyInfo.Name; worksheets.Add(propertyInfo.Name, package.Workbook.Worksheets.Add(friendlyWsName + " Details")); } //populate all of the worksheets with shared headers foreach (var kvp in worksheets) { //ExcelWorksheet sharedWs = GetPropValue<ExcelWorksheet>(worksheets, key); ExcelWorksheet sharedWs = kvp.Value; int sharedHeaderIndex = 1; sharedWs.Cells[1, sharedHeaderIndex++].Value = "ID"; sharedWs.Cells[1, sharedHeaderIndex++].Value = "First Name"; sharedWs.Cells[1, sharedHeaderIndex++].Value = "Last Name"; if (kvp.Key == "Professional") { sharedWs.Cells[1, sharedHeaderIndex++].Value = "NPI"; sharedWs.Cells[1, sharedHeaderIndex++].Value = "Genders Accepted"; } else { string truncatedName = kvp.Key.EndsWith("s") ? kvp.Key.Substring(0, kvp.Key.Length - 1) : kvp.Key; sharedWs.Cells[1, sharedHeaderIndex++].Value = $"{truncatedName}"; } using (var r = sharedWs.Cells[1, 1, 1, sharedHeaderIndex - 1]) { r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; } //add data to w/s int sharedWsRowIndex = 2; foreach (ProviderReport providerReport in list) { if (kvp.Key == "Professional") { PopulateSharedBaseExcelCells(sharedWs, providerReport, sharedWsRowIndex, out int sharedColIndex); sharedWs.Cells[sharedWsRowIndex, sharedColIndex].Value = providerReport.Professional?.NPI; sharedColIndex++; if (providerReport.Professional?.GendersAccepted != null) { sharedWs.Cells[sharedWsRowIndex, sharedColIndex].Value = providerReport.Professional.GendersAccepted; } sharedColIndex++; sharedWsRowIndex++; } else { IList prop = GetPropValue <IList>(providerReport, kvp.Key); if (prop != null) { for (int i = 0; i < prop.Count; i++) { PopulateSharedBaseExcelCells(sharedWs, providerReport, sharedWsRowIndex, out int sharedColIndex); if (kvp.Key == "Licenses") { sharedWs.Cells[sharedWsRowIndex, sharedColIndex++].Value = GetPropValue <string>(prop[i], "State"); } else { sharedWs.Cells[sharedWsRowIndex, sharedColIndex++].Value = GetPropValue <string>(prop[i], "Name"); if (kvp.Key == "Specializations") { bool isPrimarySpec = GetStructValue <bool>(prop[i], "IsPrimary"); if (isPrimarySpec) { sharedWs.Cells[sharedWsRowIndex, sharedColIndex - 1].Style.Font.Bold = true; } } } sharedWsRowIndex++; } } } } sharedWs.Cells.AutoFitColumns(0); } #endregion // set some document properties package.Workbook.Properties.Title = "Providers Report"; package.Workbook.Properties.Author = "Scrubs Data"; // save new workbook in the output directory package.Save(); } return(stream); }