//GET /api/producto/1 public IHttpActionResult GetProducto(int id) { var producto = productoBL.GetProductoById(id); if (producto == null) { log.Error("Producto no encontrado con ID: " + id); return(NotFound()); } return(Ok(Mapper.Map <Producto, ProductoDTO>(producto))); }
public ActionResult ReporteProductosProveedor(int productoID) { var producto = productoBL.GetProductoById(productoID); if (producto == null) { log.Error("Error al acceder a Producto con ID: " + productoID); return(View("Error")); } ViewBag.ProductoNombre = producto.Nombre; ViewBag.ProductoID = producto.ID; return(View("Reportes\\ReporteProductosProveedor")); }
public IHttpActionResult CreateStock(StockDTO stock) { if (!ModelState.IsValid) { log.Error("Formulario con datos inexistentes o incorrectos."); return(BadRequest()); } Producto producto = productoBL.GetProductoById(stock.ProductoID); TipoDeUnidad tunidad = tipoDeUnidadBL.GetTipoDeUnidadById(stock.TipoDeUnidadID); Stock stockIngresado = stockBL.ValidarStockProducto(stock.ProductoID, stock.TipoDeUnidadID); if (stockIngresado != null) { stockIngresado.Cantidad = stockIngresado.Cantidad + stock.Cantidad; stockBL.UpdateStock(stockIngresado); log.Info("Stock Actualizado satisfactoriamente. ID: " + stockIngresado.ID); } else { Stock stockNuevo = new Stock(); stockNuevo.ProductoID = stock.ProductoID; stockNuevo.TipoDeUnidadID = stock.TipoDeUnidadID; stockNuevo.Cantidad = stock.Cantidad; stockNuevo.ProductoAuxiliar = producto.NombreAuxiliar; stockNuevo.TipoDeUnidadAuxiliar = tunidad.Nombre; stockBL.AddStock(stockNuevo); log.Info("Stock Agregado satisfactoriamente"); } return(Ok()); }
public ActionResult CalcularStockYValorProductoAsync(int clienteID, int productoID, double cantidad, int tipoUnidadID, int counter) { try { double importe; double importeTotal; double stockDisponible = 0; Producto prod = productoBL.GetProductoById(productoID); if (prod == null) { log.Error("El producto no fue encontrado en el sistema, con ID: " + productoID); throw new Exception("El Producto no fue encontrado en el sistema."); } log.Info("Calculando Stock y Valor del Producto: " + prod.Nombre); //Consultamos Stock segun tipo de producto Stock productoSegunStock = new Stock(); if (prod.EsMix && prod.EsBlister) { //Operacion especifica para productos que son MIX y BLISTER a la vez if (tipoUnidadID == Constants.TIPODEUNIDAD_MIX) { //Calculamos el Stock en base a la cantidad var productosMixStock = stockBL.GetListaProductosMixById(productoID); List <double> prodsDisponible = new List <double>(); int contador = 0; foreach (var prodMix in productosMixStock) { productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), tipoUnidadID); if (productoSegunStock == null) { throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); } for (double i = prodMix.Cantidad; i < productoSegunStock.Cantidad; i += prodMix.Cantidad) { if (productoSegunStock.Cantidad >= prodMix.Cantidad) { contador++; } } prodsDisponible.Add(contador); contador = 0; } stockDisponible = prodsDisponible.Min(); } else if (tipoUnidadID == Constants.TIPODEUNIDAD_BLISTER) { //Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID); //if (productoBlisterSegunStock == null) // throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); //stockDisponible = productoBlisterSegunStock.Cantidad; //Calculamos el Stock en base a la cantidad var productosBlisterMixStock = stockBL.GetListaProductosMixById(productoID); List <double> prodsDisponible = new List <double>(); int contador = 0; foreach (var prodMix in productosBlisterMixStock) { productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), Constants.TIPODEUNIDAD_MIX); if (productoSegunStock == null) { throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); } for (double i = (prodMix.Cantidad / 10); i < productoSegunStock.Cantidad; i += (prodMix.Cantidad / 10)) { contador++; } prodsDisponible.Add(contador); contador = 0; } stockDisponible = prodsDisponible.Min(); } } else if (prod.EsMix) { //Calculamos el Stock en base a la cantidad var productosMixStock = stockBL.GetListaProductosMixById(productoID); List <double> prodsDisponible = new List <double>(); int contador = 0; foreach (var prodMix in productosMixStock) { productoSegunStock = stockBL.ValidarStockProducto(prodMix.ProductoDelMixId.GetValueOrDefault(), tipoUnidadID); if (productoSegunStock == null) { throw new Exception("El Producto " + prodMix.ProductoDelMix.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); } for (double i = prodMix.Cantidad; i < productoSegunStock.Cantidad; i += prodMix.Cantidad) { if (productoSegunStock.Cantidad >= prodMix.Cantidad) { contador++; } } prodsDisponible.Add(contador); contador = 0; } stockDisponible = prodsDisponible.Min(); } //else if (prod.EsBlister) //{ // Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID); // ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID); // if (productoBlisterSegunStock == null) // throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); // double cantidadEnKG = (Convert.ToDouble(productoBlisterSegunStock.Cantidad) / (Convert.ToDouble(productoBlisterSegunLista.Gramos) / 1000)); //Convierto a KG // stockDisponible = cantidadEnKG; //} else { //Stock para el productos comunes y blisters if (tipoUnidadID == Constants.TIPODEUNIDAD_BLISTER) { //Producto Blister Stock productoBlisterSegunStock = stockBL.ValidarStockProducto(productoID, Constants.PRECIO_X_KG); ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID); if (productoBlisterSegunStock == null) { throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); } double cantidadEnKG = (Convert.ToDouble(productoBlisterSegunStock.Cantidad) / (Convert.ToDouble(productoBlisterSegunLista.Gramos) / 1000)); //Convierto a KG stockDisponible = cantidadEnKG; } else { //Producto Comun productoSegunStock = stockBL.ValidarStockProducto(productoID, tipoUnidadID); if (productoSegunStock == null) { throw new Exception("El Producto " + prod.Nombre + " no tiene Stock Asociado para el Tipo de Unidad seleccionado. Revisar la carga del Stock en el sistema antes de continuar."); } stockDisponible = productoSegunStock.Cantidad; } } log.Info("Stock Disponible para el producto: " + stockDisponible); //Calculamos los Precios ListaPrecio productoSegunLista = ventaMayoristaBL.CalcularImporteSegunCliente(clienteID, productoID, cantidad); switch (tipoUnidadID) { case Constants.PRECIO_X_KG: //Este caso aplica tanto para Productos comunes como para Productos MIX if (Convert.ToDouble(productoSegunLista.PrecioXKG) > 0) { //Casos en la lista de precios donde hay precio x kg y precio por bulto en base a cantidad //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado))) if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if ((Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else { importe = Convert.ToDouble(productoSegunLista.PrecioXKG); } } else { //Casos en la lista de precios donde no hay precio x kg pero sí hay precio por bulto //if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) > 0) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if ((Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else { throw new Exception("El Producto seleccionado no tiene precios correctamente cargados en el sistema, " + "por favor revisar la tabla de Lista de Precios antes de continuar"); } } break; case Constants.PRECIO_X_UNIDAD: if (Convert.ToDouble(productoSegunLista.PrecioXUnidad) > 0) { //Casos en la lista de precios donde hay precio x unidad y precio por bulto en base a cantidad if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k)))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) == 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) == 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else { importe = Convert.ToDouble(productoSegunLista.PrecioXUnidad); } //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad <= 9 && cantidad != 1)) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); //else if ((Convert.ToDouble(productoSegunLista.KGBultoCerrado10k) != 0 && (cantidad > 9))) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); //else // importe = Convert.ToDouble(productoSegunLista.PrecioXUnidad); } else { //Casos en la lista de precios donde no hay precio x unidad pero sí hay precio por bulto //if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) > 0) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); //if (Convert.ToDouble(productoSegunLista.KGBultoCerrado) != 0 && (cantidad <= 9 && cantidad != 1)) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); //else if ((Convert.ToDouble(productoSegunLista.KGBultoCerrado10k) != 0 && (cantidad > 9))) // importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado) && (cantidad < Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) != 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) == 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado); } else if (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado) == 0 && (Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k)) != 0 && (cantidad >= Convert.ToDouble(productoSegunLista.KGBultoCerrado10k))) { importe = Convert.ToDouble(productoSegunLista.PrecioXBultoCerrado10k); } else { throw new Exception("El Producto seleccionado no tiene precios correctamente cargados en el sistema, " + "por favor revisar la tabla de Lista de Precios antes de continuar"); } } break; case Constants.TIPODEUNIDAD_BLISTER: ListaPrecioBlister productoBlisterSegunLista = ventaMayoristaBL.CalcularImporteBlisterSegunCliente(productoID); if (productoBlisterSegunLista == null) { throw new Exception("Error al cargar los precios de producto"); } importe = Convert.ToDouble(productoBlisterSegunLista.Precio); //Sumamos el importe total importeTotal = importe * cantidad; break; default: importe = 0; break; } //Sumamos el importe total importeTotal = importe * cantidad; log.Info("Importe del Producto: " + importeTotal); return(Json(new { Success = true, Importe = importe, ImporteTotal = importeTotal, Counter = counter, Stock = stockDisponible }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { log.Error("Se ha producido una excepción al calcular stock y valor del producto. Error: " + ex.Message); return(Json(new { Success = false, Error = ex.Message }, JsonRequestBehavior.AllowGet)); } }
public IHttpActionResult Compra(CompraDTO compraDTO) { if (!ModelState.IsValid) { log.Error("Formulario con datos incorrectos o insuficientes."); return(BadRequest()); } //Proveedor proveedor = proveedorBL.GetProveedorById(compraDTO.ProveedorID); Proveedor proveedor = _UOWCompra.ProveedorRepository.GetByID(compraDTO.ProveedorID); if (proveedor == null) { log.Error("No se ha encontrado Proveedor con el ID: " + compraDTO.ProveedorID); return(BadRequest()); } var compra = Mapper.Map <CompraDTO, Compra>(compraDTO); //Verificamos si ya se cargó una compra con el mismo NumeroCompra var ultimaCompra = _UOWCompra.CompraRepository .GetAll() .Max(p => p.NumeroCompra); if (compra.NumeroCompra <= ultimaCompra) { compra.NumeroCompra = ultimaCompra + 1; } //compraBL.AddCompra(compra); _UOWCompra.CompraRepository.Add(compra); //log.Info("Compra. Viejo Saldo Proveedor: " + compraDTO.Debe); //Actualizamos el Saldo en base a la Entrega de Efectivo // proveedor.Debe = compraDTO.Debe; //proveedorBL.UpdateProveedor(proveedor); proveedor.Debe = compraDTO.Debe; proveedor.SaldoAfavor = compraDTO.SaldoAfavor; _UOWCompra.ProveedorRepository.Update(proveedor); log.Info("Compra. Nuevo Saldo Proveedor: " + proveedor.Debe); if (compra.ProductosXCompra.Count != 0) { //Una vez cargada la venta, actualizamos Stock foreach (var item in compra.ProductosXCompra) { // Producto producto = productoBL.GetProductoById(item.ProductoID); //Stock stock = stockBL.ValidarStockProducto(item.ProductoID, item.TipoDeUnidadID); Stock stock = _UOWCompra.StockRepository.GetAll().Where(s => s.ProductoID == item.ProductoID && s.TipoDeUnidadID == item.TipoDeUnidadID).SingleOrDefault(); if (stock != null) { stock.Cantidad = stock.Cantidad + item.Cantidad; //stockBL.UpdateStock(stock); _UOWCompra.StockRepository.Update(stock); log.Info("Stock actualizado o creado para producto con ID: " + item.ProductoID + ". Nueva Cantidad: " + stock.Cantidad); } else { Stock stockNuevo = new Stock(); Producto prod = productoBL.GetProductoById(item.ProductoID); TipoDeUnidad tunidad = clasificacionBL.GetTipoDeUnidadById(item.TipoDeUnidadID); stockNuevo.ProductoID = item.ProductoID; stockNuevo.TipoDeUnidadID = item.TipoDeUnidadID; stockNuevo.Cantidad = item.Cantidad; stockNuevo.ProductoAuxiliar = prod.NombreAuxiliar; stockNuevo.TipoDeUnidadAuxiliar = tunidad.Nombre; //stockBL.AddStock(stockNuevo); _UOWCompra.StockRepository.Add(stockNuevo); log.Info("Stock actualizado o creado para producto con ID: " + item.ProductoID + ". Nueva Cantidad: " + stockNuevo.Cantidad); } } } //Actualizamos valores _UOWCompra.Save(); log.Info("Compra generada satisfactoriamente."); return(Ok()); }