public List <TotalFlowModel> GetMonthTotalFlow()
 {
     using (_unitOfWork = DIManager.UnitOfWork)
     {
         var financeOperationModel = _unitOfWork.PersonalAccountantContext.Set <Operation>().Select(x => new FinanceOperationModel
         {
             OperationId  = x.Id.ToString(),
             CurrencyName = x.Currency.Name,
             SummDecimal  = x.OperationTypeId == 1 ? x.Summ : -1 * x.Summ
         }).ToList();
         return(_scriptor.SetOneCurrencyForAllOperations(financeOperationModel, "USD").Select(x => new TotalFlowModel {
             OpeartionType = x.Summ > 0?"Income":"Outcome",
             OperationSum = x.Summ > 0? x.SummDecimal: x.SummDecimal * -1
         }).GroupBy(x => x.OpeartionType).Select(y => new TotalFlowModel {
             OpeartionType = y.Key,
             OperationSum = y.Sum(z => z.OperationSum)
         }).ToList());
     }
 }
        public DebtsTotalsModel GetTotals()
        {
            DebtsTotalsModel debtTotalModel = new DebtsTotalsModel();

            using (_unitofWork = DIManager.UnitOfWork)
            {
                var CreditTotal = _unitofWork.PersonalAccountantContext.Set <debt_DebtOperations>().Where(x => x.DebtTypeId == 2 && x.IsInProgress)?.Select(x => new FinanceOperationModel
                {
                    CurrencyName = x.Currency.Name,
                    OperationId  = x.Id.ToString(),
                    Summ         = x.StartSum + x.RewardSum
                }).ToList();
                var DebitTotal = _unitofWork.PersonalAccountantContext.Set <debt_DebtOperations>().Where(x => x.DebtTypeId == 1 && x.IsInProgress)?.Select(x => new FinanceOperationModel
                {
                    CurrencyName = x.Currency.Name,
                    OperationId  = x.Id.ToString(),
                    Summ         = x.StartSum + x.RewardSum
                }).ToList();

                debtTotalModel.CreditTotal = _rateScriptor.SetOneCurrencyForAllOperations(CreditTotal, "USD").Sum(x => x.Summ);
                debtTotalModel.DebitTotal  = _rateScriptor.SetOneCurrencyForAllOperations(DebitTotal, "USD").Sum(x => x.Summ);
            }
            return(debtTotalModel);
        }
 public List <TotalFlowWithDateModel> GetPeriodFlow(PeriodModel periodParam = null)
 {
     using (_unitOfWork = DIManager.UnitOfWork)
     {
         bool     hasPeriodParam = periodParam != null && periodParam.StartDate != new DateTime(1, 1, 1);
         DateTime?startPeriod    = null;
         DateTime?endPeriod      = null;
         if (hasPeriodParam)
         {
             startPeriod = periodParam.StartDate;
             endPeriod   = periodParam.EndDate;
         }
         var financeOperationModel = _unitOfWork.PersonalAccountantContext.Set <Operation>().
                                     Where(x => hasPeriodParam ?
                                           x.Date >= startPeriod.Value && x.Date <= endPeriod.Value :
                                           true)
                                     .Select(x => new FinanceOperationModel
         {
             OperationId  = x.OperationCategory.Name,
             CurrencyName = x.Currency.Name,
             SummDecimal  = x.OperationTypeId == 1 ? x.Summ : -1 * x.Summ
         }).ToList();
         var on = _scriptor.SetOneCurrencyForAllOperations(financeOperationModel, "USD").Select(x => new TotalFlowWithDateModel
         {
             IdentifyData = x.OperationId,
             IncomeSum    = x.Summ > 0 ? x.SummDecimal : 0,
             OutcomeSum   = x.Summ < 0 ? x.SummDecimal : 0
         }).GroupBy(x => x.IdentifyData).Select(y => new TotalFlowWithDateModel
         {
             IdentifyData = y.Key,
             IncomeSum    = y.Sum(z => z.IncomeSum),
             OutcomeSum   = y.Sum(z => z.OutcomeSum) * -1
         }).Where(x => x.IncomeSum > 0 || x.OutcomeSum > 0).ToList();
         return(on);
     }
 }