Esempio n. 1
0
        public async System.Threading.Tasks.Task <DetailedReport> FullDetailedReport(DetailedReportParams requestParameters)
        {
            var report = await Detailed(requestParameters);

            if (report.TotalCount < report.PerPage)
            {
                return(report);
            }

            var pageCount = (report.TotalCount + report.PerPage - 1) / report.PerPage;

            DetailedReport resultReport = null;

            for (var page = 1; page <= pageCount; page++)
            {
                requestParameters.Page = page;
                var pagedReport = await Detailed(requestParameters);

                if (resultReport == null)
                {
                    resultReport = pagedReport;
                }
                else
                {
                    resultReport.Data.AddRange(pagedReport.Data);
                }
            }
            return(resultReport);
        }
        public DetailedReport FullDetailedReport(DetailedReportParams requestParameters)
        {
            var report = this.Detailed(requestParameters);

            if (report.TotalCount < report.PerPage)
            {
                return(report);
            }

            var pageCount = (report.TotalCount + report.PerPage - 1) / report.PerPage;

            DetailedReport resultReport = null;

            for (var page = 1; page <= pageCount; page++)
            {
                requestParameters.Page = page;
                var pagedReport = Detailed(requestParameters);

                if (resultReport == null)
                {
                    resultReport = pagedReport;
                }
                else
                {
                    resultReport.Data.AddRange(pagedReport.Data);
                }
            }

            return(resultReport);
        }
Esempio n. 3
0
        public static double GetDurationInHours(this DetailedReport report)
        {
            var seconds = report.Duration / 1000;
            var hours   = seconds / 3600.0;

            return(hours);
        }
