Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 33 additions & 31 deletions Import/Importers.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -266,36 +266,32 @@
{
"cell_type": "code",
"source": [
"// TODO: think of a better Factory to instantiate DataNode/State/Parameter simultaneously while avoiding public contructors (see Factory Patterns)",
"\n// ATTENTION: this Factory method provides default states and parameters so that it is not mandatory to import them (=> simpler calculation engine). ",
"\n// This method weakness is that these defaults aren't always replaced with the imported values, e,g, when Month > DefaultDataNodeActivationMonth.",
"\n// Therefore they will remain in the DataSource (hopefully without producing any harm).",
"\npublic async Task DataNodeFactoryAsync ()",
"public async Task DataNodeFactoryAsync(string file, string tab, ImportArgs args)",
"\n{",
"\n var partition = (Guid)Workspace.Partition.GetCurrent(nameof(PartitionByReportingNode));",
"\n var existingGroupOfContracts = await DataSource.Query<GroupOfContract>().Where(x => x.Partition == partition).ToArrayAsync();",
"\n var importedGroupOfContracts = await Workspace.Query<GroupOfContract>().ToArrayAsync();",
"\n var listOfPartitionsWithPeriod = new List<Guid>();",
"\n ",
"\n foreach (var groupOfContract in importedGroupOfContracts)",
"\n {",
"\n var name = groupOfContract.SystemName;",
"\n if(!existingGroupOfContracts.Any(x => x.SystemName == name))",
"\n {",
"\n var state = new DataNodeState { DataNode = name, Year = groupOfContract.AnnualCohort, Partition = partition };",
"\n var parameter = new SingleDataNodeParameter { DataNode = name, Year = groupOfContract.AnnualCohort, Partition = partition };",
"\n await Workspace.UpdateAsync(state);",
"\n if(groupOfContract is GroupOfInsuranceContract) await Workspace.UpdateAsync(parameter);",
"\n }",
"\n }",
"\n ",
"\n await CommitToDatabase<InsurancePortfolio>(partition);",
"\n await CommitToDatabase<ReinsurancePortfolio>(partition);",
"\n await CommitToDatabase<GroupOfInsuranceContract>(partition);",
"\n await CommitToDatabase<GroupOfReinsuranceContract>(partition);",
"\n //Hot fix: Disabling default as using Annual Cohort breakes Opening importer logic. ",
"\n //await CommitToDatabase<DataNodeState>(partition, snapshot: false);",
"\n //await CommitToDatabase<SingleDataNodeParameter>(partition, snapshot: false);",
"\n var partition = (await DataSource.Query<PartitionByReportingNode>().Where(p => p.ReportingNode == args.ReportingNode && p.Scenario == null).ToArrayAsync()).SingleOrDefault();",
"\n if(partition == null) { ApplicationMessage.Log(Error.ParsedPartitionNotFound); return; }",
"\n",
"\n var extension = System.IO.Path.GetExtension(file);",
"\n var stream = await Project.FileStorage.ReadAsync(file);",
"\n var target = (await DataSetReader.ReadFromStream(stream).WithContentType(extension).ExecuteAsync()).Tables[tab];",
"\n",
"\n var dataNodesImported = target.Rows.Select(x => x.Field<string>(nameof(RawVariable.DataNode))).ToHashSet();",
"\n var dataNodesDefined = await DataSource.Query<GroupOfContract>().Where(x => dataNodesImported.Contains(x.SystemName)).ToArrayAsync();",
"\n var dataNodeStatesDefined = await DataSource.Query<DataNodeState>().Select(x => x.DataNode).ToArrayAsync();",
"\n var dataNodeParametersDefined = await DataSource.Query<SingleDataNodeParameter>().Select(x => x.DataNode).ToArrayAsync(); ",
"\n",
"\n var dataNodeStatesUndefined = dataNodesImported.Where(x => x != null && !dataNodeStatesDefined.Contains(x)).ToHashSet();",
"\n var dataNodeSingleParametersUndefined = dataNodesImported.Where(x => x != null &&",
"\n !dataNodeParametersDefined.Contains(x) && ",
"\n dataNodesDefined.SingleOrDefault(y => y.SystemName == x) is GroupOfInsuranceContract).ToHashSet();",
"\n",
"\n await DataSource.UpdateAsync( dataNodeStatesUndefined.Select(x => ",
"\n new DataNodeState {DataNode = x, Year = args.Year, Month = DefaultDataNodeActivationMonth, State = State.Active, Partition = partition.Id}).ToArray() );",
"\n",
"\n await DataSource.UpdateAsync( dataNodeSingleParametersUndefined.Select(x => ",
"\n new SingleDataNodeParameter {DataNode = x, Year = args.Year, Month = DefaultDataNodeActivationMonth, PremiumAllocation = DefaultPremiumExperienceAdjustmentFactor, Partition = partition.Id}).ToArray() );",
"\n",
"\n await DataSource.CommitAsync();",
"\n}"
]
},
Expand Down Expand Up @@ -491,8 +487,10 @@
"\n{",
"\n var log = await UploadDataNodesToWorkspaceAsync(fileName);",
"\n var partition = (Guid)Workspace.Partition.GetCurrent(nameof(PartitionByReportingNode));",
"\n ",
"\n await DataNodeFactoryAsync(); ",
"\n await CommitToDatabase<InsurancePortfolio>(partition);",
"\n await CommitToDatabase<ReinsurancePortfolio>(partition);",
"\n await CommitToDatabase<GroupOfInsuranceContract>(partition);",
"\n await CommitToDatabase<GroupOfReinsuranceContract>(partition);",
"\n return log;",
"\n}"
]
Expand Down Expand Up @@ -784,6 +782,7 @@
"\n{",
"\n Activity.Start();",
"\n var args = (await GetArgsFromMainAsync<PartitionByReportingNodeAndPeriod>(fileName)) with {ImportFormat = ImportFormats.Cashflow};",
"\n await DataNodeFactoryAsync(fileName, ImportFormats.Cashflow, args);",
"\n if(Activity.HasErrors()) return Activity.Finish();",
"\n ",
"\n var parsingLog = await ParseCashflowsToWorkspaceAsync(fileName, args);",
Expand Down Expand Up @@ -886,6 +885,7 @@
"\n{",
"\n Activity.Start();",
"\n var args = (await GetArgsFromMainAsync<PartitionByReportingNodeAndPeriod>(fileName)) with {ImportFormat = ImportFormats.Actual};",
"\n await DataNodeFactoryAsync(fileName, ImportFormats.Actual, args);",
"\n if(Activity.HasErrors()) return Activity.Finish();",
"\n",
"\n var parsingLog = await ParseActualsToWorkspaceAsync(fileName, args);",
Expand Down Expand Up @@ -997,6 +997,7 @@
"\n{",
"\n Activity.Start();",
"\n var args = (await GetArgsFromMainAsync<PartitionByReportingNodeAndPeriod>(fileName)) with {ImportFormat = ImportFormats.SimpleValue};",
"\n await DataNodeFactoryAsync(fileName, ImportFormats.SimpleValue, args);",
"\n if(Activity.HasErrors()) return Activity.Finish();",
"\n ",
"\n Guid partitionId = new Guid();",
Expand Down Expand Up @@ -1026,6 +1027,7 @@
"\n{",
"\n Activity.Start();",
"\n var args = (await GetArgsFromMainAsync<PartitionByReportingNodeAndPeriod>(fileName)) with {ImportFormat = ImportFormats.Opening};",
"\n await DataNodeFactoryAsync(fileName, ImportFormats.Opening, args);",
"\n if(Activity.HasErrors()) return Activity.Finish();",
"\n ",
"\n Guid partitionId = new Guid();",
Expand Down