예제 #1
0
        public void Editar(string idVenta, Venta v)
        {
            using (var tx = _BD.IniciarTransaccion())
            {
                try
                {
                    //borro detalles viejos y vuelvo a stock anterior
                    string    sqltxt1 = $"SELECT D.cantidad, D.id_disco FROM Detalle_Venta D WHERE id_Venta = {idVenta}";
                    DataTable dt      = _BD.ConsultaDuranteTransaccion(sqltxt1);
                    foreach (DataRow fila in dt.Rows)
                    {
                        string idDisco        = fila["id_disco"].ToString();
                        string cantidadASumar = fila["cantidad"].ToString();
                        sqltxt1 = $"UPDATE [dbo].[Disco] SET cantidad = cantidad + {cantidadASumar} WHERE id={idDisco}";
                        _BD.EjecutarSQLEnTransaccion(sqltxt1);
                    }

                    string sqltxt = $"DELETE FROM [dbo].[Detalle_Venta] WHERE id_Venta ={idVenta}";
                    _BD.EjecutarSQLEnTransaccion(sqltxt);
                    //hasta aca

                    foreach (var d in v.detalleVentas)
                    {
                        sqltxt = $"INSERT [dbo].[Detalle_Venta]" +
                                 $"([id_Venta], [id_disco], [cantidad], [precio]) " +
                                 $"VALUES ('{idVenta}', '{d.id_disco}','{d.cantidad}', '{d.precio}')";
                        _BD.EjecutarTransaccion(sqltxt);


                        sqltxt = $"SELECT cantidad FROM Disco WHERE id={d.id_disco}";

                        var stock =
                            int.Parse(_BD.ConsultaDuranteTransaccion(sqltxt).Rows[0]["cantidad"].ToString());

                        int number;
                        if (!int.TryParse(d.cantidad, out number))
                        {
                            throw new ApplicationException("La cantidad ingresada no corresponde.");
                        }
                        if (number <= 0)
                        {
                            throw new ApplicationException("La cantidad ingresada no corresponde.");
                        }
                        int nuevoStock = stock - number;

                        sqltxt = $"UPDATE [dbo].[Disco] SET cantidad = '{nuevoStock}' WHERE id={d.id_disco}";
                        _BD.EjecutarTransaccion(sqltxt);

                        int precio;
                        if (!int.TryParse(d.precio, out precio))
                        {
                            throw new ApplicationException("La cantidad ingresada no corresponde.");
                        }
                        if (precio <= 0)
                        {
                            throw new ApplicationException("La cantidad ingresada no corresponde.");
                        }
                        importeTotal = importeTotal + (precio * number);
                    }

                    string sqltxt3 = $"UPDATE [dbo].[Venta] SET importe_Total = '{importeTotal}' WHERE id={idVenta}";
                    _BD.EjecutarTransaccion(sqltxt3);
                    tx.Commit();
                }
                catch (ApplicationException aex)
                {
                    throw aex;
                }
                catch (Exception ex)
                {
                    tx.Rollback();
                    throw new Exception("No se pudo realizar la operación.");
                }
                finally
                {
                    _BD.cerrar();
                }
            }
        }