コード例 #1
0
        private decimal GetOweAmount(long accountId, long sharedAccountId, DateTime month)
        {
            var expenses = ExpenseRepository.GetAccountExpenses(sharedAccountId);

            expenses = expenses.Where(e => e.SpentDate.Year == month.Year && e.SpentDate.Month == month.Month).ToList();

            var transfers = SharedAccountRepository.GetSharedAccountMoneyTransfer(sharedAccountId);

            transfers = transfers.Where(t => t.ForYear == month.Year && t.ForMonth == month.Month).ToList();

            var yourIncomeTotal    = IncomeRepository.GetAccountIncome(accountId).Where(i => i.IncomeDate.Year == month.Year && i.IncomeDate.Month == month.Month).Sum(i => i.Amount);
            var partnerIncomeTotal = IncomeRepository.GetPartnerIncome(accountId).Where(i => i.IncomeDate.Year == month.Year && i.IncomeDate.Month == month.Month).Sum(i => i.Amount);
            var yourPercentage     = yourIncomeTotal + partnerIncomeTotal == 0 ? 0 : yourIncomeTotal / (yourIncomeTotal + partnerIncomeTotal);

            var sharedSpentTotal     = expenses.Sum(e => e.Amount);
            var yourSharedSpentTotal = expenses.Where(e => e.SpentAccountId == accountId).Sum(e => e.Amount);
            var yourIdealSpentTotal  = yourPercentage * sharedSpentTotal;

            var youPayed    = transfers.Where(t => t.PayerAccountId == accountId).Sum(t => t.Amount);
            var youRecieved = transfers.Where(t => t.PayedAccountId == accountId).Sum(t => t.Amount);

            var finalAmount = Math.Round(yourIdealSpentTotal - yourSharedSpentTotal, 2);

            finalAmount = finalAmount - youPayed + youRecieved;

            return(finalAmount);
        }
コード例 #2
0
        public static List <Income> GetPartnerIncome(long accountId)
        {
            var partnerAccountId = SharedAccountRepository.GetPartnerAccountId(accountId);

            var sql = @"
SELECT i.IncomeId, i.AccountId, s.Name Source, t.Name Type, i.Amount, i.IncomeDate, eg.ExternalGuid
FROM Budget.dbo.Income i
	JOIN Budget.dbo.IncomeSource s
		ON i.IncomeSourceId = s.IncomeSourceId
	JOIN Budget.dbo.IncomeType t
		ON i.IncomeTypeId = t.IncomeTypeId
	JOIN Budget.dbo.ExternalGuid eg
		ON eg.ContextKey = 'IncomeId'
		AND eg.ContextValue = i.IncomeId
WHERE i.AccountId = @PartnerAccountId";

            var p = new
            {
                PartnerAccountId = partnerAccountId
            };

            var result = DatabaseHelper.Query <Income>(sql, p);

            return(result);
        }
コード例 #3
0
        public SharedDashboardModel GetSharedDashboardModel(long accountId, long?sharedAccountId, bool sharedDashboard)
        {
            var hasSharedAccount = sharedAccountId != null;
            var partnerName      = !sharedDashboard && hasSharedAccount?SharedAccountRepository.GetPartnerName(accountId) : null;

            var model = new SharedDashboardModel(hasSharedAccount, sharedDashboard, partnerName);

            if (!sharedDashboard && hasSharedAccount)
            {
                var owedAmounts = GetOweAmount(accountId, sharedAccountId.GetValueOrDefault());

                foreach (var owedAmount in owedAmounts)
                {
                    model.AddSharedOweAmount(owedAmount.Item2, owedAmount.Item1);
                }
            }

            return(model);
        }
コード例 #4
0
        private List <Expense> GetMoneyTransferAsExpense(long accountId, long sharedAccountId)
        {
            var transfers = SharedAccountRepository.GetSharedAccountMoneyTransfer(sharedAccountId);
            var expenses  = new List <Expense>();

            foreach (var transfer in transfers)
            {
                if (transfer.PayedAccountId == accountId)
                {
                    expenses.Add(new Expense
                    {
                        AccountId      = accountId,
                        Amount         = transfer.Amount * -1,
                        ExternalGuid   = transfer.ExternalGuid,
                        SpentDate      = transfer.TransferDate,
                        Store          = AccountRepository.GetAccount(transfer.PayerAccountId, false).Name,
                        SpentAccountId = accountId,
                        Category       = "Transfer",
                        ExpenseId      = -1
                    });
                }
                else if (transfer.PayerAccountId == accountId)
                {
                    expenses.Add(new Expense
                    {
                        AccountId      = accountId,
                        Amount         = transfer.Amount,
                        ExternalGuid   = transfer.ExternalGuid,
                        SpentDate      = transfer.TransferDate,
                        Store          = AccountRepository.GetAccount(transfer.PayerAccountId, false).Name,
                        SpentAccountId = accountId,
                        Category       = "Transfer",
                        ExpenseId      = -1
                    });
                }
            }

            return(expenses);
        }
コード例 #5
0
        public static bool HasSharedAccount(long accountId)
        {
            var sharedAccount = SharedAccountRepository.GetSharedAccount(accountId);

            return(sharedAccount != null);
        }
コード例 #6
0
        public static long GetSharedAccountId(long accountId)
        {
            var sharedAccount = SharedAccountRepository.GetSharedAccount(accountId);

            return(sharedAccount.AccountId);
        }