public override List <FreelanceListItem> GetProjects(string userIdParam)
 {
     using (_unitOfWork = DIManager.UnitOfWork)
     {
         int userId   = Convert.ToInt32(userIdParam);
         var projects = _unitOfWork.PersonalAccountantContext.Set <other_Projects>().Where(x => x.UserId == userId)?.Select(x => new FreelanceListItem
         {
             Name         = x.Name,
             FullHours    = x.TotalHours,
             SumPerHour   = x.SumPerHour,
             PayedHours   = x.other_FreelancePayement.Sum(z => z.HoursPayed),
             UnpayedHours = x.other_SpendHoursPerProject.Sum(z => z.SpendHours),
             Id           = x.Id,
             IsEnded      = x.IsEnded
         }).ToList();
         foreach (var project in projects)
         {
             project.UnpayedHours -= project.PayedHours;
             var projectModel = _unitOfWork.PersonalAccountantContext.Set <other_FreelancePayement>().Where(x => x.ProjectId == project.Id).Select(x => new FinanceOperationModel()
             {
                 CurrencyName = x.Currency.Name,
                 Summ         = x.SumPayed
             }).FirstOrDefault();
             if (projectModel != null)
             {
                 project.PayedSum = rateScriptor.ChangeBuyRateForCurrency(projectModel.Summ, projectModel.CurrencyName, "USD");
             }
         }
         return(projects);
     }
 }
 public List <DebtFullStatisticModel> GetDebtTable()
 {
     using (_unitofWork = DIManager.UnitOfWork)
     {
         var model = _unitofWork.PersonalAccountantContext.Set <debt_DebtOperations>().Where(x => x.IsInProgress).ToList();
         return(model.Select(x => new DebtFullStatisticModel
         {
             Name = x.debt_DebtAgent.Name,
             DebtType = x.DebtTypeId == 1 ? "Debit" : "Credit",
             AllSum = _rateScriptor.ChangeBuyRateForCurrency(x.RewardSum + x.StartSum, x.Currency.Name, "usd"),
             EndDateFull = x.EndDate,
             LeftToReturn = _rateScriptor.ChangeBuyRateForCurrency(x.RewardSum + x.StartSum - (x.debt_Transactions.Any() ? x.debt_Transactions.Sum(y => y.Sum) : 0), x.Currency.Name, "usd"),
             Comment = x.Comment,
             Detailed = x.Id
         }).ToList());
     }
 }
        private static void GetCreditNotPayForToLong(PAccountantEntities context, List <string> notificationsList)
        {
            var operationWithTwoLastTransactions = context.debt_DebtOperations.Where(x => x.EndDate < DateTime.Now && x.IsInProgress && x.DebtTypeId == 2).ToDictionary(x => x.Id, x => x.debt_Transactions.OrderBy(y => y.Date).Select(y => new
            {
                Date           = y.Date,
                AgentName      = x.debt_DebtAgent.Name,
                LeftSum        = x.StartSum + x.RewardSum - x.debt_Transactions.Sum(z => z.Sum),
                TransactionSum = y.Sum,
                CurrencyName   = y.debt_DebtOperations.Currency.Name
            }).Take(1));

            foreach (var operation in operationWithTwoLastTransactions)
            {
                if (operation.Value.Any() && (DateTime.Now - operation.Value.Max(x => x.Date)).TotalDays >= 28)
                {
                    var transactionValue = operation.Value.FirstOrDefault(x => x.Date == operation.Value.Max(y => y.Date));
                    notificationsList.Add("No return for too long period from " + transactionValue.AgentName + ". Last payment was mad "
                                          + transactionValue.Date.ToShortDateString() + ":" +
                                          String.Format("{0:0.00}", _rateScriptor.ChangeBuyRateForCurrency(transactionValue.TransactionSum, transactionValue.CurrencyName, "usd")) + "$"
                                          + ". Agent Still Should pay " +
                                          String.Format("{0:0.00}", _rateScriptor.ChangeBuyRateForCurrency(transactionValue.LeftSum, transactionValue.CurrencyName, "usd")) + "$");
                }
            }
        }