Exemplo n.º 1
0
        public async Task UpdateTenant(TenantDto updateInput)
        {
            var category = await _tenantCategoryManager.TenantCategories
                           .Where(x => x.Title == updateInput.Category.Title)
                           .Include(x => x.SubCategories)
                           .OrderBy(x => x.Title).ToListAsync();

            //var tenant = await _tenantManager.FindByIdAsync(updateInput.Id);

            var tenant = await _tenantManager.Tenants.Where(x => x.Id == updateInput.Id).Include(x => x.SubCategories).Take(1).FirstOrDefaultAsync();

            tenant.Name        = updateInput.Name;
            tenant.TenancyName = updateInput.TenancyName;
            tenant.IsActive    = updateInput.IsActive;
            tenant.Category    = category.FirstOrDefault();

            //tenant.ClearSubCategories();
            //SubCategories.Clear();


            tenant.ClearSubCategories();
            //tenant.SubCategories.Clear();
            //tenant.SubCategories = new List<TenantWithSubCategory>();
            //updateInput.SubCategories.Find(x => x.Title == )
            foreach (var subcategory in category.FirstOrDefault().SubCategories.ToList())
            {
                if (updateInput.SubCategories.Exists(x => x.Title == subcategory.Title))
                {
                    var twsc = new TenantWithSubCategory(tenant, subcategory);
                    await CurrentUnitOfWork.SaveChangesAsync();

                    tenant.AddSubCategories(twsc);
                }
            }
            await CurrentUnitOfWork.SaveChangesAsync();
        }
Exemplo n.º 2
0
 public void AddSubCategories(
     TenantWithSubCategory subCategory)
 {
     SubCategories.Add(subCategory);
 }
Exemplo n.º 3
0
        public override async Task <TenantDto> Create(CreateTenantDto input)
        {
            CheckCreatePermission();

            var category = await _tenantCategoryManager.TenantCategories
                           .Where(x => x.Id == input.Category.Id)
                           .Include(x => x.SubCategories)
                           .OrderBy(x => x.Title).ToListAsync();

            input.Category = category.FirstOrDefault();
            // Create tenant
            var tenant = ObjectMapper.Map <Tenant>(input);

            tenant.ConnectionString = input.ConnectionString.IsNullOrEmpty()
                ? null
                : SimpleStringCipher.Instance.Encrypt(input.ConnectionString);

            var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName);

            if (defaultEdition != null)
            {
                tenant.EditionId = defaultEdition.Id;
            }

            await _tenantManager.CreateAsync(tenant);

            await CurrentUnitOfWork.SaveChangesAsync(); // To get new tenant's id.

            foreach (var subcategory in category.FirstOrDefault().SubCategories.ToList())
            {
                if (input._subCategories.Exists(x => x.Title == subcategory.Title))
                {
                    var twsc = new TenantWithSubCategory(tenant, subcategory);
                    await CurrentUnitOfWork.SaveChangesAsync();

                    tenant.AddSubCategories(twsc);
                }
            }

            await CurrentUnitOfWork.SaveChangesAsync(); // To get new tenant's id.

            // Create tenant database
            _abpZeroDbMigrator.CreateOrMigrateForTenant(tenant);

            // We are working entities of new tenant, so changing tenant filter
            using (CurrentUnitOfWork.SetTenantId(tenant.Id))
            {
                // Create static roles for new tenant
                CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id));

                await CurrentUnitOfWork.SaveChangesAsync(); // To get static role ids

                // Grant all permissions to admin role
                var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin);
                await _roleManager.GrantAllPermissionsAsync(adminRole);

                // Create admin user for the tenant
                var adminUser = User.CreateTenantAdminUser(tenant.Id, input.AdminEmailAddress);
                await _userManager.InitializeOptionsAsync(tenant.Id);

                CheckErrors(await _userManager.CreateAsync(adminUser, User.DefaultPassword));
                await CurrentUnitOfWork.SaveChangesAsync(); // To get admin user's id

                // Assign admin user to role!
                CheckErrors(await _userManager.AddToRoleAsync(adminUser, adminRole.Name));
                await CurrentUnitOfWork.SaveChangesAsync();
            }

            var tenantDto = await GetTenant(new EntityDto <long>(tenant.Id));

            return(tenantDto);
        }