Example #1
0
        public override bool Perform()
        {
            SPSecurity.RunWithElevatedPrivileges(() =>
            {
                try
                {
                    using (var workEngineAPI = new WorkEngineAPI())
                    {
                        var featureEventsManager = new FeatureEventsManager(_spWeb);
                        var log = System.Web.HttpUtility.HtmlEncode(featureEventsManager.Manage(@"<AddRemoveFeatureEvents><Data><Feature Name=""PFEResourceManagement"" Operation=""ADD""/></Data></AddRemoveFeatureEvents>"));
                        LogMessage(log, 2);
                        LogMessage("Resource Pool Events processed", MessageKind.SUCCESS, 4);
                    }
                }
                catch (Exception exception)
                {
                    string message = exception.InnerException != null
                        ? exception.InnerException.Message
                        : exception.Message;

                    LogMessage(message, MessageKind.FAILURE, 4);
                }
            });

            return(true);
        }
Example #2
0
        private void ReadComment()
        {
            SPSite currentSite = SPContext.Current.Site;
            SPWeb  currentWeb  = SPContext.Current.Web;

            string xmlData = "<Data>" +
                             "<Param key=\"ListId\">" + _listId.ToString("D") + "</Param>" +
                             "<Param key=\"ItemId\">" + _itemId + "</Param>" +
                             "<Param key=\"CommentItemId\">" + _commentItemId + "</Param>" +
                             "<Param key=\"StatusUpdate\"><![CDATA[" + _statusUpdate + "]]></Param>" +
                             "<Param key=\"StatusUpdateId\"><![CDATA[" + _statusUpdateId + "]]></Param>" +
                             "</Data>";

            string svcCallResult = string.Empty;

            //using (WorkEngineService.WorkEngine workEngineSvc = new WorkEngineService.WorkEngine())
            //{
            //
            //    workEngineSvc.Credentials = CredentialCache.DefaultCredentials;
            //    workEngineSvc.Url = currentSite.MakeFullUrl(currentWeb.ServerRelativeUrl) + "/_vti_bin/WorkEngine.asmx";

            //    svcCallResult = workEngineSvc.Execute("ReadComment", xmlData);
            //}

            svcCallResult = WorkEngineAPI.ReadComment(xmlData, currentWeb);

            //Response.Output.WriteLine(JSONUtil.ConvertXmlToJson(svcCallResult, ""));
            Response.Output.WriteLine(svcCallResult);
        }
Example #3
0
        private void IssueQuery()
        {
            XmlDocument docTeam = new XmlDocument();

            //docTeam.LoadXml(WorkEngineAPI.GetTeam("<GetTeam><Columns>Title,Username</Columns></GetTeam>"));
            //docTeam.LoadXml(WorkEngineAPI.GetTeam("<Filter Column='Title' Value='" + searchVal + "'/>"));
            docTeam.LoadXml(WorkEngineAPI.GetTeam("<GetTeam><Columns>Title,Email</Columns></GetTeam>", SPContext.Current.Web));
            xml = docTeam.OuterXml;
        }
        public override Microsoft.SharePoint.WebControls.PickerEntity ValidateEntity(Microsoft.SharePoint.WebControls.PickerEntity entity)
        {
            try
            {
                if (isWEEditor)
                {
                    if (SPContext.Current.List == null || SPContext.Current.List.Title != "Resources")
                    {
                        this.ValidateResolvedEntity = false;
                        entity = base.ValidateEntity(entity);

                        XmlDocument docTeam = new XmlDocument();
                        docTeam.LoadXml(WorkEngineAPI.GetTeam("<Filter Column='SharePointAccount' Value='" + entity.DisplayText + "'/>", SPContext.Current.Web));
                        if (docTeam.FirstChild.SelectSingleNode("//Team/Member") == null)
                        {
                            entity.IsResolved = false;
                        }
                        else
                        {
                            if (entity.EntityData["PrincipalType"].ToString().ToLower() == "sharepointgroup")
                            {
                                if (docTeam.FirstChild.SelectSingleNode("//Team/Member").Attributes["SharePointAccount"].Value.ToLower() != entity.EntityData["AccountName"].ToString().ToLower())
                                {
                                    entity.IsResolved = false;
                                }
                                else
                                {
                                    entity.IsResolved = true;
                                }
                            }
                            else
                            {
                                if (docTeam.FirstChild.SelectSingleNode("//Team/Member").Attributes["Username"].Value.ToLower() != entity.EntityData["AccountName"].ToString().ToLower())
                                {
                                    entity.IsResolved = false;
                                }
                            }
                        }
                    }
                    else
                    {
                        entity = base.ValidateEntity(entity);
                    }
                }
                else
                {
                    entity = base.ValidateEntity(entity);
                }
            }
            catch { }
            return(entity);
        }
        // Private Methods (1) 

        private void RunRefreshAll()
        {
            LogMessage("Running Refresh All");

            try
            {
                var workEngineApi = new WorkEngineAPI();
                workEngineApi.Execute("Reporting_RefreshAll", string.Empty);
            }
            catch (Exception e)
            {
                LogMessage("\t", e.Message, 3);
            }
        }
