Exemplo n.º 1
0
        public static string GravaLanInsumos(TRegistro_LanInsumos val, TObjetoBanco banco)
        {
            bool           pode_liberar = false;
            TCD_LanInsumos lanInsumo    = new TCD_LanInsumos();

            try
            {
                if (banco == null)
                {
                    lanInsumo.CriarBanco_Dados(true);
                    pode_liberar = true;
                    banco        = lanInsumo.Banco_Dados;
                }
                else
                {
                    lanInsumo.Banco_Dados = banco;
                }

                string retorno = "";
                TRegistro_LanInsumos_X_Estoque InsumoEstoque = new TRegistro_LanInsumos_X_Estoque();

                if (val.ID_Requisicao <= 0 || val.ID_Requisicao == null)
                {
                    decimal saldo = 0;
                    TCN_LanEstoque.SaldoEstoqueLocal(val.CD_Empresa, val.CD_Produto, val.CD_Local, ref saldo, banco);

                    if (val.Quantidade > saldo)
                    {
                        throw new Exception("Atenção, não há SALDO suficiente desse PRODUTO no LOCAL DE ARMAZENAGEM!");
                    }

                    //GRAVA O LANÇAMENTO EM ESTOQUE
                    TRegistro_LanEstoque reg_estoque = new TRegistro_LanEstoque();

                    reg_estoque.Cd_produto    = val.CD_Produto;
                    reg_estoque.Cd_local      = val.CD_Local;
                    reg_estoque.Qtd_entrada   = 0;
                    reg_estoque.Qtd_saida     = val.Quantidade;
                    reg_estoque.Cd_empresa    = val.CD_Empresa;
                    reg_estoque.St_registro   = "A";
                    reg_estoque.Vl_unitario   = val.VL_Unitario;
                    reg_estoque.Vl_subtotal   = val.VL_Total;
                    reg_estoque.Tp_movimento  = "S";
                    reg_estoque.Ds_observacao = "LANÇAMENTO DE INSUMO CÓDIGO DO INSUMO - " + val.CD_Produto;
                    reg_estoque.Tp_lancto     = "N";

                    TCD_LanEstoque TCD_Estoque = new TCD_LanEstoque();
                    TCD_Estoque.Banco_Dados = banco;
                    string ret_estoque = TCD_Estoque.GravaEstoque(reg_estoque);
                    InsumoEstoque.Id_LanctoEstoque = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_estoque, "@@P_ID_LANCTOESTOQUE"));
                }
                else
                {
                    TpBusca[] filtro = new TpBusca[0];

                    Array.Resize(ref filtro, filtro.Length + 1);
                    filtro[0].vNM_Campo = "d.cd_EMPRESA";
                    filtro[0].vOperador = "=";
                    filtro[0].vVL_Busca = "'" + val.CD_Empresa + "'";

                    Array.Resize(ref filtro, filtro.Length + 1);
                    filtro[1].vNM_Campo = "a.cd_produto";
                    filtro[1].vOperador = "=";
                    filtro[1].vVL_Busca = "'" + val.CD_Produto + "'";

                    Array.Resize(ref filtro, filtro.Length + 1);
                    filtro[2].vNM_Campo = "E.ST_REGISTRO";
                    filtro[2].vOperador = "=";
                    filtro[2].vVL_Busca = "'A'";

                    DataTable TB_Local_Amx = null;//new TCD_Movimentacao().BuscarSaldo(filtro);
                    if ((TB_Local_Amx == null) || (TB_Local_Amx.Rows.Count == 0))
                    {
                        throw new Exception("O Almoxarifado não possui SALDO suficiente!");
                    }
                    else
                    {
                        if (val.Quantidade > Convert.ToDecimal(TB_Local_Amx.Rows[0]["Tot_Saldo"].ToString()))
                        {
                            throw new Exception("O Almoxarifado não possui SALDO suficiente!");
                        }
                    }

                    //BUSCA OS DADOS DE ENTREGA
                    TpBusca[] vBusca = new TpBusca[0];

                    Array.Resize(ref vBusca, vBusca.Length + 1);
                    vBusca[vBusca.Length - 1].vNM_Campo = "a.ID_Requisicao";
                    vBusca[vBusca.Length - 1].vOperador = "=";
                    vBusca[vBusca.Length - 1].vVL_Busca = val.ID_Requisicao.ToString();

                    Array.Resize(ref vBusca, vBusca.Length + 1);
                    vBusca[vBusca.Length - 1].vNM_Campo = "b.cd_produto";
                    vBusca[vBusca.Length - 1].vOperador = "=";
                    vBusca[vBusca.Length - 1].vVL_Busca = "'" + val.CD_Produto + "'";

                    //InsumoEstoque.Id_LanctoEstoque = Convert.ToDecimal(new TCD_LanEntregaRequisicao().BuscarEscalar(vBusca, "b.Id_LanctoEstoque").ToString());
                    //InsumoEstoque.Id_Entrega = Convert.ToDecimal(new TCD_LanEntregaRequisicao().BuscarEscalar(vBusca, "a.Id_Entrega").ToString());
                }

                if (InsumoEstoque.Id_LanctoEstoque > 0)
                {
                    //MANDA GRAVAR A INSUMO
                    val.ID_Lancto               = 0;
                    retorno                     = lanInsumo.GravaLanInsumos(val);
                    InsumoEstoque.Id_Lancto     = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(retorno, "@P_ID_LANCTO"));
                    InsumoEstoque.ID_LanctoAtiv = Convert.ToDecimal(val.ID_LanctoAtiv);
                    //GRAVA O LANÇAMENTO INSUMO X ESTOQUE
                    InsumoEstoque.Cd_Produto = val.CD_Produto;
                    InsumoEstoque.Cd_Empresa = val.CD_Empresa;

                    TCD_LanInsumos_X_Estoque TCD_InsumoEstoque = new TCD_LanInsumos_X_Estoque();
                    TCD_InsumoEstoque.Banco_Dados = banco;
                    TCD_InsumoEstoque.GravaLanInsumos_X_Estoque(InsumoEstoque);
                }
                else
                {
                    throw new Exception("Não foi possível lançar o estoque, por favor tente novamente!");
                }

                if (pode_liberar)
                {
                    lanInsumo.Banco_Dados.Commit_Tran();
                }
                return(retorno);
            }
            catch (Exception erro)
            {
                if (pode_liberar)
                {
                    lanInsumo.Banco_Dados.RollBack_Tran();
                }

                throw new Exception(erro.Message);
            }
            finally
            {
                if (pode_liberar)
                {
                    lanInsumo.deletarBanco_Dados();
                }
            }
        }
