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