Example #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Expires = -1;

            Response.ContentType     = "text";
            Response.ContentEncoding = System.Text.Encoding.UTF8;

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(Request["team"]);

            XmlDocument docOut = new XmlDocument();

            docOut.LoadXml("<Team HasResAccess=\"" + Request["HasResAccess"] + "\" ListId=\"" + Request["ListId"] + "\" ItemId=\"" + Request["ItemId"] + "\"/>");

            foreach (XmlNode nd in doc.SelectNodes("//I"))
            {
                XmlNode ndNew = docOut.CreateNode(XmlNodeType.Element, "Member", docOut.NamespaceURI);

                XmlAttribute nattr = docOut.CreateAttribute("ID");
                nattr.Value = nd.Attributes["id"].Value;
                ndNew.Attributes.Append(nattr);

                nattr       = docOut.CreateAttribute("Permissions");
                nattr.Value = nd.Attributes["Permissions"].Value;
                ndNew.Attributes.Append(nattr);

                nattr       = docOut.CreateAttribute(ProjectRateColumn);
                nattr.Value = nd.Attributes[ProjectRateColumn] != null ? nd.Attributes[ProjectRateColumn].Value : string.Empty;
                ndNew.Attributes.Append(nattr);

                docOut.FirstChild.AppendChild(ndNew);
            }

            XmlDocument doc1 = new XmlDocument();

            doc1.LoadXml(WorkEngineAPI.SaveTeam(docOut.OuterXml, SPContext.Current.Web));

            if (doc1.FirstChild.Attributes["Status"].Value == "0")
            {
                data = "Success";
            }
            else
            {
                data = doc1.FirstChild.SelectSingleNode("//Error").InnerText;
            }
        }
Example #7
0
        // Public Methods (1) 

        public string Manage(string data)
        {
            try
            {
                var dataElement = new XElement("Data");

                Dictionary <string, string> features = GetFeatures(data);

                foreach (var feature in features)
                {
                    if (feature.Key.Equals("myworkreporting"))
                    {
                        AddRemoveMyWorkReportingEvents(feature.Value, ref dataElement);
                    }
                    else if (feature.Key.Equals("pfedatasync"))
                    {
                        AddRemovePFEDataSyncEvents(feature.Value, ref dataElement);
                    }
                    else if (feature.Key.Equals("pferesourcemanagement"))
                    {
                        AddRemovePFEResourceManagementEvents(feature.Value, ref dataElement);
                    }
                }

                string response =
                    WorkEngineAPI.EventReceiverManager(new XElement("EventReceiverManager", dataElement).ToString(),
                                                       Web);

                XDocument responseDocument = XDocument.Parse(response);

                // ReSharper disable PossibleNullReferenceException

                responseDocument.Root.Name = "AddRemoveFeatureEvents";

                // ReSharper restore PossibleNullReferenceException

                return(responseDocument.ToString());
            }
            catch (APIException)
            {
                throw;
            }
            catch (Exception exception)
            {
                throw new APIException((int)EventReceiverManager.Errors.Manage, exception.GetBaseException().Message);
            }
        }
        private void GetReports()
        {
            XmlDocument doc = new XmlDocument();

            using (var workEngineAPI = new WorkEngineAPI())
            {
                doc.LoadXml(workEngineAPI.Execute("Reporting_GetAllReports", string.Empty));
            }

            if (doc.FirstChild.Attributes["Status"].Value == "0")
            {
                try
                {
                    XmlNode ndReports = doc.FirstChild.SelectSingleNode("//Data").FirstChild.SelectSingleNode("Folder[@Name='epmlivetl']").SelectSingleNode("Folder[@Name='Resources']");

                    StringBuilder sb = new StringBuilder();

                    foreach (XmlNode nd in ndReports.SelectNodes("Folder/Report"))
                    {
                        sb.Append("<Button");
                        sb.Append(" Id=\'Ribbon.BuildTeam.ToolsGroup.Reports.ShowReport");
                        //sb.Append(nd.Attributes["Name"].Value.Replace(" ",""));
                        sb.Append("\' Command='Ribbon.BuildTeam.ShowReport\'");
                        sb.Append(" CommandValueId='");
                        sb.Append(System.Web.HttpUtility.UrlEncode(nd.Attributes["Url"].Value));
                        sb.Append("'");
                        sb.Append(" LabelText=\'");
                        sb.Append(nd.Attributes["Name"].Value);
                        sb.Append("\'/>");
                    }

                    output = sb.ToString();
                }
                catch { }
            }
            else
            {
                output = "Error";
            }
        }
