public ResponseModel<UserProductSurveyTemplateModel> GetTemplateInformationByRefKey(string username,string refKey)
        {
            var response = new ResponseModel<UserProductSurveyTemplateModel>();
            var job = _db.CreateTemplateQuestionInfoes.SingleOrDefault(x=>x.referenceId == refKey);
            response.Status = 200;
            response.Message = "success";
            response.Payload = new UserProductSurveyTemplateModel();
            try
            {
                string earningPerThreadTemp = Convert.ToString(Convert.ToDouble(job.payPerUser) *(Convert.ToDouble(ConfigurationManager.AppSettings["dollarToRupeesValue"])));
                string remainingThreadsTemp = string.Empty;
                if ((job.type == Constants.type_dataEntry && job.subType == Constants.subType_Transcription)||
                        (job.type == Constants.type_moderation && job.subType == Constants.subType_moderatingPhotos))
                    remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserMultipleJobMappings.Where(x => x.refKey == job.referenceId && x.isFirst==Constants.status_true).Count());
                else
                    remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserJobMappings.Where(x => x.refKey == job.referenceId).Count());
                    
                var userTemplate = new UserProductSurveyTemplateModel
                    {
                        title = job.title,
                        type = job.type,
                        subType = job.subType,
                        refKey = job.referenceId,
                        creationTime = job.creationTime,
                        earningPerThreads = earningPerThreadTemp,
                        currency = "INR", // hard coded currency
                        totalThreads = job.totalThreads, // currently hard coded.
                        remainingThreads = remainingThreadsTemp
                    };
                    response.Payload =userTemplate;
                

                return response;
            }
            catch (Exception)
            {
                response.Status = 500;//some error occured
                response.Message = "failed";
                return response;
            }

        }
        private ResponseModel<List<UserProductSurveyTemplateModel>> GetAllTemplateInformationExcludingDoneAssigned(string username)
        {
            var response = new ResponseModel<List<UserProductSurveyTemplateModel>>();
            var templateData = _db.CreateTemplateQuestionInfoes.OrderByDescending(x => x.creationTime).ToList();
            response.Status = 200;
            response.Message = "success";
            response.Payload = new List<UserProductSurveyTemplateModel>();
            try
            {
                foreach (var job in templateData)
                {
                    string earningPerThreadTemp = Convert.ToString(Convert.ToDouble(job.payPerUser) * (Convert.ToDouble(Convert.ToString(ConfigurationManager.AppSettings["dollarToRupeesValue"]))));
                    string remainingThreadsTemp = string.Empty;

                    var userTemplate = new UserProductSurveyTemplateModel
                    {
                        title = job.title,
                        type = job.type,
                        subType = job.subType,
                        refKey = job.referenceId,
                        creationTime = job.creationTime,
                        earningPerThreads = earningPerThreadTemp,
                        currency = "INR", // hard coded currency
                        totalThreads = job.totalThreads
                    };

                    if (job.type == Constants.type_dataEntry && job.subType == Constants.subType_Transcription)
                    {
                        var AlreadyAppliedJobs = _db.UserMultipleJobMappings.SingleOrDefault(x => x.username == username && x.refKey == job.referenceId && x.status != Constants.status_done);
                        if (AlreadyAppliedJobs != null)
                        {
                            continue;
                        }
                        else
                        {
                            userTemplate.userStatus = "new";
                            userTemplate.userDeadline = "NA";
                        }
                        remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserMultipleJobMappings.Where(x => x.refKey == job.referenceId).GroupBy(x => x.username).Count());
                    }
                    else
                    {
                        var AlreadyAppliedJobs = _db.UserJobMappings.SingleOrDefault(x => x.username == username && x.refKey == job.referenceId);
                        if (AlreadyAppliedJobs != null)
                        {
                            continue;
                        }
                        else
                        {
                            userTemplate.userStatus = "new";
                            userTemplate.userDeadline = "NA";
                        }
                        remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserJobMappings.Where(x => x.refKey == job.referenceId).Count());
                    }

                    userTemplate.remainingThreads = remainingThreadsTemp;


                    response.Payload.Add(userTemplate);
                }

                return response;
            }
            catch (Exception ex)
            {
                response.Status = 500;//some error occured
                response.Message = "failed";
                return response;
            }

        }
        private ResponseModel<List<UserProductSurveyTemplateModel>> GetAllTemplateInformationIncludingDoneAssigned(string username)
        {
            var response = new ResponseModel<List<UserProductSurveyTemplateModel>>();
            var templateData = _db.CreateTemplateQuestionInfoes.OrderByDescending(x => x.creationTime).ToList();
            response.Status = 200;
            response.Message = "success";
            response.Payload = new List<UserProductSurveyTemplateModel>();
            try
            {
                var AlreadyAppliedMultipleJobsList = _db.UserMultipleJobMappings.Where(x => x.username == username && x.isFirst == Constants.status_true).ToList();
                var AlreadyAppliedSingleJobsList = _db.UserJobMappings.Where(x => x.username == username).ToList();

                foreach (var job in templateData)
                {                    
                    string earningPerThreadTemp = Convert.ToString(Convert.ToDouble(job.payPerUser) * (Convert.ToDouble(Convert.ToString(ConfigurationManager.AppSettings["dollarToRupeesValue"]))));
                    string remainingThreadsTemp = string.Empty;
                    
                    var userTemplate = new UserProductSurveyTemplateModel
                    {
                        title = job.title,
                        type = job.type,
                        subType = job.subType,
                        refKey = job.referenceId,
                        creationTime = job.creationTime,
                        earningPerThreads = earningPerThreadTemp,
                        currency = Constants.currency_INR, // hard coded currency
                        totalThreads = job.totalThreads
                    };

                    if ((job.type == Constants.type_dataEntry && job.subType == Constants.subType_Transcription)||
                        (job.type == Constants.type_moderation && job.subType == Constants.subType_moderatingPhotos))
                    {

                        if (AlreadyAppliedMultipleJobsList.Any(x => x.refKey == job.referenceId))
                        {
                            continue; // do not add if it is already done or assigned.
                            //userTemplate.userStatus = AlreadyAppliedJobs.status;
                            //userTemplate.userDeadline = AlreadyAppliedJobs.expectedDelivery;
                        }
                        else
                        {
                            userTemplate.userStatus = "new";
                            userTemplate.userDeadline = "NA";
                        }
                        remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserMultipleJobMappings.Where(x => x.refKey == job.referenceId).GroupBy(x=>x.username).Count());
                    }
                    else
                    {
                        if (AlreadyAppliedSingleJobsList.Any(x => x.refKey == job.referenceId))
                        {
                            continue; // do not add if it is already done or assigned.
                            //userTemplate.userStatus = AlreadyAppliedJobs.status;
                            //userTemplate.userDeadline = AlreadyAppliedJobs.expectedDeliveryTime;
                        }
                        else
                        {
                            userTemplate.userStatus = "new";
                            userTemplate.userDeadline = "NA";
                        }
                        remainingThreadsTemp = Convert.ToString(Convert.ToInt32(job.totalThreads) - _db.UserJobMappings.Where(x => x.refKey == job.referenceId).Count());
                    }

                    userTemplate.remainingThreads = remainingThreadsTemp;
                    if (Convert.ToInt32(remainingThreadsTemp) <= 0)
                        continue; // do not add if all threads are consumed.


                    response.Payload.Add(userTemplate);
                }

                return response;
            }
            catch (Exception ex)
            {
                response.Status = 500;//some error occured
                response.Message = "failed";
                return response;
            }

        }