예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
        }
예제 #4
0
        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);
        }