public static async Task <OrganizationRecruiter> GetRecruiterOrDefault(this IRepositoryAsync <OrganizationRecruiter> organizationRecruiterRepository,
                                                                               Guid?organizationId, Guid?recruiterId, string referralCode)
        {
            OrganizationRecruiter re = null;

            if (organizationId.HasValue && recruiterId.HasValue)
            {
                re = await organizationRecruiterRepository
                     .FirstOrDefaultAsync(x => x.RecruiterId == recruiterId && x.OrganizationId == organizationId);
            }

            if (re == null)
            {
                if (organizationId.HasValue)
                {
                    re = await organizationRecruiterRepository.Queryable()
                         .Where(x => x.OrganizationId == organizationId.Value && x.RecruitingOrganizationDefaults.Any())
                         .FirstOrDefaultAsync() ?? await organizationRecruiterRepository.Queryable().Where(x => x.IsSystemDefault)
                         .FirstAsync();
                }
                else
                {
                    re = await organizationRecruiterRepository.Queryable().Where(x => x.IsSystemDefault)
                         .FirstAsync();
                }
            }

            return(re);
        }
Пример #2
0
        public async Task <T> Create <T>(
            OrganizationRecruiterInput model
            )
            where T : OrganizationRecruiterOutput
        {
            var entity = await Repository.Queryable().IgnoreQueryFilters()
                         .Where(x => x.OrganizationId == model.OrganizationId && x.RecruiterId == model.RecruiterId)
                         .FirstOrDefaultAsync();

            if (entity != null)
            {
                if (entity.IsDeleted)
                {
                    entity.IsDeleted   = false;
                    entity.UpdatedById = _userInfo.UserId;
                    entity.Updated     = DateTimeOffset.UtcNow;
                    entity.Created     = entity.Updated;
                    entity.CreatedById = _userInfo.UserId;

                    entity.InjectFrom(model);

                    var records = await Repository.UpdateAsync(entity, true);

                    _logger.LogDebug(GetLogMessage("{0} Records Updated"), records);

                    if (records > 0)
                    {
                    }
                }
            }
            else
            {
                entity = new OrganizationRecruiter()
                {
                    Updated         = DateTimeOffset.UtcNow,
                    Created         = DateTimeOffset.UtcNow,
                    CreatedById     = _userInfo.UserId,
                    UpdatedById     = _userInfo.UserId,
                    RecruiterStream = model.RecruiterStream,
                    RecruiterBonus  = model.RecruiterBonus
                }.InjectFrom(model) as OrganizationRecruiter;

                var records = await Repository.InsertAsync(entity, true);

                _logger.LogDebug(GetLogMessage("{0} Records Updated"), records);

                if (records > 0)
                {
                }
            }

            var output = await GetById <T>(model.RecruiterId, model.OrganizationId);

            return(output);
        }
Пример #3
0
        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);
        }