- Rename InvoiceMaster.* to FiscalFlow.* namespace - Upgrade from .NET 8 to .NET 10 - Update all NuGet packages to latest versions - Update C# language version to 14.0
164 lines
5.1 KiB
C#
164 lines
5.1 KiB
C#
namespace FiscalFlow.Core.Entities;
|
|
|
|
public enum InvoiceStatus
|
|
{
|
|
Pending,
|
|
Uploading,
|
|
Processing,
|
|
Preview,
|
|
Importing,
|
|
Imported,
|
|
Failed
|
|
}
|
|
|
|
public enum SupplierMatchAction
|
|
{
|
|
UseExisting,
|
|
CreateNew,
|
|
SuggestMatch
|
|
}
|
|
|
|
public class Invoice : BaseEntity
|
|
{
|
|
public Guid ConnectionId { get; private set; }
|
|
public AccountingConnection Connection { get; private set; } = null!;
|
|
public string Provider { get; private set; } = string.Empty;
|
|
|
|
public string OriginalFilename { get; private set; } = string.Empty;
|
|
public string StoragePath { get; private set; } = string.Empty;
|
|
public long? FileSize { get; private set; }
|
|
public string? FileHash { get; private set; }
|
|
|
|
public string? ExtractionData { get; private set; }
|
|
public decimal? ExtractionConfidence { get; private set; }
|
|
|
|
public string? ExtractedSupplierName { get; private set; }
|
|
public string? ExtractedSupplierOrgNumber { get; private set; }
|
|
public string? ExtractedInvoiceNumber { get; private set; }
|
|
public DateTime? ExtractedInvoiceDate { get; private set; }
|
|
public DateTime? ExtractedDueDate { get; private set; }
|
|
public decimal? ExtractedAmountTotal { get; private set; }
|
|
public decimal? ExtractedAmountVat { get; private set; }
|
|
public int? ExtractedVatRate { get; private set; }
|
|
public string? ExtractedOcrNumber { get; private set; }
|
|
public string? ExtractedBankgiro { get; private set; }
|
|
public string? ExtractedPlusgiro { get; private set; }
|
|
public string ExtractedCurrency { get; private set; } = "SEK";
|
|
|
|
public string? SupplierNumber { get; private set; }
|
|
public decimal? SupplierMatchConfidence { get; private set; }
|
|
public SupplierMatchAction? SupplierMatchAction { get; private set; }
|
|
|
|
public string? VoucherSeries { get; private set; }
|
|
public string? VoucherNumber { get; private set; }
|
|
public string? VoucherUrl { get; private set; }
|
|
public string? VoucherRows { get; private set; }
|
|
|
|
public InvoiceStatus Status { get; private set; } = InvoiceStatus.Pending;
|
|
public string? ErrorMessage { get; private set; }
|
|
public string? ErrorCode { get; private set; }
|
|
|
|
public Guid? ReviewedBy { get; private set; }
|
|
public DateTime? ReviewedAt { get; private set; }
|
|
|
|
public string? AttachmentId { get; private set; }
|
|
public string? AttachmentUrl { get; private set; }
|
|
public DateTime? ProcessedAt { get; private set; }
|
|
|
|
public static Invoice Create(
|
|
Guid connectionId,
|
|
string provider,
|
|
string originalFilename,
|
|
string storagePath,
|
|
long? fileSize = null,
|
|
string? fileHash = null)
|
|
{
|
|
return new Invoice
|
|
{
|
|
ConnectionId = connectionId,
|
|
Provider = provider,
|
|
OriginalFilename = originalFilename,
|
|
StoragePath = storagePath,
|
|
FileSize = fileSize,
|
|
FileHash = fileHash,
|
|
Status = InvoiceStatus.Uploading
|
|
};
|
|
}
|
|
|
|
public void SetExtractionData(
|
|
string extractionData,
|
|
decimal confidence,
|
|
string? supplierName,
|
|
string? supplierOrgNumber,
|
|
string? invoiceNumber,
|
|
DateTime? invoiceDate,
|
|
DateTime? dueDate,
|
|
decimal? amountTotal,
|
|
decimal? amountVat,
|
|
int? vatRate,
|
|
string? ocrNumber,
|
|
string? bankgiro,
|
|
string? plusgiro,
|
|
string currency = "SEK")
|
|
{
|
|
ExtractionData = extractionData;
|
|
ExtractionConfidence = confidence;
|
|
ExtractedSupplierName = supplierName;
|
|
ExtractedSupplierOrgNumber = supplierOrgNumber;
|
|
ExtractedInvoiceNumber = invoiceNumber;
|
|
ExtractedInvoiceDate = invoiceDate;
|
|
ExtractedDueDate = dueDate;
|
|
ExtractedAmountTotal = amountTotal;
|
|
ExtractedAmountVat = amountVat;
|
|
ExtractedVatRate = vatRate;
|
|
ExtractedOcrNumber = ocrNumber;
|
|
ExtractedBankgiro = bankgiro;
|
|
ExtractedPlusgiro = plusgiro;
|
|
ExtractedCurrency = currency;
|
|
Status = InvoiceStatus.Preview;
|
|
}
|
|
|
|
public void SetSupplierMatch(string supplierNumber, decimal confidence, SupplierMatchAction action)
|
|
{
|
|
SupplierNumber = supplierNumber;
|
|
SupplierMatchConfidence = confidence;
|
|
SupplierMatchAction = action;
|
|
}
|
|
|
|
public void SetVoucher(string series, string number, string url, string rows)
|
|
{
|
|
VoucherSeries = series;
|
|
VoucherNumber = number;
|
|
VoucherUrl = url;
|
|
VoucherRows = rows;
|
|
}
|
|
|
|
public void SetStatus(InvoiceStatus status)
|
|
{
|
|
Status = status;
|
|
if (status == InvoiceStatus.Imported)
|
|
{
|
|
ProcessedAt = DateTime.UtcNow;
|
|
}
|
|
}
|
|
|
|
public void SetError(string errorCode, string errorMessage)
|
|
{
|
|
ErrorCode = errorCode;
|
|
ErrorMessage = errorMessage;
|
|
Status = InvoiceStatus.Failed;
|
|
}
|
|
|
|
public void SetReviewed(Guid reviewedBy)
|
|
{
|
|
ReviewedBy = reviewedBy;
|
|
ReviewedAt = DateTime.UtcNow;
|
|
}
|
|
|
|
public void SetAttachment(string attachmentId, string attachmentUrl)
|
|
{
|
|
AttachmentId = attachmentId;
|
|
AttachmentUrl = attachmentUrl;
|
|
}
|
|
}
|