Esempio n. 4
0
        private int ExtractIssueId(DetailedReport report)
        {
            // look for integers in the description
            var integerMatches = Regex.Match(report.Description, @"\d+");

            if (integerMatches.Success)
            {
                return(Convert.ToInt32(integerMatches.Groups[0].Value));
            }
            else
            {
                // no integer found in the description, determine issue to track based on project name
                if (_projectNameMapping.ContainsKey(report.Project))
                {
                    return(_projectNameMapping[report.Project]);
                }
            }

            throw new KeyNotFoundException("Unable to determine issue id");
        }
        public IHttpActionResult EvaluateQuiz(EvalutionAnswer evalutionAnswer)
        {
            List <int> qIDs = new List <int>();

            foreach (var item in evalutionAnswer.QuesAnswers)
            {
                qIDs.Add(item.QuestionID);
            }
            var CorrectAnswers = db.Questions
                                 .AsEnumerable()
                                 .Where(x => qIDs.Contains(x.QuestionId))
                                 .OrderBy(x => { return(Array.IndexOf(qIDs.ToArray(), x.QuestionId)); })
                                 .Select(z => new { z.Answer, z.Marks })
                                 .ToList();
            int            i = 0, CAnswer = 0, WAnswer = 0, UAttempted = 0;
            decimal        TMarks         = 0;
            DetailedReport detailedReport = new DetailedReport();
            Report         report         = new Report();

            foreach (var item in evalutionAnswer.QuesAnswers)
            {
                detailedReport.AttemptedAnswer = item.MarkedAnswer;
                detailedReport.CorrectAnswer   = CorrectAnswers[i].Answer;
                detailedReport.QuizId          = evalutionAnswer.QuizId;
                detailedReport.QuestionId      = item.QuestionID;
                detailedReport.UserId          = evalutionAnswer.UserId;
                if (item.MarkedAnswer == CorrectAnswers[i].Answer)
                {
                    TMarks += CorrectAnswers[i].Marks;
                    CAnswer++;
                }
                else if (item.MarkedAnswer == 0)
                {
                    UAttempted++;
                }
                else
                {
                    WAnswer++;
                }
                i++;
                if (db.Quizs.FirstOrDefault(x => x.QuizId == evalutionAnswer.QuizId).QuizType == "Scheduled")
                {
                    db.DetailedReports.Add(detailedReport);
                    db.SaveChanges();
                }
            }
            report.CorrectAnswers     = CAnswer;
            report.WrongAnswers       = WAnswer;
            report.UnattemptedAnswers = UAttempted;
            report.TimeTaken          = evalutionAnswer.TimeTaken;
            //Here CorrectAnswers.Count() is TotalQuestions
            report.Accuracy    = (CAnswer * 100) / CorrectAnswers.Count();
            report.MarksScored = TMarks;
            report.QuizType    = db.Quizs.FirstOrDefault(x => x.QuizId == evalutionAnswer.QuizId).QuizType;
            report.UserId      = evalutionAnswer.UserId;
            report.QuizId      = evalutionAnswer.QuizId;
            var userSchedule = db.UserSchedules.FirstOrDefault(x => x.QuizScheduleId == evalutionAnswer.QuizScheduleId && x.UserId == evalutionAnswer.UserId && x.QuizId == evalutionAnswer.QuizId);

            if (userSchedule != null)
            {
                userSchedule.Taken = true;
            }
            db.Reports.Add(report);
            db.SaveChanges();
            return(Ok());
        }
        public void readData()
        {
            detail = new DetailedReport();
            con    = new PLCConnection();

            setTimeRanges();

            try
            {
                // creates a tag to read B3:0, 1 item, from LGX ip address 192.168.0.100
                // The last entry in this new tag is the element count.  It is currently
                // set to 1
                //public Tag(string ipAddress, string path, CpuType cpuType, string name, int elementSize, int elementCount, int debugLevel = 0)
                //string name is the textual name of the tag in plc
                //elementSize is the size of the element in bytes
                //elementCount elements count: 1- single, n-array
                //public Tag(string ipAddress, string path, CpuType cpuType, string name, int elementSize, int elementCount, int debugLevel = 0)
                var tag5  = new Tag("10.14.6.100", "1, 0", CpuType.LGX, "REPORT_DINT[0]", 4, 6, 0);
                var tag6  = new Tag("10.14.6.100", "1, 0", CpuType.LGX, "REPORT_FLOAT[12]", 4, 3, 0);
                var tag12 = new Tag("10.14.6.100", "1, 0", CpuType.LGX, "REPORT_INT[8]", 2, 2, 0);

                using (var client = new Libplctag())
                {
                    // add the tag
                    client.AddTag(tag5);
                    client.AddTag(tag6);
                    client.AddTag(tag12);
                    //client.AddTag(tag2);
                    // check that the tag has been added, if it returns pending we have to retry
                    while (client.GetStatus(tag5) == Libplctag.PLCTAG_STATUS_PENDING)
                    {
                        Thread.Sleep(100);
                    }
                    // check that the tag has been added, if it returns pending we have to retry
                    while (client.GetStatus(tag6) == Libplctag.PLCTAG_STATUS_PENDING)
                    {
                        Thread.Sleep(100);
                    }
                    // check that the tag has been added, if it returns pending we have to retry
                    while (client.GetStatus(tag12) == Libplctag.PLCTAG_STATUS_PENDING)
                    {
                        Thread.Sleep(100);
                    }


                    // if the status is not ok, we have to handle the error
                    if (client.GetStatus(tag5) != Libplctag.PLCTAG_STATUS_OK)
                    {
                        con.setDownbit(-5);
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString((client.GetStatus(tag5))) + ("\n" + $"Five Minute Data tag 5 Read Error setting up tag internal state. Error{ client.DecodeError(client.GetStatus(tag5))}\n"));
                        }
                        return;
                    }
                    // if the status is not ok, we have to handle the error
                    if (client.GetStatus(tag6) != Libplctag.PLCTAG_STATUS_OK)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString((client.GetStatus(tag6))) + ("\n" + $"Five Minute Data tag 6 Read Error setting up tag internal state. Error{ client.DecodeError(client.GetStatus(tag6))}\n"));
                        }
                        return;
                    }
                    // if the status is not ok, we have to handle the error
                    if (client.GetStatus(tag12) != Libplctag.PLCTAG_STATUS_OK)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString((client.GetStatus(tag12))) + ("\n" + $"Five Minute Data tag 6 Read Error setting up tag internal state. Error{ client.DecodeError(client.GetStatus(tag12))}\n"));
                        }
                        return;
                    }


                    // Execute the read
                    var result = client.ReadTag(tag5, DataTimeout);
                    // Execute the read
                    var result1 = client.ReadTag(tag6, DataTimeout);
                    // Execute the read
                    var result2 = client.ReadTag(tag12, DataTimeout);

                    // Check the read operation result
                    if (result != Libplctag.PLCTAG_STATUS_OK)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString(($"Five Minute Data Read ERROR: Unable to read the data! Got error code {result}: {client.DecodeError(result)}\n")));
                        }
                        return;
                    }
                    if (result1 != Libplctag.PLCTAG_STATUS_OK)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString(($"Five Minute Data Read ERROR: Unable to read the data! Got error code {result1}: {client.DecodeError(result1)}\n")));
                        }
                        return;
                    }
                    if (result2 != Libplctag.PLCTAG_STATUS_OK)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occured at: " + DateTime.Now + Convert.ToString(($"Five Minute Data Read ERROR: Unable to read the data! Got error code {result2}: {client.DecodeError(result2)}\n")));
                        }
                        return;
                    }


                    // read the data from the array that was retrieved from the PLC
                    //double integer values
                    var plantfeedtotaltons  = client.GetInt32Value(tag5, 0 * tag5.ElementSize);
                    var cleancoaltotaltons  = client.GetInt32Value(tag5, 1 * tag5.ElementSize);
                    var stokercoaltotaltons = client.GetInt32Value(tag5, 2 * tag5.ElementSize);
                    var bypasstotaltons     = client.GetInt32Value(tag5, 3 * tag5.ElementSize);
                    var refusetotaltons     = client.GetInt32Value(tag5, 4 * tag5.ElementSize);
                    var scalpedtotaltons    = client.GetInt32Value(tag5, 5 * tag5.ElementSize);

                    //float values
                    //var yield = client.GetFloat32Value(tag6, 0 * tag6.ElementSize);
                    //mag minutes float 12 needs added to the desktop reporting
                    //grand total number like the coal values
                    var magmins          = client.GetFloat32Value(tag6, 0 * tag6.ElementSize);
                    var plantfeedrunmins = client.GetFloat32Value(tag6, 1 * tag6.ElementSize);
                    var downminstotal    = client.GetFloat32Value(tag6, 2 * tag6.ElementSize);

                    //int 16 values
                    var plantfeedtph = client.GetInt16Value(tag12, 0 * tag12.ElementSize);
                    var cleancoaltph = client.GetInt16Value(tag12, 1 * tag12.ElementSize);

                    //code about this needs to be here and this data from the PLC needs used for updating DetailedReport table
                    //it is at the top for hard code testing
                    detail = new DetailedReport();
                    detail.createDetailedReport(plantfeedtotaltons, cleancoaltotaltons, plantfeedtph, cleancoaltph, downminstotal, plantfeedrunmins, magmins);

                    try
                    {
                        //Insert data from PLC into FiveMinuteData table every five minute read
                        dh.executeSql("Insert INTO FiveMinuteData(created_at, plantname, plantfeedtons, cleantons, stokertons, bypasstons, refusetons, scalpedtons) VALUES " +
                                      "(GETDATE(), 'Kanawha Eagle', '" + plantfeedtotaltons + "', '" + cleancoaltotaltons + "', '" + stokercoaltotaltons + "', '" + bypasstotaltons + "', '" +
                                      refusetotaltons + "', '" + scalpedtotaltons + "')");
                    }catch (SqlException se)
                    {
                        //writing data to a text file to observe errors for troubleshooting
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                        {
                            file.WriteLine("Error occurred at Five Minute Data insert to database: " + DateTime.Now + " \r\n" + se + "\r\n");
                        }
                        return;
                    }
                    client.RemoveTag(tag5);
                    client.RemoveTag(tag6);
                }
            }
            catch (Exception ex)
            {
                //writing errors to text file for troubleshooting
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\KE_PLCData\Documents\ReportErrorLogging\ErrorLog.txt", true))
                {
                    file.WriteLine("Error occurred at Five Minute Data insert to database: " + DateTime.Now + " \r\n" + ex + "\r\n");
                }
                return;
            }
        }