using System; using System.Data; using Ease.Core.Model; using Ease.Core.DataAccess; using Ease.Core; using System.Collections.Generic; using Ease.Core.Utility; using HRM.BO; using HRM.DA; using Payroll.BO; namespace HRM.DA { public class QuestionService : ServiceTemplate, IQuestionService { public QuestionService() { } private void MapObject(Question oQuestion, DataReader oReader) { base.SetObjectID(oQuestion, (oReader.GetInt32("QuestionID").Value)); //oQuestion.QuestionID = oReader.GetID("QuestionID"); oQuestion.QuestionNo = oReader.GetString("QuestionNo"); oQuestion.CategoryID = oReader.GetInt32("CategoryID").GetValueOrDefault(); oQuestion.QuestionBody = oReader.GetString("QuestionBody"); oQuestion.Image = oReader.GetString("Image"); oQuestion.IsMultiple = oReader.GetBoolean("IsMultiple").GetValueOrDefault(); oQuestion.IsPublished = oReader.GetBoolean("IsPublished").GetValueOrDefault(); oQuestion.CreationDate = oReader.GetDateTime("CreationDate").Value; oQuestion.UserID = oReader.GetInt32("UserID").GetValueOrDefault(); oQuestion.QuestionType = (EnumSurveyQuestionType)oReader.GetInt32("QuestionType").Value; oQuestion.CreatedBy = oReader.GetInt32("CreatedBy", 0); oQuestion.ModifiedBy = oReader.GetInt32("ModifiedBy", 0); ; oQuestion.EstimatedTime = oReader.GetDouble("EstimatedTime").GetValueOrDefault(); oQuestion.ModifiedDate = oReader.GetDateTime("ModifiedDate"); this.SetObjectState(oQuestion, Ease.Core.ObjectState.Saved); } protected override T CreateObject(DataReader oReader) { Question oQuestion = new Question(); MapObject(oQuestion, oReader); return oQuestion as T; } protected Question CreateObject(DataReader oReader) { Question oQuestion = new Question(); MapObject(oQuestion, oReader); return oQuestion; } #region Service implementation public Question Get(int id) { Question oQuestion = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(QuestionDA.Get(tc, id)); if (oreader.Read()) { oQuestion = this.CreateObject(oreader); } oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException("Failed to Get Question", e); #endregion } return oQuestion; } public List Get() { List oQuestions = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(QuestionDA.Get(tc)); oQuestions = this.CreateObjects(dr); dr.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oQuestions; } public List GetByCategory(int categoryID) { List oQuestions = null; List oQuestionCategoryList = new List(); oQuestionCategoryList= new QuestionCategoryService().Get(EnumStatus.Active); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(QuestionDA.GetByCategory(tc, categoryID)); oQuestions = this.CreateObjects(dr); dr.Close(); tc.End(); foreach(var item in oQuestions) { item.QuestionAnswers = new QuestionAnswerService().GetByQuestionID(item.ID); item.NoOfOptions = item.QuestionAnswers.Count; item.CategoryString = oQuestionCategoryList?.Find(x=>x.ID==item.CategoryID)?.Description; } } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oQuestions; } public Question GetWithChild(int id) { Question oQuestion = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(QuestionDA.Get(tc, id)); if (oreader.Read()) { oQuestion = this.CreateObject(oreader); } oreader.Close(); tc.End(); if(oQuestion != null) { oQuestion.QuestionAnswers = new QuestionAnswerService().GetByQuestionID(oQuestion.ID); } } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException("Failed to Get Question", e); #endregion } return oQuestion; } public QuestionAnswerAttachment GetAnswerByAttchmentId(int questionId,int answerId) { QuestionAnswerAttachment oFileAttachment = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(QuestionAnswerAttachmentDA.GetAnswerAttachment(tc, questionId, answerId)); while (oreader.Read()) { oFileAttachment = new QuestionAnswerAttachment(); oFileAttachment.ID = oreader.GetInt32("QUESTIONANSWERATTACHMENTID").Value; oFileAttachment.QuestionID = oreader.GetInt32("QuestionID", 0); oFileAttachment.FileAsByteArray = oreader.GetLob("FileData"); oFileAttachment.OriginalFileName = oreader.GetString("OriginalFileName"); oFileAttachment.AnswerID = oreader.GetInt32("AnswerID", 0); oFileAttachment.AttachmentType = (EnumQuestionAnswerFileType)oreader.GetInt32("AttachmentType").GetValueOrDefault(); } oreader.Close(); } catch (Exception ex) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(ex); throw new ServiceException("Failed to Get IRNotifications: " + ex.Message, ex); #endregion } return oFileAttachment; } public bool IsTagged(int id) { bool retVal = false; TransactionContext tc = null; try { tc = TransactionContext.Begin(); retVal = QuestionDA.IsTagged(tc, id); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException("Failed to Get Information", e); #endregion } return retVal; } public int Save(Question oQuestion) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); int codeLength = 3; if (oQuestion.IsNew) { int id = tc.GenerateID("Question", "QuestionID"); base.SetObjectID(oQuestion, (id)); QuestionDA.Insert(tc, oQuestion); } else { QuestionDA.Update(tc, oQuestion); } #region Saving answers QuestionAnswerDA.DeleteByQuestionId(tc, oQuestion.ID); foreach (QuestionAnswer ans in oQuestion.QuestionAnswers) { int id = tc.GenerateID("QuestionAnswer", "AnswerID"); base.SetObjectID(ans, (id)); ans.QuestionID = oQuestion.ID; ans.ID = id; QuestionAnswerDA.Insert(tc, ans); } #endregion tc.End(); foreach (var item in oQuestion.QuestionAnswerAttachments) { if (item.ID <= 0 && item.PreviousFileTobase64 != null) { string[] items = item.PreviousFileTobase64.Split(new char[] { ',', ' ' }, StringSplitOptions.None); byte[] newBytes = Convert.FromBase64String(items[1]); item.FileAsByteArray = newBytes; } item.QuestionID = oQuestion.ID; item.AnswerID = 0; item.AttachmentType = EnumQuestionAnswerFileType.Question; QuestionAnswerAttachmentDA.Insert(item, oQuestion.ConnectionString); } foreach (QuestionAnswer ans in oQuestion.QuestionAnswers) { foreach (var item in ans.QuestionAnswerAttachments) { if (item.ID <= 0 && item.PreviousFileTobase64 != null) { string[] items = item.PreviousFileTobase64.Split(new char[] { ',', ' ' }, StringSplitOptions.None); byte[] newBytes = Convert.FromBase64String(items[1]); item.FileAsByteArray = newBytes; } item.QuestionID = oQuestion.ID; item.AnswerID = ans.ID; item.AttachmentType = EnumQuestionAnswerFileType.Answer; QuestionAnswerAttachmentDA.Insert(item, oQuestion.ConnectionString); } } return oQuestion.ID; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void Delete(int id) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); QuestionAnswerDA.DeleteByQuestionId(tc, id); QuestionDA.Delete(tc, id); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } #endregion } }