Exemplo n.º 2
0
        public static string GravarEstoque(TRegistro_LanEstoque val, TObjetoBanco banco)
        {
            //Validar Campos obrigatorios para gravar estoque
            if (string.IsNullOrEmpty(val.Cd_empresa))
            {
                throw new Exception("Campo Obrigatorio !\r\n" +
                                    "Campo: CD_Empresa\r\n" +
                                    "Método: GravarEstoque\r\n" +
                                    "Classe: TCN_LanEstoque");
            }
            if (string.IsNullOrEmpty(val.Cd_produto))
            {
                throw new Exception("Campo Obrigatorio !\r\n" +
                                    "Campo: CD_Produto\r\n" +
                                    "Método: GravarEstoque\r\n" +
                                    "Classe: TCN_LanEstoque");
            }
            if (val.Dt_lancto.Equals(new DateTime()))
            {
                throw new Exception("Campo Obrigatorio !\r\n" +
                                    "Campo: DT_Lancto\r\n" +
                                    "Método: GravarEstoque\r\n" +
                                    "Classe: TCN_LanEstoque");
            }
            if (string.IsNullOrEmpty(val.Tp_movimento))
            {
                throw new Exception("Campo Obrigatorio !\r\n" +
                                    "Campo: TP_Movimento\r\n" +
                                    "Método: GravarEstoque\r\n" +
                                    "Classe: TCN_LanEstoque");
            }
            if (string.IsNullOrEmpty(val.Tp_lancto))
            {
                throw new Exception("Campo Obrigatorio !\r\n" +
                                    "Campo: TP_Lancto\r\n" +
                                    "Método: GravarEstoque\r\n" +
                                    "Classe: TCN_LanEstoque");
            }
            bool           pode_liberar = false;
            TCD_LanEstoque qtb_estoque  = new TCD_LanEstoque();

            try
            {
                if (banco == null)
                {
                    pode_liberar = qtb_estoque.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_estoque.Banco_Dados = banco;
                }
                //Gravar Estoque
                string retorno = string.Empty;
                if ((!new TCD_CadProduto(qtb_estoque.Banco_Dados).ItemServico(val.Cd_produto)) &&
                    (!new TCD_CadProduto(qtb_estoque.Banco_Dados).ProdutoConsumoInterno(val.Cd_produto)))
                {
                    if (val.Tp_movimento.Trim().Equals("S"))
                    {
                        decimal saldo = 0;
                        if (BloquearEstoqueNegativo(val.Cd_empresa, val.Cd_produto, val.Cd_local, val.Qtd_saida, ref saldo, qtb_estoque.Banco_Dados))
                        {
                            throw new Exception("Saldo insuficiente para baixar estoque do produto:\r\n" +
                                                val.Cd_produto + " - " + val.Ds_produto + "\r\n" +
                                                "No local de armazenagem: " + val.Cd_local.Trim() + "-" + val.Ds_local.Trim() + "\r\n" +
                                                "Saldo Disponivel: " + saldo.ToString("### ### ##0.000") + "\r\n" +
                                                "Saldo Requerido: " + val.Qtd_saida.ToString("### ### ##0.000") + "\r\n" +
                                                "Informe o Depto Contabil para lançamento  da provisão de estoque !");
                        }
                    }
                    retorno = qtb_estoque.GravaEstoque(val);
                    val.Id_lanctoestoque = decimal.Parse(CamadaDados.TDataQuery.getPubVariavel(retorno, "@@P_ID_LANCTOESTOQUE"));
                    //Gravar Lote Anvisa
                    val.lMovLoteAnvisa.ForEach(p =>
                    {
                        p.Id_lanctoestoque = val.Id_lanctoestoque;
                        Faturamento.LoteAnvisa.TCN_MovLoteAnvisa.Gravar(p, qtb_estoque.Banco_Dados);
                    });
                    //Gravar Grade
                    val.lGrade.ForEach(p => TCN_GradeEstoque.Gravar(new TRegistro_GradeEstoque()
                    {
                        Cd_empresa        = val.Cd_empresa,
                        Cd_produto        = val.Cd_produto,
                        Id_lanctoestoque  = val.Id_lanctoestoque,
                        Id_caracteristica = p.Id_caracteristica,
                        Id_item           = p.Id_item,
                        quantidade        = p.Vl_mov
                    }, qtb_estoque.Banco_Dados));
                    if (pode_liberar)
                    {
                        qtb_estoque.Banco_Dados.Commit_Tran();
                    }
                    return(retorno);
                }
                return(string.Empty);
            }
            catch (Exception ex)
            {
                if (pode_liberar)
                {
                    qtb_estoque.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro gravar estoque: " + ex.Message.Trim());
            }
            finally
            {
                if (pode_liberar)
                {
                    qtb_estoque.deletarBanco_Dados();
                }
            }
        }