private void IncluirFuncionario(FuncionarioDTO funcionario)
 {
     Funcionarios.Add(funcionario);
     rptFuncionarios.DataSource = Funcionarios.OrderByDescending(f => f.ObterNumeroSequencial);
     rptFuncionarios.DataBind();
 }
        protected void IncluindoNovoFuncionario(object sender, EventArgs e)
        {
            try
            {
                if (!NHibernateSessionPerRequest.GetCurrentSession().Contains(Departamento))
                    NHibernateSessionPerRequest.GetCurrentSession().Refresh(Departamento);

                if (ddlCentrosDeCusto.SelectedValue == "0")
                {
                    Notificacao = "É obrigatório selecionar um centro de custo para incluir um novo funcionário";
                    EnviarMensagem();
                    return;
                }
                //if (this.Departamento.CentrosDeCusto.Where(c => c.CodigoDoCentroDeCusto == ddlCentrosDeCusto.SelectedValue).FirstOrDefault().Funcionarios != null &&
                //    this.Departamento.CentrosDeCusto.Where(c => c.CodigoDoCentroDeCusto == ddlCentrosDeCusto.SelectedValue).FirstOrDefault().Funcionarios.Any(f => f.Matricula == txtMatricula.Text))
                //{
                //    Notificacao = "Não é possivel adicionar um funcionário com o mesmo numero de matricula.";
                //    EnviarMensagem();
                //    return;
                //}
                if (string.IsNullOrEmpty(txCargo.Text))
                {
                    Notificacao = "Não é possivel adicionar um funcionário sem cargo.";
                    EnviarMensagem();
                    return;
                }

                double salario = 0;
                if (!string.IsNullOrEmpty(txtSalario.Text))
                    salario = double.Parse(txtSalario.Text.Replace(".", ""));
                else
                {
                    Notificacao = "Salário é obrigatório";
                    EnviarMensagem();
                    return;
                }

                int dataAdmissao = 0;
                if (!string.IsNullOrEmpty(ddlDataDeAdmissao.SelectedItem.Value))
                    dataAdmissao = int.Parse(ddlDataDeAdmissao.SelectedItem.Value);
                else
                {
                    Notificacao = "Data de admissão é obrigatória";
                    EnviarMensagem();
                    return;
                }

                if (txtNome.SelectedValue == "0")
                {
                    Notificacao = "Selecione motivo da contratacão";
                    EnviarMensagem();
                    return;
                }
                if (DivVaga.Visible == true && ddlVaga.SelectedItem.Value == "0")
                {

                    Notificacao = "Não é possivel repor um funcionario sem informar a vaga.";
                    EnviarMensagem();
                    return;
                }

                if (DivVaga.Visible == true && Funcionarios.Where(f => f.NumeroDeVaga == int.Parse(ddlVaga.SelectedItem.Value)).Count() > 1)
                {
                    Notificacao = "Esta vaga não esta disponivel.";
                    EnviarMensagem();
                    return;
                }
                if (DivVaga.Visible == true && Funcionarios.FirstOrDefault(f => f.NumeroDeVaga == int.Parse(ddlVaga.SelectedItem.Value) && f.Demitido) == null)
                {
                    Notificacao = "Não existe vaga disponível para reposição neste centro de custo";
                    EnviarMensagem();
                    return;
                }

                var funcionarioProximaMatricula =
                    Funcionarios.Where(f => !string.IsNullOrEmpty(f.InicialNumeroMatricula))
                        .OrderByDescending(f => int.Parse(f.Matricula.Substring(1))).FirstOrDefault();
                int countFuncionarios = Funcionarios.Where(f => !string.IsNullOrEmpty(f.InicialNumeroMatricula) && f.InicialNumeroMatricula == "N").Count();
                var funcionario = new FuncionarioDTO()
                {
                    Hospital = Departamento.Nome,
                    Nome = txtNome.SelectedValue.ToUpper(),
                    Matricula = txtNome.SelectedValue == "Aumento de Quadro" ? funcionarioProximaMatricula != null ? "N" + (Convert.ToInt32(funcionarioProximaMatricula.Matricula.Substring(1)) + 1) : "N1" :
                    funcionarioProximaMatricula != null ? "R" + (Convert.ToInt32(funcionarioProximaMatricula.Matricula.Substring(1)) + 1) : "R1",
                    InicialNumeroMatricula = txtNome.SelectedValue == "Aumento de Quadro" ? "N" : "R",
                    DataDeAdmissao = dataAdmissao,
                    SalarioBase = salario,
                    Cargo = txCargo.Text.ToUpper(),
                    AnoAdmissao = 2014,
                    NumeroDeVaga = DivVaga.Visible == false ?
                    countFuncionarios > 0 ?
                    Funcionarios.Where(f => !string.IsNullOrEmpty(f.InicialNumeroMatricula) && f.InicialNumeroMatricula == "N").OrderByDescending(f => f.NumeroDeVaga).FirstOrDefault().NumeroDeVaga + 1 :
                    60000
                    : int.Parse(ddlVaga.SelectedItem.Value)
                };

                IncluirFuncionario(funcionario);

            }
            catch (Exception ex)
            {
                Notificacao = ex.Message;
            }
            //if (string.IsNullOrEmpty(Notificacao))
            //    SalvarOrcamento();

            EnviarMensagem();
        }