示例#1
0
        public ActionResult SubmissionStatusGet(int?sid, DateTime?endDate)
        {
            UserAuth user = new UserAuth();

            ViewBag.server = System.Environment.MachineName;
            DataSet dsStop = new DataSet();

            user = AuthorizeUser(User.Identity.Name.ToString());

            if (!user.authorizedAdmin)
            {
                return(RedirectToAction("Unauthorized", "Home"));
            }

            UserProfile_Conf uid = db.UserProfile_Conf.SingleOrDefault(x => x.NTUserName == User.Identity.Name.ToString());

            ViewBag.UserProfileID = uid.UserProfileID;
            ViewBag.admin         = user.authorizedAdmin;

            // web.config debug setting
            ViewBag.debug = HttpContext.IsDebuggingEnabled;

            Submissions submission = entitiesdb.Submissions.Find(sid);

            if (endDate == null)
            {
                endDate = submission.EndDate;
            }
            ViewBag.submissionEndDate = endDate;

            if (endDate < submission.StartDate || endDate > DateTime.Now)
            {
                TempData["CustomError"] = "Invalid Date Range";
                return(RedirectToAction("Index", "StopsSubmission", sid));
            }
            else
            {
                submission.statusMsgs = entitiesdb.StatusMessage_JSON_vw
                                        .Where(x => x.submissionID == sid && x.StopStatus != "success" && x.StopStatus != "postSubRedact")
                                        .ToList();
                submission.subList = entitiesdb.Submissions
                                     .Where(x => x.StartDate == submission.StartDate &&
                                            x.EndDate == submission.EndDate).ToList();
            }
            bool fixedFlag = false;



            SQLDBDataAccessorClass sql = new SQLDBDataAccessorClass();
            string sqlStr = "";

            sqlStr = "Select * from Stops" +
                     " Where SubmissionsID = " + submission.ID +
                     " and Status != '" + "success' " +
                     " and JsonSubmissions is not null " +
                     " and Right(JsonSubmissions, 15) like '%true%'";
            dsStop = sql.mds_ExecuteQuery(sqlStr, "StopsTbl");
            int rowsCount = dsStop.Tables["StopsTbl"].Rows.Count;

            if (rowsCount != 0)
            {
                fixedFlag = true;
            }


            sql = new SQLDBDataAccessorClass();

            sqlStr = "";
            sqlStr = "SELECT * FROM Stops as S " +
                     "INNER JOIN StopOfficerIDDateTime_JSON_vw as J ON J.ID = S.ID " +
                     " Where CONVERT(datetime, '" + submission.StartDate + "') <= J.stopDate and J.stopDate <= CONVERT(datetime, '" + endDate + "')";

            dsStop = sql.mds_ExecuteQuery(sqlStr, "StopOfficeVWTbl");
            int stopsCount = dsStop.Tables["StopOfficeVWTbl"].Rows.Count;

            ViewBag.fixedFlag  = fixedFlag;
            ViewBag.totalStops = stopsCount;

            return(View(submission));
        }
