public async Task <IActionResult> AddDetails(SalidaDetalle salidaDetalle) { var validateToken = await ValidatedToken(_configuration, _getHelper, "movimiento"); if (validateToken != null) { return(validateToken); } if (!await ValidateModulePermissions(_getHelper, moduloId, eTipoPermiso.PermisoEscritura)) { return(RedirectToAction(nameof(Index))); } if (salidaDetalle == null) { TempData["toast"] = "Identificador incorrecto."; return(RedirectToAction(nameof(Index))); } if (SalidaAplicada(salidaDetalle.SalidaID)) { TempData["toast"] = "Salida aplicada no se permiten cambios."; return(RedirectToAction(nameof(Details), new { id = salidaDetalle.SalidaID })); } if (salidaDetalle.AlmacenID == null) { TempData["toast"] = "El campo almacén es requerido."; ModelState.AddModelError("AlmacenID", "El campo almacén es requerido."); return(View(salidaDetalle)); } if (salidaDetalle.ProductoID == null) { TempData["toast"] = "El campo producto es requerido."; ModelState.AddModelError("ProductoID", "El campo producto es requerido."); return(View(salidaDetalle)); } var almacen = await _getHelper.GetAlmacenByIdAsync((Guid)salidaDetalle.AlmacenID); var producto = await _getHelper.GetProductByIdAsync((Guid)salidaDetalle.ProductoID); TempData["toast"] = "Falta información en algún campo."; if (ModelState.IsValid) { if (almacen == null) { TempData["toast"] = "El campo almacén es requerido."; ModelState.AddModelError("AlmacenID", "El campo almacén es requerido."); return(View(salidaDetalle)); } if (producto == null) { TempData["toast"] = "El campo producto es requerido."; ModelState.AddModelError("ProductoID", "El campo producto es requerido."); return(View(salidaDetalle)); } var existencia = await _context.Existencias .FirstOrDefaultAsync(e => e.ProductoID == producto.ProductoID && e.AlmacenID == almacen.AlmacenID); salidaDetalle.Almacenes = almacen; salidaDetalle.Productos = producto; var cantidadTotalPorProducto = await _context.SalidasDetalle .Where(s => s.SalidaID == salidaDetalle.SalidaID && s.ProductoID == salidaDetalle.ProductoID && s.AlmacenID == salidaDetalle.AlmacenID) .SumAsync(s => s.Cantidad); if (existencia == null || (existencia.ExistenciaEnAlmacen - (cantidadTotalPorProducto + salidaDetalle.Cantidad)) < 0) { ModelState.AddModelError("Cantidad", "La cantidad excede a la cantidad en inventario."); return(View(salidaDetalle)); } try { salidaDetalle.SalidaDetalleID = Guid.NewGuid(); if (producto.Unidades.Pieza) { salidaDetalle.Cantidad = (int)salidaDetalle.Cantidad; } salidaDetalle.PrecioCosto = producto.PrecioCosto; _context.Add(salidaDetalle); await _context.SaveChangesAsync(); TempData["toast"] = "Los datos del producto fueron almacenados correctamente."; await BitacoraAsync("Alta", salidaDetalle, salidaDetalle.SalidaID); return(View(new SalidaDetalle() { AlmacenID = salidaDetalle.AlmacenID, Almacenes = almacen, SalidaID = salidaDetalle.SalidaID, Cantidad = 0, PrecioCosto = 0, })); } catch (Exception ex) { string excepcion = ex.InnerException != null?ex.InnerException.Message.ToString() : ex.ToString(); TempData["toast"] = "[Error] Los datos del producto no fueron almacenados."; ModelState.AddModelError(string.Empty, "Error al guardar registro"); await BitacoraAsync("Alta", salidaDetalle, salidaDetalle.SalidaID, excepcion); } } salidaDetalle.Almacenes = almacen; salidaDetalle.Productos = producto; return(View(salidaDetalle)); }
public async Task <IActionResult> AddDetails(EntradaDetalle entradaDetalle) { var validateToken = await ValidatedToken(_configuration, _getHelper, "movimiento"); if (validateToken != null) { return(validateToken); } if (!await ValidateModulePermissions(_getHelper, moduloId, eTipoPermiso.PermisoEscritura)) { return(RedirectToAction(nameof(Index))); } if (entradaDetalle == null) { TempData["toast"] = "Identificador incorrecto."; return(RedirectToAction(nameof(Index))); } if (EntradaAplicada(entradaDetalle.EntradaID)) { TempData["toast"] = "Entrada aplicada no se permiten cambios."; return(RedirectToAction(nameof(Details), new { id = entradaDetalle.EntradaID })); } if (entradaDetalle.AlmacenID == null) { TempData["toast"] = "El campo almacén es requerido."; ModelState.AddModelError("AlmacenID", "El campo almacén es requerido."); return(View(entradaDetalle)); } if (entradaDetalle.ProductoID == null) { TempData["toast"] = "El campo producto es requerido."; ModelState.AddModelError("ProductoID", "El campo producto es requerido."); return(View(entradaDetalle)); } var almacen = await _getHelper.GetAlmacenByIdAsync((Guid)entradaDetalle.AlmacenID); var producto = await _getHelper.GetProductByIdAsync((Guid)entradaDetalle.ProductoID); TempData["toast"] = "Falta información en algún campo."; ValidarDatosDelProducto(entradaDetalle); if (ModelState.IsValid) { if (almacen == null) { TempData["toast"] = "El campo almacén es requerido."; ModelState.AddModelError("AlmacenID", "El campo almacén es requerido."); return(View(entradaDetalle)); } if (producto == null) { TempData["toast"] = "El campo producto es requerido."; ModelState.AddModelError("ProductoID", "El campo producto es requerido."); return(View(entradaDetalle)); } try { entradaDetalle.EntradaDetalleID = Guid.NewGuid(); if (producto.Unidades.Pieza) { entradaDetalle.Cantidad = (int)entradaDetalle.Cantidad; } _context.Add(entradaDetalle); await _context.SaveChangesAsync(); TempData["toast"] = "Los datos del producto fueron almacenados correctamente."; await BitacoraAsync("Alta", entradaDetalle, entradaDetalle.EntradaID); return(View(new EntradaDetalle() { AlmacenID = entradaDetalle.AlmacenID, Almacenes = almacen, EntradaID = entradaDetalle.EntradaID, Cantidad = 0, PrecioCosto = 0, PrecioVenta = 0 })); } catch (Exception ex) { string excepcion = ex.InnerException != null?ex.InnerException.Message.ToString() : ex.ToString(); TempData["toast"] = "[Error] Los datos del producto no fueron almacenados."; ModelState.AddModelError(string.Empty, "Error al guardar registro"); await BitacoraAsync("Alta", entradaDetalle, entradaDetalle.EntradaID, excepcion); } } entradaDetalle.Almacenes = almacen; entradaDetalle.Productos = producto; return(View(entradaDetalle)); }