public async Task<ActionResult> Create(TrainingProviderViewModels.CreateViewModel createModel)
      {
         var validImageTypes = new[]
         {
            "image/gif",
            "image/jpeg",
            "image/pjpeg",
            "image/png"
         };

         var logoUpload = createModel.LogoUpload;
         if (logoUpload == null || logoUpload.ContentLength == 0)
         {
            ModelState.AddModelError("LogoUpload", "Logo file is required.");
         } else if (!validImageTypes.Contains(logoUpload.ContentType))
         {
            ModelState.AddModelError("LogoUpload", "Please choose either a GIF, JPG or PNG image.");
         }

         if (ModelState.IsValid)
         {
            try
            {
               var logoSavePath = Path.Combine(Server.MapPath(AppConstants.VirtualPaths.TrainingProvidersContent), createModel.LogoUpload.FileName);
               createModel.LogoUpload.SaveAs(logoSavePath);

               _db.TrainingProviders.Add(new TrainingProvider
               {
                  Name = createModel.Name,
                  Description = createModel.Description,
                  SiteUrl = createModel.SiteUrl,
                  LogoFileName = createModel.LogoUpload.FileName,
                  UpdateFrequencyHours = createModel.UpdateFrequencyHours,
                  AllowedUpdateUtcHours = createModel.SelectedUpdateHours,
                  SourceUrl = createModel.SourceUrl,
                  SourceLocation = createModel.SourceLocation,
                  AssemblyType = createModel.AssemblyType,
                  IsDeleted = createModel.IsDeleted
               });

               await _db.SaveChangesAsync();

               return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
               ModelState.AddModelError("", ex.Message);

               return View(createModel);
            }
         }

         return View(createModel);
      }
      public async Task<ActionResult> Edit(TrainingProviderViewModels.EditViewModel editModel)
      {
         var validImageTypes = new[]
         {
            "image/gif",
            "image/jpeg",
            "image/pjpeg",
            "image/png"
         };

         var logoUpload = editModel.LogoUpload;
         if (logoUpload != null && logoUpload.ContentLength != 0 && !validImageTypes.Contains(logoUpload.ContentType))
         {
            ModelState.AddModelError("LogoUpload", "Please choose either a GIF, JPG or PNG image.");
         }

         if (ModelState.IsValid)
         {
            var currentTrainingProvider = await _db.TrainingProviders.FindAsync(editModel.Id);
            if (currentTrainingProvider == null)
            {
               return HttpNotFound();
            }

            if (editModel.LogoUpload != null && editModel.LogoUpload.ContentLength != 0)
            {
               try
               {
                  var logoSavePath = Path.Combine(Server.MapPath(AppConstants.VirtualPaths.TrainingProvidersContent), editModel.LogoUpload.FileName);
                  editModel.LogoUpload.SaveAs(logoSavePath);
               }
               catch (Exception ex)
               {
                  ModelState.AddModelError("", ex.Message);

                  return View(editModel);
               }
            }

            currentTrainingProvider.Name = editModel.Name;
            currentTrainingProvider.Description = editModel.Description;
            currentTrainingProvider.SiteUrl = editModel.SiteUrl;

            currentTrainingProvider.LogoFileName = editModel.LogoUpload != null
               ? editModel.LogoUpload.FileName
               : editModel.SelectedLogo.FileName;

            currentTrainingProvider.UpdateFrequencyHours = editModel.UpdateFrequencyHours;
            currentTrainingProvider.AllowedUpdateUtcHours = editModel.SelectedUpdateHours;
            currentTrainingProvider.SourceUrl = editModel.SourceUrl;
            currentTrainingProvider.SourceLocation = editModel.SourceLocation;
            currentTrainingProvider.AssemblyType = editModel.AssemblyType;
            currentTrainingProvider.IsDeleted = editModel.IsDeleted;

            try
            {
               await _db.SaveChangesAsync();
            }
            catch (Exception ex)
            {
               ModelState.AddModelError("", ex.Message);

               return View(editModel);
            }


            return RedirectToAction("Index");
         }

         return View(editModel);
      }