public ComplianceApplication Add(int cycle, List <ApplicationVersion> activeVersions, ComplianceApplicationApprovalStatus approvalStatus, ApplicationStatus status, ComplianceApplicationItem model, string savedBy) { var complianceApp = new ComplianceApplication { Id = Guid.NewGuid(), OrganizationId = model.OrganizationId, AccreditationGoal = model.AccreditationGoal, ApplicationStatusId = status.Id, CoordinatorId = model.Coordinator.UserId.GetValueOrDefault(), InspectionScope = model.InspectionScope, ComplianceApplicationApprovalStatusId = approvalStatus.Id, Applications = new List <Application>(), IsActive = true, ReportReviewStatusId = string.IsNullOrEmpty(model.ReportReviewStatus) ? (Int32?)null : Convert.ToInt32(model.ReportReviewStatus), CreatedBy = savedBy, CreatedDate = DateTime.Now }; foreach (var site in model.ComplianceApplicationSites) { if (site.Site == null) { continue; } foreach (var myApp in site.Applications) { var app = complianceApp.Applications.SingleOrDefault( x => x.ApplicationTypeId == myApp.ApplicationTypeId && x.SiteId == site.Site.SiteId); var isComplianceApp = myApp.ComplianceApplicationId.HasValue;//myApp.ApplicationTypeName.Contains("Compliance"); if (app == null) { var notApplicables = myApp.NotApplicables.Select(x => new ApplicationQuestionNotApplicable { Id = Guid.NewGuid(), ApplicationSectionQuestionId = x.QuestionId, CreatedDate = DateTime.Now, CreatedBy = savedBy }).ToList(); var version = activeVersions.SingleOrDefault( x => x.IsActive && x.ApplicationTypeId == myApp.ApplicationTypeId); var application = new Application { ApplicationTypeId = myApp.ApplicationTypeId, OrganizationId = model.OrganizationId, ApplicationStatusId = status.Id, UniqueId = Guid.NewGuid(), CreatedDate = DateTime.Now, CreatedBy = savedBy, CoordinatorId = isComplianceApp == true?model.Coordinator.UserId.GetValueOrDefault() : (Guid?)null, SiteId = site.Site.SiteId, DueDate = !string.IsNullOrEmpty(model.DueDate) ? Convert.ToDateTime(model.DueDate) : (DateTime?)null, ApplicationVersionId = version?.Id, ApplicationQuestionNotApplicables = notApplicables, CycleNumber = cycle == 0 ? 1 : cycle //SiteApplicationVersions = new List<SiteApplicationVersion> //{ // new SiteApplicationVersion // { // Id = Guid.NewGuid(), // SiteId = site.Site.SiteId, // ApplicationVersionId = version.ApplicationVersion.Id, // ApplicationStatusId = status.Id, // CreatedDate = DateTime.Now, // CreatedBy = savedBy // } //} }; if (approvalStatus.Name == Constants.ComplianceApplicationApprovalStatuses.Approved) { application.IsActive = true; } complianceApp.Applications.Add(application); } } } this.Add(complianceApp); return(complianceApp); }
public ComplianceApplication Update(ApplicationStatus cancelledStatus, List <ApplicationVersion> activeVersions, ComplianceApplicationApprovalStatus approvalStatus, ApplicationStatus status, ComplianceApplicationItem model, int cycleNumber, string savedBy) { var complianceApp = this.GetById(model.Id.GetValueOrDefault()); if (complianceApp == null) { throw new Exception("Cannot find Compliance Application"); } complianceApp.AccreditationGoal = model.AccreditationGoal; complianceApp.CoordinatorId = model.Coordinator.UserId.GetValueOrDefault(); complianceApp.InspectionScope = model.InspectionScope; complianceApp.ComplianceApplicationApprovalStatusId = approvalStatus.Id; complianceApp.CoordinatorId = model.Coordinator.UserId.GetValueOrDefault(); complianceApp.ReportReviewStatusId = string.IsNullOrEmpty(model.ReportReviewStatus) ? (Int32?)null : Convert.ToInt32(model.ReportReviewStatus); complianceApp.UpdatedBy = savedBy; complianceApp.UpdatedDate = DateTime.Now; if (complianceApp.ApplicationStatus.Name == Constants.ApplicationStatus.PastDue) { complianceApp.ApplicationStatusId = status.Id; } foreach (var app in complianceApp.Applications) { if (model.ComplianceApplicationSites.Any(x => x.Site.SiteId == app.SiteId.GetValueOrDefault())) { continue; } app.IsActive = false; app.ApplicationStatusId = cancelledStatus.Id; app.UpdatedBy = savedBy; app.UpdatedDate = DateTime.Now; } foreach (var site in model.ComplianceApplicationSites) { var apps = complianceApp.Applications.Where(x => x.SiteId == site.Site.SiteId); foreach (var app in apps) { if (site.Applications.All(x => x.ApplicationTypeId != app.ApplicationTypeId)) { app.IsActive = false; app.ApplicationStatusId = cancelledStatus.Id; app.UpdatedBy = savedBy; app.UpdatedDate = DateTime.Now; } } foreach (var myApp in site.Applications) { var notApplicables = myApp.NotApplicables.Select(x => new ApplicationQuestionNotApplicable { Id = Guid.NewGuid(), ApplicationSectionQuestionId = x.QuestionId, CreatedDate = DateTime.Now, CreatedBy = savedBy }).ToList(); var questionIds = string.Join(",", myApp.NotApplicables.Select(x => x.QuestionId.ToString())); if (complianceApp.Applications == null) { complianceApp.Applications = new List <Application>(); } var isComplianceApp = myApp.ComplianceApplicationId.HasValue;//myApp.ApplicationTypeName.Contains("Compliance"); var app = complianceApp.Applications?.SingleOrDefault( x => x.ApplicationTypeId == myApp.ApplicationTypeId && x.SiteId == site.Site.SiteId && x.ApplicationStatusId != cancelledStatus.Id); if (app == null) { var version = activeVersions.SingleOrDefault( x => x.IsActive && x.ApplicationTypeId == myApp.ApplicationTypeId); var application = new Application { ApplicationTypeId = myApp.ApplicationTypeId, OrganizationId = model.OrganizationId, ApplicationStatusId = status.Id, UniqueId = Guid.NewGuid(), CreatedDate = DateTime.Now, CreatedBy = savedBy, SiteId = site.Site.SiteId, CoordinatorId = isComplianceApp == true?model.Coordinator.UserId.GetValueOrDefault() : (Guid?)null, //model.Coordinator.UserId.GetValueOrDefault(), DueDate = !string.IsNullOrEmpty(model.DueDate) ? Convert.ToDateTime(model.DueDate) : (DateTime?)null, ApplicationVersionId = version?.Id, ApplicationQuestionNotApplicables = notApplicables, CycleNumber = cycleNumber == 0 ? 1 : cycleNumber //SiteApplicationVersions = new List<SiteApplicationVersion> //{ // new SiteApplicationVersion // { // Id = Guid.NewGuid(), // SiteId = site.Site.SiteId, // ApplicationVersionId = version.ApplicationVersion.Id, // ApplicationStatusId = status.Id, // CreatedDate = DateTime.Now, // CreatedBy = savedBy, // NotApplicables = notApplicables // } //} }; if (approvalStatus.Name == Constants.ComplianceApplicationApprovalStatuses.Approved) { application.IsActive = true; } complianceApp.Applications.Add(application); } else { //app.ApplicationQuestionNotApplicables = notApplicables; app.UpdatedBy = savedBy; if (approvalStatus.Name == Constants.ComplianceApplicationApprovalStatuses.Approved && !app.IsActive.GetValueOrDefault()) { app.IsActive = true; } if (app.ApplicationStatus.Name == Constants.ApplicationStatus.PastDue) { app.ApplicationStatusId = status.Id; } if (isComplianceApp == true) { app.CoordinatorId = model.Coordinator.UserId.GetValueOrDefault(); } app.UpdatedDate = DateTime.Now; app.DueDate = !string.IsNullOrEmpty(model.DueDate) ? Convert.ToDateTime(model.DueDate) : (DateTime?)null; if (!string.IsNullOrEmpty(questionIds)) { this.notApplicableRepository.AddForApplication(app.Id, questionIds, savedBy); } } //else //{ // app.SiteApplicationVersions.Add(new SiteApplicationVersion // { // Id = Guid.NewGuid(), // SiteId = site.Site.SiteId, // ApplicationVersionId = version.ApplicationVersion.Id, // ApplicationStatusId = status.Id, // CreatedDate = DateTime.Now, // CreatedBy = savedBy, // NotApplicables = notApplicables // }); //} } } this.Save(complianceApp); return(complianceApp); }