public HttpResponseMessage OpenZone(Guid inventorization, [FromUri] int code) { try { ZoneModel zone = _zoneRepository.GetZone(code); ZoneState state = _inventorizationRepository.GetZoneState(inventorization, code); if (state == null) { if (zone == null) { zone = new ZoneModel(); zone.Id = Guid.NewGuid(); zone.Name = "Зона " + code; zone.Number = code; _zoneRepository.Create(zone); } var userClaims = Request.GetOwinContext().Authentication.User; _inventorizationRepository.OpenZone(inventorization, zone.Id, Guid.Parse(userClaims.Claims.Single(x => x.Type == ClaimTypes.Sid).Value)); state = _inventorizationRepository.GetZoneState(inventorization, zone.Id); } if (state.ClosedAt.HasValue && state.ClosedAt.Value.ToUniversalTime() < DateTime.UtcNow) { return(Request.CreateResponse(HttpStatusCode.Forbidden, "Зона уже была закрыта. Для повторного открытия обратитесь к менеджеру.")); } return(Request.CreateResponse(HttpStatusCode.OK, zone)); } catch (Exception ex) { _logger.Error(ex, $"Open zone error. Zone code:{code}. InventorizationId: {inventorization}"); } return(Request.CreateResponse(HttpStatusCode.OK)); }
private void CheckZoneAccess(Model.Action action) { ZoneState zoneState = inventorizationRepository.GetZoneState(action.Inventorization, action.Zone); if (zoneState == null) { throw new ZoneAccessException(action.Zone, $"Зона не была открыта. Сначала откройте зону."); } if (zoneState.ClosedAt.HasValue && zoneState.ClosedAt.Value.ToUniversalTime() < DateTime.Now) { throw new ZoneAccessException(action.Zone, $"Зона закрыта. Выберите другую зону."); } }