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(); } } }
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(); } } }