Example #1
0
        public void TaskCreateRecordAction(dynamic data)
        {
            var record         = (EntityRecord)data.record;
            var createResult   = (QueryResponse)data.result;
            var controller     = (Controller)data.controller;
            var createdRecord  = createResult.Object.Data[0];
            var patchObject    = new EntityRecord();
            var priorityString = "";

            if ((string)record["priority"] == "high")
            {
                priorityString = "<span class='go-red'> [high] </span>";
            }
            using (SecurityContext.OpenSystemScope())
            {
                #region << Add creator in watch list >>
                {
                    var targetRelation             = relMan.Read("user_n_n_task_watchers").Object;
                    var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(targetRelation.Id, (Guid)record["created_by"], (Guid)record["id"]);
                    if (!createRelationNtoNResponse.Success)
                    {
                        throw new Exception("Could not create watch relation" + createRelationNtoNResponse.Message);
                    }
                }
                #endregion

                #region << Add owner in watch list >>
                {
                    if ((Guid)record["created_by"] != (Guid)record["owner_id"])
                    {
                        var targetRelation             = relMan.Read("user_n_n_task_watchers").Object;
                        var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(targetRelation.Id, (Guid)record["owner_id"], (Guid)record["id"]);
                        if (!createRelationNtoNResponse.Success)
                        {
                            throw new Exception("Could not create watch relation" + createRelationNtoNResponse.Message);
                        }
                    }
                }
                #endregion

                #region << Generate the code field value >>
                {
                    var filterObj = EntityQuery.QueryEQ("id", (Guid)createdRecord["project_id"]);
                    var query     = new EntityQuery("wv_project", "*", filterObj, null, null, null);
                    var result    = recMan.Find(query);
                    if (result.Success && result.Object.Data.Any())
                    {
                        patchObject         = new EntityRecord();
                        patchObject["id"]   = (Guid)createdRecord["id"];
                        patchObject["code"] = result.Object.Data[0]["code"] + "-T" + createdRecord["number"];
                        var patchResult = recMan.UpdateRecord("wv_task", patchObject);
                        if (!patchResult.Success)
                        {
                            throw new Exception(patchResult.Message);
                        }

                        #region << Check if project owner is different than owner and add it in watch list >>
                        {
                            if ((Guid)result.Object.Data[0]["owner_id"] != (Guid)record["owner_id"] && (Guid)result.Object.Data[0]["owner_id"] != (Guid)record["created_by"])
                            {
                                var targetRelation             = relMan.Read("user_n_n_task_watchers").Object;
                                var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(targetRelation.Id, (Guid)result.Object.Data[0]["owner_id"], (Guid)record["id"]);
                                if (!createRelationNtoNResponse.Success)
                                {
                                    throw new Exception("Could not create watch relation" + createRelationNtoNResponse.Message);
                                }
                            }
                        }
                        #endregion
                    }
                }
                #endregion
            }
            Utils.CreateActivity(recMan, "created", "created a <i class='fa fa-fw fa-tasks go-purple'></i> task [" + patchObject["code"] + "] " + priorityString + " <a href='/#/areas/projects/wv_task/view-general/sb/general/" + createdRecord["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)createdRecord["subject"]) + "</a>", null, (Guid)createdRecord["project_id"], (Guid)createdRecord["id"], null);
            var creatorUsername = "";
            #region << Get username of the creator>>
            {
                EntityQuery   query  = new EntityQuery("user", "username", EntityQuery.QueryEQ("id", (Guid)createdRecord["created_by"]), null, null, null);
                QueryResponse result = recMan.Find(query);
                if (!result.Success)
                {
                    throw new Exception("Cannot get the username of the commentator");
                }
                creatorUsername = (string)result.Object.Data[0]["username"];
            }
            #endregion

            #region << Sent email notification>>
            {
                //At this moment only if the project manager is different than the item creator should get an email
                if ((Guid)createdRecord["created_by"] != (Guid)createdRecord["owner_id"])
                {
                    var emailService           = new EmailService();
                    var emailSubjectParameters = new Dictionary <string, string>();
                    emailSubjectParameters["code"]    = (string)patchObject["code"];
                    emailSubjectParameters["subject"] = (string)createdRecord["subject"];

                    var subject = Regex.Replace(EmailTemplates.NewBugOrTaskNotificationSubject, @"\{(.+?)\}", m => emailSubjectParameters[m.Groups[1].Value]);

                    var emailContentParameters = new Dictionary <string, string>();
                    emailContentParameters["baseUrl"]              = controller.HttpContext.Request.Scheme + "://" + controller.HttpContext.Request.Host.Value;
                    emailContentParameters["subject"]              = subject;
                    emailContentParameters["type"]                 = "task";
                    emailContentParameters["creator"]              = creatorUsername;
                    emailContentParameters["taskOrBugUrl"]         = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_task/view-general/sb/general/" + createdRecord["id"];
                    emailContentParameters["taskOrBugDescription"] = (string)createdRecord["description"];

                    var content = Regex.Replace(EmailTemplates.NewBugOrTaskNotificationContent, @"\{(.+?)\}", m => emailContentParameters[m.Groups[1].Value]);

                    var resepients = new List <string>();

                    #region << Get pm email>>
                    {
                        EntityQuery   query  = new EntityQuery("user", "email", EntityQuery.QueryEQ("id", (Guid)createdRecord["owner_id"]), null, null, null);
                        QueryResponse result = recMan.Find(query);
                        if (!result.Success)
                        {
                            throw new Exception("Cannot get the username of the commentator");
                        }
                        emailService.SendEmail((string)result.Object.Data[0]["email"], subject, content);
                    }
                    #endregion
                }
            }
            #endregion
        }
Example #2
0
        public void Start()
        {
            var entMan = new EntityManager();
            var relMan = new EntityRelationManager();
            var recMan = new RecordManager();
            var storeSystemSettings = DbContext.Current.SettingsRepository.Read();
            var systemSettings      = new SystemSettings(storeSystemSettings);

            //Open scope with a user we will use for the operations further ahead
            var user = new SecurityManager().GetUser(SystemIds.FirstUserId);

            using (SecurityContext.OpenScope(user))
            {
                //Create transaction
                using (var connection = DbContext.Current.CreateConnection())
                {
                    try
                    {
                        connection.BeginTransaction();
                        //Here we need to initialize or update the environment based on the plugin requirements.
                        //The default place for the plugin data is the "plugin_data" entity -> the "data" text field, which is used to store stringified JSON
                        //containing the plugin settings or version

                        #region << 1.Get the current ERP database version and checks for other plugin dependencies >>

                        if (systemSettings.Version > 0)
                        {
                            //Do something if database version is not what you expect
                        }

                        //This plugin needs the webvella-crm plugin to be installed, so we will check this here
                        var installedPlugins = new PluginService().Plugins;
                        var corePluginFound  = false;
                        foreach (var plugin in installedPlugins)
                        {
                            if (plugin.Name == "webvella-core")
                            {
                                corePluginFound = true;
                                break;
                            }
                        }

                        if (!corePluginFound)
                        {
                            throw new Exception("'webvella-core' plugin is required for the 'webvella-crm' to operate");
                        }

                        #endregion

                        #region << 2.Get the current plugin settings from the database >>
                        var         currentPluginSettings   = new PluginSettings();
                        QueryObject pluginDataQueryObject   = EntityQuery.QueryEQ("name", WEBVELLA_CRM_PLUGIN_NAME);
                        var         pluginDataQuery         = new EntityQuery("plugin_data", "*", pluginDataQueryObject);
                        var         pluginDataQueryResponse = recMan.Find(pluginDataQuery);
                        if (!pluginDataQueryResponse.Success)
                        {
                            throw new Exception("plugin 'webvella-project' failed to get its settings due to: " + pluginDataQueryResponse.Message);
                        }

                        if (pluginDataQueryResponse.Object == null || !pluginDataQueryResponse.Object.Data.Any() || pluginDataQueryResponse.Object.Data[0]["data"] == DBNull.Value)
                        {
                            //plugin was not installed
                            currentPluginSettings.Version = 20160429;
                            {
                                string json = JsonConvert.SerializeObject(currentPluginSettings);
                                var    settingsEntityRecord = new EntityRecord();
                                settingsEntityRecord["id"]   = WEBVELLA_CRM_PLUGIN_ID;
                                settingsEntityRecord["name"] = WEBVELLA_CRM_PLUGIN_NAME;
                                settingsEntityRecord["data"] = json;
                                var settingsSaveReponse = recMan.CreateRecord("plugin_data", settingsEntityRecord);
                                if (!settingsSaveReponse.Success)
                                {
                                    throw new Exception("plugin 'webvella-project' failed to save its settings in the database due to: " + pluginDataQueryResponse.Message);
                                }
                            }
                        }
                        else
                        {
                            string json = (string)((List <EntityRecord>)pluginDataQueryResponse.Object.Data)[0]["data"];
                            currentPluginSettings = JsonConvert.DeserializeObject <PluginSettings>(json);
                        }
                        #endregion

                        #region << 3. Run methods based on the current installed version of the plugin >>
                        if (currentPluginSettings.Version < 20160430)
                        {
                            currentPluginSettings.Version = 20160430;

                            #region << Create CRM admin area >>
                            //The areas are the main object for navigation for the user. You can attach entities and URLs later to them
                            {
                                var area = new EntityRecord();
                                area["id"]        = CRM_ADMIN_AREA_ID;
                                area["name"]      = "crm_admin";
                                area["label"]     = "CRM Admin";
                                area["icon_name"] = "users";
                                area["color"]     = "pink";
                                area["folder"]    = "Admin";
                                area["weight"]    = 100;
                                var areaRoles = new List <Guid>();
                                areaRoles.Add(SystemIds.AdministratorRoleId);
                                area["roles"] = JsonConvert.SerializeObject(areaRoles);
                                var createAreaResult = recMan.CreateRecord("area", area);
                                if (!createAreaResult.Success)
                                {
                                    throw new Exception("System error 10060. Area create with name : project_admin. Message:" + createAreaResult.Message);
                                }
                            }
                            #endregion

                            #region << wv_customer >>
                            {
                                #region << entity >>
                                {
                                    InputEntity entity = new InputEntity();
                                    entity.Id                          = CUSTOMER_ENTITY_ID;
                                    entity.Name                        = CUSTOMER_ENTITY_NAME;
                                    entity.Label                       = "Customer";
                                    entity.LabelPlural                 = "Customers";
                                    entity.System                      = true;
                                    entity.IconName                    = "building-o";
                                    entity.Weight                      = 2;
                                    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);
                                    entity.RecordPermissions.CanCreate.Add(SystemIds.RegularRoleId);
                                    //READ
                                    entity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                                    entity.RecordPermissions.CanRead.Add(SystemIds.RegularRoleId);
                                    //UPDATE
                                    entity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                    entity.RecordPermissions.CanUpdate.Add(SystemIds.RegularRoleId);

                                    {
                                        var response = entMan.CreateEntity(entity);
                                        if (!response.Success)
                                        {
                                            throw new Exception("System error 10050. Entity: " + CUSTOMER_ENTITY_NAME + " Field: entity creation" + " Message:" + response.Message);
                                        }
                                    }
                                }
                                #endregion

                                #region << name >>
                                {
                                    InputTextField textboxField = new InputTextField();
                                    textboxField.Id                    = new Guid("7fb95d0f-ab59-421d-974d-ab357e28a1f9");
                                    textboxField.Name                  = "name";
                                    textboxField.Label                 = "Name";
                                    textboxField.PlaceholderText       = "";
                                    textboxField.Description           = "";
                                    textboxField.HelpText              = "";
                                    textboxField.Required              = true;
                                    textboxField.Unique                = false;
                                    textboxField.Searchable            = true;
                                    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);
                                    textboxField.Permissions.CanRead.Add(SystemIds.RegularRoleId);
                                    //UPDATE
                                    textboxField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                                    {
                                        var response = entMan.CreateField(CUSTOMER_ENTITY_ID, textboxField, false);
                                        if (!response.Success)
                                        {
                                            throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Field: name" + " Message:" + response.Message);
                                        }
                                    }
                                }
                                #endregion
                            }
                            #endregion

                            #region << View name: admin_details >>
                            {
                                var createViewEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                                var createViewInput  = new InputRecordView();
                                var viewRegion       = new InputRecordViewRegion();
                                var viewSection      = new InputRecordViewSection();
                                var viewRow          = new InputRecordViewRow();
                                var viewColumn       = new InputRecordViewColumn();
                                var viewItem         = new InputRecordViewFieldItem();

                                #region << details >>
                                createViewInput.Id                  = new Guid("3a0e1319-5357-49ec-9e85-8d9be2363fcf");
                                createViewInput.Type                = "hidden";
                                createViewInput.Name                = "admin_details";
                                createViewInput.Label               = "Details";
                                createViewInput.Default             = false;
                                createViewInput.System              = false;
                                createViewInput.Weight              = 15;
                                createViewInput.CssClass            = null;
                                createViewInput.IconName            = "building-o";
                                createViewInput.DynamicHtmlTemplate = null;
                                createViewInput.DataSourceUrl       = null;
                                createViewInput.ServiceCode         = null;
                                createViewInput.Regions             = new List <InputRecordViewRegion>();
                                #endregion

                                #region << Header Region >>
                                viewRegion          = new InputRecordViewRegion();
                                viewRegion.Name     = "header";
                                viewRegion.Label    = "Header";
                                viewRegion.Render   = true;
                                viewRegion.Weight   = 1;
                                viewRegion.CssClass = "";
                                viewRegion.Sections = new List <InputRecordViewSection>();

                                #region << Section >>
                                viewSection           = new InputRecordViewSection();
                                viewSection.Id        = Guid.NewGuid();
                                viewSection.Name      = "details";
                                viewSection.Label     = "Details";
                                viewSection.ShowLabel = false;
                                viewSection.CssClass  = "";
                                viewSection.Collapsed = false;
                                viewSection.TabOrder  = "left-right";
                                viewSection.Weight    = 1;
                                viewSection.Rows      = new List <InputRecordViewRow>();

                                #region << Row >>
                                viewRow         = new InputRecordViewRow();
                                viewRow.Id      = Guid.NewGuid();
                                viewRow.Weight  = 1;
                                viewRow.Columns = new List <InputRecordViewColumn>();

                                #region << Column 1 >>
                                viewColumn = new InputRecordViewColumn();
                                viewColumn.GridColCount = 12;
                                viewColumn.Items        = new List <InputRecordViewItemBase>();


                                #region << name >>
                                {
                                    viewItem            = new InputRecordViewFieldItem();
                                    viewItem.EntityId   = CUSTOMER_ENTITY_ID;
                                    viewItem.EntityName = CUSTOMER_ENTITY_NAME;
                                    viewItem.FieldId    = createViewEntity.Fields.Single(x => x.Name == "name").Id;
                                    viewItem.FieldName  = "name";
                                    viewItem.Type       = "field";
                                    viewColumn.Items.Add(viewItem);
                                }
                                #endregion


                                //Save column
                                viewRow.Columns.Add(viewColumn);
                                #endregion

                                //Save row
                                viewSection.Rows.Add(viewRow);
                                #endregion

                                //Save section
                                viewRegion.Sections.Add(viewSection);
                                #endregion

                                //Save region
                                createViewInput.Regions.Add(viewRegion);
                                #endregion

                                #region << relation options >>
                                createViewInput.RelationOptions = new List <EntityRelationOptionsItem>();
                                #endregion

                                #region << Sidebar >>
                                createViewInput.Sidebar          = new InputRecordViewSidebar();
                                createViewInput.Sidebar.CssClass = "";
                                createViewInput.Sidebar.Render   = true;
                                createViewInput.Sidebar.Render   = true;
                                createViewInput.Sidebar.Items    = new List <InputRecordViewSidebarItemBase>();
                                #endregion

                                #region << action items >>
                                createViewInput.ActionItems = new List <ActionItem>();
                                var actionItem = new ActionItem();
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_record_delete";
                                    actionItem.Menu     = "page-title-dropdown";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a href=""javascript:void(0)"" confirmed-click=""ngCtrl.deleteRecord(ngCtrl)"" ng-confirm-click=""Are you sure?""
										ng-if=""ngCtrl.userHasRecordPermissions('canDelete')"">
									<i class=""fa fa-trash go-red""></i> Delete Record
								</a>"                                ;
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_back_button";
                                    actionItem.Menu     = "sidebar-top";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a class=""back clearfix"" href=""javascript:void(0)"" ng-click=""sidebarData.goBack()""><i class=""fa fa-fw fa-arrow-left""></i> <span class=""text"">Back</span></a>";
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                #endregion

                                {
                                    var response = entMan.CreateRecordView(CUSTOMER_ENTITY_ID, createViewInput);
                                    if (!response.Success)
                                    {
                                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated view: admin_details" + " Message:" + response.Message);
                                    }
                                }
                            }
                            #endregion

                            #region << View name: admin_create >>
                            {
                                var createViewEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                                var createViewInput  = new InputRecordView();
                                var viewRegion       = new InputRecordViewRegion();
                                var viewSection      = new InputRecordViewSection();
                                var viewRow          = new InputRecordViewRow();
                                var viewColumn       = new InputRecordViewColumn();
                                var viewItem         = new InputRecordViewFieldItem();

                                #region << details >>
                                createViewInput.Id                  = new Guid("93043954-ae70-41a3-b4b7-665531a23a76");
                                createViewInput.Type                = "create";
                                createViewInput.Name                = "admin_create";
                                createViewInput.Label               = "Create customer";
                                createViewInput.Default             = false;
                                createViewInput.System              = false;
                                createViewInput.Weight              = 25;
                                createViewInput.CssClass            = null;
                                createViewInput.IconName            = "building-o";
                                createViewInput.DynamicHtmlTemplate = null;
                                createViewInput.DataSourceUrl       = null;
                                createViewInput.ServiceCode         = null;
                                createViewInput.Regions             = new List <InputRecordViewRegion>();
                                #endregion

                                #region << Header Region >>
                                viewRegion          = new InputRecordViewRegion();
                                viewRegion.Name     = "header";
                                viewRegion.Label    = "Header";
                                viewRegion.Render   = true;
                                viewRegion.Weight   = 1;
                                viewRegion.CssClass = "";
                                viewRegion.Sections = new List <InputRecordViewSection>();

                                #region << Section >>
                                viewSection           = new InputRecordViewSection();
                                viewSection.Id        = Guid.NewGuid();
                                viewSection.Name      = "details";
                                viewSection.Label     = "Details";
                                viewSection.ShowLabel = false;
                                viewSection.CssClass  = "";
                                viewSection.Collapsed = false;
                                viewSection.TabOrder  = "left-right";
                                viewSection.Weight    = 1;
                                viewSection.Rows      = new List <InputRecordViewRow>();

                                #region << Row >>
                                viewRow         = new InputRecordViewRow();
                                viewRow.Id      = Guid.NewGuid();
                                viewRow.Weight  = 1;
                                viewRow.Columns = new List <InputRecordViewColumn>();

                                #region << Column 1 >>
                                viewColumn = new InputRecordViewColumn();
                                viewColumn.GridColCount = 12;
                                viewColumn.Items        = new List <InputRecordViewItemBase>();


                                #region << name >>
                                {
                                    viewItem            = new InputRecordViewFieldItem();
                                    viewItem.EntityId   = CUSTOMER_ENTITY_ID;
                                    viewItem.EntityName = CUSTOMER_ENTITY_NAME;
                                    viewItem.FieldId    = createViewEntity.Fields.Single(x => x.Name == "name").Id;
                                    viewItem.FieldName  = "name";
                                    viewItem.Type       = "field";
                                    viewColumn.Items.Add(viewItem);
                                }
                                #endregion


                                //Save column
                                viewRow.Columns.Add(viewColumn);
                                #endregion

                                //Save row
                                viewSection.Rows.Add(viewRow);
                                #endregion

                                //Save section
                                viewRegion.Sections.Add(viewSection);
                                #endregion

                                //Save region
                                createViewInput.Regions.Add(viewRegion);
                                #endregion

                                #region << relation options >>
                                createViewInput.RelationOptions = new List <EntityRelationOptionsItem>();
                                #endregion

                                #region << Sidebar >>
                                createViewInput.Sidebar          = new InputRecordViewSidebar();
                                createViewInput.Sidebar.CssClass = "";
                                createViewInput.Sidebar.Render   = true;
                                createViewInput.Sidebar.Render   = true;
                                createViewInput.Sidebar.Items    = new List <InputRecordViewSidebarItemBase>();
                                #endregion

                                #region << action items >>
                                createViewInput.ActionItems = new List <ActionItem>();
                                var actionItem = new ActionItem();

                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_create_and_list";
                                    actionItem.Menu     = "create-bottom";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a class=""btn btn-primary"" ng-click='ngCtrl.create(""list"")' ng-if=""ngCtrl.createViewRegion != null"">Create & List</a>";
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_create_and_details";
                                    actionItem.Menu     = "create-bottom";
                                    actionItem.Weight   = 2;
                                    actionItem.Template = "" +
                                                          @"<a class=""btn btn-default btn-outline"" ng-click='ngCtrl.create(""details"")' ng-if=""ngCtrl.createViewRegion != null"">Create & Details</a>";
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_create_cancel";
                                    actionItem.Menu     = "create-bottom";
                                    actionItem.Weight   = 3;
                                    actionItem.Template = "" +
                                                          @"<a class=""btn btn-default btn-outline"" ng-click=""ngCtrl.cancel()"">Cancel</a>";
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_back_button";
                                    actionItem.Menu     = "sidebar-top";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a class=""back clearfix"" href=""javascript:void(0)"" ng-click=""sidebarData.goBack()""><i class=""fa fa-fw fa-arrow-left""></i> <span class=""text"">Back</span></a>";
                                    createViewInput.ActionItems.Add(actionItem);
                                }
                                #endregion
                                {
                                    var response = entMan.CreateRecordView(CUSTOMER_ENTITY_ID, createViewInput);
                                    if (!response.Success)
                                    {
                                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated view: admin_create" + " Message:" + response.Message);
                                    }
                                }
                            }
                            #endregion

                            #region << List name: admin >>
                            {
                                var createListEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                                var createListInput  = new InputRecordList();
                                var listItem         = new InputRecordListFieldItem();
                                var listSort         = new InputRecordListSort();
                                var listQuery        = new InputRecordListQuery();

                                #region << details >>
                                createListInput.Id                  = new Guid("ff15f200-8e68-4683-8576-4c8244405ca9");
                                createListInput.Type                = "hidden";
                                createListInput.Name                = "admin";
                                createListInput.Label               = "Customers";
                                createListInput.Weight              = 11;
                                createListInput.Default             = false;
                                createListInput.System              = true;
                                createListInput.CssClass            = null;
                                createListInput.IconName            = "building-o";
                                createListInput.VisibleColumnsCount = 7;
                                createListInput.ColumnWidthsCSV     = null;
                                createListInput.PageSize            = 10;
                                createListInput.DynamicHtmlTemplate = null;
                                createListInput.DataSourceUrl       = null;
                                createListInput.ServiceCode         = null;
                                #endregion

                                #region << action items >>
                                createListInput.ActionItems = new List <ActionItem>();
                                var actionItem = new ActionItem();
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_record_details";
                                    actionItem.Menu     = "record-row";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a class=""btn btn-default btn-outline"" ng-href=""{{ngCtrl.getRecordDetailsUrl(record, ngCtrl)}}"">
							<i class=""fa fa-fw fa-eye""></i>
							</a>"                            ;
                                    createListInput.ActionItems.Add(actionItem);
                                }
                                {
                                    actionItem          = new ActionItem();
                                    actionItem.Name     = "wv_create_record";
                                    actionItem.Menu     = "page-title";
                                    actionItem.Weight   = 1;
                                    actionItem.Template = "" +
                                                          @"<a class=""btn btn-default btn-outline hidden-xs"" ng-show=""ngCtrl.userHasRecordPermissions('canCreate')"" 
    ng-href=""{{ngCtrl.getRecordCreateUrl(ngCtrl)}}"">
	<i class=""fa fa-fw fa-plus""></i> Add New
</a>";
                                    createListInput.ActionItems.Add(actionItem);
                                }
                                #endregion

                                #region << Columns >>
                                createListInput.Columns = new List <InputRecordListItemBase>();
                                #region << name >>
                                {
                                    var fieldName = "name";
                                    listItem            = new InputRecordListFieldItem();
                                    listItem.EntityId   = CUSTOMER_ENTITY_ID;
                                    listItem.EntityName = CUSTOMER_ENTITY_NAME;
                                    listItem.FieldId    = createListEntity.Fields.Single(x => x.Name == fieldName).Id;
                                    listItem.FieldName  = fieldName;
                                    listItem.Type       = "field";
                                    createListInput.Columns.Add(listItem);
                                }
                                #endregion

                                #endregion

                                #region << relation options >>
                                createListInput.RelationOptions = new List <EntityRelationOptionsItem>();
                                #endregion

                                #region << query >>
                                listQuery = new InputRecordListQuery();
                                #endregion

                                #region << Sort >>
                                listSort = new InputRecordListSort();
                                #endregion
                                {
                                    var response = entMan.CreateRecordList(CUSTOMER_ENTITY_ID, createListInput);
                                    if (!response.Success)
                                    {
                                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated List: admin" + " Message:" + response.Message);
                                    }
                                }
                            }
                            #endregion

                            #region << area add subscription: CRM Admin -> Customer >>
                            {
                                var updatedAreaId    = CRM_ADMIN_AREA_ID;
                                var updateAreaResult = Helpers.UpsertEntityAsAreaSubscription(entMan, recMan, updatedAreaId, CUSTOMER_ENTITY_NAME, "admin_details", "admin_create", "admin");
                                if (!updateAreaResult.Success)
                                {
                                    throw new Exception("System error 10060. Area update with id : " + updatedAreaId + " Message:" + updateAreaResult.Message);
                                }
                            }
                            #endregion

                            #region << customer lookup list >>
                            {
                                var updateListEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                                var updateList       = updateListEntity.RecordLists.Single(x => x.Name == "lookup");
                                var updateListInput  = new InputRecordList();
                                var listItem         = new InputRecordListFieldItem();
                                var listSort         = new InputRecordListSort();
                                var listQuery        = new InputRecordListQuery();

                                //Convert recordList to recordListInput
                                updateListInput = updateList.DynamicMapTo <InputRecordList>();

                                //General list details
                                //updateListInput.IconName = "";

                                //Fields
                                #region << name >>
                                listItem            = new InputRecordListFieldItem();
                                listItem.EntityId   = CUSTOMER_ENTITY_ID;
                                listItem.EntityName = "customer";
                                listItem.FieldId    = updateListEntity.Fields.Single(x => x.Name == "name").Id;
                                listItem.FieldName  = "name";
                                listItem.Type       = "field";
                                updateListInput.Columns.Add(listItem);
                                #endregion

                                //Query
                                #region << query descr >>
                                listQuery = new InputRecordListQuery();
                                #endregion


                                //Sort
                                #region << Sort >>
                                listSort           = new InputRecordListSort();
                                listSort.FieldName = "name";
                                listSort.SortType  = "ascending";
                                updateListInput.Sorts.Add(listSort);
                                #endregion
                                {
                                    var responseObject = entMan.UpdateRecordList(CUSTOMER_ENTITY_ID, updateListInput);
                                    if (!responseObject.Success)
                                    {
                                        throw new Exception("System error 10060. Entity: " + "user" + " Updated List: list_name" + " Message:" + responseObject.Message);
                                    }
                                }
                            }
                            #endregion

                            if (createSampleRecords)
                            {
                                #region << Create Sample Customer >>
                                {
                                    var sampleRecord = new EntityRecord();
                                    sampleRecord["id"]   = new Guid("fb06213f-7632-495b-bb8d-ed5ff07dc515");
                                    sampleRecord["name"] = "Buckley Miller & Wright";
                                    var createSampleRecordResult = recMan.CreateRecord(CUSTOMER_ENTITY_NAME, sampleRecord);
                                    if (!createSampleRecordResult.Success)
                                    {
                                        throw new Exception("System error 10060. Create sample record. Message:" + createSampleRecordResult.Message);
                                    }
                                }
                                #endregion

                                #region << Create Sample Customer User >>
                                {
                                    var sampleRecord = new EntityRecord();
                                    sampleRecord["id"]         = new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2");
                                    sampleRecord["first_name"] = "Sample";
                                    sampleRecord["last_name"]  = "Customer";
                                    sampleRecord["username"]   = "******";
                                    sampleRecord["email"]      = "*****@*****.**";
                                    sampleRecord["password"]   = "******";
                                    sampleRecord["enabled"]    = true;
                                    sampleRecord["verified"]   = true;
                                    sampleRecord["image"]      = "/plugins/webvella-core/assets/avatar-deep-purple.png";
                                    var createSampleRecordResult = recMan.CreateRecord(SystemIds.UserEntityId, sampleRecord);
                                    if (!createSampleRecordResult.Success)
                                    {
                                        throw new Exception("System error 10060. Create sample customer record. Message:" + createSampleRecordResult.Message);
                                    }
                                }
                                #endregion

                                #region << Create Sample User Role>>
                                {
                                    var sampleRecord = new EntityRecord();
                                    sampleRecord["id"]          = new Guid("27745245-09bd-4adb-8831-3870bcae46fe");
                                    sampleRecord["name"]        = "crm_customer";
                                    sampleRecord["description"] = "Sample Customer role for CRM application";
                                    var createSampleRecordResult = recMan.CreateRecord(SystemIds.RoleEntityId, sampleRecord);
                                    if (!createSampleRecordResult.Success)
                                    {
                                        throw new Exception("System error 10060. Create sample role record. Message:" + createSampleRecordResult.Message);
                                    }
                                }
                                #endregion

                                #region << Create relation between sample customer and role >>
                                {
                                    var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(new Guid("0c4b119e-1d7b-4b40-8d2c-9e447cc656ab"), new Guid("27745245-09bd-4adb-8831-3870bcae46fe"), new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2"));
                                    if (!createRelationNtoNResponse.Success)
                                    {
                                        throw new Exception("Could not create item image relation" + createRelationNtoNResponse.Message);
                                    }
                                }
                                #endregion

                                #region << Create relation between sample customer and regular role >>
                                {
                                    var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(new Guid("0c4b119e-1d7b-4b40-8d2c-9e447cc656ab"), new Guid("f16ec6db-626d-4c27-8de0-3e7ce542c55f"), new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2"));
                                    if (!createRelationNtoNResponse.Success)
                                    {
                                        throw new Exception("Could not create item image relation" + createRelationNtoNResponse.Message);
                                    }
                                }
                                #endregion
                            }
                        }
                        #endregion

                        #region << 4. Save needed changes to the plugin setting data >>
                        {
                            string json = JsonConvert.SerializeObject(currentPluginSettings);
                            var    settingsEntityRecord = new EntityRecord();
                            settingsEntityRecord["id"]   = WEBVELLA_CRM_PLUGIN_ID;
                            settingsEntityRecord["name"] = WEBVELLA_CRM_PLUGIN_NAME;
                            settingsEntityRecord["data"] = json;
                            var settingsUpdateReponse = recMan.UpdateRecord("plugin_data", settingsEntityRecord);
                            if (!settingsUpdateReponse.Success)
                            {
                                throw new Exception("plugin 'webvella-project' failed to update its settings in the database due to: " + pluginDataQueryResponse.Message);
                            }
                        }
                        #endregion

                        connection.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        connection.RollbackTransaction();
                        throw ex;
                    }
                }
            }
        }
