public void addTicket([FromForm] Utilisateur utilisateur, [FromForm] string titre, [FromForm] string urlphoto, [FromForm] string description, [FromForm] List <Tag> tags) { DbContextOptionsBuilder <ContexteBDD> optionsBuilder = new DbContextOptionsBuilder <ContexteBDD>(); var one = ConfigurationManager.ConnectionStrings; var random = ConfigurationManager.ConnectionStrings["DefaultConnection"]; string docstring = random.ConnectionString; optionsBuilder.UseMySql(docstring); using (Models.ContexteBDD dbContext = new Models.ContexteBDD(optionsBuilder.Options)) { Ticket dbTicket = new Ticket(); dbTicket.auteur = utilisateur; dbTicket.titre = titre; dbTicket.description = description; dbTicket.date = DateTime.Now; dbTicket.urlPhoto = urlphoto; dbContext.Tickets.Add(dbTicket); foreach (Tag tag in tags) { TicketTag ticketTag = new TicketTag(); ticketTag.tag = tag; ticketTag.libelle = tag.libelle; ticketTag.ticket = dbTicket; //cassable ? A revoir //ticketTag.TicketId = dbTicket.Id; tag.TicketTags.Add(ticketTag); dbTicket.TicketTags.Add(ticketTag); } dbContext.SaveChanges(); } }
static void Simulate_Capture(ref Inventory_System_API x, int Cicles) { int LastCounter = x.GetLastCounter(); Random r = new Random(); int counter = 0; TicketTag z = new TicketTag(); string[] Contadores = { "AC", "AB", "AC", "JL", "GV", "GH" }; Console.WriteLine("Start Simulate Capture"); while (counter < Cicles) { int rTag = r.Next(LastCounter); z = x.LoadTag(rTag); try { if (!z.Verified) { int max = Convert.ToInt32(z.InventoryQuantity); z.CountQTY = r.Next(max + r.Next(5)); z.ReCountQTY = r.Next(max + r.Next(5)); z.Verified = true; z.CounterInitials = Contadores[r.Next(Contadores.Count())]; z.CountedDate = DateTime.Now; x.UpdateTag(z); counter++; Console.WriteLine("Ticket Tag Captured: " + rTag.ToString()); } } catch { } } Console.WriteLine("Finish Simulate Capture # of Captured Tags: " + Cicles.ToString()); }
public void SaveFreeTicketTag(int id, string freeTag) { if (string.IsNullOrEmpty(freeTag)) { return; } using (var workspace = WorkspaceFactory.Create()) { var tt = workspace.Single <TicketTagGroup>(x => x.Id == id); Debug.Assert(tt != null); var tag = tt.TicketTags.FirstOrDefault(x => x.Name.ToLower() == freeTag.ToLower()); if (tag != null) { return; } tag = new TicketTag { Name = freeTag }; tt.TicketTags.Add(tag); workspace.Add(tag); workspace.CommitChanges(); _cacheService.ResetTicketTagCache(); } }
private void OnTicketTagAdded(string obj) { var cachedTag = AppServices.MainDataContext.SelectedDepartment.TicketTagGroups.Single( x => x.Id == SelectedTicketTag.Id); Debug.Assert(cachedTag != null); var ctag = cachedTag.TicketTags.SingleOrDefault(x => x.Name.ToLower() == CustomTag.ToLower()); if (ctag == null && cachedTag.SaveFreeTags) { using (var workspace = WorkspaceFactory.Create()) { var tt = workspace.Single <TicketTagGroup>(x => x.Id == SelectedTicketTag.Id); Debug.Assert(tt != null); var tag = tt.TicketTags.SingleOrDefault(x => x.Name.ToLower() == CustomTag.ToLower()); if (tag == null) { tag = new TicketTag() { Name = CustomTag }; tt.TicketTags.Add(tag); workspace.Add(tag); workspace.CommitChanges(); } } } DataContext.SelectedTicket.UpdateTag(SelectedTicketTag, new TicketTag { Name = CustomTag }); CustomTag = string.Empty; InvokeTagUpdated(SelectedTicketTag); }
private void ProcessTicketTags(EntityInfo entityInfo, Ticket ticket) { object oldTagList; entityInfo.OriginalValuesMap.TryGetValue("TagList", out oldTagList); if (oldTagList == null || (string)oldTagList != ticket.TagList) { //if not new, kill all old tags, we'll just make new ones if (entityInfo.EntityState != EntityState.Added) { this.Context.TicketTags.RemoveRange(this.Context.TicketTags.Where(t => t.TicketId == ticket.TicketId)); } var tagsArr = TicketTag.GetTagsFromString(ticket.TagList); if (ticket.TicketTags == null && tagsArr.Length > 0) { ticket.TicketTags = new List <TicketTag>(); } foreach (var tag in tagsArr) { var tTag = new TicketTag { TagName = tag }; ticket.TicketTags.Add(tTag); } } }
public void UpdateTag(TicketTagGroup tagGroup, TicketTag ticketTag) { Model.SetTagValue(tagGroup.Name, ticketTag.Name); if (tagGroup.Numerator != null) { Model.TicketNumber = ""; AppServices.MainDataContext.UpdateTicketNumber(Model, tagGroup.Numerator); } if (ticketTag.AccountId > 0) { AppServices.MainDataContext.AssignCustomerToTicket(Model, Dao.SingleWithCache <Customer>(x => x.Id == ticketTag.AccountId)); } ClearSelectedItems(); var tagData = new TicketTagData { Action = tagGroup.Action, TagName = tagGroup.Name, TagValue = ticketTag.Name, NumericValue = tagGroup.NumericTags || tagGroup.PriceTags ? Convert.ToDecimal(ticketTag.Name) : 0 }; RuleExecutor.NotifyEvent(RuleEventNames.TicketTagSelected, new { Ticket = Model, tagData.TagName, tagData.TagValue, tagData.NumericValue, TicketTag = Model.Tag }); tagData.PublishEvent(EventTopicNames.TagSelectedForSelectedTicket); }
public void UpdateTag(Ticket ticket, TicketTagGroup tagGroup, TicketTag ticketTag) { ticket.SetTagValue(tagGroup.Name, ticketTag.Name); if (tagGroup.FreeTagging && tagGroup.SaveFreeTags) { SaveFreeTicketTag(tagGroup.Id, ticketTag.Name); } var tagData = new TicketTagData { Ticket = ticket, TicketTagGroup = tagGroup, TagName = tagGroup.Name, TagValue = ticketTag.Name }; _applicationState.NotifyEvent(RuleEventNames.TicketTagSelected, new { Ticket = ticket, tagData.TagName, tagData.TagValue, NumericValue = tagGroup.IsNumeric ? Convert.ToDecimal(ticketTag.Name) : 0, TicketTag = ticket.GetTagData() }); }
private void OnAddTicketTagExecuted(string obj) { var ti = new TicketTag { Name = Resources.NewTag }; Model.TicketTags.Add(ti); TicketTags.Add(new TicketTagViewModel(ti)); }
private void OnUpdateFreeTag(string obj) { var tag = new TicketTag { Name = FreeTag }; FreeTag = string.Empty; UpdateTicketTag(SelectedTicket, SelectedTicketTagData, tag); }
private void OnAddTicketTagExecuted(string obj) { var ti = new TicketTag { Name = Resources.NewTag }; Model.TicketTags.Add(ti); TicketTags.Add(new TicketTagViewModel(ti)); ti.SortOrder = Model.TicketTags.Any() ? Model.TicketTags.Max(x => x.SortOrder) + 1 : 0; }
/// <summary> /// Creates the new ticket. /// </summary> /// <param name="newTicket">The new ticket.</param> /// <returns>System.Nullable<System.Int32>.</returns> /// <exception cref="RuleException"></exception> public int?CreateNewTicket(Ticket newTicket) { var rnv = new NameValueCollection(); if (!CheckSecurityForTicketActivity(null, TicketActivity.Create))// don't need to check CreateOnBehalfOf separately { rnv.Add("noAuth", "User is not authorized to create a ticket"); } var now = DateTime.Now; newTicket.CreatedBy = Security.CurrentUserName; newTicket.CreatedDate = now; newTicket.CurrentStatus = "Active"; newTicket.CurrentStatusDate = now; newTicket.CurrentStatusSetBy = Security.CurrentUserName; newTicket.LastUpdateBy = Security.CurrentUserName; newTicket.LastUpdateDate = now; string[] tagsArr = TagUtility.GetTagsFromString(newTicket.TagList); foreach (string tag in tagsArr) { TicketTag tTag = new TicketTag(); tTag.TagName = tag; newTicket.TicketTags.Add(tTag); } rnv.Add(ValidateTicketDetailFields(newTicket));// enforce field rules if (rnv.Count > 0) { throw new RuleException(rnv); } AddAttachmentsToNewTicket(newTicket); //comment TicketComment openingComment = (!newTicket.Owner.Equals(Security.CurrentUserName, StringComparison.InvariantCultureIgnoreCase)) ? GetActivityComment(TicketActivity.CreateOnBehalfOf, TicketCommentFlag.CommentNotApplicable, null, newTicket.AssignedTo, newTicket.GetNotificationSubscribers(), Security.GetUserDisplayName(newTicket.Owner)) : GetActivityComment(TicketActivity.Create, TicketCommentFlag.CommentNotApplicable, null, newTicket.AssignedTo, newTicket.GetNotificationSubscribers()); newTicket.TicketComments.Add(openingComment); int?newTicketId = null; if (Repository.CreateTicket(newTicket, true)) { newTicketId = newTicket.TicketId; } return(newTicketId); }
private void tb_TagNo_KeyDown(object sender, KeyEventArgs e) { //39-> 37<- switch (e.KeyValue) { case 13: { if (tb_TagNo.Text.Trim() != "") { //_tagNo = Convert.ToInt32(tb_TagNo.Text); try { _tagNo = Convert.ToInt32(tb_TagNo.Text); } catch { MessageBox.Show("Invalid Tag No entered", "ERROR"); _tagNo = 0; tb_TagNo.Text = "0"; } _tag = x.LoadTag(_tagNo); if (_tag != null) { LoadTagInfo(_tag); tb_CounterInitials.Focus(); } else { MessageBox.Show("The Tag was not found."); } } break; } case 39: { NextTag(); break; } case 37: { PrevTag(); break; } } }
private static TicketTag CreateTag(TicketTag ticketTag) { var content = JsonConvert.SerializeObject(ticketTag); var request = CreateRequest("ticketTag", HttpMethod.Post); var dataArray = Encoding.UTF8.GetBytes(content); request.ContentLength = dataArray.Length; var requestStream = request.GetRequestStream(); requestStream.Write(dataArray, 0, dataArray.Length); requestStream.Close(); var result = GetObject <TicketTag>(request); Tags.Add(result.tag, result); return(result); }
private void OnTicketTagSelected(TicketTag obj) { SelectedTicket.UpdateTag(SelectedTicket.LastSelectedTicketTag, obj); }
public Ticket GetNewTicket() { string details = Page.Request.Form["details"]; Ticket ticket = null; if (Page.IsValid) { if (!string.IsNullOrEmpty(details)) { DateTime now = DateTime.Now; string user = Page.User.Identity.GetFormattedUserName(); ticket = new Ticket(); ticket.Type = TypeDropDownList.SelectedValue; ticket.Category = CategoryDropDownList.SelectedValue; ticket.Title = TitleTextBox.Text; ticket.IsHtml = false; ticket.Details = details; if (!string.IsNullOrEmpty(PriorityDropDownList.SelectedValue)) { ticket.Priority = PriorityDropDownList.SelectedValue; } string[] tags = TagManager.GetTagsFromString(TagPickerControl.TagList); ticket.TagList = string.Join(",", tags); ticket.AffectsCustomer = AffectsCustomerCheckBox.Checked; ticket.PublishedToKb = false; ticket.CreatedBy = user; ticket.CreatedDate = now; if (CreateOnBehalfTextBox.Checked) { ticket.Owner = OwnerDropDownList.SelectedValue; } else { ticket.Owner = user; } ticket.CurrentStatus = "Active"; ticket.CurrentStatusSetBy = user; ticket.CurrentStatusDate = now; TicketComment openingComment = new TicketComment(); if (CreateOnBehalfTextBox.Checked) { openingComment.CommentEvent = string.Format("created the ticket on behalf of {0}", SecurityManager.GetUserDisplayName(ticket.Owner)); } else { openingComment.CommentEvent = string.Format("created the ticket"); } openingComment.CommentedBy = user; openingComment.CommentedDate = now; HttpFileCollection uploadedFiles = Request.Files; for (int i = 0; i < uploadedFiles.Count; i++) { HttpPostedFile userPostedFile = uploadedFiles[i]; if (userPostedFile.ContentLength > 0) { TicketAttachment attachment = new TicketAttachment(); string fName = Path.GetFileName(userPostedFile.FileName);//FileUploader.FileName; attachment.FileName = fName; var description = Page.Request.Form[fName]; if (!string.IsNullOrEmpty(description)) { if (description.Length > 500) { attachment.FileDescription = description.Substring(0, 500); } else { attachment.FileDescription = description; } } attachment.FileSize = userPostedFile.ContentLength;//FileUploader.PostedFile.ContentLength; string mtype = userPostedFile.ContentType; attachment.FileType = (string.IsNullOrEmpty(mtype) ? "application/octet-stream" : mtype); byte[] fileContent = new byte[userPostedFile.ContentLength]; userPostedFile.InputStream.Read(fileContent, 0, userPostedFile.ContentLength);//FileUploader.FileBytes; attachment.FileContents = fileContent; ticket.TicketAttachments.Add(attachment); } } ticket.TicketComments.Add(openingComment); foreach (string tag in tags) { TicketTag tTag = new TicketTag(); tTag.TagName = tag; ticket.TicketTags.Add(tTag); } } else { lblDetailsRequired.Visible = true; } } return(ticket); }
public bool Save(TicketComment eventComment) { var details = Request.Form["details"]; Dictionary <string, KeyValuePair <string, string> > fieldEventTextList = new Dictionary <string, KeyValuePair <string, string> >();//key is simple event test, value is full event text; if (TicketTitleEdit.Text != TicketToDisplay.Title) { fieldEventTextList.Add("changed ticket's title", GetFieldEventValues(TicketToDisplay.Title, TicketTitleEdit.Text)); TicketToDisplay.Title = TicketTitleEdit.Text; } if (details != TicketToDisplay.Details) { fieldEventTextList.Add("changed ticket's details", GetFieldEventValues(string.Empty, string.Empty)); TicketToDisplay.IsHtml = false; TicketToDisplay.Details = details; } if (CategoryEdit.Enabled && CategoryEdit.SelectedValue != TicketToDisplay.Category) { fieldEventTextList.Add("changed ticket's category", GetFieldEventValues(TicketToDisplay.Category, CategoryEdit.SelectedValue)); TicketToDisplay.Category = CategoryEdit.SelectedValue; } if (PriorityEdit.Enabled && PriorityEdit.SelectedValue != TicketToDisplay.Priority && !string.IsNullOrEmpty(PriorityEdit.SelectedValue)) { fieldEventTextList.Add("changed ticket's priority", GetFieldEventValues(TicketToDisplay.Priority, PriorityEdit.SelectedValue)); TicketToDisplay.Priority = PriorityEdit.SelectedValue; } if (OwnerEdit.Enabled && OwnerEdit.SelectedValue != TicketToDisplay.Owner) { fieldEventTextList.Add("changed ticket's owner", GetFieldEventValues(TicketToDisplay.Owner, OwnerEdit.SelectedValue)); TicketToDisplay.Owner = OwnerEdit.SelectedValue; } if (AffectsCustomerEdit.Checked != TicketToDisplay.AffectsCustomer) { KeyValuePair <string, string> e = GetFieldEventValues(((TicketToDisplay.AffectsCustomer) ? "Yes" : "No"), ((AffectsCustomerEdit.Checked) ? "Yes" : "No")); fieldEventTextList.Add("changed ticket's affects customer flag", e); TicketToDisplay.AffectsCustomer = AffectsCustomerEdit.Checked; } string[] tags = TagManager.GetTagsFromString(TagPickerEdit.TagList); string newTagList = string.Join(",", tags); if (newTagList != TicketToDisplay.TagList) { fieldEventTextList.Add("changed ticket's tags", GetFieldEventValues(TicketToDisplay.TagList, newTagList)); TicketToDisplay.TicketTags.Clear(); foreach (string tag in tags) { TicketTag tTag = new TicketTag(); tTag.TagName = tag; TicketToDisplay.TicketTags.Add(tTag); } TicketToDisplay.TagList = newTagList; } if (fieldEventTextList.Count > 0) { if (fieldEventTextList.Count > 1) { eventComment.CommentEvent = "has edited multiple fields"; } else { foreach (var v in fieldEventTextList)//lazy, using foreach even though only one element... just a more convienient way to get at the content { if (v.Key == "changed ticket's details") { eventComment.CommentEvent = v.Key; } else { eventComment.CommentEvent = string.Format("{0} from {1} to {2}", v.Key, v.Value.Key, v.Value.Value); } } } if (string.IsNullOrEmpty(eventComment.Comment)) { eventComment.CommentEvent = eventComment.CommentEvent + " without comment"; } StringBuilder sb = new StringBuilder(); foreach (var v in fieldEventTextList) { sb.Append("<div class='MultiFieldEditContainer'>"); sb.Append("<div class='MiltiFieldEditFieldName'>"); string fromtoString = GetFieldEventValuesHtml(v.Value.Key, v.Value.Value); sb.Append(v.Key.Substring(0, 1).ToUpper() + v.Key.Substring(1)); sb.Append("</div>"); if (v.Key != "changed ticket's details") { sb.Append(fromtoString); } sb.Append("</div>"); } if (!string.IsNullOrEmpty(eventComment.Comment)) { sb.Append("\n\n------------\n\n"); sb.Append(eventComment.Comment); } eventComment.Comment = sb.ToString(); EditComplete(eventComment); return(true); } else { return(false); } }
public TicketTagViewModel(TicketTag model) { Model = model; }
private void LoadTagInfo(TicketTag T) { Loading_data = true; if (T != null) { _tag = T; tb_CounterInitials.Text = T.CounterInitials; try { dtp_CountedDate.Value = (DateTime)T.CountedDate; } catch { dtp_CountedDate.Value = DateTime.Now; } chb_Void.Checked = T.VoidTag; chb_Verified.Checked = T.Verified; tb_ItemNo.Text = T.ItemNumber; tb_ItemDesc.Text = T.ItemDescription; tb_ItemRef.Text = T.ItemReference1; tb_Lot.Text = T.LotNumber; tb_UM.Text = T.ItemUM; tb_STK.Text = T.Stockroom; tb_BIN.Text = T.Bin; tb_CountQty.Text = T.CountQTY.ToString(); tb_ReCountQty.Text = T.ReCountQTY.ToString(); chb_Blank.Checked = T.BlankTag; #region IC switch (T.InventoryCategory) { case "O": { chb_OnHand.Checked = true; chb_Hold.Checked = false; chb_Inspection.Checked = false; chb_Shipping.Checked = false; break; } case "H": { chb_OnHand.Checked = false; chb_Hold.Checked = true; chb_Inspection.Checked = false; chb_Shipping.Checked = false; break; } case "I": { chb_OnHand.Checked = false; chb_Hold.Checked = false; chb_Inspection.Checked = true; chb_Shipping.Checked = false; break; } case "S": { chb_OnHand.Checked = false; chb_Hold.Checked = false; chb_Inspection.Checked = false; chb_Shipping.Checked = true; break; } } #endregion if (x.ActiveEventStatus) { #region enable fields if (!T.VoidTag) { chb_Void.Enabled = true; chb_Verified.Enabled = true; tb_CounterInitials.Enabled = true; tb_CounterInitials.Enabled = true; if (T.BlankTag) { tb_ItemNo.Enabled = true; tb_ItemNo.Enabled = true; tb_ItemDesc.Enabled = true; tb_ItemRef.Enabled = true; tb_Lot.Enabled = true; tb_UM.Enabled = true; gb_IC.Enabled = true; tb_STK.Enabled = true; tb_BIN.Enabled = true; //chb_OnHand.Checked = true; //chb_Hold.Checked = false; //chb_Inspection.Checked = false; //chb_Shipping.Checked = false; } else { tb_ItemNo.Enabled = false; tb_ItemNo.Enabled = false; tb_ItemDesc.Enabled = false; tb_ItemRef.Enabled = false; tb_Lot.Enabled = false; tb_UM.Enabled = false; gb_IC.Enabled = false; tb_STK.Enabled = false; tb_BIN.Enabled = false; } if (tb_CountQty.Text == "0") { tb_CountQty.Enabled = true; tb_ReCountQty.Enabled = false; } else { tb_CountQty.Enabled = false; tb_ReCountQty.Enabled = true; } } else { tb_CounterInitials.Enabled = false; tb_ItemNo.Enabled = false; tb_ItemNo.Enabled = false; tb_ItemDesc.Enabled = false; tb_ItemRef.Enabled = false; tb_Lot.Enabled = false; tb_UM.Enabled = false; gb_IC.Enabled = false; tb_STK.Enabled = false; tb_BIN.Enabled = false; tb_CountQty.Enabled = false; tb_ReCountQty.Enabled = false; chb_Void.Enabled = true; } #endregion } } else { foreach (Control b in this.gb_TagInfo.Controls.OfType <TextBox>()) { if (b.Name.ToString() != "tb_TagNo") { b.Text = ""; b.Enabled = false; } } gb_IC.Enabled = false; chb_OnHand.Checked = false; chb_Hold.Checked = false; chb_Inspection.Checked = false; chb_Shipping.Checked = false; chb_Void.Enabled = false; chb_Void.Checked = false; chb_Verified.Enabled = false; chb_Verified.Checked = false; } Loading_data = false; }
private void UpdateTicketTag(Ticket ticket, TicketTagGroup tagGroup, TicketTag ticketTag) { _ticketService.UpdateTag(ticket, tagGroup, ticketTag); EventServiceFactory.EventService.PublishEvent(EventTopicNames.ActivatePosView); }
private void OnTicketTagSelected(TicketTag obj) { UpdateTicketTag(SelectedTicket, SelectedTicketTagData, obj); }
public void UpdateTag(Ticket ticket, TicketTagGroup tagGroup, TicketTag ticketTag) { UpdateTag(ticket, tagGroup, ticketTag.Name); }
/// <summary> /// Edits the ticket. /// </summary> /// <param name="ticket">The ticket being edited with updated values.</param> /// <param name="comment">The comment.</param> /// <returns></returns> public bool EditTicketDetails(Ticket ticket, string comment) { var changes = Repository.GetTicketChanges(ticket); var rnv = new NameValueCollection(); if (!CheckSecurityForTicketActivity(ticket, TicketActivity.EditTicketInfo)) { rnv.Add("noAuth", "User is not authorized to edit ticket details"); } //There are only certain fields we allow to be changed, check rules List<string> allowedFieldChanges = new List<string> { "Title", "Details", "Priority", "Type", "Category", "Owner", "TagList" }; foreach (var field in changes) { if (!allowedFieldChanges.Contains(field.Key)) { rnv.Add("ticketInfo", string.Format("Changes to field {0} are not allowed", field.Key)); } } //handle taglist changed by removing all existing tags and rebuilding them //NOTE: We could examine the tags and just make removals and insertions as needed, but the // actual performance suffers very little and is not worth the extra effort and complexity. if (changes.ContainsKey("TagList")) { Repository.ClearTags(ticket, false); string[] tagsArr = TagUtility.GetTagsFromString(ticket.TagList); foreach (string tag in tagsArr) { TicketTag tTag = new TicketTag(); tTag.TagName = tag; ticket.TicketTags.Add(tTag); } ticket.TagList = string.Join(",", tagsArr);//in case the tags array trimmed spaces and such } rnv.Add(ValidateTicketDetailFields(ticket));//check the field rules if (changes.Count < 1) { rnv.Add("ticketInfo", "No changes to ticket's details were found."); } if (rnv.Count > 0) { throw new RuleException(rnv); } var ticketComment = GetActivityComment(TicketActivity.EditTicketInfo, comment, ticket.AssignedTo, ticket.GetNotificationSubscribers()); StringBuilder sb = new StringBuilder(); foreach (var c in changes) { string v = null; PropertyInfo pi = ticket.GetType().GetProperty(c.Key); if (pi != null) { v = pi.GetValue(ticket, null) as string; } if (c.Key != "Details" && c.Key != "Title" && c.Key != "TagList" && c.Key != "Owner") { sb.Append(string.Format("- Changed {0} from \"{1}\" to \"{2}\"\n", c.Key.ConvertPascalCaseToFriendlyString(), c.Value, v)); } else if (c.Key == "Owner") { sb.Append(string.Format("- Changed {0} from \"{1}\" to \"{2}\"\n", c.Key.ConvertPascalCaseToFriendlyString(), Security.GetUserDisplayName(c.Value as string), Security.GetUserDisplayName(v))); } else //details, title, and tags are long strings so we don't include the full text of the old and new values { sb.Append(string.Format("- Changed {0}\n", c.Key.ConvertPascalCaseToFriendlyString())); } } if (ticketComment.Comment.Length > 0) { sb.Append("\n******\n"); sb.Append(ticketComment.Comment); } ticketComment.Comment = sb.ToString(); ticket.TicketComments.Add(ticketComment); ticket.LastUpdateBy = Security.CurrentUserName; ticket.LastUpdateDate = DateTime.Now; return Repository.UpdateTicket(ticket); }