예제 #1
0
        public static AlienResult ConvertToResult(
            Alien alien,
            ContactResult contactResult,
            PassportResult passportResult,
            OrganizationResult organizationResult,
            StateRegistrationResult stateRegistrationResult)
        {
            Contract.Argument.IsNotNull(alien, nameof(alien));
            Contract.Argument.IsNotNull(contactResult, nameof(contactResult));
            Contract.Argument.IsNotNull(passportResult, nameof(passportResult));
            Contract.Argument.IsNotNull(organizationResult, nameof(organizationResult));
            Contract.Argument.IsNotNull(stateRegistrationResult, nameof(stateRegistrationResult));

            return(new AlienResult
            {
                Id = alien.Id,
                InvitationId = alien.InvitationId,
                Contact = contactResult,
                Passport = passportResult,
                Organization = organizationResult,
                StateRegistration = stateRegistrationResult,
                Position = alien.Position,
                WorkPlace = alien.WorkPlace,
                WorkAddress = alien.WorkAddress,
                StayAddress = alien.StayAddress
            });
        }
예제 #2
0
        protected void btnCreate_Click(object sender, EventArgs e)
        {
            try
            {
                Organization org = ES.Services.Organizations.GetOrganization(PanelRequest.ItemID);

                string[] cuurrencyData = ddlCurrency.SelectedValue.Split('|');

                if (string.IsNullOrEmpty(administrator.GetAccount()))
                {
                    messageBox.ShowWarningMessage("CRM_ADMIN_IS_NOT_SPECIFIED");
                    return;
                }


                OrganizationResult res = ES.Services.CRM.CreateOrganization(org.Id, cuurrencyData[0], cuurrencyData[1], cuurrencyData[2], cuurrencyData[3],
                                                                            administrator.GetAccountId(), ddlCollation.SelectedValue);

                messageBox.ShowMessage(res, "CreateCrmOrganization", "HostedCRM");
                if (res.IsSuccess)
                {
                    ShowCrmOrganizationDetails(administrator.GetAccount(), res.Value);
                }
            }
            catch (Exception ex)
            {
                messageBox.ShowErrorMessage("CRM_CREATE_ORGANIZATION", ex);
            }
        }
        public async Task <OrganizationResult> UpgradeOrganization(IAgencyOwner agencyOwner, RecruitingOrganizationUpgradeInput input)
        {
            _logger.LogInformation(GetLogMessage("{@input}"), input);

            var retVal = new OrganizationResult()
            {
                OrganizationId = agencyOwner.OrganizationId
            };

            var organization = await Repository.Queryable()
                               .Include(x => x.ProviderOrganization)
                               .Include(x => x.MarketingOrganization)
                               .Include(x => x.RecruitingOrganization)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Marketer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Customer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Contractor)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.ProjectManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.AccountManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Recruiter)
                               .Where(x => x.Id == agencyOwner.OrganizationId && x.RecruitingOrganization == null)
                               .FirstOrDefaultAsync();


            if (organization == null)
            {
                retVal.ErrorMessage = "unable to upgrade organization, possibly because it's already upgraded";
                return(retVal);
            }

            var orgPerson = organization
                            .OrganizationPeople
                            .First(x => x.PersonId == agencyOwner.CustomerId);

            retVal = UpgradeToRecruitingOrganization(input, organization, orgPerson, true);

            return(retVal);
        }
예제 #4
0
        public static EmployeeResult ConvertToResult(
            Employee employee,
            ContactResult contactResult,
            PassportResult passportResult,
            OrganizationResult organizationResult,
            StateRegistrationResult stateRegistrationResult)
        {
            Contract.Argument.IsNotNull(employee, nameof(employee));

            return(new EmployeeResult
            {
                Id = employee.Id,
                Contact = contactResult,
                Passport = passportResult,
                Organization = organizationResult,
                StateRegistration = stateRegistrationResult,
                ManagerId = employee.ManagerId,
                AcademicDegree = employee.AcademicDegree,
                AcademicRank = employee.AcademicRank,
                Education = employee.Education,
                Position = employee.Position,
                WorkPlace = employee.WorkPlace
            });
        }
