public void SetUserProperties(UserAccess ua) { // set all user properties here created_by_employee_id = ua.employee_id; created_by_username = ua.user_name; created_by_display_name = ua.display_name; my_department_id = ua.my_department_id; my_access = ua.current_access; }
public static List <Permit> Get( string AssocKey, UserAccess.access_type CurrentAccess, string callingFunction, InspType newInspectionType = null, bool DoImpactFeesMatter = false ) { /** * Need to add the following functionality to this * query: * * 1. check if the permit has been issued (DateTime PermitIssueDate) * 2. check if holds exist * a. does hold allow a pre-inspection to be scheduled? bool HoldAllowPre * - Need a way to determine if get() is being called from NewInspection so * hold will count against a new inspection being scheduled.\ * - If not called from NewInsection, AllowPreInspection holds will not generate an error * to prevent a scheduling attempt. * - If hold allows pre-Inspections, only pre-Inspections can be scheduled for that hold only. * - If other holds exist, then those controls still apply. * * b. does hold stop final? (bool HoldStopFinal) -- This may be unecessary * c. does hold stop all? (bool HoldStopAll) * * 3. check if there are charges (bool ChargesExist) * a. does charge prevent final? bool ChargeStopFinal) * b. does charge prevent all? (bool ChargeStopAll) * 4. Is Master Permit Co'd? (bool MasterCoClosed) * **/ try { var permits = GetRaw(AssocKey, DoImpactFeesMatter); if (permits.Any(p => p.PermitNo == AssocKey)) { permits = BulkValidate(permits, newInspectionType); var PrivProvCheck = (from prmt in permits where prmt.CoClosed != -1 select prmt.PrivateProvider).DefaultIfEmpty("").First(); /// NEED TO BE ABLE TO DETECT THAT A PROXY IS IN USE BEFORE CHECKING FOR PROD HOST. NEED TO BE ABLE TO CREATE LINK TO string host = Constants.UseProduction() ? "claybccims" : "claybccimstrn"; foreach (Permit l in permits) { l.Permit_URL = l.PermitTypeString == "BL" ? $@"http://{host}/WATSWeb/Permit/MainBL.aspx?PermitNo={l.PermitNo}&Nav=PL&OperId=&PopUp=" : $@"http://{host}/WATSWeb/Permit/APermit{l.PermitTypeString}.aspx?PermitNo={l.PermitNo}"; l.access = CurrentAccess; if (l.access == UserAccess.access_type.public_access) { // l.Permit_URL = ""; if (l.Confidential == 1) { l.ProjAddrCombined = "Confidential"; l.ProjCity = "Confidential"; } } if (l.ErrorText.Length == 0) { l.Validate(); } if (l.ErrorText.Length == 0 && l.IsVoided) { l.ErrorText = "This permit or the master permit have been voided. Please contact the building department for assistance."; } } } else { return(new List <Permit>()); } return(permits); } catch (Exception ex) { Constants.Log( ex.StackTrace.Contains("line 151") ? (@"GetRaw(" + AssocKey + "); returned with " + ex.Message): ("Error on Permit: " + AssocKey + ",returned with" + ex.Message), ex.StackTrace.Contains("line 151") ? @"Error in GetRaw":"", ex.StackTrace, @"Error Function: Permit.Get(...", "Query from Permit.GetRaw, line 99"); return(null); } }
public List <string> Validate(UserAccess.access_type CurrentAccess, List <InspType> inspTypes) { // List of things that need to be validated: // 0) Make sure the permit is able to be scheduled to be inspected. // 1) Make sure this permit is valid // 2) Make sure the date is in the range expected // 3) Make sure the inspection type matches the permit type. // 4) Make sure the inspection type is a valid inspection type. // 5) Make sure the inspection type isn't already scheduled for this permit. // 6) Need to ensure an Inspection cannot be saved if a final inspection result is 'A' or 'P' List <string> Errors = new List <string>(); // 0) List <InspType> finals = (from it in inspTypes where it.Final == true select it).ToList(); List <string> finalInspectionCodes = (from it in inspTypes where it.Final == true select it.InspCd).ToList(); var currentInspectionType = (from i in inspTypes where i.InspCd == InspectionCd select i).ToList().First(); // DoImpactFeesMatter is how we indicate to the permit that the impact fees matter. this.DoImpactFeesMatter = finals.Any(f => f.InspCd == InspectionCd); if (currentInspectionType.InspCd == "205") { this.DoImpactFeesMatter = true; } //foreach (var f in finals) //{ // if (f.InspCd == this.InspectionCd) // this.TryingToScheduleFinal = true; //} //Console.Write("Finals: ", finals); //= (List<InspType>)MyCache.GetItem("inspectiontypes,"+IsExternalUser.ToString()); var Permits = (from p in Permit.Get( this.PermitNo, CurrentAccess, $@"NewInspection.Validate(); User Access Level: {CurrentAccess}; PermitNo: {this.PermitNo}", currentInspectionType, DoImpactFeesMatter) select p).ToList(); Permit CurrentPermit = (from p in Permits where p.PermitNo == this.PermitNo select p).FirstOrDefault(); if (CurrentPermit == null) { Errors.Add($"Permit number {PermitNo} was not found."); // If permit is not found, then exit // no need to validate other data return(Errors); } else { if (CurrentPermit.ErrorText.Length > 0) { Errors.Add(CurrentPermit.ErrorText); } bool canSchedule = false; var mp = (from p in Permits where p.CoClosed == 0 select p).DefaultIfEmpty(new Permit()).First(); canSchedule = this.DoImpactFeesMatter && mp.CorrectImpactFeeCount && mp.TotalImpactFeesDue == 0; if (!canSchedule && this.DoImpactFeesMatter) { List <string> newList = new List <string>(); newList.Add($@"A {currentInspectionType.InsDesc} cannot be scheduled if there are unpaid impact fees. Please contact the building department for assistance."); Errors = newList; // TODO: add call to function here that will assess the Solid Waste Fee } // validate user selected date var start = DateTime.Parse(CurrentPermit.Dates.minDate_string); var end = DateTime.Parse(CurrentPermit.Dates.maxDate_string); var badDates = (from d in CurrentPermit.Dates.badDates_string where DateTime.Parse(d) != start && DateTime.Parse(d) != end select d).ToList <string>(); // Is the scheduled date between the start and end date? if (SchecDateTime.Date < start || SchecDateTime.Date > end) { Errors.Add("Invalid Date Selected"); } // Is the scheduled date one of the dates they aren't allowed to use? if (badDates.Contains(SchecDateTime.ToShortDateString())) { Errors.Add("Invalid Date Selected"); } // Is the inspection type valid? if (!(from i in inspTypes where i.InspCd == InspectionCd select i).Any()) { Errors.Add("Invalid Inspection Type"); } else { // Does the inspection type match the permit type var permitType = ' '; switch (PermitNo[0]) { case '1': case '9': case '0': permitType = '1'; break; default: permitType = PermitNo[0]; break; } if (InspectionCd[0] != permitType) { Errors.Add("Invalid Inspection for this permit type"); } List <Inspection> inspections = Inspection.Get(CurrentPermit.PermitNo); CurrentPermit.Holds = Hold.Get(new List <string>() { CurrentPermit.PermitNo }); var needsFireInspection = (from h in CurrentPermit.Holds where h.HldCd == "FD05" select h.HldCd.ToString()).ToList(); if (CurrentPermit.TotalFinalInspections > 0 && needsFireInspection.Count() == 0 && CurrentPermit.PermitNo[0] != '6') { Errors.Add($"Permit #{CurrentPermit.PermitNo} has passed final inspection"); } var PassedOrScheduledInspections = (from ic in inspections where (ic.ResultADC != "C" && ic.ResultADC != "D" && ic.ResultADC != "N") select ic).ToList(); foreach (var i in PassedOrScheduledInspections) { if (this.PermitNo == i.PermitNo && this.InspectionCd == i.InspectionCode && string.IsNullOrEmpty(i.ResultADC)) { Errors.Add("Inspection type exists on permit"); } // commenting out debug code //var IncompleteInspection = (from ic in PassedOrScheduledInspections // where i.InspectionCode == this.InspectionCd && // string.IsNullOrEmpty(i.ResultADC) // select ic).ToList(); //Console.Write(IncompleteInspection); } //Adds functionality to return error when saving an inspection for permit that has already passed a final inspection. // To schedule a building final: // 1. All fees, including Road impact and school impact fees, must be paid; AND // 2. All associated permits must have a final inspection either scheduled, or passed. // 3. The Final Building Inspection cannot be scheduled for any time before the latest incomplete // associated permit's final inspection. var PermitsWithScheduledOrPassedFinals = new List <string>(); var permitsWithNoFinalsScheduledOrPassed = new List <string>(); string masterPermit = ""; foreach (var f in finals) { PermitsWithScheduledOrPassedFinals.AddRange(from ic in PassedOrScheduledInspections where ic.InspectionCode == f.InspCd && (ic.ResultADC != "C" && ic.ResultADC != "D" && ic.ResultADC != "N") && !PermitsWithScheduledOrPassedFinals.Contains(ic.PermitNo) select ic.PermitNo); } foreach (var p in Permits) { if (p.GetIsVoided()) { continue; } if (p.CoClosed != -1) { masterPermit = p.PermitNo; } var currentCheck = (from pf in PermitsWithScheduledOrPassedFinals where pf == p.PermitNo select pf).FirstOrDefault(); if (currentCheck == null) { permitsWithNoFinalsScheduledOrPassed.Add(p.PermitNo); } else { if (p.PermitNo == this.PermitNo) { Errors.Add($@"Permit {p.PermitNo} has a scheduled final inspection."); } } } foreach (var p in Permits) { if (p.CoClosed != -1) { permitsWithNoFinalsScheduledOrPassed.Remove(p.PermitNo); if (Permits.Count > 1 && finalInspectionCodes.Contains(this.InspectionCd) && permitsWithNoFinalsScheduledOrPassed.Count > 0 && this.PermitNo.Trim() == masterPermit.Trim()) { Errors.Add($@"All permits associated with permit #{p.PermitNo} must have final inspections scheduled or passed, before a Building final can be scheduled."); } else if (this.InspectionCd == "123" && this.PermitNo == masterPermit && p.NoFinalInspections == true) { Errors.Add($@"Permit {masterPermit} has existing holds, this is preventing the Building Final from being scheduled."); } } } } } return(Errors); }