public ContentResult UploadFiles(int ticketId)
        {
            var r = new List <UploadFilesResult>();

            foreach (string file in Request.Files)
            {
                HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
                if (hpf.ContentLength == 0)
                {
                    continue;
                }

                //"~/App_Data/Uploads/Tickets/"
                //string savedFileName = Path.Combine(Server.MapPath("~/App_Data"), Path.GetFileName(hpf.FileName));
                //string path = "~/App_Data/Uploads/Tickets/"+ticketId.ToString();
                var path = "C:/Users/lorran.palmeira/Source/Repos/XRTTicket/XRTTicket/App_Data/Uploads/Tickets/" + ticketId.ToString();
                //var path = "C:/Users/lorran.palmeira/Downloads/Arquivos/" + ticketId.ToString() +"/";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string savedFileName = Path.Combine(Server.MapPath("~/App_Data/Uploads/Tickets/" + ticketId.ToString()), Path.GetFileName(hpf.FileName));
                hpf.SaveAs(savedFileName);

                var actions = new Models.Ticket.Action
                {
                    TicketId          = ticketId,
                    ActionDescription = "Sucess UpLoaded file by " + User.Identity.Name + " " + DateTime.Now.ToLocalTime(),
                    Date        = DateTime.Now.ToLocalTime(),
                    StatusId    = UnitOfTicket.Where(x => x.TicketId == ticketId).Select(x => x.StatusId).FirstOrDefault(),
                    PriorityId  = UnitOfTicket.Where(x => x.TicketId == ticketId).Select(x => x.PriorityId).FirstOrDefault(),
                    AlteredBy   = User.Identity.Name,
                    SendToUser  = true,
                    Files       = path + "/" + hpf.FileName,
                    IterationId = UnitOfTicketAction.Where(x => x.TicketId == ticketId).Max(x => x.IterationId) + 1
                };

                UnitOfTicketAction.Save(actions);



                /*
                 * r.Add(new UploadFilesResult()
                 * {
                 *  Name = hpf.FileName,
                 *  Length = hpf.ContentLength,
                 *  Type = hpf.ContentType
                 * });
                 */
            }
            return(Content("{\"name\":\"" + r[0].Name + "\",\"type\":\"" + r[0].Type + "\",\"size\":\"" + string.Format("{0} bytes", r[0].Length) + "\"}", "application/json"));
            //return Json("Sucess",JsonRequestBehavior.AllowGet);
        }
        public ActionResult SaveTicket(Models.Ticket.ViewModelTicket ticket, string description, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                ticket.TicketId        = Convert.ToInt32(UnitOfTicket.Next());
                ticket.OpenDateAndTime = DateTime.Now.ToLocalTime();
                ticket.UserId          = User.Identity.GetUserName();
                var user = (System.Security.Claims.ClaimsIdentity)User.Identity;
                ticket.CompanyId = Convert.ToInt32(user.FindFirstValue("CompanyId"));
                ticket.StatusId  = 1;


                var ret = Repository._priorityTime.Where(x => x.PriorityId == ticket.PriorityId)
                          .Select(x => x.SlaTime).FirstOrDefault();


                ticket.SlaExpiration = CalculateSla.AddWithinWorkingHours(ticket.OpenDateAndTime,
                                                                          TimeSpan.FromHours(ret), 9, 8);


                this.UnitOfTicket.Save(ticket);

                // Chech if exists files
                var path = string.Empty;
                if (file != null)
                {
                    path = UploadAndDownload.Upload(file, ticket.TicketId);
                }


                var actions = new Models.Ticket.Action
                {
                    TicketId          = ticket.TicketId,
                    ActionDescription = description,
                    StatusId          = ticket.StatusId,
                    Date       = DateTime.Now.ToLocalTime(),
                    AlteredBy  = User.Identity.Name,
                    SendToUser = true,
                    SlaRest    = TimeSpan.FromHours(
                        Repository._priorityTime
                        .Where(x => x.PriorityId == ticket.PriorityId)
                        .Select(x => x.SlaTime).FirstOrDefault()),
                    Files       = path,
                    IterationId = 1
                };

                this.UnitOfTicketAction.Save(actions);

                //return RedirectToAction(nameof(NewTicket));
                if (User.IsInRole("User") || User.IsInRole("SuperUser"))
                {
                    return(RedirectToAction(nameof(MyTickets)));
                }
                else
                {
                    return(RedirectToAction(nameof(TicketList)));
                }
            }
            else
            {
                return(View(nameof(NewTicket), ticket));
            }
        }
        public JsonResult SaveTicketAjaxUpdate(ViewModelTicket ticket, string description, bool SendToUser, HttpPostedFileBase file)
        {
            var diff       = TimeSpan.Zero;
            var diffTime   = 0.0;
            var lastStatus = UnitOfTicketAction.Where(x => x.TicketId == ticket.TicketId)
                             .OrderByDescending(x => x.IterationId)
                             .Select(x => x.StatusId).FirstOrDefault();


            if (ticket.StatusId == 6 || ticket.StatusId == 7 &&
                lastStatus != 6 && lastStatus != 7)
            {
                ticket.ClosedDateTime = DateTime.Now.ToLocalTime();
            }

            else if (ticket.StatusId == 3 || ticket.StatusId == 4 || ticket.StatusId == 5 &&
                     lastStatus != 3 && lastStatus != 4 && lastStatus != 5)
            {
                var sla       = new CalculateSla();
                var TotalTime = sla.SlaRestTime(ticket.TicketId);

                var time = CalculateSla.SubtractWithinWorkingHours(DateTime.Now.ToLocalTime(), (int)TotalTime);

                ticket.SlaExpiration = CalculateSla.AddWithinWorkingHours(DateTime.Now.ToLocalTime(), TimeSpan.FromHours(time), 9, 8);


                /*
                 * var dateTicket = UnitOfTicket.Where(x => x.TicketId == ticket.TicketId)
                 * .Select(x => x.SlaExpiration).FirstOrDefault();
                 *  diffTime = dateTicket.Subtract(DateTime.Now.ToLocalTime()).TotalHours;
                 * CalculateSla.SubtractWithinWorkingHours(DateTime.Now.ToLocalTime(), (int)diffTime);
                 */
            }

            else if (ticket.StatusId == 2 && lastStatus == 3 ||
                     lastStatus == 4 || lastStatus == 5)
            {
                var slaRest = UnitOfTicketAction.Where(x => x.TicketId == ticket.TicketId).OrderByDescending(x => x.IterationId).Select(x => x.SlaRest).FirstOrDefault();
                //diff = slaRest;
                diffTime = slaRest.TotalHours;
                ticket.ClosedDateTime = DateTime.Now.ToLocalTime().Add(slaRest);
            }

            var path = string.Empty;

            if (file != null)
            {
                path = UploadAndDownload.Upload(file, ticket.TicketId);
            }



            //If Ticket exist then Update Ticket
            this.UnitOfTicket.Update(ticket, ticket.TicketId);

            var actions = new Models.Ticket.Action
            {
                TicketId          = ticket.TicketId,
                ActionDescription = description,
                StatusId          = ticket.StatusId,
                Date       = DateTime.Now.ToLocalTime(),
                PriorityId = ticket.PriorityId,
                AlteredBy  = User.Identity.Name,
                SendToUser = SendToUser,
                //SlaRest = TimeSpan.FromHours(diffTime),
                IterationId = UnitOfTicketAction.Where(x => x.TicketId == ticket.TicketId).Max(x => x.IterationId) + 1
            };


            if (!string.IsNullOrEmpty(description))
            {
                UnitOfTicketAction.Save(actions);
            }


            return(Json(new { actions, ticket }, JsonRequestBehavior.AllowGet));
        }