private ITripulante TransportarTripulantes(ILocalidade localOrigem, ILocalidade localDestino, IEnumerable <ITripulante> listaTripulacao)
        {
            var         listaOrdenada = listaTripulacao.OrderBy(o => o.Tipo);
            var         passageiro    = listaOrdenada.FirstOrDefault();
            ITripulante motorista     = null;

            switch (passageiro.Tipo)
            {
            case TipoTripulante.Comissaria:
                motorista = listaOrdenada
                            .FirstOrDefault(t => t.IsMotorista && t.Identificador != passageiro.Identificador && t.Tipo != TipoTripulante.Piloto && t.Tipo != TipoTripulante.Policial && t.Tipo != TipoTripulante.Presidiario);
                break;

            case TipoTripulante.Oficial:
                motorista = listaOrdenada
                            .FirstOrDefault(t => t.IsMotorista && t.Identificador != passageiro.Identificador && t.Tipo != TipoTripulante.ChefeServico && t.Tipo != TipoTripulante.Policial && t.Tipo != TipoTripulante.Presidiario);
                break;

            default:
                motorista = listaOrdenada
                            .FirstOrDefault(t => t.IsMotorista && t.Identificador != passageiro.Identificador);
                break;
            }

            var ultimaViagem = passageiro.Tipo.Equals(TipoTripulante.Presidiario);

            _smartForTwoBusiness.EmbarcarTripulantes(localOrigem, motorista, passageiro);
            _smartForTwoBusiness.DesembarcarTripulantes(localDestino, ultimaViagem);

            return(ultimaViagem ? null : motorista);
        }
        public void TransportarTripulacao(ILocalidade localOrigem, ILocalidade localDestino)
        {
            try
            {
                Console.WriteLine($"Inicio transporte {localOrigem.ToString()} => {localDestino.ToString()}");
                while (localOrigem.ListaTripulacao.Any(t => !t.IsTransportado))
                {
                    var listaTripulacao = localOrigem.ListaTripulacao.Where(t => !t.IsTransportado);
                    localOrigem.ListarTripulantes();

                    var motorista = TransportarTripulantes(localOrigem, localDestino, listaTripulacao);
                    if (motorista != null)
                    {
                        localOrigem.ListaTripulacao
                        .Where(t => t.Identificador == motorista.Identificador)
                        .ToList().ForEach(t => t.IsTransportado = false);
                    }

                    localDestino.ListarTripulantes();
                }

                Console.WriteLine($"Fim transporte {localOrigem.ToString()} => {localDestino.ToString()}");
                localOrigem.ListarTripulantes();
                localDestino.ListarTripulantes();
            }
            catch (BusinessException e)
            {
                Console.WriteLine(e.Message);
            }
        }
        public void DesembarcarTripulantes(ILocalidade localDestino, bool ultimaViagem)
        {
            if (ultimaViagem)
            {
                localDestino.AdicionarTripulante(_veiculoTransporte.Motorista);
            }

            localDestino.AdicionarTripulante(_veiculoTransporte.Passageiro);
            _veiculoTransporte.DesembarcarOcupantes();
        }
        public void EmbarcarTripulantes(ILocalidade localOrigem, ITripulante motorista, ITripulante passageiro)
        {
            _veiculoTransporte.EmbarcarOcupantes(motorista, passageiro);
            _validacaoTransporte
            .ValidarQuantidadeOcupantes(_veiculoTransporte)
            .ValidarMotorista(_veiculoTransporte)
            .ValidarOcupantes(_veiculoTransporte);

            Console.WriteLine(_veiculoTransporte.ToString());

            localOrigem.RemoverTripulante(motorista);
            localOrigem.RemoverTripulante(passageiro);
        }
 public void DesembarcarTripulantes(ILocalidade localDestino)
 {
     DesembarcarTripulantes(localDestino, false);
 }
Esempio n. 6
0
 public LocalidadesController()
 {
     _localidade = new Localidade();
 }