static void UpdateOrdinalData(PSsqmEntities entities, EHS_DATA ehs_data, dynamic types, Dictionary <string, int> type_data) { if (type_data != null) // might be null if ordinal data type not activated in the FIRSTAID-ORDINALS or RECORDABLE-ORDINALS SETTINGS table { foreach (var t in types) { string group = t.XLAT_GROUP; string code = t.XLAT_CODE; var data = entities.EHS_DATA_ORD.FirstOrDefault(d => d.DATA_ID == ehs_data.DATA_ID && d.XLAT_GROUP == group && d.XLAT_CODE == code); if (type_data.ContainsKey(code)) { if (data == null) { entities.EHS_DATA_ORD.AddObject(new EHS_DATA_ORD() { EHS_DATA = ehs_data, XLAT_GROUP = t.XLAT_GROUP, XLAT_CODE = t.XLAT_CODE, VALUE = type_data[code] }); } else { data.VALUE = type_data[code]; } } else if (data != null) { entities.DeleteObject(data); } } } }
static void UpdateOrdinalData(PSsqmEntities entities, EHS_DATA ehs_data, Dictionary <string, Dictionary <string, int> > data) { // Get the types first. var types = GetOrdinalTypes(entities, "INJURY_TYPE"); var bodyParts = GetOrdinalTypes(entities, "INJURY_PART"); var rootCauses = GetOrdinalTypes(entities, "INJURY_CAUSE"); var tenures = GetOrdinalTypes(entities, "INJURY_TENURE"); var daysToCloses = GetOrdinalTypes(entities, "INJURY_DAYS_TO_CLOSE"); UpdateOrdinalData(entities, ehs_data, types, data["type"]); UpdateOrdinalData(entities, ehs_data, bodyParts, data["bodyPart"]); UpdateOrdinalData(entities, ehs_data, rootCauses, data["rootCause"]); UpdateOrdinalData(entities, ehs_data, tenures, data["tenure"]); UpdateOrdinalData(entities, ehs_data, daysToCloses, data["daysToClose"]); }
static void AddOrdinalData(PSsqmEntities entities, EHS_DATA ehs_data, dynamic types, Dictionary <string, dynamic> type_data) { foreach (var t in types) { string description = t.DESCRIPTION; if (type_data.Keys.Any(k => k.Contains("&") || k.Contains("<") || k.Contains(">"))) { description = description.Replace("&", "&").Replace("<", "<").Replace(">", ">"); } var value = type_data[description]; if (value.ContainsKey("value")) { entities.EHS_DATA_ORD.AddObject(new EHS_DATA_ORD() { EHS_DATA = ehs_data, XLAT_GROUP = t.XLAT_GROUP, XLAT_CODE = t.XLAT_CODE, VALUE = value["value"] }); } } }
public static void SaveMonthlyData(decimal plantID, DateTime day, Dictionary <string, string> allData) { using (var entities = new PSsqmEntities()) { var measures = from m in entities.EHS_MEASURE where m.MEASURE_CATEGORY == "SAFE" && m.MEASURE_SUBCATEGORY == "SAFE1" && m.STATUS == "A" && m.FREQUENCY == "M" select new { m.MEASURE_ID, m.DATA_TYPE }; var startOfMonth = new DateTime(day.Year, day.Month, 1); foreach (var measure in measures) { string text = allData[measure.MEASURE_ID.ToString()]; bool hasText = !string.IsNullOrWhiteSpace(text); // We determine if we need to add a new entry into the database by looking for if there is any data. bool addNew = true; var data = entities.EHS_DATA.FirstOrDefault(d => EntityFunctions.TruncateTime(d.DATE) == startOfMonth.Date && d.PLANT_ID == plantID && d.MEASURE_ID == measure.MEASURE_ID); if (data != null) { addNew = false; // Check if this was inserted by an automated process, and ignore any changes if so. if (!data.UPDATE_IND.HasValue || data.UPDATE_IND.Value == 0) { // If we had some text in the RadTextBox, then we'll update the entry, otherwise we'll delete it. if (hasText) { if (measure.DATA_TYPE == "V" || measure.DATA_TYPE == "F") { string newValue = Regex.Replace(text, "[^0-9]", ""); data.VALUE = decimal.Parse(newValue); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { data.ATTRIBUTE = text; } } else { entities.DeleteObject(data); } } } // This will only add a new entry if there was no entry found already and we had some text in the RadTextBox. if (addNew && hasText) { var newData = new EHS_DATA() { MEASURE_ID = measure.MEASURE_ID, PLANT_ID = plantID, DATE = startOfMonth }; if (measure.DATA_TYPE == "V") { string newValue = Regex.Replace(text, "[^0-9]", ""); newData.VALUE = decimal.Parse(newValue); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { newData.ATTRIBUTE = text; } entities.EHS_DATA.AddObject(newData); } } // Save the changes we made to the database. This has to be done before the Plant Accounting stuff so there is data to find. entities.SaveChanges(); // Add the time worked and time lost items to the Plant Accounting table. var dataTimeWorked = entities.EHS_DATA.FirstOrDefault(d => EntityFunctions.TruncateTime(d.DATE) == startOfMonth.Date && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S60002"); var dataTimeLost = entities.EHS_DATA.FirstOrDefault(d => EntityFunctions.TruncateTime(d.DATE) == startOfMonth.Date && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S60001"); var pa = EHSModel.LookupPlantAccounting(entities, plantID, day.Year, day.Month, true); pa.TIME_WORKED = dataTimeWorked == null ? null : dataTimeWorked.VALUE; pa.TIME_LOST = dataTimeLost == null ? null : dataTimeLost.VALUE; EHSModel.UpdatePlantAccounting(entities, pa); } }
public static void SaveWeeklyData(decimal plantID, DateTime day, Dictionary <string, string> allData) { using (var entities = new PSsqmEntities()) { var measures = from m in entities.EHS_MEASURE where m.MEASURE_CATEGORY == "SAFE" && m.MEASURE_SUBCATEGORY == "SAFE1" && m.STATUS == "A" && m.FREQUENCY == "W" select new { m.MEASURE_ID, m.DATA_TYPE }; var startOfWeek = FirstDayOfWeek(day, calendar, calendarWeekRule, firstDayOfWeek); var endOfWeek = startOfWeek.AddDays(6); foreach (var measure in measures) { string text = allData[measure.MEASURE_ID.ToString()]; bool hasText = !string.IsNullOrWhiteSpace(text); // We determine if we need to add a new entry into the database by looking for if there is any data. bool addNew = true; var data = entities.EHS_DATA.FirstOrDefault(d => EntityFunctions.TruncateTime(d.DATE) == endOfWeek.Date && d.PLANT_ID == plantID && d.MEASURE_ID == measure.MEASURE_ID); if (data != null) { addNew = false; // Check if this was inserted by an automated process, and ignore any changes if so. if (!data.UPDATE_IND.HasValue || data.UPDATE_IND.Value == 0) { // If we had some text in the RadTextBox, then we'll update the entry, otherwise we'll delete it. if (hasText) { if (measure.DATA_TYPE == "V" || measure.DATA_TYPE == "F") { data.VALUE = decimal.Parse(text); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { data.ATTRIBUTE = text; } } else { entities.DeleteObject(data); } } } // This will only add a new entry if there was no entry found already and we had some text in the RadTextBox. if (addNew && hasText) { var newData = new EHS_DATA() { MEASURE_ID = measure.MEASURE_ID, PLANT_ID = plantID, DATE = endOfWeek }; if (measure.DATA_TYPE == "V") { newData.VALUE = decimal.Parse(text); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { newData.ATTRIBUTE = text; } entities.EHS_DATA.AddObject(newData); } } // Save the changes we made to the database. entities.SaveChanges(); } }
public static void SaveDailyData(decimal plantID, DateTime day, Dictionary <string, Dictionary <string, dynamic> > allData) { using (var entities = new PSsqmEntities()) { var measures = from m in entities.EHS_MEASURE where m.MEASURE_CATEGORY == "SAFE" && m.MEASURE_SUBCATEGORY == "SAFE1" && m.STATUS == "A" && m.FREQUENCY == "D" select new { m.MEASURE_ID, m.DATA_TYPE }; var startOfWeek = FirstDayOfWeek(day, calendar, calendarWeekRule, firstDayOfWeek); var currentDay = startOfWeek; for (int i = 0; i < 7; ++i, currentDay = currentDay.AddDays(1)) { string dayName = currentDay.ToString("ddd"); var dayData = entities.EHS_DATA.Where(d => EntityFunctions.TruncateTime(d.DATE) == currentDay.Date && d.PLANT_ID == plantID); foreach (var measure in measures) { bool measureIsValue = measure.DATA_TYPE == "V" || measure.DATA_TYPE == "F" || measure.DATA_TYPE == "O"; var measure_data = allData[dayName + "|" + measure.MEASURE_ID]; string text = measure_data["value"]; bool hasText = !string.IsNullOrWhiteSpace(text); // We determine if we need to add a new entry into the database by looking for if there is any data. bool addNew = true; if (dayData.Any()) { var data = dayData.FirstOrDefault(d => d.MEASURE_ID == measure.MEASURE_ID); if (data != null) { addNew = false; // Check if this was inserted by an automated process, and ignore any changes if so. if (!data.UPDATE_IND.HasValue || data.UPDATE_IND.Value == 0) { // If we had some text in the RadTextBox, then we'll update the entry, otherwise we'll delete it. if (hasText) { if (measureIsValue) { data.VALUE = decimal.Parse(text); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { data.ATTRIBUTE = text; } if (measure_data.ContainsKey("ordinal")) { UpdateOrdinalData(entities, data.DATA_ID, measure_data["ordinal"]); } } else { entities.DeleteObject(data); } } } } // This will only add a new entry if there was no entry found already and we had some text in the RadTextBox. if (addNew && hasText) { var newData = new EHS_DATA() { MEASURE_ID = measure.MEASURE_ID, PLANT_ID = plantID, DATE = currentDay }; if (measureIsValue) { newData.VALUE = decimal.Parse(text); } else if (measure.DATA_TYPE == "A" || measure.DATA_TYPE == "Y") { newData.ATTRIBUTE = text; } entities.EHS_DATA.AddObject(newData); if (measure_data.ContainsKey("ordinal")) { AddOrdinalData(entities, newData, measure_data["ordinal"]); } } } } // Save the changes we made to the database. This has to be done before the Plant Accounting stuff so there is data to find. entities.SaveChanges(); // Add the recorded cases and time lost cases to the Plant Accounting table. var endOfWeek = startOfWeek.AddDays(6); DateTime startOfMonth, startOfNextMonth; PLANT_ACCOUNTING pa; // This checks for a week that crosses over a month. if (startOfWeek.Month != endOfWeek.Month) { startOfMonth = new DateTime(startOfWeek.Year, startOfWeek.Month, 1); startOfNextMonth = startOfMonth.AddMonths(1); pa = EHSModel.LookupPlantAccounting(entities, plantID, startOfMonth.Year, startOfMonth.Month, true); pa.RECORDED_CASES = entities.EHS_DATA.Where(d => EntityFunctions.TruncateTime(d.DATE) >= startOfMonth.Date && EntityFunctions.TruncateTime(d.DATE) < startOfNextMonth && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S20004").Sum(o => o.VALUE) ?? null; pa.TIME_LOST_CASES = entities.EHS_DATA.Where(d => EntityFunctions.TruncateTime(d.DATE) >= startOfMonth.Date && EntityFunctions.TruncateTime(d.DATE) < startOfNextMonth && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S20005").Sum(o => o.VALUE) ?? null; EHSModel.UpdatePlantAccounting(entities, pa, false); } startOfMonth = new DateTime(endOfWeek.Year, endOfWeek.Month, 1); startOfNextMonth = startOfMonth.AddMonths(1); pa = EHSModel.LookupPlantAccounting(entities, plantID, startOfMonth.Year, startOfMonth.Month, true); pa.RECORDED_CASES = entities.EHS_DATA.Where(d => EntityFunctions.TruncateTime(d.DATE) >= startOfMonth.Date && EntityFunctions.TruncateTime(d.DATE) < startOfNextMonth && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S20004").Sum(o => o.VALUE) ?? null; pa.TIME_LOST_CASES = entities.EHS_DATA.Where(d => EntityFunctions.TruncateTime(d.DATE) >= startOfMonth.Date && EntityFunctions.TruncateTime(d.DATE) < startOfNextMonth && d.PLANT_ID == plantID && d.EHS_MEASURE.MEASURE_CD == "S20005").Sum(o => o.VALUE) ?? null; EHSModel.UpdatePlantAccounting(entities, pa); } }