/// <summary> /// Context сreation method /// </summary> /// <param name="data">Data</param> /// <param name="userId">User Id</param> /// <param name="work">In Work</param> /// <returns></returns> private async Task <Dictionary <string, string[]> > CreateContext <TUnit, TModel>( TModel data, string userId, Func <TUnit, Task> work) where TModel : IStatUnitM where TUnit : class, IStatisticalUnit, new() { var unit = new TUnit(); if (_dataAccessService.CheckWritePermissions(userId, unit.UnitType)) { return(new Dictionary <string, string[]> { { nameof(UserAccess.UnauthorizedAccess), new[] { nameof(Resource.Error403) } } }); } await _commonSvc.InitializeDataAccessAttributes(_userService, data, userId, unit.UnitType); Mapper.Map(data, unit); _commonSvc.AddAddresses <TUnit>(unit, data); if (work != null) { await work(unit); } unit.UserId = userId; if (_statUnitTypeOfSave == StatUnitTypeOfSave.Service) { IStatUnitAnalyzeService analysisService = new AnalyzeService(_dbContext, _statUnitAnalysisRules, _mandatoryFields, _validationSettings); var analyzeResult = analysisService.AnalyzeStatUnit(unit); if (analyzeResult.Messages.Any()) { return(analyzeResult.Messages); } } var helper = new StatUnitCreationHelper(_dbContext); await helper.CheckElasticConnect(); if (unit is LocalUnit) { await helper.CreateLocalUnit(unit as LocalUnit); } else if (unit is LegalUnit) { await helper.CreateLegalWithEnterpriseAndLocal(unit as LegalUnit); } else if (unit is EnterpriseUnit) { await helper.CreateEnterpriseWithGroup(unit as EnterpriseUnit); } else if (unit is EnterpriseGroup) { await helper.CreateGroup(unit as EnterpriseGroup); } return(null); }
/// <summary> /// Delete / Restore stat. units /// </summary> /// <param name="unitType">Type of stat. units</param> /// <param name="id">Id stat. units</param> /// <param name="toDelete">Remoteness flag</param> /// <param name="userId">User ID</param> public void DeleteUndelete(StatUnitTypes unitType, int id, bool toDelete, string userId) { if (_dataAccessService.CheckWritePermissions(userId, unitType)) { throw new UnauthorizedAccessException(); } var item = _commonSvc.GetStatisticalUnitByIdAndType(id, unitType, true).Result; bool isEmployee = _userService.IsInRoleAsync(userId, DefaultRoleNames.Employee).Result; var mappedItem = Mapper.Map <IStatisticalUnit, ElasticStatUnit>(item); if (isEmployee) { var helper = new StatUnitCheckPermissionsHelper(_dbContext); helper.CheckRegionOrActivityContains(userId, mappedItem.RegionIds, mappedItem.ActivityCategoryIds); } if (item.IsDeleted == toDelete) { _elasticService.EditDocument(Mapper.Map <IStatisticalUnit, ElasticStatUnit>(item)).Wait(); } else { CheckBeforeDelete(item, toDelete); var deletedUnit = _deleteUndeleteActions[unitType](id, toDelete, userId); _postDeleteActions[unitType](deletedUnit, toDelete, userId); _elasticService.EditDocument(Mapper.Map <IStatisticalUnit, ElasticStatUnit>(deletedUnit)).Wait(); } }