Example #9
0
        public override bool Perform()
        {
            LogMessage("Activating Site Core Feature");

            SPSite.Features.Add(new Guid("e97da3cd-4c42-44cd-ba51-2bfbb2c397cb"), true);

            if (bIsPfe)
            {
                using (var workEngineAPI = new WorkEngineAPI())
                {
                    LogMessage("Installing PfE Data Synch Events");

                    //workEngineAPI.Execute("AddRemoveFeatureEvents", @"<AddRemoveFeatureEvents><Data><Feature Name=""PFEDataSync"" Operation=""ADD""/></Data></AddRemoveFeatureEvents>");
                    WorkEngineAPI.AddRemoveFeatureEvents(@"<AddRemoveFeatureEvents><Data><Feature Name=""PFEDataSync"" Operation=""ADD""/></Data></AddRemoveFeatureEvents>", SPWeb);
                    //LogMessage("Installing PfE Resource Events");

                    //workEngineAPI.Execute("AddRemoveFeatureEvents", @"<AddRemoveFeatureEvents><Data><Feature Name=""PFEResourceManagement"" Operation=""ADD""/></Data></AddRemoveFeatureEvents>");
                }
            }

            return(true);
        }
        /// <summary>
        /// Gets the layout.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        public string GetLayout(string data)
        {
            try
            {
                XDocument layoutXml = XDocument.Parse(Resources.AssignmentPlannerGridLayout);

                if (layoutXml.Root == null)
                {
                    throw new APIException((int)Errors.NoGridElementFound, "Cannot find the Grid element.");
                }

                XElement headerElement = layoutXml.Root.Element("Header");

                if (headerElement == null)
                {
                    throw new APIException((int)Errors.NoHeaderElementFound, "Cannot find the Header element.");
                }

                XElement colsElement = layoutXml.Root.Element("Cols");

                if (colsElement == null)
                {
                    throw new APIException((int)Errors.NoColsElementFound, "Cannot find the Cols element.");
                }

                string fieldsResponse;

                using (var workEngineAPI = new WorkEngineAPI())
                {
                    fieldsResponse = workEngineAPI.Execute("Reporting_GetMyWorkFields", string.Empty);
                }

                XElement errorElement = XDocument.Parse(fieldsResponse).Root.Descendants("Error").FirstOrDefault();

                if (errorElement != null)
                {
                    if (errorElement.Value.Contains("ExecuteReader requires an open and available Connection."))
                    {
                        throw new APIException((int)Errors.ReportingConnection, ReportingConnectionError);
                    }
                }

                XDocument dataXml = XDocument.Parse(Utilities.DecodeGridData(data));
                RegisterGridIdAndCss(layoutXml.Root, dataXml);

                XDocument fieldsXml = XDocument.Parse(fieldsResponse);

                List <string> fields =
                    fieldsXml.Root.Element("GetMyWorkFields").Element("Data").Elements("Field").Select(
                        e => e.Attribute("Name").Value).ToList();

                using (var spSite = new SPSite(_spWeb.Site.ID))
                {
                    using (SPWeb spWeb = spSite.OpenWeb())
                    {
                        SPList spList = spWeb.Lists["My Work"];

                        SPRegionalSettings regionalSettings = spWeb.RegionalSettings;

                        SPRegionalSettings spRegionalSettings = _spWeb.CurrentUser.RegionalSettings ?? regionalSettings;

                        var cultureInfo = new CultureInfo((int)spRegionalSettings.LocaleId);

                        string currencyFormat = string.Format("{0}#.00", cultureInfo.NumberFormat.CurrencySymbol);
                        string datePattern    = cultureInfo.DateTimeFormat.ShortDatePattern;

                        var defaultColumns = new List <string>();

                        var workDayStartHour = (short)(regionalSettings.WorkDayStartHour / 60);
                        var workDayEndHour   = (short)(regionalSettings.WorkDayEndHour / 60);

                        ConfigureDefaultColumns(spList, datePattern, currencyFormat, spWeb, workDayStartHour,
                                                workDayEndHour,
                                                GetGanttExclude(regionalSettings, spWeb, workDayStartHour,
                                                                workDayEndHour), ref layoutXml,
                                                ref defaultColumns);

                        ConfigureColumns(spWeb, currencyFormat, ref headerElement, ref colsElement, datePattern,
                                         defaultColumns, fields, spList);
                    }
                }

                return(layoutXml.ToString());
            }
            catch (APIException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new APIException((int)Errors.GetLayout, e.Message);
            }
        }
        /// <summary>
        /// Gets the data.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        public string GetData(string data)
        {
            try
            {
                string           response;
                NumberFormatInfo providerEn = new System.Globalization.NumberFormatInfo();
                providerEn.NumberDecimalSeparator = ".";
                providerEn.NumberGroupSeparator   = ",";
                providerEn.NumberGroupSizes       = new int[] { 3 };

                XElement dataRootElement = XDocument.Parse(data).Root;

                if (dataRootElement == null)
                {
                    throw new APIException((int)Errors.GetDataRootElementNotFound,
                                           "Cannot find the Root AssignmentPlanner element.");
                }

                using (var workEngineAPI = new WorkEngineAPI())
                {
                    response = workEngineAPI.Execute("Reporting_GetMyWorkData",
                                                     new XElement("GetMyWorkReportingData",
                                                                  dataRootElement.Element("Params")).ToString());
                }

                XDocument myWorkDataXml = XDocument.Parse(response);

                ValidateMyWorkDataResponse(myWorkDataXml);

                var gridSafeFields = new Dictionary <string, string>();

                var bElement         = new XElement("B");
                var resourcesElement = new XElement("Resources");
                var footElement      = new XElement("Foot");

                var resources = new Dictionary <int, string>();

                SPRegionalSettings spRegionalSettings = _spWeb.CurrentUser.RegionalSettings ??
                                                        _spWeb.Site.RootWeb.RegionalSettings;

                var workDayStartHour = (short)(spRegionalSettings.WorkDayStartHour / 60);
                var workDayEndHour   = (short)(spRegionalSettings.WorkDayEndHour / 60);

                string siteUrl = _spWeb.Site.Url;
                string safeServerRelativeUrl = _spWeb.SafeServerRelativeUrl();

                foreach (
                    XElement resourceElement in
                    myWorkDataXml.Element("Result").Element("GetMyWorkData").Element("Data").Elements("Resource"))
                {
                    XElement resultElement = resourceElement.Element("Result");

                    if (!resultElement.Attribute("Status").Value.Equals("0"))
                    {
                        continue;
                    }

                    int    resourceId   = 0;
                    string resourceName = string.Empty;

                    foreach (XElement itemElement in resourceElement.Element("Data").Elements("Item"))
                    {
                        var iElement = new XElement("I");

                        int    itemId = 0;
                        Guid   listId = Guid.Empty;
                        Guid   webId  = Guid.Empty;
                        Guid   siteId = Guid.Empty;
                        string value  = string.Empty;
                        float  floatFieldValue;

                        foreach (XElement fieldElement in itemElement.Elements("Field"))
                        {
                            string field = fieldElement.Attribute("Name").Value;

                            if (!gridSafeFields.ContainsKey(field))
                            {
                                gridSafeFields.Add(field, Utils.ToGridSafeFieldName(field));
                            }

                            if (float.TryParse(fieldElement.Value.ToString(), out floatFieldValue))
                            {
                                value = floatFieldValue.ToString(providerEn);
                            }
                            else
                            {
                                value = fieldElement.Value;
                            }

                            string fieldName = field.ToLower();

                            if (fieldName.Equals("id"))
                            {
                                itemId = Convert.ToInt32(value);
                            }
                            else if (fieldName.Equals("listid"))
                            {
                                listId = new Guid(value);
                            }
                            else if (fieldName.Equals("webid"))
                            {
                                webId = new Guid(value);
                            }
                            else if (fieldName.Equals("siteid"))
                            {
                                siteId = new Guid(value);
                            }
                            else if (fieldName.Equals("assignedtoid"))
                            {
                                resourceId = Convert.ToInt32(value);
                            }
                            else if (fieldName.Equals("assignedtotext"))
                            {
                                resourceName = value;
                            }
                            else if (fieldElement.Attribute("Type").Value.Equals("System.DateTime") &&
                                     !string.IsNullOrEmpty(value))
                            {
                                DateTime localTime = SPUtility.CreateDateTimeFromISO8601DateTimeString(value);

                                if (fieldName.Equals("startdate") &&
                                    (localTime.Hour < workDayStartHour || localTime.Hour > workDayEndHour))
                                {
                                    localTime = new DateTime(localTime.Year, localTime.Month, localTime.Day,
                                                             workDayStartHour, 0, 0);
                                }
                                else if (fieldName.Equals("duedate") &&
                                         (localTime.Hour < workDayStartHour || localTime.Hour > workDayEndHour))
                                {
                                    localTime = new DateTime(localTime.Year, localTime.Month, localTime.Day,
                                                             workDayEndHour, 0, 0);
                                }

                                value = SPUtility.CreateISO8601DateTimeFromSystemDateTime(localTime);
                            }

                            iElement.Add(new XAttribute(gridSafeFields[field], value));
                        }

                        string flagQuery =
                            string.Format(
                                @"<MyPersonalization>
                                        <Keys>AssignmentPlannerFlag</Keys>
                                        <Item ID=""{0}""/>
                                        <List ID=""{1}""/>
                                        <Web ID=""{2}""/>
                                        <Site ID=""{3}"" URL=""{4}""/>
                                </MyPersonalization>",
                                itemId, listId, webId, siteId, siteUrl);

                        XDocument flagResponse = XDocument.Parse(MyPersonalization.GetMyPersonalization(flagQuery));

                        string flag = null;

                        XElement personalizationRootElement = flagResponse.Element("MyPersonalization");

                        if (personalizationRootElement != null)
                        {
                            flag = (from e in personalizationRootElement.Descendants("Personalization")
                                    let keyAttribute = e.Attribute("Key")
                                                       where keyAttribute != null && keyAttribute.Value.Equals("AssignmentPlannerFlag")
                                                       let valueAttribute = e.Attribute("Value")
                                                                            where valueAttribute != null
                                                                            select valueAttribute.Value).FirstOrDefault();
                        }

                        var flagValue = flag ?? "0";
                        var flagUrl   = safeServerRelativeUrl + "/_layouts/epmlive/images/mywork/flagged.png";
                        if (flagValue.Equals("0"))
                        {
                            flagUrl = safeServerRelativeUrl + "/_layouts/epmlive/images/mywork/unflagged.png";
                        }

                        iElement.Add(new XAttribute("Duration", string.Empty),
                                     new XAttribute("Flag", string.Format(@"<img src=""{0}"" class=""AP_Flag""/>", flagUrl)),
                                     new XAttribute("FlagValue", flagValue), new XAttribute("Height", 23));

                        if (resourceId == 0 || string.IsNullOrEmpty(resourceName))
                        {
                            continue;
                        }

                        bElement.Add(iElement);
                        if (!resources.ContainsKey(resourceId))
                        {
                            resources.Add(resourceId, resourceName);
                        }
                    }
                }

                foreach (var keyValuePair in resources)
                {
                    resourcesElement.Add(new XElement("R", new XAttribute("Name", keyValuePair.Value),
                                                      new XAttribute("Availability", 8), new XAttribute("Type", 1)));

                    footElement.Add(new XElement("I", new XAttribute("id", string.Format("-{0}", keyValuePair.Key)),
                                                 new XAttribute("Def", "Resource"),
                                                 new XAttribute("Title", keyValuePair.Value)));
                }

                return(new XElement("Grid", new XElement("Body", bElement), resourcesElement, footElement).ToString());
            }
            catch (APIException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new APIException((int)Errors.GetData, e.Message);
            }
        }
