示例#1
0
        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();
        }
示例#2
0
        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);
        }
示例#3
0
        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;
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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;
        }
示例#7
0
        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;
        }
示例#8
0
        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;

                    }
                }


            }
        }