Skip to content

Commit 0b33890

Browse files
author
Martynas Pelakauskas
committed
enter all parameter data for scenario as csv
1 parent 009d8c1 commit 0b33890

File tree

8 files changed

+543
-26
lines changed

8 files changed

+543
-26
lines changed

MoManI.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio 14
4-
VisualStudioVersion = 14.0.24720.0
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.26228.4
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoManI.Api", "src\MoManI.Api\MoManI.Api.csproj", "{416BDBF9-79B5-47E1-81EB-5ECED923220E}"
77
EndProject

src/MoManI.Ui/MoManI.Ui.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<Content Include="index.html" />
2929
<Content Include="partials\clone-model-scenario-dialog.html" />
3030
<Content Include="partials\composition-details.html" />
31+
<Content Include="partials\parameter-data-parameter-csv.html" />
3132
<Content Include="partials\parameter-data-set-csv.html" />
3233
<Content Include="partials\parameter-data-csv.html" />
3334
<Content Include="partials\scenario-set-list.html" />

src/MoManI.Ui/partials/parameter-data-csv.html

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
<div class="container-fluid">
22
<div class="row">
33
<form name="detailsForm" class="form-horizontal" id="parameterDataCsvForm">
4-
<h3>CSV data entry for parameter {{data.parameter.name}}</h3>
5-
<div class="form-group">
6-
<label for="defaultValue" class="col-sm-2 control-label">Default value</label>
7-
<div class="col-sm-2">
8-
<input type="text" class="form-control" id="defaultValue" ng-model="data.defaultValue" required>
9-
</div>
10-
</div>
4+
<h3>CSV data entry for all parameters</h3>
5+
<h4>Model {{model.name}}</h4>
6+
<h4>Scenario {{scenario.name}}</h4>
117
<div ng-if="data.spreadsheetVisible">
128
<hot-table settings="data.spreadsheetSettings"
139
datarows="data.spreadsheetItems">
@@ -17,7 +13,7 @@ <h3>CSV data entry for parameter {{data.parameter.name}}</h3>
1713
<div class="form-group">
1814
<div class="col-sm-offset-2 col-sm-10">
1915
<button class="btn btn-default" ng-click="save()">Save</button>
20-
<a href="#/models/{{data.modelId}}/{{data.scenarioId}}/data{{returnUrlSuffix}}" class="btn btn-default">Cancel</a>
16+
<a href="#/models/{{model.id}}/{{scenario.id}}/data" class="btn btn-default">Cancel</a>
2117
</div>
2218
</div>
2319
</form>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<div class="container-fluid">
2+
<div class="row">
3+
<form name="detailsForm" class="form-horizontal" id="parameterDataCsvForm">
4+
<h3>CSV data entry for parameter {{data.parameter.name}}</h3>
5+
<div class="form-group">
6+
<label for="defaultValue" class="col-sm-2 control-label">Default value</label>
7+
<div class="col-sm-2">
8+
<input type="text" class="form-control" id="defaultValue" ng-model="data.defaultValue" required>
9+
</div>
10+
</div>
11+
<div ng-if="data.spreadsheetVisible">
12+
<hot-table settings="data.spreadsheetSettings"
13+
datarows="data.spreadsheetItems">
14+
</hot-table>
15+
</div>
16+
<br/>
17+
<div class="form-group">
18+
<div class="col-sm-offset-2 col-sm-10">
19+
<button class="btn btn-default" ng-click="save()">Save</button>
20+
<a href="#/models/{{data.modelId}}/{{data.scenarioId}}/data{{returnUrlSuffix}}" class="btn btn-default">Cancel</a>
21+
</div>
22+
</div>
23+
</form>
24+
</div>
25+
</div>
26+
27+
<span us-spinner spinner-on="loading"></span>

src/MoManI.Ui/partials/scenario-details.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ <h4>Scenario</h4>
2525
</div>
2626
</form>
2727
</div>
28+
<div class="row">
29+
<a href="#/models/{{scenario.modelId}}/{{scenario.id}}/data/allParameters">Enter data for all parameters at once</a>
30+
<span>(might be slow when large amounts of data exist)</span>
31+
</div>
2832
<div class="row">
2933
<h4>Parameters</h4>
3034
<div>