Example #12
0
        protected override int IssueQuery(string search, string groupName, int pageIndex, int pageSize)
        {
            dtUsers = new DataTable();
            dtUsers.Columns.Add("ID");
            dtUsers.Columns.Add("SPAccountInfo");
            dtUsers.Columns.Add("Username");
            dtUsers.Columns.Add("PrincipalType");
            dtUsers.Columns.Add("SharePointAccount");
            dtUsers.Columns.Add("Title");

            if (!dtUsers.Columns.Contains(mColumnList.SelectedValue))
            {
                dtUsers.Columns.Add(mColumnList.SelectedValue);
            }

            ArrayList columnNames        = ((TableResultControl)this.mDialogControl.ResultControl).ColumnNames;
            ArrayList columnDisplayNames = ((TableResultControl)this.mDialogControl.ResultControl).ColumnDisplayNames;
            ArrayList columnWidths       = ((TableResultControl)this.mDialogControl.ResultControl).ColumnWidths;

            columnDisplayNames.Clear();
            columnNames.Clear();
            columnWidths.Clear();

            columnDisplayNames.Add("Resource Name");
            columnNames.Add("Title");
            columnWidths.Add("180px");

            //columnDisplayNames.Add(mColumnList.SelectedItem.Text);
            //columnNames.Add(mColumnList.SelectedValue);
            //columnWidths.Add("180px");

            XmlDocument docTeam = new XmlDocument();

            docTeam.LoadXml(WorkEngineAPI.GetTeam("<Filter Column='" + groupName + "' Value='" + search.Replace("'", "''") + "' WebId='" + CurrentWeb.ToString() + "'/>", SPContext.Current.Web));

            foreach (XmlNode ndTeam in docTeam.FirstChild.SelectNodes("//Team/Member"))
            {
                ArrayList item = new ArrayList();

                foreach (DataColumn dc in dtUsers.Columns)
                {
                    XmlAttribute attr = ndTeam.Attributes[dc.ColumnName];
                    if (attr != null)
                    {
                        item.Add(attr.Value);
                    }
                    else
                    {
                        item.Add("");
                    }
                }

                dtUsers.Rows.Add(item.ToArray());
            }

            PickerDialog.Results = dtUsers;
            PickerDialog.ResultControl.PageSize = dtUsers.Rows.Count;



            return(dtUsers.Rows.Count);
        }
