دریافت صورتحساب
@inject IJSRuntime JS
@inject HttpClientController hc;
@layout EmptyLayout
@page "/InvoiceReport/{ExternalAccessCode}"
@using Front.Services
@code {
[Inject] protected PreloadService PreloadService { get; set; } = default!;
List messages = new List();
[Parameter] public string ExternalAccessCode { get; set; }
protected async override Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(ExternalAccessCode))
await ShowReport();
await base.OnParametersSetAsync();
}
}
@functions {
private void ShowMessage(ToastType toastType, string msg) => messages.Add(CreateToastMessage(toastType, msg));
private ToastMessage CreateToastMessage(ToastType toastType, string msg)
=> new ToastMessage
{
Type = toastType,
Message = msg,
};
private async Task ShowReport()
{
PreloadService.Show(SpinnerColor.Dark);
var rsp = await hc.Get($"Invoice/GetReportByExternalAccessCode/{ExternalAccessCode}");
if (rsp.IsSuccessStatusCode)
{
var str = await rsp.Content.ReadAsStringAsync();
if (string.IsNullOrEmpty(str))
ShowMessage(ToastType.Warning, "مشکلی در ساخت فایل رخ داده لطفا مجدد تلاش کنید");
else
await DownloadFileFromStream(str, $"{ExternalAccessCode}.pdf");
}
else if (rsp.StatusCode == System.Net.HttpStatusCode.NotFound)
ShowMessage(ToastType.Warning, "فاکتوری یافت نشد");
else ShowMessage(ToastType.Warning, "خطایی در چاپ فاکتور");
PreloadService.Hide();
}
//for download
private Stream GetFileStream(byte[] bytes)
{
var fileStream = new MemoryStream(bytes);
return fileStream;
}
private async Task DownloadFileFromStream(string Base64, string FileName)
{
byte[] bytes = System.Convert.FromBase64String(Base64);
var fileStream = GetFileStream(bytes);
// var fileName = "log.bin";
using var streamRef = new DotNetStreamReference(stream: fileStream);
await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef);
}
}