private static GenericResult HelpdeskListTickets(IResource res) { var result = new GenericResult(); DataTable dt = HelpdeskUtility.GetTickets(res); object[] list = new object[] { }; if (dt != null) { list = dt.AsEnumerable().Select(x => new { ticketID = x["ticketID"], created = x["created"], email = x["email"], assigned_to = x["assigned_to"], subject = x["subject"], priority_desc = x["priority_desc"] }).ToArray(); } result.Data = new { tickets = list }; return(result); }
public void CanGetCcEmailsForHardwareIssue() { using (StartUnitOfWork()) { var resource = Provider.Scheduler.Resource.GetResource(85051); var emails = HelpdeskUtility.GetCcEmailsForHardwareIssue(resource, 1301); Assert.IsTrue(emails.Length > 0); } }
protected void btnCreateTicket_Click(object sender, EventArgs e) { var res = Helper.GetResourceTreeItemCollection().GetResource(ResourceID); litErrMsg.Text = string.Empty; string helpdeskEmail = GetHelpdeskEmail(res); bool load = true; if (string.IsNullOrEmpty(txtSubject.Text)) { litErrMsg.Text = WebUtility.BootstrapAlert("danger", "Please enter a subject.", true); } else if (string.IsNullOrEmpty(txtMessage.Text)) { litErrMsg.Text = WebUtility.BootstrapAlert("danger", "Please enter a message.", true); } else if (string.IsNullOrEmpty(helpdeskEmail)) { litErrMsg.Text = WebUtility.BootstrapAlert("danger", "An error occurred while creating the ticket. A helpdesk email is not configured for this resource.", true); } else { IReservation rsv = null; if (ddlReservations.SelectedValue != "None") { rsv = Provider.Scheduler.Reservation.GetReservation(int.Parse(ddlReservations.SelectedValue)); } string subjectText = "[" + res.ResourceID.ToString() + ":" + res.ResourceName + "] " + txtSubject.Text; CreateTicketResult addTicketResult = HelpdeskUtility.CreateTicket(CurrentUser, res, rsv, CurrentUser.ClientID, ddlReservations.SelectedItem.Text, subjectText, txtMessage.Text, ddlTicketType.SelectedItem.Text, Request.Url); if (addTicketResult.Success) { litErrMsg.Text = WebUtility.BootstrapAlert("success", string.Format("Your ticket has been created. A confirmation email has been sent to {0}.", CurrentUser.Email)); load = false; } else { StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Format("Create ticket failed. User: {0} ({1}). Resource: {2} ({3})", CurrentUser.DisplayName, CurrentUser.ClientID, res.ResourceName, res.ResourceID)); sb.AppendLine(string.Format("----------{0}{1}", Environment.NewLine, addTicketResult.Exception.Message)); SendEmail.SendDeveloperEmail("LNF.Web.Scheduler.Controls.Helpdesk.btnCreateTicket_Click", "Create Ticket Error", sb.ToString()); litErrMsg.Text = WebUtility.BootstrapAlert("danger", "Sorry, an error occurred and your ticket was not created. A notification has been sent to LNF staff."); } } if (load) { //LoadOpenTickets(); } LoadReservations(); }
public void CanSendHardwareIssueEmail() { var resource = Provider.Scheduler.Resource.GetResource(999998); int sent = HelpdeskUtility.SendHardwareIssueEmail(resource, 1301, "test", "test hardware ticket email"); Assert.AreEqual(0, sent); resource = Provider.Scheduler.Resource.GetResource(85051); sent = HelpdeskUtility.SendHardwareIssueEmail(resource, null, 1301, string.Empty, "test", "test hardware ticket email", TicketPriorty.HardwareIssue, new Uri("http://localhost/test")); Assert.IsTrue(sent > 0); }
private int SendHardwareTicketEmails(HttpContextBase context) { string subject = context.Request["subject"]; string message = context.Request["message"]; if (!int.TryParse(context.Request["resourceId"], out int resourceId)) { throw new Exception("Invalid parameter: resourceId"); } var res = Provider.Scheduler.Resource.GetResource(resourceId); int sent = HelpdeskUtility.SendHardwareIssueEmail(res, context.CurrentUser(Provider).ClientID, subject, message); return(sent); }
private static GenericResult HelpdeskInfo(IResource res) { var result = new GenericResult(); DataTable dt = HelpdeskUtility.GetTickets(res); List <object> list = new List <object>(); if (dt != null) { foreach (DataRow dr in dt.Rows) { list.Add(new { resource_id = dr["resource_id"], priority_urgency = dr["priority_urgency"] }); } } result.Data = new { tickets = list }; return(result); }
public static object HandleRequest(HttpContextBase context, IProvider provider) { string action = context.Request["Action"].ToString(); int resourceId = Utility.ConvertTo(context.Request["ResourceID"], 0); int clientId = Utility.ConvertTo(context.Request["ClientID"], 0); int ticketId = Utility.ConvertTo(context.Request["TicketID"], 0); string command = Utility.ConvertTo(context.Request["Command"], string.Empty); string message = string.Empty; object result = null; GenericResult gr; var res = provider.Scheduler.Reservation.GetResource(resourceId); var currentUser = context.CurrentUser(provider); var dataSession = provider.DataAccess.Session; switch (action) { case "SaveReservationHistory": throw new NotImplementedException(); case "get-tool-engineers": gr = new GenericResult(); GetToolEngineers(provider, res, gr); result = gr; break; case "add-tool-engineer": gr = new GenericResult(); AddToolEngineer(dataSession, res, dataSession.Single <Client>(clientId), gr); GetToolEngineers(provider, res, gr); result = gr; break; case "delete-tool-engineer": gr = new GenericResult(); DeleteToolEngineer(dataSession, res, dataSession.Single <Client>(clientId), gr); GetToolEngineers(provider, res, gr); result = gr; break; case "get-buildings": var buildings = dataSession.Query <Building>().Where(x => x.BuildingIsActive).ToList(); result = GetBuildings(res, buildings); break; case "get-labs": int buildingId = Utility.ConvertTo(context.Request["BuildingID"], 0); var labs = dataSession.Query <Lab>().Where(x => x.Building.BuildingID == buildingId).ToList(); result = GetLabs(res, labs); break; case "get-proctechs": int labId = Utility.ConvertTo(context.Request["LabID"], 0); var procTechs = dataSession.Query <ProcessTech>().Where(x => x.Lab.LabID == labId).ToList(); result = GetProcessTechs(res, procTechs); break; case "add-resource": result = AddResource(dataSession, context); break; case "upload-image": result = UploadImage(context); break; case "helpdesk-info": result = HelpdeskInfo(provider.Scheduler.Resource.GetResource(resourceId)); break; case "helpdesk-list-tickets": result = HelpdeskListTickets(provider.Scheduler.Resource.GetResource(resourceId)); break; case "helpdesk-detail": result = HelpdeskDetail(ticketId, currentUser); break; case "helpdesk-post-message": message = Utility.ConvertTo(context.Request["Message"], string.Empty); message = $"Posted from scheduler by: {currentUser.DisplayName} ({currentUser.Email})\n----------------------------------------\n{message}"; result = HelpdeskPostMessage(ticketId, message, currentUser); break; case "send-hardware-issue-email": message = Utility.ConvertTo(context.Request["message"], string.Empty); string subject = Utility.ConvertTo(context.Request["subject"], string.Empty); int sent = HelpdeskUtility.SendHardwareIssueEmail(res, currentUser.ClientID, subject, message); result = new GenericResult() { Success = sent > 0, Message = $"Emails sent: {sent}", Data = null, Log = null }; break; case "interlock": bool state = Utility.ConvertTo(context.Request["State"], false); int duration = Utility.ConvertTo(context.Request["Duration"], 0); uint d = (duration >= 0) ? (uint)duration : 0; result = HandleInterlockRequest(provider, command, resourceId, state, d); break; case "test": result = new GenericResult() { Success = true, Message = $"current client: {currentUser.ClientID}", Data = null, Log = null }; break; default: result = new GenericResult { Success = false, Message = "Invalid action." }; break; } return(result); }