Boa tarde
estou desenvolvendo uma Web api, tenho uma função que e usada para tranferir produto de uma mesa para outra mesa.
Quando solicito a transferencia o produto que foi solicitado a transferencia e deletado, o mais estranho que a função finaliza o update com o commit.
Veja a função.
public List<TransfereItensMesaMesa> TransfereItenMesaMesa(long OpOr, long MesaOr, long MesaDest, long Codigo, long CodProduto, double Quantidade, long CodCaixa, DateTime DataCaixa, long CodUsuario)
{
List<TransfereItensMesaMesa> _Estorna = new List<TransfereItensMesaMesa>();
bool Retorno = false;
NpgsqlTransaction Trans;
NpgsqlConnection Cnx = new NpgsqlConnection(Variaveis.StringConexaoPG);
Cnx.Open();
Trans = Cnx.BeginTransaction();
try
{
var StatusOr = ffuncaobd.RetDadosString("Select \"Status\" From \"MesaOP\" Where \"Fechada\"='N' And \"Codigo\"=" + OpOr + " And \"Estorno\"='N' And \"Impressa\"='N' Order by \"Codigo\" Desc LIMIT 1");
if (StatusOr.ToUpper() != "Impressa".ToUpper())
{
if (ffuncaobd.RetDados("Select \"Codigo\",\"DataAbertura\",\"Status\" From \"MesaOP\" Where \"Fechada\"='N' And \"Mesa\"=" + MesaDest + " And \"Estorno\"='N' Order by \"Codigo\" Desc LIMIT 1"
, new string[] { "Codigo", "DataAbertura", "Status" }, 3) == true)
{
if (Variaveis.Dados is Array)
{
if (Variaveis.Dados is null)
{
}
else
{
if (ffuncao.IsNumeric(Variaveis.Dados[0]) == true)
{
CodigoVenda = Convert.ToInt64(Variaveis.Dados[0]);
Status = Variaveis.Dados[2].ToString();
if (Status.ToUpper() == "Impressa".ToUpper())
{
Variaveis.Mensage = "A mesa de destino já foi impressa, para tranferir um item debloqueie a mesa";
Retorno = false;
Trans.Rollback();
Cnx.Close();
goto Sair;
}
}
}
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao caregar a mesa de destino";
Retorno = false;
goto Sair;
}
if (CodigoVenda == 0)
{
if (ffuncaobd.GravaTrans_Novo(Cnx, Trans, "Insert Into \"MesaOP\" "
, new string[] { "Mesa", "DataCaixa", "Usuario", "Caixa", "DataAbertura" }
, new string[] { MesaDest.ToString(), DataCaixa.ToString(), CodUsuario.ToString(), CodCaixa.ToString(), DateTime.Now.ToString() }
, new string[] { "bi", "d", "bi", "bi", "DT" }) == true)
{
if (ffuncaobd.RetDadosTrans_Novo(Cnx, Trans, "Select \"Codigo\",\"DataAbertura\",\"Status\" From \"MesaOP\" Where \"Fechada\"='N' And \"Mesa\"=" + MesaDest + " And \"Estorno\"='N' Order by \"Codigo\" Desc LIMIT 1"
, new string[] { "Codigo", "DataAbertura", "Status" }, 3) == true)
{
if (Variaveis.Dados is Array)
{
if (Variaveis.Dados is null)
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao caregar a mesa";
Retorno = false;
goto Sair;
}
else
{
if (ffuncao.IsNumeric(Variaveis.Dados[0]) == true)
{
CodigoVenda = Convert.ToInt64(Variaveis.Dados[0]);
Status = Variaveis.Dados[2].ToString();
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao caregar a mesa";
Retorno = false;
goto Sair;
}
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao caregar a mesa";
Retorno = false;
goto Sair;
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao caregar a mesa";
Retorno = false;
goto Sair;
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Erro ao cadastrar a mesa, para recebar a transferencia";
Retorno = false;
goto Sair;
}
}
if (CodigoVenda > 0)
{
string Sql = "UpDate \"MesaDetalhe\" Set \"Operacao\"=" + CodigoVenda + " Where \"Codigo\"=" + Codigo + ";";
if (ffuncaobd.GravaTrans_Novo_RetAfect(Cnx, Trans, "UpDate \"MesaDetalhe\" Set "
, new string[] { "Operacao" }
, new string[] { CodigoVenda.ToString() }
, new string[] { "bi" }
, Codigo
, new string[] { "Codigo" }
, new string[] { Codigo.ToString() }
, false) > 0)
//if (ffuncaobd.DeletarNovoTrans_RetNUmero_Novo(Cnx, Trans, Sql, false) > 0)
{
if (ffuncaobd.RetDadosNumeroInt64Trans_Novo(Cnx, Trans, "Select count(*) From \"MesaDetalhe\" where \"Operacao\"=" + OpOr) == 0)
{
string SqlOp = "Delete from \"MesaOP\" Where \"Codigo\"=" + OpOr + ";";
if (ffuncaobd.DeletarNovoTrans_RetNUmero_Novo(Cnx, Trans, SqlOp, false) > 0)
{
Trans.Commit();
Cnx.Close();
Variaveis.Mensage = "Tranferencia Realizada com Sucesso!!!";
Retorno = true;
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Não foi possível tranferir o item selecionado, Deletar a Mesa de Origem Sem Produtos";
Retorno = false;
goto Sair;
}
}
else
{
Trans.Commit();
Cnx.Close();
Variaveis.Mensage = "Tranferencia Realizada com Sucesso!!!";
Retorno = true;
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Não foi possível tranferir o item selecionado para a mesa de destino";
Retorno = false;
goto Sair;
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "Não foi possível carregar a operação da mesa de destino";
Retorno = false;
goto Sair;
}
}
else
{
Trans.Rollback();
Cnx.Close();
Variaveis.Mensage = "A mesa de origem já foi impressa, para tranferir um item debloqueie a mesa";
}
}
catch (Exception ex)
{
Variaveis.Erros = ex.Message;
Variaveis.Mensage = "Não foi possivel Transfere o Iten da Mesa " + ex.Message;
try
{
Trans.Rollback();
Cnx.Close();
}
catch
{
try
{
Cnx.Close();
}
catch
{
}
}
}
Sair:
_Estorna.Add(new TransfereItensMesaMesa()
{
Op = OpOr,
Codigo = Codigo,
CodProduto = CodProduto,
Quantidade = Quantidade,
CodCaixa = CodCaixa,
DataCaixa = DataCaixa,
CodUsuario = CodUsuario,
Menssagem = Variaveis.Mensage,
Erro = Variaveis.Erros,
Retorno = Retorno
});
Variaveis.Erros = "";
Variaveis.Mensage = "";
return _Estorna;
}
Obs:
O registro e deletado somente quando na tabela mãe o registro e criado junto com a alteração(UpDate)
Se o restro na tabela mãe já existe faz tudo certinho.