protected override void Process(InitEvent data) { if (Ticket.Vehiculo == null) { throw new NoVehicleException(); } if (Ticket.Estado != Ticket.Estados.Pendiente) { throw new AlreadyOpenException(); } FirstPosition(); Ticket.Dispositivo = Ticket.Vehiculo.Dispositivo; var primerDetalle = Detalles.First(); var primerEstado = primerDetalle.EstadoLogistico; var messageCode = primerEstado.Mensaje.Codigo; var needsSend = true; if (primerEstado.EsPuntoDeControl == Estado.Evento.Iniciado) { primerDetalle.Automatico = primerDetalle.Manual = data.Date; if (Detalles.Count >= 2) { messageCode = Detalles[1].EstadoLogistico.Mensaje.Codigo; } else { needsSend = false; } DaoFactory.DetalleTicketDAO.SaveOrUpdate(primerDetalle); } var sent = !needsSend || MessageSender.CreateSetWorkflowState(Ticket.Vehiculo.Dispositivo, MessageSaver).AddWorkflowState(messageCode).Send(); if (!sent) { throw new QueueException(); } Ticket.Estado = Ticket.Estados.EnCurso; DaoFactory.TicketDAO.SaveOrUpdate(Ticket); SaveMessage(MessageCode.CicloLogisticoIniciado.GetMessageCode(), data.Date); if (primerEstado.EsPuntoDeControl == Estado.Evento.Iniciado) { SaveMessage(MessageCode.EstadoLogisticoCumplido.GetMessageCode(), primerDetalle.EstadoLogistico.Descripcion, data.Date.AddSeconds(1)); } }