/// <summary> /// Inserts a DataRequestLog object(row) for a given BBL and type of request when data (not stale) is found in WebData DB /// </summary> public static WebDataDB.DataRequestLog InsertForFailure(string propertyBBL, int requestTypeId, string externalReferenceId, string jobId, string requestParameters) { WebDataDB.DataRequestLog dataRequestLogObj = new WebDataDB.DataRequestLog(); using (WebDataEntities webDBEntities = new WebDataEntities()) { try { dataRequestLogObj.BBL = propertyBBL; dataRequestLogObj.RequestStatusTypeId = (int)RequestStatus.Error; dataRequestLogObj.RequestTypeId = requestTypeId; dataRequestLogObj.RequestDateTime = DateTime.UtcNow; dataRequestLogObj.ExternalReferenceId = externalReferenceId; dataRequestLogObj.JobId = jobId; dataRequestLogObj.ServedFromCache = false; dataRequestLogObj.WebDataRequestMade = false; dataRequestLogObj.RequestParameters = requestParameters; dataRequestLogObj = webDBEntities.DataRequestLogs.Add(dataRequestLogObj); webDBEntities.SaveChanges(); return(dataRequestLogObj); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered request for BBL {0} for Request Type {1} with externalRefId {2}{3}", propertyBBL, ((RequestStatus)requestTypeId).ToString(), externalReferenceId, Common.Logs.FormatException(e))); return(null); } } }
/// <summary> /// Gets a DataRequestLog object(row) from the DataRequestLog table for a given BBL and type of request with Pending status /// </summary> /// <param name="webDBEntities"></param> /// <param name="propertyBBL"></param> /// <param name="RequestTypeId"></param> /// <param name="requestParameters"></param> /// <returns></returns> public static WebDataDB.DataRequestLog GetPendingRequest(WebDataEntities webDBEntities, string propertyBBL, int RequestTypeId, string requestParameters) { return(webDBEntities.DataRequestLogs.FirstOrDefault(i => i.RequestStatusTypeId == (int)RequestStatus.Pending && i.RequestTypeId == RequestTypeId && i.BBL == propertyBBL && i.RequestParameters == requestParameters)); }
/// <summary> /// Gets all DataRequestLog objects(rows) from the DataRequestLog table that have a pending status but have a /// corresponding Request Object that is in error or completed successfully. This may happen when DJM is in session processing requests /// and Data Services is down /// </summary> /// <param name="webDBEntities"></param> /// <returns></returns> public static List <WebDataDB.DataRequestLog> GetAllUnprocessed(WebDataEntities webDBEntities) { return((from drl in webDBEntities.DataRequestLogs join r in webDBEntities.Requests on drl.RequestId equals r.RequestId where drl.RequestStatusTypeId == (int)RequestStatus.Pending && (r.RequestStatusTypeId == (int)RequestStatus.Error || r.RequestStatusTypeId == (int)RequestStatus.Success) select drl).ToList()); }
public IHttpActionResult PostProcessRequestResult(long requestId) { Common.Context appContext = new Common.Context(RequestContext, Request); using (WebDataEntities webDataE = new WebDataEntities()) { Request requestObj = webDataE.Requests.Find(requestId); if (requestObj == null) { return(NotFound()); } bool success = false; switch (requestObj.RequestTypeId) { case (int)RequestTypes.NYCTaxBill: success = BAL.TaxBill.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCWaterBill: success = BAL.WaterBill.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCDOBPenaltiesAndViolations: success = BAL.DOBPenaltiesAndViolationsSummary.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCMortgageServicer: success = BAL.MortgageServicer.UpdateData(appContext, requestObj); break; case (int)RequestTypes.Zillow: success = BAL.Zillow.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCNoticeOfPropertyValue: success = BAL.NoticeOfPropertyValueDocument.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCMortgageDocumentDetails: success = BAL.MortgageDocument.UpdateData(appContext, requestObj); break; default: String msg = String.Format("Cannot process request - Invalid Request Type: {0} for Request Id {1}", requestObj.RequestTypeId, requestObj.RequestId); Common.Logs.log().Warn(msg); return(Common.HttpResponse.InternalError(Request, msg)); } if (!success) { return(Common.HttpResponse.InternalError(Request, "Internal Error in processing request")); } return(Ok(true)); } }
public void CheckIfRequestsProcessed() { Common.Context appContext = new Common.Context(RequestContext, Request); using (WebDataEntities webDataE = new WebDataEntities()) { List <DataRequestLog> requestLogList = DAL.DataRequestLog.GetAllUnprocessed(webDataE); if (requestLogList == null) { return; } foreach (var requestLogObj in requestLogList) { Request requestObj = webDataE.Requests.Find(requestLogObj.RequestId); if (requestObj == null) { continue; } switch (requestObj.RequestTypeId) { case (int)RequestTypes.NYCTaxBill: BAL.TaxBill.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCWaterBill: BAL.WaterBill.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCDOBPenaltiesAndViolations: BAL.DOBPenaltiesAndViolationsSummary.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCMortgageServicer: BAL.MortgageServicer.UpdateData(appContext, requestObj); break; case (int)RequestTypes.Zillow: BAL.Zillow.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCNoticeOfPropertyValue: BAL.NoticeOfPropertyValueDocument.UpdateData(appContext, requestObj); break; case (int)RequestTypes.NYCMortgageDocumentDetails: BAL.MortgageDocument.UpdateData(appContext, requestObj); break; default: Common.Logs.log().Warn(string.Format("Cannot process request - Invalid Request Type: {0} for Request Id {1}", requestObj.RequestTypeId, requestObj.RequestId)); break; } } } }
public void UpdateStaleData() { string jobId = "SCH-" + DateTime.UtcNow.ToString() + " UTC"; List <WebDataDB.vwStaleDataBBL> bblList = null; using (WebDataEntities webDBE = new WebDataEntities()) { bblList = webDBE.vwStaleDataBBLs.OrderBy(m => m.BBL).ToList(); } if (bblList == null || bblList.Count < 0) { return; } foreach (var bbl in bblList) { switch (bbl.RequestTypeId) { case (int)RequestTypes.NYCTaxBill: BAL.TaxBill.Get(bbl.BBL, null, DAL.Request.STALEDATAPRIORITY, jobId); break; case (int)RequestTypes.NYCWaterBill: BAL.WaterBill.Get(bbl.BBL, null, DAL.Request.STALEDATAPRIORITY, jobId); break; case (int)RequestTypes.NYCMortgageServicer: BAL.MortgageServicer.Get(bbl.BBL, null, DAL.Request.STALEDATAPRIORITY, jobId); break; case (int)RequestTypes.Zillow: var propInfo = BAL.NYCPhysicalPropertyData.Get(bbl.BBL, true); if (propInfo != null) { BAL.Zillow.LogFailure(bbl.BBL, null, jobId, (int)HttpStatusCode.BadRequest); } else { BAL.Zillow.Get(bbl.BBL, propInfo.address.ToString(), null, DAL.Request.STALEDATAPRIORITY, jobId); } break; case (int)RequestTypes.NYCNoticeOfPropertyValue: BAL.NoticeOfPropertyValueDocument.GetDetails(bbl.BBL, null, DAL.Request.STALEDATAPRIORITY, jobId); break; case (int)RequestTypes.NYCMortgageDocumentDetails: BAL.MortgageDocument.GetDetailsAllUnstaisfiedMortgages(bbl.BBL, null, DAL.Request.STALEDATAPRIORITY, jobId); break; default: String msg = String.Format("Cannot process request - Invalid Request Type: {0} for BBL {1}", bbl.RequestTypeId, bbl.BBL); Common.Logs.log().Warn(msg); break; } } }
/// <summary> /// Gets all DataRequestLog objects(rows) from the DataRequestLog table for a given RequestId and sets their status to Error /// </summary> /// <param name="webDBEntities"></param> /// <param name="requestId"></param> /// <returns></returns> public static List <WebDataDB.DataRequestLog> SetAsSuccess(WebDataEntities webDBEntities, long requestId) { List <WebDataDB.DataRequestLog> requestDataLogList = webDBEntities.DataRequestLogs.Where(i => i.RequestId == requestId).ToList(); requestDataLogList.ForEach(a => a.RequestStatusTypeId = (int)RequestStatus.Success); webDBEntities.SaveChanges(); return(requestDataLogList); }
public IHttpActionResult GetRequestByExternalReferenceId(string externalReferenceId) { using (WebDataEntities webDataE = new WebDataEntities()) { List <DataRequestLog> requestLogList = DAL.DataRequestLog.GetAll(webDataE, externalReferenceId); if (requestLogList == null) { return(NotFound()); } var result = new BAL.Results(); foreach (var requestLogObj in requestLogList) { switch (requestLogObj.RequestTypeId) { case (int)RequestTypes.NYCTaxBill: result.taxBill = BAL.TaxBill.ReRun(requestLogObj); break; case (int)RequestTypes.NYCWaterBill: result.waterBill = BAL.WaterBill.ReRun(requestLogObj); break; case (int)RequestTypes.NYCMortgageServicer: result.mortgageServicer = BAL.MortgageServicer.ReRun(requestLogObj); break; case (int)RequestTypes.NYCDOBPenaltiesAndViolations: result.dobPenaltiesAndViolationsSummary = BAL.DOBPenaltiesAndViolationsSummary.ReRun(requestLogObj); break; case (int)RequestTypes.Zillow: result.zillowProperty = BAL.Zillow.ReRun(requestLogObj); break; case (int)RequestTypes.NYCNoticeOfPropertyValue: result.noticeOfPropertyValueResult = BAL.NoticeOfPropertyValueDocument.ReRun(requestLogObj); break; case (int)RequestTypes.NYCMortgageDocumentDetails: result.mortgageDocumentResult = BAL.MortgageDocument.ReRun(requestLogObj); break; default: break; } } return(Ok(result)); } }
/// <summary> /// Inserts a Request object(row) for a given BBL and type of request when data (not stale) is found in WebData DB /// </summary> /// <param name="webDBEntities"></param> /// <param name="requestStr"> /// Depending on the Request Type a helper class will be provided to convert business level variables into a string (in a specific format) /// such that it is readable by the web scarping service. /// </param> /// <param name="requestTypeId"></param> /// <param name="priority"></param> /// <param name="jobId"></param> /// <returns></returns> public static WebDataDB.Request Insert(WebDataEntities webDBEntities, string requestStr, int requestTypeId, int priority, string jobId) { WebDataDB.Request requestObj = new WebDataDB.Request(); requestObj.JobId = jobId; requestObj.Priorty = priority; requestObj.RequestTypeId = requestTypeId; requestObj.RequestStatusTypeId = (int)RequestStatus.Pending; requestObj.DateTimeSubmitted = DateTime.UtcNow; requestObj.AttemptNumber = 0; requestObj.RequestData = requestStr; requestObj = webDBEntities.Requests.Add(requestObj); webDBEntities.SaveChanges(); return(requestObj); }
public IHttpActionResult GetRequest(long requestId) { using (WebDataEntities webDataE = new WebDataEntities()) { WebDataDB.DataRequestLog requestLogObj = DAL.DataRequestLog.GetFirst(webDataE, requestId); if (requestLogObj == null) { return(NotFound()); } var result = new BAL.Results(); switch (requestLogObj.RequestTypeId) { case (int)RequestTypes.NYCTaxBill: result.taxBill = BAL.TaxBill.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.NYCWaterBill: result.waterBill = BAL.WaterBill.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.NYCMortgageServicer: result.mortgageServicer = BAL.MortgageServicer.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.NYCDOBPenaltiesAndViolations: result.dobPenaltiesAndViolationsSummary = BAL.DOBPenaltiesAndViolationsSummary.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.Zillow: result.zillowProperty = BAL.Zillow.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.NYCNoticeOfPropertyValue: result.noticeOfPropertyValueResult = BAL.NoticeOfPropertyValueDocument.ReRun(requestLogObj); return(Ok(result)); case (int)RequestTypes.NYCMortgageDocumentDetails: result.mortgageDocumentResult = BAL.MortgageDocument.ReRun(requestLogObj); return(Ok(result)); default: return(BadRequest("Bad Request - Incorrect Request Type")); } } }
/// <summary> /// Inserts a DataRequestLog object(row) for a given BBL and type of request when data (not stale) is found in WebData DB /// </summary> public static WebDataDB.DataRequestLog InsertForCacheAccess(WebDataEntities webDBEntities, string propertyBBL, int requestTypeId, string externalReferenceId, string jobId, string requestParameters) { WebDataDB.DataRequestLog dataRequestLogObj = new WebDataDB.DataRequestLog(); dataRequestLogObj.BBL = propertyBBL; dataRequestLogObj.RequestStatusTypeId = (int)RequestStatus.Success; dataRequestLogObj.RequestTypeId = requestTypeId; dataRequestLogObj.RequestDateTime = DateTime.UtcNow; dataRequestLogObj.ExternalReferenceId = externalReferenceId; dataRequestLogObj.JobId = jobId; dataRequestLogObj.ServedFromCache = true; dataRequestLogObj.WebDataRequestMade = false; dataRequestLogObj.RequestParameters = requestParameters; dataRequestLogObj = webDBEntities.DataRequestLogs.Add(dataRequestLogObj); webDBEntities.SaveChanges(); return(dataRequestLogObj); }
/// <summary> /// This function returns a list of unsatisfied mortgages and deletes any mortgage data stored for a mortgaged that is satisfied /// </summary> public static List <tfnGetUnsatisfiedMortgages_Result> GetSynchronizedData(string propertyBBL) { List <tfnGetUnsatisfiedMortgages_Result> uMortgagesList = null; //get all unsatisfied mortgage document records using (ACRISEntities acrisDBEntities = new ACRISEntities()) { uMortgagesList = acrisDBEntities.tfnGetUnsatisfiedMortgages(propertyBBL).ToList(); } //get all mortgage document records stored in webdata locally using (WebDataEntities wDBEntities = new WebDataEntities()) { if (uMortgagesList == null || uMortgagesList.Count <= 0) { wDBEntities.Mortgages.RemoveRange(wDBEntities.Mortgages.Where(x => x.BBL == propertyBBL)); } else { List <WebDataDB.Mortgage> webDataMortgageList = wDBEntities.Mortgages.Where(x => x.BBL == propertyBBL).ToList(); foreach (var wDBMortgage in webDataMortgageList) { bool found = false; foreach (var uMortgage in uMortgagesList) { if (uMortgage.URL == wDBMortgage.MortgageDocumentURI) { found = true; break; } } if (!found) { wDBEntities.Mortgages.Remove(wDBMortgage); } } } wDBEntities.SaveChanges(); } return(uMortgagesList); }
/// <summary> /// This method gets the data or current status for a request /// </summary> /// <param name="dataRequestLogObj"></param> /// <returns></returns> public static DOBPenaltiesAndViolationsSummaryData ReRun(DataRequestLog dataRequestLogObj) { DOBPenaltiesAndViolationsSummaryData dPenaltiesAndViolations = new DOBPenaltiesAndViolationsSummaryData(); dPenaltiesAndViolations.BBL = dataRequestLogObj.BBL; dPenaltiesAndViolations.requestId = dataRequestLogObj.RequestId; dPenaltiesAndViolations.externalReferenceId = dataRequestLogObj.ExternalReferenceId; dPenaltiesAndViolations.status = ((RequestStatus)dataRequestLogObj.RequestStatusTypeId).ToString();; dPenaltiesAndViolations.civilPenaltyAmount = null; dPenaltiesAndViolations.violationAmount = null; try { Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); using (WebDataEntities webDBEntities = new WebDataEntities()) { if (dataRequestLogObj.RequestStatusTypeId == (int)RequestStatus.Success) { //check if data available WebDataDB.DOBViolation dCivilPenaltiesObj = webDBEntities.DOBViolations.FirstOrDefault(i => i.BBL == parameters.BBL); if (dCivilPenaltiesObj != null && DateTime.UtcNow.Subtract(dCivilPenaltiesObj.LastUpdated).Days <= 30) { dPenaltiesAndViolations.civilPenaltyAmount = dCivilPenaltiesObj.DOBCivilPenalties; dPenaltiesAndViolations.violationAmount = dCivilPenaltiesObj.ECBViolationAmount; } else { dPenaltiesAndViolations.status = RequestStatus.Error.ToString(); } } } return(dPenaltiesAndViolations); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered processing request log for {0} with externalRefId {1}{2}", dataRequestLogObj.BBL, dataRequestLogObj.ExternalReferenceId, Common.Logs.FormatException(e))); return(null); } }
/// <summary> /// Update Request object with higher priority and Job Id /// </summary> public static WebDataDB.Request Update(WebDataEntities webDBEntities, long requestId, int priority, string jobId) { var requestObj = webDBEntities.Requests.Where(x => x.RequestId == requestId).FirstOrDefault(); if (requestObj == null) { return(null); } requestObj.JobId = jobId; if (requestObj.Priorty > priority) { requestObj.Priorty = priority; } webDBEntities.Requests.Attach(requestObj); webDBEntities.Entry(requestObj).State = EntityState.Modified; webDBEntities.SaveChanges(); return(requestObj); }
/// <summary> /// This method gets the data or current status for a request /// </summary> /// <param name="dataRequestLogObj"></param> /// <returns></returns> public static WaterBillDetails ReRun(DataRequestLog dataRequestLogObj) { WaterBillDetails waterBill = new WaterBillDetails(); waterBill.BBL = dataRequestLogObj.BBL; waterBill.requestId = dataRequestLogObj.RequestId; waterBill.externalReferenceId = dataRequestLogObj.ExternalReferenceId; waterBill.status = ((RequestStatus)dataRequestLogObj.RequestStatusTypeId).ToString(); waterBill.billAmount = null; try { using (WebDataEntities webDBEntities = new WebDataEntities()) { if (dataRequestLogObj.RequestStatusTypeId == (int)RequestStatus.Success) { Parameters waterParams = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.WaterBill waterBillObj = webDBEntities.WaterBills.FirstOrDefault(i => i.BBL == waterParams.BBL); if (waterBillObj != null && DateTime.UtcNow.Subtract(waterBillObj.LastUpdated).Days <= 30) { waterBill.billAmount = waterBillObj.BillAmount; } else { waterBill.status = RequestStatus.Error.ToString(); } } } return(waterBill); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered precessing request log for {0} with externalRefId {1}{2}", dataRequestLogObj.BBL, dataRequestLogObj.ExternalReferenceId, Common.Logs.FormatException(e))); return(null); } }
/// <summary> /// This method gets the data or current status for a request /// </summary> /// <param name="dataRequestLogObj"></param> /// <returns></returns> public static NoticeOfPropertyValueResult ReRun(DataRequestLog dataRequestLogObj) { NoticeOfPropertyValueResult resultObj = new NoticeOfPropertyValueResult(); resultObj.BBL = dataRequestLogObj.BBL; resultObj.requestId = dataRequestLogObj.RequestId; resultObj.externalReferenceId = dataRequestLogObj.ExternalReferenceId; resultObj.status = ((RequestStatus)dataRequestLogObj.RequestStatusTypeId).ToString(); try { using (WebDataEntities webDBEntities = new WebDataEntities()) { if (dataRequestLogObj.RequestStatusTypeId == (int)RequestStatus.Success) { Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.NoticeOfProperyValue noticeOfPropetyValueObj = webDBEntities.NoticeOfProperyValues.FirstOrDefault(i => i.BBL == parameters.BBL); if (noticeOfPropetyValueObj != null && DateTime.UtcNow.Subtract(noticeOfPropetyValueObj.LastUpdated).Days <= 30) { resultObj.noticeOfPropertyValue = noticeOfPropetyValueObj; } else { resultObj.status = RequestStatus.Error.ToString(); } } } return(resultObj); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered processing request log for {0} with externalRefId {1}{2}", dataRequestLogObj.BBL, dataRequestLogObj.ExternalReferenceId, Common.Logs.FormatException(e))); return(null); } }
/// <summary> /// This method gets the data or current status for a request /// </summary> /// <param name="dataRequestLogObj"></param> /// <returns></returns> public static FreddieMortgageDetails ReRun(DataRequestLog dataRequestLogObj) { FreddieMortgageDetails mDetails = new FreddieMortgageDetails(); mDetails.BBL = dataRequestLogObj.BBL; mDetails.requestId = dataRequestLogObj.RequestId; mDetails.externalReferenceId = dataRequestLogObj.ExternalReferenceId; mDetails.status = ((RequestStatus)dataRequestLogObj.RequestStatusTypeId).ToString(); try { using (WebDataEntities webDBEntities = new WebDataEntities()) { if (dataRequestLogObj.RequestStatusTypeId == (int)RequestStatus.Success) { Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.FreddieMortgage mortgageObj = webDBEntities.FreddieMortgages.FirstOrDefault(i => i.BBL == parameters.BBL); if (mortgageObj != null && DateTime.UtcNow.Subtract(mortgageObj.LastUpdated).Days <= 30) { mDetails.isFreddieMortgage = mortgageObj.IsFreddie; } else { mDetails.status = RequestStatus.Error.ToString(); } } } return(mDetails); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered processing request log for {0} with externalRefId {1}{2}", dataRequestLogObj.BBL, dataRequestLogObj.ExternalReferenceId, Common.Logs.FormatException(e))); return(null); } }
/// <summary> /// This method gets the data or current status for a request /// </summary> /// <param name="dataRequestLogObj"></param> /// <returns></returns> public static ZillowPropertyDetails ReRun(DataRequestLog dataRequestLogObj) { ZillowPropertyDetails zPropertyDetails = new ZillowPropertyDetails(); zPropertyDetails.BBL = dataRequestLogObj.BBL; zPropertyDetails.requestId = dataRequestLogObj.RequestId; zPropertyDetails.externalReferenceId = dataRequestLogObj.ExternalReferenceId; zPropertyDetails.status = ((RequestStatus)dataRequestLogObj.RequestStatusTypeId).ToString();; zPropertyDetails.zEstimate = null; try { using (WebDataEntities webDBEntities = new WebDataEntities()) { if (dataRequestLogObj.RequestStatusTypeId == (int)RequestStatus.Success) { Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.Zillow zillowObj = webDBEntities.Zillows.FirstOrDefault(i => i.BBL == parameters.BBL); if (zillowObj != null && DateTime.UtcNow.Subtract(zillowObj.LastUpdated).Days <= 30) { zPropertyDetails.zEstimate = zillowObj.zEstimate; } else { zPropertyDetails.status = RequestStatus.Error.ToString(); } } } return(zPropertyDetails); } catch (Exception e) { Common.Logs.log().Error(string.Format("Exception encountered processing request log for {0} with externalRefId {1}{2}", dataRequestLogObj.BBL, dataRequestLogObj.ExternalReferenceId, Common.Logs.FormatException(e))); return(null); } }
/// <summary> /// This method updates the dCivilPenalties table based on the information received from the Request Object /// </summary> public static bool UpdateData(Common.Context appContext, Request requestObj) { using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { List <DataRequestLog> logs = null; decimal?penaltyAmount = null, violationAmount = null; switch (requestObj.RequestStatusTypeId) { case (int)RequestStatus.Error: logs = DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); break; case (int)RequestStatus.Success: { DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetFirst(webDBEntities, requestObj.RequestId); if (dataRequestLogObj != null) { decimal dobTotalPenaltyAmount = 0; decimal dobTotalViolationAmount = 0; foreach (var row in ResponseData.ParseECBviolationAndDOBCivilPenalty(requestObj.ResponseData).DOBCivilPenalties) { dobTotalPenaltyAmount += row.DOBCivilPenaltyAmount.GetValueOrDefault(); } foreach (var row in ResponseData.ParseECBviolationAndDOBCivilPenalty(requestObj.ResponseData).ECBViolations) { dobTotalViolationAmount += row.ECBPenaltyDue.GetValueOrDefault(); } penaltyAmount = dobTotalPenaltyAmount; violationAmount = dobTotalViolationAmount; Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.DOBViolation dobPenaltiesAndViolationsObj = webDBEntities.DOBViolations.FirstOrDefault(i => i.BBL == parameters.BBL); if (dobPenaltiesAndViolationsObj != null) { dobPenaltiesAndViolationsObj.DOBCivilPenalties = dobTotalPenaltyAmount; dobPenaltiesAndViolationsObj.ECBViolationAmount = dobTotalViolationAmount; dobPenaltiesAndViolationsObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); } else { dobPenaltiesAndViolationsObj = new WebDataDB.DOBViolation(); dobPenaltiesAndViolationsObj.BBL = parameters.BBL; dobPenaltiesAndViolationsObj.DOBCivilPenalties = dobTotalPenaltyAmount; dobPenaltiesAndViolationsObj.ECBViolationAmount = dobTotalViolationAmount; dobPenaltiesAndViolationsObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.DOBViolations.Add(dobPenaltiesAndViolationsObj); } webDBEntities.SaveChanges(); logs = DAL.DataRequestLog.SetAsSuccess(webDBEntities, requestObj.RequestId); } else { throw (new Exception("Cannot locate Request Log Record(s)")); } break; } default: Common.Logs.log().Warn(string.Format("Update called for a Request Object Id {0} with incorrect Status Id {1}", requestObj.RequestId, requestObj.RequestStatusTypeId)); break; } webDBEntitiestransaction.Commit(); if (logs != null) { MakeCallBacks(appContext, logs, penaltyAmount, violationAmount); } return(true); } catch (Exception e) { webDBEntitiestransaction.Rollback(); Common.Logs.log().Error(string.Format("Exception encountered updating request with id {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); return(false); } } } }
/// <summary> /// This method updates the Mortgage Servicer table based on the information received from the Request Object /// </summary> /// <param name="requestObj"></param> /// <param name="appContext"></param> /// <returns>True if successful else false</returns> public static bool UpdateData(Common.Context appContext, Request requestObj) { using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { List <DataRequestLog> logs = null; NoticeOfProperyValue noticeOfPropertyValueObj = null; switch (requestObj.RequestStatusTypeId) { case (int)RequestStatus.Error: logs = DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); break; case (int)RequestStatus.Success: { DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetFirst(webDBEntities, requestObj.RequestId); if (dataRequestLogObj != null) { var resultObj = ResponseData.ParseNoticeOfPropertyValue(requestObj.ResponseData); Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if old data in the DB noticeOfPropertyValueObj = webDBEntities.NoticeOfProperyValues.FirstOrDefault(i => i.BBL == parameters.BBL); if (noticeOfPropertyValueObj != null) { //Update data with new results noticeOfPropertyValueObj = CopyData(noticeOfPropertyValueObj, resultObj); noticeOfPropertyValueObj.BBL = parameters.BBL; noticeOfPropertyValueObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.Entry(noticeOfPropertyValueObj).State = EntityState.Modified; } else { // add an entry into cache or DB noticeOfPropertyValueObj = CopyData(null, resultObj); noticeOfPropertyValueObj.BBL = parameters.BBL; noticeOfPropertyValueObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.NoticeOfProperyValues.Add(noticeOfPropertyValueObj); } webDBEntities.SaveChanges(); logs = DAL.DataRequestLog.SetAsSuccess(webDBEntities, requestObj.RequestId); } else { throw (new Exception("Cannot locate Request Log Record(s)")); } break; } default: Common.Logs.log().Warn(string.Format("Update called for a Request Object Id {0} with incorrect Status Id {1}", requestObj.RequestId, requestObj.RequestStatusTypeId)); break; } webDBEntitiestransaction.Commit(); if (logs != null) { MakeCallBacks(appContext, logs, noticeOfPropertyValueObj); } return(true); } catch (Exception e) { webDBEntitiestransaction.Rollback(); Common.Logs.log().Error(string.Format("Exception encountered updating request with id {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); return(false); } } } }
/// <summary> /// This method deals with all the details associated with either returning the Zillow details or creating the /// request for getting it scrapped from the web /// </summary> public static ZillowPropertyDetails Get(string propertyBBL, string address, string externalReferenceId, int priority, string jobId) { ZillowPropertyDetails zPropertyDetails = new ZillowPropertyDetails(); zPropertyDetails.BBL = propertyBBL; zPropertyDetails.externalReferenceId = externalReferenceId; zPropertyDetails.status = RequestStatus.Pending.ToString(); zPropertyDetails.zEstimate = null; string parameters = ParametersToJSON(propertyBBL, address); using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { string jsonBillParams = ParametersToJSON(propertyBBL, address); //check if data available WebDataDB.Zillow zillowObj = webDBEntities.Zillows.FirstOrDefault(i => i.BBL == propertyBBL); // record in database and data is not stale if (zillowObj != null && DateTime.UtcNow.Subtract(zillowObj.LastUpdated).Days <= 30) { zPropertyDetails.zEstimate = zillowObj.zEstimate; zPropertyDetails.status = RequestStatus.Success.ToString(); DAL.DataRequestLog.InsertForCacheAccess(webDBEntities, propertyBBL, RequestTypeId, externalReferenceId, jobId, jsonBillParams); } else { //check if pending request in queue DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetPendingRequest(webDBEntities, propertyBBL, RequestTypeId, jsonBillParams); if (dataRequestLogObj == null) //No Pending Request Create New Request { string requestStr = RequestResponseBuilder.RequestObjects.RequestData.ZillowZEstimate(address); Request requestObj = DAL.Request.Insert(webDBEntities, requestStr, RequestTypeId, priority, jobId); dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, requestObj.RequestId, externalReferenceId, jobId, jsonBillParams); zPropertyDetails.status = RequestStatus.Pending.ToString(); zPropertyDetails.requestId = requestObj.RequestId; } else //Pending request in queue { zPropertyDetails.status = RequestStatus.Pending.ToString(); //Send the RequestId for the pending request back zPropertyDetails.requestId = dataRequestLogObj.RequestId; dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, dataRequestLogObj.RequestId.GetValueOrDefault(), externalReferenceId, jobId, jsonBillParams); } } webDBEntitiestransaction.Commit(); } catch (Exception e) { webDBEntitiestransaction.Rollback(); zPropertyDetails.status = RequestStatus.Error.ToString(); DAL.DataRequestLog.InsertForFailure(propertyBBL, RequestTypeId, externalReferenceId, jobId, parameters); Common.Logs.log().Error(string.Format("Exception encountered processing {0} with externalRefId {1}{2}", propertyBBL, externalReferenceId, Common.Logs.FormatException(e))); } } } return(zPropertyDetails); }
/// <summary> /// This method updates the WaterBill table based on the information received from the Request Object /// </summary> public static bool UpdateData(Common.Context appContext, Request requestObj) { using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { List <DataRequestLog> logs = null; Decimal?billAmount = null; switch (requestObj.RequestStatusTypeId) { case (int)RequestStatus.Error: DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); break; case (int)RequestStatus.Success: { DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetFirst(webDBEntities, requestObj.RequestId); if (dataRequestLogObj != null) { var resultObj = ResponseData.ParseWaterBill(requestObj.ResponseData); billAmount = resultObj.Amount; Parameters waterBillParams = JSONToParameters(dataRequestLogObj.RequestParameters); //check if data available WebDataDB.WaterBill waterBillObj = webDBEntities.WaterBills.FirstOrDefault(i => i.BBL == waterBillParams.BBL); if (waterBillObj != null) { waterBillObj.BillAmount = resultObj.Amount; waterBillObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); } else { waterBillObj = new WebDataDB.WaterBill(); waterBillObj.BBL = waterBillParams.BBL; waterBillObj.BillAmount = resultObj.Amount; waterBillObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.WaterBills.Add(waterBillObj); } webDBEntities.SaveChanges(); logs = DAL.DataRequestLog.SetAsSuccess(webDBEntities, requestObj.RequestId); } else { throw (new Exception("Cannot locate Request Log Record(s)")); } break; } default: Common.Logs.log().Warn(String.Format("Update called for a Request Id {0} with incorrect Status Id {2}", requestObj.RequestId, requestObj.RequestStatusTypeId)); break; } webDBEntitiestransaction.Commit(); if (logs != null) { MakeCallBacks(appContext, logs, billAmount); } return(true); } catch (Exception e) { webDBEntitiestransaction.Rollback(); Common.Logs.log().Error(string.Format("Exception encountered updating request with id {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); return(false); } } } }
/// <summary> /// This method updates the Zillow table based on the information received from the Request Object /// </summary> public static bool UpdateData(Common.Context appContext, Request requestObj) { using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { List <DataRequestLog> logs = null; decimal?zEstimate = null; switch (requestObj.RequestStatusTypeId) { case (int)RequestStatus.Error: logs = DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); break; case (int)RequestStatus.Success: { DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetFirst(webDBEntities, requestObj.RequestId); if (dataRequestLogObj != null) { RequestResponseBuilder.ResponseObjects.ZillowZEstimate resultObj = null; try { resultObj = (ResponseData.ParseZillowZEstimate(requestObj.ResponseData))[0]; zEstimate = resultObj.Zestimate; } catch (Exception e) { Common.Logs.log().Error(string.Format("Cannot parse the response data {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); } Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if old data in the DB WebDataDB.Zillow zillowObj = webDBEntities.Zillows.FirstOrDefault(i => i.BBL == parameters.BBL); if (zillowObj != null) { //Update data with new results zillowObj.zEstimate = zEstimate; zillowObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); } else { // add an entry into cache or DB zillowObj = new WebDataDB.Zillow(); zillowObj.BBL = parameters.BBL; zillowObj.zEstimate = zEstimate; zillowObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.Zillows.Add(zillowObj); } webDBEntities.SaveChanges(); logs = DAL.DataRequestLog.SetAsSuccess(webDBEntities, requestObj.RequestId); } else { throw (new Exception("Cannot locate Request Log Record(s)")); } break; } default: Common.Logs.log().Warn(String.Format("Update called for a Request Object Id {0} with incorrect Status Id {1}", requestObj.RequestId, requestObj.RequestStatusTypeId)); break; } webDBEntitiestransaction.Commit(); if (logs != null) { MakeCallBacks(appContext, logs, zEstimate); } return(true); } catch (Exception e) { webDBEntitiestransaction.Rollback(); Common.Logs.log().Error(string.Format("Exception encountered updating request with id {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); return(false); } } } }
/// <summary> /// This method deals with all the details associated with either returning the water bill details or creating the /// request for getting is scrapped from the web /// </summary> public static WaterBillDetails Get(string propertyBBL, string externalReferenceId, int priority, string jobId) { WaterBillDetails waterBill = new WaterBillDetails(); waterBill.externalReferenceId = externalReferenceId; waterBill.status = RequestStatus.Pending.ToString(); waterBill.BBL = propertyBBL; waterBill.billAmount = null; using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { string parameters = ParametersToJSON(propertyBBL); try { //check if data available WebDataDB.WaterBill waterBillObj = webDBEntities.WaterBills.FirstOrDefault(i => i.BBL == propertyBBL); // record in database and data is not stale if (waterBillObj != null && DateTime.UtcNow.Subtract(waterBillObj.LastUpdated).Days <= 30) { waterBill.billAmount = waterBillObj.BillAmount; waterBill.status = RequestStatus.Success.ToString(); DAL.DataRequestLog.InsertForCacheAccess(webDBEntities, propertyBBL, RequestTypeId, externalReferenceId, jobId, parameters); } else { //check if pending request in queue DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetPendingRequest(webDBEntities, propertyBBL, RequestTypeId, parameters); if (dataRequestLogObj == null) //No Pending Request Create New Request { string requestStr = RequestData.WaterBill(propertyBBL); Request requestObj = DAL.Request.Insert(webDBEntities, requestStr, RequestTypeId, priority, jobId); dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, requestObj.RequestId, externalReferenceId, jobId, parameters); waterBill.status = RequestStatus.Pending.ToString(); waterBill.requestId = requestObj.RequestId; } else //Pending request in queue { waterBill.status = RequestStatus.Pending.ToString(); //Send the RequestId for the pending request back waterBill.requestId = dataRequestLogObj.RequestId; dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, dataRequestLogObj.RequestId.GetValueOrDefault(), externalReferenceId, jobId, parameters); } } webDBEntitiestransaction.Commit(); } catch (Exception e) { webDBEntitiestransaction.Rollback(); waterBill.status = RequestStatus.Error.ToString(); DAL.DataRequestLog.InsertForFailure(propertyBBL, RequestTypeId, externalReferenceId, jobId, parameters); Common.Logs.log().Error(string.Format("Exception encountered processing {0} with externalRefId {1}: {2}", propertyBBL, externalReferenceId, Common.Logs.FormatException(e))); } } } return(waterBill); }
/// <summary> /// This method deals with all the details associated with either returning the details in the Mortgage Document or creating the /// request for getting the data from the web /// </summary> /// <param name="propertyBBL"></param> /// <param name="externalReferenceId"></param> /// <param name="documentURI"></param> /// <param name="jobId"></param> /// <param name="priority"></param> /// <returns></returns> public static MortgageDocumentResult GetDetails(string propertyBBL, string documentURI, string externalReferenceId, int priority, string jobId) { MortgageDocumentResult mortgageDocumentResultObj = new MortgageDocumentResult(); mortgageDocumentResultObj.BBL = propertyBBL; mortgageDocumentResultObj.mortgageDocumentURI = documentURI; mortgageDocumentResultObj.externalReferenceId = externalReferenceId; mortgageDocumentResultObj.status = RequestStatus.Pending.ToString(); string jsonBillParams = ParametersToJSON(propertyBBL, documentURI); using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { //check if data available var mortgageDocumentObj = webDBEntities.Mortgages.FirstOrDefault(i => i.BBL == propertyBBL && i.MortgageDocumentURI == documentURI); // record in database and data is not stale if (mortgageDocumentObj != null && DateTime.UtcNow.Subtract(mortgageDocumentObj.LastUpdated).Days <= 30) { mortgageDocumentResultObj.mortgageDetails = mortgageDocumentObj; mortgageDocumentResultObj.status = RequestStatus.Success.ToString(); DAL.DataRequestLog.InsertForCacheAccess(webDBEntities, propertyBBL, RequestTypeId, externalReferenceId, jobId, jsonBillParams); } else { //check if pending request in queue DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetPendingRequest(webDBEntities, propertyBBL, RequestTypeId, jsonBillParams); if (dataRequestLogObj == null) //No Pending Request Create New Request { string requestStr = RequestResponseBuilder.RequestObjects.RequestData.CreateRequestDataForMortgage(documentURI); Request requestObj = DAL.Request.Insert(webDBEntities, requestStr, RequestTypeId, priority, jobId); dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, requestObj.RequestId, externalReferenceId, jobId, jsonBillParams); mortgageDocumentResultObj.status = RequestStatus.Pending.ToString(); mortgageDocumentResultObj.requestId = requestObj.RequestId; } else //Pending request in queue { mortgageDocumentResultObj.status = RequestStatus.Pending.ToString(); //Send the RequestId for the pending request back mortgageDocumentResultObj.requestId = dataRequestLogObj.RequestId; dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, dataRequestLogObj.RequestId.GetValueOrDefault(), externalReferenceId, jobId, jsonBillParams); } } webDBEntitiestransaction.Commit(); } catch (Exception e) { webDBEntitiestransaction.Rollback(); mortgageDocumentResultObj.status = RequestStatus.Error.ToString(); DAL.DataRequestLog.InsertForFailure(propertyBBL, RequestTypeId, externalReferenceId, jobId, jsonBillParams); Common.Logs.log().Error(string.Format("Exception encountered processing {0} with externalRefId {1}{2}", propertyBBL, externalReferenceId, Common.Logs.FormatException(e))); } } } return(mortgageDocumentResultObj); }
/// <summary> /// Gets all DataRequestLog objects(rows) from the DataRequestLog table for a given externalReferenceId /// </summary> /// <param name="webDBEntities"></param> /// <param name="externalRefereceId"></param> /// <returns></returns> public static List <WebDataDB.DataRequestLog> GetAll(WebDataEntities webDBEntities, string externalRefereceId) { return(webDBEntities.DataRequestLogs.Where(i => i.ExternalReferenceId == externalRefereceId).ToList()); }
/// <summary> /// This method deals with all the details associated with either returning the Mortgage Servicer details or creating the /// request for getting it scrapped from the web /// </summary> public static FreddieMortgageDetails Get(Parameters inParameters, string externalReferenceId, int priority, string jobId) { FreddieMortgageDetails mDetails = new FreddieMortgageDetails(); mDetails.BBL = inParameters.BBL; mDetails.externalReferenceId = externalReferenceId; mDetails.status = RequestStatus.Pending.ToString(); string parameters = ParametersToJSON(inParameters); using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { //check if data available WebDataDB.FreddieMortgage mortgageObj = webDBEntities.FreddieMortgages.FirstOrDefault(i => i.BBL == inParameters.BBL); // record in database and data is not stale if (mortgageObj != null && DateTime.UtcNow.Subtract(mortgageObj.LastUpdated).Days <= 30) { mDetails.isFreddieMortgage = mortgageObj.IsFreddie; mDetails.status = RequestStatus.Success.ToString(); DAL.DataRequestLog.InsertForCacheAccess(webDBEntities, inParameters.BBL, RequestTypeId, externalReferenceId, jobId, parameters); } else { //check if pending request in queue DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetPendingRequest(webDBEntities, inParameters.BBL, RequestTypeId, parameters); if (dataRequestLogObj == null) //No Pending Request Create New Request { string requestStr = ""; //RequestData.XXXX(inParameters); Request requestObj = DAL.Request.Insert(webDBEntities, requestStr, RequestTypeId, priority, jobId); dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, inParameters.BBL, RequestTypeId, requestObj.RequestId, externalReferenceId, jobId, parameters); mDetails.status = RequestStatus.Pending.ToString(); mDetails.requestId = requestObj.RequestId; } else //Pending request in queue { mDetails.status = RequestStatus.Pending.ToString(); //Send the RequestId for the pending request back mDetails.requestId = dataRequestLogObj.RequestId; dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, inParameters.BBL, RequestTypeId, dataRequestLogObj.RequestId.GetValueOrDefault(), externalReferenceId, jobId, parameters); } } webDBEntitiestransaction.Commit(); } catch (Exception e) { webDBEntitiestransaction.Rollback(); mDetails.status = RequestStatus.Error.ToString(); DAL.DataRequestLog.InsertForFailure(inParameters.BBL, RequestTypeId, externalReferenceId, jobId, parameters); Common.Logs.log().Error(string.Format("Exception encountered processing {0} with externalRefId {1}{2}", inParameters.BBL, externalReferenceId, Common.Logs.FormatException(e))); } } } return(mDetails); }
/// <summary> /// Gets a DataRequestLog object(row) from the DataRequestLog table for a given RequestId /// </summary> /// <param name="webDBEntities"></param> /// <param name="requestId"></param> /// <returns></returns> public static WebDataDB.DataRequestLog GetFirst(WebDataEntities webDBEntities, long requestId) { return(webDBEntities.DataRequestLogs.FirstOrDefault(i => i.RequestId == requestId)); }
/// <summary> /// This method updates the Mortgage Servicer table based on the information received from the Request Object /// </summary> /// <param name="appContext"></param> /// <param name="requestObj"></param> /// <returns>True if successful else false</returns> public static bool UpdateData(Common.Context appContext, Request requestObj) { using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { List <DataRequestLog> logs = null; bool?isFreddie = null; switch (requestObj.RequestStatusTypeId) { case (int)RequestStatus.Error: logs = DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); break; case (int)RequestStatus.Success: { DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetFirst(webDBEntities, requestObj.RequestId); if (dataRequestLogObj == null) { throw (new Exception("Cannot locate Request Log Record(s)")); } //var resultObj = // need to modify isFreddie = false; // resultObj.ServicerName; if (isFreddie == null) { logs = DAL.DataRequestLog.SetAsError(webDBEntities, requestObj.RequestId); } else { Parameters parameters = JSONToParameters(dataRequestLogObj.RequestParameters); //check if old data in the DB WebDataDB.FreddieMortgage mortgageObj = webDBEntities.FreddieMortgages.FirstOrDefault(i => i.BBL == parameters.BBL); if (mortgageObj != null) { //Update data with new results mortgageObj.IsFreddie = isFreddie.GetValueOrDefault(); mortgageObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.Entry(mortgageObj).State = EntityState.Modified; } else { // add an entry into cache or DB mortgageObj = new WebDataDB.FreddieMortgage(); mortgageObj.BBL = parameters.BBL; mortgageObj.IsFreddie = isFreddie.GetValueOrDefault(); mortgageObj.LastUpdated = requestObj.DateTimeEnded.GetValueOrDefault(); webDBEntities.FreddieMortgages.Add(mortgageObj); } webDBEntities.SaveChanges(); logs = DAL.DataRequestLog.SetAsSuccess(webDBEntities, requestObj.RequestId); } break; } default: Common.Logs.log().Warn(string.Format("Update called for a Request Object Id {0} with incorrect Status Id {1}", requestObj.RequestId, requestObj.RequestStatusTypeId)); break; } webDBEntitiestransaction.Commit(); if (logs != null) { MakeCallBacks(appContext, logs, isFreddie); } return(true); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Common.Logs.log().Error(string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage)); } } return(false); } catch (Exception e) { webDBEntitiestransaction.Rollback(); Common.Logs.log().Error(string.Format("Exception encountered updating request with id {0}{1}", requestObj.RequestId, Common.Logs.FormatException(e))); return(false); } } } }
/// <summary> /// This method deals with all the details associated with either returning the DOB Penalties and Violations details or creating the /// request for getting it scrapped from the web /// </summary> public static DOBPenaltiesAndViolationsSummaryData Get(string propertyBBL, string externalReferenceId, int priority, string jobId) { DOBPenaltiesAndViolationsSummaryData dPenaltiesAndViolations = new DOBPenaltiesAndViolationsSummaryData(); dPenaltiesAndViolations.BBL = propertyBBL; dPenaltiesAndViolations.externalReferenceId = externalReferenceId; dPenaltiesAndViolations.status = RequestStatus.Pending.ToString(); dPenaltiesAndViolations.civilPenaltyAmount = null; dPenaltiesAndViolations.violationAmount = null; string parameters = ParametersToJSON(propertyBBL); using (WebDataEntities webDBEntities = new WebDataEntities()) { using (var webDBEntitiestransaction = webDBEntities.Database.BeginTransaction()) { try { //check if data available WebDataDB.DOBViolation dobViolationObj = webDBEntities.DOBViolations.FirstOrDefault(i => i.BBL == propertyBBL); // record in database and data is not stale if (dobViolationObj != null && DateTime.UtcNow.Subtract(dobViolationObj.LastUpdated).Days <= 15) { dPenaltiesAndViolations.civilPenaltyAmount = dobViolationObj.DOBCivilPenalties; dPenaltiesAndViolations.violationAmount = dobViolationObj.ECBViolationAmount; dPenaltiesAndViolations.status = RequestStatus.Success.ToString(); DAL.DataRequestLog.InsertForCacheAccess(webDBEntities, propertyBBL, RequestTypeId, externalReferenceId, jobId, parameters); } else { //check if pending request in queue DataRequestLog dataRequestLogObj = DAL.DataRequestLog.GetPendingRequest(webDBEntities, propertyBBL, RequestTypeId, parameters); if (dataRequestLogObj == null) //No Pending Request Create New Request { string requestStr = RequestResponseBuilder.RequestObjects.RequestData.ECBviolationAndDOBCivilPenalties(propertyBBL); Request requestObj = DAL.Request.Insert(webDBEntities, requestStr, RequestTypeId, priority, jobId); dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, requestObj.RequestId, externalReferenceId, jobId, parameters); dPenaltiesAndViolations.status = RequestStatus.Pending.ToString(); dPenaltiesAndViolations.requestId = requestObj.RequestId; } else //Pending request in queue { dPenaltiesAndViolations.status = RequestStatus.Pending.ToString(); //Send the RequestId for the pending request back dPenaltiesAndViolations.requestId = dataRequestLogObj.RequestId; dataRequestLogObj = DAL.DataRequestLog.InsertForWebDataRequest(webDBEntities, propertyBBL, RequestTypeId, dataRequestLogObj.RequestId.GetValueOrDefault(), externalReferenceId, jobId, parameters); } } webDBEntitiestransaction.Commit(); } catch (Exception e) { webDBEntitiestransaction.Rollback(); dPenaltiesAndViolations.status = RequestStatus.Error.ToString(); DAL.DataRequestLog.InsertForFailure(propertyBBL, RequestTypeId, externalReferenceId, jobId, parameters); Common.Logs.log().Error(string.Format("Exception encountered processing {0} with externalRefId {1}{2}", propertyBBL, externalReferenceId, Common.Logs.FormatException(e))); } } } return(dPenaltiesAndViolations); }