public virtual bool PodeDispensarSemAutorizacao(ItemDispensacao itemDispensacao)
 {
     Dispensacao ultima = UltimaDispensacaoMedicamento(itemDispensacao.LoteMedicamento.Medicamento.Codigo);
     return ultima.DiasDecorridos() > TempoEsperaNovaDispensacao(itemDispensacao.LoteMedicamento.Medicamento.Codigo);
 }
 //protected void OnPageIndexChanging_Paginacao(object sender, GridViewPageEventArgs e)
 //{
 //    AtualizaGridDispensacao(RetornaItensDispensar());
 //    GridView_MedicamentosDispensar.PageIndex = e.NewPageIndex;
 //    GridView_MedicamentosDispensar.DataBind();
 //}
 private IList<ItemDispensacao> IgualaQuantidadePrescritaMedicamento(IList<ItemDispensacao> lid, ItemDispensacao ultimoitemalterado)
 {
     //CORRIGUR AO USAR O METODO
     //foreach (ItemDispensacao temp in lid)
     //{
     //    if (temp.LoteMedicamento.Medicamento.Codigo == ultimoitemalterado.LoteMedicamento.Medicamento.Codigo)
     //        temp.QtdPrescrita = ultimoitemalterado.QtdPrescrita;
     //}
     return lid;
 }
 public virtual ItemReceitaDispensacao LocalizarPrescricao(ItemDispensacao itemDispensacao)
 {
     return ItensPrescritos.Find(x => x.Medicamento.Codigo == itemDispensacao.LoteMedicamento.Medicamento.Codigo);
 }
 protected ItemDispensacao CriaItemDispensacao()
 {
     ItemDispensacao item = new ItemDispensacao();
     item.LoteMedicamento = Factory.GetInstance<ILoteMedicamento>().BuscarPorCodigo<LoteMedicamento>(int.Parse(DropDownList_Medicamento.SelectedValue));
     item.QtdDias = int.Parse(TextBox_Dias.Text);
     item.QtdDispensada = int.Parse(TextBox_QuantidadeDispensada.Text);
     item.Observacao = tbxObservacao.Text;
     return item;
 }
 private void AdicionaItemDispensar(ItemDispensacao id)
 {
     IList<ItemDispensacao> lid = RetornaItensDispensar();
     lid.Add(id);
     Session["itensdispensar"] = lid;
 }
        /// <summary>
        /// Função que dá baixa no estoque e atualiza os seus valores
        /// </summary>
        private void DarBaixaEstoque(Estoque estoque, int qtd_atual, int qtd_anterior, ItemDispensacao item, string acao)
        {
            //EstoqueBsn estoqueBsn = new EstoqueBsn();
            IEstoque iestoque = Factory.GetInstance<IEstoque>();
            estoque.QuantidadeEstoque = estoque.QuantidadeEstoque - (qtd_atual - qtd_anterior);

            try
            {
                //estoqueBsn.AtualizarEstoque(estoque, item, acao);
                iestoque.AtualizarEstoque(estoque, item, acao);

                if (acao == "inserir")
                    AtualizaMedicamentosMesmoLote(item);
            }
            catch (Exception e)
            {
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('O medicamento não pôde ser atualizado! Tente novamente mais tarde!');", true);
            }
        }
        protected bool CalculoTetoReceita(long co_receita, int co_medicamento, ItemDispensacao item)
        {
            int qtdjadispensada = Factory.GetInstance<IDispensacao>().QuantidadeDispensadaMedicamentoReceita(long.Parse(ViewState["co_receita"].ToString()), item.LoteMedicamento.Medicamento.Codigo);
            int qtditensseremdispensados = RetornaItensDispensar().Where(p => p.LoteMedicamento.Medicamento.Codigo == item.LoteMedicamento.Medicamento.Codigo).Sum(p => p.QtdDispensada);

            //Corrigir quando utilizar o método
            //if (qtditensseremdispensados + qtdjadispensada + item.QtdDispensada > item.QtdPrescrita)
            if (false)
            {   //Corrigir quando utilizar o método
                //ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Usuário, este medicamento não pode ser colocado na lista de itens a serem dispensados, pois a quantidade prescrita para o medicamento nesta receita chegou ao seu limite: " + item.QtdPrescrita + " unidades. Quantidade já dispensada = " + qtdjadispensada + ". Quantidade a ser dispensada = " + (qtditensseremdispensados + item.QtdDispensada) + ".');", true);
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('CORRIGIR ALERT');", true);
                return true;
            }
            else
                return false;
        }
        /// <summary>
        /// Constrõe o objeto medicamento de acordo com os dados passados
        /// </summary>
        /// <param name="itensDispensacao"></param>
        /// <param name="qtd_anterior"></param>
        private void AlterarDadosMedicamento(ItemDispensacao itensDispensacao, int qtd_anterior)
        {
            bool dar_baixa = false;

            try
            {
                //EstoqueBsn estoqueBsn = new EstoqueBsn();
                IEstoque iestoque = Factory.GetInstance<IEstoque>();
                Estoque estoque = iestoque.BuscarItemEstoquePorFarmacia<Estoque>(int.Parse(Request["farmacia"].ToString()), itensDispensacao.LoteMedicamento.Codigo);//estoqueBsn.buscarPorFarmaciaElote(int.Parse(Request["farmacia"].ToString()), itensDispensacao.LoteMedicamento.Codigo);

                if (int.Parse(tbxQuantidadeDispensada.Text) > qtd_anterior)
                {
                    int desconto_estoque = int.Parse(tbxQuantidadeDispensada.Text) - qtd_anterior;

                    if (desconto_estoque > estoque.QuantidadeEstoque)
                    {
                        DesbloquearPanelAtualizacao();
                        ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('A quantidade disponível neste estoque é igual = " + estoque.QuantidadeEstoque.ToString() + " unidades. Por favor, informe uma quantidade menor para este medicamento.');", true);
                    }
                    else
                        dar_baixa = true;
                }
                else
                    dar_baixa = true;

                if (dar_baixa)
                {
                    DarBaixaEstoque(estoque, int.Parse(tbxQuantidadeDispensada.Text), qtd_anterior, itensDispensacao, "inserir");

                    LimparCampos();
                    CarregaItensDispensacao(DateTime.Parse(Request["data"].ToString()), int.Parse(Request["receita"].ToString()), int.Parse(Request["farmacia"].ToString()));
                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Medicamento alterado com sucesso!');", true);
                }
            }
            catch (Exception f)
            {
                DesbloquearPanelAtualizacao();
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('O medicamento não pôde ser alterado no momento. Por favor, tente mais tarde.');", true);
            }
        }
        /// <summary>
        /// Salva o medicamento de acordo com os dados informados.
        /// </summary>
        /// <param name="item"></param>
        private void AtualizaMedicamentosMesmoLote(ItemDispensacao item)
        {
            //ItensDispensacaoBsn itemBsn = new ItensDispensacaoBsn();
            IDispensacao idispensacao = Factory.GetInstance<IDispensacao>();
            IFarmacia ifarmacia = Factory.GetInstance<IFarmacia>();
            IList<ItemDispensacao> lista = idispensacao.BuscarItensPorAtendimentoEmedicamento<ItemDispensacao>(int.Parse(Request["receita"].ToString()), int.Parse(Request["farmacia"].ToString()), item.LoteMedicamento.Medicamento.Codigo);//itemBsn.BuscarPorAtendimentoEmedicamento(int.Parse(Request["receita"].ToString()), int.Parse(Request["farmacia"].ToString()), item.LoteMedicamento.Medicamento.Codigo);

            //===========COMENTÁRIO===========//
            /*
             Atualizando a quantidade de dias e quantidade prescrita
             para medicamentos iguais de lotes diferentes. A data
             neste caso não é importante, já que o que importa
             é procedência do medicamento.
            */

            foreach (ItemDispensacao i in lista)
            {
                i.QtdDias = item.QtdDias;
                i.QtdPrescrita = item.QtdPrescrita;
                //itemBsn.Salvar(i);
                ifarmacia.Salvar(i);
            }
        }
        /// <summary>
        /// Verifica se é possível liberar o medicamento de acordo com as regras de negócio
        /// </summary>
        /// <param name="itens"></param>
        private string VerificarLiberacaoMedicamento(ItemDispensacao item_disp, List<ItemDispensacao> itens_jd)
        {
            string resultado = string.Empty;

            //=========================================================================================
            //Inicialmente a liberação do medicamento está correta
            resultado = "Codigo_3 - O medicamento: " + item_disp.LoteMedicamento.Medicamento.Nome +
            " foi liberado no dia: " + DateTime.Today.ToString("dd/MM/yyyy") +
            ". A sua próxima dispensação deve ser no dia: " +
            DateTime.Today.AddDays(double.Parse(item_disp.QtdDias.ToString()) - double.Parse(getDias(item_disp.QtdDias).ToString())).ToString("dd/MM/yyyy") + ".";
            //=========================================================================================

            if (itens_jd != null)
            {
                Medicamento i = item_disp.LoteMedicamento.Medicamento;

                //=========================================================================================
                //Verifica se o paciente já ultrapassou a cota dele
                var cota_medicamento =
                    (from m in itens_jd
                     where m.LoteMedicamento.Medicamento.Codigo == i.Codigo
                     group m by new { m.LoteMedicamento.Medicamento.Codigo, m.QtdPrescrita }
                         into g
                         select new
                         {
                             CodigoMedicamento = g.Key.Codigo,
                             QtdPrescrita = g.Key.QtdPrescrita,
                             TotalDispensada = g.Sum(m => m.QtdDispensada)
                         }
                    );

                foreach (var cota in cota_medicamento)
                {
                    if (cota.TotalDispensada >= cota.QtdPrescrita)
                    {
                        resultado = "Codigo_1 - A cota para este medicamento foi atingida." +
                        " A quantidade dispensada até o momento foi de: " +
                        cota.TotalDispensada.ToString() + " unidades. Sendo que a sua quantidade prescrita (total) é de: " + cota.QtdPrescrita.ToString() + " unidades.";
                        return resultado;
                    }
                }
                //=========================================================================================

                //(Pesquisa do medicamento no mesmo dia)
                var consulta_um = (from m in itens_jd
                                   where m.DataAtendimento.ToString("dd/MM/yyyy")
                                       == DateTime.Today.ToString("dd/MM/yyyy") &&
                                       m.LoteMedicamento.Medicamento.Codigo == i.Codigo
                                   select m);

                IEnumerable<ItemDispensacao> lista_um = consulta_um.Cast<ItemDispensacao>();
                if (lista_um != null && lista_um.Count() > 0)
                {
                    foreach (ItemDispensacao item in lista_um)
                    {
                        //=========================================================================================
                        if (item.Farmacia.Codigo != int.Parse(ddlFarmacia.SelectedValue.ToString())) //Verifica se o medicamento já foi liberado no mesmo dia em farmácias diferentes
                            return "Codigo_1 - O medicamento: " + item_disp.LoteMedicamento.Medicamento.Nome + " já foi liberado " +
                            "no dia: " + item.DataAtendimento.ToString("dd/MM/yyyy") + " na farmácia " + item.Farmacia.Nome;
                        else
                            if (item.LoteMedicamento.Codigo == item_disp.LoteMedicamento.Codigo) //Verifica se o medicamento já foi liberado no mesmo dia, na mesma farmácia e mesmo lote de medicamento
                                return "Codigo_1 - O medicamento: " + item_disp.LoteMedicamento.Medicamento.Nome + " já foi liberado " +
                                "do lote escolhido na data de hoje. Por favor escolha outro lote.";
                        //=========================================================================================
                    }
                }

                //=========================================================================================
                //Consulta todas as dispensações diferentes do dia de hoje para verificar se é possível liberar,
                //liberar com observação de adiantamento ou 'barrar' o medicamento para o paciente
                var consulta =
                    (from m in itens_jd
                     where m.LoteMedicamento.Medicamento.Codigo == i.Codigo
                     && m.DataAtendimento ==
                    (from mi in itens_jd
                     where mi.LoteMedicamento.Medicamento.Codigo == i.Codigo
                     && mi.DataAtendimento.ToString("dd/MM/yyyy") != DateTime.Today.ToString("dd/MM/yyyy")
                     select mi.DataAtendimento == null ? new Nullable<DateTime>() : mi.DataAtendimento).Max()
                     select m);

                IEnumerable<ItemDispensacao> lista_itens = consulta.Cast<ItemDispensacao>();

                if (lista_itens.Count() > 0)
                {
                    foreach (ItemDispensacao item in lista_itens)
                    {
                        int subtrair = getDias(item.QtdDias);

                        double d = double.Parse(subtrair.ToString());

                        DateTime data = item.DataAtendimento.AddDays(double.Parse(item.QtdDias.ToString()) - d);

                        TimeSpan diff = data.Subtract(DateTime.Today);

                        //var sub_consulta =
                        //    (from m in itens_jd
                        //     where m.LoteMedicamento.Medicamento.Codigo == i.Codigo
                        //     group m by new { m.LoteMedicamento.Medicamento.Codigo, m.QtdPrescrita }
                        //         into g
                        //         select new
                        //         {
                        //             CodigoMedicamento = g.Key.Codigo,
                        //             QtdPrescrita = g.Key.QtdPrescrita,
                        //             TotalDispensada = g.Sum(m => m.QtdDispensada)
                        //         });

                        //foreach (var tipo in sub_consulta)
                        //{
                        //    if (tipo.TotalDispensada >= tipo.QtdPrescrita)
                        //    {
                        //        resultado = "Codigo_1 - A cota para este medicamento foi atingida." +
                        //        " A quantidade dispensada até o momento foi de: " +
                        //        tipo.TotalDispensada.ToString() + " unidades. Sendo que a sua quantidade prescrita (total) é de: " + tipo.QtdPrescrita.ToString() + " unidades.";
                        //        return resultado;
                        //    }
                        //}

                        if (diff.Days > 5)
                        {
                            resultado = "Codigo_1 - O medicamento: " + item.LoteMedicamento.Medicamento.Nome +
                            " não pode ser dispensado. Ele foi liberado no dia: " +
                            item.DataAtendimento.ToString("dd/MM/yyyy") +
                            " na farmácia: " + item.Farmacia.Nome + ". A quantidade dispensada " +
                            "nesta data foi de: " + item.QtdDispensada.ToString() + " unidades." +
                            " A sua próxima dispensação deve ser no dia: " + data.ToString("dd/MM/yyyy") + ".";
                            return resultado;
                        }
                        else
                            if (diff.Days > 0 && diff.Days <= 5)
                            {
                                resultado = "Codigo_2 - O medicamento: " + item.LoteMedicamento.Medicamento.Nome +
                                " foi liberado no dia: " + item.DataAtendimento.ToString("dd/MM/yyyy") +
                                " na farmácia: " + item.Farmacia.Nome + ". A quantidade dispensada " +
                                "nesta data foi de: " + item.QtdDispensada.ToString() + " unidades." +
                                " A sua próxima dispensação deve ser no dia: " +
                                data.ToString("dd/MM/yyyy") + ". Para dispensá-lo agora, preencha o campo de Observação a seguir.";
                                return resultado;
                            }
                            else
                            {
                                resultado = "Codigo_3 - O medicamento: " + item.LoteMedicamento.Medicamento.Nome +
                                " foi liberado no dia: " + DateTime.Today.ToString("dd/MM/yyyy") +
                                ". A sua próxima dispensação deve ser no dia: " +
                                DateTime.Today.AddDays(double.Parse(item_disp.QtdDias.ToString()) - double.Parse(getDias(item_disp.QtdDias).ToString())).ToString("dd/MM/yyyy") + ".";
                                return resultado;
                            }
                    }
                }
            }

            return resultado;
        }
        /// <summary>
        /// Preenche os dados do medicamento temporário escolhido no quadro disponível 
        /// para visualização do usuário.
        /// </summary>
        /// <param name="item"></param>
        /// <param name="estoque"></param>
        /// <param name="index_item_dispensacao"></param>
        private void PreencheDadosMedicamento(ItemDispensacao item, Estoque estoque, int index_item_dispensacao)
        {
            lbMedicamentoEscolhido.Text = item.LoteMedicamento.Medicamento.Nome + " - Lote: " + item.LoteMedicamento.Lote;
            tbxQuantidadeDias.Text = item.QtdDias.ToString();
            tbxQuantidadePrescrita.Text = item.QtdPrescrita.ToString();
            tbxQuantidadeDispensada.Text = item.QtdDispensada.ToString();

            Session["estoque_escolhido"] = estoque;

            ViewState["index_item_alteracao"] = index_item_dispensacao.ToString();
            btn_Alterar_Medicamento.Visible = true;

            if (!string.IsNullOrEmpty(item.Observacao))
            {
                lbConteudo.Text = "Observação para Adiantamento de Entrega.";
                tabelaObservacao.Visible = true;
                tbxObservacao.Text = item.Observacao;
            }
            else
                tabelaObservacao.Visible = false;

            btn_Salvar_Medicamento.Visible = false;
        }
        /// <summary>
        /// Função que dá baixa no estoque e insere o item com seus respectivos valores.
        /// </summary>
        /// <returns></returns>
        private void DarBaixaEstoque(ItemDispensacao valor_novo, ItemDispensacao valor_antigo, int index_medicamento, string acao)
        {
            //EstoqueBsn estoqueBsn = new EstoqueBsn();
            IEstoque iestoque = Factory.GetInstance<IEstoque>();
            //Estoque estoque = estoqueBsn.buscarPorFarmaciaElote(valor_novo.Farmacia.Codigo, valor_novo.LoteMedicamento.Codigo);
            Estoque estoque = iestoque.BuscarItemEstoquePorFarmacia<Estoque>(valor_novo.Farmacia.Codigo, valor_novo.LoteMedicamento.Codigo);

            estoque.QuantidadeEstoque = estoque.QuantidadeEstoque - (valor_novo.QtdDispensada - valor_antigo.QtdDispensada);

            try
            {
                //estoqueBsn.AtualizarEstoque(estoque, valor_novo, acao);
                iestoque.AtualizarEstoque(estoque, valor_novo, acao);
                BuscarNaListaTemporaria(valor_novo, index_medicamento, acao);

                ApagarDadosMedicamento();
                DesbloqueiaConteudo();
                CarregaItensDispensacao();
            }
            catch (Exception e)
            {
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('No momento, não foi possível atualizar o estoque para este medicamento! Por favor, tente novamente.');", true);
                throw e;
            }
            finally
            {
                AtualizaMedicamentosUsuario();
            }
        }
        /// <summary>
        /// Caso o medicamento escolhido (sempre o último colocado na lista) já exista na lista temporária
        /// e pertença a um lote diferente, haverá uma alteração em todos os itens da lista com o mesmo nome.
        /// </summary>
        /// <param name="estoque"></param>
        private void BuscarNaListaTemporaria(ItemDispensacao item, int index, string acao)
        {
            if (Session["itens_dispensacao"] != null && Session["itens_dispensacao"] is List<ItemDispensacao>)
            {
                List<ItemDispensacao> itens_dispensacao = (List<ItemDispensacao>)Session["itens_dispensacao"];
                List<ItemDispensacao> itens_dispensacao_temp = new List<ItemDispensacao>();

                foreach (ItemDispensacao item_f in itens_dispensacao)
                {
                    if (item_f.LoteMedicamento.Medicamento.Codigo == item.LoteMedicamento.Medicamento.Codigo)
                    {
                        item_f.QtdDias = item.QtdDias;
                        item_f.QtdPrescrita = item.QtdPrescrita;
                    }
                    itens_dispensacao_temp.Add(item_f);
                }

                if (acao != "remover")
                {
                    if (index < 0)
                        itens_dispensacao_temp.Add(item);
                    else
                        itens_dispensacao_temp[index] = item;
                }
                else
                    itens_dispensacao_temp.RemoveAt(index);

                Session["itens_dispensacao"] = itens_dispensacao_temp;
            }
            else
            {
                List<ItemDispensacao> itens_dispensacao = new List<ItemDispensacao>();
                itens_dispensacao.Add(item);
                Session["itens_dispensacao"] = itens_dispensacao;
            }
        }
        /// <summary>
        /// Função que salva o medicamento em uma lista temporária para cadastrá-lo posteriormente.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_Salvar_Medicamento_click(object sender, EventArgs e)
        {
            IFarmacia ifarmacia = Factory.GetInstance<IFarmacia>();
            IDispensacao idispensacao = Factory.GetInstance<IDispensacao>();
            if (Session["estoque_escolhido"] != null && Session["estoque_escolhido"] is Estoque)
            {
                string acao = string.Empty;

                if (sender.GetType() == typeof(Button))
                {
                    Button bt = (Button)sender;
                    acao = bt.CommandArgument;
                }
                else
                    if (sender.GetType() == typeof(string))
                        acao = sender.ToString();

                Estoque estoque = (Estoque)Session["estoque_escolhido"];

                if (int.Parse(tbxQuantidadeDispensada.Text) >= 300 && (ViewState["quantidade_liberada"] == null || (ViewState["quantidade_liberada"] != null && ViewState["quantidade_liberada"].ToString() == "não"))) //Bloqueia a quantidade para confirmação
                    BloquearPanelQuantidade(acao);
                else
                {
                    ViewState.Remove("quantidade_liberada");

                    if ((acao == "c_inserir" || acao == "c_confirmar_observacao") &&
                        estoque.QuantidadeEstoque < int.Parse(tbxQuantidadeDispensada.Text.ToString())) ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('A quantidade do estoque para o lote deste medicamento é insuficiente! Por favor, informe uma quantidade menor ou escolha outro lote.');", true);
                    else
                    {
                        ItemDispensacao item = new ItemDispensacao();
                        //DispensacaoBsn dispensacaoBsn = new DispensacaoBsn();

                        item.DataAtendimento = DateTime.Today;
                        //item.Dispensacao = ifarmacia.BuscarPorCodigo<Vida.Model.ReceitaDispensacao>(int.Parse(Request["id_dispensacao"]));//dispensacaoBsn.BuscarPorCodigo<Dispensacao>(int.Parse(Request["id_dispensacao"].ToString()));
                        item.LoteMedicamento = estoque.LoteMedicamento;
                        item.Farmacia = estoque.Farmacia;
                        item.QtdDias = int.Parse(tbxQuantidadeDias.Text.ToString());
                        item.QtdDispensada = int.Parse(tbxQuantidadeDispensada.Text.ToString());
                        item.QtdPrescrita = int.Parse(tbxQuantidadePrescrita.Text.ToString());

                        if (tabelaObservacao.Visible == true)
                            item.Observacao = tbxObservacao.Text.ToString();

                        if (acao == "c_inserir")
                        {
                            string resultado = string.Empty;
                            resultado = VerificarLiberacaoMedicamento(item, (List<ItemDispensacao>)Session["itens_dispensacao_definitivo"]);

                            if (resultado.Contains("Codigo_1")) //Não pode pegar o medicamento por algum motivo
                            {
                                resultado = resultado.Replace("Codigo_1 - ", "");
                                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('" + resultado + "');", true);
                            }
                            else
                                if (resultado.Contains("Codigo_2")) //Habilitando propriedade para pegar medicamento com observação
                                {
                                    resultado = resultado.Replace("Codigo_2 - ", "");
                                    btn_Confirmar_Medicamento.Visible = true;
                                    tabelaObservacao.Visible = true;
                                    lbConteudo.Text = resultado;
                                    btn_Salvar_Medicamento.Visible = false;
                                }
                                else
                                {
                                    resultado = resultado.Replace("Codigo_3 - ", ""); //Pegando o medicamento pela primeira vez
                                    //ItensDispensacaoBsn itensDispensacaoBsn = new ItensDispensacaoBsn();
                                    //itensDispensacaoBsn.Salvar(item);
                                    //BuscarNaListaTemporaria(item, -1);
                                    //ApagarDadosMedicamento();
                                    //DesbloqueiaConteudo();
                                    //CarregaItensDispensacao();
                                    ItemDispensacao valor_antigo = new ItemDispensacao();
                                    valor_antigo.QtdDispensada = 0;
                                    DarBaixaEstoque(item, valor_antigo, -1, "inserir");
                                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('" + resultado + "');", true);
                                }
                        }
                        else
                        {
                            if (acao == "c_confirmar_observacao") //Confirmando a liberação do medicamento com observação
                            {
                                //ItensDispensacaoBsn itensDispensacaoBsn = new ItensDispensacaoBsn();
                                //itensDispensacaoBsn.Salvar(item);
                                //BuscarNaListaTemporaria(item, -1);
                                //ApagarDadosMedicamento();
                                //DesbloqueiaConteudo();
                                //CarregaItensDispensacao();
                                ItemDispensacao valor_antigo = new ItemDispensacao();
                                valor_antigo.QtdDispensada = 0;
                                DarBaixaEstoque(item, valor_antigo, -1, "inserir");
                                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Medicamento incluído com sucesso!');", true);
                            }
                            else
                            {   //Neste caso, o medicamento está sendo alterado. Obs:. btCommandArgument = "c_alterar"
                                List<ItemDispensacao> lista_temp = (List<ItemDispensacao>)Session["itens_dispensacao"];
                                ItemDispensacao disp_temp = lista_temp[int.Parse(ViewState["index_item_alteracao"].ToString())];
                                //ItensDispensacaoBsn itensDispensacaoBsn = new ItensDispensacaoBsn();
                                //ItensDispensacao item_esc = itensDispensacaoBsn.BuscarPorItem(disp_temp.Dispensacao.Codigo, disp_temp.LoteMedicamento.Codigo, disp_temp.DataAtendimento);
                                ItemDispensacao item_esc = new ItemDispensacao();//idispensacao.BuscarPorItem<Vida.Model.ItensDispensacao>(disp_temp.Dispensacao.Codigo, disp_temp.LoteMedicamento.Codigo, disp_temp.DataAtendimento);
                                ItemDispensacao valor_antigo = new ItemDispensacao();
                                valor_antigo.QtdDispensada = item_esc.QtdDispensada;

                                item_esc.QtdDias = item.QtdDias;
                                item_esc.QtdDispensada = item.QtdDispensada;
                                item_esc.QtdPrescrita = item.QtdPrescrita;

                                if (item_esc.QtdDispensada > valor_antigo.QtdDispensada + estoque.QuantidadeEstoque)
                                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('A quantidade do estoque para o lote deste medicamento é insuficiente! Por favor, informe uma quantidade menor ou escolha outro lote.');", true);
                                else
                                {
                                    //itensDispensacaoBsn.Salvar(item_esc);
                                    ifarmacia.Salvar(item_esc);
                                    //BuscarNaListaTemporaria(item_esc, int.Parse(ViewState["index_item_alteracao"].ToString())); //Alterando o medicamento
                                    //ApagarDadosMedicamento();
                                    //DesbloqueiaConteudo();
                                    //CarregaItensDispensacao();
                                    DarBaixaEstoque(item_esc, valor_antigo, int.Parse(ViewState["index_item_alteracao"].ToString()), "inserir");
                                    CarregaItensDefinitivo();
                                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", "alert('Medicamento alterado com sucesso!');", true);
                                }
                            }
                        }
                    }
                }
            }

            CarregaItensDefinitivo();
        }