public static async Task <OrganizationMarketer> GetMarketerOrDefault(this IRepositoryAsync <OrganizationMarketer> repo, Guid?organizationId, Guid?marketerId, string referralCode) { OrganizationMarketer ma = null; if (!string.IsNullOrWhiteSpace(referralCode)) { // no recruiter referral codes yet } if (organizationId.HasValue && marketerId.HasValue) { ma = await repo.Queryable().Where(x => x.OrganizationId == organizationId && x.MarketerId == marketerId) .FirstOrDefaultAsync(); } if (ma == null) { if (organizationId.HasValue) { ma = await repo.Queryable() .Include(x => x.OrganizationDefaults) .Where(x => x.OrganizationId == organizationId.Value && x.OrganizationDefaults.Any()) .FirstOrDefaultAsync(); } if (ma == null) { ma = await repo.Queryable().Where(x => x.IsSystemDefault) .FirstAsync(); } } return(ma); }
public async Task <T> Create <T>(OrganizationMarketerInput model) where T : OrganizationMarketerOutput { _logger.LogInformation(GetLogMessage($@"Marketer: {model.MarketerId}, Organization: {model.OrganizationId}")); var entity = await Repository.Queryable().IgnoreQueryFilters() .FirstOrDefaultAsync(x => x.MarketerId == model.MarketerId && x.OrganizationId == model.OrganizationId); if (entity != null) { _logger.LogDebug(GetLogMessage("Existing marketer found, deleted: {0}"), entity.IsDeleted); if (entity.IsDeleted) { _logger.LogDebug(GetLogMessage("un-deleting org_marketer")); entity.IsDeleted = false; entity.UpdatedById = _userInfo.UserId; entity.Updated = DateTimeOffset.UtcNow; entity.MarketerStream = model.MarketerStream; entity.MarketerBonus = model.MarketerBonus; entity.InjectFrom(model); var marketerOutput = await Repository.UpdateAsync(entity, true); _logger.LogDebug(GetLogMessage("{0} records updated in database"), marketerOutput); } } else { _logger.LogDebug(GetLogMessage("No marketer found, creating...")); entity = new OrganizationMarketer() { UpdatedById = _userInfo.UserId, CreatedById = _userInfo.UserId, }.InjectFrom(model) as OrganizationMarketer; var marketerOutput = await Repository.InsertAsync(entity, true); _logger.LogDebug(GetLogMessage("{0} records updated in database"), marketerOutput); } var output = await GetById <T>(model.MarketerId, model.OrganizationId); await Task.Run(() => { RaiseEvent(new OrganizationMarketerCreatedEvent <T> { OrganizationMarketerOutput = output }); }); return(output); }
public async Task <PersonResult> CreatePerson( PersonInput input, Guid?recruiterId, Guid?marketerId, Guid?affiliateOrganizationId, string password = "******" ) { _logger.LogInformation(GetLogMessage("Recruiter:{0};Marketer:{1};AffiliateOrg:{2}"), recruiterId, marketerId, affiliateOrganizationId); var user = await _userAccountManager .FindByEmailAsync(input.EmailAddress); var retVal = new PersonResult(); if (user == null) { OrganizationRecruiter re = null; OrganizationMarketer ma = null; if (affiliateOrganizationId.HasValue) { if (marketerId.HasValue) { ma = await _orgMarketerRepository.Queryable() .Where(x => x.OrganizationId == affiliateOrganizationId.Value && x.MarketerId == marketerId.Value) .FirstOrDefaultAsync(); } else { ma = await _orgMarketerRepository.Queryable() .Include(x => x.OrganizationDefaults) .Where(x => x.OrganizationId == affiliateOrganizationId.Value && x.OrganizationDefaults.Any()) .FirstOrDefaultAsync(); } if (recruiterId.HasValue) { re = await _orgRecruiterRepository.Queryable() .Where(x => x.OrganizationId == affiliateOrganizationId.Value && x.RecruiterId == recruiterId.Value) .FirstOrDefaultAsync(); } else { re = await _orgRecruiterRepository.Queryable() .Include(x => x.RecruitingOrganizationDefaults) .Where(x => x.OrganizationId == affiliateOrganizationId.Value && x.RecruitingOrganizationDefaults.Any()) .FirstOrDefaultAsync(); } } if (ma == null) { ma = await _orgMarketerRepository.Queryable().Where(x => x.IsSystemDefault).FirstAsync(); } if (re == null) { re = await _orgRecruiterRepository.Queryable().Where(x => x.IsSystemDefault).FirstAsync(); } user = new ApplicationUser { UserName = input.EmailAddress, Email = input.EmailAddress, EmailConfirmed = false, Created = DateTimeOffset.UtcNow, PhoneNumber = input.PhoneNumber }; var result = await _userAccountManager.CreateAsync(user, password); if (!result.Succeeded) { retVal.ErrorMessage = result.ToString(); return(retVal); } var person = new Person { ImageUrl = "https://www.dropbox.com/s/icxbbieztc2rrwd/default-avatar.png?raw=1", Id = user.Id, FirstName = input.FirstName, LastName = input.LastName, Iso2 = input.Iso2, ProvinceState = input.ProvinceState, ReferralCode = ma.ReferralCode, AccountManager = new AccountManager() { Id = user.Id, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, ObjectState = ObjectState.Added }, ProjectManager = new ProjectManager() { Id = user.Id, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, ObjectState = ObjectState.Added }, Marketer = new Marketer() { Id = user.Id, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, ObjectState = ObjectState.Added }, Recruiter = new Recruiter() { Id = user.Id, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, ObjectState = ObjectState.Added }, Contractor = new Contractor() { RecruiterOrganizationId = re.OrganizationId, RecruiterId = re.RecruiterId, IsAvailable = false, ObjectState = ObjectState.Added, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, }, Customer = new Customer() { MarketerId = ma.MarketerId, MarketerOrganizationId = ma.OrganizationId, ObjectState = ObjectState.Added, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow, }, ObjectState = ObjectState.Added, Created = DateTimeOffset.UtcNow, Updated = DateTimeOffset.UtcNow }; var theResult = Repository.InsertOrUpdateGraph(person, true); _logger.LogDebug(GetLogMessage("{0} results updated"), theResult); if (theResult > 0) { retVal.Succeeded = true; retVal.PersonId = person.Id; await Task.Run(() => { RaiseEvent(new PersonCreatedEvent { PersonId = person.Id }); }); } } else { _logger.LogInformation(GetLogMessage("Email address:{0};"), input.EmailAddress); retVal.ErrorMessage = "Email address already exists"; } return(retVal); }