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)); }
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)); }
// 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()); }