public void TesteCadastroAgendamento()
        {
           this.CriaInstancia();

            Empresa emp = new Empresa();
            emp.Codigo = "99";
            Filial fil = new Filial();
            fil.Codigo = "99";
            Cliente cli = new Cliente();
            cli.Codigo = 1;
            Funcionario func = new Funcionario();
            func.Codigo = 1;
            Status st = new Status();
            st.Codigo = 1;

            Agendamento umAgendamento = new Agendamento();
            umAgendamento.Cliente = cli;
            umAgendamento.Funcionario = func;
            umAgendamento.Empresa = emp;
            umAgendamento.Filial = fil;
            umAgendamento.Status = st;
            umAgendamento.DataPrevista = DateTime.Now.ToString("dd/MM/yyyy");
            umAgendamento.InicioPrevisto = "04:00";
            umAgendamento.FimPrevisto = "16:00";
            umAgendamento.TrasladoPrevisto = "01:00";
            IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, emp, fil);
            umAgendamentoBUS.Cadastrar(umAgendamento);
        }
        public ActionResult GerarOS(int id)
        {
            try
            {

                ViewBag.Title = "Gerar Ordem de Serviço - Agendamentos";

                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];

                IAgendamentoNegocio umAgendamentoNegocio = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);

                Agendamento umAgendamento = umAgendamentoNegocio.Consultar(id);
                OrdemServico umaOS = new OrdemServico();
                umaOS.Clientes = new ClienteBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Listar();
                umaOS.Cliente = umAgendamento.Cliente;
                umaOS.Situacoes = new StatusOrdemServicoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Listar();
                umaOS.Projetos = new ProjetoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Pesquisar(umaOS.Cliente.Codigo);
                umaOS.Projeto = new Projeto();
                umaOS.TipoHoras = new TipoHoraBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Listar();
                umaOS.TipoHora = new TipoHora();
                umaOS.Data = umAgendamento.DataPrevista;
                umaOS.Inicio = umAgendamento.InicioPrevisto;
                umaOS.Fim = umAgendamento.FimPrevisto;
                umaOS.Traslado = umAgendamento.TrasladoPrevisto;

                Session["FuncAgendamento"] = umAgendamento.Funcionario;

                if (umUsuario.IsAdministrador)
                {
                    return View(umaOS);
                }
                else
                {
                    if (umAgendamento.Funcionario.Codigo == umUsuario.Funcionario.Codigo)
                    {
                        return View(umaOS);
                    }
                    else
                    {
                        return RedirectToAction("Index", new { st = "er" });
                    }
                }
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public ActionResult AlterarStatus(int id, FormCollection collection)
        {

            int idFucnionario = 0;

            try
            {
                if (ModelState.IsValid)
                {
                    Conexao.Ativar(true);
                    Usuario umUsuario = (Usuario)Session["UsuarioLogado"];
                    IAgendamentoNegocio umAgendamentoNegocio = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);

                    Agendamento umAgendamento = umAgendamentoNegocio.Consultar(id);
                    umAgendamento.DataConclusao = Convert.ToDateTime(collection[1].ToString()).ToString("dd/MM/yyyy");
                    umAgendamento.InicioConclusao = collection[2].ToString();
                    umAgendamento.FimConclusao = collection[3].ToString();
                    umAgendamento.TrasladoConclusao = collection[4].ToString();
                    umAgendamento.Status = new Status { Codigo = Convert.ToInt32(collection[5].ToString()) };
                    idFucnionario = umAgendamento.Funcionario.Codigo;
                    
                    if (umUsuario.IsAdministrador)
                    {
                        umAgendamentoNegocio.Editar(umAgendamento);
                        umAgendamento = umAgendamentoNegocio.Consultar(id);
                        this.ConfigurarEmail(umAgendamento);
                        return RedirectToAction("Index", new { st = "ok" });
                    }
                    else
                    {
                        if (umUsuario.Funcionario.Codigo == umAgendamento.Funcionario.Codigo)
                        {
                            umAgendamentoNegocio.Editar(umAgendamento);
                            umAgendamento = umAgendamentoNegocio.Consultar(id);
                            this.ConfigurarEmail(umAgendamento);
                            return RedirectToAction("Index", new { st = "ok" });
                        }
                        else
                        {
                            return RedirectToAction("Index", new { st = "er" });
                        }
                    }
                }
                else
                {
                    return RedirectToAction("Index", new { st = "iv" });
                }
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public ActionResult AlterarStatus(int id)
        {
            try
            {

                ViewBag.Title = "Alterar Status - Agendamentos";

                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];

                IAgendamentoNegocio umAgendamentoNegocio = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                Agendamento umAgendamento = umAgendamentoNegocio.Consultar(id);
                umAgendamento.DataConclusao = umAgendamento.DataPrevista;
                umAgendamento.InicioConclusao = umAgendamento.InicioPrevisto;
                umAgendamento.FimConclusao = umAgendamento.FimPrevisto;
                umAgendamento.TrasladoConclusao = umAgendamento.TrasladoPrevisto;


                List<SelectListItem> listaSelecionavel = CarregarStatus(umUsuario, umAgendamento);

                if (umUsuario.IsAdministrador)
                {
                    ViewBag.Status = listaSelecionavel;
                    return View(umAgendamento);
                }
                else
                {
                    if (umUsuario.Funcionario.Codigo == umAgendamento.Funcionario.Codigo)
                    {
                        ViewBag.Status = listaSelecionavel;
                        return View(umAgendamento);
                    }
                    else
                    {
                        return RedirectToAction("Index", new { st = "er" });
                    }
                }
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public ActionResult Delete(int id, Agendamento umAgendamento)
        {
            int IdFuncionario = 0;

            try
            {
                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];
                IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                umAgendamento.Funcionario = umUsuario.Funcionario;
                umAgendamento.Empresa = umUsuario.Funcionario.Empresa;
                umAgendamento.Filial = umUsuario.Funcionario.Filial;
                umAgendamento.Codigo = id;
                IdFuncionario = umAgendamento.Funcionario.Codigo;

                if (umUsuario.IsAdministrador)
                {
                    umAgendamentoBUS.Excluir(umAgendamento);
                }
                else
                {
                    if (umUsuario.Funcionario.Codigo == umAgendamento.Funcionario.Codigo)
                    {
                        umAgendamentoBUS.Excluir(umAgendamento);
                        ViewBag.Argumento = "ps";
                        ViewBag.Funcionario = IdFuncionario;
                        return RedirectToAction("Index", new { st = "ok" });
                    }
                    else
                    {
                        ViewBag.Argumento = "ps";
                        ViewBag.Funcionario = IdFuncionario;
                        return RedirectToAction("Index", new { st = "er" });
                    }
                }

                ViewBag.Argumento = "ps";
                ViewBag.Funcionario = IdFuncionario;
                return RedirectToAction("Index", new { st = "ok" });
            }
            catch
            {
                ViewBag.Argumento = "ps";
                ViewBag.Funcionario = IdFuncionario;
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        //
        // GET: /Agendamento/Delete/5

        public ActionResult Delete(int id)
        {
            try
            {

                ViewBag.Title = "Excluir - Agendamentos";

                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];

                ViewBag.Clientes = new ClienteBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Listar();
                ViewBag.Status = new StatusBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial).Listar();

                IAgendamentoNegocio umAgendamentoNegocio = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                Agendamento umAgendamento = umAgendamentoNegocio.Consultar(id);


                if (!umUsuario.IsAdministrador)
                {
                    if (umUsuario.Funcionario.Codigo == umAgendamento.Funcionario.Codigo)
                    {
                        return View(umAgendamento);
                    }

                    return RedirectToAction("Index", new { st = "er" });
                }

                return View(umAgendamento);
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public ActionResult Edit(int id, Agendamento umAgendamento)
        {
            try
            {
                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];
                IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                umAgendamento.Funcionario = new Funcionario();
                umAgendamento.Funcionario.Codigo = Convert.ToInt32(Session["IdFuncionario"].ToString());
                umAgendamento.Empresa = umUsuario.Funcionario.Empresa;
                umAgendamento.Filial = umUsuario.Funcionario.Filial;
                umAgendamento.Codigo = id;

                if (umUsuario.IsAdministrador)
                {
                    umAgendamentoBUS.Editar(umAgendamento);
                }
                else
                {
                    if (umUsuario.Funcionario.Codigo == umAgendamento.Funcionario.Codigo)
                    {
                        umAgendamentoBUS.Editar(umAgendamento);
                        return RedirectToAction("Index", new { st = "ok" });
                    }
                    else
                    {
                        return RedirectToAction("Index", new { st = "er" });
                    }
                }

                return RedirectToAction("Index", new { st = "ok" });
            }
            catch
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public ActionResult Create(AgendamentosConsultor umAgendamentoConsultor)
        {
            try
            {
                Conexao.Ativar(true);

                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];

                if (!umUsuario.IsAdministrador)
                {
                    umAgendamentoConsultor.Funcionario = umUsuario.Funcionario;
                }

                IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);

                if (umAgendamentoConsultor.Agendamentos[0].DataFim == null)
                {
                    umAgendamentoConsultor.Agendamentos[0].Cliente = umAgendamentoConsultor.Cliente;
                    umAgendamentoConsultor.Agendamentos[0].Funcionario = umAgendamentoConsultor.Funcionario;
                    umAgendamentoConsultor.Agendamentos[0].Status = new Status { Codigo = 1 };
                    umAgendamentoConsultor.Agendamentos[0].DataPrevista = umAgendamentoConsultor.Agendamentos[0].DataDe;
                    umAgendamentoBUS.Cadastrar(umAgendamentoConsultor.Agendamentos[0]);
                }
                else
                {

                    foreach (var umAgendamento in umAgendamentoConsultor.Agendamentos)
                    {
                        List<DateTime> diaSelecionado = ManipulaDias.PegarDias(umAgendamento);

                        if (diaSelecionado.Count != 0)
                        {
                            foreach (DateTime data in diaSelecionado)
                            {
                                umAgendamento.Cliente = umAgendamentoConsultor.Cliente;
                                umAgendamento.Funcionario = umAgendamentoConsultor.Funcionario;
                                umAgendamento.DataPrevista = data.ToString("dd/MM/yyyy");
                                umAgendamentoBUS.Cadastrar(umAgendamento);
                            }
                        }
                        else
                        {
                            return RedirectToAction("Index", new { st = "sd" });
                        }
                    }
                }

                Session["IdFuncionario"] = umAgendamentoConsultor.Funcionario.Codigo;
                return RedirectToAction("Index", new { st = "ok" });
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public JsonResult PegarAgendamentos(int Funcionarios)
        {
            try
            {
                Session["IdFuncionario"] = Funcionarios;
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];
                AgendamentoBUS umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                List<Agendamento> agendamentos = null;

                if (umUsuario.IsAdministrador)
                {
                    agendamentos = umAgendamentoBUS.Listar(Funcionarios);
                }
                else
                {
                    if (umUsuario.Funcionario.Codigo == Funcionarios)
                    {
                        agendamentos = umAgendamentoBUS.Listar(Funcionarios);
                    }
                }

                var jsonSerialiser = new JavaScriptSerializer();
                var json = jsonSerialiser.Serialize(agendamentos);
                return Json(json, JsonRequestBehavior.DenyGet);
            }
            catch (Exception ex)
            {
                return Json(null);
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }
        public void TesteConsultarAgendamento()
        {

            this.CriaInstancia();
            Empresa emp = new Empresa();
            emp.Codigo = "99";
            Filial fil = new Filial();
            fil.Codigo = "99";

            IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, emp, fil);
            Agendamento ag = umAgendamentoBUS.Consultar(1);
        }
        public void TestePesquisarAgendamento()
        {
            this.CriaInstancia();
            Empresa emp = new Empresa();
            emp.Codigo = "99";
            Filial fil = new Filial();
            fil.Codigo = "99";

            IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, emp, fil);
            List<Agendamento> lista = umAgendamentoBUS.Pesquisar(1);
        }
        public void TesteExcluirAgendamento()
        {
            Empresa emp = new Empresa();
            emp.Codigo = "99";
            Filial fil = new Filial();
            fil.Codigo = "99";

            Agendamento umAgendamento = new Agendamento();
            umAgendamento.Codigo = 2;
            umAgendamento.Empresa = emp;
            umAgendamento.Filial = fil;

            IAgendamentoNegocio umAgendamentoBUS = new AgendamentoBUS(Conexao.Instacia, emp, fil);
            umAgendamentoBUS.Excluir(umAgendamento);
        }