private ExecutionResult CloseDayHandler(CloseDayRequest request, ExecutionContext context) { ExecutionResult <List <string> > result = context.PreviousResult as ExecutionResult <List <string> >; result = result ?? new ExecutionResult <List <string> > { TypedResult = new List <string>() }; var operations = new List <string>(); var deposits = AdbRepository.DepositContractData.GetAllDeposits(); foreach (var deposit in deposits) { DateTime lastProcessingTime = deposit.ProcessingTime ?? deposit.AssignDate; TimeSpan delta = (DateTime)request.Value - lastProcessingTime; if (delta.Days >= 30 && (deposit.AssignDate - (DateTime)request.Value).Days < 30 * deposit.Period) { decimal summ = deposit.PercentValue / 365 * delta.Days / 100 * deposit.Summ; switch ((DepositContractType)deposit.DepositType) { case DepositContractType.DepositType1: { AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = deposit.CurrencyType, CreateTime = DateTime.Now, FromAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)deposit.CurrencyType), ToAccount = deposit.PercentAccountId }); operations.Add($"{DateTime.Now} Процент по депозиту №{deposit.Id} переведен на счет {deposit.PercentAccountIdObject.AccountId}"); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = deposit.CurrencyType, CreateTime = DateTime.Now, FromAccount = deposit.PercentAccountId, ToAccount = TransactionHistoryBlo.GetRepositoryAccount((CurrencyTypeEnum)deposit.CurrencyType) }); operations.Add($"{DateTime.Now} Процент по депозиту №{deposit.Id} получен в кассе"); } break; case DepositContractType.DepositType2: { AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = deposit.CurrencyType, CreateTime = DateTime.Now, FromAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)deposit.CurrencyType), ToAccount = deposit.PercentAccountId }); operations.Add($"{DateTime.Now} Процент по депозиту №{deposit.Id} переведен на счет {deposit.PercentAccountIdObject.AccountId}"); var percentAccount = AdbRepository.AccountData.GetEntityById(deposit.PercentAccountId); percentAccount.Balance += summ; AdbRepository.AccountData.Save(percentAccount); } break; } deposit.ProcessingTime = DateTime.Now; AdbRepository.DepositContractData.Save(deposit); } if (((DateTime)request.Value - deposit.AssignDate).Days == 30 * deposit.Period) { AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = deposit.Summ, CurrencyType = deposit.CurrencyType, CreateTime = DateTime.Now, FromAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)deposit.CurrencyType), ToAccount = deposit.MainAccountId }); operations.Add($"{DateTime.Now} Депозит №{deposit.Id} закрыт"); } } result.TypedResult.AddRange(operations); return(result); }
private ExecutionResult CloseDayHandler(CloseDayRequest request, ExecutionContext context) { ExecutionResult <List <string> > result = context.PreviousResult as ExecutionResult <List <string> >; result = result ?? new ExecutionResult <List <string> > { TypedResult = new List <string>() }; var operations = new List <string>(); var credits = AdbRepository.CreditContractData.GetAllCredits(); foreach (var credit in credits) { DateTime lastProcessingTime = credit.ProcessingTime ?? credit.AssignDate; TimeSpan delta = (DateTime)request.Value - lastProcessingTime; if (delta.Days >= 30 && ((DateTime)request.Value - credit.AssignDate).Days < 30 * credit.Period) { switch ((CreditContractType)credit.CreditType) { case CreditContractType.CreditType1: { decimal percent = (credit.PercentValue / 365 * delta.Days); decimal v = (decimal)Math.Pow(((double)(1 + percent)), credit.Period); decimal summ = credit.Summ * percent * v / (v - 1); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = null, ToAccount = TransactionHistoryBlo.GetRepositoryAccount((CurrencyTypeEnum)credit.CurrencyType) }); operations.Add($"{DateTime.Now} Оплата по кредиту №{credit.Id} внесена в кассу"); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = credit.PercentAccountId, ToAccount = TransactionHistoryBlo.GetRepositoryAccount((CurrencyTypeEnum)credit.CurrencyType) }); operations.Add($"{DateTime.Now} Оплата по кредиту №{credit.Id} зачислена на счет {credit.PercentAccountIdObject.AccountId}"); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = credit.PercentAccountId, ToAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)credit.CurrencyType) }); var bankAccount = AdbRepository.AccountData.GetEntityById(TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)credit.CurrencyType)); bankAccount.Balance += summ; AdbRepository.AccountData.Save(bankAccount); operations.Add($"{DateTime.Now} Оплата по кредиту №{credit.Id} зачислена на счет банка {bankAccount.AccountId}"); } break; case CreditContractType.CreditType2: { decimal summ = credit.PercentValue / 365 * delta.Days / 100 * credit.Summ; AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = null, ToAccount = TransactionHistoryBlo.GetRepositoryAccount((CurrencyTypeEnum)credit.CurrencyType) }); operations.Add($"{DateTime.Now} Процент по кредиту №{credit.Id} внесен в кассу"); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = TransactionHistoryBlo.GetRepositoryAccount((CurrencyTypeEnum)credit.CurrencyType), ToAccount = credit.PercentAccountId }); operations.Add($"{DateTime.Now} Процент по кредиту №{credit.Id} переведен на процентный счет клиента {credit.PercentAccountIdObject.AccountId}"); AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = summ, CurrencyType = credit.CurrencyType, CreateTime = DateTime.Now, FromAccount = credit.PercentAccountId, ToAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)credit.CurrencyType) }); operations.Add($"{DateTime.Now} Процент по кредиту №{credit.Id} погашен"); var bankAccount = AdbRepository.AccountData.GetEntityById(TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)credit.CurrencyType)); bankAccount.Balance += summ; AdbRepository.AccountData.Save(bankAccount); operations.Add($"{DateTime.Now} Оплата по кредиту №{credit.Id} зачислена на счет банка {bankAccount.AccountId}"); } break; } credit.ProcessingTime = DateTime.Now; AdbRepository.CreditContractData.Save(credit); } if (((DateTime)request.Value - credit.AssignDate).Days == 30 * credit.Period) { if (credit.CreditType == (int)CreditContractType.CreditType2) { if (((DateTime)request.Value - deposit.AssignDate).Days == 30 * deposit.Period) { AdbRepository.TransactionHistoryData.Save(new TransactionHistoryEntity { Count = deposit.Summ, CurrencyType = deposit.CurrencyType, CreateTime = DateTime.Now, FromAccount = TransactionHistoryBlo.GetBankAccount((CurrencyTypeEnum)deposit.CurrencyType), ToAccount = deposit.MainAccountId }); operations.Add($"{DateTime.Now} Депозит №{deposit.Id} закрыт"); } operations.Add($"{DateTime.Now} Кредит №{credit.Id} закрыт"); } } } result.TypedResult.AddRange(operations); return(result); }