private void Load(eWMSourceSystem wmSourceSystem)
        {
            DataSet dsData = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobsForMobile";

            colParameters.Add(new SqlParameter("@WMSourceSystem", wmSourceSystem.ToString()));
            dsData = objADO.GetDataSet(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dsData != null && dsData.Tables.Count > 0)
            {
                Populate(dsData);
            }
        }
		public static DataTable JobUpdateDataTable(int jobID, eWMSourceSystem sourceSystem)
		{
			DataSet results = null;
			DataAccess dataAccess = new DataAccess();
			System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
			System.Data.SqlClient.SqlParameter[] parameters = null;
			string storedProcedure = "selJobUpdatesSerialized";
			dataAccess = Domain.GetADOInstance();

			arrayList.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
			arrayList.Add(new SqlParameter("@WMSourceID", jobID));
			parameters = (SqlParameter[])arrayList.ToArray(typeof(SqlParameter));

			results = dataAccess.GetDataSet(storedProcedure, parameters);
			if (results != null && results.Tables.Count > 0 && results.Tables[0] != null && results.Tables[0].Rows.Count > 0)
			{
				dataAccess = null;
				return results.Tables[0];
			}
			dataAccess = null;
			return null;
		}
        public static List<WorkflowAuditRecord> GetWorkflowAuditHistory(int jobID, eWMSourceSystem sourceSystem)
        {
            List<WorkflowAuditRecord> auditHistory = new List<WorkflowAuditRecord>();

            DataTable dtData = null;
            DataAccess objADO = Domain.GetADOInstance();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobStatusAudit";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            dtData = objADO.GetDataTable(strStoredProcedure, "WorkflowAuditHistory", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dtData.Rows.Count > 0)
            {
                WorkflowAuditRecord newAuditRecord = null;
                foreach (DataRow drAudit in dtData.Rows)
                {
                    newAuditRecord = new WorkflowAuditRecord();
                    newAuditRecord.ChangeDate = (DateTime)drAudit["ChangeDate"];
                    newAuditRecord.Status = (eJobStatus)Enum.Parse(typeof(eJobStatus), drAudit["JobStatus"].ToString());
                    if (!drAudit["UserID"].Equals(DBNull.Value))
                    {
                        newAuditRecord.ChangeUser = drAudit["UserID"].ToString();
                    }
                    if (!drAudit["ServiceName"].Equals(DBNull.Value))
                    {
                        newAuditRecord.ServiceName = drAudit["ServiceName"].ToString();
                    }

                    auditHistory.Add(newAuditRecord);
                }
            }

            return auditHistory;
        }
        public static DataTable GetWorkInProgressInfo(int jobID, eWMSourceSystem sourceSystem)
        {
            DataTable dtData = null;
            DataAccess objADO = Domain.GetADOInstance();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selWorkInProgress";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            dtData = objADO.GetDataTable(strStoredProcedure, "WorkInProgress", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return dtData;
        }
        public static Job GetSerializedObject(int jobID, eWMSourceSystem sourceSystem, bool includeArchived)
        {
            Job deserializedJob = null;

            try
            {
                List<Job> matchingJobs = GetJobsByReference(new string[] { jobID.ToString() }, sourceSystem, includeArchived);
                if (matchingJobs.Count > 0)
                {
                    deserializedJob = (Job)matchingJobs[0];
                }
            }
            catch (Exception excE)
            {
                JobLoadException jobLoadException = new BusinessObjects.WorkManagement.JobLoadException(excE);
                jobLoadException.JobID = jobID;
                jobLoadException.Source = sourceSystem.ToString();

                throw jobLoadException;
            }

            return deserializedJob;
        }
        public static List<Job> GetJobsByReference(string[] sourceIDs, eWMSourceSystem sourceSystem, Type inheritedType, bool includeArchived)
        {
            List<Job> colJobs = new List<Job>();
            Job deserializedJob = null;
            DataTable dtResults = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            System.Data.SqlClient.SqlParameter[] arrParameters = null;
            DataAccess.ArrayListParameter objParameter = null;
            string strStoredProcedure = "selJobsByReference";

            objADO = Domain.GetADOInstance();

            objParameter = new DataAccess.ArrayListParameter("WMSourceIDs", sourceIDs);
            //If Source System is UnSpecified then it is not relevant .. so any will be returned 
            if (sourceSystem != eWMSourceSystem.Unspecified)
            {
                colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            }
            if (includeArchived)
            {
                colParameters.Add(new SqlParameter("@IncludeArchived", includeArchived));
            }
            arrParameters = (SqlParameter[])colParameters.ToArray(typeof(SqlParameter));

            dtResults = objADO.GetDataSet(strStoredProcedure, objParameter, arrParameters).Tables[0];
            objADO = null;

            foreach (DataRow drSerializedJob in dtResults.Rows)
            {
                Type inheritedTypeToUse = null;

                if (inheritedType == null)
                {
                    inheritedTypeToUse = Type.GetType(drSerializedJob["TypeName"].ToString());
                }
                else
                {
                    inheritedTypeToUse = inheritedType;
                }

                if (!drSerializedJob["Serialized"].Equals(DBNull.Value))
                {
                    System.Xml.XmlDocument objDOM = new System.Xml.XmlDocument();
                    objDOM.LoadXml(drSerializedJob["Serialized"].ToString());
                    deserializedJob = (Job)BusinessObjects.Base.Deserialize(inheritedTypeToUse, objDOM);
                    if (!drSerializedJob["DateReopened"].Equals(DBNull.Value))
                    {
                        deserializedJob.DateReopened = (DateTime)drSerializedJob["DateReopened"];
                    }

                    // NB: Set properties that are Instance specific to empty\default to avoid confusion
                    deserializedJob.Appointment = null;

                    colJobs.Add(deserializedJob);
                }
            }

            return colJobs;
        }
        public static int GetJobInstanceNumber(int wmSourceID, eWMSourceSystem sourceSystem, string assignedEngineer)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            SqlParameter objParameter = null;
            string strStoredProcedure = "selJobTaskNumberInClick";
            int jobInstanceNumber = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (assignedEngineer == null)
            {
                colParameters.Add(new SqlParameter("@UserID", System.DBNull.Value));
            }
            else
            {
                colParameters.Add(new SqlParameter("@UserID", assignedEngineer));
            }
            objParameter = new SqlParameter("RETURN_VALUE", SqlDbType.Int);
            objParameter.Direction = ParameterDirection.ReturnValue;
            colParameters.Add(objParameter);

            objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;
            if (!objParameter.Value.Equals(DBNull.Value))
            {
                jobInstanceNumber = (int)objParameter.Value;
            }

            return jobInstanceNumber;
        }
        public static int UpdatePostScheduling(int wmSourceID, eWMSourceSystem sourceSystem, DateTime dateScheduled, string[] assignedEngineers, DateTime assignmentStartDate,
                                                        int jobInstanceNumber, bool updateDateChangeDetected)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            DataAccess.ArrayListParameter objParameter = null;
            string strStoredProcedure = "updJobPostClickScheduling";
            int intRowsAffected = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            colParameters.Add(new SqlParameter("@ClickDateScheduled", dateScheduled));
            if (assignedEngineers != null && assignedEngineers.Length > 0)
            {
                objParameter = new DataAccess.ArrayListParameter("JobAssignees", assignedEngineers);
            }
            if (assignmentStartDate != null && assignmentStartDate != DateTime.MinValue)
            {
                colParameters.Add(new SqlParameter("@TargetStartDate", assignmentStartDate));
            }
            colParameters.Add(new SqlParameter("@JobInstanceNumber", jobInstanceNumber));
            if (updateDateChangeDetected)
            {
                colParameters.Add(new SqlParameter("@UpdateDateChangeDetected", true));
            }

            //Updated : AP :  ExecuteSQL method used below is dependent on having Engineers or not
            if (objParameter != null)
            {
                intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, objParameter, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            }
            else
            {
                intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            }

            objADO = null;

            return intRowsAffected;
        }
        /// <summary>
        /// Retrieve TaskUpdates submitted together for the Job 
        /// Optionally at a specific DateTime
        /// Optionally for a specific User (and at a specific DateTime if set)
        /// </summary>
        /// <param name="wmSourceID"></param>
        /// <param name="sourceSystem"></param>
        /// <param name="specificChangeDate"></param>
        /// <param name="userID"></param>
        /// <returns></returns>
        private static System.Collections.Generic.List<HistoricalTaskUpdate> GetStoredTaskUpdates(int wmSourceID, eWMSourceSystem sourceSystem, DateTime specificChangeDate, string userID, string typeName)
        {
            System.Collections.Generic.List<HistoricalTaskUpdate> serializedTaskUpdates = null;

            DataTable dtData = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobTaskUpdates";

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (!string.IsNullOrEmpty(userID))
            {
                colParameters.Add(new SqlParameter("@UserID", userID));
            }
            if (specificChangeDate != DateTime.MinValue)
            {
                colParameters.Add(new SqlParameter("@ChangeDate", specificChangeDate));
            }
            if (!string.IsNullOrEmpty(typeName))
            {
                colParameters.Add(new SqlParameter("@TypeName", typeName));
            }

            dtData = objADO.GetDataTable(strStoredProcedure, "TaskUpdates", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dtData != null && dtData.Rows.Count > 0)
            {
                serializedTaskUpdates = new System.Collections.Generic.List<HistoricalTaskUpdate>();
                foreach (DataRow drMember in dtData.Rows)
                {
                    serializedTaskUpdates.Add(new HistoricalTaskUpdate());
                    serializedTaskUpdates[serializedTaskUpdates.Count - 1].Serialized = new System.Xml.XmlDocument();
                    serializedTaskUpdates[serializedTaskUpdates.Count - 1].Serialized.LoadXml(drMember["Serialized"].ToString());
                    serializedTaskUpdates[serializedTaskUpdates.Count - 1].TypeName = (drMember["TypeName"].ToString());
                }
            }

            return serializedTaskUpdates;
        }
        /// <summary>
        /// Archives the Job in TaskStore.tblJobArchive
        /// </summary>
        /// <returns></returns>
        public static bool Remove(int jobID, eWMSourceSystem sourceSystem)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "insJobArchive";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));

            int intReturn = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return (intReturn > 0);
        }
        public static bool RemoveAssignees(int wmSourceID, eWMSourceSystem sourceSystem, int jobInstanceNumber)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "delJobAssignees";
            int intRowsAffected = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (jobInstanceNumber > -1)
            {
                colParameters.Add(new SqlParameter("@JobInstanceNumber", jobInstanceNumber));
            }
            intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return (intRowsAffected > 0);
        }
        public static LostTimeUpdateCollection GetLostTimeUpdateHistory(int wmSourceID, eWMSourceSystem sourceSystem, string userID)
        {
            LostTimeUpdateCollection lostTimeUpdates = null;

            DataTable dtData = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobLostTimeHistory";

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (userID != null && userID != string.Empty)
            {
                colParameters.Add(new SqlParameter("@UserID", userID));
            }

            dtData = objADO.GetDataTable(strStoredProcedure, "LostTimeUpdates", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dtData != null && dtData.Rows.Count > 0)
            {
                lostTimeUpdates = new LostTimeUpdateCollection();
                foreach (DataRow drMember in dtData.Rows)
                {
                    LostTimeUpdate lostTimeUpdate = new LostTimeUpdate();
                    lostTimeUpdate.Reason = new LostTimeReason();
                    lostTimeUpdate.Reason.ID = (int)drMember["LostTimeID"];
                    lostTimeUpdate.Reason.Description = drMember["Description"].ToString();
                    lostTimeUpdate.Comments = drMember["Comments"].ToString();
                    lostTimeUpdate.Minutes = (int)drMember["Minutes"];
                    lostTimeUpdates.Add(lostTimeUpdate);
                    //////lostTimeUpdates.Add(new LostTimeUpdate());
                    //////lostTimeUpdates[lostTimeUpdates.Count - 1].LostTimeID = (int)drMember["LostTimeID"];
                    //////lostTimeUpdates[lostTimeUpdates.Count - 1].Comments = drMember["Description"].ToString();
                    //////lostTimeUpdates[lostTimeUpdates.Count - 1].Minutes = (int)drMember["Minutes"];
                }
            }

            return lostTimeUpdates;
        }
        public static bool RemoveAssignees(int wmSourceID, eWMSourceSystem sourceSystem, string[] userList)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "delJobAssignees";
            int intRowsAffected = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (userList != null)
            {
                DataAccess.ArrayListParameter objParameter = new DataAccess.ArrayListParameter("UserList", userList);
                intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, objParameter, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            }
            else
            {
                intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            }
            objADO = null;

            return (intRowsAffected > 0);
        }
        public static string GetClickCallIDAndNumber(int wmSourceID, eWMSourceSystem sourceSystem, out int instanceNumber)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selClickCallIDForJob";
            string clickCallID = null;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            SqlParameter outputParameterCallID = new SqlParameter("@ClickCallID", SqlDbType.VarChar, 50);
            outputParameterCallID.Direction = ParameterDirection.Output;
            colParameters.Add(outputParameterCallID);
            SqlParameter outputParameterInstance = new SqlParameter("@JobInstance", SqlDbType.Int);
            outputParameterInstance.Direction = ParameterDirection.Output;
            colParameters.Add(outputParameterInstance);

            objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (!outputParameterCallID.Value.Equals(DBNull.Value))
            {
                clickCallID = outputParameterCallID.Value.ToString();
            }

            instanceNumber = -1;
            if (!outputParameterInstance.Value.Equals(DBNull.Value))
            {
                instanceNumber = Convert.ToInt32(outputParameterInstance.Value);
            }

            return clickCallID;
        }
        public static int GetNextJobInstanceNumber(int wmSourceID, eWMSourceSystem sourceSystem, out string clickCallID)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            SqlParameter outputParameterCallID = null;
            SqlParameter outputParameterInstanceNo = null;
            string strStoredProcedure = "selJobNewInstanceDetails";
            int jobInstanceNumber = 0;

            clickCallID = null;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            outputParameterCallID = new SqlParameter("@ClickCallID", SqlDbType.VarChar, 50);
            outputParameterCallID.Direction = ParameterDirection.Output;
            colParameters.Add(outputParameterCallID);
            outputParameterInstanceNo = new SqlParameter("@JobInstanceNumber", SqlDbType.Int);
            outputParameterInstanceNo.Direction = ParameterDirection.Output;
            colParameters.Add(outputParameterInstanceNo);

            objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (!outputParameterCallID.Value.Equals(DBNull.Value))
            {
                clickCallID = outputParameterCallID.Value.ToString();
            }
            if (!outputParameterInstanceNo.Value.Equals(DBNull.Value))
            {
                jobInstanceNumber = (int)outputParameterInstanceNo.Value;
            }

            return jobInstanceNumber;
        }
        public static string[] GetAssigneeInformation(int jobID, eWMSourceSystem sourceSystem, int instanceNumber, bool includeArchived)
        {
            DataTable dtData = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobAssignees";

            string[] clickEngineerIDs = null;

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            if (instanceNumber != -1)
            {
                colParameters.Add(new SqlParameter("@JobInstanceNumber", instanceNumber));
            }
            colParameters.Add(new SqlParameter("@IncludeArchived", includeArchived));
            dtData = objADO.GetDataTable(strStoredProcedure, "AssigneeInformation", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dtData != null && dtData.Rows.Count > 0)
            {
                clickEngineerIDs = new string[dtData.Rows.Count];
                string assigneeID = string.Empty;
                for (int intIndex = 0; intIndex < dtData.Rows.Count; intIndex++)
                {
                    assigneeID = dtData.Rows[intIndex]["UserID"].ToString();
                    if (!dtData.Rows[intIndex]["EmpNo"].Equals(DBNull.Value) && dtData.Rows[intIndex]["EmpNo"] != string.Empty)
                    {
                        assigneeID += ":" + dtData.Rows[intIndex]["EmpNo"].ToString();
                    }
                    clickEngineerIDs[intIndex] = assigneeID;
                }
            }

            return clickEngineerIDs;
        }
        public bool Save(int jobID, eWMSourceSystem sourceSystem, DateTime dateRecorded, int jobInstanceNumber)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            SqlParameter objParameter = null;
            string strStoredProcedure = "insJobTaskUpdate";

            if (mdteDateUpdated == DateTime.MinValue)
            {
                mdteDateUpdated = dateRecorded;
            }

            string strXML = BusinessObjects.Base.Serialize(this.GetType(), this);
            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            colParameters.Add(new SqlParameter("@TypeName", this.GetType().AssemblyQualifiedName));
            objParameter = new SqlParameter("@SerializedObject", SqlDbType.Xml);
            objParameter.Value = new System.Data.SqlTypes.SqlXml(new System.Xml.XmlTextReader(strXML, System.Xml.XmlNodeType.Document, null));
            colParameters.Add(objParameter);
            colParameters.Add(new SqlParameter("@IsComplete", true));
            colParameters.Add(new SqlParameter("@ChangeDate", dateRecorded));  // NB: mdteDateUpdated not used as may have been set on the client
            colParameters.Add(new SqlParameter("@UserID", mstrUserID));
            if (mintID > 0)
            {
                colParameters.Add(new SqlParameter("@TaskID", mintID));
            }
            if (jobInstanceNumber > -1)
            {
                colParameters.Add(new SqlParameter("@JobInstanceNumber", jobInstanceNumber));
            }
            if (mintAssetID > 0)
            {
                colParameters.Add(new SqlParameter("@AssetID", mintAssetID));
            }

            int intReturn = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return (intReturn > 0);
        }
        public static List<Job> GetJobsByParentID(int jobID, eWMSourceSystem sourceSystem)
        {
            List<Job> colJobs = new List<Job>();
            DataAccess objADO = Domain.GetADOInstance();
            DataTable dtResults = null;
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobsByParentJobID";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            dtResults = objADO.GetDataTable(strStoredProcedure, "ChildJobs", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            if (dtResults.Rows.Count > 0)
            {
                Type inheritedType = null;
                System.Xml.XmlDocument objDOM = new System.Xml.XmlDocument();

                foreach (DataRow drSerializedJob in dtResults.Rows)
                {
                    if (!drSerializedJob["Serialized"].Equals(DBNull.Value))
                    {
                        objDOM.LoadXml(drSerializedJob["Serialized"].ToString());
                        inheritedType = Type.GetType(drSerializedJob["TypeName"].ToString());
                        colJobs.Add((Job)BusinessObjects.Base.Deserialize(inheritedType, objDOM));
                    }
                }
            }

            return colJobs;
        }
        public bool Save(string wmSourceID, eWMSourceSystem sourceSystem, eFileAssociationType fileAssociationType)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "updJobFileAssociation";
            if (fileAssociationType == eFileAssociationType.UserRelated)
            {
                strStoredProcedure = "updUserFileAssociation";
            }
            int intReturn = 0;

            foreach (FileAssociation fileMetadata in this)
            {
                if (fileAssociationType != eFileAssociationType.UserRelated)
                {
                    colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
                    colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
                }
                else
                {
                    colParameters.Add(new SqlParameter("@UserID", wmSourceID));
                }
                colParameters.Add(new SqlParameter("@RawFileName", fileMetadata.Path.Substring(fileMetadata.Path.LastIndexOf(@"\") + 1)));
                colParameters.Add(new SqlParameter("@FilePath", fileMetadata.Path));
                colParameters.Add(new SqlParameter("@FileDesc", fileMetadata.Description));
                colParameters.Add(new SqlParameter("@AssociationType", fileMetadata.AssociationType.ToString()));
                colParameters.Add(new SqlParameter("@SizeInBytes", fileMetadata.SizeInBytes));
                colParameters.Add(new SqlParameter("@FileHash", fileMetadata.Hash));
                colParameters.Add(new SqlParameter("@IsEncrypted", fileMetadata.IsEncrypted));
                intReturn += objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
                colParameters.Clear();
            }
            objADO = null;

            return (intReturn > 0);
        }
        public static bool UpdateSerializedContent(int jobID, eWMSourceSystem sourceSystem, string serializedContent)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            SqlParameter xmlParameter = null;
            string strStoredProcedure = "updFailedJobAuditSerialized";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            xmlParameter = new SqlParameter("@SerializedObject", SqlDbType.Xml);
            xmlParameter.Value = new System.Data.SqlTypes.SqlXml(new System.Xml.XmlTextReader(serializedContent, System.Xml.XmlNodeType.Document, null));
            colParameters.Add(xmlParameter);

            int intReturn = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return (intReturn > 0);
        }
        public static DataTable GetCurrentSchedulingInfo(int wmSourceID, eWMSourceSystem sourceSystem, out DateTime currentStartDate)
        {
            DataTable dtInfo = null;
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            SqlParameter objOutputParameter = null;
            string strStoredProcedure = "selJobSchedulingInfo";

            currentStartDate = DateTime.MinValue;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            objOutputParameter = new SqlParameter("@TargetStartDate", SqlDbType.DateTime);
            objOutputParameter.Direction = ParameterDirection.Output;
            colParameters.Add(objOutputParameter);

            dtInfo = objADO.GetDataTable(strStoredProcedure, "SchedulingInfo", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            // Set currentStartDate out parameter if available
            if (!objOutputParameter.Value.Equals(DBNull.Value))
            {
                currentStartDate = (DateTime)objOutputParameter.Value;
            }

            return dtInfo;
        }
        public int Save(int jobID, eWMSourceSystem sourceSystem, bool informEngineers)
        {
            if (string.IsNullOrEmpty(mstrText))
            {
                return 0;
            }

            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "insJobComment";
            int intRowsAffected = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            colParameters.Add(new SqlParameter("@ChangeDate", mdteChangeDate));
            colParameters.Add(new SqlParameter("@ChangeUser", mstrChangeUser));
            colParameters.Add(new SqlParameter("@IsEngineerComment", mblnIsEngineerComment));
            //CR : 2396 , IsCommentsCritical is used for filtering whether comments are critical / normal
            //Changed as per RAB's review comments  to IsCritical
            colParameters.Add(new SqlParameter("@IsCritical", mblnIsCritical));
            colParameters.Add(new SqlParameter("@CommentType", mobjType.ToString()));
            colParameters.Add(new SqlParameter("@CommentText", mstrText));
            if (informEngineers)
            {
                colParameters.Add(new SqlParameter("@InformEngineers", true));
            }
            if (!string.IsNullOrEmpty(mstrSortExpression))
            {
                colParameters.Add(new SqlParameter("@SortExpression", mstrSortExpression));
            }

            intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return intRowsAffected;
        }
        public static List<ExtendedAssignment> GetAssignmentsEligibleForDispatch(DateTime maximumDueDate, eWMSourceSystem sourceSystem)
        {
            List<ExtendedAssignment> assignments = new List<ExtendedAssignment>();
            DataTable dtResults = null;
            FinalBuild.DataAccess objADO = Domain.GetADOInstance();
            System.Collections.ArrayList colParameters = new System.Collections.ArrayList();
            string strStoredProcedure = "selAssignmentsEligibleForDispatch";

            // Assemble Parameters
            colParameters.Add(new SqlParameter("@MaximumDueDate", maximumDueDate));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));

            dtResults = objADO.GetDataTable(strStoredProcedure, "Assignments", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            assignments = PopulateAssignmentsForDispatch(dtResults);

            return assignments;
        }
        public static CommentAuditRecordCollection FindByJob(int jobID, eWMSourceSystem sourceSystem)
        {
            DataAccess objADO = Domain.GetADOInstance();
            DataTable dtResults = null;
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "selJobComments";

            colParameters.Add(new SqlParameter("@WMSourceID", jobID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));

            dtResults = objADO.GetDataTable(strStoredProcedure, "Comments", (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return Populate(dtResults);
        }
        /// <summary>
        /// Updates TaskStore that Job has been received by Click or in fact any other SchedulingSystem
        /// </summary>
        /// <param name="wmSourceID"></param>
        /// <param name="sourceSystem"></param>
        /// <param name="dateSubmitted"></param>
        /// <param name="clickKey"></param>
        /// <param name="jobInstanceNumber"></param>
        /// <returns></returns>
        public static int UpdatePostSubmission(int wmSourceID, eWMSourceSystem sourceSystem, DateTime dateSubmitted, int clickKey, int jobInstanceNumber)
        {
            DataAccess objADO = new DataAccess();
            ArrayList colParameters = new ArrayList();
            string strStoredProcedure = "updJobPostClickSubmission";
            int intRowsAffected = 0;

            colParameters.Add(new SqlParameter("@WMSourceID", wmSourceID));
            colParameters.Add(new SqlParameter("@WMSourceSystem", sourceSystem.ToString()));
            colParameters.Add(new SqlParameter("@ClickDateSubmitted", dateSubmitted));
            if (clickKey > 0)
            {
                colParameters.Add(new SqlParameter("@ClickKey", clickKey));
            }
            colParameters.Add(new SqlParameter("@JobInstanceNumber", jobInstanceNumber));
            intRowsAffected = objADO.ExecuteSQL(strStoredProcedure, (SqlParameter[])colParameters.ToArray(typeof(SqlParameter)));
            objADO = null;

            return intRowsAffected;
        }