コード例 #1
0
        /// <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)
            });
        }
コード例 #2
0
        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 }));
        }