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 int SaveAtivity(Activity activity, iatiactivity iatiActivity, tblFundSource fundSource) { return SaveAtivities(new List<Activity> { activity }, new List<iatiactivity> { iatiActivity }, fundSource); }
/// <summary> /// Save Data To DB /// </summary> /// <param name="returnResult2"></param> private void SaveToDB(tblFundSource fundSource, AIMS_BD_IATI.Library.Parser.ParserIATIv2.iatiactivity[] iatiactivityArray) { int counter = 1; int successfullySavedActivityCounter = 0; int totalActivity = iatiactivityArray.Count(); Logger.Write("INFO: " + "Total Activity found: " + totalActivity); Console.WriteLine(); if (totalActivity > 0) { foreach (var iatiactivityItem in iatiactivityArray) { try { var Activity = new Activity(); Activity.OrgId = Activity.AssignedOrgId = fundSource.IATICode;// iatiactivityItem.reportingorg?.@ref; Activity.IatiIdentifier = iatiactivityItem.IatiIdentifier; Activity.Hierarchy = iatiactivityItem.hierarchy; using (StringWriter ww = new StringWriter()) { iatiactivitySerealizer.Serialize(ww, iatiactivityItem); Activity.IatiActivity = ww.ToString(); } successfullySavedActivityCounter += new AimsDbIatiDAL().SaveAtivity(Activity, iatiactivityItem, fundSource) == 1 ? 1 : 0; Console.Write("\r Activity Counter: {0} ", counter++); } catch (DbEntityValidationException ex) { string messages = ""; foreach (var validationErrors in ex.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { messages += string.Format("\nProperty: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } Logger.WriteToDbAndFile(ex, LogType.ValidationError, fundSource.IATICode, iatiactivityItem.IatiIdentifier, messages); } catch (Exception ex) { Logger.WriteToDbAndFile(ex, LogType.Error, fundSource.IATICode, iatiactivityItem.IatiIdentifier); } } Logger.Write("INFO: " + successfullySavedActivityCounter + " activities are stored in Database"); } }
public void Parse(int fundSourcesCount, int i, tblFundSource fundSource) { IParserIATI parserIATI; //IConverterIATI converterIATI; string activitiesURL; XmlResultv2 returnResult2; XmlResultv1 returnResult1; try { Logger.Write(""); Logger.Write(i + "/" + fundSourcesCount + " " + fundSource.FundSourceName + " (" + fundSource.IATICode + ")"); Logger.Write("-------------------->"); Logger.Write("INFO: Downloading..."); #region Convert Data from v1.05 to v2.01 //Parser v2.01 parserIATI = new ParserIATIv2(); //activitiesURL = "http://datastore.iatistandard.org/api/1/access/activity.xml?recipient-country=BD&reporting-org=CA-3&stream=True" //"http://localhost:1000/UploadedFiles/activity_GB-1_2.xml"; //single activity : "http://datastore.iatistandard.org/api/1/access/activity.xml?iati-identifier=CA-3-A035529001 //Params: activity.xml or activity.json, recipient-country=BD, reporting-org=CA-3 activitiesURL = Common.iati_url + "recipient-country=" + Common.iati_recipient_country + "&reporting-org=" + fundSource.IATICode + "&stream=" + Common.iati_stream; returnResult2 = (XmlResultv2)parserIATI.ParseIATIXML(activitiesURL); Logger.Write("INFO: " + "Parsing..."); var iatiactivityArray = returnResult2?.iatiactivities?.iatiactivity; if (iatiactivityArray != null && iatiactivityArray.n()[0].AnyAttr.n()[0].Value.StartsWith("1.0")) //1.04, 1.05 { //Parser v1.05 parserIATI = new ParserIATIv1(); //activitiesURL = "http://datastore.iatistandard.org/api/1/access/activity.xml?recipient-country=BD&reporting-org=GB-1&stream=True"; //"http://localhost:1000/UploadedFiles/activity_GB-1_2.xml"; //Params: activity.xml or activity.json, recipient-country=BD, reporting-org=GB-1 or XM-DAC-12-1 returnResult1 = (XmlResultv1)parserIATI.ParseIATIXML(activitiesURL); Logger.Write("INFO: " + "Parsing completed!"); //Conversion ConvertIATIv2 convertIATIv2 = new ConvertIATIv2(); returnResult2 = convertIATIv2.ConvertIATI105to201XML(returnResult1, returnResult2); Logger.Write("INFO: " + "Convertion completed!"); } #endregion iatiactivityArray = returnResult2?.iatiactivities?.iatiactivity; if (iatiactivityArray != null) { SaveToDB(fundSource, iatiactivityArray); } } catch (DbEntityValidationException ex) { string messages = ""; foreach (var validationErrors in ex.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { messages += string.Format("\nProperty: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } Logger.WriteToDbAndFile(ex, LogType.ValidationError, fundSource.IATICode, null, messages); } catch (Exception ex) { Logger.WriteToDbAndFile(ex, LogType.Error, fundSource.IATICode); } }
public ExecutingAgencyLookupItem CreateNewExecutingAgency(participatingorg org, string userId) { ExecutingAgencyLookupItem returnAgency = null; if (org.ExecutingAgencyTypeId == (int)ExecutingAgencyType.DP) { //http://iatistandard.org/202/codelists/OrganisationType/ var fundsourceCategory = GetOtherFundSourceCategory(userId); var cur = dbContext.tblCurrencies.FirstOrDefault(f => f.IATICode == "USD"); var ent = dbContext.tblFundSources.FirstOrDefault(f => f.FundSourceName == org.Name || f.IATICode == org.@ref); if (ent == null) { ent = new tblFundSource { FundSourceCategoryId = fundsourceCategory.Id, CurrencyId = cur.Id, FundSourceName = org.Name, IATICode = org.@ref, IDate = DateTime.Now, IUser = userId, }; dbContext.tblFundSources.Add(ent); dbContext.SaveChanges(); } returnAgency = new ExecutingAgencyLookupItem { ExecutingAgencyTypeId = (int)ExecutingAgencyType.DP, ExecutingAgencyOrganizationTypeId = ent.FundSourceCategoryId, ExecutingAgencyOrganizationId = ent.Id, Name = ent.FundSourceName, }; } else if (org.ExecutingAgencyTypeId == (int)ExecutingAgencyType.Government) { tblMinistry ministry = GetNAMinistry(userId); var ent = dbContext.tblMinistryAgencies.FirstOrDefault(f => f.AgencyName == org.Name); if (ent == null) { ent = new tblMinistryAgency { MinistryId = ministry.Id, AgencyName = org.Name, IDate = DateTime.Now, IUser = userId, }; dbContext.tblMinistryAgencies.Add(ent); dbContext.SaveChanges(); } returnAgency = new ExecutingAgencyLookupItem { ExecutingAgencyTypeId = (int)ExecutingAgencyType.Government, ExecutingAgencyOrganizationTypeId = ent.MinistryId, ExecutingAgencyOrganizationId = ent.Id, Name = ent.AgencyName, }; } else if (org.ExecutingAgencyTypeId == (int)ExecutingAgencyType.NGO) { var ent = dbContext.tblNGOCSOes.FirstOrDefault(f => f.NGOOrganizationName == org.Name); if (ent == null) { ent = new tblNGOCSO { NGOOrganizationName = org.Name, NGOOrganizationTypeId = dbContext.tblNGOOrganizationTypes.FirstOrDefault().Id, IUser = userId, IDate = DateTime.Now }; dbContext.tblNGOCSOes.Add(ent); dbContext.SaveChanges(); } returnAgency = new ExecutingAgencyLookupItem { ExecutingAgencyTypeId = (int)ExecutingAgencyType.NGO, ExecutingAgencyOrganizationTypeId = ent.NGOOrganizationTypeId, ExecutingAgencyOrganizationId = ent.Id, Name = ent.NGOOrganizationName, }; } return returnAgency; }