Exemplo n.º 1
0
        public async Task CreateTenant(CreateTenantInputDto inputDto)
        {
            if ((await _tenantManager.FindByTenancyNameAsync(inputDto.TenancyName)).IsNotNull())
            {
                throw new HozaruException(string.Format("Toko Id {0} tidak bisa digunakan. Silahkan gunakan Toko Id lain.", inputDto.TenancyName));
            }

            var district = _districtRepository.Get(inputDto.DistrictId);

            Validate.Found(district, "Kecamatan");

            var tenant         = new Tenant(inputDto.TenancyName, inputDto.Name, inputDto.WhatsappNumber, inputDto.Address, inputDto.Phone, district);
            var defaultEdition = await _editionManager.FindByNameAsync(EditionManager.DefaultEditionName);

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

            var createTenantResult = await _tenantManager.CreateAsync(tenant);

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

            CurrentUnitOfWork.DisableFilter(HozaruDataFilters.MayHaveTenant);
            CurrentUnitOfWork.DisableFilter(HozaruDataFilters.MustHaveTenant);
            CurrentUnitOfWork.EnableFilter(HozaruDataFilters.MayHaveTenant);
            using (CurrentUnitOfWork.SetFilterParameter(HozaruDataFilters.MayHaveTenant, HozaruDataFilters.Parameters.TenantId, tenant.Id))
            {
                IList <Role> createdRoles = await _roleAppService.CreateDefaultRoles(tenant.Id);

                foreach (var role in createdRoles)
                {
                    await _roleManager.GrantAllPermissionsAsync(role);
                }

                await CurrentUnitOfWork.SaveChangesAsync();

                //Create admin user for the tenant
                var adminUser        = User.CreateTenantAdminUser(tenant, inputDto.AdminEmailAddress, inputDto.Password, inputDto.FirstName, inputDto.LastName);
                var createUserResult = await _userManager.CreateAsync(adminUser);

                createUserResult.CheckErrors();
                await CurrentUnitOfWork.SaveChangesAsync(); //To get admin user's id

                var adminRole = _roleManager.Roles.Single(r => r.Name == "Admin");
                //Assign admin user to role!
                var addRoleResult = await _userManager.AddToRoleAsync(adminUser.Id, adminRole.Name);

                addRoleResult.CheckErrors();

                //await _tenantConfigurationAppService.CreateNew(tenant);

                await CurrentUnitOfWork.SaveChangesAsync();
            }

            _apiKeyService.CreateApiKey(tenant.Id);
        }