public int SaveAtivities(List<Activity> activities, List<iatiactivity> iatiActivities, tblFundSource fundSource) { foreach (var activity in activities) { var a = dbContext.Activities.FirstOrDefault(x => x.IatiIdentifier == activity.IatiIdentifier); if (a != null) { a.OrgId = activity.OrgId; a.IatiActivityPrev = a.IatiActivity; a.IatiActivity = activity.IatiActivity; a.Hierarchy = activity.Hierarchy; a.ParentHierarchy = activity.ParentHierarchy; a.DownloadDatePrev = a.DownloadDate; a.DownloadDate = DateTime.Now; //update aimsdb if (a.ProjectId > 0 || a.MappedProjectId > 0) { var aimsDAL = new AimsDAL(); //step 1: project structure var iactivities = new List<iatiactivity>(); if (a.Hierarchy == 1) iactivities = ImportLogic.LoadH1ActivitiesWithChild(iatiActivities); // here pass all activities to find out their child activities else iactivities = ImportLogic.LoadH2ActivitiesWithParent(iatiActivities); //step 2: get mapped iatiActivity and aimsProject var iatiActivity = iactivities.Find(f => f.IatiIdentifier == a.IatiIdentifier); // SetExchangedValues SetExchangedValues(iatiActivity); iatiActivity.childActivities.ForEach(ra => SetExchangedValues(ra)); var aimsProject = new iatiactivity(); if (a.ProjectId > 0) { aimsProject = aimsDAL.GetAIMSProjectInIATIFormat(a.ProjectId); if (aimsProject != null) { //step 3: get general preference var generalPreference = GetFieldMappingPreferenceGeneral(a.OrgId); //step 4: create a ProjectFieldMapModel using iatiActivity, aimsProject and generalPreference var ProjectFieldMapModel = new ProjectFieldMapModel(iatiActivity, aimsProject, generalPreference); //step 5: SetFieldMappingPreferences var ProjectFieldMapModels = new List<ProjectFieldMapModel>(); // here we make a list just to use existing method (e.g existing method require a List parameter) ProjectFieldMapModels.Add(ProjectFieldMapModel); ImportLogic.SetFieldMappingPreferences(ProjectFieldMapModels, ProjectFieldMapModel); //step 6: merge iatiActivity and aimsProject; and get an new merged activity var mergedActivities = ImportLogic.MergeProjects(ProjectFieldMapModels); //now it will allways return a list containing single activity mergedActivities.n(0).AllID = fundSource.Id + "~" + a.OrgId + "~" + (int)ExecutingAgencyType.DP + "~" + fundSource.FundSourceCategoryId; //step 7: update aims database with margedActivities aimsDAL.UpdateProjects(mergedActivities, "system"); } else { dbContext.Logs.Add(new Log { IatiIdentifier = activity.IatiIdentifier, OrgId = activity.OrgId, ProjectId = a.MappedProjectId, Message = "The mapped project is not found in AIMS database", LogType = (int)LogType.AimsProjectNotFound, DateTime = DateTime.Now }); } } else if (a.MappedProjectId > 0) //for co-finance projects { aimsProject = aimsDAL.GetAIMSProjectInIATIFormat(a.MappedProjectId); if (aimsProject != null) { iatiActivity.AllID = fundSource.Id + "~" + a.OrgId + "~" + (int)ExecutingAgencyType.DP + "~" + fundSource.FundSourceCategoryId; aimsProject.MatchedProjects.Add(iatiActivity); //step 7: update aims database with margedActivities aimsDAL.UpdateCofinanceProjects(new List<iatiactivity> { aimsProject }, "system"); } else { dbContext.Logs.Add(new Log { IatiIdentifier = activity.IatiIdentifier, OrgId = activity.OrgId, ProjectId = a.MappedProjectId, Message = "The mapped project is not found in AIMS database", LogType = (int)LogType.AimsProjectNotFound, DateTime = DateTime.Now }); } } } } else { activity.DownloadDate = DateTime.Now; dbContext.Activities.Add(activity); dbContext.Logs.Add(new Log { IatiIdentifier = activity.IatiIdentifier, OrgId = activity.OrgId, Message = "Imported new activity", LogType = (int)LogType.AddedNewActivity, DateTime = DateTime.Now }); } } return dbContext.SaveChanges(); }
public ProjectMapModelMinified GetProjectsToMap(ProjectFieldMapModel GeneralPreference) { Sessions.GeneralPreferences = GeneralPreference ?? Sessions.GeneralPreferences ?? GetGeneralPreferences(); if (Sessions.ProjectMapModel.MatchedProjects.IsEmpty() && Sessions.ProjectMapModel.NewProjectsToAddInAims.IsEmpty()) { Sessions.activitiesContainer = aimsDbIatiDAL.GetMappedActivities(Sessions.DP.ID); var heirarchyModel = CalculateHierarchyMatching(); var filterBDModel = SubmitHierarchy(heirarchyModel); var iOrgs = GetAllImplementingOrg(filterBDModel); var relevantActivities = FilterDP(iOrgs.Orgs); var projectMapModel = SubmitActivities(relevantActivities); } ImportLogic.SetFieldMappingPreferences(Sessions.ProjectMapModel.MatchedProjects, Sessions.GeneralPreferences); Sessions.CurrentStage = Stage.ReviewAdjustment; var returnResult = new ProjectMapModel { MatchedProjects = Sessions.ProjectMapModel.MatchedProjects, IatiActivitiesNotInAims = null, AimsProjectsNotInIati = null, NewProjectsToAddInAims = Sessions.ProjectMapModel.NewProjectsToAddInAims, ProjectsOwnedByOther = null }; Sessions.ProjectsToMap = returnResult; return ToMinifiedProjectMapModel(returnResult); }
private List<ProjectFieldMapModel> PrepareMappedActivities(List<iatiactivity> iatiActivities, Activity a, AimsDAL aimsDAL) { //step 1: project structure var iactivities = new List<iatiactivity>(); if (a.Hierarchy == 1) iactivities = ImportLogic.LoadH1ActivitiesWithChild(iatiActivities); // here pass all activities to find out their child activities else iactivities = ImportLogic.LoadH2ActivitiesWithParent(iatiActivities); //step 2: get mapped iatiActivity and aimsProject var iatiActivity = iactivities.Find(f => f.IatiIdentifier == a.IatiIdentifier); // SetExchangedValues SetExchangedValues(iatiActivity); iatiActivity.childActivities.ForEach(ra => SetExchangedValues(ra)); var aimsProject = new iatiactivity(); if (a.ProjectId > 0) { aimsProject = aimsDAL.GetAIMSProjectInIATIFormat(a.ProjectId); } else if (a.MappedProjectId > 0) //for co-finance projects { aimsProject = aimsDAL.GetAIMSProjectInIATIFormat(a.MappedProjectId); } //step 3: get general preference var generalPreference = GetFieldMappingPreferenceGeneral(a.OrgId); //step 4: create a ProjectFieldMapModel using iatiActivity, aimsProject and generalPreference var ProjectFieldMapModel = new ProjectFieldMapModel(iatiActivity, aimsProject, generalPreference); //step 5: SetFieldMappingPreferences var ProjectFieldMapModels = new List<ProjectFieldMapModel>(); // here we make a list just to use existing method (e.g existing method require a List parameter) ProjectFieldMapModels.Add(ProjectFieldMapModel); ImportLogic.SetFieldMappingPreferences(ProjectFieldMapModels, ProjectFieldMapModel); return ProjectFieldMapModels; }
public int? SaveActivityPreferences(ProjectFieldMapModel activityPreferences) { if (activityPreferences == null) return null; List<FieldMappingPreferenceActivity> entities = new List<FieldMappingPreferenceActivity>(); var fields = activityPreferences.Fields; fields.AddRange(activityPreferences.TransactionFields); foreach (var fieldMap in fields) { var entity = new FieldMappingPreferenceActivity { FieldName = fieldMap.Field, IatiIdentifier = activityPreferences.iatiActivity.IatiIdentifier, //ProjectId = activityPreferences.aimsProject.ProjectId, IsSourceIATI = fieldMap.IsSourceIATI }; entities.Add(entity); } return aimsDbIatiDAL.SaveFieldMappingPreferenceActivity(entities); }
public int? SaveGeneralPreferences(ProjectFieldMapModel generalPreferences) { if (generalPreferences == null) return null; Sessions.GeneralPreferences = generalPreferences; List<FieldMappingPreferenceGeneral> entities = new List<FieldMappingPreferenceGeneral>(); var fields = generalPreferences.Fields; fields.AddRange(generalPreferences.TransactionFields); foreach (var fieldMap in fields) { var entity = new FieldMappingPreferenceGeneral { FieldName = fieldMap.Field, OrgId = Sessions.DP.ID, IsSourceIATI = fieldMap.IsSourceIATI }; entities.Add(entity); } return aimsDbIatiDAL.SaveFieldMappingPreferenceGeneral(entities); }
public ProjectFieldMapModel GetGeneralPreferences() { var savedPreferences = aimsDbIatiDAL.GetFieldMappingPreferenceGeneral(Sessions.DP.ID); var returnModel = (from a in Sessions.ProjectMapModel?.MatchedProjects ?? new List<ProjectFieldMapModel>() select new ProjectFieldMapModel(a.iatiActivity, a.aimsProject, savedPreferences)).FirstOrDefault(); if (returnModel == null) { returnModel = new ProjectFieldMapModel(Sessions.activitiesContainer?.RelevantActivities.n(0), new iatiactivity(), savedPreferences); //foreach (var item in returnModel.Fields) //{ // item.AIMSValue = "Not found in AIMS"; //} } Sessions.GeneralPreferences = returnModel; return returnModel; }
public bool SubmitManualMatchingUsingDropdown(ProjectMapModelMinified projectMapModel) { if (projectMapModel != null) { UpdateActivities(projectMapModel.IatiActivitiesNotInAims, Sessions.ProjectMapModel.IatiActivitiesNotInAims); //Sessions.ProjectMapModel.AimsProjectsNotInIati = projectMapModel.AimsProjectsNotInIati; Sessions.ProjectMapModel.MatchedProjects.RemoveAll(r => r.IsManuallyMapped); } //actual method starts here :) //add manually matched projects var aimsProjects = Sessions.activitiesContainer?.AimsProjects; var iatiActivities = Sessions.ProjectMapModel?.IatiActivitiesNotInAims; foreach (var project in aimsProjects) { var mappedActivityCount = iatiActivities.Count(c => c.ProjectId == project.ProjectId); if (mappedActivityCount == 1) { var m = new ProjectFieldMapModel(iatiActivities.Find(c => c.ProjectId == project.ProjectId), project, false) { IsManuallyMapped = true }; Sessions.ProjectMapModel.MatchedProjects.Add(m); } else if (mappedActivityCount > 1) { iatiactivity groupedActivity = MergeToSingleActivity(iatiActivities.FindAll(c => c.ProjectId == project.ProjectId)); Sessions.ProjectMapModel.MatchedProjects.Add(new ProjectFieldMapModel(groupedActivity, project, false) { IsManuallyMapped = true, IsGrouped = true }); } } //foreach (var activity in Sessions.ProjectMapModel?.IatiActivitiesNotInAims.Where(w => w.ProjectId > 0)) //{ // var project = aimsProjects.Find(f => f.ProjectId == activity.ProjectId); // if (project != null) // { // Sessions.ProjectMapModel.MatchedProjects.Add(new ProjectFieldMapModel(activity, project) { IsManuallyMapped = true }); // } //} foreach (var activity in Sessions.ProjectMapModel?.IatiActivitiesNotInAims.Where(w => w.ProjectId == -2)) { activity.IsCommitmentIncluded = true; activity.IsDisbursmentIncluded = true; activity.IsPlannedDisbursmentIncluded = true; Sessions.ProjectMapModel.NewProjectsToAddInAims.Add(activity); } return true; }
public static void SetFieldMappingPreferences(List<ProjectFieldMapModel> projectFieldMapModel, ProjectFieldMapModel generalPreferences) { //set general or activity preferences foreach (var mapModel in projectFieldMapModel) { var activityPreference = new AimsDbIatiDAL().GetFieldMappingPreferenceActivity(mapModel.iatiActivity.IatiIdentifier); var fields = mapModel.Fields.ToList(); fields.AddRange(mapModel.TransactionFields); foreach (var field in fields) { //get GetFieldMappingPreferenceActivity for this field var activityFieldSource = activityPreference.Find(f => f.FieldName == field.Field); if (activityFieldSource != null) { field.IsSourceIATI = activityFieldSource.IsSourceIATI; } else // apply general preferences { var generalFieldSource = generalPreferences.Fields.Find(f => f.Field == field.Field); if (generalFieldSource != null) field.IsSourceIATI = generalFieldSource.IsSourceIATI; } } } }