Example #1
0
        public IActionResult PatchField(string Id, string FieldId, [FromBody]JObject submitObj)
        {
            FieldResponse response = new FieldResponse();
            Entity entity = new Entity();
            InputField field = new InputGuidField();

            try
            {
                Guid entityId;
                if (!Guid.TryParse(Id, out entityId))
                {
                    response.Errors.Add(new ErrorModel("Id", Id, "id parameter is not valid Guid value"));
                    return DoBadRequestResponse(response, "Field was not updated!");
                }

                Guid fieldId;
                if (!Guid.TryParse(FieldId, out fieldId))
                {
                    response.Errors.Add(new ErrorModel("FieldId", FieldId, "FieldId parameter is not valid Guid value"));
                    return DoBadRequestResponse(response, "Field was not updated!");
                }

                DbEntity storageEntity = DbContext.Current.EntityRepository.Read(entityId);
                if (storageEntity == null)
                {
                    response.Errors.Add(new ErrorModel("Id", Id, "Entity with such Id does not exist!"));
                    return DoBadRequestResponse(response, "Field was not updated!");
                }
                entity = storageEntity.MapTo<Entity>();

                Field updatedField = entity.Fields.FirstOrDefault(f => f.Id == fieldId);
                if (updatedField == null)
                {
                    response.Errors.Add(new ErrorModel("FieldId", FieldId, "Field with such Id does not exist!"));
                    return DoBadRequestResponse(response, "Field was not updated!");
                }

                FieldType fieldType = FieldType.GuidField;

                var fieldTypeProp = submitObj.Properties().SingleOrDefault(k => k.Name.ToLower() == "fieldtype");
                if (fieldTypeProp != null)
                {
                    fieldType = (FieldType)Enum.ToObject(typeof(FieldType), fieldTypeProp.Value.ToObject<int>());
                }
                else
                {
                    response.Errors.Add(new ErrorModel("fieldType", null, "fieldType is required!"));
                    return DoBadRequestResponse(response, "Field was not updated!");
                }

                Type inputFieldType = InputField.GetFieldType(fieldType);
                foreach (var prop in submitObj.Properties())
                {
                    int count = inputFieldType.GetProperties().Where(n => n.Name.ToLower() == prop.Name.ToLower()).Count();
                    if (count < 1)
                        response.Errors.Add(new ErrorModel(prop.Name, prop.Value.ToString(), "Input object contains property that is not part of the object model."));
                }

                if (response.Errors.Count > 0)
                    return DoBadRequestResponse(response);

                InputField inputField = InputField.ConvertField(submitObj);

                foreach (var prop in submitObj.Properties())
                {
                    switch (fieldType)
                    {
                        case FieldType.AutoNumberField:
                            {
                                field = new InputAutoNumberField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputAutoNumberField)field).DefaultValue = ((InputAutoNumberField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "U")
                                    ((InputAutoNumberField)field).DisplayFormat = ((InputAutoNumberField)inputField).DisplayFormat;
                                if (prop.Name.ToLower() == "startingnumber")
                                    ((InputAutoNumberField)field).StartingNumber = ((InputAutoNumberField)inputField).StartingNumber;
                            }
                            break;
                        case FieldType.CheckboxField:
                            {
                                field = new InputCheckboxField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputCheckboxField)field).DefaultValue = ((InputCheckboxField)inputField).DefaultValue;
                            }
                            break;
                        case FieldType.CurrencyField:
                            {
                                field = new InputCurrencyField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputCurrencyField)field).DefaultValue = ((InputCurrencyField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "minvalue")
                                    ((InputCurrencyField)field).MinValue = ((InputCurrencyField)inputField).MinValue;
                                if (prop.Name.ToLower() == "maxvalue")
                                    ((InputCurrencyField)field).MaxValue = ((InputCurrencyField)inputField).MaxValue;
                                if (prop.Name.ToLower() == "currency")
                                    ((InputCurrencyField)field).Currency = ((InputCurrencyField)inputField).Currency;
                            }
                            break;
                        case FieldType.DateField:
                            {
                                field = new InputDateField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputDateField)field).DefaultValue = ((InputDateField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "format")
                                    ((InputDateField)field).Format = ((InputDateField)inputField).Format;
                                if (prop.Name.ToLower() == "usecurrenttimeasdefaultvalue")
                                    ((InputDateField)field).UseCurrentTimeAsDefaultValue = ((InputDateField)inputField).UseCurrentTimeAsDefaultValue;
                            }
                            break;
                        case FieldType.DateTimeField:
                            {
                                field = new InputDateTimeField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputDateTimeField)field).DefaultValue = ((InputDateTimeField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "format")
                                    ((InputDateTimeField)field).Format = ((InputDateTimeField)inputField).Format;
                                if (prop.Name.ToLower() == "usecurrenttimeasdefaultvalue")
                                    ((InputDateTimeField)field).UseCurrentTimeAsDefaultValue = ((InputDateTimeField)inputField).UseCurrentTimeAsDefaultValue;
                            }
                            break;
                        case FieldType.EmailField:
                            {
                                field = new InputEmailField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputEmailField)field).DefaultValue = ((InputEmailField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputEmailField)field).MaxLength = ((InputEmailField)inputField).MaxLength;
                            }
                            break;
                        case FieldType.FileField:
                            {
                                field = new InputFileField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputFileField)field).DefaultValue = ((InputFileField)inputField).DefaultValue;
                            }
                            break;
                        case FieldType.HtmlField:
                            {
                                field = new InputHtmlField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputHtmlField)field).DefaultValue = ((InputHtmlField)inputField).DefaultValue;
                            }
                            break;
                        case FieldType.ImageField:
                            {
                                field = new InputImageField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputImageField)field).DefaultValue = ((InputImageField)inputField).DefaultValue;
                            }
                            break;
                        case FieldType.MultiLineTextField:
                            {
                                field = new InputMultiLineTextField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputMultiLineTextField)field).DefaultValue = ((InputMultiLineTextField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputMultiLineTextField)field).MaxLength = ((InputMultiLineTextField)inputField).MaxLength;
                                if (prop.Name.ToLower() == "visiblelinenumber")
                                    ((InputMultiLineTextField)field).VisibleLineNumber = ((InputMultiLineTextField)inputField).VisibleLineNumber;
                            }
                            break;
                        case FieldType.MultiSelectField:
                            {
                                field = new InputMultiSelectField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputMultiSelectField)field).DefaultValue = ((InputMultiSelectField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "options")
                                    ((InputMultiSelectField)field).Options = ((InputMultiSelectField)inputField).Options;
                            }
                            break;
                        case FieldType.NumberField:
                            {
                                field = new InputNumberField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputNumberField)field).DefaultValue = ((InputNumberField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "minvalue")
                                    ((InputNumberField)field).MinValue = ((InputNumberField)inputField).MinValue;
                                if (prop.Name.ToLower() == "maxvalue")
                                    ((InputNumberField)field).MaxValue = ((InputNumberField)inputField).MaxValue;
                                if (prop.Name.ToLower() == "decimalplaces")
                                    ((InputNumberField)field).DecimalPlaces = ((InputNumberField)inputField).DecimalPlaces;
                            }
                            break;
                        case FieldType.PasswordField:
                            {
                                field = new InputPasswordField();
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputPasswordField)field).MaxLength = ((InputPasswordField)inputField).MaxLength;
                                if (prop.Name.ToLower() == "minlength")
                                    ((InputPasswordField)field).MinLength = ((InputPasswordField)inputField).MinLength;
                                if (prop.Name.ToLower() == "encrypted")
                                    ((InputPasswordField)field).Encrypted = ((InputPasswordField)inputField).Encrypted;
                            }
                            break;
                        case FieldType.PercentField:
                            {
                                field = new InputPercentField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputPercentField)field).DefaultValue = ((InputPercentField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "minvalue")
                                    ((InputPercentField)field).MinValue = ((InputPercentField)inputField).MinValue;
                                if (prop.Name.ToLower() == "maxvalue")
                                    ((InputPercentField)field).MaxValue = ((InputPercentField)inputField).MaxValue;
                                if (prop.Name.ToLower() == "decimalplaces")
                                    ((InputPercentField)field).DecimalPlaces = ((InputPercentField)inputField).DecimalPlaces;
                            }
                            break;
                        case FieldType.PhoneField:
                            {
                                field = new InputPhoneField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputPhoneField)field).DefaultValue = ((InputPhoneField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "format")
                                    ((InputPhoneField)field).Format = ((InputPhoneField)inputField).Format;
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputPhoneField)field).MaxLength = ((InputPhoneField)inputField).MaxLength;
                            }
                            break;
                        case FieldType.GuidField:
                            {
                                field = new InputGuidField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputGuidField)field).DefaultValue = ((InputGuidField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "generatenewid")
                                    ((InputGuidField)field).GenerateNewId = ((InputGuidField)inputField).GenerateNewId;
                            }
                            break;
                        case FieldType.SelectField:
                            {
                                field = new InputSelectField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputSelectField)field).DefaultValue = ((InputSelectField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "options")
                                    ((InputSelectField)field).Options = ((InputSelectField)inputField).Options;
                            }
                            break;
                        case FieldType.TextField:
                            {
                                field = new InputTextField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputTextField)field).DefaultValue = ((InputTextField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputTextField)field).MaxLength = ((InputTextField)inputField).MaxLength;
                            }
                            break;
                        case FieldType.UrlField:
                            {
                                field = new InputUrlField();
                                if (prop.Name.ToLower() == "defaultvalue")
                                    ((InputUrlField)field).DefaultValue = ((InputUrlField)inputField).DefaultValue;
                                if (prop.Name.ToLower() == "maxlength")
                                    ((InputUrlField)field).MaxLength = ((InputUrlField)inputField).MaxLength;
                                if (prop.Name.ToLower() == "opentargetinnewwindow")
                                    ((InputUrlField)field).OpenTargetInNewWindow = ((InputUrlField)inputField).OpenTargetInNewWindow;
                            }
                            break;
                    }

                    if (prop.Name.ToLower() == "label")
                        field.Label = inputField.Label;
                    else if (prop.Name.ToLower() == "placeholdertext")
                        field.PlaceholderText = inputField.PlaceholderText;
                    else if (prop.Name.ToLower() == "description")
                        field.Description = inputField.Description;
                    else if (prop.Name.ToLower() == "helptext")
                        field.HelpText = inputField.HelpText;
                    else if (prop.Name.ToLower() == "required")
                        field.Required = inputField.Required;
                    else if (prop.Name.ToLower() == "unique")
                        field.Unique = inputField.Unique;
                    else if (prop.Name.ToLower() == "searchable")
                        field.Searchable = inputField.Searchable;
                    else if (prop.Name.ToLower() == "auditable")
                        field.Auditable = inputField.Auditable;
                    else if (prop.Name.ToLower() == "system")
                        field.System = inputField.System;
                }
            }
            catch (Exception e)
            {
                return DoBadRequestResponse(response, "Input object is not in valid format! It cannot be converted.", e);
            }

            return DoResponse(entMan.UpdateField(entity, field));
        }
