109 lines
2.6 KiB
C#
109 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using _0_Framework.Domain;
|
|
using Company.Domain.PaymentTransactionAgg;
|
|
using CompanyManagment.App.Contracts.FinancialInvoice;
|
|
|
|
namespace Company.Domain.FinancialInvoiceAgg;
|
|
|
|
public class FinancialInvoice : EntityBase
|
|
{
|
|
|
|
public string InvoiceNumber { get; private set; }
|
|
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)
|
|
{
|
|
InvoiceNumber = GenerateInvoiceNumber();
|
|
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 void SetInvoiceNumber(string invoiceNumber)
|
|
{
|
|
InvoiceNumber = invoiceNumber;
|
|
}
|
|
|
|
private string GenerateInvoiceNumber()
|
|
{
|
|
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
var random = new Random().Next(1000, 9999);
|
|
return $"GZ_{timestamp}{random}";
|
|
}
|
|
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|