예제 #5
0
        private async Task <OrganizationResult> CreateOrganization(OrganizationCreateInput input, Guid customerId)
        {
            _logger.LogInformation(GetLogMessage("Creating Organization: {0}"), input.Name);

            var organization = await Repository.Queryable()
                               .Where(x => x.Name == input.Name)
                               .FirstOrDefaultAsync();

            var retVal = new OrganizationResult();

            if (organization != null)
            {
                retVal.ErrorMessage = "Organization with the same name already in use";
                return(retVal);
            }

            organization = new Organization
            {
                Iso2             = input.Iso2,
                ProvinceState    = input.ProvinceState,
                CustomerId       = customerId,
                CategoryId       = 1,
                ObjectState      = ObjectState.Added,
                ImageUrl         = EntityConstants.DefaultOrgImageUrl,
                PrimaryColor     = "grey-600",
                SecondaryColor   = "grey-500",
                TertiaryColor    = "grey-400",
                OrganizationType = OrganizationType.Buyer,
                PaymentTerms     = new List <OrganizationPaymentTerm>()
                {
                    new OrganizationPaymentTerm()
                    {
                        IsDefault     = true,
                        ObjectState   = ObjectState.Added,
                        PaymentTermId = 1
                    }
                }
            }.InjectFrom(input) as Organization;

            var organizationRecords = Repository.InsertOrUpdateGraph(organization, true);

            _logger.LogDebug(GetLogMessage("{0} Organization Records updated"), organizationRecords);

            if (organizationRecords > 0)
            {
                var person = _organizationPersonRepo.CreateOrgPerson(new OrganizationPersonInput()
                {
                    PersonId         = customerId,
                    IsAccountManager = false,
                    IsProjectManager = false,
                    IsContractor     = false,
                    IsMarketer       = false,
                    IsRecruiter      = false,
                    IsCustomer       = true,
                }, organization.Id);

                var result = Repository.Commit();

                if (result <= 0)
                {
                    return(OrganizationResult.Failed);
                }

                var records = await _buyerService.PushCustomer(person.OrganizationId, person.PersonId);

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

                if (records > 0)
                {
                    retVal.Succeeded      = true;
                    retVal.OrganizationId = organization.Id;
                }
            }


            return(retVal);
        }
