Add ZUGFeRD parsing and invoice storage support

Enhanced `ZugferdInvoice` model with default string values to prevent nulls. Updated `Upload.cshtml` to display parsed invoice data.

Refactored `Upload.cshtml.cs` to handle ZUGFeRD XML parsing and database storage. Introduced `ImportedInvoice` property and buffered file processing with `MemoryStream`.

Extended `ZugferdParserService` to support ZUGFeRD v1, v1.0 FeRD, and v2/Factur-X. Added version-specific parsing methods and namespaces. Improved date and decimal parsing for robustness.

Added database migration (`20260522084606_InitialCreate`) to define `ZugferdInvoices` table. Updated migration snapshot to reflect schema changes.

Fixed localization issue in `Upload.cshtml.cs` error message.
This commit is contained in:
OlgunR
2026-05-22 14:01:07 +02:00
parent d351a3d577
commit c45e837c2b
7 changed files with 361 additions and 30 deletions

View File

@@ -0,0 +1,46 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace DXApp.TemplateKitProject.Migrations
{
/// <inheritdoc />
public partial class InitialCreate : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "ZugferdInvoices",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
InvoiceNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
InvoiceDate = table.Column<DateTime>(type: "datetime2", nullable: false),
SellerName = table.Column<string>(type: "nvarchar(max)", nullable: true),
SellerTaxId = table.Column<string>(type: "nvarchar(max)", nullable: true),
BuyerName = table.Column<string>(type: "nvarchar(max)", nullable: true),
TotalAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
TaxAmount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
CurrencyCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
Iban = table.Column<string>(type: "nvarchar(max)", nullable: true),
RawXml = table.Column<string>(type: "nvarchar(max)", nullable: true),
ImportedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
SourceType = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ZugferdInvoices", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ZugferdInvoices");
}
}
}