AIMS_BD_IATI.DAL.AimsDAL.UpdateCofinanceProjects C# (CSharp) Method

UpdateCofinanceProjects() public method

public UpdateCofinanceProjects ( List projects, string Iuser ) : int?
projects List
Iuser string
return int?
        public int? UpdateCofinanceProjects(List<iatiactivity> projects, string Iuser)
        {

            var aimsCurrencies = from c in dbContext.tblCurrencies
                                 select new CurrencyLookupItem { Id = c.Id, IATICode = c.IATICode };

            var aimsAidCategories = from c in dbContext.tblAidCategories
                                    select new AidCategoryLookupItem { Id = c.Id, IATICode = c.IATICode };
            foreach (var project in projects)
            {
                try
                {
                    bool isFinancialDataMismathed = false;
                    var defaultfinancetype = "100";
                    if (project.defaultfinancetype != null && !string.IsNullOrWhiteSpace(project.defaultfinancetype.code))
                        defaultfinancetype = project.defaultfinancetype.code.StartsWith("4") ? "400" : "100";

                    var p = dbContext.tblProjectInfoes.FirstOrDefault(f => f.Id == project.ProjectId);
                    if (p != null)
                    {
                        // first check isFinancialDataMismathed
                        foreach (var MatchedProject in project.MatchedProjects)
                        {
                            isFinancialDataMismathed = CheckTransactionMismatch(p, MatchedProject);
                            if (isFinancialDataMismathed) break;
                        }
                        //if Financial Data are Mismathed then continue with next project
                        if (isFinancialDataMismathed) continue;

                        //if FinancialData are not Mismathed then delete existing transactions (this DP only)
                        foreach (var MatchedProject in project.MatchedProjects)
                        {
                            DeleteTransactions(p, MatchedProject);
                        }
                        //here we need another loop to update transactions !!! Do not combine these three identical loops.
                        foreach (var MatchedProject in project.MatchedProjects)
                        {
                            UpdateTransactions(Iuser, aimsCurrencies, aimsAidCategories, defaultfinancetype, p, MatchedProject);
                        }
                    }
                    dbContext.SaveChanges();

                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            Trace.TraceInformation("Property: {0} Error: {1}",
                                                    validationError.PropertyName,
                                                    validationError.ErrorMessage);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.WriteToDbAndFile(ex, LogType.Error, project.IATICode, project.IatiIdentifier);

                }


            }



            return 1;
        }

Usage Example

Esempio n. 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();
        }