示例#2
0
        public async Task <ActionResult> SubmissionStats(Submissions submission, int?sid, DateTime startDate, DateTime?endDate)
        {
            UserAuth user   = new UserAuth();
            DataSet  dsStop = new DataSet();

            user = AuthorizeUser(User.Identity.Name.ToString());

            if (!user.authorizedAdmin)
            {
                return(RedirectToAction("Unauthorized", "Home"));
            }

            if (ModelState.IsValid)
            {
                UserProfile_Conf uid = db.UserProfile_Conf.SingleOrDefault(x => x.NTUserName == User.Identity.Name.ToString());
                ViewBag.UserProfileID = uid.UserProfileID;
                ViewBag.admin         = user.authorizedAdmin;

                // web.config debug setting
                ViewBag.debug             = HttpContext.IsDebuggingEnabled;
                ViewBag.submissionEndDate = endDate;
                DOJSubmitController dOJSubmit = new DOJSubmitController();

                //Make sure the connection to DOJ url is available
                //DOJSubmitController.connectionStatus connectStat = dOJSubmit.HTTP_Connection();
                //if (!connectStat.connected)
                //{
                //    TempData["CustomError"] = connectStat.error;
                //    return RedirectToAction("Index", "StopsSubmission", sid);
                //}

                bool connected = dOJSubmit.HTTP_Connection2();
                if (!connected)
                {
                    TempData["CustomError"] = "Can not connect to DOJ endpoint\r\n";
                    return(RedirectToAction("Index", "StopsSubmission", sid));
                }
                // If submission record in this date range is In Progress do not allow another submission
                Submissions submissionInProgress = entitiesdb.Submissions
                                                   .Where(x => x.StartDate == startDate && x.EndDate == endDate && x.Status == "In Progress")
                                                   .FirstOrDefault();

                if (submissionInProgress != null)
                {
                    TempData["CustomError"] = "A submission in this date range is already 'In Progress'";
                    return(RedirectToAction("Index", "StopsSubmission", sid));
                }

                if (sid != 0)
                {
                    Submissions submissionOld = entitiesdb.Submissions.Find(sid);
                    if (submissionOld.TotalHTTPErrors == 0 || submissionOld.TotalHTTPErrors == null)
                    {
                        submission = submissionOld;
                    }
                }
                submission.StartDate = startDate;
                if (endDate < submission.StartDate || endDate > DateTime.Now)
                {
                    TempData["CustomError"] = "Invalid Date Range";
                    return(RedirectToAction("Index", "StopsSubmission", sid));
                }
                else
                {
                    bool fixedFlag = false;

                    SQLDBDataAccessorClass sql = new SQLDBDataAccessorClass();
                    string sqlStr = "";
                    sqlStr = "Select * from Stops" +
                             " Where SubmissionsID = " + submission.ID +
                             " and JsonSubmissions is not null " +
                             " and Right(JsonSubmissions, 15) like '%true%'";
                    dsStop = sql.mds_ExecuteQuery(sqlStr, "StopsTbl");
                    int rowsCount = dsStop.Tables["StopsTbl"].Rows.Count;


                    if (rowsCount != 0)
                    {
                        fixedFlag = true;
                    }

                    ViewBag.fixedFlag = fixedFlag;

                    // Change the status of the current submission record, with edited Stops, to "resumbit",
                    // and create a new submission record to Resubmit all the fixed records again
                    if (rowsCount != 0)
                    {
                        submission.Status = "Resubmit";
                        if (ModelState.IsValid)
                        {
                            entitiesdb.Entry(submission).State = EntityState.Modified;
                            await entitiesdb.SaveChangesAsync();
                        }
                        Submissions newSubmission = new Submissions();
                        newSubmission.StartDate = submission.StartDate;
                        submission = newSubmission;
                    }
                    submission.Status        = "In Progress";
                    submission.DateSubmitted = DateTime.Now;
                    submission.EndDate       = endDate;

                    var state = await dOJSubmit.GetStops(submission);

                    entitiesdb.Entry(submission).State = state;

                    if (submission.TotalProcessed == submission.TotalSuccess)
                    {
                        submission.Status = "Finished";
                    }
                    else
                    {
                        submission.Status     = "Pending Fixes";
                        submission.statusMsgs = entitiesdb.StatusMessage_JSON_vw
                                                .Where(x => x.submissionID == submission.ID && x.StopStatus != "success" && x.StopStatus != "postSubRedact")
                                                .ToList();
                        submission.subList = entitiesdb.Submissions.ToList();
                    }
                    //If ModelState.IsValid is not True this might
                    //cause submission to stay in 'In Progress' status
                    //
                    //if (ModelState.IsValid)
                    //{
                    //state = entitiesdb.Entry(submission).State;
                    //entitiesdb.Entry(submission).State = EntityState.Modified;
                    entitiesdb.SaveChanges();
                    ViewBag.submissionID = submission.ID;

                    //}
                }
            }
            else
            {
                TempData["CustomError"] = "End Date is required.";
            }


            return(RedirectToAction("Index", "StopsSubmission", submission.ID));
        }
