Ejemplo n.º 1
0
		public ServiceResult<Account> AddAccount(string name, decimal initialBalance = 0.0M, int? defaultCategoryId = null, int? accountGroupId = null)
		{
			var result = new ServiceResult<Account>();

			// does AccountGroup exist?
			if (accountGroupId.HasValue)
			{
				var accountGroupResult = GetAccountGroup(accountGroupId.Value);
				if (accountGroupResult.HasErrors)
				{
					result.AddErrors(accountGroupResult);
					return result;
				}
			}

			// does default Category exist?
			if (defaultCategoryId.HasValue)
			{
				var categoryResult = _categoryService.GetCategory(defaultCategoryId.Value);
				if (categoryResult.HasErrors)
				{
					result.AddErrors(categoryResult);
					return result;
				}
			}

			// create Account
			var account = new Account()
			{
				Name = name,
				InitialBalance = initialBalance,
				Balance = initialBalance,
				BalanceTimestamp = DateTime.Now,
				DefaultCategoryId = defaultCategoryId,
				AccountGroupId = accountGroupId
			};

			_db.Insert<Account>(account);

			result.Result = account;
			return result;
		}
Ejemplo n.º 2
0
        private void UpdateTransactions()
        {
            // add transactions
            var now = DateTime.Now;
            var accounts = _accountRepository.GetAll().ToList();
            var vendors = _vendorRepository.GetAll().ToList();
            var mappedVendors = _importDescriptionVendorMapRepository.GetAll().ToList();
            var transactions = _transactionRepository.GetAll().ToList();
            var importedTransactions = new List<Transaction>();
            var maxTransactionDate = transactions.Any() ? transactions.Max(x => x.OriginalTimestamp) : DateTime.MinValue;

            foreach (ImportRecord row in _transactions.Where(x => x.Date >= maxTransactionDate).OrderBy(x => x.Date))
            {
                // is amount credit or debit?
                var amount = row.Amount * (row.TransactionType.Equals("debit") ? -1.0M : 1.0M);

                // has this transaction already been imported?
                var existingTransaction = transactions.FirstOrDefault(x => x.Amount == amount && x.OriginalTimestamp == row.Date && x.Subtransactions.Any(y => y.Notes.Equals(row.OriginalDescription, StringComparison.CurrentCultureIgnoreCase)));
                if (existingTransaction != null)
                {
                    Console.WriteLine("FOUND {0} {1} : {2}", row.Date.ToShortDateString(), amount, row.OriginalDescription);

                    importedTransactions.Add(existingTransaction);
                    continue;
                }

                Console.WriteLine("create {0} {1} : {2}", row.Date.ToShortDateString(), amount, row.OriginalDescription);

                // find the account in the local cache
                var account = accounts.SingleOrDefault(x => x.AccountNameMaps.Any(y => y.Name.Equals(row.AccountName, StringComparison.CurrentCultureIgnoreCase)));

                // if we didn't find one, make one
                if (account == null)
                {
                    account = new Account()
                    {
                        Name = row.AccountName,
                        AccountGroup = accounts.Any() ? accounts.FirstOrDefault().AccountGroup : new AccountGroup() { Name = row.AccountName },
                        BalanceTimestamp = now
                    };
                    account.AccountNameMaps = new List<AccountNameMap>() { new AccountNameMap() { Account = account, Name = row.AccountName } };

                    _accountRepository.Add(account);
                    _unitOfWork.Commit();
                    accounts.Add(account);
                }

                account.BalanceTimestamp = now;

                // find the vendor in the local cache
                var vendor = vendors.SingleOrDefault(x => x.Name.Equals(row.Description, StringComparison.CurrentCultureIgnoreCase));

                // find the vendor in the description map
                var mappedVendor = mappedVendors.Where(x => x.Description.Equals(row.Description, StringComparison.CurrentCultureIgnoreCase));
                if (mappedVendor.Any())
                {
                    vendor = mappedVendor.FirstOrDefault().Vendor;
                }

                // if we didn't find one, make one
                if (vendor == null)
                {
                    vendor = new Vendor() { Name = row.Description };
                    _vendorRepository.Add(vendor);
                    _unitOfWork.Commit();
                    vendors.Add(vendor);
                }

                Transaction transaction = new Transaction()
                {
                    Timestamp = row.Date,
                    OriginalTimestamp = row.Date,
                    Amount = amount,
                    Vendor = vendor,
                };

                Subtransaction subtransaction = new Subtransaction()
                {
                    Amount = amount,
                    Memo = row.Description,
                    Notes = row.OriginalDescription,
                    CategoryId = account.DefaultCategoryId,
                    IsTransfer = row.Description.StartsWith("Transfer from") || row.Description.StartsWith("Transfer to")
                };

                transaction.Subtransactions.Add(subtransaction);
                account.Transactions.Add(transaction);
                _newTransactions.Add(transaction);
                _unitOfWork.Commit();
            }
        }