diff --git a/Model/ReportGeneration/ReportGenerationRequest.cs b/Model/ReportGeneration/ReportGenerationRequest.cs index b0937a9..8da21ae 100644 --- a/Model/ReportGeneration/ReportGenerationRequest.cs +++ b/Model/ReportGeneration/ReportGenerationRequest.cs @@ -37,6 +37,7 @@ public class ReportGenerationRequest public string EventName { get; set; } = string.Empty; public DateTime FromDate { get; set; } public DateTime ToDate { get; set; } + public TimeSpan CurrentUtcOffset { get; set; } = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); public bool BreakByPatrol { get; set; } = false; public bool GroupByMember { get; set; } = false; public bool FormatLikeTerrain { get; set; } = false; diff --git a/Services/ReportService.cs b/Services/ReportService.cs index d837fb1..b1d6b39 100644 --- a/Services/ReportService.cs +++ b/Services/ReportService.cs @@ -12,6 +12,7 @@ using Topo.Model.Wallchart; using Topo.Model.Progress; using Syncfusion.EJ2.Spreadsheet; +using System; namespace Topo.Services { @@ -36,6 +37,8 @@ public interface IReportService } public class ReportService : IReportService { + public TimeSpan CurrentUtcOffset { get; set; } = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); + private enum participateAssistLead { participate, @@ -112,8 +115,11 @@ private enum wallchartGroups Color.FromArgb(156, 242, 80) }; + private bool RunningInUtc { get; set; } + public ReportService() { + RunningInUtc = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now) == TimeSpan.Zero; } public IWorkbook CreateWorkbookWithSheets(int sheetsToCreate) @@ -2347,6 +2353,14 @@ public IWorkbook GenerateTermProgramWorkbook(List eventEntries, var currentMonth = 0; foreach (var eventEntry in eventEntries) { + if (RunningInUtc) + { + // Adjust time to users local time. + // To Do: Check for daylight savings correction + eventEntry.StartDateTime = ConvertToClientLocalTime(eventEntry.StartDateTime); + eventEntry.EndDateTime = ConvertToClientLocalTime(eventEntry.EndDateTime); + } + if (currentMonth != eventEntry.StartDateTime.Month) { rowNumber++; @@ -2366,13 +2380,13 @@ public IWorkbook GenerateTermProgramWorkbook(List eventEntries, sheet.Range[rowNumber, columnNumber].BorderAround(); sheet.Range[rowNumber, columnNumber].NumberFormat = "dd/MM/yy HH:mm"; columnNumber++; - sheet.Range[rowNumber, columnNumber].Text = formatEventDate(eventEntry.StartDateTime, eventEntry.EndDateTime); + sheet.Range[rowNumber, columnNumber].Text = FormatEventDate(eventEntry.StartDateTime, eventEntry.EndDateTime); sheet.Range[rowNumber, columnNumber].BorderAround(); columnNumber++; sheet.Range[rowNumber, columnNumber].Text = ""; sheet.Range[rowNumber, columnNumber].BorderAround(); columnNumber++; - sheet.Range[rowNumber, columnNumber].Text = formatEventTime(eventEntry.StartDateTime, eventEntry.EndDateTime); + sheet.Range[rowNumber, columnNumber].Text = FormatEventTime(eventEntry.StartDateTime, eventEntry.EndDateTime); sheet.Range[rowNumber, columnNumber].BorderAround(); columnNumber++; sheet.Range[rowNumber, columnNumber].Text = eventEntry.Location; @@ -2429,7 +2443,12 @@ public IWorkbook GenerateTermProgramWorkbook(List eventEntries, } - private string formatEventDate (DateTime startDateTime, DateTime endDateTime) + private DateTime ConvertToClientLocalTime(DateTime dateTime) + { + return dateTime.AddHours(CurrentUtcOffset.Hours).AddMinutes(CurrentUtcOffset.Minutes); + } + + private string FormatEventDate (DateTime startDateTime, DateTime endDateTime) { if (startDateTime.Date == endDateTime.Date) return startDateTime.ToString("ddd d"); @@ -2437,7 +2456,7 @@ private string formatEventDate (DateTime startDateTime, DateTime endDateTime) return $"{startDateTime.ToString("ddd d")} - {endDateTime.ToString("ddd d")}"; } - private string formatEventTime(DateTime startDateTime, DateTime endDateTime) + private string FormatEventTime(DateTime startDateTime, DateTime endDateTime) { if (startDateTime.Date == endDateTime.Date) return $"{startDateTime.ToShortTimeString()} - {endDateTime.ToShortTimeString()}"; diff --git a/Topo/Services/ReportService.cs b/Topo/Services/ReportService.cs index cf8810e..d84e10f 100644 --- a/Topo/Services/ReportService.cs +++ b/Topo/Services/ReportService.cs @@ -232,7 +232,7 @@ public async Task GetAdditionalAwardsReport(string groupName, string sec public async Task GetApprovalsReport(string groupName, string section, string unitName, OutputType outputType, string serialisedReportData, DateTime fromDate, DateTime toDate, bool groupByMember) { - var reportGenerationRequest = new ReportGenerationRequest() + var reportGenerationRequest = new ReportGenerationRequest() { ReportType = ReportType.Approvals, GroupName = groupName, @@ -283,7 +283,13 @@ public async Task GetTermProgramReport(string groupName, string section, private async Task CallReportGeneratorFunction(ReportGenerationRequest reportGenerationRequest) { - HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Put, "https://gkgfntjuhcuc3qtjmohaaxigwe0uevae.lambda-url.ap-southeast-2.on.aws/"); +#if DEBUG + string functionUrl = "https://57aqgtwtgggsk47rtvpgqifima0tvhwy.lambda-url.ap-southeast-2.on.aws/"; +#else + string functionUrl = "https://qwhcdbhrempok4kpmk6utzavxq0zjzha.lambda-url.ap-southeast-2.on.aws/"; +#endif + string functionUrlLatest = "https://gkgfntjuhcuc3qtjmohaaxigwe0uevae.lambda-url.ap-southeast-2.on.aws/"; + HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Put, functionUrl); var content = JsonConvert.SerializeObject(reportGenerationRequest); httpRequest.Content = new StringContent(content, Encoding.UTF8, "application/json"); httpRequest.Headers.Add("accept", "application/json, text/plain, */*"); diff --git a/TopoReportFunction/Function.cs b/TopoReportFunction/Function.cs index 7270b3c..d680295 100644 --- a/TopoReportFunction/Function.cs +++ b/TopoReportFunction/Function.cs @@ -37,7 +37,7 @@ public string FunctionHandler(APIGatewayProxyRequest request, ILambdaContext con { try { - System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-AU"); + CultureInfo cultureInfo = new("en-AU"); CultureInfo.DefaultThreadCurrentCulture = cultureInfo; CultureInfo.DefaultThreadCurrentUICulture = cultureInfo; @@ -49,6 +49,7 @@ public string FunctionHandler(APIGatewayProxyRequest request, ILambdaContext con if (reportGenerationRequest != null) { var workbook = reportService.CreateWorkbookWithSheets(1); + reportService.CurrentUtcOffset = reportGenerationRequest.CurrentUtcOffset; switch (reportGenerationRequest.ReportType) { case ReportType.MemberList: