public ActionResult Execute(UI.Action action) { if (!action.Props.ContainsKey("FileId")) { throw new CustomValidationException("There is not Prop FileId"); } var fileId = Convert.ToInt32(action.Props["FileId"]); var fileService = new DAL.Services.DbFileService(); var file = fileService.GetFile(fileId); return(new ActionResult() { Success = true, ActionType = action.ActionType, Data = new Incoming.File() { Name = file.Name, ContentType = file.ContentType, ContentData = file.ContentData } }); }
public ActionResult Execute(UI.Action action) { var searchFieldIds = action .Parameters .Where(p => p.ParameterType == ParameterType.AutoCompleteSearchFieldId) .Select(p => Convert.ToInt32(p.DefaultValue)) .ToList(); var displayFieldIds = action .Parameters .Where(p => p.ParameterType == ParameterType.AutoCompleteDisplayFieldId) .Select(p => Convert.ToInt32(p.DefaultValue)) .ToList(); var searchFields = DbEditorService.GetFields(searchFieldIds); var displayFields = DbEditorService.GetFields(displayFieldIds); var templateName = searchFields.First().Template.Name; var result = DbDocumentService.GetDocuments(displayFields, searchFields, DAL.Models.OperationType.StartsWith, action.Value); return(new ActionResult() { ActionType = action.ActionType, Success = true, Data = result }); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, Event parentNode) { if (parentNode == null) { throw new CustomValidationException("Event argument in UploadFileActionBehaviour is null"); } Control control = parentNode.ParentNode as Control; if (!control.Props.ContainsKey("FieldId")) { throw new CustomValidationException("There is no FieldId Prop in FileUploadControl"); } int fieldId = Convert.ToInt32(control.Props["FieldId"]); if (fieldId <= 0) { throw new CustomValidationException("FieldId <= 0"); } var action = new UI.Action() { Virtual = true, ParentNode = parentNode, ActionType = ActionType.UploadFile, DocId = control.DocId, Props = new Dictionary <string, object>() { { "FieldId", fieldId } } }; return(action); }
public ActionResult Execute(UI.Action action) { var view = action.ViewData; var templateDef = DbEditorService.GetTemplate(Convert.ToInt32(view.Props["TemplateId"])); var controls = new List <UI.Control>(); GetFlatListOfControls(action.ViewData, ref controls); var dictionaryControls = controls.Where(c => c.ControlType.In(ControlType.MultiSelect, ControlType.Select)); var labelControls = controls.Where(c => c.ControlType.In(ControlType.Label)); var referenceControls = controls.Where(c => c.ControlType.In(ControlType.Table)); var dataControls = controls .Except(dictionaryControls) .Except(referenceControls) .Except(labelControls); var dataTableKeyValues = dataControls.Select(c => new KeyValuePair <string, object>((string)c.Props["Name"], c.Value)).ToList(); Dictionary <string, object> values = dataTableKeyValues.ToDictionary(kv => kv.Key, kv => kv.Value); DbDocumentService.UpdateDocument(templateDef.Name, action.DocId.Value, values); ProcessDictionaryControls(dictionaryControls); return(new ActionResult() { ActionType = action.ActionType, Success = true }); }
public ActionResult Execute(UI.Action action) { if (!action.Props.ContainsKey("FileId")) { throw new CustomValidationException("There is not Prop FileId"); } int fileId = Convert.ToInt32(action.Props["FileId"]); DAL.Services.DbFileService fileService = new DAL.Services.DbFileService(); DAL.Models.File file = fileService.GetFile(fileId); file.Deleted = true; file.DeleteDate = DateTime.Now; file.DeletedBy = CurrentUser.Login; fileService.UpdateFile(file); return(new ActionResult() { Success = true, ActionType = action.ActionType }); }
public UI.Action Make(ActionDefinition definition, DbSearchResponse ticketSet, UI.Event parentNode) { var action = new UI.Action() { ActionType = Mapper.Map <UI.ActionType>(definition.ActionType), ParentNode = parentNode }; return(action); }
public ActionResult Execute(UI.Action action) { var result = new ActionResult() { Success = true, ActionType = action.ActionType, Data = null }; return(result); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, Event parentNode) { var action = new UI.Action() { Virtual = true, ParentNode = parentNode, ActionType = ActionType.DownloadFile, DocId = parentNode.DocId }; return(action); }
public ActionResult Execute(UI.Action action) { var filters = action.ViewData.Filters; var viewId = Convert.ToInt32(filters.First().Props["ViewId"]); var dalViewDef = DbEditorService.GetViewDeep(viewId); var viewBehaviour = BehaviourSelector.ViewBehaviours[Mapper.Map <UI.ViewType>(dalViewDef.ViewType)](CurrentUser); var pageNumParam = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.PageNumber); var pageSizeParam = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.PageSize); var sortFieldParam = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.SortFieldId); var sortDirectionParam = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.SortDirection); bool hasPageAndSortInfo = true; if (string.IsNullOrEmpty(pageNumParam.DefaultValue) || string.IsNullOrEmpty(pageSizeParam.DefaultValue) || string.IsNullOrEmpty(sortFieldParam.DefaultValue) || string.IsNullOrEmpty(sortDirectionParam.DefaultValue)) { hasPageAndSortInfo = false; } DAL.Models.DbSearchRequestParams sortAndPageParams = DAL.Models.DbSearchRequestParams.GetDefault(dalViewDef); if (hasPageAndSortInfo) { var pageNum = Convert.ToInt32(pageNumParam.DefaultValue); var pageSize = Convert.ToInt32(pageSizeParam.DefaultValue); var sortFieldId = Convert.ToInt32(sortFieldParam.DefaultValue); var sortDir = sortDirectionParam.DefaultValue; var sortField = DbEditorService.GetField(sortFieldId); sortAndPageParams = new DAL.Models.DbSearchRequestParams(pageNum, pageSize, sortField, sortDir); } var ticketSet = DbDocumentService.GetDocuments(dalViewDef, filters.Select(f => (IFilterWithValue)f).ToList(), sortAndPageParams); var viewDef = Mapper.Map <UI.ViewDefinition>(dalViewDef); var view = BehaviourSelector.ViewBehaviours[Mapper.Map <UI.ViewType>(viewDef.ViewType)](CurrentUser).Make(viewDef, ticketSet, null, null); return(new ActionResult() { Success = true, ActionType = action.ActionType, Data = view }); }
public string GetSingleString(UI.Action action, UI.ParameterType parameter) { var baseValue = string.Empty; try { baseValue = action.Parameters.Single(x => x.ParameterType == UI.ParameterType.ServiceProxyName).DefaultValue; } catch (InvalidOperationException) { throw new CustomValidationException($"Single string parameter of type '{parameter.ToString()}' expected."); } return(baseValue); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, Event parentNode) { var action = new UI.Action() { ActionType = Mapper.Map <UI.ActionType>(definition.ActionType), ParentNode = parentNode }; action.Parameters = definition .Parameters .Select(p => BehaviourSelector.ParameterBehaviours[Mapper.Map <UI.ParameterType>(p.ParameterType)](CurrentUser).Make(p, action)).ToList(); return(action); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, Event parentNode) { var action = new UI.Action() { Virtual = true, ParentNode = parentNode, ActionType = ActionType.Search }; var parentControl = action.ParentNode.ParentNode; action.Parameters = new List <Parameter>() { new UI.Parameter() { ParameterType = ParameterType.PageNumber, ParentNode = action, Virtual = true, DefaultValue = parentControl.Props.ContainsKey("PageNumber") ? (string)parentControl.Props["PageNumber"] : string.Empty }, new UI.Parameter() { ParameterType = ParameterType.PageSize, ParentNode = action, Virtual = true, DefaultValue = parentControl.Props.ContainsKey("PageSize") ? (string)parentControl.Props["PageSize"] : string.Empty }, new UI.Parameter() { ParameterType = ParameterType.SortFieldId, ParentNode = action, Virtual = true, DefaultValue = parentControl.Props.ContainsKey("SortFieldId") ? (string)parentControl.Props["SortFieldId"] : string.Empty }, new UI.Parameter() { ParameterType = ParameterType.SortDirection, ParentNode = action, Virtual = true, DefaultValue = parentControl.Props.ContainsKey("SortDirection") ? (string)parentControl.Props["SortDirection"] : string.Empty } }; return(action); }
public ActionResult Execute(UI.Action action) { var serviceName = GetSingleString(action, UI.ParameterType.ServiceProxyName); if (serviceName == null) { throw new CustomValidationException($"Service definition not found."); } var serviceProxy = new ProxyServiceManager().GetService(serviceName); Task.WaitAll(serviceProxy.ExecuteRequest(action)); return(new ActionResult { Success = true, }); }
public int GetSingleInt(UI.Action action, UI.ParameterType parameter) { var baseValue = string.Empty; try { baseValue = action.Parameters.Single(x => x.ParameterType == UI.ParameterType.ServiceProxyName).DefaultValue; } catch (InvalidOperationException) { throw new CustomValidationException($"Single integer parameter of type '{parameter.ToString()}' expected."); } if (!int.TryParse(baseValue, out int result)) { throw new CustomValidationException($"Couldn't find or read single integer parameter '{parameter.ToString()}'."); } return(result); }
public Parameter Make(ParameterDefinition definition, UI.Action parentNode) { var p = new Parameter() { ParameterType = Mapper.Map <UI.ParameterType>(definition.ParameterType), ParentNode = parentNode }; p.DefaultValue = definition.DefaultValue; p.Props = new Dictionary <string, object>() { { "Name", definition.Name }, { "FieldId", definition.FieldId }, { "ActionId", definition.ActionId }, { "ControlId", definition.ControlId } }; return(p); }
public ActionResult Execute(UI.Action action) { Parameter templateParam = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.TemplateId); if (templateParam == null) { throw new CustomValidationException($"There is no TemplateId parameter for action DeleteDocument."); } int templateId = Convert.ToInt32(templateParam.DefaultValue); DAL.Models.Template templateDef = DbEditorService.GetTemplate(templateId); DbDocumentService.UpdateDocumentToDeleted(templateDef.Name, action.DocId.Value); return(new ActionResult() { ActionType = action.ActionType, Success = true }); }
public ActionResult Execute(UI.Action action) { var sectionIdStr = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.SectionId).DefaultValue; var sectionId = Convert.ToInt32(sectionIdStr); var dbRoles = DbEditorService.GetRolesBySectionId(sectionId); for (var i = 0; i < dbRoles.Count; i++) { var irrelevantPermissions = dbRoles[i].Permissions.Where(p => p.View.ParentView != null).ToList(); for (var ii = 0; ii < irrelevantPermissions.Count(); ii++) { dbRoles[i].Permissions.Remove(irrelevantPermissions[ii]); } } var roles = dbRoles.Select(r => { var ur = DbEditorService.GetUserRole(r.Id, CurrentUser.Id); var roleDef = Mapper.Map <UI.RoleDefinition>(r); roleDef.CanBeEditedByCurrentUser = ur?.UserCanChangeRole ?? false; return(roleDef); }).ToList(); var view = new SectionSettingsViewBehaviour(CurrentUser).Make(null, null, null, (v) => { v.Props.Add("Roles", roles.ToList()); v.Props.Add("SectionId", sectionId); }); return(new ActionResult() { Success = true, ActionType = ActionType.GetSectionSettings, Data = view }); }
public ActionResult Execute(UI.Action action) { if (!action.Props.ContainsKey("FieldId")) { throw new CustomValidationException("There is no FieldId in Action.Props"); } int fieldId = Convert.ToInt32(action.Props["FieldId"]); if (fieldId <= 0) { throw new CustomValidationException("fieldId <= 0"); } int docId = action.DocId.Value; IEnumerable <DAL.Models.File> files = (action.Value as List <Incoming.File>).Select(f => new DAL.Models.File() { Name = f.Name, ContentType = f.ContentType, ContentData = f.ContentData, Comment = f.Comment, CreateDate = DateTime.Now, CreatedBy = CurrentUser.Login }); DAL.Services.DbFileService fileService = new DAL.Services.DbFileService(); return(new ActionResult() { Success = true, ActionType = action.ActionType, Data = fileService.AddFiles(fieldId, docId, files).Select(f => new Incoming.File() { Id = f.Id, Name = f.Name, Comment = f.Comment }) }); }
public ActionResult Execute(UI.Action action) { var filterIdParameter = action.Parameters.FirstOrDefault(p => p.ParameterType == ParameterType.FilterId); var dbFilterDef = DbEditorService.GetFilter(Convert.ToInt32(filterIdParameter.DefaultValue)); if (dbFilterDef == null) { throw new CustomValidationException("Filter is not defined for this action."); } var filterDef = Mapper.Map <UI.FilterDefinition>(dbFilterDef); var filter = BehaviourSelector.FilterBehaviours[Mapper.Map <UI.FilterType>(filterDef.FilterType)](CurrentUser).Make(filterDef, null); var dbViewDef = DbEditorService.GetViewDeep(filterDef.ViewId); var filterValues = new Dictionary <DAL.Models.Filter, object>() { { dbFilterDef, null } }; var searchParams = DAL.Models.DbSearchRequestParams.GetDefault(dbViewDef); var tickets = DbDocumentService.GetDocuments(dbViewDef, new List <IFilterWithValue>() { filter }, searchParams); var viewDef = Mapper.Map <UI.ViewDefinition>(dbViewDef); var view = BehaviourSelector.ViewBehaviours[Mapper.Map <UI.ViewType>(viewDef.ViewType)](CurrentUser).Make(viewDef, tickets, null, null); var result = new ActionResult() { Success = true, ActionType = action.ActionType, Data = view }; return(result); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, UI.Event parentNode) { var action = new UI.Action() { Virtual = true, ParentNode = parentNode, ActionType = ActionType.GetSectionSettings }; action.Parameters = new List <Parameter>() { new UI.Parameter() { ParameterType = ParameterType.SectionId, ParentNode = action, Virtual = true, DefaultValue = ((SectionDefinition)parentNode.ParentNode.ParentNode.Definition).Id.ToString() } }; return(action); }
public UI.Action Make(ActionDefinition definition, DAL.Models.DbSearchResponse ticketSet, UI.Event parentNode) { var action = new UI.Action() { ActionType = Mapper.Map <UI.ActionType>(definition.ActionType), ParentNode = parentNode }; var control = parentNode.ParentNode; action.DocId = control.DocId; if (control.Props.ContainsKey("FieldId")) { action.Props.Add("FieldId", parentNode.ParentNode.Props["FieldId"]); } action.Parameters = definition .Parameters .Select(p => BehaviourSelector.ParameterBehaviours[Mapper.Map <UI.ParameterType>(p.ParameterType)](CurrentUser).Make(p, action)) .ToList(); return(action); }
public ActionResult Execute(UI.Action action) { // Создаваемый шаблон var tempIdParam = action.Parameters.FirstOrDefault(p => p.ParameterType == UI.ParameterType.TemplateId); if (tempIdParam == null) { throw new CustomValidationException($"TemplateId parameter missing for action {action.Props["Id"]}."); } // Получаем модель шаблона по которой будем создавать документ var templateDef = DbEditorService.GetTemplate(Convert.ToInt32(tempIdParam.DefaultValue)); // Создаем значения по умолчанию, которыми будет заполнен новый документ var values = templateDef.Fields .Select(f => new KeyValuePair <DAL.Models.Field, object>(f, null)) .ToDictionary(kv => kv.Key, kv => kv.Value); // Проверяем есть ли параметры копирования значений в новый шаблон FillValues(action, templateDef, values); // Создаем документ шаблона и получаем его ID var docId = DbDocumentService.CreateDocument(values); // Страницу на которую мы перейдем и в которой будет созданный документ по шаблону var viewIdParam = action.Parameters.FirstOrDefault(p => p.ParameterType == UI.ParameterType.ViewId); // Проверка параметров if (viewIdParam != null) { // Проверяем есть ли на странице фильтр с помощью которого мы попадем на нее var viewDefDal = DbEditorService.GetViewDeep(Convert.ToInt32(viewIdParam.DefaultValue)); var filterDefDal = viewDefDal.Filters.FirstOrDefault(); if (filterDefDal == null) { throw new CustomValidationException($"View {viewDefDal.Id} must have a filter defined."); } // Создаем фильтр поля ID с помощью которого мы откроем страницу которая привязана к созданному документу // Заполняем его значением созданного документа var filterDef = Mapper.Map <UI.FilterDefinition>(filterDefDal); var filter = BehaviourSelector.FilterBehaviours[Mapper.Map <UI.FilterType>(filterDef.FilterType)](CurrentUser).Make(filterDef, null); filter.Value = docId; // Ищем только что созданный документ по фильтру и открываем страницу с привязкой к этому документу var searchParams = DAL.Models.DbSearchRequestParams.GetDefault(viewDefDal); var ticketSet = DbDocumentService.GetDocuments(viewDefDal, new List <DAL.Interfaces.IFilterWithValue>() { filter }, searchParams); var viewDef = Mapper.Map <UI.ViewDefinition>(viewDefDal); var view = BehaviourSelector.ViewBehaviours[Mapper.Map <UI.ViewType>(viewDef.ViewType)](CurrentUser).Make(viewDef, ticketSet, null, null); // Возвращаем страницу в качестве результата return(new ActionResult() { ActionType = action.ActionType, Data = view, Success = true }); } else { return(new ActionResult() { ActionType = action.ActionType, Success = true }); } }
private static void FillValues(UI.Action action, DAL.Models.Template templateDef, Dictionary <DAL.Models.Field, object> values) { List <Parameter> copyParameters = action.Parameters .FindAll(p => p.ParameterType == UI.ParameterType.CopyValueFrom || p.ParameterType == UI.ParameterType.CopyValueTo); if (copyParameters.Count > 0) { if (!copyParameters.All(p => p.Props.ContainsKey("Name") && !string.IsNullOrEmpty((string)p.Props["Name"]))) { throw new CustomValidationException($"All CopyParameters have to contain a Name property. ActionId={action.Definition.Id}"); } if (!copyParameters.Where(p => p.ParameterType == ParameterType.CopyValueTo).All(p => p.Props.ContainsKey("FieldId"))) { throw new CustomValidationException($"All CopyParameters.Destination have to contain a FieldId property. ActionId={action.Definition.Id}"); } // Создаем набор параметров из списка двух типов параметров List <Incoming.CopyFieldParameter> prms = copyParameters.GroupBy(p => (string)p.Props["Name"]).Select(g => { if (g.Count() != 2) { throw new CustomValidationException($"There is no pair for parameter: {g.Key}"); } Parameter paramFrom = g.FirstOrDefault(p => p.ParameterType == ParameterType.CopyValueFrom); Parameter paramTo = g.FirstOrDefault(p => p.ParameterType == ParameterType.CopyValueTo); paramFrom.Props.Where(p => p.Value == null).ToList().ForEach(p => paramFrom.Props.Remove(p.Key)); paramTo.Props.Where(p => p.Value == null).ToList().ForEach(p => paramTo.Props.Remove(p.Key)); int fieldFromId = paramFrom.Props.ContainsKey("FieldId") ? Convert.ToInt32(paramFrom.Props["FieldId"]) : 0; int fieldToId = paramTo.Props.ContainsKey("FieldId") ? Convert.ToInt32(paramTo.Props["FieldId"]) : 0; Incoming.CopyFieldParameter paramCopy = new Incoming.CopyFieldParameter() { DefaultValue = paramFrom.DefaultValue, FieldFromId = fieldFromId, FieldToId = fieldToId }; return(paramCopy); }).ToList(); // Заполняем значениями по умолчанию foreach (var param in prms.Where(p => p.FieldToId > 0 && p.DefaultValue != null)) { DAL.Models.Field templateDefField = templateDef.Fields.FirstOrDefault(f => f.Id == param.FieldToId); if (templateDefField == null) { throw new CustomValidationException($"Destination template missing field id={param.FieldToId}."); } values.Add(templateDefField, param.DefaultValue); } // Заполняем значениями документа из которого был создан новый документ // Определяем шаблон источника int fieldId = prms.FirstOrDefault(p => p.FieldFromId > 0)?.FieldFromId ?? 0; if (fieldId > 0) { DbEditorService editor = new DbEditorService(); DAL.Models.Field field = editor.GetField(fieldId); DAL.Models.Template templateDefFrom = DbEditorService.GetTemplate(field.TemplateId); int parentDocId = Convert.ToInt32(action.DocId); Dictionary <string, object> documentFrom = DbDocumentService.GetDocument(templateDefFrom.Name, parentDocId); foreach (var param in prms.Where(p => p.FieldFromId > 0)) { DAL.Models.Field fieldFrom = templateDefFrom.Fields.FirstOrDefault(f => f.Id == param.FieldFromId); DAL.Models.Field fieldTo = templateDef.Fields.FirstOrDefault(f => f.Id == param.FieldToId); values.Add(fieldTo, documentFrom[fieldFrom.Name]); } } } }
public ActionResult Execute(UI.Action action) { if (action.DocId == null) { throw new CustomValidationException("DocId not defined for action's parent control. Please assign Id field to control."); } var viewIdParameter = action.Parameters.FirstOrDefault(p => p.ParameterType == UI.ParameterType.ViewId); var anchorParameter = action.Parameters.FirstOrDefault(p => p.ParameterType == UI.ParameterType.ViewAnchor); var dbViewDef = DbEditorService.GetViewDeep(Convert.ToInt32(viewIdParameter.DefaultValue)); var viewDef = Mapper.Map <ViewDefinition>(dbViewDef); var fieldId = Convert.ToInt32(action.Props["FieldId"]); var field = DbEditorService.GetField(fieldId); var filter = new VirtualFilter() { Operation = DAL.Models.OperationType.EqualTo, ViewId = dbViewDef.Id }; filter.FilterFields = new List <IFilterField>() { new VirtualFilterField() { ChainId = 0, Depth = 0, Filter = filter, Field = field } }; var filterWithValue = new VirtualFilterWithValue() { Filter = filter, Value = action.DocId }; var searchParams = DAL.Models.DbSearchRequestParams.GetDefault(dbViewDef); var ticketSet = DbDocumentService.GetDocuments(dbViewDef, new List <IFilterWithValue>() { filterWithValue }, searchParams); UI.View view; if (ticketSet.Tickets.Count == 1) { view = BehaviourSelector.ViewBehaviours[Mapper.Map <UI.ViewType>(dbViewDef.ViewType)](CurrentUser) .Make(viewDef, ticketSet, null, null); var views = GetFlatListOfViews(view); if (anchorParameter != null && views.Count > 0) { foreach (var v in views) { if (v.Props.ContainsKey("Active")) { v.Props["Active"] = (v.Definition?.Id == Convert.ToInt32(anchorParameter.DefaultValue)); } } } } else { throw new CustomValidationException("Applying filters in goto action does not result in a single document."); } var result = new ActionResult() { Success = true, ActionType = action.ActionType, Data = view }; return(result); }