Kleinunternehmer Mode

This commit is contained in:
Andre Beging
2024-11-21 15:28:04 +01:00
parent 1211b789bc
commit c21e1f0978
4 changed files with 103 additions and 18 deletions

View File

@@ -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");
});
});