Refactored `FinancialInvoice` to include new properties (`Description`, `PublicId`, `IsActive`) and methods for managing items and statuses. Introduced `FinancialInvoiceItem` for invoice itemization. Updated `PaymentTransaction` to reference `FinancialInvoice`. Enhanced repository and application layers with CRUD operations, advanced search functionality, and integration with contracts. Updated `CompanyContext` with `DbSet<FinancialInvoices>` and `DbSet<FinancialInvoiceItem>`. Created new database tables for `FinancialInvoices` and `FinancialInvoiceItem`, and updated relationships with `PaymentTransactions`. Added DTOs for invoice creation, editing, and searching. Registered `IFinancialInvoiceRepository` for dependency injection.
98 lines
2.3 KiB
C#
98 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime;
|
|
using _0_Framework.Domain;
|
|
using Company.Domain.FinancialStatmentAgg;
|
|
using Company.Domain.FinancialTransactionAgg;
|
|
using Company.Domain.PaymentTransactionAgg;
|
|
using CompanyManagment.App.Contracts.FinancialInvoice;
|
|
|
|
namespace Company.Domain.FinancialInvoiceAgg;
|
|
|
|
public class FinancialInvoice : EntityBase
|
|
{
|
|
|
|
public string Description { get; set; }
|
|
public FinancialInvoiceStatus Status { get; private set; }
|
|
public DateTime? PaidAt { get; private set; }
|
|
public double Amount { get; private set; }
|
|
public Guid PublicId { get; private set; }
|
|
public bool IsActive { get; set; }
|
|
|
|
public List<PaymentTransaction> PaymentTransactions { get; private set; }
|
|
public long ContractingPartyId { get; private set; }
|
|
|
|
public List<FinancialInvoiceItem> Items { get; private set; }
|
|
|
|
public FinancialInvoice(double amount, long contractingPartyId, string description)
|
|
{
|
|
Status = FinancialInvoiceStatus.Unpaid;
|
|
Amount = amount;
|
|
PublicId = Guid.NewGuid();
|
|
ContractingPartyId = contractingPartyId;
|
|
Description = description;
|
|
IsActive = true;
|
|
Items = [];
|
|
PaymentTransactions = [];
|
|
}
|
|
|
|
public void AddItem(FinancialInvoiceItem item)
|
|
{
|
|
Items ??= [];
|
|
|
|
Items.Add(item);
|
|
}
|
|
|
|
public void SetItems(List<FinancialInvoiceItem> items)
|
|
{
|
|
Items = items;
|
|
}
|
|
|
|
public void SetPaid(DateTime paidAt)
|
|
{
|
|
Status = FinancialInvoiceStatus.Paid;
|
|
PaidAt = paidAt;
|
|
}
|
|
public void SetUnpaid()
|
|
{
|
|
Status = FinancialInvoiceStatus.Unpaid;
|
|
PaidAt = null;
|
|
}
|
|
public void SetCancelled()
|
|
{
|
|
Status = FinancialInvoiceStatus.Cancelled;
|
|
PaidAt = null;
|
|
}
|
|
public void SetRefunded()
|
|
{
|
|
Status = FinancialInvoiceStatus.Refunded;
|
|
PaidAt = null;
|
|
}
|
|
|
|
public void DeActivate()
|
|
{
|
|
IsActive = false;
|
|
}
|
|
|
|
}
|
|
|
|
public class FinancialInvoiceItem : EntityBase
|
|
{
|
|
|
|
public string Description { get; private set; }
|
|
public double Amount { get; private set; }
|
|
public FinancialInvoiceItemType Type { get; set; }
|
|
public long EntityId { get; set; }
|
|
public FinancialInvoice FinancialInvoice { get; set; }
|
|
public long FinancialInvoiceId { get; set; }
|
|
public FinancialInvoiceItem(string description, double amount, long financialInvoiceId, FinancialInvoiceItemType type, long entityId)
|
|
{
|
|
Description = description;
|
|
Amount = amount;
|
|
FinancialInvoiceId = financialInvoiceId;
|
|
Type = type;
|
|
EntityId = entityId;
|
|
}
|
|
}
|
|
|