예제 #6
0
        public static OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation)
        {
            OrganizationResult res = StartTask <OrganizationResult>("CRM", "CREATE_ORGANIZATION");

            try
            {
                Organization org = OrganizationController.GetOrganization(organizationId);

                try
                {
                    if (!CheckQuota(org.PackageId))
                    {
                        CompleteTask(res, CrmErrorCodes.QUOTA_HAS_BEEN_REACHED);
                        return(res);
                    }
                }
                catch (Exception ex)
                {
                    CompleteTask(res, CrmErrorCodes.CANNOT_CHECK_QUOTAS, ex);
                    return(res);
                }

                CRM  crm   = GetCRMProxy(org.PackageId);
                Guid orgId = Guid.NewGuid();

                OrganizationUser user = OrganizationController.GetUserGeneralSettings(organizationId, userId);

                if (string.IsNullOrEmpty(user.FirstName))
                {
                    CompleteTask(res, CrmErrorCodes.FIRST_NAME_IS_NOT_SPECIFIED);
                    return(res);
                }

                if (string.IsNullOrEmpty(user.LastName))
                {
                    CompleteTask(res, CrmErrorCodes.LAST_NAME_IS_NOT_SPECIFIED);
                    return(res);
                }


                org.CrmAdministratorId = user.AccountId;
                org.CrmCurrency        =
                    string.Join("|", new[] { baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName });
                org.CrmCollation      = collation;
                org.CrmOrgState       = (int)CrmOrganizationState.Enabled;
                org.CrmOrganizationId = orgId;

                OrganizationResult serverRes =
                    crm.CreateOrganization(orgId, org.OrganizationId, org.Name, baseCurrencyCode, baseCurrencyName,
                                           baseCurrencySymbol, user.AccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress,
                                           collation);

                if (!serverRes.IsSuccess)
                {
                    res.ErrorCodes.AddRange(serverRes.ErrorCodes);
                    CompleteTask(res);
                    return(res);
                }

                ValueResultObject <DomainInfo> resDomain = CreateOrganizationDomain(org);
                res.ErrorCodes.AddRange(resDomain.ErrorCodes);


                int crmServiceId = GetCRMServiceId(org.PackageId);

                StringDictionary serviceSettings = ServerController.GetServiceSettings(crmServiceId);
                string           port            = serviceSettings[Constants.Port];
                string           schema          = serviceSettings[Constants.UrlSchema];
                if (port == "80" && schema == "http")
                {
                    port = string.Empty;
                }

                if (port == "443" && schema == "https")
                {
                    port = string.Empty;
                }

                if (port != string.Empty)
                {
                    port = ":" + port;
                }

                string strDomainName = string.Format("{0}.{1}", org.OrganizationId,
                                                     serviceSettings[Constants.IFDWebApplicationRootDomain]);
                org.CrmUrl = string.Format("{0}://{1}{2}", schema, strDomainName, port);

                PackageController.UpdatePackageItem(org);

                CrmUserResult crmUser = crm.GetCrmUserByDomainName(user.DomainUserName, org.OrganizationId);
                res.ErrorCodes.AddRange(crmUser.ErrorCodes);
                if (crmUser.IsSuccess)
                {
                    try
                    {
                        DataProvider.CreateCRMUser(userId, crmUser.Value.CRMUserId, crmUser.Value.BusinessUnitId);
                    }
                    catch (Exception ex)
                    {
                        CompleteTask(res, CrmErrorCodes.CANNOT_ADD_ORGANIZATION_OWNER_TO_ORGANIZATIO_USER, ex, "Cannot add organization owner to organization users");
                    }
                }

                res.Value = org;
            }
            catch (Exception ex)
            {
                CompleteTask(res, CrmErrorCodes.CREATE_CRM_ORGANIZATION_GENERAL_ERROR, ex);
                return(res);
            }

            CompleteTask();
            return(res);
        }
        public async Task <OrganizationResult> UpgradeOrganization(IOrganizationCustomer organizationCustomer,
                                                                   OrganizationUpgradeInput input)
        {
            _logger.LogInformation(GetLogMessage("Upgrade Organization Id: {input}"), organizationCustomer.OrganizationId);

            var retVal = new OrganizationResult()
            {
                OrganizationId = organizationCustomer.OrganizationId
            };

            var organization = await Repository.Queryable()
                               .Include(x => x.ProviderOrganization)
                               .Include(x => x.MarketingOrganization)
                               .Include(x => x.RecruitingOrganization)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Marketer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Customer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Contractor)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.ProjectManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.AccountManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Recruiter)
                               .Where(x => x.Id == organizationCustomer.OrganizationId)
                               .FirstAsync();

            _logger.LogDebug(GetLogMessage("Organization Found: {Organization}"), organization.OrganizationType.ToString());

            var upgradeProviderOrg   = (input.ProviderOrganizationInput != null);
            var upgradeMarketingOrg  = (input.MarketingOrganizationInput != null);
            var upgradeRecruitingOrg = (input.RecruitingOrganizationInput != null);

            _logger.LogDebug(GetLogMessage("Upgrade Provider Org: {Provider}; Upgrade Marketing Org: {Marketing}; Upgrade Recruiting Org {Recruiting}"),
                             upgradeProviderOrg,
                             upgradeMarketingOrg,
                             upgradeRecruitingOrg);

            var orgPerson = organization
                            .OrganizationPeople
                            .First(x => x.PersonId == organizationCustomer.CustomerId);

            _logger.LogDebug(GetLogMessage("Person: {PersonId}"), orgPerson.PersonId);


            orgPerson.ObjectState = ObjectState.Modified;

            organization.CategoryId  = input.CategoryId;
            organization.UpdatedById = _userInfo.Value.UserId;
            organization.ObjectState = ObjectState.Modified;
            organization.Updated     = DateTimeOffset.UtcNow;

            if (upgradeProviderOrg)
            {
                if (organization.ProviderOrganization != null)
                {
                    retVal.ErrorMessage = "Provider organization is already upgraded";
                    return(retVal);
                }

                _logger.LogInformation(GetLogMessage("Upgrading to Provider Organization..."));

                var upgradeResult = UpgradeToProviderOrganization(input.ProviderOrganizationInput, organization, orgPerson, true);

                if (!upgradeMarketingOrg && organization.MarketingOrganization == null)
                {
                    // add so we have a default marketer in the org
                    orgPerson.Marketer = new OrganizationMarketer()
                    {
                        Updated        = DateTimeOffset.UtcNow,
                        Created        = DateTimeOffset.UtcNow,
                        MarketerId     = orgPerson.PersonId,
                        OrganizationId = orgPerson.OrganizationId,
                        MarketerStream = 0,
                        MarketerBonus  = 0,
                        ObjectState    = ObjectState.Added
                    };
                }

                if (!upgradeRecruitingOrg && organization.RecruitingOrganization == null)
                {
                    // add so we have a default recruiter
                    orgPerson.Recruiter = new OrganizationRecruiter()
                    {
                        Updated         = DateTimeOffset.UtcNow,
                        Created         = DateTimeOffset.UtcNow,
                        RecruiterId     = orgPerson.PersonId,
                        OrganizationId  = orgPerson.OrganizationId,
                        RecruiterStream = 0,
                        ObjectState     = ObjectState.Added,
                    };
                }
            }


            if (upgradeMarketingOrg)
            {
                if (organization.MarketingOrganization != null)
                {
                    throw new ApplicationException("Marketing organization is already upgraded");
                }

                _logger.LogDebug(GetLogMessage("Upgrading to Marketing Organization..."));

                var newMarketingOrgInput = new MarketingOrganizationInput()
                {
                    DefaultMarketerId = orgPerson.PersonId
                }.InjectFrom(input.MarketingOrganizationInput) as MarketingOrganizationInput;


                retVal = UpgradeToMarketingOrganization(newMarketingOrgInput, organization, orgPerson, true);
            }

            if (upgradeRecruitingOrg)
            {
                if (organization.RecruitingOrganization != null)
                {
                    retVal.ErrorMessage = "Recruiting organization is already upgraded";
                    return(retVal);
                }

                _logger.LogDebug(GetLogMessage("Upgrading to Recruiting Organization..."));

                retVal = UpgradeToRecruitingOrganization(input.RecruitingOrganizationInput, organization, orgPerson, true);
            }

            return(retVal);
        }
        private OrganizationResult UpgradeToProviderOrganization(ProviderOrganizationUpgradeInput input,
                                                                 Organization organization, OrganizationPerson person, bool saveChanges = true)
        {
            _logger.LogInformation(GetLogMessage("{Organization}, Saving Changes: {saveChanges}"), organization.Name, saveChanges);

            var retVal = new OrganizationResult()
            {
                OrganizationId = organization.Id
            };

            person.AccountManager = new OrganizationAccountManager()
            {
                AccountManagerId     = person.PersonId,
                OrganizationId       = person.OrganizationId,
                AccountManagerStream = input.AccountManagerStream,
                ObjectState          = ObjectState.Added
            };

            person.ProjectManager = new OrganizationProjectManager()
            {
                OrganizationId       = person.OrganizationId,
                ProjectManagerId     = person.PersonId,
                ProjectManagerStream = input.ProjectManagerStream,
                ObjectState          = ObjectState.Added
            };

            person.Contractor = new OrganizationContractor()
            {
                ContractorId     = person.PersonId,
                OrganizationId   = person.OrganizationId,
                ContractorStream = input.ContractorStream,
                ObjectState      = ObjectState.Added
            };
            person.ObjectState = ObjectState.Modified;

            var records = _organizationPersonRepo.InsertOrUpdateGraph(person, true);

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

            if (records == 0)
            {
                retVal.Succeeded    = false;
                retVal.ErrorMessage = "Unable to add user to provider roles";
                return(retVal);
            }

            organization.ProviderOrganization = new ProviderOrganization()
            {
                ContractorStream        = input.ContractorStream,
                ProjectManagerStream    = input.ProjectManagerStream,
                AccountManagerStream    = input.AccountManagerStream,
                AgencyStream            = input.AgencyStream,
                Discoverable            = input.Discoverable,
                ObjectState             = ObjectState.Added,
                SystemStream            = SystemStream,
                DefaultAccountManagerId = person.PersonId,
                DefaultContractorId     = person.PersonId,
                DefaultProjectManagerId = person.PersonId
            }.InjectFrom(input) as ProviderOrganization;
            organization.ObjectState      = ObjectState.Modified;
            organization.OrganizationType = organization.OrganizationType.Add(OrganizationType.Provider);

            _logger.LogDebug(GetLogMessage("new org type {0}"), organization.OrganizationType);

            var orgRecords = Repository.InsertOrUpdateGraph(organization, saveChanges);

            _logger.LogDebug(GetLogMessage("{0} Organization Records updated"), orgRecords);

            if (orgRecords == 0)
            {
                retVal.ErrorMessage = "Unable to update organization";
                return(retVal);
            }

            var stripeResult = _subscriptionService.PushSubscription(organization.Id, saveChanges).Result;

            _logger.LogDebug(GetLogMessage("{StripeChanges} stripe records updated"), stripeResult);

            if (stripeResult > 0)
            {
                retVal.Succeeded = true;
            }

            return(retVal);
        }
