public async Task <IActionResult> Create(AddTravelViewModel viewModel)
        {
            var travel = viewModel.ToTravel();
            var user   = await GetCurrentDomainUserAsync();

            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var userRepository     = RepositoriesFactory.CreateUserRepository(unitOfWork);
            var travelRepository   = RepositoriesFactory.CreateTravelRepository(unitOfWork);
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            unitOfWork.BeginTransaction();
            travel.Traveller = userRepository.GetUser(user.Id);
            var currency = currencyRepository.GetById(viewModel.BudgetCurrencyId);

            if (viewModel.BudgetValue > 0 && currency != null)
            {
                travel.Budget = new MoneyValue
                {
                    Value    = viewModel.BudgetValue,
                    Currency = currency
                };
            }
            travelRepository.AddTravel(travel);
            unitOfWork.Commit();

            return(RedirectToAction("Index"));
        }
        public async Task <IActionResult> Edit(EditTravelViewModel viewModel)
        {
            var user = await GetCurrentDomainUserAsync();

            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var travelRepository   = RepositoriesFactory.CreateTravelRepository(unitOfWork);
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            unitOfWork.BeginTransaction();
            var travel   = travelRepository.GetTravel(viewModel.Id);
            var currency = currencyRepository.GetById(viewModel.BudgetCurrencyId);

            travel.Name        = viewModel.Name;
            travel.DateStart   = viewModel.DateStart;
            travel.DateEnd     = viewModel.DateEnd;
            travel.Description = viewModel.Description;
            if (viewModel.BudgetValue > 0 && currency != null)
            {
                travel.Budget = new MoneyValue
                {
                    Value    = viewModel.BudgetValue,
                    Currency = currency
                };
            }
            travelRepository.UpdateTravel(travel);
            unitOfWork.Commit();

            return(RedirectToAction("Index"));
        }
        public void LoadDefaultModel()
        {
            if (_defaultModelLoaded != false)
            {
                return;
            }

            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            try
            {
                unitOfWork.BeginTransaction();
                currencyRepository.CreateCurrenciesIfNoneExist();

                unitOfWork.Commit();
            }
            catch (Exception ex)
            {
                unitOfWork.Rollback();
                MessageBox.Show(ex.Message, "TravelBuddy");
            }

            _defaultModelLoaded = true;
        }
        public IActionResult Create()
        {
            var viewModel          = new AddTravelViewModel();
            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            unitOfWork.BeginTransaction();
            currencyRepository.CreateCurrenciesIfNoneExist();
            viewModel.CurrencyOptions = currencyRepository.GetAll();
            unitOfWork.Commit();

            return(View(viewModel));
        }
        public IActionResult Edit(Guid id)
        {
            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var travelRepository   = RepositoriesFactory.CreateTravelRepository(unitOfWork);
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            unitOfWork.BeginTransaction();
            var viewModel = new EditTravelViewModel(travelRepository.GetTravel(id));

            viewModel.Id = id;
            currencyRepository.CreateCurrenciesIfNoneExist();
            viewModel.CurrencyOptions = currencyRepository.GetAll();
            unitOfWork.Commit();

            return(View(viewModel));
        }
        public void OpenAddTravelWindow()
        {
            var unitOfWork         = UnitOfWorkFactory.CreateUnitOfWork();
            var currencyRepository = RepositoriesFactory.CreateCurrencyRepository(unitOfWork);

            try
            {
                unitOfWork.BeginTransaction();

                var currencyList = new List <Currency>(currencyRepository.GetAll());

                var addTravelView = _formsFactory.CreateAddTravelView(this, currencyList);
                addTravelView.ShowModaless();

                unitOfWork.Commit();
            }
            catch (Exception ex)
            {
                unitOfWork.Rollback();

                MessageBox.Show(ex.Message, "TravelBuddy");
            }
        }