Skip to content

Commit

Permalink
feature: add vaccination data
Browse files Browse the repository at this point in the history
  • Loading branch information
DacoTaco committed Aug 15, 2021
1 parent 9734143 commit 5cbfdd0
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Infrastructure/SciensanoCovidDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ public async static Task<string> GetCovidData( Type sourceType )
case nameof(SciensanoTestsModel):
fileName = "COVID19BE_tests.json";
break;
case nameof(SciensanoVaccinationModel):
fileName = "COVID19BE_VACC.json";
break;
default:
throw new Exception($"Invalid source type '{sourceType.Name}'");
}
Expand Down
14 changes: 14 additions & 0 deletions MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,20 @@
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Name="tabVaccinations" Header="Vaccinations">
<DataGrid x:Name="VaccinationsGrid" AutoGenerateColumns="False" IsReadOnly="True" SelectionUnit="CellOrRowHeader">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="Copy" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="Brand" Binding="{Binding Brand}"/>
<DataGridTextColumn Header="Dose" Binding="{Binding Dose}"/>
<DataGridTextColumn Header="Count" Binding="{Binding Count, StringFormat=\{0:N0\}}"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</Grid>
</DockPanel>
Expand Down
12 changes: 11 additions & 1 deletion MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ private async void OpenFile_Click(object sender, RoutedEventArgs e)
{
dataGrid = HospitalisationGrid;
targetType = typeof(HospitalisationModel);
}
}
else if (tabVaccinations.IsSelected)
{
dataGrid = VaccinationsGrid;
targetType = typeof(VaccinationModel);
}

IList<ILocalModel> list;
using (var stream = File.Open(openDialog.FileName, FileMode.Open))
Expand Down Expand Up @@ -92,6 +97,11 @@ private async void DownloadFile_Click(object sender, RoutedEventArgs e)
dataGrid = HospitalisationGrid;
sourceType = typeof(SciensanoHospitalisationModel);
}
else if (tabVaccinations.IsSelected)
{
dataGrid = VaccinationsGrid;
sourceType = typeof(SciensanoVaccinationModel);
}

var data = await SciensanoCovidDownloader.GetCovidData(sourceType);
IList<ILocalModel> list;
Expand Down
44 changes: 44 additions & 0 deletions Models/VaccinationModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Sciensano.CovidJson.Parser.SciensanoModels;
using System;

namespace Sciensano.CovidJson.Parser.Models
{
public class VaccinationModel : ILocalModel
{
public VaccinationModel(SciensanoVaccinationModel model)
{
Date = model.Date ?? new DateTime();
Count = model.Count;
Brand = model.Brand;

switch(model.Dose)
{
case SciensanoModels.Dose.A:
Dose = Dose.First;
break;
case SciensanoModels.Dose.B:
Dose = Dose.Second;
break;
case SciensanoModels.Dose.C:
Dose = Dose.OnlyDose;
break;
default:
Dose = Dose.Unknown;
break;
}
}

public DateTime Date { get; set; }
public int Count { get; set; }
public Dose Dose { get; set; }
public string Brand { get; set; }
}

public enum Dose
{
Unknown = 0,
First,
Second,
OnlyDose
}
}
3 changes: 3 additions & 0 deletions Sciensano.CovidJson.Parser.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="Models\VaccinationModel.cs" />
<Compile Include="SciensanoModels\SciensanoVaccinationModel.cs" />
<Compile Include="SciensanoParsers\BaseSciensanoParser.cs" />
<Compile Include="SciensanoParsers\CasesParser.cs" />
<Compile Include="SciensanoParsers\HospitalisationParser.cs" />
Expand All @@ -99,6 +101,7 @@
<Compile Include="SciensanoModels\ISciensanoModel.cs" />
<Compile Include="SciensanoModels\SciensanoCasesModel.cs" />
<Compile Include="SciensanoModels\SciensanoTestsModel.cs" />
<Compile Include="SciensanoParsers\VaccinationParser.cs" />
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
Expand Down
24 changes: 24 additions & 0 deletions SciensanoModels/SciensanoVaccinationModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;

namespace Sciensano.CovidJson.Parser.SciensanoModels
{
//{"DATE":"2020-12-28","REGION":"Brussels","AGEGROUP":"25-34","SEX":"F","BRAND":"Pfizer-BioNTech","DOSE":"A","COUNT":1}
public class SciensanoVaccinationModel : IDatedSciensanoModel
{
public DateTime? Date { get; set; }
public string Region { get; set; }
public string AgeGroup { get; set; }
public string Sex { get; set; }
public string Brand { get; set; }
public Dose Dose { get; set; }
public int Count { get; set; }
}

public enum Dose
{
Unknown,
A,
B,
C
}
}
39 changes: 39 additions & 0 deletions SciensanoParsers/VaccinationParser.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Sciensano.CovidJson.Parser.Models;
using Sciensano.CovidJson.Parser.SciensanoModels;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace Sciensano.CovidJson.Parser.SciensanoParsers
{
public class VaccinationParser : BaseSciensanoParser<VaccinationModel, SciensanoVaccinationModel>
{
public override Task<List<ILocalModel>> ParseAsync(Stream stream)
{
var list = new List<VaccinationModel>();
var jsonmodels = ParseJson(stream);

var doses = jsonmodels.Select(m => new { m.Dose, m.Brand }).Distinct();

foreach(var dose in doses)
{
var model = new VaccinationModel(jsonmodels.First(m => m.Brand == dose.Brand && m.Dose == dose.Dose))
{
Date = DateTime.Now,
Count = jsonmodels.Where(m => m.Brand == dose.Brand && m.Dose == dose.Dose).Sum(m => m.Count)
};

if(model.Dose == Models.Dose.First)
{
model.Count -= jsonmodels.Where(m => m.Brand == dose.Brand && m.Dose == SciensanoModels.Dose.B).Sum(m => m.Count);
}

list.Add(model);
}

return Task.FromResult(list.Cast<ILocalModel>().ToList());
}
}
}

0 comments on commit 5cbfdd0

Please sign in to comment.