public ActionResult Convocacao(int idColaborador, DateTime inicio, DateTime termino, DateTime entrada, DateTime saida, string funcao, string rua, string numero,
                                       string complemento, string bairro, string cep, string cidade, string estado, int valorHora, DateTime confirmarAte, string titulo, string mensagem)
        {
            string perfil = "";
            int    IdEmpresa;

            try
            {
                perfil    = Session["Perfil"].ToString();
                IdEmpresa = Int32.Parse(Session["IdEmpresa"].ToString());
            }
            catch (Exception e)
            {
                return(RedirectToAction("Login", "Login"));
            }


            if (perfil == "adm")
            {
                TempData["ConvocacaoAdm"] = "true";
                return(View());
            }

            Convocacao convocacao = new Convocacao(idColaborador, IdEmpresa, inicio, termino, entrada.Hour, entrada.Minute, saida.Hour, saida.Minute, funcao, rua, numero, complemento, bairro, cep, cidade,
                                                   estado, valorHora, confirmarAte, titulo, mensagem);

            Conexao.Insert(convocacao);

            string query = @"SELECT * FROM Colaborador WHERE Id = {0}";

            query = string.Format(query, idColaborador);

            Colaborador colaborador = new Colaborador();

            colaborador = Conexao.Colaborador(query);
            try
            {
                titulo = titulo == "" ? "Convacação" : titulo;
                if (mensagem == "")
                {
                    mensagem = "Convocação";

                    EmailController.EnviarEmail(titulo, mensagem, colaborador.Email, null);



                    TempData["Convocacao"] = "true";


                    return(View());
                }
                else
                {
                    string mensagemcorpo = @"
<p>{0}</p>
<br/>
<p><strong>Função<strong>: {1}</p>
<p><strong>Período<strong></p>
<p><strong>Início:<strong>: {2}</p>
<p><strong>Término<strong>: {3}</p>
<p><strong>Horário<strong></p>
<p><strong>Entrada<strong>: {4}</p>
<p><strong>Saída<strong>: {5}</p>
<p><strong>Valor/Hora<strong>: {6}</p>
<p><strong>Confirma até<strong>: {7}</p>
<p><strong>Endereço<strong></p>
<p><strong>Rua<strong>: {8}</p>
<p><strong>Número<strong>: {9}</p>
<p><strong>Complemento<strong>: {10}</p>
<p><strong>Bairro<strong>: {11}</p>
<p><strong>CEP<strong>: {12}</p>
<p><strong>Cidade<strong>: {13}</p>
<p><strong>Estado<strong>: {14}</p>";

                    mensagemcorpo = string.Format(mensagemcorpo, mensagem, funcao, inicio, termino, entrada, saida, valorHora, confirmarAte, rua, numero,
                                                  complemento, bairro, cep, cidade, estado);

                    TempData["Convocacao"] = "true";
                    EmailController.EnviarEmail(titulo, mensagemcorpo, colaborador.Email, null);

                    return(View());
                }
            }
            catch (Exception e)
            {
                TempData["Convocacao_"] = "true";
                return(View());
            }
        }
        public ActionResult AceitarConvocacao(int idConvocacao)
        {
            string perfil        = "";
            string IdColaborador = "";

            try
            {
                perfil        = Session["Perfil"].ToString();
                IdColaborador = Session["IdColaborador"].ToString();
            }
            catch (Exception e)
            {
                return(RedirectToAction("Login", "Login"));
            }

            if (perfil == "adm")
            {
                TempData["AceitarRecusarConvocacaoAdm"] = "true";
                return(RedirectToAction("Convocacao", "Colaborador"));
            }


            string mensagem = "<p>Colaborador {0} aceitou a convocação para a função de {1}.</p>";
            string query    = @"select *
            from contrato ct inner join convocacao cv on ct.IdConvocacao = cv.Id where ct.ativo = 1 and cv.IdColaborador = {0}";

            string update = @"UPDATE Convocacao SET Status = 'Aceita' WHERE Id = {0}";

            update = string.Format(update, idConvocacao);

            query = string.Format(query, IdColaborador);
            List <Convocacao> Listconvocacao = new List <Convocacao>();

            Listconvocacao = Conexao.ListConvocacao(query);

            string queryEmpresa = string.Format("SELECT * FROM Empresa e INNER JOIN Convocacao cv ON e.Id = cv.IdEmpresa WHERE cv.Id = {0}",
                                                idConvocacao);
            Empresa empresa = new Empresa();

            empresa = Conexao.Empresa(queryEmpresa);


            string queryColaborador = string.Format("SELECT * FROM Colaborador cl INNER JOIN Convocacao cv ON cl.Id = cv.IdColaborador WHERE cv.Id = {0}",
                                                    idConvocacao);
            Colaborador colaborador = new Colaborador();

            colaborador = Conexao.Colaborador(queryColaborador);


            string query_ = @"select * from convocacao where  id = {0}";

            query_ = string.Format(query_, idConvocacao);
            Convocacao convocacao_ = new Convocacao();

            convocacao_ = Conexao.Convocacao(query_);

            mensagem = string.Format(mensagem, colaborador.Nome, convocacao_.Funcao);

            if (Listconvocacao.Count == 0)
            {
                Contrato contrato = new Contrato(idConvocacao, DateTime.Now, true, null);
                try
                {
                    Conexao.Update(update);
                    Conexao.Insert(contrato);

                    EmailController.EnviarEmail("Convocação aceita", mensagem, empresa.Email, null);
                    TempData["SucessoConvocacao"] = "true";
                    return(RedirectToAction("Convocacao", "Colaborador"));
                }
                catch (Exception e)
                {
                    TempData["ErroConvocacao"] = "true";
                }
            }



            foreach (Convocacao c in Listconvocacao)
            {
                if (c.Termino < convocacao_.Inicio)
                {
                    Contrato contrato = new Contrato(idConvocacao, DateTime.Now, true, null);
                    try
                    {
                        Conexao.Update(update);
                        Conexao.Insert(contrato);
                        EmailController.EnviarEmail("Convocação aceita", mensagem, empresa.Email, null);
                        TempData["SucessoConvocacao"] = "true";
                        return(RedirectToAction("Convocacao", "Colaborador"));
                    }
                    catch (Exception e)
                    {
                        TempData["ErroConvocacao"] = "true";
                    }
                }
                else
                {
                    if ((c.SaidaHora + 1) < convocacao_.EntradaHora)
                    {
                        Contrato contrato = new Contrato(idConvocacao, DateTime.Now, true, null);
                        try
                        {
                            Conexao.Update(update);
                            Conexao.Insert(contrato);
                            EmailController.EnviarEmail("Convocação aceita", mensagem, empresa.Email, null);
                            TempData["SucessoConvocacao"] = "true";
                            return(RedirectToAction("Convocacao", "Colaborador"));
                        }
                        catch (Exception e)
                        {
                            TempData["ErroConvocacao"] = "true";
                        }
                    }
                    else
                    {
                        if (c.EntradaHora > convocacao_.SaidaHora + 1)
                        {
                            Contrato contrato = new Contrato(idConvocacao, DateTime.Now, true, null);
                            try
                            {
                                Conexao.Update(update);
                                Conexao.Insert(contrato);
                                EmailController.EnviarEmail("Convocação aceita", mensagem, empresa.Email, null);
                                TempData["SucessoConvocacao"] = "true";
                                return(RedirectToAction("Convocacao", "Colaborador"));
                            }
                            catch (Exception e)
                            {
                                TempData["ErroConvocacao"] = "true";
                            }
                        }

                        TempData["ErroConvocacao"] = "true";
                        return(RedirectToAction("Convocacao", "Colaborador"));
                    }
                }
            }


            return(View());
        }
        public ActionResult ConvocarEmLote(HttpPostedFileBase file)
        {
            string perfil = "";
            int    IdEmpresa;
            string result;

            try
            {
                perfil    = Session["Perfil"].ToString();
                IdEmpresa = Int32.Parse(Session["IdEmpresa"].ToString());
            }
            catch (Exception e)
            {
                return(RedirectToAction("Login", "Login"));
            }


            if (perfil == "adm")
            {
                TempData["ConvocacaoAdm"] = "true";
                return(RedirectToAction("Convocacao", "Empresa"));
            }
            try
            {
                result = new StreamReader(file.InputStream).ReadToEnd();
            }
            catch (Exception e)
            {
                return(RedirectToAction("Convocacao", "Empresa"));
            }


            string[] resultArray = result.Split('\r', '\n');

            int y = 0;

            foreach (var x in resultArray)
            {
                if ((x != "") && (y != 0))
                {
                    string[] conteudo = x.Split(';');

                    int      idColaborador = Int32.Parse(conteudo[0].ToString());
                    DateTime inicio        = DateTime.Parse(conteudo[1].ToString());
                    DateTime termino       = DateTime.Parse(conteudo[2].ToString());
                    int      entradaHora   = Int32.Parse(conteudo[3].ToString());
                    int      entradaMinuto = Int32.Parse(conteudo[4].ToString());
                    int      saidaHora     = Int32.Parse(conteudo[5].ToString());
                    int      saidaMinuto   = Int32.Parse(conteudo[6].ToString());
                    string   funcao        = conteudo[7].ToString();
                    string   rua           = conteudo[8].ToString();
                    string   numero        = conteudo[9].ToString();
                    string   complemento   = conteudo[10].ToString();
                    string   bairro        = conteudo[11].ToString();
                    string   cep           = conteudo[12].ToString();
                    string   cidade        = conteudo[13].ToString();
                    string   estado        = conteudo[14].ToString();
                    double   valorHora     = Double.Parse(conteudo[15].ToString());
                    DateTime confirmarAte  = DateTime.Parse(conteudo[16].ToString());

                    Convocacao convocacao = new Convocacao(idColaborador, IdEmpresa, inicio, termino, entradaHora,
                                                           entradaMinuto, saidaHora, saidaMinuto, funcao, rua, numero, complemento, bairro, cep, cidade, estado, valorHora, confirmarAte,
                                                           "Convocação em lote", "Convocação em lote");

                    Conexao.Insert(convocacao);

                    string query = @"SELECT * FROM Colaborador WHERE Id = {0}";
                    query = string.Format(query, idColaborador);

                    Colaborador colaborador = new Colaborador();
                    colaborador = Conexao.Colaborador(query);
                    try
                    {
                        string mensagemcorpo = @"
<p>{0}</p>
<br/>
<p><strong>Função<strong>: {1}</p>
<p><strong>Período<strong></p>
<p><strong>Início<strong>: {2}</p>
<p><strong>Término<strong>: {3}</p>
<p><strong>Horário<strong></p>
<p><strong>Entrada<strong>: {4}:{5}</p>
<p><strong>Saída<strong>: {6}:{7}</p>
<p><strong>Valor/Hora<strong>: R$ {8}</p>
<p><strong>Confirma até<strong>: {9}</p>
<p><strong>Endereço<strong></p>
<p><strong>Rua<strong>: {10}</p>
<p><strong>Número<strong>: {11}</p>
<p><strong>Complemento<strong>: {12}</p>
<p><strong>Bairro<strong>: {13}</p>
<p><strong>CEP<strong>: {14}</p>
<p><strong>Cidade<strong>: {15}</p>
<p><strong>Estado<strong>: {16}</p>";

                        string entradaHora_   = "";
                        string entradaMinuto_ = "";
                        string saidaHora_     = "";
                        string saidaMinuto_   = "";

                        if (entradaHora < 9)
                        {
                            entradaHora_ = entradaHora.ToString() + "0";
                        }
                        if (entradaMinuto < 9)
                        {
                            entradaMinuto_ = entradaMinuto.ToString() + "0";
                        }
                        if (saidaHora < 9)
                        {
                            saidaHora_ = saidaHora.ToString() + "0";
                        }
                        if (saidaMinuto < 9)
                        {
                            saidaMinuto_ = saidaMinuto.ToString() + "0";
                        }


                        mensagemcorpo = string.Format(mensagemcorpo, colaborador.Nome + " você foi convocado. Segue informações:", funcao, inicio, termino,
                                                      entradaHora_, entradaMinuto_, saidaHora_, saidaMinuto_, valorHora, confirmarAte.Date, rua, numero, complemento, bairro, cep, cidade,
                                                      estado);

                        TempData["Convocacao"] = "true";
                        EmailController.EnviarEmail("Convocação", mensagemcorpo, colaborador.Email, null);
                    }
                    catch (Exception e)
                    {
                        TempData["Convocacao_"] = "true";
                    }
                }
                y++;
            }
            return(RedirectToAction("Convocacao", "Empresa"));
        }
        public ActionResult RecusarConvocacao(int idConvocacao)
        {
            string perfil = "";

            try
            {
                perfil = Session["Perfil"].ToString();
            }
            catch (Exception e)
            {
                return(RedirectToAction("Login", "Login"));
            }



            if (perfil == "adm")
            {
                TempData["AceitarRecusarConvocacaoAdm"] = "true";
                return(RedirectToAction("Convocacao", "Colaborador"));
            }

            string mensagem = "<p>Colaborador {0} recusou a convocação para a função de {1}.</p>";


            string queryEmpresa = string.Format("SELECT * FROM Empresa e INNER JOIN Convocacao cv ON e.Id = cv.IdEmpresa WHERE cv.Id = {0}",
                                                idConvocacao);
            Empresa empresa = new Empresa();

            empresa = Conexao.Empresa(queryEmpresa);


            string queryColaborador = string.Format("SELECT * FROM Colaborador cl INNER JOIN Convocacao cv ON cl.Id = cv.IdColaborador WHERE cv.Id = {0}",
                                                    idConvocacao);
            Colaborador colaborador = new Colaborador();

            colaborador = Conexao.Colaborador(queryColaborador);


            string query_ = @"select * from convocacao where  id = {0}";

            query_ = string.Format(query_, idConvocacao);
            Convocacao convocacao_ = new Convocacao();

            convocacao_ = Conexao.Convocacao(query_);


            string query = @"UPDATE Convocacao SET Status = 'Recusada' WHERE Id = {0}";

            query = string.Format(query, idConvocacao);

            mensagem = string.Format(mensagem, colaborador.Nome, convocacao_.Funcao);

            try
            {
                Conexao.Update(query);
                EmailController.EnviarEmail("Convocação recusada", mensagem, empresa.Email, null);
                TempData["SucessoRecusarConvocacao"] = "true";
                return(RedirectToAction("Convocacao", "Colaborador"));
            }
            catch (Exception)
            {
                TempData["ErroRecusarConvocacao"] = "true";
                return(RedirectToAction("Convocacao", "Colaborador"));
            }
        }