Example #2
0
        public void InitializeSystemEntities()
        {
            EntityResponse response = null;
            FieldResponse fieldResponse = null;
            EntityManager entMan = new EntityManager();
            EntityRelationManager rm = new EntityRelationManager();
            RecordManager recMan = new RecordManager(true);

            using (var connection = DbContext.Current.CreateConnection())
            {
                //setup necessary extensions
                DbRepository.CreatePostgresqlExtensions();

                try
                {
                    connection.BeginTransaction();

                    CheckCreateSystemTables();

                    DbSystemSettings storeSystemSettings = DbContext.Current.SettingsRepository.Read();

                    Guid systemSettingsId = new Guid("F3223177-B2FF-43F5-9A4B-FF16FC67D186");
                    SystemSettings systemSettings = new SystemSettings();
                    systemSettings.Id = systemSettingsId;

                    int currentVersion = 0;
                    if (storeSystemSettings != null)
                    {
                        systemSettings = new SystemSettings(storeSystemSettings);
                        currentVersion = systemSettings.Version;
                    }

                    //tmp code - during debug only
                    //entityManager.DeleteEntity(SystemIds.UserEntityId);
                    //entityManager.DeleteEntity(SystemIds.RoleEntityId);
                    //rm.Delete(SystemIds.UserRoleRelationId);
                    //currentVersion = 0;

                    if (currentVersion < 150508)
                    {
                        systemSettings.Version = 150508;

                        List<Guid> allowedRoles = new List<Guid>();
                        allowedRoles.Add(SystemIds.AdministratorRoleId);

                        #region << create user entity >>
                        {

                            InputEntity userEntity = new InputEntity();
                            userEntity.Id = SystemIds.UserEntityId;
                            userEntity.Name = "user";
                            userEntity.Label = "User";
                            userEntity.LabelPlural = "Users";
                            userEntity.System = true;
                            userEntity.RecordPermissions = new RecordPermissions();
                            userEntity.RecordPermissions.CanCreate = new List<Guid>();
                            userEntity.RecordPermissions.CanRead = new List<Guid>();
                            userEntity.RecordPermissions.CanUpdate = new List<Guid>();
                            userEntity.RecordPermissions.CanDelete = new List<Guid>();
                            userEntity.RecordPermissions.CanCreate.Add(SystemIds.GuestRoleId);
                            userEntity.RecordPermissions.CanCreate.Add(SystemIds.AdministratorRoleId);
                            userEntity.RecordPermissions.CanRead.Add(SystemIds.GuestRoleId);
                            userEntity.RecordPermissions.CanRead.Add(SystemIds.RegularRoleId);
                            userEntity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                            userEntity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                            userEntity.RecordPermissions.CanDelete.Add(SystemIds.AdministratorRoleId);
                            var systemItemIdDictionary = new Dictionary<string, Guid>();
                            systemItemIdDictionary["id"] = new Guid("8e438549-fd30-4766-95a9-061008cee48e");
                            systemItemIdDictionary["created_on"] = new Guid("6fda5e6b-80e6-4d8a-9e2a-d983c3694e96");
                            systemItemIdDictionary["created_by"] = new Guid("825e8367-3be1-4022-ba66-6494859d70d9");
                            systemItemIdDictionary["last_modified_on"] = new Guid("5a975d33-47c6-4ba6-83c8-c24034206879");
                            systemItemIdDictionary["last_modified_by"] = new Guid("cafc8cda-1a1d-43e4-9406-6acf8ba8fa8d");
                            response = entMan.CreateEntity(userEntity, false, false, systemItemIdDictionary);

                            InputTextField firstName = new InputTextField();

                            firstName.Id = new Guid("DF211549-41CC-4D11-BB43-DACA4C164411");
                            firstName.Name = "first_name";
                            firstName.Label = "First Name";
                            firstName.PlaceholderText = "";
                            firstName.Description = "First name of the user";
                            firstName.HelpText = "";
                            firstName.Required = false;
                            firstName.Unique = false;
                            firstName.Searchable = false;
                            firstName.Auditable = false;
                            firstName.System = true;
                            firstName.DefaultValue = "";

                            firstName.MaxLength = 200;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, firstName, false);

                            InputTextField lastName = new InputTextField();

                            lastName.Id = new Guid("63E685B1-B2C6-4961-B393-2B6723EBD1BF");
                            lastName.Name = "last_name";
                            lastName.Label = "Last Name";
                            lastName.PlaceholderText = "";
                            lastName.Description = "Last name of the user";
                            lastName.HelpText = "";
                            lastName.Required = false;
                            lastName.Unique = false;
                            lastName.Searchable = false;
                            lastName.Auditable = false;
                            lastName.System = true;
                            lastName.DefaultValue = "";

                            lastName.MaxLength = 200;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, lastName, false);

                            InputTextField userName = new InputTextField();
                            userName.Id = new Guid("263c0b21-88c1-4c2b-80b4-db7402b0d2e2");
                            userName.Name = "username";
                            userName.Label = "User Name";
                            userName.PlaceholderText = "";
                            userName.Description = "screen name for the user";
                            userName.HelpText = "";
                            userName.Required = true;
                            userName.Unique = true;
                            userName.Searchable = true;
                            userName.Auditable = false;
                            userName.System = true;
                            userName.DefaultValue = string.Empty;
                            userName.MaxLength = 200;
                            fieldResponse = entMan.CreateField(userEntity.Id.Value, userName, false);

                            InputEmailField email = new InputEmailField();

                            email.Id = new Guid("9FC75C8F-CE80-4A64-81D7-E2BEFA5E4815");
                            email.Name = "email";
                            email.Label = "Email";
                            email.PlaceholderText = "";
                            email.Description = "Email address of the user";
                            email.HelpText = "";
                            email.Required = true;
                            email.Unique = true;
                            email.Searchable = true;
                            email.Auditable = false;
                            email.System = true;
                            email.DefaultValue = string.Empty;

                            email.MaxLength = 255;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, email, false);

                            InputPasswordField password = new InputPasswordField();

                            password.Id = new Guid("4EDE88D9-217A-4462-9300-EA0D6AFCDCEA");
                            password.Name = "password";
                            password.Label = "Password";
                            password.PlaceholderText = "";
                            password.Description = "Password for the user account";
                            password.HelpText = "";
                            password.Required = true;
                            password.Unique = false;
                            password.Searchable = false;
                            password.Auditable = false;
                            password.System = true;
                            password.MinLength = 6;
                            password.MaxLength = 24;
                            password.Encrypted = true;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, password, false);

                            InputDateTimeField lastLoggedIn = new InputDateTimeField();

                            lastLoggedIn.Id = new Guid("3C85CCEC-D526-4E47-887F-EE169D1F508D");
                            lastLoggedIn.Name = "last_logged_in";
                            lastLoggedIn.Label = "Last Logged In";
                            lastLoggedIn.PlaceholderText = "";
                            lastLoggedIn.Description = "";
                            lastLoggedIn.HelpText = "";
                            lastLoggedIn.Required = false;
                            lastLoggedIn.Unique = false;
                            lastLoggedIn.Searchable = false;
                            lastLoggedIn.Auditable = true;
                            lastLoggedIn.System = true;
                            lastLoggedIn.DefaultValue = null;

                            lastLoggedIn.Format = "dd MMM yyyy HH:mm:ss";
                            lastLoggedIn.UseCurrentTimeAsDefaultValue = true;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, lastLoggedIn, false);

                            InputCheckboxField enabledField = new InputCheckboxField();

                            enabledField.Id = new Guid("C0C63650-7572-4252-8E4B-4E25C94897A6");
                            enabledField.Name = "enabled";
                            enabledField.Label = "Enabled";
                            enabledField.PlaceholderText = "";
                            enabledField.Description = "Shows if the user account is enabled";
                            enabledField.HelpText = "";
                            enabledField.Required = true;
                            enabledField.Unique = false;
                            enabledField.Searchable = false;
                            enabledField.Auditable = false;
                            enabledField.System = true;
                            enabledField.DefaultValue = false;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, enabledField, false);

                            InputCheckboxField verifiedUserField = new InputCheckboxField();

                            verifiedUserField.Id = new Guid("F1BA5069-8CC9-4E66-BCC3-60E33C79C265");
                            verifiedUserField.Name = "verified";
                            verifiedUserField.Label = "Verified";
                            verifiedUserField.PlaceholderText = "";
                            verifiedUserField.Description = "Shows if the user email is verified";
                            verifiedUserField.HelpText = "";
                            verifiedUserField.Required = true;
                            verifiedUserField.Unique = false;
                            verifiedUserField.Searchable = false;
                            verifiedUserField.Auditable = false;
                            verifiedUserField.System = true;
                            verifiedUserField.DefaultValue = false;

                            fieldResponse = entMan.CreateField(userEntity.Id.Value, verifiedUserField, false);

                            #region << image >>
                            {
                                InputImageField imageField = new InputImageField();
                                imageField.Id = new Guid("bf199b74-4448-4f58-93f5-6b86d888843b");
                                imageField.Name = "image";
                                imageField.Label = "Image";
                                imageField.PlaceholderText = "";
                                imageField.Description = "";
                                imageField.HelpText = "";
                                imageField.Required = false;
                                imageField.Unique = false;
                                imageField.Searchable = false;
                                imageField.Auditable = false;
                                imageField.System = true;
                                imageField.DefaultValue = string.Empty;
                                imageField.EnableSecurity = false;
                                {
                                    var createResponse = entMan.CreateField(SystemIds.UserEntityId, imageField, false);
                                    if (!createResponse.Success)
                                        throw new Exception("System error 10060. Entity: user. Field: image" + " Message:" + createResponse.Message);
                                }
                            }
                            #endregion
                        }

                        #endregion

                        #region << create role entity >>

                        {
                            InputEntity roleEntity = new InputEntity();
                            roleEntity.Id = SystemIds.RoleEntityId;
                            roleEntity.Name = "role";
                            roleEntity.Label = "Role";
                            roleEntity.LabelPlural = "Roles";
                            roleEntity.System = true;
                            roleEntity.RecordPermissions = new RecordPermissions();
                            roleEntity.RecordPermissions.CanCreate = new List<Guid>();
                            roleEntity.RecordPermissions.CanRead = new List<Guid>();
                            roleEntity.RecordPermissions.CanUpdate = new List<Guid>();
                            roleEntity.RecordPermissions.CanDelete = new List<Guid>();
                            roleEntity.RecordPermissions.CanCreate.Add(SystemIds.GuestRoleId);
                            roleEntity.RecordPermissions.CanCreate.Add(SystemIds.AdministratorRoleId);
                            roleEntity.RecordPermissions.CanRead.Add(SystemIds.RegularRoleId);
                            roleEntity.RecordPermissions.CanRead.Add(SystemIds.GuestRoleId);
                            roleEntity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                            roleEntity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                            roleEntity.RecordPermissions.CanDelete.Add(SystemIds.AdministratorRoleId);
                            var systemItemIdDictionary = new Dictionary<string, Guid>();
                            systemItemIdDictionary["id"] = new Guid("37fd9c4f-5413-4f3a-aa2f-d831cc106d03");
                            systemItemIdDictionary["created_on"] = new Guid("64047bab-dc73-4175-a744-e5d565e8adbb");
                            systemItemIdDictionary["created_by"] = new Guid("0ccd806b-715c-42d4-a580-f3f11f55d937");
                            systemItemIdDictionary["last_modified_on"] = new Guid("c4522433-1c67-44f9-b461-e85d4d363b70");
                            systemItemIdDictionary["last_modified_by"] = new Guid("a4489db4-9d76-4d5a-8940-6ef2da562c25");
                            systemItemIdDictionary["user_role_created_by"] = new Guid("c6151e80-9dce-4c0b-ae5f-4798e14cff4c");
                            systemItemIdDictionary["user_role_modified_by"] = new Guid("f3efaefe-32d2-4840-ac06-bc5723e323d0");
                            response = entMan.CreateEntity(roleEntity, false, false, systemItemIdDictionary);

                            InputTextField nameRoleField = new InputTextField();

                            nameRoleField.Id = new Guid("36F91EBD-5A02-4032-8498-B7F716F6A349");
                            nameRoleField.Name = "name";
                            nameRoleField.Label = "Name";
                            nameRoleField.PlaceholderText = "";
                            nameRoleField.Description = "The name of the role";
                            nameRoleField.HelpText = "";
                            nameRoleField.Required = true;
                            nameRoleField.Unique = false;
                            nameRoleField.Searchable = false;
                            nameRoleField.Auditable = false;
                            nameRoleField.System = true;
                            nameRoleField.DefaultValue = "";
                            nameRoleField.MaxLength = 200;
                            nameRoleField.EnableSecurity = true;
                            nameRoleField.Permissions = new FieldPermissions();
                            nameRoleField.Permissions.CanRead = new List<Guid>();
                            nameRoleField.Permissions.CanUpdate = new List<Guid>();
                            //READ
                            nameRoleField.Permissions.CanRead.Add(SystemIds.AdministratorRoleId);
                            nameRoleField.Permissions.CanRead.Add(SystemIds.RegularRoleId);
                            //UPDATE
                            nameRoleField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);

                            fieldResponse = entMan.CreateField(roleEntity.Id.Value, nameRoleField, false);

                            InputTextField descriptionRoleField = new InputTextField();

                            descriptionRoleField.Id = new Guid("4A8B9E0A-1C36-40C6-972B-B19E2B5D265B");
                            descriptionRoleField.Name = "description";
                            descriptionRoleField.Label = "Description";
                            descriptionRoleField.PlaceholderText = "";
                            descriptionRoleField.Description = "";
                            descriptionRoleField.HelpText = "";
                            descriptionRoleField.Required = true;
                            descriptionRoleField.Unique = false;
                            descriptionRoleField.Searchable = false;
                            descriptionRoleField.Auditable = false;
                            descriptionRoleField.System = true;
                            descriptionRoleField.DefaultValue = "";

                            descriptionRoleField.MaxLength = 200;

                            fieldResponse = entMan.CreateField(roleEntity.Id.Value, descriptionRoleField, false);
                        }

                        #endregion

                        #region << create user - role relation >>
                        {
                            var userEntity = entMan.ReadEntity(SystemIds.UserEntityId).Object;
                            var roleEntity = entMan.ReadEntity(SystemIds.RoleEntityId).Object;

                            EntityRelation userRoleRelation = new EntityRelation();
                            userRoleRelation.Id = SystemIds.UserRoleRelationId;
                            userRoleRelation.Name = "user_role";
                            userRoleRelation.Label = "User-Role";
                            userRoleRelation.System = true;
                            userRoleRelation.RelationType = EntityRelationType.ManyToMany;
                            userRoleRelation.TargetEntityId = userEntity.Id;
                            userRoleRelation.TargetFieldId = userEntity.Fields.Single(x => x.Name == "id").Id;
                            userRoleRelation.OriginEntityId = roleEntity.Id;
                            userRoleRelation.OriginFieldId = roleEntity.Fields.Single(x => x.Name == "id").Id;
                            {
                                var result = rm.Create(userRoleRelation);
                                if (!result.Success)
                                    throw new Exception("CREATE USER-ROLE RELATION:" + result.Message);
                            }
                        }
                        #endregion

                        #region << create system records >>

                        {
                            EntityRecord user = new EntityRecord();
                            user["id"] = SystemIds.SystemUserId;
                            user["first_name"] = "Local";
                            user["last_name"] = "System";
                            user["password"] = Guid.NewGuid().ToString();
                            user["email"] = "*****@*****.**";
                            user["username"] = "******";
                            user["created_by"] = SystemIds.SystemUserId;
                            user["last_modified_by"] = SystemIds.SystemUserId;
                            user["created_on"] = DateTime.UtcNow;
                            user["enabled"] = true;

                            QueryResponse result = recMan.CreateRecord("user", user);
                            if (!result.Success)
                                throw new Exception("CREATE SYSTEM USER RECORD:" + result.Message);
                        }

                        {
                            EntityRecord user = new EntityRecord();
                            user["id"] = SystemIds.FirstUserId;
                            user["first_name"] = "WebVella";
                            user["last_name"] = "Erp";
                            user["password"] = "******";
                            user["email"] = "*****@*****.**";
                            user["username"] = "******";
                            user["created_by"] = SystemIds.SystemUserId;
                            user["last_modified_by"] = SystemIds.SystemUserId;
                            user["created_on"] = DateTime.UtcNow;
                            user["enabled"] = true;

                            QueryResponse result = recMan.CreateRecord("user", user);
                            if (!result.Success)
                                throw new Exception("CREATE FIRST USER RECORD:" + result.Message);
                        }

                        {
                            EntityRecord adminRole = new EntityRecord();
                            adminRole["id"] = SystemIds.AdministratorRoleId;
                            adminRole["name"] = "administrator";
                            adminRole["description"] = "";
                            adminRole["created_by"] = SystemIds.SystemUserId;
                            adminRole["last_modified_by"] = SystemIds.SystemUserId;
                            adminRole["created_on"] = DateTime.UtcNow;

                            QueryResponse result = recMan.CreateRecord("role", adminRole);
                            if (!result.Success)
                                throw new Exception("CREATE ADMINITRATOR ROLE RECORD:" + result.Message);
                        }

                        {
                            EntityRecord regularRole = new EntityRecord();
                            regularRole["id"] = SystemIds.RegularRoleId;
                            regularRole["name"] = "regular";
                            regularRole["description"] = "";
                            regularRole["created_by"] = SystemIds.SystemUserId;
                            regularRole["last_modified_by"] = SystemIds.SystemUserId;
                            regularRole["created_on"] = DateTime.UtcNow;

                            QueryResponse result = recMan.CreateRecord("role", regularRole);
                            if (!result.Success)
                                throw new Exception("CREATE REGULAR ROLE RECORD:" + result.Message);
                        }

                        {
                            EntityRecord guestRole = new EntityRecord();
                            guestRole["id"] = SystemIds.GuestRoleId;
                            guestRole["name"] = "guest";
                            guestRole["description"] = "";
                            guestRole["created_by"] = SystemIds.SystemUserId;
                            guestRole["last_modified_by"] = SystemIds.SystemUserId;
                            guestRole["created_on"] = DateTime.UtcNow;

                            QueryResponse result = recMan.CreateRecord("role", guestRole);
                            if (!result.Success)
                                throw new Exception("CREATE GUEST ROLE RECORD:" + result.Message);
                        }

                        {
                            QueryResponse result = recMan.CreateRelationManyToManyRecord(SystemIds.UserRoleRelationId, SystemIds.AdministratorRoleId, SystemIds.SystemUserId);
                            if (!result.Success)
                                throw new Exception("CREATE SYSTEM-USER <-> ADMINISTRATOR ROLE RELATION RECORD:" + result.Message);

                        }

                        {
                            QueryResponse result = recMan.CreateRelationManyToManyRecord(SystemIds.UserRoleRelationId, SystemIds.AdministratorRoleId, SystemIds.FirstUserId);
                            if (!result.Success)
                                throw new Exception("CREATE FIRST-USER <-> ADMINISTRATOR ROLE RELATION RECORD:" + result.Message);

                            result = recMan.CreateRelationManyToManyRecord(SystemIds.UserRoleRelationId, SystemIds.RegularRoleId, SystemIds.FirstUserId);
                            if (!result.Success)
                                throw new Exception("CREATE FIRST-USER <-> REGULAR ROLE RELATION RECORD:" + result.Message);

                        }

                        #endregion

                        #region << create Area entity >>
                        {
                            InputEntity areaEntity = new InputEntity();
                            areaEntity.Id = SystemIds.AreaEntityId;
                            areaEntity.Name = "area";
                            areaEntity.Label = "Area";
                            areaEntity.LabelPlural = "areas";
                            areaEntity.System = true;
                            areaEntity.IconName = "folder";
                            areaEntity.Weight = 10;
                            areaEntity.RecordPermissions = new RecordPermissions();
                            areaEntity.RecordPermissions.CanCreate = new List<Guid>();
                            areaEntity.RecordPermissions.CanRead = new List<Guid>();
                            areaEntity.RecordPermissions.CanUpdate = new List<Guid>();
                            areaEntity.RecordPermissions.CanDelete = new List<Guid>();
                            areaEntity.RecordPermissions.CanCreate.Add(SystemIds.AdministratorRoleId);
                            areaEntity.RecordPermissions.CanRead.Add(SystemIds.RegularRoleId);
                            areaEntity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                            areaEntity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                            areaEntity.RecordPermissions.CanDelete.Add(SystemIds.AdministratorRoleId);

                            var systemItemIdDictionary = new Dictionary<string, Guid>();
                            systemItemIdDictionary["id"] = new Guid("19f16bdb-56e6-46bf-8310-2b42fd78be2a");
                            systemItemIdDictionary["created_on"] = new Guid("3e6be69e-8f25-40e4-9f21-86b0d1404230");
                            systemItemIdDictionary["created_by"] = new Guid("16fbba6c-6282-4828-9873-86b8fef745d4");
                            systemItemIdDictionary["last_modified_on"] = new Guid("5f076d8b-e587-4201-9481-67e19789ff6c");
                            systemItemIdDictionary["last_modified_by"] = new Guid("721b27b3-741d-4414-8783-a0245a4eec58");
                            systemItemIdDictionary["user_area_created_by"] = new Guid("5fe5fdc4-ee10-4661-93e7-25ea2a61e710");
                            systemItemIdDictionary["user_area_modified_by"] = new Guid("bb52122c-a354-4668-9423-71dfdc3d9f36");
                            {
                                var createResponse = entMan.CreateEntity(areaEntity, false, false, systemItemIdDictionary);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10330. Message:" + createResponse.Message);
                            }

                            InputTextField color = new InputTextField();
                            color.Id = new Guid("2B4AACD9-3C34-4C44-B3A3-8AFF1520CFF6");
                            color.Name = "color";
                            color.Label = "Color";
                            color.PlaceholderText = "";
                            color.Description = "";
                            color.HelpText = "";
                            color.Required = true;
                            color.Unique = false;
                            color.Searchable = false;
                            color.Auditable = false;
                            color.System = true;
                            color.DefaultValue = "teal";
                            color.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, color, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputTextField label = new InputTextField();
                            label.Id = new Guid("F050E7A1-AFB7-4346-B57B-1F12B2BD5AE5");
                            label.Name = "label";
                            label.Label = "Label";
                            label.PlaceholderText = "";
                            label.Description = "";
                            label.HelpText = "";
                            label.Required = true;
                            label.Unique = false;
                            label.Searchable = false;
                            label.Auditable = false;
                            label.System = true;
                            label.DefaultValue = "Default";
                            label.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, label, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputTextField iconName = new InputTextField();
                            iconName.Id = new Guid("5EA0C872-D219-4D94-9EFA-C5DA978D316B");
                            iconName.Name = "icon_name";
                            iconName.Label = "Icon Name";
                            iconName.PlaceholderText = "";
                            iconName.Description = "";
                            iconName.HelpText = "";
                            iconName.Required = true;
                            iconName.Unique = false;
                            iconName.Searchable = false;
                            iconName.Auditable = false;
                            iconName.System = true;
                            iconName.DefaultValue = "database";
                            iconName.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, iconName, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputNumberField weight = new InputNumberField();
                            weight.Id = new Guid("9B169431-6C31-4141-80EB-5844B8333E63");
                            weight.Name = "weight";
                            weight.Label = "Weight";
                            weight.PlaceholderText = "";
                            weight.Description = "";
                            weight.HelpText = "";
                            weight.Required = true;
                            weight.Unique = false;
                            weight.Searchable = false;
                            weight.Auditable = false;
                            weight.System = true;
                            weight.DefaultValue = 10;
                            weight.MinValue = 0;
                            weight.DecimalPlaces = 2;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, weight, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputTextField attachments = new InputTextField();
                            attachments.Id = new Guid("288EA657-C12C-4AC1-B701-81D6F9F39363");
                            attachments.Name = "attachments";
                            attachments.Label = "Attachments JSON String";
                            attachments.PlaceholderText = "";
                            attachments.Description = "Stringified Array of attached objects";
                            attachments.HelpText = "";
                            attachments.Required = false;
                            attachments.Unique = false;
                            attachments.Searchable = false;
                            attachments.Auditable = false;
                            attachments.System = true;
                            attachments.DefaultValue = null;
                            attachments.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, attachments, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputTextField name = new InputTextField();
                            name.Id = new Guid("F297577B-073E-4D18-81F3-675C1AFB466D");
                            name.Name = "name";
                            name.Label = "Name";
                            name.PlaceholderText = "";
                            name.Description = "";
                            name.HelpText = "";
                            name.Required = true;
                            name.Unique = false;
                            name.Searchable = false;
                            name.Auditable = false;
                            name.System = true;
                            name.DefaultValue = "default";
                            name.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, name, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            InputTextField roles = new InputTextField();
                            roles.Id = new Guid("8E486F76-D0C1-4D0E-8617-9EF868BF1C55");
                            roles.Name = "roles";
                            roles.Label = "Roles JSON String";
                            roles.PlaceholderText = "";
                            roles.Description = "Stringified Array of roles that have access to this area";
                            roles.HelpText = "";
                            roles.Required = false;
                            roles.Unique = false;
                            roles.Searchable = false;
                            roles.Auditable = false;
                            roles.System = true;
                            roles.DefaultValue = null;
                            roles.MaxLength = null;
                            {
                                var createResponse = entMan.CreateField(SystemIds.AreaEntityId, roles, false);
                                if (!createResponse.Success)
                                    throw new Exception("System error 10340. Message:" + createResponse.Message);
                            }

                            #region << folder >>
                            {
                                InputTextField textboxField = new InputTextField();
                                textboxField.Id = new Guid("6a0fdf14-2d2b-4c6c-b2f1-4d846c7d5ab8");
                                textboxField.Name = "folder";
                                textboxField.Label = "folder";
                                textboxField.PlaceholderText = "";
                                textboxField.Description = "";
                                textboxField.HelpText = "";
                                textboxField.Required = false;
                                textboxField.Unique = false;
                                textboxField.Searchable = false;
                                textboxField.Auditable = false;
                                textboxField.System = true;
                                textboxField.DefaultValue = string.Empty;
                                textboxField.MaxLength = null;
                                textboxField.EnableSecurity = true;
                                textboxField.Permissions = new FieldPermissions();
                                textboxField.Permissions.CanRead = new List<Guid>();
                                textboxField.Permissions.CanUpdate = new List<Guid>();
                                //READ
                                textboxField.Permissions.CanRead.Add(SystemIds.AdministratorRoleId);
                                //UPDATE
                                textboxField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                {
                                    var createResponse = entMan.CreateField(SystemIds.AreaEntityId, textboxField, false);
                                    if (!createResponse.Success)
                                        throw new Exception("System error 10060. Entity: area Field: folder" + " Message:" + response.Message);
                                }
                            }
                            #endregion

                        }
                        #endregion
                    }

                    if (currentVersion < 20160430)
                    {
                        systemSettings.Version = 20160430;

                        #region << plugin_data >>
                        var PLUGIN_DATA_ID = new Guid("d928d031-c8b1-4359-be3e-39bceb58f268");
                        var PLUGIN_DATA_NAME = "plugin_data";
                        {
                            #region << entity >>
                            {
                                InputEntity entity = new InputEntity();
                                entity.Id = PLUGIN_DATA_ID;
                                entity.Name = PLUGIN_DATA_NAME;
                                entity.Label = "Plugin Data";
                                entity.LabelPlural = "Plugin Data";
                                entity.System = true;
                                entity.IconName = "database";
                                entity.Weight = 99;
                                entity.RecordPermissions = new RecordPermissions();
                                entity.RecordPermissions.CanCreate = new List<Guid>();
                                entity.RecordPermissions.CanRead = new List<Guid>();
                                entity.RecordPermissions.CanUpdate = new List<Guid>();
                                entity.RecordPermissions.CanDelete = new List<Guid>();
                                //Create
                                entity.RecordPermissions.CanCreate.Add(SystemIds.AdministratorRoleId);
                                //READ
                                entity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                                //UPDATE
                                entity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                //DELETE
                                entity.RecordPermissions.CanDelete.Add(SystemIds.AdministratorRoleId);

                                var systemItemIdDictionary = new Dictionary<string, Guid>();
                                systemItemIdDictionary["id"] = new Guid("bdb47d11-b8ee-42e9-8cd1-56e43246656b");
                                systemItemIdDictionary["created_on"] = new Guid("00f172b1-393b-4674-b6cd-32669dfb0924");
                                systemItemIdDictionary["created_by"] = new Guid("89379dbe-98ea-40b0-a794-a7cbf36201af");
                                systemItemIdDictionary["last_modified_on"] = new Guid("aaee0db8-d131-4273-b06a-a788757e24c3");
                                systemItemIdDictionary["last_modified_by"] = new Guid("eb0d2a71-4172-4293-87d7-d238a2153abf");
                                systemItemIdDictionary["user_plugin_data_created_by"] = new Guid("00e3f673-9dbc-4b57-b6d8-38d75e7d165a");
                                systemItemIdDictionary["user_plugin_data_modified_by"] = new Guid("c228125d-066c-415b-8c2a-a43ba2774411");
                                {
                                    var createResponse = entMan.CreateEntity(entity, false, false, systemItemIdDictionary);
                                    if (!createResponse.Success)
                                        throw new Exception("System error 10050. Entity: " + PLUGIN_DATA_NAME + " Field: entity creation" + " Message:" + response.Message);
                                }
                            }
                            #endregion

                            #region << name >>
                            {
                                InputTextField textboxField = new InputTextField();
                                textboxField.Id = new Guid("ab81aec7-da90-4ba8-8ac7-378faa01763f");
                                textboxField.Name = "name";
                                textboxField.Label = "Name";
                                textboxField.PlaceholderText = "";
                                textboxField.Description = "";
                                textboxField.HelpText = "";
                                textboxField.Required = true;
                                textboxField.Unique = true;
                                textboxField.Searchable = false;
                                textboxField.Auditable = false;
                                textboxField.System = true;
                                textboxField.DefaultValue = string.Empty;
                                textboxField.MaxLength = null;
                                textboxField.EnableSecurity = true;
                                textboxField.Permissions = new FieldPermissions();
                                textboxField.Permissions.CanRead = new List<Guid>();
                                textboxField.Permissions.CanUpdate = new List<Guid>();
                                //READ
                                textboxField.Permissions.CanRead.Add(SystemIds.AdministratorRoleId);
                                //UPDATE
                                textboxField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                {
                                    var createResponse = entMan.CreateField(PLUGIN_DATA_ID, textboxField, false);
                                    if (!createResponse.Success)
                                        throw new Exception("System error 10060. Entity: " + PLUGIN_DATA_NAME + " Field: field_name" + " Message:" + response.Message);
                                }
                            }
                            #endregion

                            #region << data >>
                            {
                                InputTextField textboxField = new InputTextField();
                                textboxField.Id = new Guid("52a799ad-80a3-404b-99b5-1f58ce437982");
                                textboxField.Name = "data";
                                textboxField.Label = "Data";
                                textboxField.PlaceholderText = "";
                                textboxField.Description = "";
                                textboxField.HelpText = "";
                                textboxField.Required = false;
                                textboxField.Unique = false;
                                textboxField.Searchable = false;
                                textboxField.Auditable = false;
                                textboxField.System = true;
                                textboxField.DefaultValue = string.Empty;
                                textboxField.MaxLength = null;
                                textboxField.EnableSecurity = true;
                                textboxField.Permissions = new FieldPermissions();
                                textboxField.Permissions.CanRead = new List<Guid>();
                                textboxField.Permissions.CanUpdate = new List<Guid>();
                                //READ
                                textboxField.Permissions.CanRead.Add(SystemIds.AdministratorRoleId);
                                //UPDATE
                                textboxField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                {
                                    var createResponse = entMan.CreateField(PLUGIN_DATA_ID, textboxField, false);
                                    if (!createResponse.Success)
                                        throw new Exception("System error 10060. Entity: " + PLUGIN_DATA_NAME + " Field: field_name" + " Message:" + response.Message);
                                }
                            }
                            #endregion

                        }
                        #endregion

                    }

                    new DbSystemSettingsRepository().Save(new DbSystemSettings { Id = systemSettings.Id, Version = systemSettings.Version });

                    connection.CommitTransaction();
                }
                catch (Exception ex)
                {
                    var exception = ex;
                    connection.RollbackTransaction();
                    throw;
                }

            }

            //recMan.ConvertNtoNRelations();
        }
