Ejemplo n.º 1
0
        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));
            }
        }