From ab0f15bd0ff021c164fe826b92ed95a0792f1e4b Mon Sep 17 00:00:00 2001 From: Anders Revsgaard Date: Tue, 19 Nov 2024 14:08:30 +0100 Subject: [PATCH] Send invoice without usage. --- .../Usage/TUsageInvoicingActionController.cs | 36 ++++++++++++++----- src/FoxIDs.Control/FoxIDs.Control.csproj | 2 +- .../Logic/Usage/UsageInvoicingLogic.cs | 10 ++---- .../FoxIDs.ControlClient.csproj | 2 +- src/FoxIDs.ControlClient/Pages/Usage/Usage.cs | 6 ++-- .../Pages/Usage/Usage.razor | 16 ++++----- .../Pages/Usage/UsageTenants.cs | 16 --------- .../Pages/Usage/UsageTenants.razor | 1 - .../FoxIDs.ControlShared.csproj | 2 +- .../Models/Api/Usage/UsageInvoicingAction.cs | 2 +- src/FoxIDs.Shared/FoxIDs.Shared.csproj | 2 +- .../FoxIDs.SharedBase.csproj | 2 +- src/FoxIDs/FoxIDs.csproj | 2 +- 13 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/FoxIDs.Control/Controllers/Usage/TUsageInvoicingActionController.cs b/src/FoxIDs.Control/Controllers/Usage/TUsageInvoicingActionController.cs index 9ba952a83..ed666ed91 100644 --- a/src/FoxIDs.Control/Controllers/Usage/TUsageInvoicingActionController.cs +++ b/src/FoxIDs.Control/Controllers/Usage/TUsageInvoicingActionController.cs @@ -60,9 +60,9 @@ public TUsageInvoicingActionController(FoxIDsControlSettings settings, Telemetry var mUsed = await tenantDataRepository.GetAsync(await Used.IdFormatAsync(action.TenantName, action.PeriodBeginDate.Year, action.PeriodBeginDate.Month)); - if (action.DoInvoicingAgain) + if (action.DoInvoicing) { - await DoInvoicingAgain(mUsed); + await DoInvoicing(mUsed); } else if (action.DoSendInvoiceAgain) { @@ -99,17 +99,37 @@ public TUsageInvoicingActionController(FoxIDsControlSettings settings, Telemetry } } - private async Task DoInvoicingAgain(Used mUsed) + private async Task DoInvoicing(Used mUsed) { - if ((mUsed.IsUsageCalculated || mUsed.Items?.Count() > 0) && !mUsed.IsDone) + var mTenant = await tenantDataRepository.GetAsync(await Tenant.IdFormatAsync(mUsed.TenantName)); + + if (mTenant.EnableUsage) { - var mTenant = await tenantDataRepository.GetAsync(await Tenant.IdFormatAsync(mUsed.TenantName)); - using var cancellationTokenSource = new CancellationTokenSource(); - await usageInvoicingLogic.DoInvoicingAsync(mTenant, mUsed, cancellationTokenSource.Token); + if ((mUsed.IsUsageCalculated || mUsed.Items?.Count() > 0) && !mUsed.IsDone) + { + using var cancellationTokenSource = new CancellationTokenSource(); + await usageInvoicingLogic.DoInvoicingAsync(mTenant, mUsed, cancellationTokenSource.Token); + } + else + { + throw new Exception("The usage is not calculated or no items exits or it is already done and can not be invoiced."); + } } else { - throw new Exception("The usage is not calculated or already done and can not be invoiced again."); + if(mUsed.IsDone) + { + throw new Exception("The usage is already done and can not be invoiced."); + } + else if (mUsed.Items?.Count() > 0) + { + using var cancellationTokenSource = new CancellationTokenSource(); + await usageInvoicingLogic.DoInvoicingAsync(mTenant, mUsed, cancellationTokenSource.Token, doInvoicing: true); + } + else + { + logger.Event($"Usage, no items to invoice for tenant '{mUsed.TenantName}'."); + } } } diff --git a/src/FoxIDs.Control/FoxIDs.Control.csproj b/src/FoxIDs.Control/FoxIDs.Control.csproj index 0042d6a8d..1e5c5127f 100644 --- a/src/FoxIDs.Control/FoxIDs.Control.csproj +++ b/src/FoxIDs.Control/FoxIDs.Control.csproj @@ -2,7 +2,7 @@ net8.0 - 1.11.16 + 1.11.17 FoxIDs Anders Revsgaard ITfoxtec diff --git a/src/FoxIDs.Control/Logic/Usage/UsageInvoicingLogic.cs b/src/FoxIDs.Control/Logic/Usage/UsageInvoicingLogic.cs index 60a4bb79f..0385eb224 100644 --- a/src/FoxIDs.Control/Logic/Usage/UsageInvoicingLogic.cs +++ b/src/FoxIDs.Control/Logic/Usage/UsageInvoicingLogic.cs @@ -42,9 +42,9 @@ public UsageInvoicingLogic(FoxIDsControlSettings settings, TelemetryScopedLogger this.usageMolliePaymentLogic = usageMolliePaymentLogic; } - public async Task DoInvoicingAsync(Tenant tenant, Used used, CancellationToken stoppingToken) + public async Task DoInvoicingAsync(Tenant tenant, Used used, CancellationToken stoppingToken, bool doInvoicing = false) { - if(!tenant.EnableUsage) + if(!doInvoicing && !tenant.EnableUsage) { logger.Event($"Usage, invoicing for tenant '{used.TenantName}' not enabled."); return false; @@ -251,14 +251,10 @@ private async Task CreateInvoiceAsync(Tenant tenant, Used used, bool is }; var usageSettings = await GetUsageSettingsAsync(); - var plan = tenant.PlanName.IsNullOrEmpty() ? null : await masterDataRepository.GetAsync(await Plan.IdFormatAsync(tenant.PlanName)); + var plan = tenant.EnableUsage && !tenant.PlanName.IsNullOrEmpty() ? await masterDataRepository.GetAsync(await Plan.IdFormatAsync(tenant.PlanName)) : null; stoppingToken.ThrowIfCancellationRequested(); CalculateInvoice(used, plan, invoice, tenant.IncludeVat, GetExchangesRate(invoice.Currency, usageSettings.CurrencyExchanges)); - if(invoice.Price <= 0) - { - return null; - } invoice.InvoiceNumber = await GetInvoiceNumberAsync(usageSettings); diff --git a/src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj b/src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj index dce842866..55bd977fd 100644 --- a/src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj +++ b/src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj @@ -2,7 +2,7 @@ net8.0 - 1.11.16 + 1.11.17 FoxIDs.Client Anders Revsgaard ITfoxtec diff --git a/src/FoxIDs.ControlClient/Pages/Usage/Usage.cs b/src/FoxIDs.ControlClient/Pages/Usage/Usage.cs index a55f24f3a..2a67c7847 100644 --- a/src/FoxIDs.ControlClient/Pages/Usage/Usage.cs +++ b/src/FoxIDs.ControlClient/Pages/Usage/Usage.cs @@ -92,7 +92,7 @@ private void ShowCreateUsage() usedList.Add(used); } - public bool ShowDoInvoicingAgainButton(GeneralUsedViewModel used) => (used.IsUsageCalculated || used.HasItems) && !used.IsDone; + public bool ShowDoInvoicingButton(GeneralUsedViewModel used) => (used.IsUsageCalculated || used.HasItems) && !used.IsDone; public bool ShowSendInvoiceAgainButton(GeneralUsedViewModel used) => used.IsInvoiceReady && (used.Invoices?.LastOrDefault()?.IsCardPayment != true || used.PaymentStatus == UsagePaymentStatus.Paid); @@ -285,12 +285,12 @@ private async Task DeleteUsedAsync(GeneralUsedViewModel generalUsed) } } - private async Task DoInvoicingAgainAsync(GeneralUsedViewModel generalUsed) + private async Task DoInvoicingAsync(GeneralUsedViewModel generalUsed) { generalUsed.InvoicingActionButtonDisabled = true; try { - var usedResult = await TenantService.UsageInvoicingActionAsync(new UsageInvoicingAction { TenantName = generalUsed.TenantName, PeriodBeginDate = generalUsed.PeriodBeginDate, PeriodEndDate = generalUsed.PeriodEndDate, DoInvoicingAgain = true }); + var usedResult = await TenantService.UsageInvoicingActionAsync(new UsageInvoicingAction { TenantName = generalUsed.TenantName, PeriodBeginDate = generalUsed.PeriodBeginDate, PeriodEndDate = generalUsed.PeriodEndDate, DoInvoicing = true }); UpdateGeneralModel(generalUsed, usedResult); } catch (TokenUnavailableException) diff --git a/src/FoxIDs.ControlClient/Pages/Usage/Usage.razor b/src/FoxIDs.ControlClient/Pages/Usage/Usage.razor index 220b4e12c..e39ca2efb 100644 --- a/src/FoxIDs.ControlClient/Pages/Usage/Usage.razor +++ b/src/FoxIDs.ControlClient/Pages/Usage/Usage.razor @@ -195,18 +195,18 @@ }