public virtual PartialViewResult UpdateValueListAjax(int? id, ValueListEditAdminViewModel valueListViewModel, ValueListItemEditAdminViewModel[] listItems, string fastAddValueListItem) { if (!id.HasValue) { return HttpBadRequestPartial("id is null"); } if (valueListViewModel.ValueListId == 0) { return HttpBadRequestPartial("Value List Id in view model is 0"); } if (valueListViewModel.ValueListId != id.Value) { return HttpBadRequestPartial("Value List Id mismatch. Parameter value: '" + id.Value + "' != view model value: " + valueListViewModel.ValueListId); } Client client = CurrentClientOrThrow; ValueList valueListToUpdate = client.ValueLists.SingleOrDefault(vl => vl.ValueListId == valueListViewModel.ValueListId); if (valueListToUpdate == null) { throw new ApplicationException("Value List not found in client Value Lists. Value List Id: " + valueListToUpdate.ValueListId + " Client '" + client.Name + "' [" + client.ClientId + "]"); } bool nameIsValid = GStoreDb.ValidateValueListName(this, valueListToUpdate.Name, client.ClientId, valueListToUpdate.ValueListId); bool fastAddIsValid = false; if (!string.IsNullOrWhiteSpace(fastAddValueListItem)) { fastAddIsValid = GStoreDb.ValidateValueListFastAddItemName(this, fastAddValueListItem, valueListToUpdate, null); } if (nameIsValid && ModelState.IsValid) { ValueList valueList = null; try { valueList = GStoreDb.UpdateValueList(valueListViewModel, client, CurrentUserProfileOrThrow); if (listItems != null && listItems.Count() > 0) { foreach (ValueListItemEditAdminViewModel listItem in listItems) { if (listItem.ValueListId != id.Value) { throw new ApplicationException("ValueListId mismatch for list item. ValueList id: " + id.Value + " listItem.ValueListId: " + listItem.ValueListId); } ValueListItem listItemUpdated = GStoreDb.UpdateValueListItem(listItem, client, CurrentUserProfileOrThrow); } } valueListViewModel = new ValueListEditAdminViewModel(CurrentStoreFrontOrThrow, CurrentUserProfileOrThrow, valueList, isStoreAdminEdit: true, activeTab: valueListViewModel.ActiveTab, sortBy: valueListViewModel.SortBy, sortAscending: valueListViewModel.SortAscending); if (fastAddIsValid) { ValueListItem newItem = GStoreDb.CreateValueListItemFastAdd(valueListViewModel, fastAddValueListItem, client, CurrentUserProfileOrThrow); AddUserMessage("Value List Item Created!", "Value List Item '" + newItem.Name.ToHtml() + "' [" + newItem.ValueListItemId + "] created successfully.", UserMessageType.Success); ModelState.Remove("fastAddValueListItem"); } AddUserMessage("Value List Changes Saved!", "Value List '" + valueList.Name.ToHtml() + "' [" + valueList.ValueListId + "] saved successfully for Client '" + client.Name.ToHtml() + "' [" + client.ClientId + "]", UserMessageType.Success); this.ModelState.Clear(); return PartialView("_ValueListEditPartial", valueListViewModel); } catch (Exception ex) { string errorMessage = "An error occurred while saving your changes to Value List '" + valueListViewModel.Name + "' [" + valueListViewModel.ValueListId + "] for Client: '" + client.Name + "' [" + client.ClientId + "] \nError: '" + ex.GetType().FullName + "'"; if (CurrentUserProfileOrThrow.AspNetIdentityUserIsInRoleSystemAdmin()) { errorMessage += " \nException.ToString(): '" + ex.ToString() + "'"; } AddUserMessage("Error Saving Value List!", errorMessage.ToHtmlLines(), UserMessageType.Danger); ModelState.AddModelError("Ajax", errorMessage); } } else { AddUserMessage("Value List Edit Error", "There was an error with your entry for Value List " + valueListViewModel.Name.ToHtml() + " [" + valueListViewModel.ValueListId + "] for Client '" + client.Name.ToHtml() + "' [" + client.ClientId + "]. Please correct it.", UserMessageType.Danger); } foreach (string key in this.ModelState.Keys.Where(k => k.StartsWith("ValueListItems[")).ToList()) { this.ModelState.Remove(key); } valueListViewModel.IsStoreAdminEdit = true; return PartialView("_ValueListEditPartial", valueListViewModel); }
public static ValueListItem UpdateValueListItem(this IGstoreDb db, ValueListItemEditAdminViewModel viewModel, Client client, UserProfile userProfile) { if (viewModel == null) { throw new ArgumentNullException("viewModel"); } if (client == null) { throw new ArgumentNullException("client"); } if (userProfile == null) { throw new ArgumentNullException("userProfile"); } //find existing record, update it ValueList valueList = client.ValueLists.SingleOrDefault(p => p.ValueListId == viewModel.ValueListId); if (valueList == null) { throw new ApplicationException("Value List not found in client Value Lists. Value List Id: " + viewModel.ValueListId + " Client '" + client.Name + " [" + client.ClientId + "]"); } ValueListItem listItem = valueList.ValueListItems.Where(vli => vli.ValueListItemId == viewModel.ValueListItemId).SingleOrDefault(); if (listItem == null) { throw new ApplicationException("Value List Item not found in existing values. Value List Id: " + viewModel.ValueListId + " Value List Item Id: " + viewModel.ValueListItemId + " Client '" + client.Name + " [" + client.ClientId + "]"); } listItem.Description = viewModel.Description; listItem.EndDateTimeUtc = viewModel.EndDateTimeUtc; listItem.IsPending = viewModel.IsPending; listItem.Name = viewModel.Name; listItem.Order = viewModel.Order; listItem.StartDateTimeUtc = viewModel.StartDateTimeUtc; listItem.UpdateDateTimeUtc = DateTime.UtcNow; listItem.UpdatedBy = userProfile; listItem.UpdatedBy_UserProfileId = userProfile.UserProfileId; listItem.UpdateAuditFields(userProfile); listItem = db.ValueListItems.Update(listItem); db.SaveChanges(); return listItem; }