private void BindEstados() { var estados = EditObject.States.OfType <SupportTicketDetail>().OrderBy(d => d.Fecha); var est = new List <SupportTicketDetail>(estados.Count()); SupportTicketDetail last = null; foreach (var estado in estados) { if (last == null || estado.Estado != last.Estado) { est.Add(estado); } last = estado; } var list = est.OrderByDescending(d => d.Fecha); last = null; foreach (var detail in list) { _tiempoEstado.Add(last != null ? last.Fecha.Subtract(detail.Fecha) : DateTime.UtcNow.Subtract(detail.Fecha)); last = detail; } gridEstados.DataSource = list; gridEstados.DataBind(); }
private static TimeSpan GetTiempo(SupportTicketDetail last, DateTime fecha, Empresa empresa, Linea linea) { var ts = new TimeSpan(); var desde = fecha.ToDisplayDateTime(); var hasta = last != null?last.Fecha.ToDisplayDateTime() : DateTime.UtcNow.ToDisplayDateTime(); var codigoTurno = empresa.GetParameter(BusinessObjects.Empresa.Params.TurnoSoporte); var dao = new DAOFactory(); var turno = dao.ShiftDAO.FindByCode(new[] { empresa.Id }, new[] { linea != null ? linea.Id : -1 }, codigoTurno); var feriados = dao.FeriadoDAO.FindAll().Select(f => f.Fecha.DayOfYear); var dias = GetDias(desde, hasta); for (var i = 0; i < dias.Count; i++) { var dia = dias[i.ToString()]; var maxDesde = turno != null && turno.Inicio > dia[0].TimeOfDay.TotalHours ? turno.Inicio : dia[0].TimeOfDay.TotalHours; var minHasta = turno != null && turno.Fin < dia[1].TimeOfDay.TotalHours ? turno.Fin : dia[1].TimeOfDay.TotalHours; if (turno == null && feriados.Contains(dia[0].DayOfYear)) { continue; } if (turno != null && !turno.AppliesToDate(dia[0], feriados)) { continue; } if (minHasta > maxDesde) { ts = ts.Add(TimeSpan.FromHours(minHasta - maxDesde)); } } return(ts); }
protected override void OnSave() { var lastState = EditObject.CurrentState; var now = DateTime.UtcNow; var usuario = DAOFactory.UsuarioDAO.FindById(Usuario.Id); EditObject.Nombre = txtNombre.Text.Trim(); EditObject.Telefono = txtTelefono.Text.Trim(); EditObject.Mail = txtMail.Text.Trim(); EditObject.TipoProblema = (short)cbTipoProblema.SelectedIndex; EditObject.Descripcion = txtDescripcion.Text.Trim(); EditObject.Nivel = (short)cbNivel.Selected; EditObject.NivelObj = cbNivel.Selected > 0 ? DAOFactory.NivelDAO.FindById(cbNivel.Selected) : null; EditObject.CategoriaObj = cbCategoria.Selected > 0 ? DAOFactory.CategoriaDAO.FindById(cbCategoria.Selected) : null; EditObject.Subcategoria = cbSubcategoria.Selected > 0 ? DAOFactory.SubCategoriaDAO.FindById(cbSubcategoria.Selected) : null; EditObject.MailList = txtMailList.Text.Trim(); if (dtInicio.SelectedDate.HasValue) { EditObject.FechaInicio = SecurityExtensions.ToDataBaseDateTime(dtInicio.SelectedDate.Value); } EditObject.Empresa = cbEmpresa.Selected <= 0 ? null : DAOFactory.EmpresaDAO.FindById(cbEmpresa.Selected); EditObject.Vehiculo = cbVehiculo.Selected > 0 ? DAOFactory.CocheDAO.FindById(cbVehiculo.Selected) : null; EditObject.Dispositivo = cbDispositivo.Selected > 0 ? DAOFactory.DispositivoDAO.FindById(cbDispositivo.Selected) : null; EditObject.NroParte = EditMode ? txtNroParte.Text.Trim() : string.Empty; if (!EditMode) { EditObject.Fecha = now; EditObject.Usuario = usuario; } var estado = (short)(!EditMode ? 0 : cbEstado.SelectedIndex); if (EditObject.CurrentState == 4 && cbResolucion.SelectedIndex != 0) { estado = (short)(cbResolucion.SelectedIndex == 1 ? 5 : 6); } var detail = new SupportTicketDetail { Estado = estado, Fecha = now, SupportTicket = EditObject, Usuario = usuario, Descripcion = Server.HtmlEncode(txtComentario.Text.Trim()).Replace("\r\n", "<br />") }; EditObject.AddDetail(detail); if (lastState != estado) { var le = DAOFactory.SupportTicketDAO.GetEstados()[lastState]; var ne = DAOFactory.SupportTicketDAO.GetEstados()[estado]; if (!string.IsNullOrEmpty(detail.Descripcion)) { detail.Descripcion += "<br /><br />"; } detail.Descripcion += string.Concat("[", CultureManager.GetLabel("SUPPORT_STATE_CHANGED"), ": ", le, " > ", ne, "]"); upGridEstados.Update(); } if (filUpload.HasFile) { CheckDirectory(); var filename = GetFileName(filUpload.FileName); filUpload.SaveAs(Path.Combine(AttachDirectory, filename)); if (string.IsNullOrEmpty(EditObject.FileName)) { EditObject.FileName = filename; } else { EditObject.FileName += ";" + filename; } if (!string.IsNullOrEmpty(detail.Descripcion)) { detail.Descripcion += "<br /><br />"; } detail.Descripcion += string.Concat("[", CultureManager.GetLabel("SUPPORT_FILE_UPLOADED"), ": ", filename, "]"); } DAOFactory.SupportTicketDAO.SaveOrUpdate(EditObject); InformarPorMail(!EditMode); upComentarios.Update(); }
public ReporteTicketVo(SupportTicket supportTicket) { Empresa = supportTicket.Empresa != null ? supportTicket.Empresa.RazonSocial : CultureManager.GetLabel("TODOS"); Id = supportTicket.Id; Fecha = supportTicket.Fecha.ToDisplayDateTime(); Categoria = supportTicket.CategoriaObj != null ? supportTicket.CategoriaObj.Descripcion : string.Empty; Subcategoria = supportTicket.Subcategoria != null ? supportTicket.Subcategoria.Descripcion : string.Empty; Nivel = supportTicket.NivelObj != null ? supportTicket.NivelObj.Descripcion : string.Empty; var estadoActual = string.Empty; switch (supportTicket.CurrentState) { case 0: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_1_OPEN"); break; case 1: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_2_WORKING"); break; case 2: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_3_WAITING_USER"); break; case 3: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_4_SOLVED"); break; case 4: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_5_APPROVED"); break; case 5: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_6_REJECTED"); break; case 6: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_7_CLOSED"); break; case 7: estadoActual = CultureManager.GetLabel("SUPPORT_STATE_8_INVALID"); break; } EstadoActual = estadoActual; var tiempoTotal = new TimeSpan(0, 0, 0); var open = new TimeSpan(0, 0, 0); var working = new TimeSpan(0, 0, 0); var waitingUser = new TimeSpan(0, 0, 0); var solved = new TimeSpan(0, 0, 0); var approved = new TimeSpan(0, 0, 0); var rejected = new TimeSpan(0, 0, 0); var closed = new TimeSpan(0, 0, 0); var invalid = new TimeSpan(0, 0, 0); var estados = supportTicket.States.OfType <SupportTicketDetail>().OrderByDescending(d => d.Fecha); SupportTicketDetail last = null; foreach (var estado in estados) { var ts = GetTiempo(last, estado.Fecha, estado.SupportTicket.Empresa, estado.SupportTicket.Linea); switch (estado.Estado) { case 0: open = open.Add(ts); break; case 1: working = working.Add(ts); break; case 2: waitingUser = waitingUser.Add(ts); break; case 3: solved = solved.Add(ts); break; case 4: approved = approved.Add(ts); break; case 5: rejected = rejected.Add(ts); break; case 6: closed = closed.Add(ts); break; case 7: invalid = invalid.Add(ts); break; } tiempoTotal = tiempoTotal.Add(ts); last = estado; } Open = GetString(open); Working = GetString(working); WaitingUser = GetString(waitingUser); Solved = GetString(solved); Approved = GetString(approved); Rejected = GetString(rejected); Closed = GetString(closed); Invalid = GetString(invalid); TiempoTotal = GetString(tiempoTotal); }