public ActionResult Create(ServerAddViewModel viewmodel)
        {
            if (ModelState.IsValid)
            {
                // check if vendor id already exists.
                if (_serverService.GetByVendorId(viewmodel.VendorId) == null)
                {
                    var entity = Mapper.Map <ServerAddViewModel, Server>(viewmodel);
                    _serverService.AddServer(entity);

                    Success($"<strong>{entity.FullName}</strong> was successfully added.");
                    return(RedirectToAction("Index"));
                }
                else
                {
                    Danger($"A server with same Id <strong>{viewmodel.VendorId}</strong> already exists.");
                }
            }

            viewmodel.AvailableCategories = _serverService.GetCategories().Select(t => new SelectListItem()
            {
                Text  = t.Name,
                Value = t.Id.ToString()
            }).ToList();

            viewmodel.AvailableElements = _elementService.GetElements().Select(t => new SelectListItem()
            {
                Text  = t.DisplayName,
                Value = t.Id.ToString()
            }).ToList();

            return(View(viewmodel));
        }
        public ActionResult Create()
        {
            var viewmodel = new ServerAddViewModel();

            viewmodel.AvailableCategories = _serverService.GetCategories().Select(t => new SelectListItem()
            {
                Text  = t.Name,
                Value = t.Id.ToString()
            }).ToList();

            viewmodel.AvailableElements = _elementService.GetElements().Select(t => new SelectListItem()
            {
                Text  = t.DisplayName,
                Value = t.Id.ToString()
            }).ToList();

            return(View(viewmodel));
        }
        public ActionResult Upload(UploadedExcelSheetViewModel viewmodel)
        {
            if (ModelState.IsValid) // validate file exist
            {
                if (viewmodel.ExcelFile != null && viewmodel.ExcelFile.ContentLength > 0)
                {
                    var           fileName     = Path.GetFileName(viewmodel.ExcelFile.FileName);
                    var           path         = Path.Combine(Server.MapPath("~/Uploads/Servers/"), DateTime.Now.GetTimeStamp() + "_" + fileName);
                    List <Server> addedServers = new List <Server>();
                    viewmodel.ExcelFile.SaveAs(path); // save a copy of the uploaded file.
                    // convert the uploaded file into datatable, then add/update db entities.
                    var dtServers           = ImportUtils.ImportXlsxToDataTable(viewmodel.ExcelFile.InputStream, true);
                    int numOfServersUpdated = 0;
                    foreach (var row in dtServers.AsEnumerable().ToList())
                    {
                        var entityViewModel = new ServerAddViewModel()
                        {
                            VendorId = int.Parse(row["Staff"].ToString()),
                            // some columns does not have ',' separater.
                            FirstName   = row["Sort Name"].ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)[1],
                            LastName    = row["Sort Name"].ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)[0],
                            GpEmpNumber = !string.IsNullOrWhiteSpace(row["Gp Emp #"].ToString()) ? row["Gp Emp #"].ToString() : null,
                            ElementId   = !string.IsNullOrWhiteSpace(row["Element"].ToString()) ? int.Parse(row["Element"].ToString()) : (int?)null,
                            Active      = row["active"].ToString() == "Y" ? true : false,
                            CategoryId  = CategoryConverter.ConvertFromCategoryNameToId(row["Category"].ToString())
                        };
                        //check if server does not exist
                        if (entityViewModel.VendorId != 0)
                        {
                            if (entityViewModel.ElementId.HasValue)
                            {
                                var existedElement = _elementService.GetByVendorId(entityViewModel.ElementId.Value);
                                if (existedElement == null)
                                {
                                    Danger($"Invalid Element Id with value ={entityViewModel.ElementId.Value}");
                                    continue;
                                }
                                else
                                {
                                    entityViewModel.ElementId = existedElement.Id;
                                }
                            }

                            var existedEntity = _serverService.GetByVendorId(entityViewModel.VendorId);

                            if (existedEntity == null)
                            {
                                var entity = Mapper.Map <ServerAddViewModel, Server>(entityViewModel);
                                addedServers.Add(entity);
                            }
                            else
                            {
                                Mapper.Map(entityViewModel, existedEntity);
                                _serverService.UpdateServer(existedEntity);
                                numOfServersUpdated++;
                            }
                        }
                    }
                    if (addedServers.Any())
                    {
                        _serverService.AddServers(addedServers);
                    }
                    Success($"<strong>{addedServers.Count}</strong> servers have been successfully added. <br\\>"
                            + $"<strong>{numOfServersUpdated}</strong> servers have been successfully updated.");
                }
                return(RedirectToAction("Index"));
            }

            return(View(viewmodel));
        }