private BalanceCreateViewModel SetCreateBalance(BalanceCreateViewModel model)
        {
            var locations   = _uow.LocationRepository.Get();
            var departments = _uow.DepartmentRepository.Get();

            model.LocationNames = locations.Select(item => item.LocationName).ToList();
            model.Departments   = departments
                                  .Where(item => !item.DepartmentName.Equals("Quality Assurance"))
                                  .GroupBy(item => item.DepartmentName)
                                  .Select(item => item.First()).ToList();
            model.SubDepartments = departments
                                   .Where(item => !string.IsNullOrEmpty(item.SubDepartment) || !item.DepartmentName.Equals("Quality Assurance"))
                                   .ToList();
            model.WeightUnits = _uow.UnitRepository.Get().Where(item => item.UnitType.Equals("Weight")).Select(item => item.UnitShorthandName).ToList();

            return(model);
        }
        public ActionResult Create([Bind(Include = "BalanceId,DeviceCode,LocationName,BalanceType,DepartmentName,SubDepartmentName,NumberOfDecimals,WeightLimitOne,WeightLimitTwo,WeightLimitThree,NumberOfTestsToVerify")] BalanceCreateViewModel balance, string submit)
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);

            if (ModelState.IsValid)
            {
                var doesDeviceAlreadyExist = _uow.BalanceDeviceRepository.Get().Any(item => item != null && item.DeviceCode.Equals(balance.DeviceCode));

                if (doesDeviceAlreadyExist)
                {
                    ModelState.AddModelError("", "The Device Code provided is not unique. Please try again.");
                    return(View(SetCreateBalance(balance)));
                }

                var device = new Device()
                {
                    AmountLimitOne        = balance.WeightLimitOne.ToString(),
                    AmountLimitTwo        = balance.WeightLimitTwo.ToString(),
                    AmountLimitThree      = balance.WeightLimitThree.ToString(),
                    DeviceCode            = balance.DeviceCode,
                    NumberOfDecimals      = balance.NumberOfDecimals,
                    Status                = "Needs Verification",
                    IsVerified            = false,
                    BalanceType           = balance.BalanceType,
                    DeviceType            = "Balance",
                    NumberOfTestsToVerify = balance.NumberOfTestsToVerify,
                    Department            = _uow.DepartmentRepository.Get().Where(item => item.DepartmentName.Equals(balance.DepartmentName) && item.SubDepartment.Equals(balance.SubDepartmentName)).First()
                };

                _uow.BalanceDeviceRepository.Create(device);
                var result = _uow.Commit();

                switch (result)
                {
                case CheckModelState.Invalid:
                    ModelState.AddModelError("", "The creation of the balance failed. Please double check all inputs and try again.");
                    return(View(SetCreateBalance(balance)));

                case CheckModelState.DataError:
                    ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists please contact your system administrator.");
                    return(View(SetCreateBalance(balance)));

                case CheckModelState.Error:
                    ModelState.AddModelError("", "There was an error. Please try again.");
                    return(View(SetCreateBalance(balance)));

                case CheckModelState.Valid:
                    if (!string.IsNullOrEmpty(submit) && submit.Equals("Save"))
                    {
                        //save pressed
                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        //save & new pressed
                        return(RedirectToAction("Create"));
                    }

                default:
                    ModelState.AddModelError("", "An unknown error occurred.");
                    return(View(SetCreateBalance(balance)));
                }
            }
            return(View(SetCreateBalance(new BalanceCreateViewModel())));
        }