public void AgregarAjusteStock(MovimientosArticulos m) { BeginTransaction(); try { ///inserto el movimiento string sql = @"INSERT INTO movimiento_articulos ( idsucursal_desde, idartciulo, idtipo_movimiento, cantidad, fecha, idusuario, observacion ) VALUES ( :idsucursal_desde, :idartciulo, :idtipo_movimiento, :cantidad, :fecha, :idusuario, :observacion )"; conn.Execute(sql, m.IdSucursalDesde, m.IdArticulo_, m.IdTipoMovimiento, m.Cantidad, DateTime.Today, m.IdUsuario, m.Observacion); ///Ahora actualizo el stock del articulo TipoMovimientoArticulo tm = BuscarTipoMovimiento((int)m.IdTipoMovimiento); ControladorArticulos c_Art = new ControladorArticulos(conn); if (tm.EsSuma) { c_Art.ActualizarStockArticulo(m.IdArticulo_, m.Cantidad, m.IdSucursalDesde); } else { c_Art.ActualizarStockArticulo(m.IdArticulo_, -m.Cantidad, m.IdSucursalDesde); } CommitTransaction(); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex); } catch (FormatException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex.Message); } }
/// <summary> /// Agrega una venta /// </summary> /// <param name="v"></param> /// <returns></returns> public int AgregarVenta(Venta v) { BeginTransaction(); try { v.Idventa = insertVenta(v); foreach (VentaLinea lv in v.ListLineaVenta) { lv.Idventa = v.Idventa; insertVentaLinea(lv); if (lv.Articulo.ControlarStock) { ControladorArticulos c_articulos = new ControladorArticulos(conn); c_articulos.ActualizarStockArticulo(lv.Idarticulo, -lv.Cantidad, v.IdSucursal); } } foreach (FormaPago fp in v.ListFormaPago) { insertFormaPagoVenta(v.Idventa, fp.IdtipoFormaPago, fp.Monto, fp.IdNotaCredito); } ///Si tengo q generar una nota de credito porque sobra un monto if (v.Total < v.ListFormaPago.Sum(fp => fp.Monto) && v.ListFormaPago.Exists(fp => fp.AceptaNotaCredito)) { NotaCredito nc; nc = new NotaCredito(); nc.Descripcion = "Diferencia en venta"; nc.Fecha = DateTime.Today; nc.FechaVto = DateTime.Today.AddMonths(3); nc.Idusuario = v.Idusuario; nc.Monto = v.ListFormaPago.Sum(fp => fp.Monto) - v.Total; insertNotaCredito(nc); } agregarComprobante(v); CommitTransaction(); return(v.Idventa); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex); return(0); } catch (ExcepcionPropia myEx) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(myEx.Message); return(0); } }
/// <summary> /// Modifica una compra completa. /// </summary> /// <param name="c">Compra Completa</param> public void ModificarCompra(Compra c) { BeginTransaction(); try { validarCompra(c); ///Instancio un controlador de articulos por que lo voy a utilizar ControladorArticulos c_art = new ControladorArticulos(conn); ///Antes de modificar la compra actualizo el stock de los articulos ///busco la compra Compra compraEnDb = buscarCompra(c.Idcompra); //List<CompraLinea> listLineaCompra = buscarListLineasCompras(c.Idcompra); foreach (CompraLinea cl in compraEnDb.ListLineaCompra) { if (cl.Articulo.ControlarStock) { int cant = cl.Cantidad; c_art.ActualizarStockArticulo(cl.Idarticulo, -cant, c.IdSucursal); } } ///Ahora elimino todo lo relacionado a lacompra para despues agregarlo nuevamente deleteCompraDetalles(c.Idcompra); deleteFormaPagoCompra(c.Idcompra); deleteComprobante(compraEnDb.IdComprobante); insertComprobanteCompra(c.Comprobante); updateCompra(c); agregarLineasCompra(c); if (c.ListFormaPago != null) { foreach (FormaPago fp in c.ListFormaPago) { insertFormaPagoCompra(c.Idcompra, fp.IdtipoFormaPago, fp.Monto); } } CommitTransaction(); } catch (Npgsql.NpgsqlException myex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(myex); } }
/// <summary> /// Realiza el cambio. /// /// </summary> /// <param name="lvNueva"></param> /// <param name="lvCambiada"></param> public void RealizarCambio(VentaLinea lvNueva, VentaLineaCambio lvCambiada) { BeginTransaction(); try { string sql = "DELETE FROM venta_detalle WHERE idventa=:p1 AND idarticulo=:p2"; conn.Execute(sql, lvCambiada.IdVenta, lvCambiada.IdArticuloAnterior); string sql1 = @"INSERT INTO venta_detalle_cambio ( idventa, idarticulo, cantidad, idusuario, fecha_cambio, idarticulo_anterior ) VALUES ( :idventa, :idarticulo, :cantidad, :idusuario, :fecha_cambio, :idarticulo_anterior )"; conn.Execute(sql1, lvCambiada.IdVenta, lvCambiada.IdArticulo, lvCambiada.Cantidad, lvCambiada.IdUsuario, lvCambiada.FechaCambio, lvCambiada.IdArticuloAnterior); insertVentaLinea(lvNueva); ///Actualizo strock articulos Venta v = buscarVenta(lvCambiada.IdVenta); ControladorArticulos c_art = new ControladorArticulos(conn); c_art.ActualizarStockArticulo(lvNueva.Idarticulo, -lvNueva.Cantidad, v.IdSucursal); c_art.ActualizarStockArticulo(lvCambiada.ArticuloAnterior.Idarticulo, lvCambiada.Cantidad, v.IdSucursal); CommitTransaction(); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex); } }
/// <summary> /// Indica la baja de una linea de compra. /// Se fija si el articulo lleva control de stock, resta lo necesario, /// si la compra es de tipo q genera cargo resta el total /// </summary> /// <param name="idCompra"></param> /// <param name="idArt"></param> /// <param name="idUsuario"></param> public void BajaLineaCompra(int idCompra, int idArt, int idUsuario, List <FormaPago> listFormaPago) { BeginTransaction(); try { Compra c = buscarCompra(idCompra); if (c.TipoCompra.GeneraCargo) { decimal subtotal = c.ListLineaCompra.FirstOrDefault(lc => lc.Idarticulo == idArt).Subtotal; if (c.ListFormaPago == null || c.ListFormaPago.Count == 0) { throw new ExcepcionPropia("Debe indicar al menos una forma de pago"); } if (c.ListFormaPago.Sum(l => l.Monto) != (c.Total - subtotal)) { throw new ExcepcionPropia("El total de la compra debe ser igual a la suma de las formas de pago"); } foreach (FormaPago fp in c.ListFormaPago) { } updateCompraTotal(idCompra, subtotal); } if (c.ListLineaCompra.FirstOrDefault(lc => lc.Idarticulo == idArt).Articulo.ControlarStock) { int cant = c.ListLineaCompra.FirstOrDefault(lc => lc.Idarticulo == idArt).Cantidad; ControladorArticulos c_art = new ControladorArticulos(conn); c_art.ActualizarStockArticulo(idArt, -cant, c.IdSucursal); } updateCompraDetalle(idCompra, idArt, idUsuario, DateTime.Now); CommitTransaction(); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex); } catch (ExcepcionPropia myEx) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(myEx.Message); } }
public void AgregarMovimientoEntreSucursales(MovimientosArticulos m) { BeginTransaction(); try { string sql = @"INSERT INTO movimiento_articulos_sucursales ( idsucursal_desde, idsucursal_hasta, idarticulo, cantidad, fecha, idusuario, observacion ) VALUES ( :idsucursal_desde, :idsucursal_hasta, :idarticulo, :cantidad, :fecha, :idusuario, :observacion )"; conn.Execute(sql, m.IdSucursalDesde, m.IdSucursalHasta, m.IdArticulo_, m.Cantidad, m.Fecha, m.IdUsuario, m.Observacion); ControladorArticulos c_Art = new ControladorArticulos(conn); ///Resto articulo en sucursal Desde c_Art.ActualizarStockArticulo(m.IdArticulo_, -m.Cantidad, m.IdSucursalDesde); ///Sumo Articulkos en sucursal hasta c_Art.ActualizarStockArticulo(m.IdArticulo_, m.Cantidad, (int)m.IdSucursalHasta); CommitTransaction(); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex); } }
private void agregarLineasCompra(Compra c) { ControladorArticulos c_art = new ControladorArticulos(conn); foreach (CompraLinea lc in c.ListLineaCompra) { if (lc.Idarticulo == 0) { lc.Articulo.Idarticulo = c_art.AgregarArticulo(lc.Articulo, c.IdSucursal); } else { c_art.ModificarArticuloSucursal(lc.Articulo.CostoUltimo, lc.Articulo.Precio, lc.Articulo.Idarticulo, c.IdSucursal); } if (lc.Articulo.ControlarStock) { c_art.ActualizarStockArticulo(lc.Articulo.Idarticulo, lc.Cantidad, c.IdSucursal); } lc.Idcompra = c.Idcompra; insertCompraLinea(lc); } }
public void EliminarVenta(int idVenta) { BeginTransaction(); try { ControladorArticulos c_art = new ControladorArticulos(conn); Venta v = buscarVenta(idVenta); foreach (VentaLinea lv in v.ListLineaVenta) { if (lv.NotaCredito != null) { string sql1 = "DELETE FROM nota_credito WHERE idnota_credito=:p1"; conn.Execute(sql1, lv.NotaCredito.IdnotaCredito); } else { c_art.ActualizarStockArticulo(lv.Idarticulo, lv.Cantidad, v.IdSucursal); } } string sql = "DELETE FROM venta WHERE idventa=:p1"; conn.Execute(sql, idVenta); CommitTransaction(); } catch (ExcepcionPropia ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex.Message); } catch (Npgsql.NpgsqlException ex) { RollbackTransaction(); ControladorExcepcion.tiraExcepcion(ex.Message); } }