Exemplo n.º 1
0
        public ExpenseFlowSettings CreateExpenseFlowSettings(int flowId, bool canFlow, FlowRule rule,
                                                             bool isRegularExpenses, decimal amount)
        {
            var commands = _unitOfWork.GetCommandRepository <ExpenseFlowSettings>();
            var entity   = new ExpenseFlowSettings
            {
                ExpenseFlowId     = flowId,
                CanFlow           = canFlow,
                Rule              = rule,
                IsRegularExpenses = isRegularExpenses,
                Amount            = amount
            };

            commands.Create(entity);
            return(entity);
        }
Exemplo n.º 2
0
        private async Task CreateOrUpdateFlowSettings(DistributionItem item)
        {
            var settings = await _repository.GetQuery <ExpenseFlowSettings>()
                           .Where(x => x.ExpenseFlowId == item.Flow.Id)
                           .SingleOrDefaultAsync();

            if (settings == null)
            {
                settings = new ExpenseFlowSettings
                {
                    ExpenseFlowId     = item.Flow.Id,
                    IsRegularExpenses = item.Mode == DistributionMode.RegularExpenses,
                    Amount            = item.Amount,
                    CanFlow           = true
                };
                _repository.Create(settings);
            }
            else
            {
                settings.IsRegularExpenses = item.Mode == DistributionMode.RegularExpenses;
                settings.CanFlow           = true;
                settings.Amount            = item.Amount;
            }
        }
Exemplo n.º 3
0
        public async Task Save(IEntityRepository repository, DateTime dateTime)
        {
            var accountSettingsQueries = repository.GetQuery <AccountFlowSettings>();

            var accountIds      = Accounts.Select(x => x.Id).ToList();
            var accountSettings = await accountSettingsQueries
                                  .Where(x => accountIds.Contains(x.AccountId))
                                  .ToListAsync()
                                  .ConfigureAwait(false);

            Accounts.ForEach(x =>
            {
                var settings = accountSettings.FirstOrDefault(s => s.AccountId == x.Id);
                if (settings == null)
                {
                    settings = new AccountFlowSettings
                    {
                        AccountId = x.Id,
                        CanFlow   = x.CanFlow
                    };
                    repository.Create(settings);
                }
                else
                {
                    settings.CanFlow = x.CanFlow;
                    repository.Update(settings);
                }
            });

            var flowSettingsQueries = repository.GetQuery <ExpenseFlowSettings>();

            var flowIds      = ExpenseFlows.Select(x => x.Id).ToList();
            var flowSettings = await flowSettingsQueries
                               .Where(x => flowIds.Contains(x.ExpenseFlowId))
                               .ToListAsync()
                               .ConfigureAwait(false);

            ExpenseFlows.ForEach(x =>
            {
                var settings = flowSettings.FirstOrDefault(s => s.ExpenseFlowId == x.Id);
                if (settings == null)
                {
                    settings = new ExpenseFlowSettings
                    {
                        ExpenseFlowId = x.Id,
                        CanFlow       = x.CanFlow,
                        Rule          = x.Rule,
                        Amount        = x.Amount
                    };
                    repository.Create(settings);
                }
                else
                {
                    settings.CanFlow = x.CanFlow;
                    settings.Rule    = x.Rule;
                    settings.Amount  = x.Amount;
                    repository.Update(settings);
                }
            });

            var distribution = new DataAccess.Model.Distribution.Distribution()
            {
                DateTime = dateTime,
                SumFlow  = DistributionFlows.Sum(x => x.Amount)
            };

            repository.Create(distribution);

            var accountQueries = repository.GetQuery <Account>();
            var flowQueries    = repository.GetQuery <ExpenseFlow>();

            var accounts = await accountQueries
                           .Where(x => accountIds.Contains(x.Id))
                           .ToListAsync()
                           .ConfigureAwait(false);

            var expenseFlows = await flowQueries
                               .Where(x => flowIds.Contains(x.Id))
                               .ToListAsync()
                               .ConfigureAwait(false);

            DistributionFlows.ForEach(x =>
            {
                var flow = new Flow
                {
                    Distribution = distribution,
                    SourceId     = x.SourceId,
                    RecipientId  = x.RecipientId,
                    Amount       = x.Amount
                };
                repository.Create(flow);

                var account     = accounts.First(a => a.Id == x.SourceId);
                var expenseFlow = expenseFlows.First(f => f.Id == x.RecipientId);

                account.AvailBalance -= x.Amount;
                repository.Update(account);
                expenseFlow.Balance += x.Amount;
                repository.Update(expenseFlow);
            });

            await repository.SaveChangesAsync().ConfigureAwait(false);
        }