/
daniilsavchenko
/
StockFlow
Обзор
Документация
Войти
/
daniilsavchenko
/
StockFlow
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Controllers/HomeController.cs
78 строк
3 KB
StockFlow Student
Finalize StockFlow project
24 май 2026, 18:40
24 май 2026, 18:40
e787c84
Код
Авторство
О чём код?
using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; using StockFlow.Data; using StockFlow.Models; using StockFlow.Models.ViewModels; namespace StockFlow.Controllers; public class HomeController : Controller { private readonly AppDbContext _context; private readonly int _lowStockThreshold; public HomeController(AppDbContext context, IOptions<InventorySettings> inventorySettings) { _context = context; _lowStockThreshold = inventorySettings.Value.LowStockThreshold; } public async Task<IActionResult> Index() { var products = await _context.Products .Include(p => p.Supplier) .Include(p => p.Stock) .Include(p => p.CurrentPrice) .ToListAsync(); var viewModel = new HomeDashboardViewModel { TotalProducts = products.Count, TotalSuppliers = await _context.Suppliers.CountAsync(), TotalQuantity = products.Sum(p => p.Quantity), TotalInventoryValue = products.Sum(p => p.Price * p.Quantity), ProductsWithoutSupplier = products.Count(p => p.SupplierId == null), LowStockThreshold = _lowStockThreshold, LowStockProducts = products .Where(p => p.Quantity <= _lowStockThreshold) .OrderBy(p => p.Quantity) .ThenBy(p => p.Name) .Select(p => new LowStockItemViewModel { ProductId = p.Id, ProductName = p.Name, Quantity = p.Quantity, SupplierName = p.Supplier?.Name ?? "Без поставщика" }) .ToList(), SupplierAnalytics = products .GroupBy(p => new { p.SupplierId, SupplierName = p.Supplier != null ? p.Supplier.Name : "Без поставщика" }) .Select(group => new SupplierAnalyticsViewModel { SupplierId = group.Key.SupplierId, SupplierName = group.Key.SupplierName, ProductCount = group.Count(), TotalQuantity = group.Sum(p => p.Quantity), TotalValue = group.Sum(p => p.Quantity * p.Price) }) .OrderByDescending(item => item.TotalValue) .ThenBy(item => item.SupplierName) .ToList() }; return View(viewModel); } public IActionResult Privacy() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } }