Ejemplo n.º 1
0
        public async Task <SearchResult <FieldData> > Search(SearchRequest searchRequest, CancellationToken cancellationToken)
        {
            var request  = (FieldDataSearchRequest)searchRequest ?? throw new ArgumentNullException(nameof(searchRequest));
            var metadata = request.Metadata ?? throw new ArgumentNullException(nameof(request.Metadata));

            var metadataMap = metadata.ToDictionary(x => x.Key);

            await using (var db = _dbContextFactory.Create())
            {
                var fieldData = db.GetTable <DbFieldData>()
                                // todo: load multiple items
                                .Where(x => x.EntityTypeCode == request.EntityTypeCode && request.EntityUids.Contains(x.EntityUid))
                                .AsEnumerable()
                                .GroupBy(x => x.EntityUid)
                                .ToList();

                var result = new SearchResult <FieldData>
                {
                    Rows = fieldData.Select(x =>
                    {
                        var data = new FieldData();

                        foreach (var dbData in x)
                        {
                            if (metadataMap.TryGetValue(dbData.Key, out var field))
                            {
                                var fieldProvider = _fieldProviderRegistry.GetFieldTypeProvider(field.Type);

                                data[dbData.Key] = fieldProvider.ReadFromStorage(dbData.Value);
                            }
                        }

                        return(data);
                    }).ToList()
                };

                return(await Task.FromResult(result));
            }
        }
Ejemplo n.º 2
0
        public async Task <SearchResult <FieldMetadata> > Search(SearchRequest searchRequest, CancellationToken cancellationToken)
        {
            var request = (MetadataSearchRequest)searchRequest ?? throw new ArgumentNullException(nameof(searchRequest));

            using (var db = _dbContextFactory.Create())
            {
                var query = db.GetTable <DbFieldMetadata>()
                            .Where(x => x.EntityTypeCode == request.EntityTypeCode &&
                                   x.EntityUid == request.EntityUid);

                if (request.Uid != null)
                {
                    query = query.Where(x => x.Uid == request.Uid);
                }

                if (request.IsActive != null)
                {
                    query = query.Where(x => x.IsActive == request.IsActive);
                }

                if (request.IsSystem != null)
                {
                    query = query.Where(x => x.IsSystem == request.IsSystem);
                }

                var paged = query.Apply(request, x => x.DisplayOrder);

                var data = await paged
                           .Select(x => x)
                           .ToListAsync(cancellationToken);

                var result = new List <FieldMetadata>();

                foreach (var dbField in data)
                {
                    var fieldTypeProvider = _fieldProviderRegistry.GetFieldTypeProvider(dbField.Type);
                    // todo: use factory (?) move to provider (!?)
                    var field = (FieldMetadata)Activator.CreateInstance(fieldTypeProvider.FieldType);

                    field.Uid          = dbField.Uid;
                    field.Key          = dbField.Key;
                    field.Name         = dbField.Name;
                    field.Description  = dbField.Description;
                    field.Placeholder  = dbField.Placeholder;
                    field.Icon         = dbField.Icon;
                    field.Active       = dbField.IsActive;
                    field.System       = dbField.IsSystem;
                    field.Readonly     = dbField.IsReadonly;
                    field.Required     = dbField.IsRequired;
                    field.DisplayOrder = dbField.DisplayOrder;

                    var propertiesType = field.GetPropertiesType();

                    if (propertiesType != null && dbField.Props != null)
                    {
                        var properties = _jsonSerializer.Deserialize(dbField.Props, propertiesType);

                        field.SetProperties(properties);
                    }

                    result.Add(field);
                }

                return(new SearchResult <FieldMetadata>
                {
                    TotalCount = query.GetTotalCount(request),
                    Rows = result
                });
            }
        }
