private void agregarHistoricoFisico(AjusteSIAH ajusteSIAH, int saldo, DetalleAjusteSIAH detalle) { HistoricoFisico historicoFisico = new HistoricoFisico(); historicoFisico.insumoId = detalle.insumoId; historicoFisico.fechaMovimiento = ajusteSIAH.fechaGeneracion; historicoFisico.descripcion = "Ajuste de stock: " + detalle.info; historicoFisico.saldo = saldo; historicoFisico.isNegative = detalle.cantidad < 0 ? true : false; historicoFisico.cantidad = detalle.cantidad; db.HistoricoFisico.Add(historicoFisico); }
public ActionResult ActualizarStock(string[] syncData, string userId) { try { // TODO: crear un ajuste nuevo y al recorrer los insumos ir agregando los detalles // No olvidar crear los historicos para cada insumo var ajuste = new AjusteSIAH(); ajuste.fechaGeneracion = DateTime.UtcNow; ajuste.info = "Sincronización con stock OCASA"; ajuste.usuarioId = int.Parse(userId); Uri baseUri = new Uri("http://localhost:3000"); var detalles = new HashSet <DetalleAjusteSIAH>(); foreach (var id in syncData) { var insumoActual = db.Insumos.Find(int.Parse(id)); var insumoOcasaActual = db.InsumoOcasa.Find(int.Parse(id)); if (insumoActual != null) { //Asumimos que el Stock Fisico (entregado) es mayor al stock (comprometido por las autorizaciones) //por lo tanto calculamos la diferencia para mantener la misma respecto al nuevo stock //Ej: Stock fisico = 100; Stock comprometido = 30; Stock Ocasa = 90 //Resultado -> Stock fisico 90; Stock comprometido = 20 var diferenciaStocks = insumoOcasaActual.stockFisico - insumoActual.stockFisico; var diff = insumoActual.stockFisico - insumoActual.stock; insumoActual.stockFisico = insumoOcasaActual.stockFisico <= 0 ? 0 : insumoOcasaActual.stockFisico; insumoActual.stock = insumoActual.stockFisico - diff <= 0 ? 0 : insumoActual.stockFisico - diff; db.Entry(insumoActual).State = EntityState.Modified; var detalleAjuste = new DetalleAjusteSIAH(); detalleAjuste.insumoId = insumoActual.id; detalleAjuste.info = "Ajuste por sincronizacion con OCASA"; detalleAjuste.cantidad = diferenciaStocks; detalles.Add(detalleAjuste); agregarHistoricoSIAH(ajuste, insumoActual.stock, detalleAjuste); agregarHistoricoFisico(ajuste, insumoActual.stockFisico, detalleAjuste); } } ajuste.detallesAjuste = detalles; db.AjusteSIAHs.Add(ajuste); db.SaveChanges(); return(RedirectToAction("DirectorArea", "Home", new { param = "Success" })); } catch (Exception e) { Console.WriteLine(e.ToString()); return(RedirectToAction("DirectorArea", "Home", new { param = e.Message })); } }