internal static BuildingPermitSystem Map(BldgpermitApplicationMaster appm, string officeProjectDesc, string contractorBusinessName) =>
 new BuildingPermitSystem(appm.Id, appm.PermitIssuedDate, appm.ApplicationDate, appm.AssessorParcelNumber, appm.ApplicantBusinessName, appm.ApplicationNumber, appm.AddendumNumber, appm.PermitCode,
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "A" ? "Applica" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "D" ? "VoidApp" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "E" ? "ExpApp" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "W" ? "Working" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "V" ? "VoidPer" : appm.PermitStatus.ToUpper() == "U" ? "ExpPer" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "F" ? "Final" :
                          !string.IsNullOrWhiteSpace(appm.PermitStatus) && appm.PermitStatus.ToUpper() == "C" ? "Closed" : "",
                          appm.ApplicationYear, appm.PermitNumber, appm.PermitYear, appm.ApplicantLastName + ", " + appm.ApplicantFirstName,
                          !string.IsNullOrWhiteSpace(appm.BuildingApprovalRequired) &&
                          appm.BuildingApprovalRequired.ToUpper() == "Y" ? "R" : "", appm.BuildingApprovalDate != null ? "A" : "",
                          !string.IsNullOrWhiteSpace(appm.FireMarshalApprovalRequired) &&
                          appm.FireMarshalApprovalRequired.ToUpper() == "Y" ? "R" : "", appm.FireMarshalApprovalDate != null ? "A" : "",
                          string.IsNullOrWhiteSpace(appm.PlanningApprovalRequired) && appm.PlanningApprovalRequired.ToUpper() == "Y" ? "R" : "",
                          appm.PlanningApprovalDate != null ? "A" : "", !string.IsNullOrWhiteSpace(appm.HealthApprovalRequired) &&
                          appm.HealthApprovalRequired.ToUpper() == "Y" ? "R" : "", appm.HealthApprovalRequiredDate != null ? "A" : "",
                          !string.IsNullOrWhiteSpace(appm.AssessorApprovalRequired) && appm.AssessorApprovalRequired.ToUpper() == "Y" ? "R" : "",
                          appm.AssessorApprovalDate != null ? "A" : "", !string.IsNullOrWhiteSpace(appm.PublicWroksApprovalRequired) &&
                          appm.PublicWroksApprovalRequired.ToUpper() == "Y" ? "R" : "", appm.PublicWroksApprovalDate != null ? "A" : "",
                          !string.IsNullOrWhiteSpace(appm.CityJurisdictionApprovalRequired) &&
                          appm.CityJurisdictionApprovalRequired.ToUpper() == "Y" ? "R" : "",
                          appm.CityJurisdictionApprovalDate != null ? "A" : "",
                          !string.IsNullOrWhiteSpace(appm.CityUtilityApprovalRequired) && appm.CityUtilityApprovalRequired.ToUpper() == "Y" ? "R" : "",
                          appm.CityUtilityApprovalDate != null ? "A" : "", officeProjectDesc, appm.ApplicantProjectDescription, contractorBusinessName,
                          appm.ResultOfEnforcementAction);
 internal static MechanicalPermitDetail Map(BldgpermitApplicationMaster bldg, BldgapplicationConditions apcnConditionRecord,
                                            BldgapplicationInspections apinConditionRecord, BldgmechanicalPermitDetail mecd,
                                            BldgfireDistrictCodes fdst) =>
 new MechanicalPermitDetail(mecd.OfficeProjectDescription, mecd.Nrecreceived, mecd.FireDistrictCode, fdst?.LongFireDistrictName,
                            mecd.BldgDeptSetback, mecd.FireMarshalSetback, apcnConditionRecord == null, apinConditionRecord == null,
                            new PermitApprovedInfo(mecd.BldgDeptApprovedBy, mecd.BldgDeptDateApproved, mecd.BldgDeptApprovedUserId, mecd.BldgDeptApprovedChangeDate),
                            new PermitApprovedInfo(mecd.FireMarshalApprovedBy, mecd.FireMarshalDateApproved, mecd.FireMarshalApprovedUserId, mecd.FireMarshalApprovedChangeDate));
 private static BuildingPermitSystemApplicantDetails MapToApplicantDetails(BldgpermitApplicationMaster bldgpermit,
                                                                           BldgmobileHomeDealersInstallersArchitects mdia,
                                                                           BldgmobileHomeDealersInstallersArchitects mdiaBusinessEngineer,
                                                                           Bldgcontractors bldgContractor) =>
 new BuildingPermitSystemApplicantDetails(bldgpermit.ContractLicenseNumber, bldgpermit.ProjectInformation,
                                          bldgpermit.ApplicantProjectDescription, bldgpermit.ResultOfEnforcementAction, bldgpermit.EnforcementDescription, bldgpermit.PlotPlanReceived,
                                          bldgpermit.OnlyStructureOnParcel, bldgpermit.OnlyResidenceOnParcel, bldgContractor?.ContractorBusinessName,
                                          bldgpermit.ArchitectFirmNumber, mdia?.BusinessName, bldgpermit.EngineerFirmNumber, mdiaBusinessEngineer?.BusinessName);
 internal static PlumbingPermit Map(BldgpermitApplicationMaster bldgpermit,
                                    BldgplumbingPermitDetail permit,
                                    BldgfireDistrictCodes bldgfire,
                                    BldgapplicationConditions bldgCondition,
                                    BldgapplicationInspections bldgInspection) =>
 new PlumbingPermit(permit.OfficeProjectDescription, permit.FireDistrictCode, permit.BldgDeptSetback.Value, permit.FireMarshalSetback.Value,
                    bldgfire.LongFireDistrictName, (bldgCondition != null), (bldgInspection != null),
                    new PermitApprovedInfo(permit.BldgDeptApprovedBy, permit.BldgDeptDateApproved, permit.BldgDeptApprovedUserId, permit.BldgDeptApprovedChangeDate),
                    new PermitApprovedInfo(permit.FireMarshalApprovedBy, permit.FireMarshalDateApproved, permit.FireMarshalApprovedUserId, permit.FireMarshalApprovedChangeDate));
 internal static DemolitionPermit Map(BldgpermitApplicationMaster bldgpermit,
                                      BldgdemolitionPermitDetail permit,
                                      BldgfireDistrictCodes bldgfire,
                                      BldgapplicationConditions bldgCondition,
                                      BldgapplicationInspections bldgInspection) =>
 new DemolitionPermit(bldgpermit.ApplicantProjectDescription, permit.OfficeProjectDescription, permit.SquareFeet.Value, permit.Dimensions,
                      permit.BuildingDescription, permit.RequiredHandoutsProvided, permit.DateProvided, permit.ToWhomProvided, permit.FireDistrictCode, permit.BldgDeptSetback.Value,
                      permit.FireMarshalSetback.Value, bldgfire.LongFireDistrictName, (bldgCondition != null), (bldgInspection != null),
                      new PermitApprovedInfo(permit.BldgDeptApprovalBy, permit.BldgDeptDateApproved, permit.BldgDeptApprovedUserId, permit.BldgDeptApprovedChangeDate),
                      new PermitApprovedInfo(permit.FireMarshalApprovalBy, permit.FireMarshalDateApproved, permit.FireMarshalApprovedUserId, permit.FireMarshalApprovedChangeDate));
 internal static GradingExcavationPermitDetail Map(BldgpermitApplicationMaster bldg,
                                                   BldgfireDistrictCodes fdst,
                                                   BldgapplicationConditions apcnConditionRecord,
                                                   BldgapplicationInspections apinConditionRecord,
                                                   BldggradingExcavatingPermitDetail grdd) =>
 new GradingExcavationPermitDetail(bldg.ApplicantProjectDescription, grdd.OfficeProjectDescription, grdd.CubicYardsOfFill,
                                   grdd.PercentOfSlope, grdd.SoilErosionControlRequired, grdd.DustAndTrackControlReceived,
                                   grdd.DustAndTrackReceivedDate, grdd.EngineeringReceived, grdd.EngineeringReceivedDate,
                                   grdd.FireDistrictCode, fdst.LongFireDistrictName, grdd.FireFlowAlreadyProvided,
                                   grdd.AdditionalFireFlowRequired, grdd.AmountOfFireFlowRequired, grdd.BldgDeptSetback,
                                   grdd.FireMarshalSetback, apcnConditionRecord == null, apinConditionRecord == null,
                                   new PermitApprovedInfo(grdd.BldgDeptApprovedBy, grdd.BldgDeptDateApproved,
                                                          grdd.BldgDeptApprovedUserId, grdd.BldgDeptApprovedChangeDate),
                                   new PermitApprovedInfo(grdd.FireMarshalApprovedBy, grdd.FireMarshalDateApproved, grdd.FireMarshalApprovedUserId,
                                                          grdd.FireMarshalApprovedChangeDate));
 internal static StructurePermitDetail Map(
     BldgpermitApplicationMaster bldg,
     BldgapplicationConditions apcnConditionRecord,
     BldgapplicationInspections apinConditionRecord,
     BldgstructureBuildingPermitDetail strd,
     BldgfireDistrictCodes fdst,
     IEnumerable <BldgapplicationValues> appv)
 => new StructurePermitDetail(strd?.OfficeProjectDescription, strd?.ResAgCommOther, strd?.NumberOfBedrooms, strd?.NumberOfBathrooms, strd?.NumberOfUnits,
                              strd?.Heated, strd?.HeatSourceDescription, strd?.PrescriptiveReviewDone, strd?.WattsunRunReviewDone, strd?.Nrecreceived, strd?.PlansAnalystReviewDone,
                              strd?.PlansAnalystReviewDescription, strd?.SprinklerSystemRequired, strd?.SprinklerSystemDescription, strd?.AlarmSystemRequired, strd?.AlarmSystemDescription,
                              strd?.SpecialInspectionRequired, strd?.SpecialInspectionDescription, strd?.PermitIncludePlumbing, strd?.PermitIncludeMechanical, strd?.FireDistrictCode,
                              fdst?.LongFireDistrictName, strd?.FireFlowAlreadyProvided, strd?.AdditionalFireFlowRequired, strd?.AmountOfFireFlowRequired, strd?.BldgDeptSetback,
                              strd?.FireMarshalSetback, apcnConditionRecord == null, apinConditionRecord == null, appv?.Sum(t => t.ExtendedValue),
                              new PermitApprovedInfo(strd?.BldgDeptApprovedBy, strd?.BldgDepDateApproved, strd?.BldgDeptApprovedUserId, strd?.BldgDeptApprovedChangeDate),
                              new PermitApprovedInfo(strd?.FireMarshalApprovedBy, strd?.FireMarshalDateApproved, strd?.FireMarshalApprovedUserId, strd?.FireMarshalApprovedChangeDate));
 private static BuildingPermitSystemApprovalStatusInfo MapToApprovalStatus(BldgpermitApplicationMaster bldgpermit) =>
 new BuildingPermitSystemApprovalStatusInfo(
     new ApprovalStatusInfo(bldgpermit.PlanningApprovalRequired, bldgpermit.PlanningApprovalDate, bldgpermit.PlanningApprovalUser),
     new ApprovalStatusInfo(bldgpermit.HealthApprovalRequired, bldgpermit.HealthApprovalRequiredDate, bldgpermit.HealthApprovalRequiredUser),
     new ApprovalStatusInfo(bldgpermit.AssessorApprovalRequired, bldgpermit.AssessorApprovalDate, bldgpermit.AssessorApprovalUser),
     new ApprovalStatusInfo(bldgpermit.PublicWroksApprovalRequired, bldgpermit.PublicWroksApprovalDate, bldgpermit.PublicWroksApprovalUser),
     new ApprovalStatusInfo(bldgpermit.CityJurisdictionApprovalRequired, bldgpermit.CityJurisdictionApprovalDate, bldgpermit.CityJurisdictionApprovalUser),
     new ApprovalStatusInfo(bldgpermit.ArchitectApprovalRequired, bldgpermit.ArchitectApprovalDate, bldgpermit.ArchitectApprovalUser),
     new ApprovalStatusInfo(bldgpermit.FireApprovalRequired, bldgpermit.FireApprovalRequiredDate, bldgpermit.FireApprovalRequiredUser),
     new ApprovalStatusInfo(bldgpermit.LIapprovalRequired, bldgpermit.LIapprovalRequiredDate, bldgpermit.LIapprovalRequiredUser),
     new ApprovalStatusInfo(bldgpermit.CityUtilityApprovalRequired, bldgpermit.CityUtilityApprovalDate, bldgpermit.CityUtilityApprovalUser),
     new ApprovalStatusInfo(bldgpermit.OwnerApprovalRequired, bldgpermit.OwnerApprovalRequiredDate, bldgpermit.OwnerApprovalRequiredUser),
     new ApprovalStatusInfo(bldgpermit.OtherSpecialApprovalRequired, bldgpermit.OtherSpecialApprovalRequiredDate, bldgpermit.OtherSpecialApprovalRequiredUser),
     new ApprovalStatusInfo(bldgpermit.ApplicationAccepted, bldgpermit.ApplicationAcceptedDate, bldgpermit.ApplicationAcceptedUserId),
     bldgpermit.OtherSpecialApprovalDescription);
 internal static ManufactureModularPermit Map(BldgpermitApplicationMaster bldgpermit,
                                              BldgmanufactureModularBuildingPermit permit,
                                              BldgfireDistrictCodes bldgfire,
                                              BldgapplicationConditions bldgCondition,
                                              BldgapplicationInspections bldgInspection,
                                              BldgapplicationValues bldgValue,
                                              BldgmobileHomeDealersInstallersArchitects bldgDealer,
                                              BldgmobileHomeDealersInstallersArchitects bldgInstaller) =>
 new ManufactureModularPermit(permit.OfficeProjectDescription, permit.ManorMod, permit.YearManufactured.Value, permit.NewOrUsed, permit.SquareFeet.Value, permit.Dimensions, permit.BuildingDescription,
                              permit.ResCommStor.Trim(), permit.CommercialUseDesc1, permit.CommercialUseDesc2, permit.DealerNameCode, permit.ManufacturerName, permit.LotorMan, permit.ApproxPurchaseDate,
                              permit.ApproxDeliveryDate, permit.InstallationIncludedInPrice, permit.MovingFromGrantCounty, permit.CountyStateIfNotGrant, permit.TitleOwnerName, permit.TaxpayerName,
                              permit.MovingFromParcelNumber.Value, permit.MovingFromAddress, permit.CertInstallerCode, permit.FireDistrictCode, permit.FireFlowAlreadyProvided, permit.AdditionalFireFlowRequired,
                              permit.AmountOfFireFlowRequired, permit.BldgDeptSetback.Value, permit.FireMarshalSetback.Value, bldgValue?.ExtendedValue, bldgfire.LongFireDistrictName,
                              (bldgCondition != null), (bldgInspection != null),
                              new PermitApprovedInfo(permit.BldgDeptApprovedBy, permit.BldgDeptDateApproved, permit.BldgDeptApprovedUserId, permit.BldgDeptApprovedChangeDate),
                              new PermitApprovedInfo(permit.FireMarshalApprovedBy, permit.FireMarshalDateApproved, permit.FireMarshalApprovedUserId, permit.FireMarshalApprovedChangeDate),
                              new DealersInstallersArchitectInfo(bldgDealer?.BusinessName, bldgDealer?.LicenseNumber, bldgDealer?.LicenseExpireDate, bldgDealer?.PhoneNumber.Value),
                              new DealersInstallersArchitectInfo(bldgInstaller?.BusinessName, bldgInstaller?.LicenseNumber, bldgInstaller?.LicenseExpireDate, bldgInstaller?.PhoneNumber.Value));
 internal static BuildingPermitSystemDetails Map(BldgpermitApplicationMaster bldgpermit,
                                                 ASMTValueMasterNameView preliminaryValueMaster,
                                                 ASMTValueMasterNameView assessorValueMaster,
                                                 Bldgjurisdictions juri,
                                                 Bldgjurisdictions processedJuri,
                                                 Bldgdepartments dept,
                                                 BldgpermitCodes perm,
                                                 AsmtsitusAddress situs,
                                                 AsmtcityCodeFile cityCode,
                                                 BldgmobileHomeDealersInstallersArchitects mdia,
                                                 BldgmobileHomeDealersInstallersArchitects mdiaBusinessEngineer,
                                                 Bldgcontractors bldgContractor,
                                                 AsmtrealPropertyAssessedValueMaster rpmas,
                                                 AsmtmasterNameAddress nName, BldgstateClassifications bldgstateClassification) =>
 new BuildingPermitSystemDetails(bldgpermit.ApplicantLastName, bldgpermit.ApplicantFirstName, bldgpermit.PermitCode.Trim(), bldgpermit.ProcessedForJurisdiction,
                                 bldgpermit.ApplicationDate.Value, bldgpermit.ApplicationUserId, bldgpermit.ApplicantBusinessName, bldgpermit.AddressLine1, bldgpermit.AddressLine2,
                                 bldgpermit.City, bldgpermit.State, bldgpermit.ZipCode, bldgpermit.PhoneNumber.Value, bldgpermit.PreliminaryParcelNumber.Value,
                                 bldgpermit.AssessorParcelNumber.Value, bldgpermit.AdditionalInformation, bldgpermit.ParkInformation, perm.PermitDescription, processedJuri.ShortDepartmentName,
                                 MapToBasicInfo(bldgpermit, juri, dept, bldgstateClassification), MapToApplicantDetails(bldgpermit, mdia, mdiaBusinessEngineer, bldgContractor), Map(preliminaryValueMaster),
                                 Map(assessorValueMaster), Map(situs, cityCode),
                                 MapToApprovalStatus(bldgpermit));
 public static PlanningApproval MapToPlanningApproval(BldgplanningApproval plap, BldgpermitApplicationMaster appm) =>
 new PlanningApproval(appm?.ApplicantProjectDescription, plap?.ZoneCode, plap?.FrontPropertySetback, plap?.SideFlankingSetback,
                      plap?.SidePropertySetback, plap?.BackPropertySetback, plap?.FloodZone, plap?.FloodZoneMapNumber,
                      plap?.LUpermitRequired, plap?.Comments, plap?.ApprovedBy, plap?.UserId, plap?.ChangeDate);
 public static BuildingPermitSystemBasicInfo MapToBasicInfo(BldgpermitApplicationMaster bldgpermit,
                                                            Bldgjurisdictions juri,
                                                            Bldgdepartments dept, BldgstateClassifications bldgstateClassification) =>
 new BuildingPermitSystemBasicInfo(bldgpermit.JurisdictionCode, bldgpermit.DepartmentCode, bldgpermit.ApplicationYear.Value, bldgpermit.ApplicationNumber.Value,
                                   bldgpermit.AddendumNumber.Value, bldgpermit.PermitStatus, juri.ShortDepartmentName, dept.ShortDepartmentName, bldgpermit.PermitYear, bldgpermit.PermitNumber, bldgpermit.StateClassCode,
                                   bldgstateClassification.ClassificationDescription, bldgpermit.PermitIssuedDate);
 internal static CityApproval MapToCityApproval(
     BldgpermitApplicationMaster appm, BldgcityApproval cityJoinRecord, Bldgjurisdictions jurisdictionRecord)
 => new CityApproval(appm?.ApplicantProjectDescription, cityJoinRecord?.JurisdictionCode, jurisdictionRecord?.ShortDepartmentName,
                     cityJoinRecord?.ZoningApproval, cityJoinRecord?.UtilitiesApproval, cityJoinRecord?.Comments, cityJoinRecord?.ApprovedBy, cityJoinRecord?.UserId,
                     cityJoinRecord?.ChangeDate, cityJoinRecord?.CityCode);
 internal static HealthApproval MapToHealthApproval(BldgpermitApplicationMaster appm,
                                                    BldghealthApproval healthRecord) =>
 new HealthApproval(appm?.ApplicantProjectDescription, healthRecord?.Comments, healthRecord?.ApprovedBy,
                    healthRecord?.UserId, healthRecord?.ChangeDate);
 internal static PublicWorkApproval MapToPublicWorkApproval(BldgpermitApplicationMaster appm,
                                                            BldgpublicWorksApproval publicWorkRecord) =>
 new PublicWorkApproval(appm?.ApplicantProjectDescription, publicWorkRecord?.Comments, publicWorkRecord?.ApprovedBy,
                        publicWorkRecord?.UserId, publicWorkRecord?.ChangeDate);
 public static AssessorApproval MaptToAssessorApproval(AsmtrealPropertyAssessedValueMaster rpmas, BldgassessorApproval assessorApproval,
                                                       AsmtmasterNameAddress nName, BldgpermitApplicationMaster appm) =>
 new AssessorApproval(appm?.ApplicantProjectDescription, assessorApproval?.Comments, assessorApproval?.ApprovedByAssr,
                      assessorApproval?.UserIdassr, assessorApproval?.ChangeDate, appm?.AssessorParcelNumber, nName?.Name,
                      rpmas?.Description1, rpmas?.Description2);