예제 #1
0
        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);
            }
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
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);
            }
        }
예제 #4
0
        /// <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);
            }
        }
예제 #5
0
 /// <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);
     }
 }
예제 #6
0
        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);
            }
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
        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);
            }
        }