private static BaseSector ProcessSector(iatiactivity activity) { if (activity.sector == null || activity.sector.Length == 0) { return(null); } var item = activity.sector[0]; return(new BaseSector() { Code = item.code, Name = item.narrative != null && item.narrative.Length > 0 ? item.narrative[0].Value : null }); }
private static void ProcessActivity(iatiactivity activity) { BaseActivity ba = new BaseActivity { Iatiidentifier = activity.iatiidentifier.Value, Title = activity.title.narrative != null && activity.title.narrative.Length > 0 ? GetNarrative(activity.title.narrative, false) : "no title", Description = GetDescription(activity.description, "1", false), Sector = ProcessSector(activity) }; Console.WriteLine($"Acitivity: {ba.Iatiidentifier}"); Console.WriteLine($" Title: {ba.Title}"); Console.WriteLine($" Sector code={ba.Sector.Code}, name={ba.Sector.Name}"); Console.WriteLine($" Description: {ba.Description}"); // Persist activity in data store. DataStore.Store(ba); }
public void ReturnTheObjFromSpecifiedPositionOfAnArray5() { iatiactivity[] array = new iatiactivity[3]; array[0] = new iatiactivity { IatiIdentifier = "546" }; iatiactivity obj = array.n(12); Assert.IsNotNull(obj); }
public void SetExchangedValues(iatiactivity activity) { if (activity.transaction != null) foreach (var tr in activity.transaction) { SetCurrencyExRateAndVal(tr, activity.defaultcurrency, tr.transactiondate?.isodate ?? default(DateTime)); } if (activity.budget != null) foreach (var tr in activity.budget) { SetCurrencyExRateAndVal(tr, activity.defaultcurrency); } if (activity.planneddisbursement != null) foreach (var tr in activity.planneddisbursement) { SetCurrencyExRateAndVal(tr, activity.defaultcurrency); } }
private void LoadChildActivities(iatiactivity activity) { if (activity.HasChildActivity) { var relatedActivities = new List<iatiactivity>(); var relatedActivity = new iatiactivity(); var ras = (from a in dbContext.Activities where a.IatiIdentifier.StartsWith(activity.IatiIdentifier) && a.Hierarchy == 2 select new ActivityModel { IatiActivity = a.IatiActivity, OrgId = a.OrgId, ProjectId = a.ProjectId, MappedProjectId = a.MappedProjectId, MappedTrustFundId = a.MappedTrustFundId, IsInclude = a.IsInclude }).ToList(); relatedActivities = ParseXMLAndResolve(ras); //add all transaction of child activities to parent List<transaction> transactions = new List<transaction>(); if (activity.transaction != null) transactions = activity.transaction.ToList(); foreach (var ra in relatedActivities) { if (ra.transaction != null) transactions.AddRange(ra.transaction); SetExchangedValues(ra); } activity.transaction = transactions.ToArray(); } }
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(); }
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 SaveAtivity(Activity activity, iatiactivity iatiActivity, tblFundSource fundSource) { return SaveAtivities(new List<Activity> { activity }, new List<iatiactivity> { iatiActivity }, fundSource); }
public iatiactivityModel ToMinifiedIatiActivityModel(iatiactivity iatiActivity, bool includeTransactions = false, bool includeChilds = false, bool includeMatched = false) { return new iatiactivityModel { IsDataSourceAIMS = iatiActivity.IsDataSourceAIMS, IsCofinancedProject = iatiActivity.IsCofinancedProject, IsTrustFundedProject = iatiActivity.IsTrustFundedProject, IsCommitmentIncluded = iatiActivity.IsCommitmentIncluded, IsDisbursmentIncluded = iatiActivity.IsDisbursmentIncluded, IsPlannedDisbursmentIncluded = iatiActivity.IsPlannedDisbursmentIncluded, IsInclude = iatiActivity.IsInclude, ProjectId = iatiActivity.ProjectId, MappedProjectId = iatiActivity.MappedProjectId, MappedTrustFundId = iatiActivity.MappedTrustFundId, HasChildActivity = iatiActivity.HasChildActivity, HasParentActivity = iatiActivity.HasParentActivity, MatchedProjects = includeMatched && iatiActivity.MatchedProjects?.Count > 0 ? ToMinifiedIatiActivitiesModel(iatiActivity.MatchedProjects) : null, childActivities = includeChilds && iatiActivity.childActivities?.Count > 0 ? ToMinifiedIatiActivitiesModel(iatiActivity.childActivities) : null, PercentToBD = iatiActivity.PercentToBD, IsRelevant = iatiActivity.IsRelevant, Commitments = includeTransactions ? iatiActivity.Commitments : null, TotalCommitment = iatiActivity.TotalCommitment, CommitmentsThisDPOnly = includeTransactions ? iatiActivity.CommitmentsThisDPOnly : null, TotalCommitmentThisDPOnly = iatiActivity.TotalCommitmentThisDPOnly, PlannedDisbursments = includeTransactions ? iatiActivity.PlannedDisbursments : null, TotalPlannedDisbursment = iatiActivity.TotalPlannedDisbursment, Disbursments = includeTransactions ? iatiActivity.Disbursments : null, TotalDisbursment = iatiActivity.TotalDisbursment, DisbursmentsThisDPOnly = includeTransactions ? iatiActivity.DisbursmentsThisDPOnly : null, TotalDisbursmentThisDPOnly = iatiActivity.TotalDisbursmentThisDPOnly, AllID = iatiActivity.AllID, IatiIdentifier = iatiActivity.IatiIdentifier, Title = iatiActivity.Title, Description = iatiActivity.Description, ReportingOrg = iatiActivity.ReportingOrg, ImplementingOrgs = iatiActivity.ImplementingOrgs, ExtendingOrgs = iatiActivity.ExtendingOrgs, AidType = iatiActivity.AidType, AidTypeCode = iatiActivity.AidTypeCode, ActivityStatus = iatiActivity.ActivityStatus, PlannedStartDate = iatiActivity.PlannedStartDate, ActualStartDate = iatiActivity.ActualStartDate, PlannedEndDate = iatiActivity.PlannedEndDate, ActualEndDate = iatiActivity.ActualEndDate }; }
private static iatiactivity MergeToSingleActivity(List<iatiactivity> iatiActivities) { var groupedActivity = new iatiactivity(); var trns = new List<transaction>(); var bgts = new List<budget>(); var plnDis = new List<planneddisbursement>(); foreach (var activity in iatiActivities) { trns.AddRange(activity.transaction); bgts.AddRange(activity.budget); plnDis.AddRange(activity.planneddisbursement); } groupedActivity.transaction = trns.ToArray(); groupedActivity.budget = bgts.ToArray(); groupedActivity.planneddisbursement = plnDis.ToArray(); return groupedActivity; }
public ProjectFieldMapModel(iatiactivity _iatiActivity, iatiactivity _aimsProject, List<FieldMappingPreferenceGeneral> generalPreferences) : this(_iatiActivity, _aimsProject) { foreach (var preference in generalPreferences) { var field = Fields.Find(f => f.Field == preference.FieldName); if (field != null) field.IsSourceIATI = preference.IsSourceIATI; var transactionField = TransactionFields.Find(f => f.Field == preference.FieldName); if (transactionField != null) transactionField.IsSourceIATI = preference.IsSourceIATI; } }
public ProjectFieldMapModel(iatiactivity _iatiActivity, iatiactivity _aimsProject, bool isSourceIATI = true) : this() { iatiActivity = _iatiActivity; aimsProject = _aimsProject; if (iatiActivity != null && aimsProject != null) { Fields.Add(new FieldMap { Field = IatiFields.Title, AIMSValue = aimsProject.Title, IATIValue = iatiActivity.Title, IsSourceIATI = isSourceIATI }); Fields.Add(new FieldMap { Field = IatiFields.Description, AIMSValue = aimsProject.Description, IATIValue = iatiActivity.Description, IsSourceIATI = isSourceIATI }); Fields.Add(new FieldMap { Field = IatiFields.Activitystatus, AIMSValue = aimsProject.ActivityStatus, IATIValue = iatiActivity.ActivityStatus, IsSourceIATI = isSourceIATI }); // public const string Document = "Document"; //public const string AidType = "AidType"; //public const string Dates = "Dates"; //public const string Sector = "Sector"; //public const string Location = "Location"; //public const string ExecutingAgency = "ExecutingAgency"; Fields.Add(new FieldMap { Field = IatiFields.Document, AIMSValue = (aimsProject.documentlink?.Count() ?? 0) + " Document(s)", IATIValue = (iatiActivity.documentlink?.Count() ?? 0) + " Document(s)", IsSourceIATI = isSourceIATI }); Fields.Add(new FieldMap { Field = IatiFields.AidType, AIMSValue = aimsProject.AidType, IATIValue = iatiActivity.AidType, IsSourceIATI = isSourceIATI }); //Fields.Add(new FieldMap //{ // Field = IatiFields.Dates, // AIMSValue = aimsProject.AidType, // IATIValue = iatiActivity.AidType, // IsSourceIATI = isSourceIATI //}); Fields.Add(new FieldMap { Field = IatiFields.Sector, AIMSValue = (aimsProject.sector?.Count() ?? 0) + " Sector(s)", IATIValue = (iatiActivity.sector?.Count() ?? 0) + " Sector(s)", IsSourceIATI = isSourceIATI }); Fields.Add(new FieldMap { Field = IatiFields.Location, AIMSValue = (aimsProject.location?.Count() ?? 0) + " Location(s)", IATIValue = (iatiActivity.location?.Count() ?? 0) + " Location(s)", IsSourceIATI = isSourceIATI }); Fields.Add(new FieldMap { Field = IatiFields.ExecutingAgency, AIMSValue = (aimsProject.ImplementingOrgs?.Count() ?? 0) + " Implementing Organization(s)", IATIValue = (iatiActivity.ImplementingOrgs?.Count(c=>c?.AllID != iatiActivity.AllID) ?? 0) + " Implementing Organization(s)", IsSourceIATI = isSourceIATI }); //Transactions------------------------------- TransactionFields.Add(new FieldMap { Field = IatiFields.Commitment, AIMSValue = aimsProject.TotalCommitmentThisDPOnly, IATIValue = iatiActivity.TotalCommitmentThisDPOnly }); TransactionFields.Add(new FieldMap { Field = IatiFields.Disbursment, AIMSValue = aimsProject.TotalDisbursmentThisDPOnly, IATIValue = iatiActivity.TotalDisbursmentThisDPOnly }); TransactionFields.Add(new FieldMap { Field = IatiFields.PlannedDisbursment, AIMSValue = aimsProject.TotalPlannedDisbursment, IATIValue = iatiActivity.TotalPlannedDisbursment }); } }
private void DeleteTransactions(tblProjectInfo p, iatiactivity MatchedProject) { //Commitments if (MatchedProject.IsPlannedDisbursmentIncluded) { var aimsCommitments = p.tblProjectFundingCommitments.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); foreach (var cc in aimsCommitments) { dbContext.tblProjectFundingCommitments.Remove(cc); } } //PlannedDisbursements if (MatchedProject.IsPlannedDisbursmentIncluded) { var planDisb = p.tblProjectFundingPlannedDisbursements.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); foreach (var cc in planDisb) { dbContext.tblProjectFundingPlannedDisbursements.Remove(cc); } } //Disbursements if (MatchedProject.IsDisbursmentIncluded) { var aimsDisbursements = p.tblProjectFundingActualDisbursements.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); foreach (var cc in aimsDisbursements) { dbContext.tblProjectFundingActualDisbursements.Remove(cc); } var aimsExp = p.tblProjectFundingExpenditures.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); foreach (var cc in aimsExp) { dbContext.tblProjectFundingExpenditures.Remove(cc); } } }
private void UpdateTransactions(string Iuser, IQueryable<CurrencyLookupItem> aimsCurrencies, IQueryable<AidCategoryLookupItem> aimsAidCategories, string defaultfinancetype, tblProjectInfo p, iatiactivity MatchedProject) { #region Commitments if (MatchedProject.IsCommitmentIncluded) { foreach (var trn in MatchedProject.CommitmentsThisDPOnly) { var aimsCommitment = new tblProjectFundingCommitment(); p.tblProjectFundingCommitments.Add(aimsCommitment); aimsCommitment.IDate = DateTime.Now; aimsCommitment.IUser = Iuser; aimsCommitment.IsCommitmentTrustFund = false; //ToDo for co-finance projects it may be different aimsCommitment.FundSourceId = MatchedProject.AimsFundSourceId; aimsCommitment.CommitmentAgreementSignDate = trn.transactiondate?.isodate.ToSqlDateTimeNull(); var aimsCurrency = aimsCurrencies.FirstOrDefault(f => f.IATICode == trn.value.currency); aimsCommitment.CommitmentMaidCurrencyId = aimsCurrency == null ? 1 : aimsCurrency.Id; aimsCommitment.CommittedAmount = trn.value.Value; aimsCommitment.CommitmentEffectiveDate = trn.value?.BBexchangeRateDate; aimsCommitment.ExchangeRateToUSD = trn.value?.BBexchangeRateUSD ?? default(decimal); aimsCommitment.CommittedAmountInUSD = trn.value?.ValueInUSD; aimsCommitment.ExchangeRateToBDT = trn.value?.BBexchangeRateBDT ?? default(decimal); aimsCommitment.CommittedAmountInBDT = trn.value?.ValueInBDT; aimsCommitment.Remarks = MatchedProject.IsDataSourceAIMS ? trn.description?.narrative.n(0).Value : "Importerd From IATI: " + trn.description?.narrative.n(0).Value; aimsCommitment.VerificationRemarks = "Importerd From IATI: "; //AidCategory if (trn.financetype != null && trn.financetype.code.Length > 1) defaultfinancetype = trn.financetype.code.StartsWith("4") ? "400" : "100"; var aimsAidCategory = aimsAidCategories.FirstOrDefault(f => f.IATICode == defaultfinancetype); aimsCommitment.AidCategoryId = aimsAidCategory == null ? 1 : aimsAidCategory.Id; } } #endregion #region PlannedDisbursements if (MatchedProject.IsPlannedDisbursmentIncluded) { foreach (var trn in MatchedProject.PlannedDisbursments) { var aimsPlanDisbursment = new tblProjectFundingPlannedDisbursement(); p.tblProjectFundingPlannedDisbursements.Add(aimsPlanDisbursment); aimsPlanDisbursment.IDate = DateTime.Now; aimsPlanDisbursment.IUser = Iuser; aimsPlanDisbursment.IsPlannedDisbursementTrustFund = false; //ToDo for co-finance projects it may be different aimsPlanDisbursment.FundSourceId = MatchedProject.AimsFundSourceId; aimsPlanDisbursment.PlannedDisbursementPeriodFromDate = trn.periodstart?.isodate.ToSqlDateTimeNull(); aimsPlanDisbursment.PlannedDisbursementPeriodToDate = trn.periodend?.isodate.ToSqlDateTimeNull(); var aimsCurrency = aimsCurrencies.FirstOrDefault(f => f.IATICode == trn.value.currency); aimsPlanDisbursment.PlannedDisbursementCurrencyId = aimsCurrency == null ? 1 : aimsCurrency.Id; aimsPlanDisbursment.PlannedDisburseAmount = trn.value.Value; aimsPlanDisbursment.PlannedDisburseExchangeRateToUSD = trn.value?.BBexchangeRateUSD ?? default(decimal); aimsPlanDisbursment.PlannedDisburseAmountInUSD = trn.value?.ValueInUSD; aimsPlanDisbursment.PlannedDisburseExchangeRateToBDT = trn.value?.BBexchangeRateBDT ?? default(decimal); aimsPlanDisbursment.PlannedDisburseAmountInBDT = trn.value?.ValueInBDT; //aimsPlanDisbursment.VerificationRemarks = project.IsDataSourceAIMS ? trn.description?.narrative.n(0).Value : "Importerd From IATI: " + trn.description?.narrative.n(0).Value; aimsPlanDisbursment.VerificationRemarks = "Importerd From IATI: "; //AidCategory var aimsAidCategory = aimsAidCategories.FirstOrDefault(f => f.IATICode.StartsWith(defaultfinancetype)); aimsPlanDisbursment.AidCategoryId = aimsAidCategory == null ? 1 : aimsAidCategory.Id; } } #endregion #region Disbursements if (MatchedProject.IsDisbursmentIncluded) { foreach (var trn in MatchedProject.DisbursmentsThisDPOnly) { var aimsDisbursment = new tblProjectFundingActualDisbursement(); p.tblProjectFundingActualDisbursements.Add(aimsDisbursment); aimsDisbursment.IDate = DateTime.Now; aimsDisbursment.IUser = Iuser; aimsDisbursment.IsDisbursedTrustFund = false; //ToDo for co-finance projects it may be different aimsDisbursment.FundSourceId = MatchedProject.AimsFundSourceId; aimsDisbursment.DisbursementDate = trn.transactiondate?.isodate ?? default(DateTime).ToSqlDateTime(); aimsDisbursment.DisbursementToDate = trn.transactiondate?.isodate.ToSqlDateTimeNull(); var aimsCurrency = aimsCurrencies.FirstOrDefault(f => f.IATICode == trn.value.currency); aimsDisbursment.DisbursedCurrencyId = aimsCurrency == null ? 1 : aimsCurrency.Id; aimsDisbursment.DisbursedAmount = trn.value.Value; aimsDisbursment.DisbursedExchangeRateToUSD = trn.value?.BBexchangeRateUSD ?? default(decimal); aimsDisbursment.DisbursedAmountInUSD = trn.value?.ValueInUSD; aimsDisbursment.DisbursedExchangeRateToBDT = trn.value?.BBexchangeRateBDT ?? default(decimal); aimsDisbursment.DisbursedAmountInBDT = trn.value?.ValueInBDT; aimsDisbursment.Remarks = MatchedProject.IsDataSourceAIMS ? trn.description?.narrative.n(0).Value : "Importerd From IATI: " + trn.description?.narrative.n(0).Value; aimsDisbursment.VerificationRemarks = "Importerd From IATI: "; //AidCategory if (trn.financetype != null && trn.financetype.code.Length > 1) defaultfinancetype = trn.financetype.code.StartsWith("4") ? "400" : "100"; var aimsAidCategory = aimsAidCategories.FirstOrDefault(f => f.IATICode == defaultfinancetype); aimsDisbursment.AidCategoryId = aimsAidCategory == null ? 1 : aimsAidCategory.Id; } } #endregion }
private iatiactivity ConvertAimsToIati(tblProjectInfo project) { var iatiActivityObj = new iatiactivity(); iatiActivityObj.IsDataSourceAIMS = true; iatiActivityObj.IsCofinancedProject = project.IsCofundedProject ?? false; iatiActivityObj.AllID = project.FundSourceId + "~" + (project.tblFundSource?.IATICode ?? "") + "~" + (int)ExecutingAgencyType.DP + "~" + project.tblFundSource?.FundSourceCategoryId; iatiActivityObj.ProjectId = project.Id; //iati-activity iatiActivityObj.lastupdateddatetime = DateTime.Now; iatiActivityObj.lang = "en"; iatiActivityObj.defaultcurrency = Statix.Currency; iatiActivityObj.hierarchy = 1; //linked-data-uri //iati-identifier iatiActivityObj.iatiidentifier = new iatiidentifier { Value = getIdentifer(project) }; //reporting-org iatiActivityObj.reportingorg = new reportingorg { @ref = project.tblFundSource?.IATICode, type = project.tblFundSource?.tblFundSourceCategory?.IATICode, //secondary-reporter narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), }; //title iatiActivityObj.title = new textRequiredType { narrative = Statix.getNarativeArray(project.Title) }; //description iatiActivityObj.description = new iatiactivityDescription[1] { new iatiactivityDescription { narrative = Statix.getNarativeArray(project.Objective) } }; //participating-org List<participatingorg> participatingorgList = new List<participatingorg>(); participatingorgList.Add(new participatingorg { narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceGroup), role = "1", @ref = project.tblFundSource?.IATICode, type = project.tblFundSource?.tblFundSourceCategory?.IATICode, }); participatingorgList.Add(new participatingorg { narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), role = "3", @ref = project.tblFundSource?.IATICode, type = project.tblFundSource?.tblFundSourceCategory?.IATICode, }); if (project.tblProjectExecutingAgencies != null) foreach (var executingAgency in project.tblProjectExecutingAgencies) { participatingorgList.Add(new participatingorg { narrative = Statix.getNarativeArray("N/A"), role = "4", @ref = "N/A", type = "N/A", }); } //ToDo //iatiActivity.participatingorg[2] = new participatingorg //{ // narrative = getNarativeArray(project.tblFundSource.FundSourceName), // role = "1", // @ref = project.tblFundSource.IATICode, // type = "10" //}; iatiActivityObj.participatingorg = participatingorgList.ToArray(); //other-identifier //activity-status iatiActivityObj.activitystatus = new activitystatus { code = project.tblImplementationStatu.IATICode }; //activity-date List<activitydate> activitydateList = new List<activitydate>(); activitydateList.Add(new activitydate { type = "1", isodate = project.PlannedProjectStartDate ?? default(DateTime) }); activitydateList.Add(new activitydate { type = "2", isodate = project.ActualProjectStartDate ?? default(DateTime) }); activitydateList.Add(new activitydate { type = "3", isodate = project.PlannedProjectCompletionDate ?? default(DateTime) }); activitydateList.Add(new activitydate { type = "4", isodate = project.RevisedProjectCompletionDate ?? default(DateTime) }); iatiActivityObj.activitydate = activitydateList.ToArray(); //contact-info List<contactinfo> contactinfoList = new List<contactinfo>(); contactinfoList.Add(new contactinfo //DP { type = "1", organisation = new textRequiredType { narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName) }, department = new textRequiredType { narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName) }, personname = new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointDPContactName) }, jobtitle = new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointDPContactDesignation) }, telephone = new List<contactinfoTelephone> { new contactinfoTelephone { Value = project.FocalPointDPContactTelephone } }.ToArray(), email = new List<contactinfoEmail> { new contactinfoEmail { Value = project.FocalPointDPContactEmail } }.ToArray(), website = new List<contactinfoWebsite> { new contactinfoWebsite { Value = project.FocalPointDPContactAddress } }.ToArray(), mailingaddress = new List<textRequiredType> { new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointDPContactAddress) } }.ToArray() }); contactinfoList.Add(new contactinfo //GoB { type = "2", organisation = new textRequiredType { narrative = Statix.getNarativeArray(Statix.RecipientCountryName) }, department = new textRequiredType { narrative = Statix.getNarativeArray("PD") }, personname = new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointGoBContactName) }, jobtitle = new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointGoBContactDesignation) }, telephone = new List<contactinfoTelephone> { new contactinfoTelephone { Value = project.FocalPointGoBContactTelephone } }.ToArray(), email = new List<contactinfoEmail> { new contactinfoEmail { Value = project.FocalPointGoBContactEmail } }.ToArray(), website = new List<contactinfoWebsite> { new contactinfoWebsite { Value = project.FocalPointGoBContactAddress } }.ToArray(), mailingaddress = new List<textRequiredType> { new textRequiredType { narrative = Statix.getNarativeArray(project.FocalPointGoBContactAddress) } }.ToArray() }); iatiActivityObj.contactinfo = contactinfoList.ToArray(); //activity-scope //recipient-country List<recipientcountry> recipientcountryList = new List<recipientcountry>(); recipientcountryList.Add(new recipientcountry { code = Statix.RecipientCountry, narrative = Statix.getNarativeArray(Statix.RecipientCountryName), percentage = 100 }); iatiActivityObj.recipientcountry = recipientcountryList.ToArray(); //recipient-region //location List<location> locationList = new List<location>(); var locations = project.tblProjectGeographicAllocations.ToList(); foreach (var location in locations) { locationList.Add(new location { name = new textRequiredType { narrative = Statix.getNarativeArray(location.DistrictId.ToString()) }, }); } iatiActivityObj.location = locationList.ToArray(); //sector List<sector> sectorList = new List<sector>(); var sectors = project.tblProjectSectoralAllocations.ToList(); foreach (var sector in sectors) { sectorList.Add(new sector { narrative = Statix.getNarativeArray(sector.TotalCommitmentPercent.ToString()) }); } iatiActivityObj.sector = sectorList.ToArray(); //country-budget-items //humanitarian-scope //policy-marker //collaboration-type //default-flow-type //default-finance-type //default-aid-type iatiActivityObj.defaultaidtype = new defaultaidtype { code = project.tblAssistanceType?.IATICode }; //default-tied-status //budget //planned-disbursement List<planneddisbursement> planneddisbursementList = new List<planneddisbursement>(); var planneddisbursements = project.tblProjectFundingPlannedDisbursements.ToList(); foreach (var pd in planneddisbursements) { planneddisbursementList.Add(new planneddisbursement { type = "1", //1=Origin, 2=Revised periodstart = new planneddisbursementPeriodstart { isodate = pd.PlannedDisbursementPeriodFromDate ?? DateTime.MinValue }, periodend = new planneddisbursementPeriodend { isodate = pd.PlannedDisbursementPeriodToDate ?? DateTime.MinValue }, value = new currencyType { currency = Statix.Currency, Value = pd.PlannedDisburseAmountInUSD ?? 0, valuedate = pd.PlannedDisbursementPeriodFromDate ?? DateTime.MinValue, ValueInUSD = pd.PlannedDisburseAmountInUSD ?? 0 }, providerorg = new planneddisbursementProviderorg { @ref = pd.tblFundSource?.IATICode, provideractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(pd.tblFundSource?.FundSourceName), type = pd.tblFundSource?.tblFundSourceCategory?.IATICode }, receiverorg = new planneddisbursementReceiverorg { receiveractivityid = project.IatiIdentifier, @ref = project.tblFundSource?.IATICode, narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), type = project.tblFundSource?.tblFundSourceCategory?.IATICode, } }); } iatiActivityObj.planneddisbursement = planneddisbursementList.ToArray(); //capital-spend #region Transaction //Transaction List<transaction> transactions = new List<transaction>(); //Commitment var commitments = project.tblProjectFundingCommitments.ToList(); foreach (var commitment in commitments) { transaction tr = new transaction(); tr.transactiontype = new transactionTransactiontype { code = ConvertIATIv2.gettransactionCode("C") }; var date = commitment.CommitmentAgreementSignDate ?? project.AgreementSignDate; tr.transactiondate = new transactionTransactiondate { isodate = date }; tr.value = new currencyType { currency = Statix.Currency, valuedate = date, Value = Convert.ToDecimal(commitment.CommittedAmountInUSD), ValueInUSD = Convert.ToDecimal(commitment.CommittedAmountInUSD) }; //commitment.tblCurrency.IATICode tr.description = new textRequiredType { narrative = Statix.getNarativeArray(commitment.Remarks) }; tr.providerorg = new transactionProviderorg { @ref = commitment.tblFundSource?.IATICode, provideractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(commitment.tblFundSource?.FundSourceName), type = commitment.tblFundSource?.tblFundSourceCategory?.IATICode }; tr.receiverorg = new transactionReceiverorg { @ref = project.tblFundSource?.IATICode, receiveractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), type = project.tblFundSource?.tblFundSourceCategory?.IATICode }; //<disbursement-channel code="1" /> tr.disbursementchannel = new transactionDisbursementchannel { code = Statix.DisbursementChannel }; //Money is disbursed directly to the implementing institution and managed through a separate bank account //<sector vocabulary="2" code="111" /> //<recipient-country code="AF" /> <!--Note: only a recipient-region OR a recipient-country is expected--> tr.recipientcountry = new transactionRecipientcountry { code = Statix.RecipientCountry }; //<recipient-region code="456" vocabulary="1" /> //<flow-type code="10" /> tr.flowtype = new transactionFlowtype { code = Statix.FlowType }; //<finance-type code="110" /> //110= Aid grant excluding debt reorganisation, 410 = Aid loan excluding debt reorganisation tr.financetype = new transactionFinancetype { code = commitment.tblAidCategory?.IATICode }; //<aid-type code="A01" /> tr.aidtype = new transactionAidtype { code = project.tblAssistanceType?.IATICode }; //<tied-status code="3" /> tr.tiedstatus = new transactionTiedstatus { code = project.tblAIDEffectivenessIndicators.Where(q => q.AEISurveyYear == date.Year).ToList().n(0).tblAIDEffectivenessResourceTiedType?.IATICode }; iatiActivityObj.IsTrustFundedProject = commitment.IsCommitmentTrustFund ?? false; transactions.Add(tr); } //Actual Disbusement var actualDisbursements = project.tblProjectFundingActualDisbursements.ToList(); foreach (var actualDisbursement in actualDisbursements) { transaction tr = new transaction(); tr.transactiontype = new transactionTransactiontype { code = ConvertIATIv2.gettransactionCode("D") }; var date = actualDisbursement.DisbursementToDate ?? actualDisbursement.DisbursementDate; tr.transactiondate = new transactionTransactiondate { isodate = date }; tr.value = new currencyType { currency = Statix.Currency, valuedate = date, Value = Convert.ToDecimal(actualDisbursement.DisbursedAmountInUSD), ValueInUSD = Convert.ToDecimal(actualDisbursement.DisbursedAmountInUSD) }; //actualDisbursement.tblCurrency.IATICode tr.description = new textRequiredType { narrative = Statix.getNarativeArray(actualDisbursement.Remarks) }; tr.providerorg = new transactionProviderorg { @ref = actualDisbursement.tblFundSource?.IATICode, provideractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(actualDisbursement.tblFundSource?.FundSourceName), type = actualDisbursement.tblFundSource?.tblFundSourceCategory?.IATICode }; tr.receiverorg = new transactionReceiverorg { @ref = project.tblFundSource?.IATICode, receiveractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), type = project.tblFundSource?.tblFundSourceCategory?.IATICode }; //<disbursement-channel code="1" /> tr.disbursementchannel = new transactionDisbursementchannel { code = Statix.DisbursementChannel }; //<sector vocabulary="2" code="111" /> //<recipient-country code="AF" /> <!--Note: only a recipient-region OR a recipient-country is expected--> tr.recipientcountry = new transactionRecipientcountry { code = Statix.RecipientCountry }; //<recipient-region code="456" vocabulary="1" /> //<flow-type code="10" /> tr.flowtype = new transactionFlowtype { code = Statix.FlowType }; //<finance-type code="110" /> //110= Aid grant excluding debt reorganisation, 410 = Aid loan excluding debt reorganisation tr.financetype = new transactionFinancetype { code = actualDisbursement.tblAidCategory?.IATICode }; //<aid-type code="A01" /> tr.aidtype = new transactionAidtype { code = project.tblAssistanceType?.IATICode }; //<tied-status code="3" /> tr.tiedstatus = new transactionTiedstatus { code = project.tblAIDEffectivenessIndicators.Where(q => q.AEISurveyYear == date.Year).ToList().n(0).tblAIDEffectivenessResourceTiedType?.IATICode }; transactions.Add(tr); } //Expenditure var expenditures = project.tblProjectFundingExpenditures.ToList(); foreach (var expenditure in expenditures) { transaction tr = new transaction(); tr.transactiontype = new transactionTransactiontype { code = ConvertIATIv2.gettransactionCode("E") }; var date = expenditure.ExpenditureReportingPeriodToDate; //?? expenditure.ExpenditureReportingPeriodFromDate; tr.transactiondate = new transactionTransactiondate { isodate = date }; tr.value = new currencyType { currency = Statix.Currency, valuedate = date, Value = expenditure.ExpenditureAmountInUSD ?? 0, ValueInUSD = expenditure.ExpenditureAmountInUSD ?? 0 }; //expenditure.tblCurrency.IATICode tr.description = new textRequiredType { narrative = Statix.getNarativeArray(expenditure.Remarks) }; tr.providerorg = new transactionProviderorg { @ref = expenditure.tblFundSource?.IATICode, provideractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(expenditure.tblFundSource?.FundSourceName), type = expenditure.tblFundSource?.tblFundSourceCategory?.IATICode }; tr.receiverorg = new transactionReceiverorg { @ref = project.tblFundSource?.IATICode, receiveractivityid = project.IatiIdentifier, narrative = Statix.getNarativeArray(project.tblFundSource?.FundSourceName), type = project.tblFundSource?.tblFundSourceCategory?.IATICode }; //<disbursement-channel code="1" /> tr.disbursementchannel = new transactionDisbursementchannel { code = Statix.DisbursementChannel }; //<sector vocabulary="2" code="111" /> //<recipient-country code="AF" /> <!--Note: only a recipient-region OR a recipient-country is expected--> tr.recipientcountry = new transactionRecipientcountry { code = Statix.RecipientCountry }; //<recipient-region code="456" vocabulary="1" /> //<flow-type code="10" /> tr.flowtype = new transactionFlowtype { code = Statix.FlowType }; //<finance-type code="110" /> //110= Aid grant excluding debt reorganisation, 410 = Aid loan excluding debt reorganisation tr.financetype = new transactionFinancetype { code = expenditure.tblAidCategory?.IATICode }; //<aid-type code="A01" /> tr.aidtype = new transactionAidtype { code = project.tblAssistanceType?.IATICode }; //<tied-status code="3" /> tr.tiedstatus = new transactionTiedstatus { code = project.tblAIDEffectivenessIndicators.Where(q => q.AEISurveyYear == date.Year).ToList().n(0).tblAIDEffectivenessResourceTiedType?.IATICode }; transactions.Add(tr); } //Assign all transaction iatiActivityObj.transaction = transactions.ToArray(); #endregion //document-link List<documentlink> documentlinkList = new List<documentlink>(); var documents = project.tblProjectAttachments.ToList(); foreach (var document in documents) { List<documentlinkLanguage> documentlinkLanguageList = new List<documentlinkLanguage>(); documentlinkLanguageList.Add(new documentlinkLanguage { code = Statix.Language }); List<documentlinkCategory> documentlinkCategoryList = new List<documentlinkCategory>(); documentlinkCategoryList.Add(new documentlinkCategory { code = document.tblDocumentCategory?.IATICode }); documentlinkList.Add(new documentlink { url = document.AttachmentFileURL ?? Statix.DocumentURL + document.Id, //format = title = new textRequiredType { narrative = Statix.getNarativeArray(document.AttachmentTitle) }, language = documentlinkLanguageList.ToArray(), category = documentlinkCategoryList.ToArray() }); } iatiActivityObj.documentlink = documentlinkList.ToArray(); //related-activity //legacy-data //conditions //result //crs-add //fss return iatiActivityObj; }
private bool CheckTransactionMismatch(tblProjectInfo p, iatiactivity MatchedProject, bool checkMismatch = true) { if (!checkMismatch) return false; bool isFinancialDataMismathed = false; #region Commitments if (MatchedProject.IsCommitmentIncluded) { var aimsCommitments = p.tblProjectFundingCommitments.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); var iatiCommitments = MatchedProject.CommitmentsThisDPOnly; #region Checking transaction mismatch if (aimsCommitments.Count > iatiCommitments.Count) foreach (var aimsCommitment in aimsCommitments) { var trandate = aimsCommitment.CommitmentAgreementSignDate ?? p.AgreementSignDate; var notExistInIATI = !iatiCommitments.Exists(e => e.transactiondate?.isodate.Date == trandate && Math.Floor(e.ValUSD) == Math.Floor(aimsCommitment.CommittedAmountInUSD ?? 0)); isFinancialDataMismathed = true; aimsDBIatiDAL.InsertLog(new Log { OrgId = MatchedProject.IATICode, LogType = (int)LogType.FinancialDataMismathed, DateTime = DateTime.Now, IatiIdentifier = MatchedProject.IatiIdentifier, ProjectId = p.Id, Message = "Transactions (C) are mismatched between IATI and AIMS" }); } #endregion Checking transaction mismatch return isFinancialDataMismathed; } #endregion #region Disbursements if (MatchedProject.IsDisbursmentIncluded) { var aimsDisbursements = p.tblProjectFundingActualDisbursements.Where(w => w.FundSourceId == MatchedProject.AimsFundSourceId).ToList(); var iatiDisbursements = MatchedProject.DisbursmentsThisDPOnly; #region Checking transaction mismatch if (aimsDisbursements.Count > iatiDisbursements.Count) foreach (var aimsDisbursement in aimsDisbursements) { var trandate = aimsDisbursement.DisbursementToDate ?? aimsDisbursement.DisbursementDate; var notExistInIATI = !iatiDisbursements.Exists(e => e.transactiondate?.isodate.Date == trandate && Math.Floor(e.ValUSD) == Math.Floor(aimsDisbursement.DisbursedAmountInUSD ?? 0)); isFinancialDataMismathed = true; aimsDBIatiDAL.InsertLog(new Log { DateTime = DateTime.Now, IatiIdentifier = MatchedProject.IatiIdentifier, LogType = (int)LogType.FinancialDataMismathed, ProjectId = p.Id, OrgId = MatchedProject.IATICode, Message = "Transactions (D) are mismatched between IATI and AIMS" }); } #endregion Checking transaction mismatch return isFinancialDataMismathed; } return false; #endregion }