示例#1
0
        /// <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);
        }
示例#2
0
        /// <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();
            }
        }