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); }
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); }
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); }
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); }
public static bool HasSharedAccount(long accountId) { var sharedAccount = SharedAccountRepository.GetSharedAccount(accountId); return(sharedAccount != null); }
public static long GetSharedAccountId(long accountId) { var sharedAccount = SharedAccountRepository.GetSharedAccount(accountId); return(sharedAccount.AccountId); }