コード例 #1
0
 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);
             }
         }
     }
 }
コード例 #2
0
        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"]);
        }
コード例 #3
0
 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("&amp;") || k.Contains("&lt;") || k.Contains("&gt;")))
         {
             description = description.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;");
         }
         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"]
             });
         }
     }
 }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 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();
     }
 }
コード例 #6
0
        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);
            }
        }