예제 #1
0
        public void Guardar(Venta v)
        {
            using (var tx = _BD.IniciarTransaccion())
            {
                try
                {
                    string sqltxt = $"INSERT [dbo].[Venta] ([fecha],[id_Cliente],[importe_Total])" +
                                    $" VALUES ('{UtilsDB.GetFecha(v.fecha)}','{v.id_Cliente}','{v.importe_Total}')";
                    v.id = _BD.EjecutarTransaccion(sqltxt);
                    if (v.id == 0)
                    {
                        throw new ApplicationException();
                    }

                    foreach (var d in v.detalleVentas)
                    {
                        sqltxt = $"INSERT [dbo].[Detalle_Venta] " +
                                 $"([id_Venta], [id_disco], [cantidad], [precio])" +
                                 $" VALUES ('{v.id}','{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();
                        }
                        if (number <= 0)
                        {
                            throw new ApplicationException("La cantidad ingresada no corresponde.");
                        }
                        int nuevoStock = stock - number;
                        if (nuevoStock < 0)
                        {
                            throw new ApplicationException("No hay stock suficiente.");
                        }

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

                    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();
                }
            }
        }
예제 #2
0
        public void Editar(string idPedido, Pedido p)
        {
            using (var tx = _BD.IniciarTransaccion())
            {
                try
                {
                    //borro detalles viejos y vuelvo a stock anterior
                    string    sqltxt1 = $"SELECT D.cantidad, D.id_disco FROM Detalle_Pedido D WHERE id_Pedido = {idPedido}";
                    DataTable dt      = _BD.ConsultaDuranteTransaccion(sqltxt1);
                    foreach (DataRow fila in dt.Rows)
                    {
                        string idDisco         = fila["id_Disco"].ToString();
                        string cantidadABorrar = fila["cantidad"].ToString();
                        sqltxt1 = $"UPDATE [dbo].[Disco] SET cantidad = cantidad - {cantidadABorrar} WHERE id={idDisco}";
                        _BD.EjecutarSQLEnTransaccion(sqltxt1);
                    }

                    string sqltxt = $"DELETE FROM [dbo].[Detalle_Pedido] WHERE id_Pedido ={idPedido}";
                    _BD.EjecutarSQLEnTransaccion(sqltxt);
                    //hasta aca



                    foreach (var d in p.detallePedidos)
                    {
                        sqltxt = $"INSERT [dbo].[Detalle_Pedido]" +
                                 $"([id_Pedido], [Cantidad], [id_Disco]) " +
                                 $"VALUES ('{idPedido}', '{d.cantidad}', '{d.idDisco}')";
                        _BD.EjecutarTransaccion(sqltxt);

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

                        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.idDisco}";
                        _BD.EjecutarTransaccion(sqltxt);
                    }

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