Ejemplo n.º 3
0
        public async Task <DataView> GetView(string viewId)
        {
            if (_registrator.TryGet(viewId, out var dataView))
            {
                return(dataView);
            }

            var result = new DataView {
                Id = viewId
            };

            if (viewId == "Setup/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "companyName", Name = "Наименование компании", Required = true, Description = "Наименовании компании-оператора системы"
                    },
                    new TextField {
                        Key = "adminEmail", Name = "Email администратора", Required = true
                    },
                    new PasswordField {
                        Key = "adminPassword", Name = "Пароль администратора", Required = true
                    },
                };
            }

            if (viewId == "EntityStatus/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "displayOrder", Name = "#", Width = 10, Sortable = true },
                    new() { Key = "code", Name = "Code", Width = 70, Sortable = true },
                    new() { Key = "name", Name = "Name", Width = 550, Sortable = true }
                };
            }

            if (viewId == "EntityStatus/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new NumberField {
                        Key = "displayOrder", Name = "Номер", Required = true, Props = { Min = 0, Max = 256 }
                    },
                    new TextField {
                        Key = "code", Name = "Код", Required = true
                    },
                    new TextField {
                        Key = "name", Name = "Наименование", Required = true
                    }
                };
            }

            if (viewId == "Metadata/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "displayOrder", Name = "#", Width = 10, Sortable = true },
                    new() { Key = "key", Name = "Key", Width = 100, Sortable = true },
                    new() { Key = "type", Name = "Type", Width = 70, /*Sortable = true*/ },
                    new() { Key = "name", Name = "Name", Width = 150, Sortable = true },
                    new() { Key = "description", Name = "Description", Width = 150 },
                    new() { Key = "active", Name = "Active", Width = 10, Sortable = true, Type = BooleanField.TypeCode },
                    new() { Key = "system", Name = "System", Width = 10, Sortable = true, Type = BooleanField.TypeCode },
                    new() { Key = "required", Name = "Required", Width = 10, Sortable = true, Type = BooleanField.TypeCode },
                };
            }

            if (viewId == "Metadata/Edit")
            {
                var options = _fieldProviderRegistry
                              .GetFieldTypes()
                              .Where(x => x.IsSystem == false)
                              .OrderBy(x => x.Code)
                              .Select(x => new SelectFieldOption {
                    Value = x.Code, Name = x.Name
                })
                              .ToArray();

                result.Fields = new List <FieldMetadata>
                {
                    // todo: add system type SelectFieldType to select type with icons, common/advanced selection
                    new SelectField {
                        Key = "type", Name = "Тип", Required = true, Props = { Options = options }
                    },
                };
            }

            if (viewId.StartsWith("Metadata/Edit/"))
            {
                var code = viewId.Substring("Metadata/Edit/".Length);

                var fieldProvider = _fieldProviderRegistry.GetFieldTypeProvider(code);

                result.Fields = fieldProvider.GetMetadata();
            }

            if (viewId == "UserRoles/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "name", Name = "Name", Sortable = true, Width = 1000, UrlProperty = "url" }
                };
            }

            if (viewId == "RolePermissions/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "code", Name = "Code", Width = 1000, UrlProperty = "url" }
                };
            }

            if (viewId == "CompanySearch/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "name", Name = "Наименование", Sortable = true, Width = 200, UrlProperty = "url" },
                    new() { Key = "configCode", Name = "ConfigCode", Sortable = true, Width = 100 },
                    new() { Key = "statusCode", Name = "StatusCode", Sortable = true, Width = 100 }
                };
            }

            // Core
            if (viewId.StartsWith("LocaleString/Grid"))
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "locale", Name = "Язык", Width = 20, Sortable = true },
                    new() { Key = "module", Name = "Модуль", Width = 60, Sortable = true },
                    new() { Key = "key", Name = "Ключ", Width = 100, Sortable = true },
                    new() { Key = "value", Name = "Значение", Width = 200 }
                };
            }

            // Montr.Idx
            if (viewId == "Login/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Placeholder = "Your email", Icon = "user", Required = true
                    },
                    new PasswordField {
                        Key = "password", Name = "Password", Placeholder = "Password", Icon = "lock", Required = true
                    },
                    new BooleanField {
                        Key = "rememberMe", Name = "Remember me?"
                    }
                };
            }

            if (viewId == "ForgotPassword/Form" || viewId == "SendEmailConfirmation/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Icon = "mail", Required = true
                    }
                };
            }

            if (viewId == "ResetPassword/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Required = true
                    },
                    new PasswordField {
                        Key = "password", Name = "Password", Required = true
                    },
                    new PasswordField {
                        Key = "confirmPassword", Name = "Confirm Password", Required = true
                    }
                };
            }

            if (viewId == "ChangePassword/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new PasswordField {
                        Key = "oldPassword", Name = "Current password", Required = true
                    },
                    new PasswordField {
                        Key = "newPassword", Name = "New password", Required = true
                    },
                    new PasswordField {
                        Key = "confirmPassword", Name = "Confirm new password", Required = true
                    }
                };
            }

            if (viewId == "SetPassword/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new PasswordField {
                        Key = "newPassword", Name = "New password", Required = true
                    },
                    new PasswordField {
                        Key = "confirmPassword", Name = "Confirm new password", Required = true
                    }
                };
            }

            if (viewId == "Register/Form")
            {
                // todo: add terms and conditions checkbox
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Required = true
                    },
                    new TextField {
                        Key = "firstName", Name = "First Name", Required = true
                    },
                    new TextField {
                        Key = "lastName", Name = "Last Name", Required = true
                    },
                    new PasswordField {
                        Key = "password", Name = "Password", Required = true
                    },
                    // new PasswordField { Key = "confirmPassword", Name = "Confirm Password", Required = true }
                };
            }

            if (viewId == "ExternalRegister/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Required = true
                    },
                    new TextField {
                        Key = "firstName", Name = "First Name", Required = true
                    },
                    new TextField {
                        Key = "lastName", Name = "Last Name", Required = true
                    }
                };
            }

            if (viewId == "ChangeEmail/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "email", Name = "Email", Required = true
                    }
                };
            }

            if (viewId == "ChangePhone/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "phoneNumber", Name = "Номер телефона"
                    }                                                                                  // todo: PhoneField
                };
            }

            if (viewId == "UpdateProfile/Form")
            {
                result.Fields = new List <FieldMetadata>
                {
                    new TextField {
                        Key = "userName", Name = "Имя пользователя", Readonly = true
                    },
                    new TextField {
                        Key = "firstName", Name = "Имя"
                    },
                    new TextField {
                        Key = "lastName", Name = "Фамилия"
                    }
                };
            }

            // Documents & Processes

            if (viewId == "Document/List")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "documentNumber", Name = "Номер", Sortable = true, UrlProperty = "url", Width = 50 },
                    new() { Key = "documentDate", Name = "Дата", Type = "datetime", Sortable = true, UrlProperty = "url", Width = 100 },
                    new() { Key = "direction", Name = "Направление", UrlProperty = "url", Width = 30 },
                    new() { Key = "name", Name = "Наименование", Width = 250 },
                    new() { Key = "configCode", Name = "Тип", Sortable = true, Width = 100 },
                    new() { Key = "statusCode", Name = "Статус", Sortable = true, Width = 100 },
                };
            }

            if (viewId == "DocumentType/Tabs")
            {
                result.Panes = new List <DataPane>
                {
                    new() { Key = "common", Name = "Информация" },
                    new() { Key = "statuses", Name = "Statuses", Component = "panes/PaneSearchEntityStatuses" },
                    new() { Key = "fields", Name = "Анкета", Component = "panes/PaneSearchMetadata" },
                    new() { Key = "automation", Name = "Automations", Component = "panes/PaneSearchAutomation" }
                };
            }

            /*if (viewId == "Process/List")
             * {
             *      result.Columns = new List<DataColumn>
             *      {
             *              new() { Key = "code", Name = "Code", Sortable = true, UrlProperty = "url", Width = 100 },
             *              new() { Key = "name", Name = "Name", Sortable = true, UrlProperty = "url", Width = 400 }
             *      };
             * }
             *
             * if (viewId == "Process/Tabs")
             * {
             *      result.Panes = new List<DataPane>
             *      {
             *              new() { Key = "fields", Name = "Поля", Component = "panes/PaneSearchMetadata" },
             *      };
             * }*/

            // Events
            if (viewId == "PrivateEventSearch/Grid")
            {
                result.Columns = new List <DataColumn>
                {
                    new()
                    { Key = "id", Name = "Номер", Sortable = true, Width = 10,
                      UrlProperty = "url", DefaultSortOrder = SortOrder.Descending },
                    new() { Key = "configCode", Name = "Тип", Width = 25 },
                    new() { Key = "statusCode", Name = "Статус", Width = 25 /*, Align = DataColumnAlign.Center */ },
                    new() { Key = "name", Name = "Наименование", Sortable = true, Width = 400, UrlProperty = "url" },
                    // new DataColumn { Key = "description", Name = "Описание", Width = 300 },
                };
            }

            if (viewId == "PrivateEvent/Edit")
            {
                result.Panes = new List <DataPane>
                {
                    new() { Key = "info", Name = "Информация", Icon = "profile", Component = "panes/private/EditEventPane" },
                    new() { Key = "invitations", Name = "Приглашения (😎)", Icon = "solution", Component = "panes/private/InvitationPane" },
                    new() { Key = "proposals", Name = "Предложения", Icon = "solution" },
                    new() { Key = "questions", Name = "Разъяснения", Icon = "solution" },
                    new() { Key = "team", Name = "Команда", Icon = "team" },
                    new() { Key = "items", Name = "Позиции", Icon = "table" },
                    new() { Key = "history", Name = "История изменений", Icon = "eye" },
                    new() { Key = "5", Name = "Тендерная комиссия (команда?)" },
                    new() { Key = "6", Name = "Критерии оценки (анкета?)" },
                    new() { Key = "7", Name = "Документы (поле?)" },
                    new() { Key = "8", Name = "Контактные лица (поле?)" },
                };
            }

            if (viewId == "Event/Invitation/List")
            {
                result.Columns = new List <DataColumn>
                {
                    new() { Key = "counterpartyName", Name = "Контрагент", Sortable = true, Width = 400 },
                    new() { Key = "statusCode", Name = "Статус", Width = 100 },
                    new() { Key = "user", Name = "Контактное лицо", Width = 100 },
                    new() { Key = "email", Name = "Email", Width = 100 },
                    new() { Key = "phone", Name = "Телефон", Width = 100 },
                    new() { Key = "createDate", Name = "Дата создания", Width = 100 },
                    new() { Key = "inviteDate", Name = "Дата приглашения", Width = 100 },
                    new() { Key = "lastAccessDate", Name = "Дата последнего доступа", Width = 100 },
                };
            }

            /*if (viewId == "Event/Invitation/Form")
             * {
             *      result.Fields = new List<FieldMetadata>
             *      {
             *              new ClassifierField { Key = "counterpartyUid", Name = "Контрагент", Required = true, Props = { TypeCode = "counterparty" } },
             *              new TextField { Key = "user", Name = "Пользователь" },
             *              new TextField { Key = "email", Name = "Email", Required = true },
             *              new TextField { Key = "phone", Name = "Телефон" },
             *      };
             * }*/

            return(await Task.FromResult(result));
        }
    }
}