public void CreateDeviceMeterReadingHeaderMapping() { try { var dataSet = TableAgent.DataSet.Tables[FbTableName].Rows; RecordCount = TableAgent.RowCount; foreach (DataRow row in dataSet) { // get userid from old aspnetdb matching on patientid #####.##### var patId = row["PATIENTKEYID"].ToString(); var userId = MemoryMappings.GetUserIdFromPatientInfo(MigrationVariables.CurrentSiteId, patId); if (!mHelper.HasPatientMigrated(patId)) { if (userId != Guid.Empty) { var dmData = MemoryMappings.GetAllDiabetesManagementData().Where(w => w.UserId == userId).FirstOrDefault(); var meterName = (row["METERNAME"] is DBNull) ? String.Empty : row["METERNAME"].ToString(); var dev = new PatientDevice { UserId = userId, MeterIndex = (row["NUMEDICSMETERINDEX"] is DBNull) ? 0 : (Int32)row["NUMEDICSMETERINDEX"], Manufacturer = (row["MANUFACTURER"] is DBNull) ? String.Empty : row["MANUFACTURER"].ToString(), DeviceModel = (row["METERMODEL"] is DBNull) ? String.Empty : row["METERMODEL"].ToString(), DeviceName = meterName, SerialNumber = (row["SERIALNUMBER"] is DBNull) ? string.Empty : row["SERIALNUMBER"].ToString(), SoftwareVersion = (row["SOFTWAREVERSION"] is DBNull) ? String.Empty : row["SOFTWAREVERSION"].ToString(), HardwareVersion = (row["HARDWAREVERSION"] is DBNull) ? String.Empty : row["HARDWAREVERSION"].ToString() }; if (dmData != null) { dev.DiabetesManagementData = dmData; } var mrh = new ReadingHeader { ReadingKeyId = Guid.NewGuid(), UserId = userId, LegacyDownloadKeyId = (row["DOWNLOADKEYID"] is DBNull) ? String.Empty : row["DOWNLOADKEYID"].ToString(), ServerDateTime = (row["SERVERDATETIME"] is DBNull) ? new DateTime(1800, 1, 1) : mu.ParseFirebirdDateTime(row["SERVERDATETIME"].ToString()), MeterDateTime = (row["METERDATETIME"] is DBNull) ? new DateTime(1800, 1, 1) : mu.ParseFirebirdDateTime(row["METERDATETIME"].ToString()), Readings = (row["READINGS"] is DBNull) ? 0 : (Int32)row["READINGS"], SiteSource = (row["SOURCE"] is DBNull) ? String.Empty : row["SOURCE"].ToString(), ReviewedOn = (row["REVIEWEDON"] is DBNull) ? new DateTime(1800, 1, 1) : mu.ParseFirebirdDateTime(row["REVIEWEDON"].ToString()), }; if (meterName.ToLower().Contains("omnipod")) { var ePump = MemoryMappings.GetAllPump().Where(w => w.UserId == userId).FirstOrDefault(); if (ePump != null) { mrh.Pump = new Pump(); mrh.Pump.PumpKeyId = mrh.ReadingKeyId; if (ePump.PumpPrograms != null) { mrh.Pump.PumpPrograms = new List <PumpProgram>(); Array.ForEach(ePump.PumpPrograms.ToArray(), p => { var prog = new PumpProgram { CreationDate = p.CreationDate, NumOfSegments = p.NumOfSegments, ProgramKey = p.ProgramKey, ProgramName = p.ProgramName, Source = p.Source, Valid = p.Valid, PumpKeyId = mrh.Pump.PumpKeyId, IsEnabled = p.IsEnabled, ProgramTypeId = p.ProgramTypeId }; if (p.ProgramTimeSlots != null && p.ProgramTimeSlots.Count != 0) { Array.ForEach(p.ProgramTimeSlots.ToArray(), a => { prog.ProgramTimeSlots.Add(a); }); } CompletedPumpProgramMappings.Add(prog); //if (p.BolusProgramTimeSlots != null && p.BolusProgramTimeSlots.Count != 0) //{ // Array.ForEach(p.BolusProgramTimeSlots.ToArray(), r => // { // prog.BolusProgramTimeSlots.Add(r); // }); //} }); } if (ePump.PumpSettings != null) { mrh.Pump.PumpSettings = new List <PumpSetting>(); Array.ForEach(ePump.PumpSettings.ToArray(), s => { var ps = new PumpSetting { Date = s.Date, Description = s.Description, SettingName = s.SettingName, SettingValue = s.SettingValue, PumpKeyId = mrh.Pump.PumpKeyId }; CompletedPumpSettingMappings.Add(ps); }); } mrh.Pump.ActiveProgramId = ePump.ActiveProgramId; mrh.Pump.Cannula = ePump.Cannula; mrh.Pump.Notes = ePump.Notes; mrh.Pump.PumpInfusionSet = ePump.PumpInfusionSet; mrh.Pump.PumpName = ePump.PumpName; mrh.Pump.PumpStartDate = ePump.PumpStartDate; mrh.Pump.PumpType = ePump.PumpType; mrh.Pump.ReplacementDate = ePump.ReplacementDate; mrh.Pump.UserId = ePump.UserId; } } bool alreadyMapped = false; if (CompletedMappings.Any(a => a.SerialNumber == dev.SerialNumber)) { alreadyMapped = true; var device = CompletedMappings.Where(w => w.SerialNumber == dev.SerialNumber).FirstOrDefault(); device.ReadingHeaders.Add(mrh); } else { dev.ReadingHeaders.Add(mrh); } if (CanAddToContext(dev.UserId, dev.SerialNumber) && !alreadyMapped) { if (!CompletedMappings.Any(a => a.SerialNumber == dev.SerialNumber)) { CompletedMappings.Add(dev); } MemoryMappings.AddReadingHeaderkeyId(mrh.LegacyDownloadKeyId.Trim(), mrh.ReadingKeyId); } else { if (alreadyMapped && !String.IsNullOrEmpty(dev.SerialNumber)) { MemoryMappings.AddReadingHeaderkeyId(mrh.LegacyDownloadKeyId.Trim(), mrh.ReadingKeyId); } var fr = (dev.UserId == Guid.Empty) ? "Device has no corresponding user." : (String.IsNullOrEmpty(dev.SerialNumber)) ? "Device has no serial number recorded." : "Device already assigned to user."; MappingStatistics.LogFailedMapping("METERREADERHEADER", row["DOWNLOADKEYID"].ToString(), "PatientDevices", typeof(PatientDevice), JsonConvert.SerializeObject(dev), fr); FailedCount++; } } } } MappingStatistics.LogMappingStat("METERREADINGHEADER", RecordCount, "PatientDevices", CompletedMappings.Count, FailedCount); } catch (Exception e) { throw new Exception("Error creating Patient Device (MeterReadingHeader) mapping.", e); } }
public void CreatePumpSettingMapping() { try { var dataSet = TableAgent.DataSet.Tables[FbTableName].Rows; RecordCount = TableAgent.RowCount; var dateSetter = DateTime.Now; foreach (DataRow row in dataSet) { // get userid from old aspnetdb matching on patientid #####.##### var patId = row["PATIENTID"].ToString(); var userId = MemoryMappings.GetUserIdFromPatientInfo(MigrationVariables.CurrentSiteId, patId); var icDict = new Dictionary <char, ProgramTimeSlot> { { '1', new ProgramTimeSlot { DateSet = dateSetter } }, { '2', new ProgramTimeSlot { DateSet = dateSetter } }, { '3', new ProgramTimeSlot { DateSet = dateSetter } }, { '4', new ProgramTimeSlot { DateSet = dateSetter } }, { '5', new ProgramTimeSlot { DateSet = dateSetter } }, { '6', new ProgramTimeSlot { DateSet = dateSetter } }, { '7', new ProgramTimeSlot { DateSet = dateSetter } }, { '8', new ProgramTimeSlot { DateSet = dateSetter } } }; var bgDict = new Dictionary <char, ProgramTimeSlot> { { '1', new ProgramTimeSlot { DateSet = dateSetter } }, { '2', new ProgramTimeSlot { DateSet = dateSetter } }, { '3', new ProgramTimeSlot { DateSet = dateSetter } }, { '4', new ProgramTimeSlot { DateSet = dateSetter } }, { '5', new ProgramTimeSlot { DateSet = dateSetter } }, { '6', new ProgramTimeSlot { DateSet = dateSetter } }, { '7', new ProgramTimeSlot { DateSet = dateSetter } }, { '8', new ProgramTimeSlot { DateSet = dateSetter } } }; var bcDict = new Dictionary <char, ProgramTimeSlot> { { '1', new ProgramTimeSlot { DateSet = dateSetter } }, { '2', new ProgramTimeSlot { DateSet = dateSetter } }, { '3', new ProgramTimeSlot { DateSet = dateSetter } }, { '4', new ProgramTimeSlot { DateSet = dateSetter } }, { '5', new ProgramTimeSlot { DateSet = dateSetter } }, { '6', new ProgramTimeSlot { DateSet = dateSetter } }, { '7', new ProgramTimeSlot { DateSet = dateSetter } }, { '8', new ProgramTimeSlot { DateSet = dateSetter } } }; var cfDict = new Dictionary <char, ProgramTimeSlot> { { '1', new ProgramTimeSlot { DateSet = dateSetter } }, { '2', new ProgramTimeSlot { DateSet = dateSetter } }, { '3', new ProgramTimeSlot { DateSet = dateSetter } }, { '4', new ProgramTimeSlot { DateSet = dateSetter } }, { '5', new ProgramTimeSlot { DateSet = dateSetter } }, { '6', new ProgramTimeSlot { DateSet = dateSetter } }, { '7', new ProgramTimeSlot { DateSet = dateSetter } }, { '8', new ProgramTimeSlot { DateSet = dateSetter } } }; PumpProgram icProgram = DefaultPumpProgram(); PumpProgram bgProgram = DefaultPumpProgram(); PumpProgram bcProgram = DefaultPumpProgram(); PumpProgram cfProgram = DefaultPumpProgram(); icProgram.ProgramName = "PROG_IC"; bgProgram.ProgramName = "PROG_BG"; bcProgram.ProgramName = "PROG_BGC"; cfProgram.ProgramName = "PROG_CF"; icProgram.ProgramTypeId = 4; bgProgram.ProgramTypeId = 5; bcProgram.ProgramTypeId = 7; cfProgram.ProgramTypeId = 3; icProgram.ProgramTimeSlots = new List <ProgramTimeSlot>(); bgProgram.ProgramTimeSlots = new List <ProgramTimeSlot>(); bcProgram.ProgramTimeSlots = new List <ProgramTimeSlot>(); cfProgram.ProgramTimeSlots = new List <ProgramTimeSlot>(); if (!mHelper.HasPatientMigrated(patId)) { if (userId != Guid.Empty) { var tempList = new List <PumpSetting>(); // iterate through table columns and only get columns that are NOT time slots // as these will be settings for (int i = 0; i < row.Table.Columns.Count; i++) { var column = row.Table.Columns[i].ColumnName.Trim(); // don't want columns that start with these characters - these are timeslot values which are handled in the 'else' statement var exclude = new List <bool> { column.StartsWith("ic", StringComparison.OrdinalIgnoreCase), column.StartsWith("cf", StringComparison.OrdinalIgnoreCase), column.StartsWith("target", StringComparison.OrdinalIgnoreCase), column.StartsWith("patientid", StringComparison.OrdinalIgnoreCase) }; if (exclude.All(a => !a)) { PumpSetting ps = new PumpSetting(); ps.SettingName = column; ps.SettingValue = (row[column] is DBNull) ? String.Empty : row[column].ToString(); ps.Date = new DateTime(1800, 1, 1); tempList.Add(ps); if (CanAddToContext(ps.SettingValue)) { CompletedMappings.Add(ps); } else { MappingStatistics.LogFailedMapping("INSULETPUMPSETTINGS", patId, "PumpSettings", typeof(PumpSetting), JsonConvert.SerializeObject(ps), "Pump Setting has no value."); FailedCount++; } } else { if (!(row[column] is DBNull)) { if (column.StartsWith("cf", StringComparison.OrdinalIgnoreCase) && cfDict.ContainsKey(column.Last())) { var cfd = cfDict[column.Last()]; if (column.StartsWith("cfstart", StringComparison.OrdinalIgnoreCase)) { cfd.StartTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("cfstop", StringComparison.OrdinalIgnoreCase)) { cfd.StopTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("cfvalue", StringComparison.OrdinalIgnoreCase)) { cfd.Value = mu.ParseDouble(row[column].ToString()); } } if (column.StartsWith("ic", StringComparison.OrdinalIgnoreCase) && icDict.ContainsKey(column.Last())) { var icd = icDict[column.Last()]; if (column.StartsWith("icstart", StringComparison.OrdinalIgnoreCase)) { icd.StartTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("icstop", StringComparison.OrdinalIgnoreCase)) { icd.StopTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("icvalue", StringComparison.OrdinalIgnoreCase)) { icd.Value = mu.ParseDouble(row[column].ToString()); } } if (column.StartsWith("target", StringComparison.OrdinalIgnoreCase) && bgDict.ContainsKey(column.Last()) && bcDict.ContainsKey(column.Last())) { var bgd = bgDict[column.Last()]; var bcd = bcDict[column.Last()]; if (column.StartsWith("targetbgstart", StringComparison.OrdinalIgnoreCase)) { bgd.StartTime = mu.ParseFirebirdTimespan(row[column].ToString()); bcd.StartTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("targetbgstop", StringComparison.OrdinalIgnoreCase)) { bgd.StopTime = mu.ParseFirebirdTimespan(row[column].ToString()); bcd.StopTime = mu.ParseFirebirdTimespan(row[column].ToString()); } if (column.StartsWith("targetbg", StringComparison.OrdinalIgnoreCase)) { bgd.Value = mu.ParseDouble(row[column].ToString()); } if (column.StartsWith("targetbgcorrect", StringComparison.OrdinalIgnoreCase)) { bcd.Value = mu.ParseDouble(row[column].ToString()); } } } } } // add to Memory Mappings so that Pump object and retieve // a single user should only have a single collections of PumpSettings in the FB database MemoryMappings.AddPumpSetting(userId, tempList); } } //Purge dictionaries PurgeDictionary(icDict); PurgeDictionary(bgDict); PurgeDictionary(bcDict); PurgeDictionary(cfDict); // add dictionary values (ProgramTimeSlots) var icCollection = AddTimeSlots(icProgram.ProgramTimeSlots.ToList(), icDict.Values); foreach (var item in icCollection) { icProgram.ProgramTimeSlots.Add(item); } var bgCollection = AddTimeSlots(bgProgram.ProgramTimeSlots.ToList(), bgDict.Values); foreach (var item in bgCollection) { bgProgram.ProgramTimeSlots.Add(item); } var bcCollection = AddTimeSlots(bcProgram.ProgramTimeSlots.ToList(), bcDict.Values); foreach (var item in bcCollection) { bcProgram.ProgramTimeSlots.Add(item); } var cfCollection = AddTimeSlots(cfProgram.ProgramTimeSlots.ToList(), cfDict.Values); foreach (var item in cfCollection) { cfProgram.ProgramTimeSlots.Add(item); } // add pump programs to memory mappings AddPumpProgram(userId, icProgram); AddPumpProgram(userId, bgProgram); AddPumpProgram(userId, bcProgram); AddPumpProgram(userId, cfProgram); } MappingStatistics.LogMappingStat("INSULETPUMPSETTINGS", RecordCount, "PumpSettings", CompletedMappings.Count, FailedCount); } catch (Exception e) { throw new Exception("Error creating PumpSetting mapping.", e); } }