public void AlterarController(Manutencao obj)
        {
            try
            {
                if (obj.Codigo == 0)
                {
                    throw new Exception("Informar o código da manutenção.");
                }
                dao.AlterarManutencaoDAO(obj.Codigo, obj.DataEntrada, obj.DataPrevistaSaida, obj.DescricaoServico, Convert.ToInt32(obj.CodVeiculo), obj.StatusManutencao);

                if (obj.StatusManutencao == Model.Enums.EnumStatusManutencao.Finalizado)
                {
                    VeiculoController veicCtrl = new VeiculoController();
                    Veiculo           ve       = veicCtrl.GetObj(new Veiculo(obj.CodVeiculo));
                    ve.DataUltimaRevisão = System.DateTime.Now;
                    ve.Status            = enumStatusVeiculo.Disponivel;

                    veicCtrl.AlterarController(ve);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public Viagem GetObj(Viagem obj)
        {
            try
            {
                DataTable table = dao.CarregarViagemDAO(obj.CodViagem);
                if (obj.CodViagem == 0)
                {
                    throw new Exception("Insira o código para localizar viagem!");
                }

                if (table != null)
                {
                    Endereco endOrigem = new Endereco(table.Rows[0]["Cep_Origem"].ToString(),
                                                      table.Rows[0]["Lograd_Origem"].ToString(),
                                                      Convert.ToInt32(table.Rows[0]["Numero_Origem"]),
                                                      table.Rows[0]["Bairro_Origem"].ToString(),
                                                      Convert.ToInt32(table.Rows[0]["Cod_CidadeOrigem"]),
                                                      Convert.ToInt32(table.Rows[0]["Cod_UFOrigem"]));

                    Endereco endDestino = new Endereco(table.Rows[0]["Cep_Destino"].ToString(),
                                                       table.Rows[0]["Lograd_Destino"].ToString(),
                                                       Convert.ToInt32(table.Rows[0]["Numero_Destino"]),
                                                       table.Rows[0]["Bairro_Destino"].ToString(),
                                                       Convert.ToInt32(table.Rows[0]["Cod_CidadeDestino"]),
                                                       Convert.ToInt32(table.Rows[0]["Cod_UFDestino"]));

                    Cliente           cli     = new Cliente(Convert.ToInt32(table.Rows[0]["Cod_Cliente"]));
                    ClienteController cliCtrl = new ClienteController();
                    cli = cliCtrl.GetObj(cli);

                    Veiculo           vei     = new Veiculo(Convert.ToInt32(table.Rows[0]["Cod_Veiculo"]));
                    VeiculoController veiCtrl = new VeiculoController();
                    vei = veiCtrl.GetObj(vei);

                    MotoristaController motoCtrl = new MotoristaController();
                    Motorista           moto     = new Motorista(Convert.ToInt32(table.Rows[0]["Cod_Motorista"]));

                    FuncionarioController funcCtrl = new FuncionarioController();
                    Funcionario           func     = new Funcionario(Convert.ToInt32(table.Rows[0]["Cod_Atendente"]));
                    func = funcCtrl.GetObj(func);

                    Viagem viagem = new Viagem(Convert.ToInt32(table.Rows[0]["Cod_Viagem"]),
                                               Convert.ToDateTime(table.Rows[0]["Data_Viagem"]),
                                               table.Rows[0]["Distancia_Km"].ToString(),
                                               Convert.ToDecimal(table.Rows[0]["Valor"]),
                                               endOrigem, table.Rows[0]["Complemento_Origem"].ToString(),
                                               endDestino, table.Rows[0]["Complemento_Destino"].ToString(), cli, vei, moto, func, (EnumStatusViagem)table.Rows[0]["Status"]);
                    return(viagem);
                }
                else
                {
                    throw new Exception("Não possível localizar viagem.");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public List <Viagem> ListasController(Viagem obj)
        {
            try
            {
                DataTable     table = dao.FiltrarViagemDAO(obj.DataViagem, obj.DataViagemFinal, Convert.ToInt32(obj.Motorista), Convert.ToInt32(obj.Cliente));
                List <Viagem> lista = new List <Viagem>();
                if (table == null)
                {
                    throw new Exception("Não foi possível carregar viagem.");
                }
                foreach (DataRow item in table.Rows)
                {
                    Endereco endOrigem = new Endereco(table.Rows[0]["Cep_Origem"].ToString(),
                                                      table.Rows[0]["Lograd_Origem"].ToString(),
                                                      Convert.ToInt32(table.Rows[0]["Numero_Origem"]),
                                                      table.Rows[0]["Bairro_Origem"].ToString(),
                                                      Convert.ToInt32(table.Rows[0]["Cod_CidadeOrigem"]),
                                                      Convert.ToInt32(table.Rows[0]["Cod_UFOrigem"]));

                    Endereco endDestino = new Endereco(table.Rows[0]["Cep_Destino"].ToString(),
                                                       table.Rows[0]["Lograd_Destino"].ToString(),
                                                       Convert.ToInt32(table.Rows[0]["Numero_Destino"]),
                                                       table.Rows[0]["Bairro_Destino"].ToString(),
                                                       Convert.ToInt32(table.Rows[0]["Cod_CidadeDestino"]),
                                                       Convert.ToInt32(table.Rows[0]["Cod_UFDestino"]));

                    Cliente           cli     = new Cliente(Convert.ToInt32(table.Rows[0]["Cod_Cliente"]));
                    ClienteController cliCtrl = new ClienteController();
                    cli = cliCtrl.GetObj(cli);

                    Veiculo           vei     = new Veiculo(Convert.ToInt32(table.Rows[0]["Cod_Veiculo"]));
                    VeiculoController veiCtrl = new VeiculoController();
                    vei = veiCtrl.GetObj(vei);

                    MotoristaController motoCtrl = new MotoristaController();
                    Motorista           moto     = new Motorista(Convert.ToInt32(table.Rows[0]["Cod_Motorista"]));

                    FuncionarioController funcCtrl = new FuncionarioController();
                    Funcionario           func     = new Funcionario(Convert.ToInt32(table.Rows[0]["Cod_Matricula"]));
                    func = funcCtrl.GetObj(func);

                    Viagem viagem = new Viagem(Convert.ToInt32(table.Rows[0]["Cod_Viagem"]),
                                               Convert.ToDateTime(table.Rows[0]["Data_Viagem"]),
                                               table.Rows[0]["Distancia_Km"].ToString(),
                                               Convert.ToDecimal(table.Rows[0]["Valor"]),
                                               endOrigem, table.Rows[0]["Complemento_Origem"].ToString(),
                                               endDestino, table.Rows[0]["Complemento_Destino"].ToString(), cli, vei, moto, func, (EnumStatusViagem)table.Rows[0]["Status"]);
                    lista.Add(viagem);
                }
                return(lista);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public void InserirController(Manutencao obj)
        {
            try
            {
                dao.InserirManutencaoDAO(obj.DataEntrada, obj.DataPrevistaSaida, obj.DescricaoServico, Convert.ToInt32(obj.CodVeiculo), obj.StatusManutencao);


                VeiculoController veicCtrl = new VeiculoController();
                Veiculo           ve       = veicCtrl.GetObj(new Veiculo(obj.CodVeiculo));

                ve.Status = enumStatusVeiculo.Manutencao;

                veicCtrl.AlterarController(ve);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public void AlterarController(Viagem obj)
        {
            try
            {
                if (obj.CodViagem == 0)
                {
                    throw new Exception("Necessário informar código para alteração de registro.");
                }

                if (obj.DataViagem == null)
                {
                    throw new Exception("Informe a data da viagem.");
                }
                else
                {
                    DateTime.TryParse(obj.DataViagem.ToString(), out dataViagem);
                }
                if (obj.DistanciaKm == "")
                {
                    throw new Exception("Informar a quilomentragem da viagem.");
                }
                if (obj.Valor == 0)
                {
                    throw new Exception("Informe o valor da viagem.");
                }
                if (obj.Origem.Logradouro == "")
                {
                    throw new Exception("Informe o logradouro de origem, para cadastrar a viagem.");
                }
                if (obj.Origem.Bairro == "")
                {
                    throw new Exception("Informe o bairro de origem da viagem.");
                }
                if (obj.Origem.CodEstado == 0)
                {
                    throw new Exception("Informe o estado de origem.");
                }
                if (obj.Origem.CodCidade == 0)
                {
                    throw new Exception("Informe a cidade de origem da viagem.");
                }
                if (obj.Destino.CodEstado == 0)
                {
                    throw new Exception("Informe o estado de destino.");
                }
                if (obj.Destino.CodCidade == 0)
                {
                    throw new Exception("Informe a cidade de destino.");
                }
                if (obj.Cliente.Codigo == 0)
                {
                    throw new Exception("Selecione um cliente.");
                }
                else
                {
                    int.TryParse(obj.Cliente.Codigo.ToString(), out cliente);
                }

                if (obj.CodVeiculo.CodVei == 0)
                {
                    throw new Exception("Informe o veiculo que realizará a viagem.");
                }
                else
                {
                    int.TryParse(obj.CodVeiculo.CodVei.ToString(), out veiculo);
                }

                if (obj.Motorista.Codigo == 0)
                {
                    throw new Exception("Informe o motorista.");
                }
                else
                {
                    int.TryParse(obj.Motorista.Codigo.ToString(), out motorista);
                }

                if (obj.Atendente.Codigo == 0)
                {
                    throw new Exception("Selecione um atendente.");
                }
                else
                {
                    int.TryParse(obj.Atendente.Codigo.ToString(), out atendente);
                }

                if (obj.Status == 0)
                {
                    throw new Exception("Selecione o status da viagem.");
                }

                int.TryParse(obj.Origem.Numero.ToString(), out numOrigem);
                int.TryParse(obj.Destino.Numero.ToString(), out numDestino);

                dao.AlterarViagemDAO(obj.CodViagem, obj.DataViagem, obj.DistanciaKm, obj.Valor, obj.Origem.Cep, obj.Origem.Logradouro,
                                     obj.Origem.Numero, obj.ComplementoOrigem, obj.Origem.Bairro, obj.Origem.CodCidade.ToString(), obj.Origem.CodEstado.ToString(),
                                     obj.Destino.Cep, obj.Destino.Logradouro, obj.Destino.Numero, obj.ComplementoDestino, obj.Destino.Bairro,
                                     obj.Destino.CodCidade.ToString(), obj.Destino.CodEstado.ToString(), obj.Cliente.Codigo,
                                     Convert.ToInt32(obj.CodVeiculo.CodVei), obj.Motorista.Codigo, Convert.ToInt32(obj.Atendente.Codigo), (int)obj.Status);

                if (obj.Status == EnumStatusViagem.Finalizada)
                {
                    decimal           kmPosViagem, kmInicial;
                    int               distancia, kmAtual;
                    VeiculoController veiCtrl = new VeiculoController();
                    Veiculo           veic    = new Veiculo(obj.CodVeiculo.CodVei);

                    veic = veiCtrl.GetObj(veic);

                    Decimal.TryParse(veic.KmInicial, out kmInicial);
                    int.TryParse(obj.DistanciaKm, out distancia);
                    int.TryParse(veic.KmAtual, out kmAtual);

                    kmPosViagem = distancia + kmAtual;

                    veic.KmAtual = kmPosViagem.ToString();

                    if (kmPosViagem - kmInicial >= 10000)
                    {
                        veic.Status    = enumStatusVeiculo.Manutencao;
                        veic.KmInicial = veic.KmAtual;

                        ManutencaoController manuCtrl = new ManutencaoController();
                        manuCtrl.InserirController(new Manutencao(0, System.DateTime.Now, System.DateTime.Now.AddDays(5), "Veiculo manutenção preventiva", veic.CodVei, Model.Enums.EnumStatusManutencao.Aberto));
                    }

                    veiCtrl.AlterarController(veic);
                    if (veic.Status == enumStatusVeiculo.Manutencao)
                    {
                        throw new BusinessException("Veículo ultrapassou a quilometragem de manutenção preventiva e o sistema alterou o status de Veículo para Manutenção.");
                    }
                }
            }
            catch (BusinessException ex)
            {
                throw new BusinessException(ex.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }