/// <summary>
        /// To Edit the content module tracking data
        /// </summary>
        /// <param name="pEntContModTracking"></param>
        /// <returns>ContentModuleTracking object</returns>
        public void GenerateLog(ContentModuleTracking pEntContModTracking)
        {
            ContentModuleTrackingUpdateResult result = new ContentModuleTrackingUpdateResult();

            try
            {
                fGenerateLog(pEntContModTracking);
            }
            catch (Exception expCommon)
            {
                //_expCustom = new CustomException(_strMessageId, CustomException.WhoCallsMe(), ExceptionSeverityLevel.Critical, expCommon, true);
                //throw _expCustom;
            }
        }
        /// <summary>
        /// To Edit the content module tracking data
        /// </summary>
        /// <param name="pEntContModTracking"></param>
        /// <returns>ContentModuleTracking object</returns>
        public ContentModuleTrackingUpdateResult EditContentModuleTracking(ContentModuleTracking pEntContModTracking)
        {
            ContentModuleTrackingUpdateResult result = new ContentModuleTrackingUpdateResult();

            try
            {
                result = Update(pEntContModTracking, Schema.Common.VAL_UPDATE_MODE);
            }
            catch (Exception expCommon)
            {
                //_expCustom = new CustomException(_strMessageId, CustomException.WhoCallsMe(), ExceptionSeverityLevel.Critical, expCommon, true);
                //throw _expCustom;
            }
            return(result);
        }
        /// <summary>
        /// private method to support both Add and Edit content module tracking transactions.
        /// </summary>
        /// <param name="pEntContModTracking"></param>
        /// <param name="pUpdateMode"></param>
        /// <returns>ContentModuleTracking object</returns>
        private ContentModuleTrackingUpdateResult Update(ContentModuleTracking pEntContModTracking, string pStrUpdateMode)
        {
            _sqlObject         = new SQLObject();
            sqlcmd             = new SqlCommand();
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.CommandText = Schema.ContentModuleTracking.PROC_UPDATE_CONTENT_MODULE_TRACKING;
            _strConnString     = _sqlObject.GetClientDBConnString(pEntContModTracking.ClientId);
            //if (pStrUpdateMode == Schema.Common.VAL_INSERT_MODE)
            //{
            //    sqlpara = new SqlParameter(Schema.Common.PARA_UPDATE_MODE, Schema.Common.VAL_INSERT_MODE);
            //}
            //else
            //    sqlpara = new SqlParameter(Schema.Common.PARA_UPDATE_MODE, Schema.Common.VAL_UPDATE_MODE);
            //sqlcmd.Parameters.Add(sqlpara);

            if (string.IsNullOrEmpty(pEntContModTracking.ID))
            {
                pEntContModTracking.ID = pEntContModTracking.LearnerId + IDGenerator.GetUniqueKey(16);
            }

            sqlpara = new SqlParameter(Schema.Common.PARA_CONTENTTRACKID, pEntContModTracking.ID);
            sqlcmd.Parameters.Add(sqlpara);

            sqlpara = new SqlParameter(Schema.ContentModule.PARA_CONTENT_MODULE_ID, pEntContModTracking.ContentModuleId);
            sqlcmd.Parameters.Add(sqlpara);

            //sqlpara = new SqlParameter(Schema.Common.PARA_IS_BULK_MARK_COMPLETED, pEntContModTracking.IsBulkMarkCompleted);
            //sqlcmd.Parameters.Add(sqlpara);

            sqlpara = new SqlParameter(Schema.Learner.PARA_LEARNERID, pEntContModTracking.UserID);
            sqlcmd.Parameters.Add(sqlpara);

            //if (!string.IsNullOrEmpty(pEntContModTracking.SessionId))
            //{
            //    sqlcmd.Parameters.Add(new SqlParameter(Schema.Learner.PARA_SESSION_ID, pEntContModTracking.SessionId));
            //}

            //sqlcmd.Parameters.Add(new SqlParameter(Schema.ContentModuleTracking.PARA_EXTEND_EXPIRATION_MINUTES, pEntContModTracking.ExtendExpirationMinutes));
            //sqlcmd.Parameters.Add(new SqlParameter(Schema.ContentModuleTracking.PARA_CHECK_EXPIRED_SESSION, pEntContModTracking.CheckExpiredSession));

            if (DateTime.MinValue.CompareTo(pEntContModTracking.DateOfStart) < 0)
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_DATE_OF_START, pEntContModTracking.DateOfStart);
            }
            else
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_DATE_OF_START, null);
            }
            sqlcmd.Parameters.Add(sqlpara);

            if (pEntContModTracking.DateOfCompletion != null)
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_DATE_OF_COMPLETION, pEntContModTracking.DateOfCompletion);
            }
            else
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_DATE_OF_COMPLETION, null);
            }
            sqlcmd.Parameters.Add(sqlpara);

            sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_TOTAL_NO_OF_PAGES, pEntContModTracking.TotalNoOfPages);
            sqlcmd.Parameters.Add(sqlpara);

            sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_NO_OF_PAGES_COMPLETED, pEntContModTracking.NoOfPagesCompleted);
            sqlcmd.Parameters.Add(sqlpara);

            sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_COMPLETION_STATUS, pEntContModTracking.CompletionStatus.ToString());
            sqlcmd.Parameters.Add(sqlpara);

            if (!string.IsNullOrEmpty(pEntContModTracking.Score))
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCORE, pEntContModTracking.Score);
            }
            else
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCORE, null);
            }
            sqlcmd.Parameters.Add(sqlpara);

            if (!string.IsNullOrEmpty(pEntContModTracking.UserDataXML))
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_USER_DATA_XML, pEntContModTracking.UserDataXML);
            }
            else
            {
                sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_USER_DATA_XML, null);
            }
            sqlcmd.Parameters.Add(sqlpara);

            //if (!string.IsNullOrEmpty(pEntContModTracking.Score))
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCORE, pEntContModTracking.Score);
            //else
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCORE, null);
            //sqlcmd.Parameters.Add(sqlpara);

            //if (!string.IsNullOrEmpty(pEntContModTracking.MarkedCompletedById))
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_MARKED_COMPLETED_BY_ID, pEntContModTracking.MarkedCompletedById);
            //else
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_MARKED_COMPLETED_BY_ID, null);
            //sqlcmd.Parameters.Add(sqlpara);

            //if (!string.IsNullOrEmpty(pEntContModTracking.ScannedCertificationFileName))
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCANNED_CERTIFICATION_FILE_NAME, pEntContModTracking.ScannedCertificationFileName);
            //else
            //    sqlpara = new SqlParameter(Schema.ContentModuleTracking.PARA_SCANNED_CERTIFICATION_FILE_NAME, null);
            //sqlcmd.Parameters.Add(sqlpara);

            //sqlcmd.Parameters.AddWithValue(Schema.ContentModuleTracking.PARA_ACTIVITY_NAME, null);
            //sqlcmd.Parameters.AddWithValue(Schema.ContentModuleTracking.PARA_USER_FIRST_LAST_NAME, null);
            //sqlcmd.Parameters.AddWithValue(Schema.ContentModuleTracking.PARA_REVIEWER_COMMENTS, pEntContModTracking.ReviewComments);
            //sqlcmd.Parameters.AddWithValue(Schema.ContentModuleTracking.PARA_REGION_VIEW_INFO, pEntContModTracking.RegionViewInfo);
            //sqlcmd.Parameters.AddWithValue(Schema.ContentModuleTracking.PARA_IS_FOR_ADMIN_PREVIEW, pEntContModTracking.IsForAdminPreview);

            ContentModuleTrackingUpdateResult result = null;

            using (SqlConnection conn = new SqlConnection(_strConnString))
            {
                conn.Open();

                sqlcmd.Connection = conn;

                using (var reader = sqlcmd.ExecuteReader())
                {
                    if (reader.HasRows)
                    {
                        reader.Read();

                        result = new ContentModuleTrackingUpdateResult();

                        //reader.SetValueForColumn<string>("PreviousCompletionStatus", s => result.PreviousCompletionStatus = s);
                        //reader.SetValueForColumn<string>("CurrentCompletionStatus", s => result.CurrentCompletionStatus = s);
                        //reader.SetValueForColumn<string>("LearnerId", s => result.LearnerId = s);
                    }
                }
            }

            return(result);
        }