public bool ExcluirBL(Emprestimos instancia)
        {
            /*criar as regras de negocio*/
            EmprestimosDA varDA = new EmprestimosDA();

            return varDA.ExcluirDA(instancia);
        }
        public Int32 InserirBL(Emprestimos instancia)
        {
            /*criar as regras de negocio*/
            EmprestimosDA varDA = new EmprestimosDA();

            return varDA.InserirDA(instancia);
        }
        protected void btnRenovar_Click(object sender, EventArgs e)
        {
            EmprestimosBL empBL = new EmprestimosBL();
            Emprestimos emp = new Emprestimos();

            emp.Id = utils.ComparaIntComZero(hfId.Value);
            emp.PessoaId = utils.ComparaIntComZero(hfIdPessoa.Value);

            //a pessoa esta devendo?
            PessoasBL people = new PessoasBL();
            int fiado = people.EstaDevendo(emp.PessoaId);
            if (fiado > 0)
            {
                ExibirMensagem("Esta pessoa possui títulos em abeto com a Instituição e não pode renovar este exemplar!");
                txtExemplar.Focus();
                return;  //throw new Exception(); //tem um jeito melhor de sair do metodo?
            }

            //Quantidade máxima de renovações:
            int param = this.LerParametro(2, "B");
            if (param >= 0)
            {
                if (empBL.QtdRenovacoes(emp.Id) > param)
                {
                    ExibirMensagem("Este exemplar não pode mais ser renovado para esta pessoa!");
                    txtExemplar.Focus();
                    return;  //throw new Exception(); //tem um jeito melhor de sair do metodo?
                }
            }

            //chegou aqui? vamos renovar!
            //renovar consiste em editar o atual e setar a data de devolucao, e inserir um novo
            EmprestimoMovBL emovBL = new EmprestimoMovBL();
            EmprestimoMov mov = empBL.CarregaEmpNaoDevolvido(emp.Id);
            if (mov.Id > 0)
            {
                DateTime hoje = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                DateTime previsao = mov.DataPrevistaEmprestimo ?? hoje; //convertendo DateTime? para DateTime
                if (DateTime.Compare(previsao, hoje) > 0)
                {
                    mov.DataDevolucao = DateTime.Now;
                    emovBL.EditarBL(mov);
                    mov = new EmprestimoMov();
                    mov.EmprestimoId = emp.Id;
                    mov.DataEmprestimo = DateTime.Now;
                    param = this.LerParametro(4, "B");
                    DateTime lol = DateTime.Now;
                    if (param > 0)
                        lol = DateTime.Now.AddDays(param);
                    mov.DataPrevistaEmprestimo = lol;
                    mov.DataDevolucao = null;
                    emovBL.InserirBL(mov);
                }
                else
                {
                    ExibirMensagem("Exemplar atrasado não pode ser renovado!");
                    txtExemplar.Focus();
                    return;
                }
            }
            Response.Redirect("viewReserva.aspx");
        }
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            EmprestimosBL empBL = new EmprestimosBL();
            Emprestimos emp = new Emprestimos();

            emp.Id = utils.ComparaIntComZero(hfId.Value);

            emp.ExemplarId = utils.ComparaIntComZero(hfIdExemplar.Value);
            emp.PessoaId = utils.ComparaIntComZero(hfIdPessoa.Value);

            //a pessoa esta devendo?
            PessoasBL people = new PessoasBL();
            int fiado = people.EstaDevendo(emp.PessoaId);
            if (fiado > 0)
            {
                ExibirMensagem("Esta pessoa possui títulos em abeto com a Instituição e não pode emprestar este exemplar!");
                txtExemplar.Focus();
                return;  //throw new Exception(); //tem um jeito melhor de sair do metodo?
            }

            if (emp.Id > 0)
            { //editando == devolvendo
                if (this.Master.VerificaPermissaoUsuario("EDITAR"))
                {
                    empBL.EditarBL(emp);
                    //editar a movimentacao
                    EmprestimoMovBL emovBL = new EmprestimoMovBL();
                    EmprestimoMov mov = empBL.CarregaEmpNaoDevolvido(emp.Id);
                    if (mov.Id > 0)
                    {
                        DateTime hoje = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                        mov.DataDevolucao = hoje;
                        if (hoje > mov.DataPrevistaEmprestimo)
                        { //entregou atrasado? I shall have your money...

                           DateTime diaD = mov.DataPrevistaEmprestimo ?? hoje; //convertendo DateTime? para DateTime com opcao de setar valor padrao
                            TimeSpan span = hoje - diaD;
                            int multa = this.LerParametro(1, "F");
                            double valor = multa * span.TotalDays;

                            //cadastrar titulo da multa
                            TitulosBL titBL = new TitulosBL();
                            Titulos titulos = new Titulos();

                            titulos.Numero = titBL.NovoNumero();
                            titulos.Parcela = 1;
                            titulos.Pessoaid = emp.PessoaId;
                            titulos.DataEmissao = hoje;

                            int prazo = this.LerParametro(6, "F");
                            prazo = (prazo < 1 ? 7: prazo);
                            titulos.DataVencimento = hoje.AddDays(prazo);
                            titulos.Valor = Convert.ToDecimal(valor);
                            titulos.TipoDocumentoId = this.LerParametro(4, "F");
                            ExemplaresBL exb = new ExemplaresBL();
                            Exemplares ex = exb.LerBL(emp.ExemplarId);

                            titulos.Obs = "Titulo gerado automaticamente, devido ao atraso de " + Convert.ToInt16(span.TotalDays).ToString()
                                + " dia(s) na devolução do exemplar " + emp.Id.ToString() + " - " + ex.Obras.Titulo;

                            titulos.Portadorid = this.LerParametro(5, "F");
                            titulos.Tipo = "R";

                            titBL.InserirBL(titulos);
                        }
                        emovBL.EditarBL(mov);
                    }
                }
                else
                    Response.Redirect("~/erroPermissao.aspx?nomeUsuario=" + ((Label)Master.FindControl("lblNomeUsuario")).Text + "&usuOperacao=operação", true);
            }
            else
            { //inserindo == emprestando
                if (this.Master.VerificaPermissaoUsuario("INSERIR"))
                {

                    //Quantidade máxima de exemplares emprestado:
                    int param = this.LerParametro(1, "B");
                    if (param >= 0)
                    {
                        if (empBL.QuantosLivrosEmprestados(emp.PessoaId) > param)
                        {

                            ExibirMensagem(lblDesPessoa.Text + " já atingiu o limite máximo de empréstimos simultâneos.");
                            txtPessoa.Focus();
                            return; //                            throw new Exception(); //tem um jeito melhor de sair do metodo?
                        }
                    }

                    int meuid = empBL.InserirBL(emp);
                    //inserir a movimentacao
                    EmprestimoMovBL emovBL = new EmprestimoMovBL();
                    EmprestimoMov mov = new EmprestimoMov();
                    mov.EmprestimoId = meuid;
                    mov.DataDevolucao = null;
                    mov.DataEmprestimo = Convert.ToDateTime(txtdataInicio.Text);
                    mov.DataPrevistaEmprestimo = Convert.ToDateTime(txtdataPrevisao.Text);
                    emovBL.InserirBL(mov);
                }
                else
                    Response.Redirect("~/erroPermissao.aspx?nomeUsuario=" + ((Label)Master.FindControl("lblNomeUsuario")).Text + "&usuOperacao=operação", true);
            }

            // usuarios.DtInicio = Convert.ToDateTime(txtDtInicio.Text);
            Response.Redirect("viewReserva.aspx");
        }
        private List<Emprestimos> CarregarObjEmprestimos(SqlDataReader dr)
        {
            List<Emprestimos> emprestimos = new List<Emprestimos>();

            while (dr.Read())
            {
                Emprestimos emprestim = new Emprestimos();
                emprestim.Id = int.Parse(dr["ID"].ToString());
                emprestim.ExemplarId = int.Parse(dr["EXEMPLARID"].ToString());
                emprestim.PessoaId = int.Parse(dr["PESSOAID"].ToString());

                emprestimos.Add(emprestim);
            }

            return emprestimos;
        }
        public Int32 InserirDA(Emprestimos instancia)
        {
            SqlParameter[] paramsToSP = new SqlParameter[2];

            paramsToSP[0] = new SqlParameter("@exemplarid", instancia.ExemplarId);
            paramsToSP[1] = new SqlParameter("@pessoaid", instancia.PessoaId);

            try
            {
                DataSet ds = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                    CommandType.StoredProcedure, "stp_insert_emprestimos", paramsToSP);

                DataTable tabela = ds.Tables[0];

                int id = utils.ComparaIntComZero(tabela.Rows[0]["ID"].ToString());

                return id;
            }
            catch (Exception e)
            {
                return 0;
            }
        }
        public bool ExcluirDA(Emprestimos instancia)
        {
            SqlParameter[] paramsToSP = new SqlParameter[1];

            paramsToSP[0] = new SqlParameter("@id", instancia.Id);

            try
            {
                return (SqlHelper.ExecuteNonQuery(
                    ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                    CommandType.StoredProcedure, "stp_delete_emprestimos", paramsToSP) > 0);
            }
            catch (Exception e)
            {
                return false;
            }
        }
        protected void btnFinOperacoes_Click(object sender, EventArgs e)
        {
            EmprestimosBL empBL = new EmprestimosBL();
            EmprestimoMovBL emovBL = new EmprestimoMovBL();

            if (!empBL.VerificaQtdeMaximaEmprestimo(utils.ComparaIntComZero(hfIdPessoa.Value)))
            {
                ExibirMensagem("O cliente já atingiu o limite máximo de empréstimos permitido!");
                return;
            }

            if (Session["dtItensEmp"] != null)
                dtItensEmp = (DataTable)Session["dtItensEmp"];

            bool v_erro = false;

            foreach (DataRow linha in dtItensEmp.Rows)
            {
                Emprestimos emp = new Emprestimos();
                emp.PessoaId = utils.ComparaIntComZero(hfIdPessoa.Value);
                emp.ExemplarId = utils.ComparaIntComZero((linha["ID"].ToString()));

                emp.Id = empBL.InserirBL(emp);

                if (emp.Id > 0)
                {
                    EmprestimoMov mov = new EmprestimoMov();
                    mov.EmprestimoId = emp.Id;
                    mov.DataEmprestimo = DateTime.Now;
                    mov.DataPrevistaEmprestimo = Convert.ToDateTime((linha["DEVOLUCAO"].ToString()));
                    v_erro = emovBL.InserirBL(mov);
                    if (!v_erro)
                    {
                        if (empBL.ExcluirBL(emp))
                        {
                            ExibirMensagem("Não foi possível concluir o empréstimo. Contate o administrador do sistema.");
                            return;
                        }

                    }
                    else
                        if (chkReciboEmprestimo.Checked)
                            ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(),
                                         "WinOpen('/Relatorios/RelRecibos.aspx?emprestimoid=" + emp.Id + "','',600,850);", true);
                }
            }

            if (v_erro)
            {
                LimparCamposEmprestimo();
                LimparCamposRenovacao();
                ExibirMensagem("Empréstimo realizado com sucesso!");
            }
        }
        protected void btnRelatorio_Click(object sender, EventArgs e)
        {
            EmprestimoMovBL empMovBL = new EmprestimoMovBL();
            EmprestimoMov empMov = new EmprestimoMov();
            EmprestimosBL empBL = new EmprestimosBL();
            Emprestimos emp = new Emprestimos();

            string PaginaRelatorio = "";

            if (ddlTipo.SelectedValue == "A")
            {
                Session["ldsRel"] = empMovBL.PesquisarRelatorioBL(txtAssociado.Text, txtCodigo.Text, txtDataRetiradaIni.Text, txtDataRetiradaFin.Text, txtDevolucaoIni.Text, txtDevolucaoFim.Text, ddlStatus.SelectedValue.ToString(), "desc").Tables[0];
                PaginaRelatorio = "/Relatorios/RelEmprestimoAcumulado.aspx?Acumulado=Mais&";
            }
            else if (ddlTipo.SelectedValue == "B")
            {
                Session["ldsRel"] = empMovBL.PesquisarRelatorioBL(txtAssociado.Text, txtCodigo.Text, txtDataRetiradaIni.Text, txtDataRetiradaFin.Text, txtDevolucaoIni.Text, txtDevolucaoFim.Text, ddlStatus.SelectedValue.ToString(), "asc").Tables[0];
                PaginaRelatorio = "/Relatorios/RelEmprestimoAcumulado.aspx?Acumulado=Menos&";
            }
            else
            {
                Session["ldsRel"] = empMovBL.PesquisarRelatorioBL(txtAssociado.Text, txtCodigo.Text, txtDataRetiradaIni.Text, txtDataRetiradaFin.Text, txtDevolucaoIni.Text, txtDevolucaoFim.Text, ddlStatus.SelectedValue.ToString()).Tables[0];
                PaginaRelatorio = "/Relatorios/RelEmprestimos.aspx?";
            }
            if (((DataTable)Session["ldsRel"]).Rows.Count != 0)
            {                                                                                                                                                                                                                                                                                                                                                                                                                                           //l//c
                ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "WinOpen('" + PaginaRelatorio + "PessoaId=" + txtAssociado.Text + "&obraId=" + txtCodigo.Text + "&DataRetiradaIni=" + txtDataRetiradaIni.Text + "&DataRetiradaFim=" + txtDataRetiradaFin.Text + "&DevolucaoFim=" + txtDevolucaoFim.Text + "&DevolucaoIni=" + txtDevolucaoIni.Text + "&Status=" + ddlStatus.SelectedValue.ToString() + "','',600,1125);", true);
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "alert('Sua pesquisa não retornou dados.');", true);
            }
        }