Example #3
0
        private static void Patch160430(EntityManager entMan, EntityRelationManager relMan, RecordManager recMan, bool createSampleRecords = false)
        {
            #region << Create CRM admin area >>
            //The areas are the main object for navigation for the user. You can attach entities and URLs later to them
            {
                var area = new EntityRecord();
                area["id"]        = CRM_ADMIN_AREA_ID;
                area["name"]      = "crm_admin";
                area["label"]     = "CRM Admin";
                area["icon_name"] = "users";
                area["color"]     = "pink";
                area["folder"]    = "Admin";
                area["weight"]    = 100;
                var areaRoles = new List <Guid>();
                areaRoles.Add(SystemIds.AdministratorRoleId);
                area["roles"] = JsonConvert.SerializeObject(areaRoles);
                var createAreaResult = recMan.CreateRecord("area", area);
                if (!createAreaResult.Success)
                {
                    throw new Exception("System error 10060. Area create with name : project_admin. Message:" + createAreaResult.Message);
                }
            }
            #endregion

            #region << wv_customer >>
            {
                #region << entity >>
                {
                    InputEntity entity = new InputEntity();
                    entity.Id                          = CUSTOMER_ENTITY_ID;
                    entity.Name                        = CUSTOMER_ENTITY_NAME;
                    entity.Label                       = "Customer";
                    entity.LabelPlural                 = "Customers";
                    entity.System                      = true;
                    entity.IconName                    = "building-o";
                    entity.Weight                      = 2;
                    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);
                    entity.RecordPermissions.CanCreate.Add(SystemIds.RegularRoleId);
                    //READ
                    entity.RecordPermissions.CanRead.Add(SystemIds.AdministratorRoleId);
                    entity.RecordPermissions.CanRead.Add(SystemIds.RegularRoleId);
                    //UPDATE
                    entity.RecordPermissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                    entity.RecordPermissions.CanUpdate.Add(SystemIds.RegularRoleId);
                    //System fields and relations Ids should be hardcoded for the compare/change code generation to work later on correctly
                    var systemItemIdDictionary = new Dictionary <string, Guid>();
                    systemItemIdDictionary["id"]                           = new Guid("e8564a56-9917-4c45-a264-4c080f2d2b31");
                    systemItemIdDictionary["created_on"]                   = new Guid("1ca9c660-0042-47b3-91c7-e0f2b817633c");
                    systemItemIdDictionary["created_by"]                   = new Guid("12c29d6a-b5e5-4293-9e8a-91475d10dac9");
                    systemItemIdDictionary["last_modified_on"]             = new Guid("b6a172aa-b50a-403f-a178-f923a0d7576f");
                    systemItemIdDictionary["last_modified_by"]             = new Guid("6aab2af3-6909-4f8d-8c54-6a2403d6a25a");
                    systemItemIdDictionary["user_wv_customer_created_by"]  = new Guid("2d2045f4-0553-4ffd-bd12-cbef17aea14a");
                    systemItemIdDictionary["user_wv_customer_modified_by"] = new Guid("2ba6c8c5-2550-4f26-8611-f397c529a61c");
                    {
                        var response = entMan.CreateEntity(entity, false, false, systemItemIdDictionary);
                        if (!response.Success)
                        {
                            throw new Exception("System error 10050. Entity: " + CUSTOMER_ENTITY_NAME + " Field: entity creation" + " Message:" + response.Message);
                        }
                    }
                }
                #endregion

                #region << name >>
                {
                    InputTextField textboxField = new InputTextField();
                    textboxField.Id                    = new Guid("7fb95d0f-ab59-421d-974d-ab357e28a1f9");
                    textboxField.Name                  = "name";
                    textboxField.Label                 = "Name";
                    textboxField.PlaceholderText       = "";
                    textboxField.Description           = "";
                    textboxField.HelpText              = "";
                    textboxField.Required              = true;
                    textboxField.Unique                = false;
                    textboxField.Searchable            = true;
                    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);
                    textboxField.Permissions.CanRead.Add(SystemIds.RegularRoleId);
                    //UPDATE
                    textboxField.Permissions.CanUpdate.Add(SystemIds.AdministratorRoleId);
                    {
                        var response = entMan.CreateField(CUSTOMER_ENTITY_ID, textboxField, false);
                        if (!response.Success)
                        {
                            throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Field: name" + " Message:" + response.Message);
                        }
                    }
                }
                #endregion
            }
            #endregion

            #region << View name: admin_details >>
            {
                var createViewEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                var createViewInput  = new InputRecordView();
                var viewRegion       = new InputRecordViewRegion();
                var viewSection      = new InputRecordViewSection();
                var viewRow          = new InputRecordViewRow();
                var viewColumn       = new InputRecordViewColumn();
                var viewItem         = new InputRecordViewFieldItem();

                #region << details >>
                createViewInput.Id                  = new Guid("3a0e1319-5357-49ec-9e85-8d9be2363fcf");
                createViewInput.Type                = "hidden";
                createViewInput.Name                = "admin_details";
                createViewInput.Label               = "Details";
                createViewInput.Title               = "";
                createViewInput.Default             = false;
                createViewInput.System              = true;
                createViewInput.Weight              = 15;
                createViewInput.CssClass            = null;
                createViewInput.IconName            = "building-o";
                createViewInput.DynamicHtmlTemplate = null;
                createViewInput.DataSourceUrl       = null;
                createViewInput.ServiceCode         = null;
                createViewInput.Regions             = new List <InputRecordViewRegion>();
                #endregion

                #region << Header Region >>
                viewRegion          = new InputRecordViewRegion();
                viewRegion.Name     = "header";
                viewRegion.Label    = "Header";
                viewRegion.Render   = true;
                viewRegion.Weight   = 1;
                viewRegion.CssClass = "";
                viewRegion.Sections = new List <InputRecordViewSection>();

                #region << Section >>
                viewSection           = new InputRecordViewSection();
                viewSection.Id        = new Guid("201882a6-c1f8-4f84-878d-fddfacdcb2d7");
                viewSection.Name      = "details";
                viewSection.Label     = "Details";
                viewSection.ShowLabel = false;
                viewSection.CssClass  = "";
                viewSection.Collapsed = false;
                viewSection.TabOrder  = "left-right";
                viewSection.Weight    = 1;
                viewSection.Rows      = new List <InputRecordViewRow>();

                #region << Row >>
                viewRow         = new InputRecordViewRow();
                viewRow.Id      = new Guid("ce09fdad-bb23-4f7f-b64b-190fec656711");
                viewRow.Weight  = 1;
                viewRow.Columns = new List <InputRecordViewColumn>();

                #region << Column 1 >>
                viewColumn = new InputRecordViewColumn();
                viewColumn.GridColCount = 12;
                viewColumn.Items        = new List <InputRecordViewItemBase>();


                #region << name >>
                {
                    viewItem            = new InputRecordViewFieldItem();
                    viewItem.EntityId   = CUSTOMER_ENTITY_ID;
                    viewItem.EntityName = CUSTOMER_ENTITY_NAME;
                    viewItem.FieldId    = createViewEntity.Fields.Single(x => x.Name == "name").Id;
                    viewItem.FieldName  = "name";
                    viewItem.Type       = "field";
                    viewColumn.Items.Add(viewItem);
                }
                #endregion


                //Save column
                viewRow.Columns.Add(viewColumn);
                #endregion

                //Save row
                viewSection.Rows.Add(viewRow);
                #endregion

                //Save section
                viewRegion.Sections.Add(viewSection);
                #endregion

                //Save region
                createViewInput.Regions.Add(viewRegion);
                #endregion

                #region << relation options >>
                createViewInput.RelationOptions = new List <EntityRelationOptionsItem>();
                #endregion

                #region << Sidebar >>
                createViewInput.Sidebar          = new InputRecordViewSidebar();
                createViewInput.Sidebar.CssClass = "";
                createViewInput.Sidebar.Render   = true;
                createViewInput.Sidebar.Render   = true;
                createViewInput.Sidebar.Items    = new List <InputRecordViewSidebarItemBase>();
                #endregion

                #region << action items >>
                createViewInput.ActionItems = new List <ActionItem>();
                var actionItem = new ActionItem();
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_record_delete";
                    actionItem.Menu     = "page-title-dropdown";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a href=""javascript:void(0)"" confirmed-click=""ngCtrl.deleteRecord(ngCtrl)"" ng-confirm-click=""Are you sure?""
										ng-if=""::ngCtrl.userHasRecordPermissions('canDelete')"">
									<i class=""fa fa-trash go-red""></i> Delete Record
								</a>"                                ;
                    createViewInput.ActionItems.Add(actionItem);
                }
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_back_button";
                    actionItem.Menu     = "sidebar-top";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a class=""back clearfix"" href=""javascript:void(0)"" ng-click=""sidebarData.goBack()""><i class=""fa fa-fw fa-arrow-left""></i> <span class=""text"">Back</span></a>";
                    createViewInput.ActionItems.Add(actionItem);
                }
                #endregion

                {
                    var response = entMan.CreateRecordView(CUSTOMER_ENTITY_ID, createViewInput);
                    if (!response.Success)
                    {
                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated view: admin_details" + " Message:" + response.Message);
                    }
                }
            }
            #endregion

            #region << View name: admin_create >>
            {
                var createViewEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                var createViewInput  = new InputRecordView();
                var viewRegion       = new InputRecordViewRegion();
                var viewSection      = new InputRecordViewSection();
                var viewRow          = new InputRecordViewRow();
                var viewColumn       = new InputRecordViewColumn();
                var viewItem         = new InputRecordViewFieldItem();

                #region << details >>
                createViewInput.Id                  = new Guid("93043954-ae70-41a3-b4b7-665531a23a76");
                createViewInput.Type                = "create";
                createViewInput.Name                = "admin_create";
                createViewInput.Label               = "Create customer";
                createViewInput.Title               = "";
                createViewInput.Default             = false;
                createViewInput.System              = true;
                createViewInput.Weight              = 25;
                createViewInput.CssClass            = null;
                createViewInput.IconName            = "building-o";
                createViewInput.DynamicHtmlTemplate = null;
                createViewInput.DataSourceUrl       = null;
                createViewInput.ServiceCode         = null;
                createViewInput.Regions             = new List <InputRecordViewRegion>();
                #endregion

                #region << Header Region >>
                viewRegion          = new InputRecordViewRegion();
                viewRegion.Name     = "header";
                viewRegion.Label    = "Header";
                viewRegion.Render   = true;
                viewRegion.Weight   = 1;
                viewRegion.CssClass = "";
                viewRegion.Sections = new List <InputRecordViewSection>();

                #region << Section >>
                viewSection           = new InputRecordViewSection();
                viewSection.Id        = new Guid("8d82e33e-139a-4c80-99ac-3721138bdc65");
                viewSection.Name      = "details";
                viewSection.Label     = "Details";
                viewSection.ShowLabel = false;
                viewSection.CssClass  = "";
                viewSection.Collapsed = false;
                viewSection.TabOrder  = "left-right";
                viewSection.Weight    = 1;
                viewSection.Rows      = new List <InputRecordViewRow>();

                #region << Row >>
                viewRow         = new InputRecordViewRow();
                viewRow.Id      = new Guid("cdc2da04-f92a-47e1-9259-6526816fe84d");
                viewRow.Weight  = 1;
                viewRow.Columns = new List <InputRecordViewColumn>();

                #region << Column 1 >>
                viewColumn = new InputRecordViewColumn();
                viewColumn.GridColCount = 12;
                viewColumn.Items        = new List <InputRecordViewItemBase>();


                #region << name >>
                {
                    viewItem            = new InputRecordViewFieldItem();
                    viewItem.EntityId   = CUSTOMER_ENTITY_ID;
                    viewItem.EntityName = CUSTOMER_ENTITY_NAME;
                    viewItem.FieldId    = createViewEntity.Fields.Single(x => x.Name == "name").Id;
                    viewItem.FieldName  = "name";
                    viewItem.Type       = "field";
                    viewColumn.Items.Add(viewItem);
                }
                #endregion


                //Save column
                viewRow.Columns.Add(viewColumn);
                #endregion

                //Save row
                viewSection.Rows.Add(viewRow);
                #endregion

                //Save section
                viewRegion.Sections.Add(viewSection);
                #endregion

                //Save region
                createViewInput.Regions.Add(viewRegion);
                #endregion

                #region << relation options >>
                createViewInput.RelationOptions = new List <EntityRelationOptionsItem>();
                #endregion

                #region << Sidebar >>
                createViewInput.Sidebar          = new InputRecordViewSidebar();
                createViewInput.Sidebar.CssClass = "";
                createViewInput.Sidebar.Render   = true;
                createViewInput.Sidebar.Render   = true;
                createViewInput.Sidebar.Items    = new List <InputRecordViewSidebarItemBase>();
                #endregion

                #region << action items >>
                createViewInput.ActionItems = new List <ActionItem>();
                var actionItem = new ActionItem();

                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_create_and_list";
                    actionItem.Menu     = "create-bottom";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a class=""btn btn-primary"" ng-click='ngCtrl.create(""default"")' ng-if=""ngCtrl.createViewRegion != null"">Create</a>";
                    createViewInput.ActionItems.Add(actionItem);
                }
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_create_and_details";
                    actionItem.Menu     = "create-bottom";
                    actionItem.Weight   = 2;
                    actionItem.Template = "" +
                                          @"<a class=""btn btn-default btn-outline"" ng-click='ngCtrl.create(""details"")' ng-if=""ngCtrl.createViewRegion != null"">Create & Details</a>";
                    createViewInput.ActionItems.Add(actionItem);
                }
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_create_cancel";
                    actionItem.Menu     = "create-bottom";
                    actionItem.Weight   = 3;
                    actionItem.Template = "" +
                                          @"<a class=""btn btn-default btn-outline"" ng-click=""ngCtrl.cancel()"">Cancel</a>";
                    createViewInput.ActionItems.Add(actionItem);
                }
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_back_button";
                    actionItem.Menu     = "sidebar-top";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a class=""back clearfix"" href=""javascript:void(0)"" ng-click=""sidebarData.goBack()""><i class=""fa fa-fw fa-arrow-left""></i> <span class=""text"">Back</span></a>";
                    createViewInput.ActionItems.Add(actionItem);
                }
                #endregion
                {
                    var response = entMan.CreateRecordView(CUSTOMER_ENTITY_ID, createViewInput);
                    if (!response.Success)
                    {
                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated view: admin_create" + " Message:" + response.Message);
                    }
                }
            }
            #endregion

            #region << List name: admin >>
            {
                var createListEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                var createListInput  = new InputRecordList();
                var listItem         = new InputRecordListFieldItem();
                var listSort         = new InputRecordListSort();
                var listQuery        = new InputRecordListQuery();

                #region << details >>
                createListInput.Id                  = new Guid("ff15f200-8e68-4683-8576-4c8244405ca9");
                createListInput.Type                = "hidden";
                createListInput.Name                = "admin";
                createListInput.Label               = "Customers";
                createListInput.Weight              = 11;
                createListInput.Default             = false;
                createListInput.System              = true;
                createListInput.CssClass            = null;
                createListInput.IconName            = "building-o";
                createListInput.VisibleColumnsCount = 7;
                createListInput.ColumnWidthsCSV     = null;
                createListInput.PageSize            = 10;
                createListInput.DynamicHtmlTemplate = null;
                createListInput.DataSourceUrl       = null;
                createListInput.ServiceCode         = null;
                #endregion

                #region << action items >>
                createListInput.ActionItems = new List <ActionItem>();
                var actionItem = new ActionItem();
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_record_details";
                    actionItem.Menu     = "record-row";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a class=""btn btn-default btn-outline"" ng-href=""{{::ngCtrl.getRecordDetailsUrl(record, ngCtrl)}}"">
							<i class=""fa fa-fw fa-eye""></i>
							</a>"                            ;
                    createListInput.ActionItems.Add(actionItem);
                }
                {
                    actionItem          = new ActionItem();
                    actionItem.Name     = "wv_create_record";
                    actionItem.Menu     = "page-title";
                    actionItem.Weight   = 1;
                    actionItem.Template = "" +
                                          @"<a class=""btn btn-default btn-outline hidden-xs"" ng-show=""::ngCtrl.userHasRecordPermissions('canCreate')"" 
    ng-href=""{{::ngCtrl.getRecordCreateUrl(ngCtrl)}}"">Add New</a>";
                    createListInput.ActionItems.Add(actionItem);
                }
                #endregion

                #region << Columns >>
                createListInput.Columns = new List <InputRecordListItemBase>();
                #region << name >>
                {
                    var fieldName = "name";
                    listItem            = new InputRecordListFieldItem();
                    listItem.EntityId   = CUSTOMER_ENTITY_ID;
                    listItem.EntityName = CUSTOMER_ENTITY_NAME;
                    listItem.FieldId    = createListEntity.Fields.Single(x => x.Name == fieldName).Id;
                    listItem.FieldName  = fieldName;
                    listItem.Type       = "field";
                    createListInput.Columns.Add(listItem);
                }
                #endregion

                #endregion

                #region << relation options >>
                createListInput.RelationOptions = new List <EntityRelationOptionsItem>();
                #endregion

                #region << query >>
                listQuery = new InputRecordListQuery();
                #endregion

                #region << Sort >>
                listSort = new InputRecordListSort();
                #endregion
                {
                    var response = entMan.CreateRecordList(CUSTOMER_ENTITY_ID, createListInput);
                    if (!response.Success)
                    {
                        throw new Exception("System error 10060. Entity: " + CUSTOMER_ENTITY_NAME + " Updated List: admin" + " Message:" + response.Message);
                    }
                }
            }
            #endregion

            #region << area add subscription: CRM Admin -> Customer >>
            {
                var updatedAreaId    = CRM_ADMIN_AREA_ID;
                var updateAreaResult = Helpers.UpsertEntityAsAreaSubscription(entMan, recMan, updatedAreaId, CUSTOMER_ENTITY_NAME, "admin_details", "admin_create", "admin");
                if (!updateAreaResult.Success)
                {
                    throw new Exception("System error 10060. Area update with id : " + updatedAreaId + " Message:" + updateAreaResult.Message);
                }
            }
            #endregion

            #region << customer lookup list >>
            {
                var createListEntity = entMan.ReadEntity(CUSTOMER_ENTITY_ID).Object;
                var createListInput  = new InputRecordList();
                var listItem         = new InputRecordListFieldItem();
                var listSort         = new InputRecordListSort();
                var listQuery        = new InputRecordListQuery();

                //General list details
                createListInput.Id                  = new Guid("2287d4dc-0e9e-4c00-a1d4-cc2b8bf0f315");
                createListInput.Name                = "lookup";
                createListInput.Label               = "Lookup";
                createListInput.Type                = "lookup";
                createListInput.Default             = true;
                createListInput.VisibleColumnsCount = 5;
                createListInput.System              = true;
                createListInput.Weight              = 10;
                createListInput.CssClass            = null;
                createListInput.IconName            = "list";
                createListInput.Columns             = new List <InputRecordListItemBase>();
                //Fields
                #region << name >>
                listItem            = new InputRecordListFieldItem();
                listItem.EntityId   = CUSTOMER_ENTITY_ID;
                listItem.EntityName = "customer";
                listItem.FieldId    = createListEntity.Fields.Single(x => x.Name == "name").Id;
                listItem.FieldName  = "name";
                listItem.Type       = "field";
                createListInput.Columns.Add(listItem);
                #endregion

                //Query
                #region << query descr >>
                listQuery = new InputRecordListQuery();
                #endregion


                //Sort
                #region << Sort >>
                createListInput.Sorts = new List <InputRecordListSort>();
                listSort           = new InputRecordListSort();
                listSort.FieldName = "name";
                listSort.SortType  = "ascending";
                createListInput.Sorts.Add(listSort);
                #endregion

                var newActionItemList = new List <ActionItem>();
                {
                    var actionItem = new ActionItem();
                    actionItem.Name     = "wv_create_record";
                    actionItem.Menu     = "page-title";
                    actionItem.Template = "<a class=\"btn btn-default btn-outline hidden-xs\" ng-show=\"::ngCtrl.userHasRecordPermissions('canCreate')\" \n    ng-href=\"{{::ngCtrl.getRecordCreateUrl()}}\">Add New</a>";
                    actionItem.Weight   = 1;
                    newActionItemList.Add(actionItem);
                }
                {
                    var actionItem = new ActionItem();
                    actionItem.Name     = "wv_record_details";
                    actionItem.Menu     = "record-row";
                    actionItem.Template = "<a class=\"btn btn-default btn-outline\" ng-href=\"{{::ngCtrl.getRecordDetailsUrl(record)}}\">\n    <i class=\"fa fa-fw fa-eye\"></i>\n</a>";
                    actionItem.Weight   = 1;
                    newActionItemList.Add(actionItem);
                }

                createListInput.ActionItems = newActionItemList;

                {
                    var responseObject = entMan.CreateRecordList(CUSTOMER_ENTITY_ID, createListInput);
                    if (!responseObject.Success)
                    {
                        throw new Exception("System error 10060. Entity: " + "user" + " Updated List: list_name" + " Message:" + responseObject.Message);
                    }
                }
            }
            #endregion

            if (createSampleRecords)
            {
                #region << Create Sample Customer >>
                {
                    var sampleRecord = new EntityRecord();
                    sampleRecord["id"]   = new Guid("fb06213f-7632-495b-bb8d-ed5ff07dc515");
                    sampleRecord["name"] = "Buckley Miller & Wright";
                    var createSampleRecordResult = recMan.CreateRecord(CUSTOMER_ENTITY_NAME, sampleRecord);
                    if (!createSampleRecordResult.Success)
                    {
                        throw new Exception("System error 10060. Create sample record. Message:" + createSampleRecordResult.Message);
                    }
                }
                #endregion

                #region << Create Sample Customer User >>
                {
                    var sampleRecord = new EntityRecord();
                    sampleRecord["id"]         = new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2");
                    sampleRecord["first_name"] = "Sample";
                    sampleRecord["last_name"]  = "Customer";
                    sampleRecord["username"]   = "******";
                    sampleRecord["email"]      = "*****@*****.**";
                    sampleRecord["password"]   = "******";
                    sampleRecord["enabled"]    = true;
                    sampleRecord["verified"]   = true;
                    sampleRecord["image"]      = "/plugins/webvella-core/assets/avatar-deep-purple.png";
                    var createSampleRecordResult = recMan.CreateRecord(SystemIds.UserEntityId, sampleRecord);
                    if (!createSampleRecordResult.Success)
                    {
                        throw new Exception("System error 10060. Create sample customer record. Message:" + createSampleRecordResult.Message);
                    }
                }
                #endregion

                #region << Create Sample User Role>>
                {
                    var sampleRecord = new EntityRecord();
                    sampleRecord["id"]          = new Guid("27745245-09bd-4adb-8831-3870bcae46fe");
                    sampleRecord["name"]        = "crm_customer";
                    sampleRecord["description"] = "Sample Customer role for CRM application";
                    var createSampleRecordResult = recMan.CreateRecord(SystemIds.RoleEntityId, sampleRecord);
                    if (!createSampleRecordResult.Success)
                    {
                        throw new Exception("System error 10060. Create sample role record. Message:" + createSampleRecordResult.Message);
                    }
                }
                #endregion

                #region << Create relation between sample customer and role >>
                {
                    var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(new Guid("0c4b119e-1d7b-4b40-8d2c-9e447cc656ab"), new Guid("27745245-09bd-4adb-8831-3870bcae46fe"), new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2"));
                    if (!createRelationNtoNResponse.Success)
                    {
                        throw new Exception("Could not create item image relation" + createRelationNtoNResponse.Message);
                    }
                }
                #endregion

                #region << Create relation between sample customer and regular role >>
                {
                    var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(new Guid("0c4b119e-1d7b-4b40-8d2c-9e447cc656ab"), new Guid("f16ec6db-626d-4c27-8de0-3e7ce542c55f"), new Guid("307fe376-a1c6-495e-a7c0-2a78797565f2"));
                    if (!createRelationNtoNResponse.Success)
                    {
                        throw new Exception("Could not create item image relation" + createRelationNtoNResponse.Message);
                    }
                }
                #endregion
            }
        }
