protected void LnkbtnEstadoCommand(object sender, CommandEventArgs commandEventArgs)
        {
            try
            {
                var index        = Convert.ToInt32(commandEventArgs.CommandArgument);
                var id           = Convert.ToInt32(Grid.DataKeys[index].Value);
                var distribucion = DAOFactory.ViajeDistribucionDAO.FindById(id);

                switch (commandEventArgs.CommandName)
                {
                case "Start":
                    StartTicketWindow(distribucion);
                    //new InitEvent(DateTime.UtcNow);
                    break;

                case "Close":
                    var    ciclo  = new CicloLogisticoDistribucion(distribucion, DAOFactory, new MessageSaver(DAOFactory));
                    IEvent evento = new CloseEvent(DateTime.UtcNow);
                    ciclo.ProcessEvent(evento);
                    STrace.Trace("CierreCicloLogistico", distribucion.Vehiculo.Dispositivo.Id, string.Format("Viaje {0} cerrado manualmente por {1}", distribucion.Id, WebSecurity.AuthenticatedUser.Name));
                    Bind();
                    break;

                case "Reenviar":
                    try
                    {
                        var destinations = distribucion.Detalles.Where(d => d.PuntoEntrega != null &&
                                                                       d.ReferenciaGeografica != null &&
                                                                       Math.Abs(d.ReferenciaGeografica.Latitude) < 90 &&
                                                                       Math.Abs(d.ReferenciaGeografica.Longitude) < 180 &&
                                                                       d.Estado != EntregaDistribucion.Estados.Completado &&
                                                                       d.Estado != EntregaDistribucion.Estados.NoCompletado &&
                                                                       d.Estado != EntregaDistribucion.Estados.Completado)
                                           .Select(d => new Destination(d.Id,
                                                                        new GPSPoint(DateTime.UtcNow,
                                                                                     (float)d.ReferenciaGeografica.Latitude,
                                                                                     (float)d.ReferenciaGeografica.Longitude),
                                                                        d.Descripcion,
                                                                        d.PuntoEntrega.Descripcion,
                                                                        d.ReferenciaGeografica.Direccion.Descripcion))
                                           .ToArray();

                        if (destinations.Any())
                        {
                            // LOAD ROUTE
                            switch (distribucion.Vehiculo.Empresa.OrdenRutaGarmin)
                            {
                            case Empresa.OrdenRuta.DescripcionAsc:
                                destinations = destinations.OrderBy(d => d.Text).ToArray();
                                break;

                            case Empresa.OrdenRuta.DescripcionDesc:
                                destinations = destinations.OrderByDescending(d => d.Text).ToArray();
                                break;
                            }

                            var expiration = distribucion.Fin.AddMinutes(distribucion.Empresa.EndMarginMinutes);

                            var msg = MessageSender.CreateReloadRoute(distribucion.Vehiculo.Dispositivo, new MessageSaver(DAOFactory))
                                      .AddRouteId(distribucion.Id)
                                      .AddDestinations(destinations)
                                      .AddExpiration(expiration);

                            if (distribucion.Tipo == ViajeDistribucion.Tipos.Desordenado)
                            {
                                var ordenar = distribucion.Empresa.GetParameter(Empresa.Params.CicloDistribucionOrdenar);
                                if (ordenar != null && ordenar.ToLower() == "true")
                                {
                                    msg.AddParameter("sort", "true");
                                }
                            }
                            msg.Send();
                        }
                    }
                    catch (Exception ex)
                    {
                        STrace.Exception("ViajeDistribucion Inicio", ex, distribucion.Vehiculo.Dispositivo.Id);
                        throw;
                    }
                    break;

                case "Asociar":
                    AsociarVehiculoWindow(distribucion);
                    break;

                case "Combinar":
                    CombinarViajeWindow(distribucion);
                    break;
                }
            }
            catch (QueueException)
            {
                ShowError("Error de configuracion de Cola de Comandos");
            }
            catch (Exception ex)
            {
                ShowError(ex);
            }
        }