From 5a840a09f5c16e10a12b51788bbde29721ec674b Mon Sep 17 00:00:00 2001 From: Jake Kellas Date: Wed, 8 Mar 2023 14:05:49 -0800 Subject: [PATCH] fix: update excel parsing index to use headers --- .../Functions/Statutes/Models/Statute.cs | 2 +- .../Functions/Upload/PostUpload.cs | 103 +++++++++++++----- 2 files changed, 77 insertions(+), 28 deletions(-) diff --git a/Functions/RIPA.Functions.Domain/Functions/Statutes/Models/Statute.cs b/Functions/RIPA.Functions.Domain/Functions/Statutes/Models/Statute.cs index a5eaad7f7..c238f0bca 100644 --- a/Functions/RIPA.Functions.Domain/Functions/Statutes/Models/Statute.cs +++ b/Functions/RIPA.Functions.Domain/Functions/Statutes/Models/Statute.cs @@ -13,7 +13,7 @@ public class Statute : TableEntity public int OffenseCode { get; set; } [JsonProperty(PropertyName = "offenseTxnTypeCD")] - public int OffenseTxnTypeCD { get; set; } + public int? OffenseTxnTypeCD { get; set; } [JsonProperty(PropertyName = "offenseStatute")] public string OffenseStatute { get; set; } diff --git a/Functions/RIPA.Functions.Domain/Functions/Upload/PostUpload.cs b/Functions/RIPA.Functions.Domain/Functions/Upload/PostUpload.cs index 1bc8af0a4..ee08fbf8d 100644 --- a/Functions/RIPA.Functions.Domain/Functions/Upload/PostUpload.cs +++ b/Functions/RIPA.Functions.Domain/Functions/Upload/PostUpload.cs @@ -14,6 +14,7 @@ using RIPA.Functions.Domain.Functions.Statutes.Models; using RIPA.Functions.Security; using System; +using System.Collections.Generic; using System.Data; using System.Globalization; using System.Linq; @@ -28,11 +29,19 @@ public class PostUpload private readonly TableBatchOperation _operations; private readonly int _batchLimit = 100; private readonly CloudTableClient _client; + private readonly List BeatTableHeaders; + private readonly List CityTableHeaders; + private readonly List SchoolTableHeaders; + private readonly List StatuteTableHeaders; public PostUpload(CloudTableClient client) { _client = client; _operations = new TableBatchOperation(); + BeatTableHeaders = new List(); + CityTableHeaders = new List(); + SchoolTableHeaders = new List(); + StatuteTableHeaders = new List(); } [FunctionName("PostUpload")] @@ -147,6 +156,40 @@ private async Task ProcessEntities(DataTable dataTable, CloudTable table, I int batchCount = 0; int totalRows = dataTable.Rows.Count - 1; int returnTotalRows = totalRows; + + foreach (DataRow row in dataTable.Rows.Cast().Take(1)) + { + switch (table.Name) + { + case "Beats": + foreach (var columnName in row.ItemArray) + { + BeatTableHeaders.Add(columnName.ToString().ToUpper()); + } + break; + case "Cities": + foreach (var columnName in row.ItemArray) + { + CityTableHeaders.Add(columnName.ToString().ToUpper()); + } + break; + case "Schools": + foreach (var columnName in row.ItemArray) + { + SchoolTableHeaders.Add(columnName.ToString().ToUpper()); + } + break; + case "Statutes": + foreach (var columnName in row.ItemArray) + { + StatuteTableHeaders.Add(columnName.ToString().ToUpper()); + } + break; + default: + break; + } + } + foreach (DataRow row in dataTable.Rows.Cast().Skip(1)) { totalRows--; @@ -199,13 +242,13 @@ private City GetCity(DataRow row) City city = new City { ETag = "*", - PartitionKey = row.ItemArray[0].ToString(), - State = row.ItemArray[0].ToString(), - RowKey = row.ItemArray[1].ToString(), - Name = row.ItemArray[1].ToString(), - County = row.ItemArray[2].ToString(), + PartitionKey = row.ItemArray[CityTableHeaders.IndexOf("STATE")].ToString(), + State = row.ItemArray[CityTableHeaders.IndexOf("STATE")].ToString(), + RowKey = row.ItemArray[CityTableHeaders.IndexOf("CITY")].ToString(), + Name = row.ItemArray[CityTableHeaders.IndexOf("CITY")].ToString(), + County = row.ItemArray[CityTableHeaders.IndexOf("COUNTY")].ToString(), }; - string inactiveDate = row.ItemArray[3].ToString(); + string inactiveDate = row.ItemArray[CityTableHeaders.IndexOf("INACTIVE DATE")].ToString(); if (!string.IsNullOrEmpty(inactiveDate)) { city.DeactivationDate = DateTime.Parse(inactiveDate); @@ -219,12 +262,12 @@ private School GetSchool(DataRow row) { ETag = "*", PartitionKey = "CA", - RowKey = row.ItemArray[0].ToString(), - CDSCode = row.ItemArray[0].ToString(), - Status = row.ItemArray[3].ToString(), - County = row.ItemArray[4].ToString(), - District = row.ItemArray[5].ToString(), - Name = row.ItemArray[6].ToString() + RowKey = row.ItemArray[SchoolTableHeaders.IndexOf("CDSCODE")].ToString(), + CDSCode = row.ItemArray[SchoolTableHeaders.IndexOf("CDSCODE")].ToString(), + Status = row.ItemArray[SchoolTableHeaders.IndexOf("STATUSTYPE")].ToString(), + County = row.ItemArray[SchoolTableHeaders.IndexOf("COUNTY")].ToString(), + District = row.ItemArray[SchoolTableHeaders.IndexOf("DISTRICT")].ToString(), + Name = row.ItemArray[SchoolTableHeaders.IndexOf("SCHOOL")].ToString() }; return school; } @@ -235,20 +278,22 @@ private Statute GetStatute(DataRow row) { ETag = "*", PartitionKey = "CA", - OffenseValidationCD = Convert.ToInt32(row.ItemArray[0]), - RowKey = row.ItemArray[1].ToString(), - OffenseCode = Convert.ToInt32(row.ItemArray[1]), - OffenseTxnTypeCD = Convert.ToInt32(row.ItemArray[2].ToString()), - OffenseStatute = row.ItemArray[3].ToString(), - OffenseTypeOfStatuteCD = row.ItemArray[4].ToString(), - StatuteLiteral = row.ItemArray[5].ToString(), - OffenseDefaultTypeOfCharge = row.ItemArray[6].ToString(), - OffenseTypeOfCharge = row.ItemArray[7].ToString(), - OffenseLiteralIdentifierCD = row.ItemArray[8].ToString() + OffenseValidationCD = Convert.ToInt32(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE VALIDATION CD")].ToString()), + RowKey = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE CODE")].ToString(), + OffenseCode = Convert.ToInt32(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE CODE")].ToString()), + OffenseTxnTypeCD = string.IsNullOrEmpty(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE TXN TYPE CD")].ToString()) ? 0 : Convert.ToInt32(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE TXN TYPE CD")].ToString()), + OffenseStatute = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE STATUTE")].ToString(), + OffenseTypeOfStatuteCD = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE TYPE OF STATUTE CD")].ToString(), + StatuteLiteral = row.ItemArray[StatuteTableHeaders.IndexOf("STATUTE LITERAL 25")].ToString(), + OffenseDefaultTypeOfCharge = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE DEFAULT TYPE OF CHARGE")].ToString(), + OffenseTypeOfCharge = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE TYPE OF CHARGE")].ToString(), + OffenseLiteralIdentifierCD = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE LITERAL IDENTIFIER CD")].ToString() }; - statute.OffenseDegree = String.IsNullOrEmpty(row.ItemArray[9].ToString()) ? null : statute.OffenseDegree = Convert.ToInt32(row.ItemArray[9].ToString()); - statute.BCSHierarchyCD = String.IsNullOrEmpty(row.ItemArray[10].ToString()) ? null : statute.BCSHierarchyCD = Convert.ToInt32(row.ItemArray[10].ToString()); - string offenseEnacted = row.ItemArray[11].ToString(); + + statute.OffenseDegree = string.IsNullOrEmpty(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE DEGREE")].ToString()) ? null : statute.OffenseDegree = Convert.ToInt32(row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE DEGREE")].ToString()); + statute.BCSHierarchyCD = string.IsNullOrEmpty(row.ItemArray[StatuteTableHeaders.IndexOf("BCS HIERARCHY CD")].ToString()) ? null : statute.BCSHierarchyCD = Convert.ToInt32(row.ItemArray[StatuteTableHeaders.IndexOf("BCS HIERARCHY CD")].ToString()); + string offenseEnacted = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE ENACTED")].ToString(); + if (!string.IsNullOrEmpty(offenseEnacted)) { if (offenseEnacted.Length == 8) @@ -257,7 +302,9 @@ private Statute GetStatute(DataRow row) statute.OffenseEnacted = DateTime.Parse(offenseEnacted); } - string offenseRepealed = row.ItemArray[12].ToString(); + + string offenseRepealed = row.ItemArray[StatuteTableHeaders.IndexOf("OFFENSE REPEALED")].ToString(); + if (!string.IsNullOrEmpty(offenseRepealed)) { if (offenseEnacted.Length == 8) @@ -265,7 +312,9 @@ private Statute GetStatute(DataRow row) else statute.OffenseRepealed = DateTime.Parse(offenseRepealed); } - statute.ALPSCognizantCD = row.ItemArray[13].ToString(); + + statute.ALPSCognizantCD = row.ItemArray[StatuteTableHeaders.IndexOf("ALPS COGNIZANT CD")].ToString(); + return statute; }