예제 #1
0
        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));
        }
예제 #2
0
        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));
        }