| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- using Domain.Entities.Donations.ValueObject;
- using Domain.Entities.Members;
- namespace Domain.Entities.Donations;
- public class WithdrawalRequest
- {
- [ForeignKey(nameof(ChannelID))]
- public virtual Channel? Channel { get; private set; }
- [ForeignKey(nameof(MemberID))]
- public virtual Member? Member { get; private set; }
- [Key]
- public int ID { get; private set; }
- public int ChannelID { get; private set; }
- public int MemberID { get; private set; }
- public int RequestedAmount { get; private set; }
- public int IncomeTax { get; private set; }
- public int LocalTax { get; private set; }
- public int WithholdingTax { get; private set; }
- public int NetAmount { get; private set; }
- public WithdrawalStatus Status { get; private set; } = WithdrawalStatus.Pending;
- public string BankCode { get; private set; } = default!;
- public string BankName { get; private set; } = default!;
- public string AccountNumber { get; private set; } = default!;
- public string AccountHolder { get; private set; } = default!;
- public DateTime RequestedAt { get; private set; } = DateTime.UtcNow;
- public DateTime? ProcessedAt { get; private set; }
- public string? RejectedReason { get; private set; }
- public string? AdminMemo { get; private set; }
- private WithdrawalRequest() { }
- public static WithdrawalRequest Create(
- int channelID,
- int memberID,
- int requestedAmount,
- string bankCode,
- string bankName,
- string accountNumber,
- string accountHolder
- ) {
- var incomeTax = (int)Math.Floor(requestedAmount * 3m / 100m);
- var localTax = (int)Math.Floor(requestedAmount * 3m / 1000m);
- var withholdingTax = incomeTax + localTax;
- return new WithdrawalRequest
- {
- ChannelID = channelID,
- MemberID = memberID,
- RequestedAmount = requestedAmount,
- IncomeTax = incomeTax,
- LocalTax = localTax,
- WithholdingTax = withholdingTax,
- NetAmount = requestedAmount - withholdingTax,
- BankCode = bankCode,
- BankName = bankName,
- AccountNumber = accountNumber,
- AccountHolder = accountHolder
- };
- }
- public void MarkProcessing(string? adminMemo = null)
- {
- Status = WithdrawalStatus.Processing;
- AdminMemo = adminMemo;
- }
- public void Complete(string? adminMemo = null)
- {
- Status = WithdrawalStatus.Completed;
- ProcessedAt = DateTime.UtcNow;
- AdminMemo = adminMemo;
- }
- public void Reject(string reason, string? adminMemo = null)
- {
- Status = WithdrawalStatus.Rejected;
- ProcessedAt = DateTime.UtcNow;
- RejectedReason = reason;
- AdminMemo = adminMemo;
- }
- }
|