Skip to content

Commit

Permalink
add space metric overrides to WorkplaceMetrics
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaSloboda committed Nov 14, 2023
1 parent 3ac7e60 commit a61fa99
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
14 changes: 10 additions & 4 deletions WorkplaceStrategy/SpaceMetrics/src/SpaceMetrics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public static SpaceMetricsOutputs Execute(Dictionary<string, Model> inputModels,
proxies.Clear();
var output = new SpaceMetricsOutputs();

var spaceMetrics = new List<SpaceMetric>();
if (inputModels.TryGetValue("Space Planning Zones", out var zonesModel))
{
inputModels.TryGetValue(_openOffice + " Layout", out var openOfficeModel);
Expand All @@ -35,25 +36,27 @@ public static SpaceMetricsOutputs Execute(Dictionary<string, Model> inputModels,
var layoutNames = new string[] { _openOffice, _openCollab, "Meeting Room", "Classroom", "Phone Booth", "Private Office", "Lounge", "Reception", "Pantry" };
foreach (var layoutName in layoutNames)
{
UpdateSpaceMetricsByLayoutType(inputModels, input.Overrides.SpaceMetrics.ToList(), layoutName, allSpaceBoundaries, openOfficeBoundaries, openCollabSpaceMetrics);
spaceMetrics.AddRange(UpdateSpaceMetricsByLayoutType(inputModels, input.Overrides.SpaceMetrics.ToList(), layoutName, allSpaceBoundaries, openOfficeBoundaries, openCollabSpaceMetrics));

Check warning on line 39 in WorkplaceStrategy/SpaceMetrics/src/SpaceMetrics.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'boundaries' in 'List<SpaceMetric> SpaceMetrics.UpdateSpaceMetricsByLayoutType(Dictionary<string, Model> inputModels, List<SpaceMetricsOverride> overrides, string layoutName, List<SpaceBoundary> boundaries, List<SpaceBoundary> openOfficeBoundaries, List<SpaceMetric> openCollabSpaceMetrics)'.

Check warning on line 39 in WorkplaceStrategy/SpaceMetrics/src/SpaceMetrics.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'openOfficeBoundaries' in 'List<SpaceMetric> SpaceMetrics.UpdateSpaceMetricsByLayoutType(Dictionary<string, Model> inputModels, List<SpaceMetricsOverride> overrides, string layoutName, List<SpaceBoundary> boundaries, List<SpaceBoundary> openOfficeBoundaries, List<SpaceMetric> openCollabSpaceMetrics)'.

Check warning on line 39 in WorkplaceStrategy/SpaceMetrics/src/SpaceMetrics.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'openCollabSpaceMetrics' in 'List<SpaceMetric> SpaceMetrics.UpdateSpaceMetricsByLayoutType(Dictionary<string, Model> inputModels, List<SpaceMetricsOverride> overrides, string layoutName, List<SpaceBoundary> boundaries, List<SpaceBoundary> openOfficeBoundaries, List<SpaceMetric> openCollabSpaceMetrics)'.
}
}

output.Model.AddElements(proxies);
output.Model.AddElements(spaceMetrics);
return output;
}

private static void UpdateSpaceMetricsByLayoutType(
private static List<SpaceMetric> UpdateSpaceMetricsByLayoutType(
Dictionary<string, Model> inputModels,
List<SpaceMetricsOverride> overrides,
string layoutName,
List<SpaceBoundary> boundaries,
List<SpaceBoundary> openOfficeBoundaries,
List<SpaceMetric> openCollabSpaceMetrics)
{
var spaceMetrics = new List<SpaceMetric>();
if (!inputModels.TryGetValue(layoutName + " Layout", out var layoutModel))
{
return;
return spaceMetrics;
}

foreach (var sm in layoutModel.AllElementsOfType<SpaceMetric>())
Expand All @@ -78,8 +81,11 @@ private static void UpdateSpaceMetricsByLayoutType(
}

var proxy = GetElementProxy(room, boundaries.Proxies(SpaceMetricDependencyName));
MatchApplicableOverride(overrides, proxy, sm);
var config = MatchApplicableOverride(overrides, proxy, sm);
spaceMetrics.Add(new SpaceMetric(room.Id, config.Value.Seats, config.Value.Headcount, config.Value.Desks, config.Value.CollaborationSeats));
}

return spaceMetrics;
}

private static SpaceMetricsOverride MatchApplicableOverride(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public LevelVolume()
public System.Guid? PlanView { get; set; }

/// <summary>Multiple profiles used for a collection of volumes</summary>
[JsonProperty("Profiles", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
[JsonProperty("Profiles", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public IList<Profile> Profiles { get; set; }


Expand Down
4 changes: 4 additions & 0 deletions WorkplaceStrategy/WorkplaceMetrics/hypar.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@
{
"name": "Circulation",
"optional": true
},
{
"name": "Space Metrics",
"optional": true
}
],
"input_schema": {
Expand Down
27 changes: 20 additions & 7 deletions WorkplaceStrategy/WorkplaceMetrics/src/WorkplaceMetrics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ public static WorkplaceMetricsOutputs Execute(Dictionary<string, Model> inputMod
var hasFloors = inputModels.TryGetValue("Floors", out var floorsModel);
var hasMass = inputModels.TryGetValue("Conceptual Mass", out var massModel);
var hasCirculation = inputModels.TryGetValue("Circulation", out var circulationModel);
inputModels.TryGetValue(_openOffice + " Layout", out var openOfficeModel);
inputModels.TryGetValue(_openCollab + " Layout", out var openCollabModel);

// Get program requirements
var hasProgramRequirements = inputModels.TryGetValue("Program Requirements", out var programReqsModel);
Expand Down Expand Up @@ -92,8 +90,6 @@ public static WorkplaceMetricsOutputs Execute(Dictionary<string, Model> inputMod
outputModel.AddElement(settings);

var allSpaceBoundaries = zonesModel.AllElementsAssignableFromType<SpaceBoundary>().ToList();
var openOfficeBoundaries = openOfficeModel?.AllElementsAssignableFromType<SpaceBoundary>().ToList();
var openCollabSpaceMetrics = openCollabModel?.AllElementsAssignableFromType<SpaceMetric>().ToList();

// convert circulation to space boundaries
if (hasCirculation)
Expand Down Expand Up @@ -131,11 +127,19 @@ public static WorkplaceMetricsOutputs Execute(Dictionary<string, Model> inputMod

}

inputModels.TryGetValue(_openOffice + " Layout", out var openOfficeModel);
inputModels.TryGetValue(_openCollab + " Layout", out var openCollabModel);
inputModels.TryGetValue("Space Metrics", out var spaceMetricsModel);

var spaceMetricOverrides = spaceMetricsModel?.AllElementsOfType<SpaceMetric>().ToList();
var openOfficeBoundaries = openOfficeModel?.AllElementsAssignableFromType<SpaceBoundary>().ToList();
var openCollabSpaceMetrics = openCollabModel?.AllElementsAssignableFromType<SpaceMetric>().ToList();

var layoutNames = new string[] { _openOffice, _meetingRoom, _classroom, _phoneBooth, _openCollab, _privateOffice, _lounge, _reception, _pantry };
var metricByLayouts = new Dictionary<string, SpaceMetric>();
foreach (var layoutName in layoutNames)
{
metricByLayouts[layoutName] = CountWorkplaceTyped(inputModels, input, layoutName, allSpaceBoundaries, openOfficeBoundaries, openCollabSpaceMetrics);
metricByLayouts[layoutName] = CountWorkplaceTyped(inputModels, input, layoutName, allSpaceBoundaries, openOfficeBoundaries, openCollabSpaceMetrics, spaceMetricOverrides);
}

var meetingRoomCount = allSpaceBoundaries.Count(sb => sb.Name == "Meeting Room");
Expand Down Expand Up @@ -216,7 +220,8 @@ private static SpaceMetric CountWorkplaceTyped(
string layoutName,
List<SpaceBoundary> boundaries,
List<SpaceBoundary> openOfficeBoundaries,
List<SpaceMetric> openCollabSpaceMetrics)
List<SpaceMetric> openCollabSpaceMetrics,
List<SpaceMetric> spaceMetricOverrides)
{
var metric = new SpaceMetric();
if (inputModels.TryGetValue(layoutName + " Layout", out var layoutModel))
Expand All @@ -226,7 +231,15 @@ private static SpaceMetric CountWorkplaceTyped(
var room = boundaries.FirstOrDefault(b => b.Id == sm.Space);
if (room != null)
{
if (layoutName == _openOffice && openOfficeBoundaries != null && openCollabSpaceMetrics != null)
var smOverride = spaceMetricOverrides?.FirstOrDefault(o => o.Space == sm.Space);
if (smOverride != null)
{
sm.Seats = smOverride.Seats;
sm.Headcount = smOverride.Headcount;
sm.Desks = smOverride.Desks;
sm.CollaborationSeats = smOverride.CollaborationSeats;
}
else if (layoutName == _openOffice && openOfficeBoundaries != null && openCollabSpaceMetrics != null)
{
var openCollabBoundaries = openOfficeBoundaries.Where(b => room.Boundary.Perimeter.Contains(b.Boundary.Perimeter.Centroid()));
foreach (var openCollabBoundary in openCollabBoundaries)
Expand Down

0 comments on commit a61fa99

Please sign in to comment.