Esempio n. 1
0
        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
                }
            });
        }
Esempio n. 2
0
        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
            });
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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
            });
        }
Esempio n. 5
0
        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
            });
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        public ActionResult Execute(UI.Action action)
        {
            var result = new ActionResult()
            {
                Success    = true,
                ActionType = action.ActionType,
                Data       = null
            };

            return(result);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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
            });
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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,
            });
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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
            });
        }
Esempio n. 17
0
        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
            });
        }
Esempio n. 18
0
        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
                })
            });
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
        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
                });
            }
        }
Esempio n. 23
0
        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]);
                    }
                }
            }
        }
Esempio n. 24
0
        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);
        }