/// <summary> /// Almacena el registro de una ENTIDAD de registro de Tipo ProductoPrecio /// En la BASE de DATO la Tabla : [GestionComercial.ProductoPrecio] /// <summary> /// <param name="productoPrecio"></param> /// <returns></returns> public int Insert(ProductoPrecio productoPrecio) { int?codigoRetorno = productoPrecio.codProductoPrecio; try { using (_GestionComercialDataContext SQLDC = new _GestionComercialDataContext(conexion)) { SQLDC.omgc_mnt_Insert_ProductoPrecio( ref codigoRetorno, productoPrecio.codProducto, productoPrecio.CodigoArguMoneda, productoPrecio.CodigoListaPrecio, productoPrecio.CodigoPuntoVenta, productoPrecio.ValorCosto, productoPrecio.ValorVenta, productoPrecio.MargenUtilidad / 100, productoPrecio.MediaPorcentaje / 100, productoPrecio.PorcenComision / 100, productoPrecio.PorcenComisionMax / 100, productoPrecio.DescuentoMaximo / 100, productoPrecio.Estado, productoPrecio.SegUsuarioCrea); } } catch (Exception ex) { throw ex; } return(codigoRetorno == null ? 0 : codigoRetorno.Value); }
// POST api/<controller> //public void Post([FromBody]string value) //{ //} // PUT api/<controller>/5 //public void Put(int id, [FromBody]string value) //{ //} // DELETE api/<controller>/5 public void Delete(int id) { Compra c = this.db.Compra.Find(id); c.FechaBaja = DateTime.Today; c.UsuarioBaja = 1; c.Estado = "D"; db.Entry(c).State = EntityState.Modified; this.save(); List <CompraDetalle> cd = this.db.CompraDetalle.Where(cd1 => cd1.idCompra == id).ToList(); //recuperar el stock foreach (CompraDetalle _cd in cd) { _cd.FechaBaja = DateTime.Today; _cd.UsuarioBaja = 1; _cd.Estado = "D"; db.Entry(_cd).State = EntityState.Modified; this.save(); Stock s = this.db.Stock.Where(s1 => s1.idProducto == _cd.idProducto).FirstOrDefault(); s.Cantidad = s.Cantidad - _cd.Cantidad; //Eliminar el precio de Costo ProductoPrecio pp = this.db.ProductoPrecio.Where(pp1 => pp1.idProducto == _cd.idProducto && pp1.idProveedor == c.idProveedor).FirstOrDefault(); pp.FechaBaja = DateTime.Today; pp.UsuarioBaja = 1; pp.Estado = "D"; db.Entry(pp).State = EntityState.Modified; this.save(); } // sumar nuevamente el stock this.save(); }
public void RegistrarCompra(RegistrarComprar r) { Compra c = new Compra(); c.idCompra = 0; c.idProveedor = r.idProveedor; c.Total = r.Total; c.UsuarioAlta = 1; c.FechaAlta = DateTime.Today; c.Fecha = r.Fecha; c.NroFactura = r.NroFactura; c.idMedioPago = r.idMedioPago; c.Estado = "A"; c = this.db.Compra.Add(c); //this.save(); ///registrar los productos foreach (CompraDetalle1 cd in r.CompraDetalle) { Producto p = new Producto(); if (cd.idProducto > 0) { //por ahora hard Parametrizacion param = this.db.Parametrizacion.Where(param11 => param11.Descripcion == "PorcentajeMarcador").FirstOrDefault(); Parametrizacion param1 = this.db.Parametrizacion.Where(param12 => param12.Descripcion == "PorcentajeContado").FirstOrDefault(); Parametrizacion param2 = this.db.Parametrizacion.Where(param13 => param13.Descripcion == "PorcentajeGremio").FirstOrDefault(); if (param != null) { decimal porcentaje_lista = (decimal)param.Valor; decimal porcentaje_contado = (decimal)param1.Valor; decimal porcentaje_gremio = (decimal)param2.Valor; decimal PrecioLista = cd.PrecioUnitario * (1 + (porcentaje_lista / 100)); decimal PrecioContado = PrecioLista - (PrecioLista * porcentaje_contado) / 100; decimal PrecioGremio = cd.PrecioUnitario * (1 + (porcentaje_gremio / 100)); p = this.db.Producto.Find(cd.idProducto); p.PrecioLista = PrecioLista; p.PrecioContado = PrecioContado; p.PrecioGremio = PrecioGremio; p.CodigoBarras = cd.CodigoBarras; db.Entry(p).State = EntityState.Modified; // this.save(); } Stock s = this.db.Stock.Where(s1 => s1.idProducto == cd.idProducto) .FirstOrDefault(); if (s != null) { s.Cantidad += cd.Cantidad; db.Entry(s).State = EntityState.Modified; // this.save(); } else { Stock s1 = new Stock(); s1.idProducto = cd.idProducto; s1.Cantidad = cd.Cantidad; s1.Estado = "A"; s1.FechaAlta = DateTime.Today; s1.UsuarioAlta = 1; s1.idStock = 0; db.Stock.Add(s1); // this.save(); } ProductoPrecio pp = this.db.ProductoPrecio.Where(pp1 => pp1.idProducto == cd.idProducto && pp1.idProveedor == r.idProveedor).FirstOrDefault(); if (pp != null) { pp.PrecioCosto = cd.PrecioUnitario; pp.FechaAlta = DateTime.Today; db.Entry(pp).State = EntityState.Modified; // this.save(); } else { ProductoPrecio pp1 = new ProductoPrecio(); pp1.idProducto = cd.idProducto; pp1.idProveedor = r.idProveedor; pp1.PrecioCosto = cd.PrecioUnitario; pp1.Estado = "A"; pp1.UsuarioAlta = 1; pp1.FechaAlta = DateTime.Today; db.ProductoPrecio.Add(pp1); // this.save(); } } else { p.idProducto = cd.idProducto; p.Nombre = cd.NombreProducto; p.CodigoBarras = cd.CodigoBarras; p.UsuarioAlta = 1; p.FechaAlta = DateTime.Today; p.Estado = "A"; //por ahora hard Parametrizacion param = new Parametrizacion(); param = this.db.Parametrizacion.Where(param11 => param11.Descripcion == "PorcentajeMarcador").FirstOrDefault(); Parametrizacion param1 = this.db.Parametrizacion.Where(param12 => param12.Descripcion == "PorcentajeContado").FirstOrDefault(); Parametrizacion param2 = this.db.Parametrizacion.Where(param13 => param13.Descripcion == "PorcentajeGremio").FirstOrDefault(); if (param != null) { decimal porcentaje_contado = (decimal)param1.Valor; decimal porcentaje_lista = (decimal)param.Valor; decimal porcentaje_gremio = (decimal)param2.Valor; decimal PrecioLista = cd.PrecioUnitario * (1 + (porcentaje_lista / 100)); decimal PrecioContado = PrecioLista - (PrecioLista * porcentaje_contado) / 100; decimal PrecioGremio = cd.PrecioUnitario * (1 + (porcentaje_gremio / 100)); p.PrecioLista = PrecioLista; p.PrecioContado = PrecioContado; p.PrecioGremio = PrecioGremio; } p = this.db.Producto.Add(p); //this.save(); Stock s = new Stock(); s.Cantidad = cd.Cantidad; s.idProducto = p.idProducto; s.FechaAlta = DateTime.Today; s.UsuarioAlta = 1; s.Estado = "A"; s = this.db.Stock.Add(s); //this.save(); ProductoPrecio pp = new ProductoPrecio(); pp.idProducto = p.idProducto; pp.idProveedor = r.idProveedor; pp.Estado = "A"; pp.FechaAlta = DateTime.Today; pp.UsuarioAlta = 1; pp.PrecioCosto = cd.PrecioUnitario; pp = this.db.ProductoPrecio.Add(pp); //this.save(); if (r.idGrupo > 0) { GrupoXProducto gxp = new GrupoXProducto(); gxp.idGrupo = r.idGrupo; gxp.idProducto = pp.idProducto; gxp.Estado = "A"; gxp.FechaAlta = DateTime.Today; gxp.UsuarioAlta = 1; this.db.GrupoXProducto.Add(gxp); // this.save(); } } CompraDetalle cp = new CompraDetalle(); cp.idCompraDetalle = 0; cp.idProducto = cd.idProducto == 0?p.idProducto:cd.idProducto; cp.idCompra = c.idCompra; cp.PrecioUnitario = cd.PrecioUnitario; cp.PrecioTotal = cd.PrecioTotal; cp.UsuarioAlta = 1; cp.FechaAlta = DateTime.Today; cp = this.db.CompraDetalle.Add(cp); //this.save(); } //Registrar Movimiento if (r.idMedioPago == 1) { Caja c3 = new Caja(); c3.idCaja = 0; c3.idConcepto = 2; //Compra c3.TipoMovimiento = "E"; c3.Monto = r.Total; c3.Descripcion = "Compra Correspondiente a Nro. Factura: " + r.NroFactura; c3.Estado = "A"; c3.UsuarioAlta = 1; c3.FechaAlta = DateTime.Today; c3 = this.db.Caja.Add(c3); //this.save(); } this.save(); }
public void Costear(Transaccion transaccion, DbTransaction transaction) { try { var igv = impuestoRepository.Single((int)TipoImpuesto.IGV); var listasPrecio = listaPrecioRepository.GetByEmpresa(transaccion.IdEmpresa); foreach (var movimientoProducto in transaccion.MovimientoProducto) { var producto = productoRepository.Single(movimientoProducto.IdProducto); var presentacionActual = presentacionRepository.Single(movimientoProducto.IdPresentacion); var cantidadCompra = movimientoProducto.Cantidad.Redondear(); var costoCompra = movimientoProducto.Costo.Redondear(); var equivalencia = presentacionActual.Equivalencia.Redondear(); var costoActual = productoPrecioRepository.GetCostoByPresentacion(transaccion.IdEmpresa, transaccion.IdSucursal, presentacionActual.IdPresentacion, transaction); var stockActual = productoStockRepository.GetStockByPresentacion(transaccion.IdSucursal, presentacionActual.IdPresentacion, transaction); if (costoActual <= 0 || stockActual <= 0) { costoActual = costoCompra; stockActual = cantidadCompra; } var costoPonderadoMovimiento = (((stockActual * costoActual) + (costoCompra * cantidadCompra)) / (stockActual + cantidadCompra)).Redondear(); var costoPonderado = (costoPonderadoMovimiento / equivalencia).Redondear(); var presentaciones = presentacionRepository.GetByIdProducto(movimientoProducto.IdProducto); var precios = productoPrecioRepository.GetPreciosBySucursalAndProducto(transaccion.IdSucursal, movimientoProducto.IdProducto, transaction); foreach (var presentacion in presentaciones) { var costo = (costoPonderado * presentacion.Equivalencia).Redondear(); foreach (var listaPrecio in listasPrecio) { costo = tipoCambioRepository.GetMontoEnMonedaLocal(listaPrecio.IdMoneda, costo, transaccion.FechaDocumento, transaccion.IdEmpresa, true); var productoPrecio = precios.FirstOrDefault(p => p.IdListaPrecio == listaPrecio.IdListaPrecio && p.IdPresentacion == presentacion.IdPresentacion); if (productoPrecio == null) { #region Insertar en ProductoPrecio var precioVenta = producto.EsExonerado ? costo : (costo * (1 + (igv.Monto / 100))).Redondear(); productoPrecio = new ProductoPrecio { IdSucursal = transaccion.IdSucursal, IdPresentacion = presentacion.IdPresentacion, IdListaPrecio = listaPrecio.IdListaPrecio, Costo = costo, PorcentajeGanancia = 0m, Ganancia = 0m, Valor = costo, PrecioVenta = precioVenta, UsuarioCreacion = transaccion.UsuarioCreacion }; productoPrecioRepository.Add(productoPrecio); #endregion } else { if (listaPrecio.AutoActualizar) { var ganancia = costo * productoPrecio.PorcentajeGanancia.Redondear(); var valor = costo + ganancia; var precioVenta = producto.EsExonerado ? valor : (valor * (1 + (igv.Monto / 100m))).Redondear(); #region Actualizar Costo, Ganancia, Valor y Precio de Venta productoPrecio.Costo = costo; productoPrecio.PorcentajeGanancia = 0; productoPrecio.Ganancia = ganancia; productoPrecio.Valor = valor; productoPrecio.PrecioVenta = precioVenta; productoPrecio.UsuarioModificacion = transaccion.UsuarioModificacion; productoPrecioRepository.UpdateCostoGananciaValorPrecioVenta(productoPrecio, transaction); #endregion } else { #region Actualizar sólo Costo productoPrecio.Costo = costo; productoPrecio.UsuarioCreacion = transaccion.UsuarioCreacion; productoPrecioRepository.UpdateCostoProductoPrecio(productoPrecio, transaction); #endregion } } } } } } catch (Exception ex) { throw new Exception("Ocurrio un error mientras se realizaba el Costeo, detalles: " + ex.Message); } }