public void CreateModule(IModule _dbModule, DynamicModuleViewModel _moduleData) { var row = new Row() { Module = (Module)_dbModule }; foreach (DynamicModuleField field in _moduleData.Fields) { var converter = FieldValueConversion.GetConverter(field.DataType); var rowField = new Cell { Field = _dbModule.Fields.FirstOrDefault(f => f.FieldName == field.PropertyName), Data = converter.Serialize(field, new ConversionContext { Cell = null }) }; row.Cells.Add(rowField); } try { ModRepository.AddModuleEntry(_dbModule.Id, row); } catch (Exception e) { throw new CreateModuleFailedException("Ocorreu um erro ao incluir o seu registro. Tente novamente mais tarde.", e); } }
public void SetModuleData(IModule _dbModule, int?id, DynamicModuleViewModel _moduleData, bool partialData = false) { if (_dbModule.ModuleType == (int)ModuleType.SingleEntry && _dbModule.Rows.FirstOrDefault() == null) { // We have a single entry module and its row hasn't been created yet. // No big deal, we'll do it. CreateModule(_dbModule as Module, _moduleData); } var rowToEdit = (_dbModule.ModuleType == (int)ModuleType.Dynamic) ? _dbModule.Rows.FirstOrDefault(row => row.ID == id) : _dbModule.Rows.FirstOrDefault(); if (rowToEdit == null) { throw new ModuleRowNotFoundException("Registro não encontrado."); } if (!partialData) { // Update all the row fields, i.e. set null to missing form fields. foreach (Cell rowField in rowToEdit.Cells) { var formField = _moduleData.Fields.FirstOrDefault(rf => rf.PropertyName == rowField.Field.FieldName); var converter = FieldValueConversion.GetConverter(formField.DataType); rowField.Data = converter.Serialize(formField, new ConversionContext { Cell = rowField, Field = rowField.Field, Module = _dbModule, Repository = ModRepository }); } } else { // Update only the row fields that were received as form fields. Do not touch others. foreach (var formField in _moduleData.Fields) { var rowField = rowToEdit.Cells.FirstOrDefault(rf => rf.Field.FieldName == formField.PropertyName); var converter = FieldValueConversion.GetConverter(formField.DataType); rowField.Data = converter.Serialize(formField, new ConversionContext { Cell = rowField, Field = rowField.Field, Module = _dbModule, Repository = ModRepository }); } } ModRepository.Save(); }
private ActionResult ViewModule(Module _module, int?id, bool creating = false) { if (id != null && _module.Rows.FirstOrDefault(row => row.ID == id) == null) { TempData["Message"] = "Registro não encontrado."; return(this.RedirectToAction("List")); } DynamicModuleViewModel modelRow = new DynamicModuleViewModel() { ID = id ?? -1, ModuleName = _module.ModuleName, DisplayName = _module.DisplayName }; foreach (Field field in _module.Fields) { Cell rowField = null; if (!creating) { rowField = (id != null) ? field.Cells.FirstOrDefault(rf => rf.Row.ID == id) : field.Cells.FirstOrDefault(); } var fieldDataTpe = Type.GetType(field.FieldDataType.Name); var converter = FieldValueConversion.GetConverter(fieldDataTpe); var modelField = new DynamicModuleField() { DisplayName = field.DisplayName, PropertyName = field.FieldName, IsReadOnly = field.IsReadOnly, IsRequired = field.IsRequired, DataType = fieldDataTpe }; modelField.Data = converter.Deserialize( rowField, new ConversionContext { Field = field, Module = _module, Repository = ModRepository }); modelRow.Fields.Add(modelField); } return(View(modelRow)); }
public ActionResult List(object module) { var modToList = module as Module; ViewData["ModuleName"] = modToList.ModuleName; ViewData["DisplayName"] = modToList.DisplayName; ViewData["Fields"] = modToList.Fields.Where(f => f.ShowInListMode).Select(f => f.DisplayName); List <DynamicModuleViewModel> viewModel = new List <DynamicModuleViewModel>(); foreach (Row _row in modToList.Rows.OrderBy(r => r.SortIndex)) { DynamicModuleViewModel modelRow = new DynamicModuleViewModel() { ID = _row.ID }; foreach (Field field in modToList.Fields.Where(f => f.ShowInListMode)) { var rowField = field.Cells.FirstOrDefault(rf => rf.Row.ID == _row.ID); var fieldDataTpe = Type.GetType(field.FieldDataType.Name); var converter = FieldValueConversion.GetConverter(fieldDataTpe); var modelField = new DynamicModuleField() { DisplayName = field.DisplayName, PropertyName = field.FieldName, IsReadOnly = field.IsReadOnly, IsRequired = field.IsRequired, DataType = fieldDataTpe }; modelField.Data = converter.Deserialize( rowField, new ConversionContext { Field = field, Module = modToList, Repository = ModRepository }); modelRow.Fields.Add(modelField); } viewModel.Add(modelRow); } return(View(viewModel)); }
public ActionResult module(int moduleid, DynamicModuleViewModel _entryToCreate) { var doverApi = new ModuleApi(ModRepository); var module = ModRepository.GetModuleById(moduleid, m => m.Fields); var result = String.Empty; var filteredList = new DynamicModuleFieldList(); filteredList.AddRange(_entryToCreate.Fields.Where(f => CheckFieldExistency(f))); _entryToCreate.Fields = filteredList; try { doverApi.CreateModule(module, _entryToCreate); result = "<result>Success</result>"; } catch (CreateModuleFailedException) { result = "<result>Failure</result>"; } return(Content(result, "text/xml", Encoding.UTF8)); }
public ActionResult module(int moduleid, int?id, DynamicModuleViewModel _entryToEdit) { var result = String.Empty; try { var doverApi = new ModuleApi(ModRepository); var module = ModRepository.GetModuleById(moduleid, m => m.Rows.Include <Row, Cell>(r => r.Cells), m => m.Fields); var filteredList = new DynamicModuleFieldList(); filteredList.AddRange(_entryToEdit.Fields.Where(f => CheckFieldExistency(f))); _entryToEdit.Fields = filteredList; doverApi.SetModuleData(module, id, _entryToEdit, true); result = "<result>Success</result>"; } catch (Exception e) { result = "<result>Failure</result>"; } return(Content(result, "text/xml", Encoding.UTF8)); }
public ActionResult Edit(object module, int?id, DynamicModuleViewModel _entryToEdit) { if (!ModelState.IsValid) { return(View(_entryToEdit)); } var moduleToEdit = module as Module; try { var moduleApi = new ModuleApi(ModRepository); moduleApi.SetModuleData(moduleToEdit, id, _entryToEdit); } catch (ModuleRowNotFoundException e) { TempData["Message"] = e.Message; return(this.RedirectToAction("List")); } TempData["Message"] = "Seus dados foram salvos."; return((moduleToEdit.ModuleType == (int)ModuleType.Dynamic) ? RedirectToAction("List") : RedirectToAction("Index", "Home")); }
public ActionResult Create(object module, DynamicModuleViewModel _entryToCreate) { if (!ModelState.IsValid) { return(View(_entryToCreate)); } var newModule = module as Module; try { var moduleApi = new ModuleApi(ModRepository); moduleApi.CreateModule(newModule, _entryToCreate); } catch (CreateModuleFailedException e) { TempData["Message"] = e.Message; return(View(_entryToCreate)); } TempData["Message"] = "Registro criado com sucesso."; return((newModule.ModuleType == (int)ModuleType.Dynamic) ? RedirectToAction("List") : RedirectToAction("Index", "Home")); }
/// <summary> /// Returns module records based on the provided module module /// and filtering parameters. /// </summary> /// <param name="module">The module to be queried</param> /// <param name="id">Optional row id for filtering</param> /// <returns>The matching rows in the specified module</returns> public DynamicModuleApiResult GetModuleData(IModule module, int?id, NameValueCollection _filters) { if (module == null) { return(null); } var moduleData = new DynamicModuleApiResult() { ModuleName = module.ModuleName, ModuleType = module.ModuleType, ModuleId = module.Id }; var rows = module.Rows; var filteredRows = (id != null) ? rows.Where(r => r.ID == id) : rows.AsEnumerable(); // Search filter string reqFilter = _filters["_Filter"]; if (!String.IsNullOrWhiteSpace(reqFilter)) { filteredRows = filteredRows.Where(r => r.Cells.Any(rf => rf.Data != null && rf.Data.IndexOf(reqFilter, StringComparison.CurrentCultureIgnoreCase) != -1)); } // Random entry filter string randomEntry = _filters["_Random"]; int randomTotal; if (!String.IsNullOrWhiteSpace(randomEntry) && Int32.TryParse(randomEntry, out randomTotal)) { filteredRows = filteredRows.OrderBy(r => Guid.NewGuid()).Take(randomTotal); } foreach (var key in _filters.AllKeys.Except(new string[] { "_Filter", "_Random" })) { var fieldName = key; var value = _filters[fieldName]; filteredRows = filteredRows.Where(r => r.Cells.Any(rf => rf.Field.FieldName == fieldName && rf.Data != null && rf.Data.IndexOf(value, StringComparison.CurrentCultureIgnoreCase) != -1)); } foreach (var row in filteredRows.OrderBy(r => r.SortIndex)) { DynamicModuleViewModel modelRow = new DynamicModuleViewModel() { ID = row.ID }; foreach (Cell rowField in row.Cells) { var field = rowField.Field; var sFieldDataType = field.FieldDataType.Name; var fieldDataTpe = Type.GetType(sFieldDataType); var modelField = new DynamicModuleField() { DisplayName = field.DisplayName, PropertyName = field.FieldName, IsReadOnly = field.IsReadOnly, IsRequired = field.IsRequired, DataType = fieldDataTpe }; var converter = FieldValueConversion.GetConverter(fieldDataTpe); modelField.Data = converter.Deserialize( rowField, new ConversionContext { Field = field, Module = module, Repository = ModRepository }); modelRow.Fields.Add(modelField); } moduleData.Rows.Add(modelRow); } return(moduleData); }
public void SetPartialModuleData(IModule _dbModule, int?id, DynamicModuleViewModel _moduleData) { SetModuleData(_dbModule, id, _moduleData, true); }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var routeValues = controllerContext.RouteData.Values; var id = -1; var moduleId = -1; var account = routeValues["account"] as string; var moduleName = routeValues["modulename"] as string; Int32.TryParse(routeValues["moduleid"] as string, out moduleId); Int32.TryParse(routeValues["id"] as string, out id); var module = ModRepository.GetModuleById(moduleId, m => m.Account, m => m.Fields.Include<Field, FieldDataType>(f => f.FieldDataType), m => m.Rows.Include<Row, Cell>(r => r.Cells)); if (module == null) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return null; } if (module.Account == null || module.Account.SubdomainName != account) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return null; } // if we have a module name, use it for filtering if (!String.IsNullOrWhiteSpace(moduleName) && module.ModuleName != moduleName) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return null; } var theModel = new DynamicModuleViewModel() { ID = id, ModuleName = module.ModuleName, DisplayName = module.DisplayName }; // Switch back to the original data annotations model metadata implementation ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider(); foreach (Field field in module.Fields) { field.FieldDataTypeReference.Load(); string sFieldDataType = field.FieldDataType.Name; Type fieldDataTpe = Type.GetType(sFieldDataType); var modelField = new DynamicModuleField() { DisplayName = field.DisplayName, PropertyName = field.FieldName, IsReadOnly = field.IsReadOnly, IsRequired = field.IsRequired, DataType = fieldDataTpe }; IModelBinder fieldBinder = ModelBinders.Binders.GetBinder(fieldDataTpe); var fieldBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, fieldDataTpe), ModelName = modelField.PropertyName, ModelState = bindingContext.ModelState, ValueProvider = bindingContext.ValueProvider, PropertyFilter = bindingContext.PropertyFilter }; modelField.Data = fieldBinder.BindModel(controllerContext, fieldBindingContext); if (modelField.IsRequired && (modelField.Data == null || String.IsNullOrEmpty(modelField.Data.ToString()))) { bindingContext.ModelState.AddModelError(modelField.PropertyName, "O campo " + modelField.DisplayName + " é obrigatório"); } theModel.Fields.Add(modelField); } return theModel; }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var routeValues = controllerContext.RouteData.Values; var id = -1; var moduleId = -1; var account = routeValues["account"] as string; var moduleName = routeValues["modulename"] as string; Int32.TryParse(routeValues["moduleid"] as string, out moduleId); Int32.TryParse(routeValues["id"] as string, out id); var module = ModRepository.GetModuleById(moduleId, m => m.Account, m => m.Fields.Include <Field, FieldDataType>(f => f.FieldDataType), m => m.Rows.Include <Row, Cell>(r => r.Cells)); if (module == null) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return(null); } if (module.Account == null || module.Account.SubdomainName != account) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return(null); } // if we have a module name, use it for filtering if (!String.IsNullOrWhiteSpace(moduleName) && module.ModuleName != moduleName) { bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado"); return(null); } var theModel = new DynamicModuleViewModel() { ID = id, ModuleName = module.ModuleName, DisplayName = module.DisplayName }; // Switch back to the original data annotations model metadata implementation ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider(); foreach (Field field in module.Fields) { field.FieldDataTypeReference.Load(); string sFieldDataType = field.FieldDataType.Name; Type fieldDataTpe = Type.GetType(sFieldDataType); var modelField = new DynamicModuleField() { DisplayName = field.DisplayName, PropertyName = field.FieldName, IsReadOnly = field.IsReadOnly, IsRequired = field.IsRequired, DataType = fieldDataTpe }; IModelBinder fieldBinder = ModelBinders.Binders.GetBinder(fieldDataTpe); var fieldBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, fieldDataTpe), ModelName = modelField.PropertyName, ModelState = bindingContext.ModelState, ValueProvider = bindingContext.ValueProvider, PropertyFilter = bindingContext.PropertyFilter }; modelField.Data = fieldBinder.BindModel(controllerContext, fieldBindingContext); if (modelField.IsRequired && (modelField.Data == null || String.IsNullOrEmpty(modelField.Data.ToString()))) { bindingContext.ModelState.AddModelError(modelField.PropertyName, "O campo " + modelField.DisplayName + " é obrigatório"); } theModel.Fields.Add(modelField); } return(theModel); }
public IActionResult Edit(DynamicModuleViewModel <T> configuration) { var dynamicModuleModelRequest = m_dynamicModuleManager.GetById(configuration.Id); if (dynamicModuleModelRequest.HasError) { return(NotFound(configuration.Id)); } var dynamicModuleModel = dynamicModuleModelRequest.Result; var moduleInfo = m_dynamicModuleProvider.GetContextByNameOrGuid( dynamicModuleModel.Name, dynamicModuleModel.ModuleGuid ); if (moduleInfo == null) { return(NotFound(configuration.Id)); } var configurationDto = moduleInfo.ModuleConfiguration ?? moduleInfo.EmptyModuleConfiguration; configuration.CustomConfigurationViewModel.Name = configuration.Name; moduleInfo.ModuleConfigurationManager.HydrateModuleConfiguration( configurationDto, configuration.CustomConfigurationViewModel ); m_dynamicModuleManager.UpdateConfiguration( configuration.Id, configurationDto, moduleInfo.LibModuleInfo.Version ); var viewModelWithMainLogo = configuration.CustomConfigurationViewModel as IModuleMainLogoViewModel; if (viewModelWithMainLogo?.MainLogo != null) { if (ContentType.ImageContentTypes.Contains(viewModelWithMainLogo.MainLogo.ContentType)) { var dynamicModuleBlobRequest = m_dynamicModuleManager.GetDynamicModuleBlob( configuration.Id, DynamicModuleBlobEnum.MainLogo ); var mainLogoStream = viewModelWithMainLogo.MainLogo.OpenReadStream(); var mainLogoFileExtension = Path.GetExtension(viewModelWithMainLogo.MainLogo.FileName).Substring(1).ToLower(); var dynamicModuleBlob = dynamicModuleBlobRequest.Result; if (dynamicModuleBlobRequest.Succeeded && dynamicModuleBlob != null) { m_dynamicModuleManager.UpdateDynamicModuleBlob( dynamicModuleBlob.Id, mainLogoStream, mainLogoFileExtension ); } else { m_dynamicModuleManager.CreateDynamicModuleBlob( configuration.Id, DynamicModuleBlobEnum.MainLogo, mainLogoStream, mainLogoFileExtension ); } } } return(RedirectToAction("Edit", "DynamicModule", new { id = configuration.Id })); }