Exemplo n.º 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>";
            }
            Utils.CreateActivity(recMan, "created", "created a <i class='fa fa-fw fa-tasks go-purple'></i> task #" + createdRecord["number"] + 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);
            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);
                        }
                    }
                }
                #endregion
            }
            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
        }
Exemplo n.º 2
0
        public void CommentCreateRecordAction(dynamic data)
        {
            var record        = (EntityRecord)data.record;
            var createResult  = (QueryResponse)data.result;
            var controller    = (Controller)data.controller;
            var createdRecord = createResult.Object.Data[0];
            var task          = new EntityRecord();
            var bug           = new EntityRecord();
            var recepients    = new List <string>();

            #region << Init >>
            if (createdRecord["task_id"] != null)
            {
                var filterObj = EntityQuery.QueryEQ("id", (Guid)createdRecord["task_id"]);
                var query     = new EntityQuery("wv_task", "id,code,subject,description,project_id,$$user_n_n_task_watchers.id,$$user_n_n_task_watchers.email,$$project_1_n_task.code", filterObj, null, null, null);
                var result    = recMan.Find(query);
                if (result.Success)
                {
                    task = result.Object.Data[0];
                    Utils.CreateActivity(recMan, "commented", "created a <i class='fa fa-fw fa-comment-o go-blue'></i> comment for task [" + task["code"] + "] <a href='/#/areas/projects/wv_task/view-general/sb/general/" + task["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)task["subject"]) + "</a>", null, (Guid)task["project_id"], (Guid)task["id"], null);
                }
                else
                {
                    throw new Exception(result.Message);
                }
            }
            else if (createdRecord["bug_id"] != null)
            {
                var filterObj = EntityQuery.QueryEQ("id", (Guid)createdRecord["bug_id"]);
                var query     = new EntityQuery("wv_bug", "id,code,subject,description,project_id,$$user_n_n_bug_watchers.id,$$user_n_n_bug_watchers.email,$$project_1_n_bug.code", filterObj, null, null, null);
                var result    = recMan.Find(query);
                if (result.Success)
                {
                    bug = result.Object.Data[0];
                    Utils.CreateActivity(recMan, "commented", "created a <i class='fa fa-fw fa-comment-o go-blue'></i> comment for bug [" + bug["code"] + "] <a href='/#/areas/projects/wv_bug/view-general/sb/general/" + bug["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)bug["subject"]) + "</a>", null, (Guid)bug["project_id"], null, (Guid)bug["id"]);
                }
                else
                {
                    throw new Exception(result.Message);
                }
            }
            #endregion
            using (SecurityContext.OpenSystemScope())
            {
                #region << Add the comment creator to the watch list if he is not there, Generate recipients list >>
                {
                    if (createdRecord["task_id"] != null)
                    {
                        var isCommentatorInWatchList = false;
                        #region << Check if is in watch list already >>
                        foreach (var watcher in (List <EntityRecord>)task["$user_n_n_task_watchers"])
                        {
                            if ((Guid)watcher["id"] == (Guid)createdRecord["created_by"])
                            {
                                isCommentatorInWatchList = true;
                            }
                            else
                            {
                                recepients.Add((string)watcher["email"]);
                            }
                        }
                        #endregion
                        if (!isCommentatorInWatchList)
                        {
                            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);
                            }
                        }
                    }
                    else if (createdRecord["bug_id"] != null)
                    {
                        var isCommentatorInWatchList = false;
                        #region << Check if is in watch list already >>
                        foreach (var watcher in (List <EntityRecord>)bug["$user_n_n_bug_watchers"])
                        {
                            if ((Guid)watcher["id"] == (Guid)createdRecord["created_by"])
                            {
                                isCommentatorInWatchList = true;
                            }
                            else
                            {
                                recepients.Add((string)watcher["email"]);
                            }
                        }
                        #endregion
                        if (!isCommentatorInWatchList)
                        {
                            var targetRelation             = relMan.Read("user_n_n_bug_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
            }
            var commentatorUsername = "";
            #region << Get username of the commentator>>
            {
                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");
                }
                commentatorUsername = (string)result.Object.Data[0]["username"];
            }
            #endregion

            #region << Generate notifications to watch list>>
            var emailService = new EmailService();
            if (recepients.Count > 0)
            {
                try
                {
                    if (createdRecord["task_id"] != null)
                    {
                        var emailSubjectParameters = new Dictionary <string, string>();
                        emailSubjectParameters["code"]    = (string)task["code"];
                        emailSubjectParameters["subject"] = (string)task["subject"];

                        var subject = Regex.Replace(EmailTemplates.NewCommentNotificationSubject, @"\{(.+?)\}", 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"]              = commentatorUsername;
                        emailContentParameters["taskOrBugUrl"]         = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_task/view-general/sb/general/" + createdRecord["task_id"];
                        emailContentParameters["commentContent"]       = (string)createdRecord["content"];
                        emailContentParameters["taskOrBugDescription"] = (string)task["description"];

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

                        emailService.SendEmail(recepients.ToArray(), subject, content);
                    }
                    else if (createdRecord["bug_id"] != null)
                    {
                        var emailSubjectParameters = new Dictionary <string, string>();
                        emailSubjectParameters["code"]    = (string)bug["code"];
                        emailSubjectParameters["subject"] = (string)bug["subject"];

                        var subject = Regex.Replace(EmailTemplates.NewCommentNotificationSubject, @"\{(.+?)\}", 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"]                 = "bug";
                        emailContentParameters["creator"]              = commentatorUsername;
                        emailContentParameters["taskOrBugUrl"]         = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_bug/view-general/sb/general/" + createdRecord["bug_id"];
                        emailContentParameters["commentContent"]       = (string)createdRecord["content"];
                        emailContentParameters["taskOrBugDescription"] = (string)bug["description"];

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

                        emailService.SendEmail(recepients.ToArray(), subject, content);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            #endregion
        }
Exemplo n.º 3
0
        public void CommentCreateRecordAction(dynamic data)
        {
            var record = (EntityRecord)data.record;
            var createResult = (QueryResponse)data.result;
            var controller = (Controller)data.controller;
            var createdRecord = createResult.Object.Data[0];
            var task = new EntityRecord();
            var bug = new EntityRecord();
            var recepients = new List<string>();

            #region << Init >>
            if (createdRecord["task_id"] != null)
            {
                var filterObj = EntityQuery.QueryEQ("id", (Guid)createdRecord["task_id"]);
                var query = new EntityQuery("wv_task", "id,code,subject,description,project_id,$$user_n_n_task_watchers.id,$$user_n_n_task_watchers.email,$$project_1_n_task.code", filterObj, null, null, null);
                var result = recMan.Find(query);
                if (result.Success)
                {
                    task = result.Object.Data[0];
                    Utils.CreateActivity(recMan, "commented", "created a <i class='fa fa-fw fa-comment-o go-blue'></i> comment for task [" + task["code"] + "] <a href='/#/areas/projects/wv_task/view-general/sb/general/" + task["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)task["subject"]) + "</a>", null, (Guid)task["project_id"], (Guid)task["id"], null);
                }
                else
                {
                    throw new Exception(result.Message);
                }
            }
            else if (createdRecord["bug_id"] != null)
            {
                var filterObj = EntityQuery.QueryEQ("id", (Guid)createdRecord["bug_id"]);
                var query = new EntityQuery("wv_bug", "id,code,subject,description,project_id,$$user_n_n_bug_watchers.id,$$user_n_n_bug_watchers.email,$$project_1_n_bug.code", filterObj, null, null, null);
                var result = recMan.Find(query);
                if (result.Success)
                {
                    bug = result.Object.Data[0];
                    Utils.CreateActivity(recMan, "commented", "created a <i class='fa fa-fw fa-comment-o go-blue'></i> comment for bug [" + bug["code"] + "] <a href='/#/areas/projects/wv_bug/view-general/sb/general/" + bug["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)bug["subject"]) + "</a>", null, (Guid)bug["project_id"], null, (Guid)bug["id"]);
                }
                else
                {
                    throw new Exception(result.Message);
                }
            }
            #endregion
            using (SecurityContext.OpenSystemScope())
            {
                #region << Add the comment creator to the watch list if he is not there, Generate recipients list >>
                {
                    if (createdRecord.Properties.ContainsKey("task_id") &&  createdRecord["task_id"] != null)
                    {
                        var isCommentatorInWatchList = false;
                        #region << Check if is in watch list already >>
                        foreach (var watcher in (List<EntityRecord>)task["$user_n_n_task_watchers"])
                        {
                            if ((Guid)watcher["id"] == (Guid)createdRecord["created_by"])
                            {
                                isCommentatorInWatchList = true;
                            }
                            else
                            {
                                recepients.Add((string)watcher["email"]);
                            }
                        }
                        #endregion
                        if (!isCommentatorInWatchList)
                        {
                            var targetRelation = relMan.Read("user_n_n_task_watchers").Object;
                            var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(targetRelation.Id, (Guid)record["created_by"], new Guid(record["task_id"].ToString()));
                            if (!createRelationNtoNResponse.Success)
                            {
                                throw new Exception("Could not create watch relation" + createRelationNtoNResponse.Message);
                            }
                        }
                    }
                    else if (createdRecord.Properties.ContainsKey("bug_id") &&  createdRecord["bug_id"] != null)
                    {
                        var isCommentatorInWatchList = false;
                        #region << Check if is in watch list already >>
                        foreach (var watcher in (List<EntityRecord>)bug["$user_n_n_bug_watchers"])
                        {
                            if ((Guid)watcher["id"] == (Guid)createdRecord["created_by"])
                            {
                                isCommentatorInWatchList = true;
                            }
                            else
                            {
                                recepients.Add((string)watcher["email"]);
                            }
                        }
                        #endregion
                        if (!isCommentatorInWatchList)
                        {
                            var targetRelation = relMan.Read("user_n_n_bug_watchers").Object;
                            var createRelationNtoNResponse = recMan.CreateRelationManyToManyRecord(targetRelation.Id, (Guid)record["created_by"], new Guid(record["bug_id"].ToString()));
                            if (!createRelationNtoNResponse.Success)
                            {
                                throw new Exception("Could not create watch relation" + createRelationNtoNResponse.Message);
                            }
                        }
                    }
                }
                #endregion
            }
            var commentatorUsername = "";
            #region << Get username of the commentator>>
            {
                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");
                }
                commentatorUsername = (string)result.Object.Data[0]["username"];
            }
            #endregion

            #region << Generate notifications to watch list>>
            var emailService = new EmailService();
            if (recepients.Count > 0)
            {
                try
                {
                    if (createdRecord["task_id"] != null)
                    {
                        var emailSubjectParameters = new Dictionary<string, string>();
                        emailSubjectParameters["code"] = (string)task["code"];
                        emailSubjectParameters["subject"] = (string)task["subject"];

                        var subject = Regex.Replace(EmailTemplates.NewCommentNotificationSubject, @"\{(.+?)\}", 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"] = commentatorUsername;
                        emailContentParameters["taskOrBugUrl"] = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_task/view-general/sb/general/" + createdRecord["task_id"];
                        emailContentParameters["commentContent"] = (string)createdRecord["content"];
                        emailContentParameters["taskOrBugDescription"] = (string)task["description"];

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

                        emailService.SendEmail(recepients.ToArray(), subject, content);
                    }
                    else if (createdRecord["bug_id"] != null)
                    {
                        var emailSubjectParameters = new Dictionary<string, string>();
                        emailSubjectParameters["code"] = (string)bug["code"];
                        emailSubjectParameters["subject"] = (string)bug["subject"];

                        var subject = Regex.Replace(EmailTemplates.NewCommentNotificationSubject, @"\{(.+?)\}", 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"] = "bug";
                        emailContentParameters["creator"] = commentatorUsername;
                        emailContentParameters["taskOrBugUrl"] = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_bug/view-general/sb/general/" + createdRecord["bug_id"];
                        emailContentParameters["commentContent"] = (string)createdRecord["content"];
                        emailContentParameters["taskOrBugDescription"] = (string)bug["description"];

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

                        emailService.SendEmail(recepients.ToArray(), subject, content);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            #endregion
        }
Exemplo n.º 4
0
        public void BugCreateRecordAction(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>";
            }
            Utils.CreateActivity(recMan, "created", "created a <i class='fa fa-fw fa-bug go-red'></i> bug #" + createdRecord["number"] + priorityString + " <a href='/#/areas/projects/wv_bug/view-general/sb/general/" + createdRecord["id"] + "'>" + System.Net.WebUtility.HtmlEncode((string)createdRecord["subject"]) + "</a>", null, (Guid)createdRecord["project_id"], null, (Guid)createdRecord["id"]);

            using (SecurityContext.OpenSystemScope())
            {
                #region << Add the task owner and creator in the watch list>>

                #region << Add creator in watch list >>
                {
                    var targetRelation             = relMan.Read("user_n_n_bug_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 creator in watch list >>
                {
                    if ((Guid)record["created_by"] != (Guid)record["owner_id"])
                    {
                        var targetRelation             = relMan.Read("user_n_n_bug_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

                #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"] + "-B" + createdRecord["number"];
                        var patchResult = recMan.UpdateRecord("wv_bug", patchObject);
                        if (!patchResult.Success)
                        {
                            throw new Exception(patchResult.Message);
                        }
                    }
                }
                #endregion
            }
            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>>
            {
                if ((Guid)createdRecord["created_by"] != (Guid)createdRecord["owner_id"])
                {
                    //At this moment only if the project manager is different than the item creator should get an email
                    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.NewCommentNotificationSubject, @"\{(.+?)\}", 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"]                 = "bug";
                    emailContentParameters["creator"]              = creatorUsername;
                    emailContentParameters["taskOrBugUrl"]         = emailContentParameters["baseUrl"] + "/#/areas/projects/wv_bug/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
        }