Example #13
0
        // Public Methods (1) 

        public override bool Perform()
        {
            LogMessage("Loading Resource Pool List");

            SPList oResourcePool    = SPWeb.Lists.TryGetList("Resources");
            SPList oRoles           = SPWeb.Lists.TryGetList("Roles");
            SPList oDepartments     = SPWeb.Lists.TryGetList("Departments");
            SPList oHolidaySchedule = SPWeb.Lists.TryGetList("Holiday Schedules");
            SPList oWorkHours       = SPWeb.Lists.TryGetList("Work Hours");

            if (oResourcePool == null)
            {
                LogMessage("", "Resources list missing", 3);
            }
            else if (oRoles == null)
            {
                LogMessage("", "Roles list missing", 3);
            }
            else if (oDepartments == null)
            {
                LogMessage("", "Departments list missing", 3);
            }
            else if (oHolidaySchedule == null)
            {
                LogMessage("", "HolidaySchedules list missing", 3);
            }
            else if (oWorkHours == null)
            {
                LogMessage("", "WorkHours list missing", 3);
            }
            else
            {
                try
                {
                    DataTable dtRoles       = oRoles.Items.GetDataTable();
                    DataTable dtDepartments = oDepartments.Items.GetDataTable();

                    #region Add Temp fields

                    try
                    {
                        if (!oResourcePool.Fields.ContainsFieldWithInternalName("TempRole"))
                        {
                            LogMessage("\tAdding TempRole field");

                            oResourcePool.Fields.Add("TempRole", SPFieldType.Text, false);

                            SPField oField = oResourcePool.Fields.GetFieldByInternalName("TempRole");
                            oField.ShowInDisplayForm = false;
                            oField.ShowInEditForm    = false;
                            oField.ShowInNewForm     = false;
                            oField.Update();
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMessage("\t", "Adding TempRole field: " + ex.Message, 3);
                    }

                    try
                    {
                        if (!oResourcePool.Fields.ContainsFieldWithInternalName("TempDept"))
                        {
                            LogMessage("\tAdding TempDept field");

                            oResourcePool.Fields.Add("TempDept", SPFieldType.Text, false);

                            SPField oField = oResourcePool.Fields.GetFieldByInternalName("TempDept");
                            oField.ShowInDisplayForm = false;
                            oField.ShowInEditForm    = false;
                            oField.ShowInNewForm     = false;
                            oField.Update();
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMessage("\t", "Adding TempDept field: " + ex.Message, 3);
                    }

                    oResourcePool.Update();

                    #endregion

                    #region Process Role and Departments

                    bool bProcessRole = false;
                    bool bProcessDept = false;

                    try
                    {
                        if (oResourcePool.Fields.GetFieldByInternalName("Role").Type == SPFieldType.Choice)
                        {
                            bProcessRole = true;
                        }
                    }
                    catch
                    {
                    }
                    try
                    {
                        if (oResourcePool.Fields.GetFieldByInternalName("Department").Type == SPFieldType.Choice)
                        {
                            bProcessDept = true;
                        }
                    }
                    catch
                    {
                    }

                    SPField oFieldRole;
                    SPField oFieldDept;

                    try
                    {
                        oFieldRole = oResourcePool.Fields.GetFieldByInternalName("Role");
                    }
                    catch
                    {
                        SPField newField = oResourcePool.Fields.CreateNewField(SPFieldType.Choice.ToString(), "Role");
                        oResourcePool.Fields.Add(newField);
                        oResourcePool.Update();

                        oFieldRole = oResourcePool.Fields.GetFieldByInternalName("Role");
                    }

                    try
                    {
                        oFieldDept = oResourcePool.Fields.GetFieldByInternalName("Department");
                    }
                    catch
                    {
                        SPField newField = oResourcePool.Fields.CreateNewField(SPFieldType.Choice.ToString(),
                                                                               "Department");
                        oResourcePool.Fields.Add(newField);
                        oResourcePool.Update();

                        oFieldDept = oResourcePool.Fields.GetFieldByInternalName("Department");
                    }

                    if (bProcessRole || bProcessDept)
                    {
                        LogMessage("\tCopying Temporary Data");

                        foreach (SPListItem li in oResourcePool.Items)
                        {
                            try
                            {
                                if (bProcessDept && li[oFieldDept.Id] != null && oFieldDept.Type == SPFieldType.Choice)
                                {
                                    li["TempDept"] = li[oFieldDept.Id].ToString();
                                }

                                if (bProcessDept && li[oFieldRole.Id] != null && oFieldRole.Type == SPFieldType.Choice)
                                {
                                    li["TempRole"] = li[oFieldRole.Id].ToString();
                                }

                                li.Update();
                            }
                            catch (Exception ex)
                            {
                                LogMessage("\t", "Error (" + li.Title + "): " + ex.Message, 3);
                            }
                        }
                    }

                    Thread.Sleep(5000);

                    #endregion

                    ProcessFields(ref oResourcePool);

                    oFieldRole = oResourcePool.Fields.GetFieldByInternalName("Role");
                    oFieldDept = oResourcePool.Fields.GetFieldByInternalName("Department");

                    LogMessage("\tUpdating Role, Department, Holiday Schedule and Work Hours");

                    EnumerableRowCollection <DataRow> resourceHSWS     = null;
                    EnumerableRowCollection <DataRow> holidaySchedules = null;
                    EnumerableRowCollection <DataRow> workHours        = null;

                    try
                    {
                        var dtResourceHSWS = new DataTable();

                        string connectionString = GetConnectionString();

                        if (string.IsNullOrEmpty(connectionString))
                        {
                            throw new Exception("PFE DB connection string is empty.");
                        }

                        using (var sqlConnection = new SqlConnection(connectionString))
                        {
                            using (var sqlCommand = new SqlCommand(SQL, sqlConnection))
                            {
                                sqlConnection.Open();
                                using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                                {
                                    dtResourceHSWS.Load(sqlDataReader);
                                }
                            }
                        }

                        resourceHSWS = dtResourceHSWS.AsEnumerable();

                        if (resourceHSWS.Any())
                        {
                            holidaySchedules = oHolidaySchedule.Items.GetDataTable().AsEnumerable();
                            workHours        = oWorkHours.Items.GetDataTable().AsEnumerable();
                        }
                    }
                    catch (Exception ex)
                    {
                        LogMessage("\t", "(Get PFE DB ConnectionString): " + ex.Message, 3);
                    }

                    foreach (SPListItem li in oResourcePool.Items)
                    {
                        try
                        {
                            #region Copy Department and Roles

                            if (li["TempDept"] != null && !li["TempDept"].ToString().Contains(";#") &&
                                oFieldDept.Type == SPFieldType.Lookup)
                            {
                                DataRow[] dr = dtDepartments.Select("DisplayName='" + li["TempDept"] + "'");
                                if (dr.Length > 0)
                                {
                                    var lv = new SPFieldLookupValue(int.Parse(dr[0]["ID"].ToString()),
                                                                    li["TempDept"].ToString());
                                    li[oFieldDept.Id] = lv;
                                }
                            }

                            if (li["TempRole"] != null && !li["TempRole"].ToString().Contains(";#") &&
                                oFieldRole.Type == SPFieldType.Lookup)
                            {
                                DataRow[] dr = dtRoles.Select("Title='" + li["TempRole"] + "'");
                                if (dr.Length > 0)
                                {
                                    var lv = new SPFieldLookupValue(int.Parse(dr[0]["ID"].ToString()),
                                                                    li["TempRole"].ToString());
                                    li[oFieldRole.Id] = lv;
                                }
                            }

                            #endregion

                            string spAccount = string.Empty;
                            var    resAcct   = li["SharePointAccount"] as string;
                            if (!string.IsNullOrEmpty(resAcct))
                            {
                                var uv = new SPFieldUserValue(SPWeb, resAcct);
                                if (uv.User != null)
                                {
                                    spAccount = uv.User.LoginName.ToLower();
                                }
                            }

                            string extId = (li["EXTID"] ?? string.Empty).ToString();

                            if (resourceHSWS != null && resourceHSWS.Any() && !string.IsNullOrEmpty(spAccount))
                            {
                                try
                                {
                                    if (string.IsNullOrEmpty(extId))
                                    {
                                        foreach (DataRow row in resourceHSWS)
                                        {
                                            object acct = row["Account"];
                                            if (acct != null && acct != DBNull.Value)
                                            {
                                                if (acct.ToString().ToLower().Equals(spAccount))
                                                {
                                                    li["EXTID"] = (row["ResourceId"] ?? string.Empty).ToString();
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogMessage("\t", "(" + li.Title + "): Not setting EXTID. " + ex.Message, 3);
                                }

                                try
                                {
                                    foreach (object schedule in from hs in resourceHSWS
                                             let account = hs["Account"]
                                                           where account != null && account != DBNull.Value
                                                           where account.ToString().ToLower().Equals(spAccount)
                                                           select hs["HolidaySchedule"]
                                                           into schedule
                                                           where schedule != null && schedule != DBNull.Value
                                                           select schedule)
                                    {
                                        foreach (DataRow s in holidaySchedules)
                                        {
                                            object sch = s["Title"];
                                            if (sch == null || sch == DBNull.Value)
                                            {
                                                continue;
                                            }

                                            string hsch = sch.ToString();
                                            if (!hsch.ToLower().Equals(schedule.ToString().ToLower()))
                                            {
                                                continue;
                                            }

                                            li["HolidaySchedule"] =
                                                new SPFieldLookupValue(Convert.ToInt32(s["ID"].ToString()), hsch);
                                            break;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogMessage("\t", "(" + li.Title + "): Not setting Holiday Schedule. " + ex.Message,
                                               3);
                                }

                                try
                                {
                                    foreach (object hours in from wh in resourceHSWS
                                             let account = wh["Account"]
                                                           where account != null && account != DBNull.Value
                                                           where account.ToString().ToLower().Equals(spAccount)
                                                           select wh["WorkHours"]
                                                           into hours
                                                           where hours != null && hours != DBNull.Value
                                                           select hours)
                                    {
                                        foreach (DataRow h in workHours)
                                        {
                                            object hr = h["Title"];
                                            if (hr == null || hr == DBNull.Value)
                                            {
                                                continue;
                                            }

                                            string whr = hr.ToString();
                                            if (!whr.ToLower().Equals(hours.ToString().ToLower()))
                                            {
                                                continue;
                                            }

                                            li["WorkHours"] = new SPFieldLookupValue(
                                                Convert.ToInt32(h["ID"].ToString()), whr);
                                            break;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogMessage("\t", "(" + li.Title + "): Not setting Work Hours. " + ex.Message, 3);
                                }
                            }
                            else
                            {
                                LogMessage("\t",
                                           "(" + li.Title +
                                           "): Not setting Holiday Schedule and Work Hours. Cannot load from PFE.", 3);
                            }

                            li.Update();

                            LogMessage("\t\t" + li.Title);
                        }
                        catch (Exception ex)
                        {
                            LogMessage("\t", "(" + li.Title + "): " + ex.Message, 3);
                        }
                    }

                    if (bIsPfe)
                    {
                        using (var workEngineAPI = new WorkEngineAPI())
                        {
                            LogMessage("Installing PfE Resource Events");

                            WorkEngineAPI.AddRemoveFeatureEvents(
                                @"<AddRemoveFeatureEvents><Data><Feature Name=""pferesourcemanagement"" Operation=""ADD""/></Data></AddRemoveFeatureEvents>",
                                SPWeb);
                        }
                    }

                    LogMessage("Enabling New Button");

                    using (var spSite = new SPSite(oResourcePool.ParentWeb.Site.ID))
                    {
                        using (SPWeb spWeb = spSite.OpenWeb(oResourcePool.ParentWeb.ID))
                        {
                            SPList resourcePool = spWeb.Lists.GetList(oResourcePool.ID, false);

                            var gSettings = new GridGanttSettings(resourcePool)
                            {
                                HideNewButton = false
                            };
                            gSettings.SaveSettings(resourcePool);
                        }
                    }

                    LogMessage("Processing Editable Fields");
                    UpdateField("Generic", true, false, true, ref oResourcePool);
                    UpdateField("FirstName", true, true, true, ref oResourcePool);
                    UpdateField("LastName", true, true, true, ref oResourcePool);
                    UpdateField("Email", true, false, true, ref oResourcePool);
                    UpdateField("ResourceLevel", true, true, true, ref oResourcePool);
                    UpdateField("Permissions", true, true, true, ref oResourcePool);
                    UpdateField("StandardRate", true, true, true, ref oResourcePool);
                    UpdateField("Department", true, true, true, ref oResourcePool);
                    UpdateField("Role", true, true, true, ref oResourcePool);
                    UpdateField("HolidaySchedule", true, true, true, ref oResourcePool);
                    UpdateField("WorkHours", true, true, true, ref oResourcePool);
                    UpdateField("AvailableFrom", true, true, true, ref oResourcePool);
                    UpdateField("AvailableTo", true, true, true, ref oResourcePool);
                    UpdateField("Disabled", false, true, true, ref oResourcePool);
                }
                catch (Exception ex)
                {
                    LogMessage("", "General: " + ex.Message, 3);
                }
            }

            return(true);
        }