Example #3
0
        public void InitializeSystemEntities()
        {
            EntityResponse response = null;
            FieldResponse fieldResponse = null;
            EntityManager em = new EntityManager(StorageService);
            EntityRelationManager rm = new EntityRelationManager(StorageService);
            RecordManager recMan = new RecordManager(this);

            var transaction = recMan.CreateTransaction();

            try
            {

                transaction.Begin();

                IStorageSystemSettingsRepository systemSettingsRepository = StorageService.GetSystemSettingsRepository();
                IStorageSystemSettings storeSystemSettings = systemSettingsRepository.Read();

                Guid systemSettingsId = new Guid("F3223177-B2FF-43F5-9A4B-FF16FC67D186");
                SystemSettings systemSettings = new SystemSettings();
                systemSettings.Id = systemSettingsId;

                int currentVersion = 0;
                if (storeSystemSettings != null)
                {
                    systemSettings = new SystemSettings(storeSystemSettings);
                    currentVersion = systemSettings.Version;
                }

                EntityManager entityManager = new EntityManager(StorageService);

                //tmp code - during debug only
                //em.DeleteEntity(SystemIds.UserEntityId);
                //em.DeleteEntity(SystemIds.RoleEntityId);
                //rm.Delete(SystemIds.UserRoleRelationId);
                //currentVersion = 0;

                if (currentVersion < 150508)
                {
                    systemSettings.Version = 150508;

                    List<Guid> allowedRoles = new List<Guid>();
                    allowedRoles.Add(SystemIds.AdministratorRoleId);

                    #region << create role entity >>

                    {
                        InputEntity roleEntity = new InputEntity();
                        roleEntity.Id = SystemIds.RoleEntityId;
                        roleEntity.Name = "role";
                        roleEntity.Label = "Role";
                        roleEntity.LabelPlural = "Roles";
                        roleEntity.System = true;
                        roleEntity.RecordPermissions = new RecordPermissions();
                        roleEntity.RecordPermissions.CanRead = allowedRoles;
                        roleEntity.RecordPermissions.CanCreate = allowedRoles;
                        roleEntity.RecordPermissions.CanUpdate = allowedRoles;
                        roleEntity.RecordPermissions.CanDelete = allowedRoles;

                        response = entityManager.CreateEntity(roleEntity);

                        InputTextField nameRoleField = new InputTextField();

                        nameRoleField.Id = new Guid("36F91EBD-5A02-4032-8498-B7F716F6A349");
                        nameRoleField.Name = "name";
                        nameRoleField.Label = "Name";
                        nameRoleField.PlaceholderText = "";
                        nameRoleField.Description = "The name of the role";
                        nameRoleField.HelpText = "";
                        nameRoleField.Required = true;
                        nameRoleField.Unique = false;
                        nameRoleField.Searchable = false;
                        nameRoleField.Auditable = false;
                        nameRoleField.System = true;
                        nameRoleField.DefaultValue = "";

                        nameRoleField.MaxLength = 200;

                        fieldResponse = entityManager.CreateField(roleEntity.Id.Value, nameRoleField, false);

                        InputTextField descriptionRoleField = new InputTextField();

                        descriptionRoleField.Id = new Guid("4A8B9E0A-1C36-40C6-972B-B19E2B5D265B");
                        descriptionRoleField.Name = "description";
                        descriptionRoleField.Label = "Description";
                        descriptionRoleField.PlaceholderText = "";
                        descriptionRoleField.Description = "";
                        descriptionRoleField.HelpText = "";
                        descriptionRoleField.Required = true;
                        descriptionRoleField.Unique = false;
                        descriptionRoleField.Searchable = false;
                        descriptionRoleField.Auditable = false;
                        descriptionRoleField.System = true;
                        descriptionRoleField.DefaultValue = "";

                        descriptionRoleField.MaxLength = 200;

                        fieldResponse = entityManager.CreateField(roleEntity.Id.Value, descriptionRoleField, false);
                    }

                    #endregion

                    #region << create user entity >>
                    {

                        InputEntity userEntity = new InputEntity();
                        userEntity.Id = SystemIds.UserEntityId;
                        userEntity.Name = "user";
                        userEntity.Label = "User";
                        userEntity.LabelPlural = "Users";
                        userEntity.System = true;
                        userEntity.RecordPermissions = new RecordPermissions();
                        userEntity.RecordPermissions.CanRead = allowedRoles;
                        userEntity.RecordPermissions.CanCreate = allowedRoles;
                        userEntity.RecordPermissions.CanUpdate = allowedRoles;
                        userEntity.RecordPermissions.CanDelete = allowedRoles;

                        response = entityManager.CreateEntity(userEntity);

                        InputTextField firstName = new InputTextField();

                        firstName.Id = new Guid("DF211549-41CC-4D11-BB43-DACA4C164411");
                        firstName.Name = "first_name";
                        firstName.Label = "First Name";
                        firstName.PlaceholderText = "";
                        firstName.Description = "First name of the user";
                        firstName.HelpText = "";
                        firstName.Required = true;
                        firstName.Unique = false;
                        firstName.Searchable = false;
                        firstName.Auditable = false;
                        firstName.System = true;
                        firstName.DefaultValue = "";

                        firstName.MaxLength = 200;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, firstName, false);

                        InputTextField lastName = new InputTextField();

                        lastName.Id = new Guid("63E685B1-B2C6-4961-B393-2B6723EBD1BF");
                        lastName.Name = "last_name";
                        lastName.Label = "Last Name";
                        lastName.PlaceholderText = "";
                        lastName.Description = "Last name of the user";
                        lastName.HelpText = "";
                        lastName.Required = true;
                        lastName.Unique = false;
                        lastName.Searchable = false;
                        lastName.Auditable = false;
                        lastName.System = true;
                        lastName.DefaultValue = "";

                        lastName.MaxLength = 200;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, lastName, false);

                        InputEmailField email = new InputEmailField();

                        email.Id = new Guid("9FC75C8F-CE80-4A64-81D7-E2BEFA5E4815");
                        email.Name = "email";
                        email.Label = "Email";
                        email.PlaceholderText = "";
                        email.Description = "Email address of the user";
                        email.HelpText = "";
                        email.Required = true;
                        email.Unique = true;
                        email.Searchable = false;
                        email.Auditable = false;
                        email.System = true;
                        email.DefaultValue = "";

                        email.MaxLength = 255;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, email, false);

                        InputPasswordField password = new InputPasswordField();

                        password.Id = new Guid("4EDE88D9-217A-4462-9300-EA0D6AFCDCEA");
                        password.Name = "password";
                        password.Label = "Password";
                        password.PlaceholderText = "";
                        password.Description = "Password for the user account";
                        password.HelpText = "";
                        password.Required = true;
                        password.Unique = true;
                        password.Searchable = false;
                        password.Auditable = false;
                        password.System = true;
                        password.MinLength = 6;
                        password.MaxLength = 24;
                        password.Encrypted = true;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, password, false);

                        InputDateTimeField lastLoggedIn = new InputDateTimeField();

                        lastLoggedIn.Id = new Guid("3C85CCEC-D526-4E47-887F-EE169D1F508D");
                        lastLoggedIn.Name = "last_logged_in";
                        lastLoggedIn.Label = "Last Logged In";
                        lastLoggedIn.PlaceholderText = "";
                        lastLoggedIn.Description = "";
                        lastLoggedIn.HelpText = "";
                        lastLoggedIn.Required = false;
                        lastLoggedIn.Unique = true;
                        lastLoggedIn.Searchable = false;
                        lastLoggedIn.Auditable = true;
                        lastLoggedIn.System = true;
                        lastLoggedIn.DefaultValue = null;

                        lastLoggedIn.Format = "dd MMM yyyy HH:mm:ss";
                        lastLoggedIn.UseCurrentTimeAsDefaultValue = true;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, lastLoggedIn, false);

                        InputCheckboxField enabledField = new InputCheckboxField();

                        enabledField.Id = new Guid("C0C63650-7572-4252-8E4B-4E25C94897A6");
                        enabledField.Name = "enabled";
                        enabledField.Label = "Enabled";
                        enabledField.PlaceholderText = "";
                        enabledField.Description = "Shows if the user account is enabled";
                        enabledField.HelpText = "";
                        enabledField.Required = true;
                        enabledField.Unique = false;
                        enabledField.Searchable = false;
                        enabledField.Auditable = false;
                        enabledField.System = true;
                        enabledField.DefaultValue = false;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, enabledField, false);

                        InputCheckboxField verifiedUserField = new InputCheckboxField();

                        verifiedUserField.Id = new Guid("F1BA5069-8CC9-4E66-BCC3-60E33C79C265");
                        verifiedUserField.Name = "verified";
                        verifiedUserField.Label = "Verified";
                        verifiedUserField.PlaceholderText = "";
                        verifiedUserField.Description = "Shows if the user email is verified";
                        verifiedUserField.HelpText = "";
                        verifiedUserField.Required = true;
                        verifiedUserField.Unique = false;
                        verifiedUserField.Searchable = false;
                        verifiedUserField.Auditable = false;
                        verifiedUserField.System = true;
                        verifiedUserField.DefaultValue = false;

                        fieldResponse = entityManager.CreateField(userEntity.Id.Value, verifiedUserField, false);

                    }

                    #endregion

                    #region << create user - role relation >>
                    {
                        var userEntity = em.ReadEntity(SystemIds.UserEntityId).Object;
                        var roleEntity = em.ReadEntity(SystemIds.RoleEntityId).Object;

                        EntityRelation userRoleRelation = new EntityRelation();
                        userRoleRelation.Id = SystemIds.UserRoleRelationId;
                        userRoleRelation.Name = "user_role";
                        userRoleRelation.Label = "User-Role";
                        userRoleRelation.System = true;
                        userRoleRelation.RelationType = EntityRelationType.ManyToMany;
                        userRoleRelation.TargetEntityId = userEntity.Id;
                        userRoleRelation.TargetFieldId = userEntity.Fields.Single(x => x.Name == "id").Id;
                        userRoleRelation.OriginEntityId = roleEntity.Id;
                        userRoleRelation.OriginFieldId = roleEntity.Fields.Single(x => x.Name == "id").Id;
                        {
                            var result = rm.Create(userRoleRelation);
                            if (!result.Success)
                                throw new Exception("CREATE USER-ROLE RELATION:" + result.Message);
                        }
                    }
                    #endregion

                    #region << create system records >>

                    {
                        EntityRecord user = new EntityRecord();
                        user["id"] = SystemIds.FirstUserId;
                        user["first_name"] = "WebVella";
                        user["last_name"] = "Erp";
                        user["password"] = "******";
                        user["email"] = "*****@*****.**";
                        user["created_by"] = SystemIds.FirstUserId;
                        user["last_modified_by"] = SystemIds.FirstUserId;
                        user["created_on"] = DateTime.UtcNow;
                        user["enabled"] = true;

                        QueryResponse result = recMan.CreateRecord("user", user);
                        if (!result.Success)
                            throw new Exception("CREATE FIRST USER RECORD:" + result.Message);
                    }

                    {
                        EntityRecord adminRole = new EntityRecord();
                        adminRole["id"] = SystemIds.AdministratorRoleId;
                        adminRole["name"] = "Administrator";
                        adminRole["description"] = "";
                        adminRole["created_by"] = SystemIds.FirstUserId;
                        adminRole["last_modified_by"] = SystemIds.FirstUserId;
                        adminRole["created_on"] = DateTime.UtcNow;

                        QueryResponse result = recMan.CreateRecord("role", adminRole);
                        if (!result.Success)
                            throw new Exception("CREATE ADMINITRATOR ROLE RECORD:" + result.Message);
                    }

                    {
                        EntityRecord regularRole = new EntityRecord();
                        regularRole["id"] = SystemIds.RegularRoleId;
                        regularRole["name"] = "Regular";
                        regularRole["description"] = "";
                        regularRole["created_by"] = SystemIds.FirstUserId;
                        regularRole["last_modified_by"] = SystemIds.FirstUserId;
                        regularRole["created_on"] = DateTime.UtcNow;

                        QueryResponse result = recMan.CreateRecord("role", regularRole);
                        if (!result.Success)
                            throw new Exception("CREATE REGULAR ROLE RECORD:" + result.Message);
                    }

                    {
                        EntityRecord guestRole = new EntityRecord();
                        guestRole["id"] = SystemIds.GuestRoleId;
                        guestRole["name"] = "Guest";
                        guestRole["description"] = "";
                        guestRole["created_by"] = SystemIds.FirstUserId;
                        guestRole["last_modified_by"] = SystemIds.FirstUserId;
                        guestRole["created_on"] = DateTime.UtcNow;

                        QueryResponse result = recMan.CreateRecord("role", guestRole);
                        if (!result.Success)
                            throw new Exception("CREATE GUEST ROLE RECORD:" + result.Message);
                    }

                    {
                        QueryResponse result = recMan.CreateRelationManyToManyRecord(SystemIds.UserRoleRelationId, SystemIds.AdministratorRoleId, SystemIds.FirstUserId);
                        if (!result.Success)
                            throw new Exception("CREATE FIRST-USER <-> ADMINISTRATOR ROLE RELATION RECORD:" + result.Message);

                        result = recMan.CreateRelationManyToManyRecord(SystemIds.UserRoleRelationId, SystemIds.RegularRoleId, SystemIds.FirstUserId);
                        if (!result.Success)
                            throw new Exception("CREATE FIRST-USER <-> REGULAR ROLE RELATION RECORD:" + result.Message);

                    }

                    #endregion

                    #region << create Area entity >>
                    {
                        InputEntity areaEntity = new InputEntity();
                        areaEntity.Id = SystemIds.AreaEntityId;
                        areaEntity.Name = "area";
                        areaEntity.Label = "Area";
                        areaEntity.LabelPlural = "areas";
                        areaEntity.System = true;
                        areaEntity.IconName = "folder";
                        areaEntity.Weight = 10;
                        areaEntity.RecordPermissions = new RecordPermissions();
                        areaEntity.RecordPermissions.CanRead = allowedRoles;
                        areaEntity.RecordPermissions.CanCreate = allowedRoles;
                        areaEntity.RecordPermissions.CanUpdate = allowedRoles;
                        areaEntity.RecordPermissions.CanDelete = allowedRoles;
                        {
                            var createResponse = entityManager.CreateEntity(areaEntity);
                            if (!createResponse.Success)
                                throw new Exception("System error 10330. Message:" + createResponse.Message);
                        }

                        InputTextField color = new InputTextField();
                        color.Id = new Guid("2B4AACD9-3C34-4C44-B3A3-8AFF1520CFF6");
                        color.Name = "color";
                        color.Label = "Color";
                        color.PlaceholderText = "";
                        color.Description = "";
                        color.HelpText = "";
                        color.Required = true;
                        color.Unique = false;
                        color.Searchable = false;
                        color.Auditable = false;
                        color.System = true;
                        color.DefaultValue = "teal";
                        color.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, color, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField label = new InputTextField();
                        label.Id = new Guid("F050E7A1-AFB7-4346-B57B-1F12B2BD5AE5");
                        label.Name = "label";
                        label.Label = "Label";
                        label.PlaceholderText = "";
                        label.Description = "";
                        label.HelpText = "";
                        label.Required = true;
                        label.Unique = false;
                        label.Searchable = false;
                        label.Auditable = false;
                        label.System = true;
                        label.DefaultValue = "Default";
                        label.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, label, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField iconName = new InputTextField();
                        iconName.Id = new Guid("5EA0C872-D219-4D94-9EFA-C5DA978D316B");
                        iconName.Name = "icon_name";
                        iconName.Label = "Icon Name";
                        iconName.PlaceholderText = "";
                        iconName.Description = "";
                        iconName.HelpText = "";
                        iconName.Required = true;
                        iconName.Unique = false;
                        iconName.Searchable = false;
                        iconName.Auditable = false;
                        iconName.System = true;
                        iconName.DefaultValue = "database";
                        iconName.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, iconName, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputNumberField weight = new InputNumberField();
                        weight.Id = new Guid("9B169431-6C31-4141-80EB-5844B8333E63");
                        weight.Name = "weight";
                        weight.Label = "Weight";
                        weight.PlaceholderText = "";
                        weight.Description = "";
                        weight.HelpText = "";
                        weight.Required = true;
                        weight.Unique = false;
                        weight.Searchable = false;
                        weight.Auditable = false;
                        weight.System = true;
                        weight.DefaultValue = 10;
                        weight.MinValue = 0;
                        weight.DecimalPlaces = 2;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, weight, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField subscriptions = new InputTextField();
                        subscriptions.Id = new Guid("288EA657-C12C-4AC1-B701-81D6F9F39363");
                        subscriptions.Name = "subscriptions";
                        subscriptions.Label = "Subscriptions JSON String";
                        subscriptions.PlaceholderText = "";
                        subscriptions.Description = "Stringified Array of subscription objects";
                        subscriptions.HelpText = "";
                        subscriptions.Required = false;
                        subscriptions.Unique = false;
                        subscriptions.Searchable = false;
                        subscriptions.Auditable = false;
                        subscriptions.System = true;
                        subscriptions.DefaultValue = null;
                        subscriptions.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, subscriptions, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField name = new InputTextField();
                        name.Id = new Guid("F297577B-073E-4D18-81F3-675C1AFB466D");
                        name.Name = "name";
                        name.Label = "Name";
                        name.PlaceholderText = "";
                        name.Description = "";
                        name.HelpText = "";
                        name.Required = true;
                        name.Unique = false;
                        name.Searchable = false;
                        name.Auditable = false;
                        name.System = true;
                        name.DefaultValue = "default";
                        name.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, name, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField roles = new InputTextField();
                        roles.Id = new Guid("8E486F76-D0C1-4D0E-8617-9EF868BF1C55");
                        roles.Name = "roles";
                        roles.Label = "Subscriptions JSON String";
                        roles.PlaceholderText = "";
                        roles.Description = "Stringified Array of roles that have access to this area";
                        roles.HelpText = "";
                        roles.Required = false;
                        roles.Unique = false;
                        roles.Searchable = false;
                        roles.Auditable = false;
                        roles.System = true;
                        roles.DefaultValue = null;
                        roles.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.AreaEntityId, roles, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                    }
                    #endregion
                }

                if (currentVersion < 150919)
                {
                    systemSettings.Version = 150919;
                    List<Guid> allowedRoles = new List<Guid>();
                    allowedRoles.Add(SystemIds.AdministratorRoleId);
                    Guid filterEntityId = new Guid("2a20e8b1-5713-4257-a860-b964a5cfb317");

                    #region << create filter >>
                    {
                        InputEntity filterEntity = new InputEntity();
                        filterEntity.Id = filterEntityId;
                        filterEntity.Name = "filter";
                        filterEntity.Label = "Filter";
                        filterEntity.LabelPlural = "Filters";
                        filterEntity.System = true;
                        filterEntity.IconName = "filter";
                        filterEntity.Weight = 100;
                        filterEntity.RecordPermissions = new RecordPermissions();
                        filterEntity.RecordPermissions.CanRead = allowedRoles;
                        filterEntity.RecordPermissions.CanCreate = allowedRoles;
                        filterEntity.RecordPermissions.CanUpdate = allowedRoles;
                        filterEntity.RecordPermissions.CanDelete = allowedRoles;
                        {
                            var createResponse = entityManager.CreateEntity(filterEntity);
                            if (!createResponse.Success)
                                throw new Exception("System error 10330. Message:" + createResponse.Message);
                        }

                        InputTextField filterId = new InputTextField();
                        filterId.Id = new Guid("597bd9f4-c534-4244-af88-b6970c6abb21");
                        filterId.Name = "filter_id";
                        filterId.Label = "Filter id";
                        filterId.PlaceholderText = "";
                        filterId.Description = "";
                        filterId.HelpText = "";
                        filterId.Required = true;
                        filterId.Unique = false;
                        filterId.Searchable = false;
                        filterId.Auditable = false;
                        filterId.System = true;
                        filterId.DefaultValue = "";
                        filterId.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, filterId, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField fieldName = new InputTextField();
                        fieldName.Id = new Guid("e4094c4d-0fd3-44ef-9cc0-190ea48f7bca");
                        fieldName.Name = "field_name";
                        fieldName.Label = "Field name";
                        fieldName.PlaceholderText = "";
                        fieldName.Description = "";
                        fieldName.HelpText = "";
                        fieldName.Required = true;
                        fieldName.Unique = false;
                        fieldName.Searchable = false;
                        fieldName.Auditable = false;
                        fieldName.System = true;
                        fieldName.DefaultValue = "";
                        fieldName.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, fieldName, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField relationName = new InputTextField();
                        relationName.Id = new Guid("2859082c-5356-4d13-8b7b-e8fe65417279");
                        relationName.Name = "relation_name";
                        relationName.Label = "Relation name";
                        relationName.PlaceholderText = "";
                        relationName.Description = "";
                        relationName.HelpText = "";
                        relationName.Required = true;
                        relationName.Unique = false;
                        relationName.Searchable = false;
                        relationName.Auditable = false;
                        relationName.System = true;
                        relationName.DefaultValue = "";
                        relationName.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, relationName, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField values = new InputTextField();
                        values.Id = new Guid("ff7511ae-0117-41c6-9a03-08e3c6568c39");
                        values.Name = "values";
                        values.Label = "Values";
                        values.PlaceholderText = "";
                        values.Description = "array of encoded strings";
                        values.HelpText = "";
                        values.Required = true;
                        values.Unique = false;
                        values.Searchable = false;
                        values.Auditable = false;
                        values.System = true;
                        values.DefaultValue = "";
                        values.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, values, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField helper = new InputTextField();
                        helper.Id = new Guid("9056b9fb-4a4a-456f-9c64-539eaf70b6b2");
                        helper.Name = "helper";
                        helper.Label = "Helper";
                        helper.PlaceholderText = "";
                        helper.Description = "stringified object that helps constructing the filter on the interface";
                        helper.HelpText = "";
                        helper.Required = true;
                        helper.Unique = false;
                        helper.Searchable = false;
                        helper.Auditable = false;
                        helper.System = true;
                        helper.DefaultValue = "";
                        helper.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, helper, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField entityName = new InputTextField();
                        entityName.Id = new Guid("22f58779-4c91-4278-8412-88e1a55784e1");
                        entityName.Name = "entity_name";
                        entityName.Label = "Entity Name";
                        entityName.PlaceholderText = "";
                        entityName.Description = "";
                        entityName.HelpText = "";
                        entityName.Required = true;
                        entityName.Unique = false;
                        entityName.Searchable = false;
                        entityName.Auditable = false;
                        entityName.System = true;
                        entityName.DefaultValue = "";
                        entityName.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, entityName, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputTextField listName = new InputTextField();
                        listName.Id = new Guid("a2cb0965-fe51-42b0-a07d-765507da8865");
                        listName.Name = "list_name";
                        listName.Label = "List Name";
                        listName.PlaceholderText = "";
                        listName.Description = "";
                        listName.HelpText = "";
                        listName.Required = true;
                        listName.Unique = false;
                        listName.Searchable = false;
                        listName.Auditable = false;
                        listName.System = true;
                        listName.DefaultValue = "";
                        listName.MaxLength = null;
                        {
                            var createResponse = entityManager.CreateField(filterEntityId, listName, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        InputDateTimeField lastUsedOn = new InputDateTimeField();

                        lastUsedOn.Id = new Guid("207cf27b-3595-41fd-b028-bcd47845ad25");
                        lastUsedOn.Name = "last_used_on";
                        lastUsedOn.Label = "Last used on";
                        lastUsedOn.PlaceholderText = "";
                        lastUsedOn.Description = "";
                        lastUsedOn.HelpText = "";
                        lastUsedOn.Required = true;
                        lastUsedOn.Unique = false;
                        lastUsedOn.Searchable = false;
                        lastUsedOn.Auditable = false;
                        lastUsedOn.System = true;
                        lastUsedOn.DefaultValue = null;
                        lastUsedOn.Format = "dd  MMM yyyy HH:mm:ss";
                        lastUsedOn.UseCurrentTimeAsDefaultValue = true;

                        {
                            var createResponse = entityManager.CreateField(filterEntityId, lastUsedOn, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10340. Message:" + createResponse.Message);
                        }

                        #region << match_type >>
                        InputSelectField matchType = new InputSelectField();
                        matchType.Id = new Guid("15416751-e66d-4b85-ae2f-974255f9c987");
                        matchType.Name = "match_type";
                        matchType.Label = "Match type";
                        matchType.PlaceholderText = "";
                        matchType.Description = "";
                        matchType.HelpText = "";
                        matchType.Required = true;
                        matchType.Unique = false;
                        matchType.Searchable = false;
                        matchType.Auditable = false;
                        matchType.System = true;
                        matchType.DefaultValue = "exact";
                        matchType.Options = null;
                        matchType.Options = new List<SelectFieldOption>
                            {
                                new SelectFieldOption(){ Key = "exact", Value = "Exact match" },
                                new SelectFieldOption(){ Key = "range", Value = "Range" },
                                new SelectFieldOption(){ Key = "period", Value = "Period" },
                                new SelectFieldOption(){ Key = "regex", Value = "Regex" }
                            };

                        {
                            var createResponse = entityManager.CreateField(filterEntityId, matchType, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10060. Entity: filter. Field: match_type" + " Message:" + createResponse.Message);
                        }
                        #endregion

                    }
                    #endregion

                }

                if (currentVersion < 150924)
                {
                    systemSettings.Version = 150924;
                    //User
                    #region << image >>
                    {
                        InputImageField imageField = new InputImageField();
                        imageField.Id = new Guid("bf199b74-4448-4f58-93f5-6b86d888843b");
                        imageField.Name = "image";
                        imageField.Label = "Image";
                        imageField.PlaceholderText = "";
                        imageField.Description = "";
                        imageField.HelpText = "";
                        imageField.Required = false;
                        imageField.Unique = false;
                        imageField.Searchable = false;
                        imageField.Auditable = false;
                        imageField.System = true;
                        imageField.DefaultValue = string.Empty;
                        imageField.EnableSecurity = false;
                        {
                            var createResponse = entityManager.CreateField(SystemIds.UserEntityId, imageField, false);
                            if (!createResponse.Success)
                                throw new Exception("System error 10060. Entity: user. Field: image" + " Message:" + createResponse.Message);
                        }
                    }
                    #endregion
                }

                storeSystemSettings = systemSettingsRepository.Convert(systemSettings);
                systemSettingsRepository.Save(storeSystemSettings);

                //if (currentVersion == 150508) //update to 150510
                //{
                //    systemSettings.Version = 150510;

                //    storeSystemSettings = systemSettingsRepository.Convert(systemSettings);
                //    systemSettingsRepository.Save(storeSystemSettings);
                //}

                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
                throw;
            }
        }