88 lines
4.7 KiB
C#
88 lines
4.7 KiB
C#
using IgniteUI.Blazor.Controls;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.JSInterop;
|
|
using OI.Metrology.Shared.DataModels;
|
|
using OI.Metrology.Shared.Models.Stateless;
|
|
using System.Net;
|
|
|
|
namespace OI.Metrology.ClientHub.Pages;
|
|
|
|
public partial class Export
|
|
{
|
|
|
|
protected TimeSpan? _TimeSpan;
|
|
protected TimeSpan? _DateRange;
|
|
protected ToolTypeNameId? _ToolTypeNameId;
|
|
protected ToolTypeNameId[]? _ToolTypeNameIdCollection;
|
|
|
|
protected IgbIcon? IconRef { get; set; }
|
|
[Inject] protected HttpClient? HttpClient { get; set; }
|
|
[Inject] protected IJSRuntime? JSRuntime { get; set; }
|
|
[Inject] protected Models.AppSettings? AppSettings { get; set; }
|
|
[Inject] protected ILogger<AwaitingDisposition>? Logger { get; set; }
|
|
|
|
protected Func<ToolTypeNameId, string> _ConvertFunc = toolTypeNameId => string.Concat(toolTypeNameId?.ToolTypeName);
|
|
|
|
protected override Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender && IconRef is not null)
|
|
{
|
|
// _ = IconRef.EnsureReady().ContinueWith(new Action<Task>((e) =>
|
|
// IconRef.RegisterIconAsync("build", "https://unpkg.com/material-design-icons@3.0.1/action/svg/production/ic_build_24px.svg", "material")));
|
|
const string buildIcon = "<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'><path d='M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z'/></svg>";
|
|
// const string review = "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-labelledby='crcode-review-desc crcode-review-title'><title id='crcode-review-title'>Code Review Icon</title><desc id='crcode-review-desc'>A picture showing encircled angle brackets with a dot between them.</desc><path d='M12 2a10 10 0 1010 10A10 10 0 0012 2zM9 14.207l-1 1L4.793 12 8 8.793l1 1L6.793 12zM12 14a2 2 0 112-2 2 2 0 01-2 2zm4 1.207l-1-1L17.207 12 15 9.793l1-1L19.207 12z'/></svg>";
|
|
_ = IconRef.EnsureReady().ContinueWith(new Action<Task>((e) =>
|
|
IconRef.RegisterIconFromTextAsync("build", buildIcon, "material")));
|
|
}
|
|
if (firstRender)
|
|
{
|
|
if (JSRuntime is null)
|
|
throw new NullReferenceException(nameof(JSRuntime));
|
|
if (AppSettings is null)
|
|
throw new NullReferenceException(nameof(AppSettings));
|
|
return JSRuntime.InvokeVoidAsync("initExport", AppSettings.ApiUrl, DateTime.Now.AddMonths(-1), DateTime.Now).AsTask();
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_ToolTypeNameId ??= new();
|
|
_TimeSpan ??= new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 00);
|
|
_DateRange ??= new TimeSpan(DateTime.Now.Date.Ticks - DateTime.Now.AddMonths(-1).Date.Ticks);
|
|
if (Logger is null)
|
|
throw new NullReferenceException(nameof(Logger));
|
|
if (HttpClient is null)
|
|
throw new NullReferenceException(nameof(HttpClient));
|
|
string controllerName = IToolTypesController<object>.GetRouteName();
|
|
try
|
|
{
|
|
Result<ToolTypeNameId[]>? result = await HttpClient.GetFromJsonAsync<Result<ToolTypeNameId[]>>($"api/{controllerName}");
|
|
if (result is not null)
|
|
_ToolTypeNameIdCollection = result.Results;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
string json = await HttpClient.GetStringAsync($"api/{controllerName}");
|
|
Logger.LogInformation(message: json);
|
|
}
|
|
}
|
|
|
|
protected async Task DownloadAsync()
|
|
{
|
|
if (JSRuntime is null)
|
|
throw new NullReferenceException(nameof(JSRuntime));
|
|
if (HttpClient is null)
|
|
throw new NullReferenceException(nameof(HttpClient));
|
|
if (_TimeSpan is null || _DateRange is null || _ToolTypeNameId is null || _ToolTypeNameIdCollection is null || _ToolTypeNameId.ToolTypeName is null || _DateRange is null)
|
|
return;
|
|
TimeSpan timeSpan = new(_TimeSpan.Value.Ticks);
|
|
string controllerName = IToolTypesController<object>.GetRouteName();
|
|
string endTime = _DateRange.Value.Add(timeSpan).ToString();
|
|
string startTime = _DateRange.Value.Add(new TimeSpan(_TimeSpan.Value.Ticks)).ToString();
|
|
string fileName = $"Export_{_ToolTypeNameId.ToolTypeName}_{startTime:yyyyMMddHHmm}_to_{endTime:yyyyMMddHHmm}.csv";
|
|
string query = $"datebegin={startTime:MM/dd/yyyy hh:mm tt}&dateend={endTime:MM/dd/yyyy hh:mm tt}&filename={WebUtility.UrlEncode(fileName)}";
|
|
await JSRuntime.InvokeVoidAsync("triggerFileDownload", fileName, $"{HttpClient.BaseAddress}api/{controllerName}/{_ToolTypeNameId.ID}/csv?{query}");
|
|
}
|
|
|
|
} |