< Summary

Information
Class: OzonOrdersWeb.Controllers.AppStatusController
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/AppStatusController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 71
Coverable lines: 71
Total lines: 169
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 18
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
Index()100%210%
Create()100%210%
Create()0%2040%
Delete()0%4260%
Edit()0%620%
Edit()0%4260%
UpdateStatusColor()100%210%
ResetStatusColor()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/Controllers/Directories/AppStatusController.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Authorization;
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.EntityFrameworkCore;
 4using OzonDomains.Models;
 5using Services.CacheServices.Cache.OzonOrdersCache;
 6using Services.DataServices;
 7using Services.CacheServices.Cache;
 8
 9namespace OzonOrdersWeb.Controllers
 10{
 11    [Authorize(Roles = "Admin")]
 12    [Area("Studio2")]
 13    public class AppStatusController : Controller
 14    {
 15        private readonly AppStatusDataServices _servcies;
 16        private readonly OrdersDataServices _ordersDataServices;
 17        private readonly OrderCache _cache;
 18        private readonly CacheUpdater<Order> _cacheUpdater;
 019        public AppStatusController(AppStatusDataServices servcies,
 020                                   OrdersDataServices ordersDataServices,
 021                                   OrderCache orderCache,
 022                                   CacheUpdater<Order> cacheUpdater)
 23        {
 024            _servcies = servcies;
 025            _ordersDataServices = ordersDataServices;
 026            _cache = orderCache;
 027            _cacheUpdater = cacheUpdater;
 028        }
 29
 30        /// <summary>Справочник статусов — весь список: сортировка, фильтры и поиск в гриде AG Grid на клиенте.</summary
 31        public async Task<IActionResult> Index()
 32        {
 033            var appStatuses = (await _servcies.GetAppStatuses()).OrderBy(status => status.Name).ToList();
 034            return View(appStatuses);
 035        }
 36
 37        public async Task<IActionResult> Create()
 38        {
 039            string? result = TempData["StatusResult"] as string;
 040            ViewData["StatusResult"] = result;
 41
 042            var appStatusList = await _servcies.GetAppStatuses();
 043            ViewData["AppStatusList"] = appStatusList;
 44
 045            return View();
 046        }
 47
 48        [HttpPost]
 49        public async Task<IActionResult> Create([Bind("Id,Name,IsFinal")] AppStatus appStatus)
 50        {
 051            if (ModelState.IsValid)
 52            {
 53
 54
 055                var existingStatus = await _servcies.GetAppStatusAsync(appStatus);
 056                if (existingStatus != null)
 57                {
 058                    TempData["StatusResult"] = $"Не удалось добавить статус '{appStatus.Name}'";
 059                    return RedirectToAction(nameof(Create));
 60                }
 61
 062                await _servcies.AddAppStatus(appStatus);
 63
 064                return RedirectToAction("Index");
 65
 66            }
 067            return View(appStatus);
 068        }
 69
 70
 71        public async Task<IActionResult> Delete(int? id)
 72        {
 073            if (!id.HasValue)
 074                return RedirectToAction("Index");
 75
 076            var appStatus = await _servcies.GetAppStatusAsync(id.Value);
 077            if (appStatus != null)
 78            {
 079                var defaultStatus = await _servcies.GetAppStatusAsync(new AppStatus(){Name = "Не указан"});
 80
 081                var ordersWithDeletedStatus = (await _ordersDataServices.GetOrders()).ToList();
 082                ordersWithDeletedStatus = ordersWithDeletedStatus.Where(o => o.AppStatusId == id).ToList();
 83
 084                foreach (var order in ordersWithDeletedStatus)
 85                {
 086                    order.AppStatus = defaultStatus;
 87                }
 088                await _servcies.DeleteAppStatus(appStatus);
 089                await _cacheUpdater.Update(_cache);
 090            }
 91
 092            return RedirectToAction("Index");
 093        }
 94
 95        public async Task<IActionResult> Edit(int id)
 96        {
 097            var appStatus = await _servcies.GetAppStatusAsync(id);
 098            if (appStatus == null)
 99            {
 0100                return NotFound();
 101            }
 102
 0103            return View(appStatus);
 0104        }
 105
 106
 107        [HttpPost]
 108        [ValidateAntiForgeryToken]
 109        public async Task<IActionResult> Edit(int id, AppStatus appStatus)
 110        {
 0111            if (id != appStatus.Id)
 112            {
 0113                return NotFound();
 114            }
 115
 0116            if (ModelState.IsValid)
 117            {
 118                try
 119                {
 0120                    await _servcies.UpdateAppStatus(appStatus);
 0121                    await _cacheUpdater.Update(_cache);
 0122                }
 0123                catch (DbUpdateConcurrencyException)
 124                {
 0125                    if (await _servcies.GetAppStatusAsync(id) == null)
 126                    {
 0127                        return NotFound();
 128                    }
 129                    else
 130                    {
 0131                        throw;
 132                    }
 133                }
 0134                return RedirectToAction(nameof(Index));
 135            }
 0136            return View(appStatus);
 0137        }
 138
 139        [HttpPost]
 140        public async Task<IActionResult> UpdateStatusColor(int statusId, string colorCode)
 141        {
 142            try
 143            {
 0144                await _servcies.UpdateStatusColor(statusId, colorCode);
 0145                await _cacheUpdater.Update(_cache);
 0146                return Json(new { success = true });
 147            }
 0148            catch (Exception ex)
 149            {
 0150                return Json(new { success = false, error = ex.Message });
 151            }
 0152        }
 153
 154        [HttpPost]
 155        public async Task<IActionResult> ResetStatusColor(int statusId)
 156        {
 157            try
 158            {
 0159                await _servcies.ResetStatusColor(statusId);
 0160                await _cacheUpdater.Update(_cache);
 0161                return Json(new { success = true });
 162            }
 0163            catch (Exception ex)
 164            {
 0165                return Json(new { success = false, error = ex.Message });
 166            }
 0167        }
 168    }
 169}