Example #4
0
        public IActionResult OnPost()
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    throw new Exception("Antiforgery check failed.");
                }
                Init();
                if (ErpRequestContext.Page == null)
                {
                    return(NotFound());
                }

                //Standard Page functionality
                var PostObject = (EntityRecord) new PageService().ConvertFormPostToEntityRecord(PageContext.HttpContext, entity: ErpRequestContext.Entity);

                if (!PostObject.Properties.ContainsKey("id"))
                {
                    PostObject["id"] = Guid.NewGuid();
                }

                DataModel.SetRecord(PostObject);

                var globalHookInstances = HookManager.GetHookedInstances <IPageHook>(HookKey);
                foreach (IPageHook inst in globalHookInstances)
                {
                    var result = inst.OnPost(this);
                    if (result != null)
                    {
                        return(result);
                    }
                }

                //record submission validates required fields and auto number - these fields are validated in recordmanager
                //ValidateRecordSubmission(PostObject, ErpRequestContext.Entity, Validation);
                if (Validation.Errors.Count == 0)
                {
                    using (var connection = DbContext.Current.CreateConnection())
                    {
                        try
                        {
                            connection.BeginTransaction();


                            var hookInstances = HookManager.GetHookedInstances <IRecordRelatedRecordCreatePageHook>(HookKey);

                            //pre create hooks
                            foreach (IRecordRelatedRecordCreatePageHook inst in hookInstances)
                            {
                                List <ValidationError> errors = new List <ValidationError>();
                                var result = inst.OnPreCreateRecord(PostObject, ErpRequestContext.Entity, this, errors);
                                if (result != null)
                                {
                                    connection.RollbackTransaction();
                                    return(result);
                                }
                                if (errors.Any())
                                {
                                    connection.RollbackTransaction();
                                    Validation.Errors.AddRange(errors);
                                    BeforeRender();
                                    return(Page());
                                }
                            }
                            var recMan = new RecordManager();

                            var createResponse = recMan.CreateRecord(ErpRequestContext.Entity.MapTo <Entity>(), PostObject);
                            if (!createResponse.Success)
                            {
                                connection.RollbackTransaction();

                                Validation.Message = createResponse.Message;
                                foreach (var error in createResponse.Errors)
                                {
                                    Validation.Errors.Add(new ValidationError(error.Key, error.Message));
                                }

                                BeforeRender();
                                return(Page());
                            }

                            var relation = new EntityRelationManager().Read().Object.Single(x => x.Id == RelationId.Value);
                            if (relation.OriginEntityId == this.ErpRequestContext.ParentEntity.Id)
                            {
                                recMan.CreateRelationManyToManyRecord(relation.Id, ParentRecordId.Value, (Guid)createResponse.Object.Data[0]["id"]);
                            }
                            else
                            {
                                recMan.CreateRelationManyToManyRecord(relation.Id, (Guid)createResponse.Object.Data[0]["id"], ParentRecordId.Value);
                            }

                            connection.CommitTransaction();

                            //post create hook
                            foreach (IRecordRelatedRecordCreatePageHook inst in hookInstances)
                            {
                                var result = inst.OnPostCreateRecord(PostObject, ErpRequestContext.Entity, this);
                                if (result != null)
                                {
                                    return(result);
                                }
                            }

                            if (string.IsNullOrWhiteSpace(ReturnUrl))
                            {
                                return(Redirect($"/{ErpRequestContext.App.Name}/{ErpRequestContext.SitemapArea.Name}/{ErpRequestContext.SitemapNode.Name}/r/{ErpRequestContext.ParentRecordId}/rl/{ErpRequestContext.RelationId}/r/{createResponse.Object.Data[0]["id"]}"));
                            }
                            else
                            {
                                return(Redirect(ReturnUrl));
                            }
                        }
                        catch
                        {
                            connection.RollbackTransaction();
                        }
                    }
                }
                BeforeRender();
                return(Page());
            }
            catch (ValidationException valEx)
            {
                Validation.Message = valEx.Message;
                Validation.Errors.AddRange(valEx.Errors);
                BeforeRender();
                return(Page());
            }
            catch (Exception ex)
            {
                new Log().Create(LogType.Error, "RecordRelatedRecordCreatePageModel Error on POST", ex);
                Validation.Message = ex.Message;
                BeforeRender();
                return(Page());
            }
        }