예제 #9
0
        private void OnOrganizationCommand(BotShell bot, CommandArgs e)
        {
            if (bot.GetUserID(e.Args[0]) < 100)
            {
                bot.SendReply(e, "No such user: "******"Organization »» Gathering Data...");

            WhoisResult whoisResult = XML.GetWhois(e.Args[0], bot.Dimension);

            if (whoisResult != null && whoisResult.Organization != null)
            {
                OrganizationResult organization = XML.GetOrganization(whoisResult.Organization.ID, bot.Dimension);
                if (organization != null && organization.Members != null)
                {
                    RichTextWindow window        = new RichTextWindow(bot);
                    RichTextWindow membersWindow = new RichTextWindow(bot);

                    window.AppendTitle(organization.Name);

                    window.AppendHighlight("Leader: ");
                    window.AppendNormal(organization.Leader.Nickname);
                    window.AppendLineBreak();

                    window.AppendHighlight("Alignment: ");
                    window.AppendNormal(organization.Faction);
                    window.AppendLineBreak();

                    window.AppendHighlight("Members: ");
                    window.AppendNormal(organization.Members.Items.Length.ToString());
                    window.AppendLineBreak();

                    SortedDictionary <string, int> profs   = new SortedDictionary <string, int>();
                    SortedDictionary <string, int> breeds  = new SortedDictionary <string, int>();
                    SortedDictionary <string, int> genders = new SortedDictionary <string, int>();

                    membersWindow.AppendHeader("Members");

                    foreach (OrganizationMember member in organization.Members.Items)
                    {
                        if (!profs.ContainsKey(member.Profession))
                        {
                            profs.Add(member.Profession, 0);
                        }
                        profs[member.Profession]++;

                        if (!breeds.ContainsKey(member.Breed))
                        {
                            breeds.Add(member.Breed, 0);
                        }
                        breeds[member.Breed]++;

                        if (!genders.ContainsKey(member.Gender))
                        {
                            genders.Add(member.Gender, 0);
                        }
                        genders[member.Gender]++;

                        membersWindow.AppendHighlight(member.Nickname);
                        membersWindow.AppendNormal(string.Format(" {0} (L {1} / DR {2}) {3} {4}", member.Rank, member.Level, member.DefenderLevel, member.Breed, member.Profession));
                        membersWindow.AppendLineBreak();
                    }

                    string stats;
                    char[] trimchars = new char[] { ' ', ',' };

                    window.AppendHighlight("Genders: ");
                    stats = string.Empty;
                    foreach (KeyValuePair <string, int> kvp in genders)
                    {
                        stats += kvp.Value + " " + kvp.Key + ", ";
                    }
                    window.AppendNormal(stats.Trim(trimchars));
                    window.AppendLineBreak();

                    window.AppendHighlight("Breeds: ");
                    stats = string.Empty;
                    foreach (KeyValuePair <string, int> kvp in breeds)
                    {
                        stats += kvp.Value + " " + kvp.Key + ", ";
                    }
                    window.AppendNormal(stats.Trim(trimchars));
                    window.AppendLineBreak();

                    window.AppendHighlight("Professions: ");
                    stats = string.Empty;
                    foreach (KeyValuePair <string, int> kvp in profs)
                    {
                        stats += kvp.Value + " " + kvp.Key + ", ";
                    }
                    window.AppendNormal(stats.Trim(trimchars));
                    window.AppendLineBreak();

                    window.AppendHighlight("ID: ");
                    window.AppendNormal(organization.ID.ToString());
                    window.AppendLineBreak();

                    window.AppendHighlight("Last Updated: ");
                    window.AppendNormal(organization.LastUpdated);
                    window.AppendLineBreak(2);

                    window.AppendRawString(membersWindow.Text);

                    bot.SendReply(e, organization.Name + " »» ", window);
                    return;
                }
            }
            bot.SendReply(e, "Unable to gather information on that organization " + this.TimeoutError);
        }
예제 #10
0
        private bool UpdateRoster(out string[] removed, out string[] added, out RichTextWindow window)
        {
            this._state = RosterState.FetchingMembers;
            removed     = new string[0];
            added       = new string[0];
            window      = null;

            DateTime      startTime  = DateTime.Now;
            List <string> oldMembers = new List <string>();
            List <string> newMembers = new List <string>();

            using (IDbCommand command = this._database.Connection.CreateCommand())
            {
                command.CommandText = "SELECT ID FROM organizations";
                IDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    try
                    {
                        int id = (int)reader.GetInt64(0);
                        OrganizationResult org = XML.GetOrganization(id, this._bot.Dimension, false, true);
                        if (org == null || org.Members == null || org.Members.Items == null || org.Members.Items.Length == 0)
                        {
                            throw new Exception();
                        }

                        foreach (OrganizationMember member in org.Members.Items)
                        {
                            newMembers.Add(member.Nickname);
                        }
                    }
                    catch
                    {
                        reader.Close(); return(false);
                    }
                }
                reader.Close();
            }

            using (IDbCommand command = this._database.Connection.CreateCommand())
            {
                command.CommandText = "SELECT Username FROM members";
                IDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    try
                    {
                        string name = reader.GetString(0);
                        oldMembers.Add(name);
                    }
                    catch { }
                }
                reader.Close();
            }
            this._state         = RosterState.CrossCheckingMembers;
            this._progressMax   = newMembers.Count + oldMembers.Count;
            this._progressValue = 0;
            List <string> addMembers    = new List <string>();
            List <string> removeMembers = new List <string>();

            foreach (string member in newMembers)
            {
                if (!oldMembers.Contains(member))
                {
                    addMembers.Add(member);
                    this._bot.GetMainBot().SendNameLookup(member);
                }
                this._progressValue++;
            }
            foreach (string member in oldMembers)
            {
                if (!newMembers.Contains(member))
                {
                    removeMembers.Add(member);
                }
                this._progressValue++;
            }

            this._state         = RosterState.RemovingMembers;
            this._progressMax   = removeMembers.Count;
            this._progressValue = 0;
            foreach (string member in removeMembers)
            {
                this._bot.Users.RemoveUser(member);
                this._bot.Users.RemoveAlt(member);
                this._bot.FriendList.Remove("notify", member);
                this._database.ExecuteNonQuery("DELETE FROM members WHERE Username = '******'");
                this._progressValue++;
            }

            this._state         = RosterState.AddingMembers;
            this._progressMax   = addMembers.Count;
            this._progressValue = 0;

            List <string> failed = new List <string>();

            foreach (string member in addMembers)
            {
                if (this._bot.Users.AddUser(member, UserLevel.Member))
                {
                    this._bot.FriendList.Add("notify", member);
                    this._database.ExecuteNonQuery("INSERT INTO members VALUES ('" + member + "', 0)");
                }
                else
                {
                    failed.Add(member);
                }
                this._progressValue++;
            }
            foreach (string member in failed)
            {
                addMembers.Remove(member);
            }

            added   = addMembers.ToArray();
            removed = removeMembers.ToArray();
            TimeSpan elapsed = DateTime.Now - startTime;

            window = new RichTextWindow(this._bot);
            window.AppendTitle("Roster Update Report");
            window.AppendHighlight("Processing Time: ");
            window.AppendNormal(String.Format("{0:00}:{1:00}:{2:00}", Math.Floor(elapsed.TotalHours), elapsed.Minutes, elapsed.Seconds));
            window.AppendLineBreak();
            window.AppendHighlight("Members Added: ");
            window.AppendNormal(added.Length.ToString());
            window.AppendLineBreak();
            window.AppendHighlight("Members Removed: ");
            window.AppendNormal(removed.Length.ToString());
            window.AppendLineBreak();
            if (added.Length > 0)
            {
                window.AppendLineBreak();
                window.AppendHeader("Added Members");
                foreach (string member in added)
                {
                    window.AppendHighlight(member);
                    window.AppendLineBreak();
                }
            }
            if (removed.Length > 0)
            {
                window.AppendLineBreak();
                window.AppendHeader("Removed Members");
                foreach (string member in removed)
                {
                    window.AppendHighlight(member);
                    window.AppendLineBreak();
                }
            }
            this._state = RosterState.Idle;
            return(true);
        }