diff --git a/Server/Components/Pages/InvoiceListPage.razor b/Server/Components/Pages/InvoiceListPage.razor
index f17c2f0..e022f46 100644
--- a/Server/Components/Pages/InvoiceListPage.razor
+++ b/Server/Components/Pages/InvoiceListPage.razor
@@ -1,5 +1,6 @@
@page "/"
@page "/invoices"
+@using Server.Data
@using Server.Model
@rendermode InteractiveServer
@@ -18,7 +19,18 @@
@invoice.Customer?.Name
@invoice.Items.Count Artikel
- @($"{invoice.TotalNetto:N2} €") Netto
+ @if (SettingsData.Instance.Kleinunternehmer)
+ {
+ @($"{invoice.TotalNetto:N2} €")
+ }
+ else
+ {
+
+ @($"{invoice.TotalNetto:N2} €") Netto
+ @($"{invoice.TotalBrutto:N2} €") Brutto
+
+ }
+
Bearbeiten
diff --git a/Server/Components/Pages/InvoicePage.razor b/Server/Components/Pages/InvoicePage.razor
index ca3b88a..6a5a6ba 100644
--- a/Server/Components/Pages/InvoicePage.razor
+++ b/Server/Components/Pages/InvoicePage.razor
@@ -1,4 +1,5 @@
@page "/edit/{InvoiceId}"
+@using QuestPDF
@using Server.Data
@using Server.Model
@rendermode InteractiveServer
@@ -85,18 +86,21 @@
-
+
-
-
-
- @foreach (var taxType in Enum.GetValues(typeof(TaxType)))
- {
-
- }
-
-
+ @if (!SettingsData.Instance.Kleinunternehmer)
+ {
+
+
+
+ @foreach (var taxType in Enum.GetValues(typeof(TaxType)))
+ {
+
+ }
+
+
+ }
diff --git a/Server/Model/InvoiceDocument.cs b/Server/Model/InvoiceDocument.cs
index 9ad5481..26d1a29 100644
--- a/Server/Model/InvoiceDocument.cs
+++ b/Server/Model/InvoiceDocument.cs
@@ -1,5 +1,6 @@
using System.Globalization;
using System.Net.Mime;
+using QuestPDF;
using QuestPDF.Drawing;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
@@ -39,7 +40,16 @@ namespace Server.Model
{
container.PaddingVertical(40).Column(outerColumn =>
{
- outerColumn.Item().Element(ComposeItemTable);
+ if (SettingsData.Instance.Kleinunternehmer)
+ {
+ outerColumn.Item().Element(ComposeItemTableKleinunternehmer);
+ outerColumn.Item().PaddingTop(10).Text("Im Sinne der Kleinunternehmerregelung nach § 19 UStG. enthält der ausgewiesene Betrag keine Umsatzsteuer.");
+ }
+ else
+ {
+ outerColumn.Item().Element(ComposeItemTable);
+ }
+
outerColumn.Item().Row(row =>
{
@@ -48,11 +58,15 @@ namespace Server.Model
if (!string.IsNullOrWhiteSpace(Model.Comment))
col.Item().PaddingTop(25).Element(ComposeComments);
});
-
- row.AutoItem().Column(col =>
+
+ if (!SettingsData.Instance.Kleinunternehmer)
{
- col.Item().Element(ComposeTaxTable);
- });
+ row.AutoItem().Column(col =>
+ {
+ col.Item().Element(ComposeTaxTable);
+ });
+ }
+
});
outerColumn.Spacing(5);
@@ -121,6 +135,61 @@ namespace Server.Model
table.Cell().Element(c => c.BorderTop(1).BorderColor(Colors.Black)).AlignRight().TextSmall($"{totalTax:N2} €");
});
}
+
+ private void ComposeItemTableKleinunternehmer(IContainer container)
+ {
+ container.Table(table =>
+ {
+ // Define columns
+ table.ColumnsDefinition(columns =>
+ {
+ columns.RelativeColumn(3); // Beschreibung
+ columns.ConstantColumn(20, Unit.Millimetre); // Menge
+ columns.ConstantColumn(24, Unit.Millimetre); // Einzelpreis
+ columns.ConstantColumn(24, Unit.Millimetre); // Gesamtpreis
+ });
+
+ // Describe header
+ table.Header(header =>
+ {
+ header.Cell().Element(CellStyle).Text("Beschreibung").SemiBold();
+ header.Cell().Element(CellStyle).AlignCenter().Text("Menge").SemiBold();
+ header.Cell().Element(CellStyle).AlignRight().Text("Einzelpreis").SemiBold();
+ header.Cell().Element(CellStyle).AlignRight().Text("Gesamtpreis").SemiBold();
+
+ static IContainer CellStyle(IContainer container)
+ {
+ return container.DefaultTextStyle(x => x.SemiBold()).BorderBottom(1).BorderColor(Colors.Black);
+ }
+ });
+
+ // Describe content
+ foreach (var item in Model.Items ?? [])
+ {
+
+ // Beschreibung
+ table.Cell().Element(CellStyle).Column(column =>
+ {
+ column.Item().Text(item.Name);
+ if(!string.IsNullOrWhiteSpace(item.Description))
+ column.Item().TextSmall(item.Description);
+ });
+
+ table.Cell().Element(CellStyle).AlignCenter().Text(txt => txt.Span($"{item.Quantity:N2}"));
+
+ // string as currency format
+ table.Cell().Element(CellStyle).AlignRight().Text($"{item.PriceNetto:N2} €");
+ table.Cell().Element(CellStyle).AlignRight().Text($"{item.PriceNetto * item.Quantity:N2} €");
+ }
+
+ table.Cell().ColumnSpan(3).Element(CellStyle).PaddingTop(10).Text("Rechnungsbetrag").Medium();
+ table.Cell().Element(CellStyle).PaddingTop(10).AlignRight().Text($"{Model.Items.Sum(x=> x.PriceNetto*x.Quantity):N2} €").Medium();
+
+ return;
+
+ static IContainer CellStyle(IContainer container) => container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(5);
+ });
+ }
private void ComposeItemTable(IContainer container)
{
@@ -141,7 +210,6 @@ namespace Server.Model
// Describe header
table.Header(header =>
{
-
header.Cell().Text("").SemiBold();
header.Cell().Text("").SemiBold();
header.Cell().AlignRight().Text("Einzelpreis").SemiBold();
@@ -260,7 +328,7 @@ namespace Server.Model
row.RelativeItem().AlignMiddle().PaddingRight(10, Unit.Millimetre).Background(Colors.Red.Medium).Column(col =>
{
- col.Item().AlignRight().Text("www.example.com");
+ //col.Item().AlignRight().Text("www.example.com");
});
});
diff --git a/Server/Model/InvoiceModel.cs b/Server/Model/InvoiceModel.cs
index e974293..b6566b4 100644
--- a/Server/Model/InvoiceModel.cs
+++ b/Server/Model/InvoiceModel.cs
@@ -16,6 +16,7 @@
public PaymentData? PaymentData { get; set; }
public double TotalNetto => Items?.Sum(x => x.PriceNetto*x.Quantity) ?? 0d;
+ public double TotalBrutto => Items?.Sum(x => x.PriceBrutto*x.Quantity) ?? 0d;
}
public class PaymentData