src/MoManI.Ui/scripts/controllers/parameterDataControllers.ts

Lines changed: 76 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import parameterService = require('services/parameterService');
88
import setDataService = require('services/setDataService');
99
import parameterDataService = require('services/parameterDataService');
1010
import modelService = require('services/modelService');
11+
import scenarioService = require('services/scenarioService');
1112

12-
var forceLoad = [setService, parameterService, setDataService, parameterDataService, modelService];
13+
var forceLoad = [setService, parameterService, setDataService, parameterDataService, modelService, scenarioService];
1314

1415
export interface IParameterDataScope extends ng.IScope {
1516
data: parameterDataModel.ParameterData;
@@ -21,13 +22,6 @@ export interface IParameterDataScope extends ng.IScope {
2122
switchParameter: () => void;
2223
}
2324

24-
export interface ICsvParameterDataScope extends ng.IScope {
25-
data: parameterDataModelCsv.ParameterDataCsv;
26-
save: () => void;
27-
loading: boolean;
28-
returnUrlSuffix: string;
29-
}
30-
3125
export class ParameterDataController {
3226
constructor($scope: IParameterDataScope, $routeParams: angular.route.IRouteParamsService, $window: angular.IWindowService, $q: angular.IQService,
3327
ParameterService: ng.resource.IResourceClass<IParameterResource>, SetService: ng.resource.IResourceClass<ISetResource>,
@@ -98,8 +92,79 @@ export class ParameterDataController {
9892
}
9993
}
10094

95+
export interface ICsvParameterDataScope extends ng.IScope {
96+
model: IModel;
97+
scenario: IScenario;
98+
data: parameterDataModelCsv.ParameterDataCsv;
99+
save: () => void;
100+
loading: boolean;
101+
}
102+
101103
export class CsvParameterDataController {
102104
constructor($scope: ICsvParameterDataScope, $routeParams: angular.route.IRouteParamsService, $window: angular.IWindowService, $q: angular.IQService,
105+
ParameterService: ng.resource.IResourceClass<IParameterResource>, SetService: ng.resource.IResourceClass<ISetResource>,
106+
ParameterDataService: angular.resource.IResourceClass<IParameterDataResource>, SetDataService: angular.resource.IResourceClass<ISetDataResource>,
107+
ModelService: angular.resource.IResourceClass<IModelResource>, ScenarioService: angular.resource.IResourceClass<IScenarioResource>
108+
) {
109+
$scope.loading = true;
110+
var modelId = $routeParams['modelId'];
111+
var scenarioId = $routeParams['scenarioId'];
112+
113+
var setReq = SetService.query().$promise;
114+
var parameterReq = ParameterService.query().$promise;
115+
var modelReq = ModelService.get({ id: modelId }).$promise;
116+
var scenarioReq = ScenarioService.get({ modelId: modelId, id: scenarioId }).$promise;
117+
118+
$q.all([setReq, parameterReq, modelReq, scenarioReq]).then(res => {
119+
var allSets = <ISet[]>res[0];
120+
var allParameters = <IParameter[]>res[1];
121+
$scope.model = <IModel>res[2];
122+
$scope.scenario = <IScenario>res[3];
123+
var parameters = _.filter(allParameters, p => _.includes($scope.model.parameters, p.id));
124+
if (parameters.length == 0) {
125+
$scope.loading = false;
126+
return; //TODO: no data needs to be entered, indicate this somehow
127+
}
128+
var actualSetIds = _.uniq(_.flatten(_.map(parameters, p => p.sets)));
129+
var sets = _.map(actualSetIds, sId => _.find(allSets, s => s.id == sId));
130+
var setDataReqs = _.map(actualSetIds, sId => {
131+
return SetDataService.get({ setId: sId, modelId: modelId }).$promise;
132+
});
133+
134+
var parameterDataReqs = _.map(parameters, p => ParameterDataService.get({ parameterId: p.id, scenarioId: scenarioId }).$promise);
135+
136+
$q.all([$q.all(setDataReqs), $q.all(parameterDataReqs)]).then((dataRes) => {
137+
var setDatas = <ISetData[]>dataRes[0];
138+
var parameterDatas = <IParameterData[]>dataRes[1];
139+
140+
$scope.data = new parameterDataModelCsv.ParameterDataCsv(modelId, scenarioId, parameters, sets, parameterDatas, setDatas);
141+
$scope.loading = false;
142+
});
143+
});
144+
145+
$scope.save = () => {
146+
$scope.loading = true;
147+
var parameterDatas = $scope.data.serialize();
148+
var saveReqs = _.map(parameterDatas, parameterData => ParameterDataService.save(parameterData).$promise);
149+
$q.all(saveReqs).then(() => {
150+
$window.location.href = `#/models/${$scope.model.id}/${$scope.scenario.id}/data`;
151+
}, () => {
152+
alert('An error has occured during saving');
153+
$scope.loading = false;
154+
});
155+
}
156+
}
157+
}
158+
159+
export interface ICsvParameterDataForParameterScope extends ng.IScope {
160+
data: parameterDataModelCsv.LegacyParameterDataCsv;
161+
save: () => void;
162+
loading: boolean;
163+
returnUrlSuffix: string;
164+
}
165+
166+
export class CsvParameterDataForParameterController {
167+
constructor($scope: ICsvParameterDataForParameterScope, $routeParams: angular.route.IRouteParamsService, $window: angular.IWindowService, $q: angular.IQService,
103168
ParameterService: ng.resource.IResourceClass<IParameterResource>, SetService: ng.resource.IResourceClass<ISetResource>,
104169
ParameterDataService: angular.resource.IResourceClass<IParameterDataResource>, SetDataService: angular.resource.IResourceClass<ISetDataResource>
105170
) {
@@ -126,7 +191,7 @@ export class CsvParameterDataController {
126191
var setDatas = <ISetData[]>setDataRes;
127192
var numericSets = _.filter(sets, s => s.numeric);
128193
var axisSetData = numericSets.length ? _(setDatas).filter(sd => _.some(numericSets, ns => ns.id == sd.setId)).maxBy(sd => sd.items.length) : _.maxBy(setDatas, sd => sd.items.length);
129-
$scope.data = new parameterDataModelCsv.ParameterDataCsv(modelId, scenarioId, [parameter], sets, [parameterData], setDatas, axisSetData.setId);
194+
$scope.data = new parameterDataModelCsv.LegacyParameterDataCsv(modelId, scenarioId, [parameter], sets, [parameterData], setDatas, axisSetData.setId);
130195
$scope.loading = false;
131196
});
132197
});
@@ -144,7 +209,7 @@ export class CsvParameterDataController {
144209
}
145210

146211
export interface ICsvParameterDataForSetScope extends ng.IScope {
147-
data: parameterDataModelCsv.ParameterDataCsv;
212+
data: parameterDataModelCsv.LegacyParameterDataCsv;
148213
set: ISet;
149214
modelId: string;
150215
scenarioId: string;
@@ -196,7 +261,7 @@ export class CsvParameterDataForSetController {
196261
var axisSet = this.determineCommonSet(commonSets, setDatas);
197262
var axisSetId = axisSet ? axisSet.id : null;
198263

199-
$scope.data = new parameterDataModelCsv.ParameterDataCsv($scope.modelId, $scope.scenarioId, parameters, allSets, parameterDatas, setDatas, axisSetId, setId, $scope.setValue);
264+
$scope.data = new parameterDataModelCsv.LegacyParameterDataCsv($scope.modelId, $scope.scenarioId, parameters, allSets, parameterDatas, setDatas, axisSetId, setId, $scope.setValue);
200265
$scope.loading = false;
201266
});
202267
});

0 commit comments

Comments
 (0)