using Blazorise;
using Microsoft.AspNetCore.Components;
using QuestPDF;
using QuestPDF.Fluent;
using QuestPDF.Infrastructure;
using Server.Components.Dialogs;
using Server.Data;
using Server.Model;
namespace Server.Components.Pages
{
public partial class InvoicePage
{
#region Dependencies
[Inject]
private IModalService ModalService { get; set; } = null!;
[Inject]
private NavigationManager NavigationManager { get; set; } = null!;
#endregion
#region Parameters
///
/// Gets or sets the identifier for the invoice.
///
///
/// This property is used to uniquely identify an invoice.
/// It is a nullable string which allows handling cases where no invoice ID is provided.
///
[Parameter]
public string? InvoiceId { get; set; }
#endregion
#region Private Properties
private string? AlertMessage { get; set; }
private InvoiceModel Invoice { get; set; } = new();
#endregion
#region Override SetParametersAsync
////
public override async Task SetParametersAsync(ParameterView parameters)
{
parameters.SetParameterProperties(this);
// No invoice id
if (string.IsNullOrWhiteSpace(InvoiceId))
{
NavigationManager.NavigateTo("/");
return;
}
// Existing
var invoice = await InvoiceData.LoadAsync(InvoiceId);
if (invoice == null)
{
NavigationManager.NavigateTo("/");
return;
}
// Found
Invoice = invoice;
Settings.License = LicenseType.Community;
await CustomerData.LoadAsync();
await base.SetParametersAsync(ParameterView.Empty);
}
#endregion
#region Private Method CreateItemAsync
///
/// Asynchronously creates a new item and adds it to the current invoice.
///
/// A Task representing the asynchronous operation.
private Task CreateItemAsync()
{
Invoice.Items.Add(new());
return Task.CompletedTask;
}
#endregion
#region Private Method Generate
private async Task Generate()
{
var doc = new InvoiceDocument(new()
{
InvoiceId = "3129",
PaymentData = SettingsData.Instance.PaymentData,
Comment = SettingsData.Instance.Comment,
Customer = new()
{
Name = "DRK-Ortsverein Dreis-Tiefenbach e.V.",
Name2 = "Jutta Weber",
Street = "Feldwasserstraße 9",
Zip = "57250",
City = "Netphen"
},
Items =
[
new OrderItem
{
Name = "Schulung DRK-Cloud in Std.",
Description = "09.12.2022 - Schulungsgruppe 1",
Quantity = 5,
TaxType = TaxType.Tax19,
PriceNetto = 29
},
new OrderItem
{
Name = "Schulung DRK-Cloud in Std.",
Description = "10.12.2022 - Schulungsgruppe 2",
Quantity = 5,
TaxType = TaxType.Tax19,
PriceNetto = 29
}
]
});
doc.GeneratePdfAndShow();
}
#endregion
#region Private Method GenerateInvoiceAsync
private Task GenerateInvoiceAsync()
{
var doc = new InvoiceDocument(Invoice);
doc.GeneratePdfAndShow();
return Task.CompletedTask;
}
#endregion
#region Private Method SaveInvoiceAsync
///
/// Asynchronously saves the current invoice.
///
/// A Task representing the asynchronous save operation.
private async Task SaveInvoiceAsync()
{
AlertMessage = null;
await InvoiceData.SaveAsync(Invoice);
NavigationManager.NavigateTo("/invoices");
}
#endregion
#region Private Method SelectCustomerAsync
private async Task SelectCustomerAsync()
{
await AddressSelector.ShowAsync(ModalService, async address =>
{
Invoice.Customer = address;
await InvokeAsync(StateHasChanged);
});
}
#endregion
}
}