示例#3
0
        // GET: api/DOJSubmit
        public async Task <EntityState> GetStops(Submissions submission)
        {
            JsonResultModel jsonResult = new JsonResultModel();
            DataSet         dsStop     = new DataSet();

            DojResultModel dojRes = new DojResultModel();
            ExtractJNode   eJson;
            string         logFilename;

            DOJWebApiUrl = ConfigurationManager.AppSettings["DOJWebApiUrl"];


            try
            {
                entitiesdb.Submissions.Add(submission);
                entitiesdb.SaveChanges();
                int submissionID = submission.ID;
                logFilename                = submissionID + "-" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
                submission.LogFile         = logFilename;
                submission.TotalHTTPErrors = jsonResult.httpErrCount;


                // Writing logs on both servers
                LogFilePath1 = ConfigurationManager.AppSettings["LogFilePath1"];
                server2      = ConfigurationManager.AppSettings["Server2"];
                server1      = ConfigurationManager.AppSettings["Server1"];
                if (server2 == "")
                {
                    logFile1 = LogFilePath1 + logFilename;
                }
                else
                {
                    logFile1 = LogFilePath1 + logFilename;
                    if (server1.IndexOf(Environment.MachineName) == -1)
                    {
                        LogFilePath2 = server1 + "RIPALogs\\";
                        logFile2     = LogFilePath2 + logFilename;
                    }
                    if (server2.IndexOf(Environment.MachineName) == -1)
                    {
                        LogFilePath2 = server2 + "RIPALogs\\";
                        logFile2     = LogFilePath2 + logFilename;
                    }
                }


                if (!Directory.Exists(LogFilePath1))
                {
                    Directory.CreateDirectory(LogFilePath1);
                }
                if (server2 != "")
                {
                    if (!Directory.Exists(LogFilePath2))
                    {
                        Directory.CreateDirectory(LogFilePath2);
                    }
                }

                if (!File.Exists(logFile1))
                {
                    using (FileStream fs = File.Create(logFile1))
                    {
                        using (StreamWriter sw = new StreamWriter(fs))
                        {
                            SQLDBDataAccessorClass sql = new SQLDBDataAccessorClass();
                            string sqlStr = "";
                            sqlStr = "Select ID from StopOfficerIDDateTime_JSON_vw as J " +
                                     " Where Convert(date,'" + submission.StartDate + "') <= J.stopDate and J.stopDate <=  convert(date,'" + submission.EndDate + "')";

                            dsStop = sql.mds_ExecuteQuery(sqlStr, "StopOfficeVWTbl");

                            string DOJjson = "";
                            //foreach (int stopId in stopsIDs)
                            int stopId;

                            if (dsStop != null)
                            {
                                for (int i = 0; i < dsStop.Tables["StopOfficeVWTbl"].Rows.Count; i++)
                                {
                                    stopId = Convert.ToInt32(dsStop.Tables["StopOfficeVWTbl"].Rows[i]["ID"]);

                                    Stop st = db.Stop
                                              .Where(x => x.ID == stopId && x.Status != "success" && x.Status != "postSubRedact")
                                              .Select(x => x).FirstOrDefault();

                                    JObject submissionO;
                                    JArray  subInfoArry;
                                    bool    edited = false;


                                    if (st != null)
                                    {
                                        // If JsonSubmissions is not null, check the last SubmissionInfo to see if this Stop has been edited
                                        if (st.JsonSubmissions != null)
                                        {
                                            submissionO = JObject.Parse(st.JsonSubmissions);
                                            JObject lastSubmission = (JObject)submissionO["SubmissionInfo"].Last();
                                            edited = (bool)lastSubmission["edited"];
                                        }
                                        if (st.JsonSubmissions == null || edited)
                                        {
                                            jsonResult.processedCount++;
                                            submission.TotalProcessed = jsonResult.processedCount;
                                            DOJjson = st.JsonDojStop;
                                            HTTP_PUT(Url: DOJWebApiUrl, Data: DOJjson, model: jsonResult, sw: sw);
                                            // the next lines are for testing
                                            //jsonResult.Results = "{    \"MandatoryValidationFlag\": false,    \"Status\": \"failed\",    \"BatchID\": \"\",    \"LEARecordID\": \"63\",    \"ORI\": \"CA0370000\",    \"OfficerUID\": \"11\",    \"Proxy\": \"\",    \"StopDate\": \"06 / 05 / 2018\",    \"StopTime\": \"14:25:51\",    \"Messages\": [      {        \"Code\": \"DV007\",        \"Field\": \"UID\",        \"Message\": \"Officer Unique ID is invalid or missing, it must be 9 alphanumerical characters.\",        \"PersonNumber\": null      }    ]}";
                                            //jsonResult.Results = "{\"MandatoryValidationFlag\":false,\"Status\":\"failed\",\"BatchID\":\"\",\"LEARecordID\":\"14140\",\"ORI\":\"CA0370000\",\"OfficerUID\":\"111106405\",\"Proxy\":\"\",\"StopDate\":\"06 / 05 / 2018\",\"StopTime\":\"23:58:56\",\"Messages\":[{\"Code\":\"DV236\",\"Field\":\"Tx_type\",\"Message\":\"Duplicate record exists with the same ORI,  LEA record ID combination.\",\"PersonNumber\":null},{\"Code\":\"DV004\",\"Field\":\"sTime\",\"Message\":\"Duplicate record; a stop exists for this ORI, Officer UID, Date & Time.\",\"PersonNumber\":null}]}";
                                            //jsonResult.IsSuccess = true;
                                            if (jsonResult.IsSuccess)
                                            {
                                                dojRes.ReturnPayload = jsonResult.Results;

                                                st.SubmissionsID = submissionID;
                                                if (st.JsonSubmissions == null)
                                                {
                                                    submissionO = JObject.FromObject(new { SubmissionInfo = new JArray() });
                                                }
                                                else
                                                {
                                                    submissionO = JObject.Parse(st.JsonSubmissions);
                                                }
                                                subInfoArry = (JArray)submissionO["SubmissionInfo"];
                                                subInfoArry.Add(new JObject(new JProperty("submissionID", submissionID), new JProperty("edited", false)));
                                                st.JsonSubmissions = JsonConvert.SerializeObject(submissionO);

                                                JObject o = JObject.Parse(dojRes.ReturnPayload);
                                                o.Add("CustomProperty_DOJReceiptTime", DateTime.Now.ToString());
                                                eJson        = new ExtractJNode("MandatoryValidationFlag", o);
                                                dojRes.VFlag = eJson.traverseNode();

                                                eJson         = new ExtractJNode("Status", o);
                                                dojRes.Status = eJson.traverseNode();

                                                if (dojRes.VFlag == "True")
                                                {
                                                    if (dojRes.Status == "failed")
                                                    {
                                                        st.Status = "fail";
                                                        jsonResult.failedCount++;
                                                        submission.TotalWithErrors = jsonResult.failedCount;
                                                    }
                                                    else
                                                    {
                                                        st.Status = "success";
                                                        jsonResult.succeededCount++;
                                                        submission.TotalSuccess = jsonResult.succeededCount;
                                                    }
                                                }
                                                else
                                                {
                                                    if (dojRes.Status == "failed")
                                                    {
                                                        st.Status = "fatal";
                                                        jsonResult.fatalCount++;
                                                        submission.TotalRejected = jsonResult.fatalCount;
                                                    }
                                                }

                                                st.StatusMessage = o.ToString();

                                                // The following section of code, saving messages in dojRes is not used at this point
                                                if (st.Status != "success")
                                                {
                                                    eJson = new ExtractJNode("Messages.Message", o);
                                                    string messages = eJson.traverseNode();
                                                    messages = messages.Replace(".,", "~");
                                                    dojRes.SetMessages(messages.Split('~'));
                                                }
                                            }
                                            else
                                            {
                                                submission.TotalHTTPErrors = jsonResult.httpErrCount + 1;
                                            }
                                            await db.SaveChangesAsync();

                                            entitiesdb.Entry(submission).State = EntityState.Modified;
                                            await entitiesdb.SaveChangesAsync();
                                        }
                                    }
                                }
                            }
                            else
                            {
                                jsonResult.Log += "No Stop Records Found." + Environment.NewLine;
                            }
                            jsonResult.Log += "Records processed = " + jsonResult.processedCount + Environment.NewLine +
                                              "Records successfully submitted = " + jsonResult.succeededCount + Environment.NewLine +
                                              "Records with errors = " + jsonResult.failedCount + Environment.NewLine +
                                              "Rejected records = " + jsonResult.fatalCount + Environment.NewLine +
                                              "HTTP error count = " + jsonResult.httpErrCount + Environment.NewLine;

                            //File.AppendAllText(logFile1, jsonResult.Log);
                            sw.WriteLine(jsonResult.Log);
                        }
                    }
                }

                if (server2 != "")
                {
                    File.Copy(logFile1, logFile2, true);
                }
                var state = entitiesdb.Entry(submission).State;
                return(state);
            }
            catch (Exception error)
            {
                submission.Status                  = "Resubmit";
                submission.TotalHTTPErrors         = jsonResult.httpErrCount + 1;
                entitiesdb.Entry(submission).State = EntityState.Modified;
                entitiesdb.SaveChanges();
                string err = error.Message;
                if (error.InnerException != null)
                {
                    err += Environment.NewLine + error.InnerException.Message;
                }
                jsonResult.Log += err + Environment.NewLine;
                jsonResult.Log += "Records processed = " + jsonResult.processedCount + Environment.NewLine +
                                  "Records successfully submitted = " + jsonResult.succeededCount + Environment.NewLine +
                                  "Records with errors = " + jsonResult.failedCount + Environment.NewLine +
                                  "Rejected records = " + jsonResult.fatalCount + Environment.NewLine +
                                  "HTTP error count = " + jsonResult.httpErrCount + Environment.NewLine;
                File.AppendAllText(logFile1, jsonResult.Log);
                throw error;
            }

            //return Ok(db.Stop.Where(x => startDate <= x.Time && x.Time <= endDate && (x.Status == "fail" || x.Status == "fatal")).ToList());
        }