/// <summary> /// Convertir clase Salida a SalidaViewModel. /// </summary> /// <param name="salida"></param> /// <returns></returns> public async Task <SalidaViewModel> ToSalidaViewModelAsync(Salida salida) { var _salida = await _getHelper.GetSalidaByIdAsync(salida.SalidaID); return(new SalidaViewModel() { Aplicado = salida == null ? false : salida.Aplicado, Fecha = salida == null ? DateTime.Now : salida.Fecha, FechaActualizacion = salida == null ? DateTime.Now : salida.FechaActualizacion, FechaCreacion = _salida == null ? DateTime.Now : _salida.FechaCreacion, Folio = salida.Folio == null ? "" : salida.Folio.Trim().ToUpper(), Observaciones = salida.Observaciones == null ? "" : salida.Observaciones.Trim().ToUpper(), SalidaID = salida == null?Guid.NewGuid() : salida.SalidaID, SalidaTipoID = salida.SalidaTipoID, SalidaTipo = await _getHelper.GetSalidaTipoByIdAsync((Guid)salida.SalidaTipoID), SalidaTipoDDL = await _combosHelper.GetComboSalidasTipoAsync(), UsuarioID = salida.UsuarioID, Usuarios = salida.Usuarios, SalidaDetalle = await _getHelper.GetSalidaDetalleBySalidaIdAsync(salida.SalidaID) }); }
public async Task <IActionResult> Apply(Guid?id) { var validateToken = await ValidatedToken(_configuration, _getHelper, "movimiento"); if (validateToken != null) { return(validateToken); } //cambiar por permiso para aplicar que se debe agregar como acción. if (!await ValidateModulePermissions(_getHelper, moduloId, eTipoPermiso.PermisoEscritura)) { return(RedirectToAction(nameof(Index))); } if (id == null) { TempData["toast"] = "Identificador incorrecto."; return(RedirectToAction(nameof(Index))); } if (SalidaAplicada((Guid)id)) { TempData["toast"] = "Salida aplicada no se permiten cambios."; return(RedirectToAction(nameof(Details), new { id })); } var salida = await _getHelper.GetSalidaByIdAsync((Guid)id); if (salida == null) { TempData["toast"] = "Identificador de la entrada inexistente."; return(RedirectToAction(nameof(Index))); } salida.Aplicado = true; _context.Update(salida); var detalle = await _getHelper.GetSalidaDetalleBySalidaIdAsync(salida.SalidaID); if (detalle == null) { TempData["toast"] = "Por favor, ingrese al menos un movimiento."; return(RedirectToAction(nameof(Details), new { id })); } var _salidasDetalle = new List <SalidaDetalle>(); foreach (var item in detalle) { Guid _almacenId = (Guid)item.AlmacenID; Guid _productoId = (Guid)item.ProductoID; decimal _cantidad = (decimal)item.Cantidad; if (item.Productos.Unidades.Pieza) { _cantidad = (int)_cantidad; } if (item.Productos.Unidades.Paquete) { _productoId = item.Productos.Paquete.PiezaProductoID; _cantidad = item.Productos.Paquete.CantidadProductoxPaquete * _cantidad; } var _salidaDetalle = _salidasDetalle .FirstOrDefault(s => s.ProductoID == item.ProductoID && s.AlmacenID == item.AlmacenID); if (_salidaDetalle == null) { _salidasDetalle.Add(new SalidaDetalle() { Almacenes = item.Almacenes, AlmacenID = item.AlmacenID, Cantidad = item.Cantidad, PrecioCosto = item.PrecioCosto, ProductoID = item.ProductoID, Productos = item.Productos, SalidaDetalleID = item.SalidaDetalleID, SalidaID = item.SalidaID, Salidas = item.Salidas }); } else { _salidaDetalle.Cantidad += item.Cantidad; } } foreach (var s in _salidasDetalle) { var existencia = _context.Existencias .FirstOrDefault(e => e.ProductoID == s.ProductoID && e.AlmacenID == s.AlmacenID); if (existencia == null) { ModelState.AddModelError("", ""); } else { if ((existencia.ExistenciaEnAlmacen - s.Cantidad) < 0) { TempData["toast"] = "La cantidad del producto excede la cantidad en inventario"; return(RedirectToAction(nameof(Details), new { id })); } else { existencia.ExistenciaEnAlmacen -= (decimal)s.Cantidad; _context.Update(existencia); } } } try { await _context.SaveChangesAsync(); TempData["toast"] = "La salida ha sido aplicada, no podrá realizar cambios en la información."; await BitacoraAsync("Aplicar", salida); } catch (Exception ex) { string excepcion = ex.InnerException != null?ex.InnerException.Message.ToString() : ex.ToString(); TempData["toast"] = "Error al aplicar el movimieno, verifique bitácora de errores."; await BitacoraAsync("Aplicar", salida, excepcion); } return(RedirectToAction(nameof(Details), new { id })); }