private List<ItemEntradaEstoqueInsumoVO> ConvertToItemEntradaEstoqueInsumo(List<ItemPedidoCompraVO> itemPedidoCompraVos)
 {
     List<ItemEntradaEstoqueInsumoVO> itemEntradaEstoqueVos = new List<ItemEntradaEstoqueInsumoVO>();
     foreach (var itemPedidoCompraVo in itemPedidoCompraVos)
     {
         var itemEntradaEstoque = new ItemEntradaEstoqueInsumoVO();
         itemEntradaEstoque.ProdutoInsumoVo = new ProdutoInsumoVO()
                                                  {
                                                      CodProdutoInsumo = itemPedidoCompraVo.MateriaPrimaVo.CodMateriaPrima,
                                                      Descricao = itemPedidoCompraVo.MateriaPrimaVo.Descricao                                                        
                                                  };
         itemEntradaEstoque.QtdPedidoCompra = itemPedidoCompraVo.Saldo;
         itemEntradaEstoque.Valor = itemPedidoCompraVo.Valor;
         itemEntradaEstoque.Especificacao = itemPedidoCompraVo.Especificacao;
         itemEntradaEstoque.UnidadeVo.CodUnidade = itemPedidoCompraVo.UnidadeVo.CodUnidade;
         itemEntradaEstoque.UnidadeVo.TipoUnidade = itemPedidoCompraVo.UnidadeVo.TipoUnidade;
         itemEntradaEstoque.Ipi = itemPedidoCompraVo.Ipi;
         itemEntradaEstoque.CertificadoScanneado = new byte[0];
         itemEntradaEstoqueVos.Add(itemEntradaEstoque);
     }
     NissiSession.ItemEntradaEstoqueInsumos = itemEntradaEstoqueVos;
     return itemEntradaEstoqueVos;
 }
    protected void btnSalvarInsumo_Click(object sender, EventArgs e)
    {
        //será incluido no grid de ICMS manualmente (não incluirá no banco ainda)
        //pois só deverá ser incluido no banco quando salvar o produto

        //armazena em viewstate a linha selecionada para posterior atualização
        List<ItemEntradaEstoqueInsumoVO> newlstItemEntradaEstoqueInsumo = NissiSession.ItemEntradaEstoqueInsumos;
        int codProdutoInsumo = 0;
        try
        {

            codProdutoInsumo = int.Parse(ddlProdutoInsumo.SelectedValue);

        }
        catch (Exception)
        {
            MensagemCliente(updItensInsumo, "Escolha um valor na lista para o Produto!");
            return;
        }

        int codUnidade = 0;
        try
        {
            codUnidade = int.Parse(ddlUnidadeInsumo.SelectedValue);
        }
        catch (Exception)
        {
            MensagemCliente(updItensInsumo, "Escolha um valor na lista para a Unidade!");
            return;
        }
        int lote = !string.IsNullOrEmpty(txtLoteInsumo.Text) ? int.Parse(txtLoteInsumo.Text) : 0;
        decimal qtde = !string.IsNullOrEmpty(txtQtdEntregueInsumo.Text) ? decimal.Parse(txtQtdEntregueInsumo.Text) : 0;
        decimal valor = !string.IsNullOrEmpty(txtValorInsumo.Text) ? decimal.Parse(txtValorInsumo.Text) : 0;
        string descricao = ddlProdutoInsumo.SelectedItem.Text;
        string unidade = ddlUnidadeInsumo.SelectedItem.Text;
        decimal Ipi = !string.IsNullOrEmpty(txtIpiInsumo.Text) ? decimal.Parse(txtIpiInsumo.Text) : 0;

        //se for edição de ICMS, atualizar o list
        if (hdfTipoAcaoItemPedidoCompraInsumo.Value.Equals("Incluir"))
        {
            /************************************************************************
            Se a ação for inclusão, simplesmente verifica se o ítem já foi cadastrado
            se já for, exibe mensagem e não inclui o ítem
            /***********************************************************************/
            ItemEntradaEstoqueInsumoVO result = newlstItemEntradaEstoqueInsumo.Find(
            delegate(ItemEntradaEstoqueInsumoVO bk)
            {
                return bk.ProdutoInsumoVo.CodProdutoInsumo == codProdutoInsumo;
            }
            );
            if (result != null)
            {

                MensagemCliente(updItensInsumo, "Produto já cadastrada!");
                return;
            }
            /************************************************************************/
            /************************************************************************/

            //senão, incluir novo ítem no list
            ItemEntradaEstoqueInsumoVO lstItemItemEntradaEstoqueInsumoAux = new ItemEntradaEstoqueInsumoVO();

            lstItemItemEntradaEstoqueInsumoAux.ProdutoInsumoVo.CodProdutoInsumo = codProdutoInsumo;
            lstItemItemEntradaEstoqueInsumoAux.Lote = lote;
            lstItemItemEntradaEstoqueInsumoAux.ProdutoInsumoVo.Descricao = descricao;
            lstItemItemEntradaEstoqueInsumoAux.UnidadeVo.CodUnidade = codUnidade;
            lstItemItemEntradaEstoqueInsumoAux.UnidadeVo.TipoUnidade = unidade;
            lstItemItemEntradaEstoqueInsumoAux.Ipi = Ipi;
            lstItemItemEntradaEstoqueInsumoAux.Qtd = qtde;
            lstItemItemEntradaEstoqueInsumoAux.Valor = valor;
            lstItemItemEntradaEstoqueInsumoAux.CertificadoScanneado = new byte[0];
            newlstItemEntradaEstoqueInsumo.Add(lstItemItemEntradaEstoqueInsumoAux);
        }
        else
        {
            /************************************************************************
            Se a ação for alteração, verifica se o ítem já está cadastrado, se já estiver
            será impedido, desde que não seja ele mesmo
            /***********************************************************************/
            int linha = Convert.ToInt32(ViewState["LinhaSelecionadaItemEntradaEstoqueInsumo"]);
            if (linha != codProdutoInsumo)
            {
                var item1 =
                    newlstItemEntradaEstoqueInsumo.Where(r => r.ProdutoInsumoVo.CodProdutoInsumo == codProdutoInsumo).Select(r => r).
                        FirstOrDefault();
                if (item1 != null)
                {
                    MensagemCliente(updItensInsumo, "Produto já cadastrada!");
                    return;
                }
            }

            /************************************************************************
            Atualiza o item do grid        
            /***********************************************************************/
            var item =
                newlstItemEntradaEstoqueInsumo.Where(r => r.ProdutoInsumoVo.CodProdutoInsumo == linha).Select(r => r).
                    FirstOrDefault();
            item.ProdutoInsumoVo.CodProdutoInsumo = codProdutoInsumo;
            item.Lote = lote;
            item.ProdutoInsumoVo.Descricao = descricao;
            item.UnidadeVo.CodUnidade = codUnidade;
            item.UnidadeVo.TipoUnidade = unidade;
            item.Ipi = Ipi;
            item.Qtd = qtde;
            item.Valor = valor;
            item.CertificadoScanneado = new byte[0];
            //sai do for
        }
        grdProdutoInsumo.DataSource = newlstItemEntradaEstoqueInsumo;
        grdProdutoInsumo.DataBind();
        //atualiza viewstate
        NissiSession.ItemEntradaEstoqueInsumos = newlstItemEntradaEstoqueInsumo;
        LimparCamposItemPedidoCompraInsumo();
        Master.PosicionarFoco(ddlProdutoInsumo);
        ExecutarScript(updItensInsumo, new StringBuilder("showItensInsumo();"));
    }