Exemplo n.º 1
0
        public ResponseModel<string> CreateTemplate(List<CreateTemplateQuestionInfoModel> req,string username)
        {
            var response = new ResponseModel<string>();

            var keyInfo = _db.CreateTemplateQuestionInfoes.FirstOrDefault();
            var refKey = username;
            var digitKey = 0;
            if (keyInfo != null)
            {
                digitKey = _db.CreateTemplateQuestionInfoes.Max(x => x.Id) + 1;
            }
            else
            {
                digitKey = 1;
            }
            refKey += digitKey;
            var createTemplateQuestionsInfoInsert = new CreateTemplateQuestionInfo
            {
                buttonText = "NA",
                username = username,
                title = req[0].title,
                visible = "NA",
                type = "NA",
                creationTime = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                referenceId = refKey,
                total = "NA",
                completed = "NA",
                verified = "NA"
            };

            _db.CreateTemplateQuestionInfoes.Add(createTemplateQuestionsInfoInsert);

            try
            {
                _db.SaveChanges();
                CreateSubTemplateByRefKey CreateSubTemplateByRefKey = new CreateSubTemplateByRefKey();
                CreateSubTemplateByRefKey.CreateSubTemplateByRefKeyService(req, username, refKey);
                response.Status = 200;
                response.Message = "success-"+digitKey;
                response.Payload = refKey;
            }
            catch (DbEntityValidationException e)
            {
                DbContextException.LogDbContextException(e);
                response.Status = 500;
                response.Message = "Failed";
                response.Payload = "Exception Occured";
            }

            return response;
        }
Exemplo n.º 2
0
        public ResponseModel<string> CreateTemplateWithId(List<CreateTemplateQuestionInfoModel> req, string username,string id)
        {
            var response = new ResponseModel<string>();

            var refKey = username+id;

            var createTemplateQuestionsInfoInsert = new CreateTemplateQuestionInfo
            {
                buttonText = "NA",
                username = username,
                title = req[0].title,
                visible = "NA",
                type = "NA",
                creationTime = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                referenceId = refKey,
                total = "NA",
                completed = "NA",
                verified = "NA"
            };

            _db.CreateTemplateQuestionInfoes.Add(createTemplateQuestionsInfoInsert);

            try
            {
                _db.SaveChanges();
                CreateSubTemplateByRefKey CreateSubTemplateByRefKey = new CreateSubTemplateByRefKey();
                CreateSubTemplateByRefKey.CreateSubTemplateByRefKeyService(req, username, refKey);
                response.Status = 200;
                response.Message = "Success";
                response.Payload = "Successfully Created";
            }
            catch (DbEntityValidationException e)
            {
                DbContextException.LogDbContextException(e);
                response.Status = 500;
                response.Message = "Failed";
                response.Payload = "Exception Occured";
            }

            return response;
        }
Exemplo n.º 3
0
        public ResponseModel<string> CreateTemplate(List<CreateTemplateQuestionInfoModel> req,string username,TemplateInfoModel TemplateInfo)
        {
            var response = new ResponseModel<string>();

            var keyInfo = _db.CreateTemplateQuestionInfoes.FirstOrDefault();
            var refKey = _db.Users.SingleOrDefault(x=>x.Username == username).guid;
            var digitKey = 0;

            Random rnd = new Random();
            int randomValue = rnd.Next(1, 10000);
            
            if (keyInfo != null)
            {
                digitKey = _db.CreateTemplateQuestionInfoes.Max(x => x.Id) + 1;                
            }
            else
            {
                digitKey = 1;                
            }
            refKey += digitKey + randomValue;

            if (TemplateInfo.type == Constants.type_Ads && TemplateInfo.subType == Constants.subType_facebookLike)
            {
                var facebookFindPageId = TemplateInfo.pageId.Split('/');
                var createTemplateFacebookLikeInsert = new CreateTemplateFacebookLike
                {                    
                    username = username,
                    title = req[0].title,                    
                    type = TemplateInfo.type,
                    subType = TemplateInfo.subType,
                    creationTime = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                    referenceId = refKey,
                    totalThreads = TemplateInfo.totalThreads,
                    completed = Constants.NA,
                    verified = Constants.NA,
                    payPerUser = TemplateInfo.amountEachThread,
                    DateTime = DateTime.Now,
                    description = (req[3].textBoxQuestionsList[0].Question) == null ? Constants.NA : req[3].textBoxQuestionsList[0].Question,
                    pageId = facebookFindPageId[facebookFindPageId.Length-1],
                    pageUrl = TemplateInfo.pageUrl
                };
                _db.CreateTemplateFacebookLikes.Add(createTemplateFacebookLikeInsert);
                try
                {
                    _db.SaveChanges();
                    
                    var signalRHub = new SignalRHub();
                    string totalProjects = new ProjectDAO().totalAvailableProjects();
                    string successRate = "";
                    string totalUsers = "";
                    string projectCategories = "";
                    
                    var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>();
                    hubContext.Clients.All.updateBeforeLoginUserProjectDetails(totalProjects, successRate, totalUsers, projectCategories);


                    response.Status = 200;
                    response.Message = "success-" + digitKey;
                    response.Payload = refKey;
                }
                catch (DbEntityValidationException e)
                {
                    DbContextException.LogDbContextException(e);
                    response.Status = 500;
                    response.Message = "Failed";
                    response.Payload = "Exception Occured";
                }
            }
            else
            {
                var createTemplateQuestionsInfoInsert = new CreateTemplateQuestionInfo
                {
                    description = TemplateInfo.description != null ? TemplateInfo.description : Constants.NA,
                    username = username,
                    title = req[0].title,
                    visible = Constants.NA,
                    type = TemplateInfo.type,
                    subType = TemplateInfo.subType,
                    creationTime = DateTime.Now.ToString(CultureInfo.InvariantCulture),
                    referenceId = refKey,
                    totalThreads = TemplateInfo.totalThreads,
                    completed = Constants.NA,
                    verified = Constants.NA,
                    payPerUser = TemplateInfo.amountEachThread
                };

                _db.CreateTemplateQuestionInfoes.Add(createTemplateQuestionsInfoInsert);

                try
                {
                    _db.SaveChanges();
                    
                    CreateSubTemplateByRefKey CreateSubTemplateByRefKey = new CreateSubTemplateByRefKey();
                    CreateSubTemplateByRefKey.CreateSubTemplateByRefKeyService(req, username, refKey);

                    var signalRHub = new SignalRHub();
                    string totalProjects = new ProjectDAO().totalAvailableProjects();
                    string successRate = "";
                    string totalUsers = "";
                    string projectCategories = "";
                    var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>();
                    hubContext.Clients.All.updateBeforeLoginUserProjectDetails(totalProjects, successRate, totalUsers, projectCategories);

                    new SendNewTaskService().SendUserTaskNotificationToAllAsync(createTemplateQuestionsInfoInsert.title, "Total " + createTemplateQuestionsInfoInsert.totalThreads+" available",DateTime.Now);
                   
                    response.Status = 200;
                    response.Message = "success-" + digitKey;
                    response.Payload = refKey;
                }
                catch (DbEntityValidationException e)
                {
                    DbContextException.LogDbContextException(e);
                    response.Status = 500;
                    response.Message = "Failed";
                    response.Payload = "Exception Occured";
                }
            }
            
            return response;
        }
        private ResponseModel<string> AllocateSingleAssignTypeThreadToUserByRefKey(CreateTemplateQuestionInfo clientJobInfo, string refKey, string username)
        {
            var response = new ResponseModel<string>();
            var ifAlreadyAllocated = _db.UserJobMappings.SingleOrDefault(x => x.refKey == refKey && x.username == username);
            if (ifAlreadyAllocated != null)
            {
                response.Status = 403;
                response.Message = "already applied";
                return response;
            }
            else if (_db.UserJobMappings.Where(x => x.refKey == refKey).Count() >= Convert.ToInt32((clientJobInfo.totalThreads)))
            {
                response.Status = 405;
                response.Message = "all threads are already allocated !!!";
                return response;
            }
            int expectedDeliveryTimeInMinutes = 15;
            var UserJobMapping = new UserJobMapping();
            UserJobMapping.refKey = refKey;
            UserJobMapping.username = username;
            UserJobMapping.startTime = DateTime.Now.ToString();
            UserJobMapping.expectedDeliveryTime = DateTime.Now.AddMinutes(expectedDeliveryTimeInMinutes).ToString();
            UserJobMapping.endTime = "NA";
            UserJobMapping.status = Constants.status_assigned;

            _db.UserJobMappings.Add(UserJobMapping);
            try
            {
                _db.SaveChanges();

                long JobId = clientJobInfo.Id;
                long JobCompleted = _db.UserJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_done).Count();
                long JobAssigned = _db.UserJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_assigned).Count();
                long JobReviewed = (JobCompleted > 1) ? (JobCompleted) / 2 : 0;  // currently hard coded.

                //var SignalRClientHub = new SignalRClientHub();
                //var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRClientHub>();
                //dynamic client = SignalRManager.getSignalRDetail(clientJobInfo.username);
                //if (client != null)
                //{
                //    client.updateClientProgressChart(Convert.ToString(JobId), clientJobInfo.totalThreads, Convert.ToString(JobCompleted), Convert.ToString(JobAssigned), Convert.ToString(JobReviewed));
                //    //client.updateClientProgressChart("8", "20", "10", "8", "5");
                //    //client.addMessage("add message signalR");
                //}
                bool status = new UserUpdatesClientRealTimeData().UpdateClientRealTimeData(JobId, JobCompleted, JobAssigned, JobReviewed, clientJobInfo.totalThreads, clientJobInfo.username);

                response.Status = 200;
                response.Message = "success-";
                response.Payload = refKey;
            }
            catch (DbEntityValidationException e)
            {
                DbContextException.LogDbContextException(e);
                response.Status = 500;
                response.Message = "Failed";
                response.Payload = "Exception Occured";
            }

            return response;
        }
        private ResponseModel<string> AllocateMultipleTasksMultipleAssignTypeThreadToUserByRefKey(CreateTemplateQuestionInfo clientJobInfo, string refKey, string username)
        {
            var response = new ResponseModel<string>();
            var ifAlreadyAllocated = _db.UserMultipleJobMappings.SingleOrDefault(x => x.refKey == refKey && x.username == username);
            if (ifAlreadyAllocated != null)
            {
                response.Status = 403;
                response.Message = "You have already applied for this job";
                return response;
            }
            else if (_db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.isFirst == Constants.status_true).Count() >= Convert.ToInt32((clientJobInfo.totalThreads)))
            {
                response.Status = 405;
                response.Message = "all threads are already allocated !!!";
                return response;
            }
            const int expectedDeliveryTimeInMinutes = 15;

            

            var availableJobLists = _db.CreateTemplateImgurImagesLists.Where(x => x.referenceKey == refKey && x.status == Constants.status_open).ToList();
            if (availableJobLists != null)
            {
                if (availableJobLists.Count == 0)
                {
                    response.Status = 406;
                    response.Message = "All Threads of this job is already assigned.";
                    return response;
                }

                lock (this)
                {
                    int endCount = Constants.picPerUserImageModeration;
                    if (availableJobLists.Count <= endCount)
                    {
                        endCount = availableJobLists.Count;
                    }

                    for (int i = 0; i < endCount; i++)
                    {
                        var transcriptionTask = availableJobLists[i];
                        var UserMultipleJobMapping = new UserMultipleJobMapping();
                        UserMultipleJobMapping.endTime = Constants.NA;
                        UserMultipleJobMapping.expectedDelivery = DateTime.Now.AddMinutes(expectedDeliveryTimeInMinutes).ToString();
                        UserMultipleJobMapping.refKey = refKey;
                        UserMultipleJobMapping.startTime = DateTime.Now.ToString();
                        UserMultipleJobMapping.status = Constants.status_assigned;

                        if (clientJobInfo.type == Constants.type_moderation && clientJobInfo.subType == Constants.subType_moderatingPhotos)
                        {
                            UserMultipleJobMapping.subType = Constants.subType_moderatingPhotos;
                            UserMultipleJobMapping.type = Constants.type_moderation;
                        }
                        else if (clientJobInfo.type == Constants.type_dataEntry && clientJobInfo.subType == Constants.subType_Transcription)
                        {
                            UserMultipleJobMapping.subType = Constants.subType_Transcription;
                            UserMultipleJobMapping.type = Constants.type_dataEntry;
                        }
                        UserMultipleJobMapping.surveyResult = Constants.NA;
                        UserMultipleJobMapping.username = username;

                        UserMultipleJobMapping.imageKey = transcriptionTask.imgurLink;                        

                        var updateImgurImageMapAfterAssigning = _db.CreateTemplateImgurImagesLists.SingleOrDefault(x => x.Id == transcriptionTask.Id);
                        if (i == 0)
                            UserMultipleJobMapping.isFirst = Constants.status_true;

                        if (updateImgurImageMapAfterAssigning.alocatedCount == null)
                        {
                            updateImgurImageMapAfterAssigning.alocatedCount = 1;                            
                        }
                        else
                            updateImgurImageMapAfterAssigning.alocatedCount += 1;
                        if (updateImgurImageMapAfterAssigning.alocatedCount > (Constants.picPerUserImageModeration-1))
                        {                           
                            updateImgurImageMapAfterAssigning.status = Constants.status_assigned;
                        }
                        _db.UserMultipleJobMappings.Add(UserMultipleJobMapping);
                    }

                    try
                    {

                        _db.SaveChanges();
                        long JobId = clientJobInfo.Id;
                        long JobCompleted = _db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_done).Count();
                        long JobAssigned = _db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_assigned).Count();
                        long JobReviewed = (JobCompleted > 1) ? (JobCompleted) / 2 : 0;  // currently hard coded.

                        bool status = new UserUpdatesClientRealTimeData().UpdateClientRealTimeData(JobId, JobCompleted, JobAssigned, JobReviewed, clientJobInfo.totalThreads, clientJobInfo.username);
                        response.Status = 200;
                        response.Message = "success-";
                        response.Payload = refKey;
                    }
                    catch (DbEntityValidationException e)
                    {

                        DbContextException.LogDbContextException(e);
                        response.Status = 500;
                        response.Message = "Failed";
                        response.Payload = "Exception Occured";
                    }
                }

            }

            return response;
        }
        private ResponseModel<string> AllocateMultipleAssignTypeThreadToUserByRefKey(CreateTemplateQuestionInfo clientJobInfo, string refKey, string username)
        {
            var response = new ResponseModel<string>();
            var ifAlreadyAllocated = _db.UserMultipleJobMappings.SingleOrDefault(x => x.refKey == refKey && x.username == username);
            if (ifAlreadyAllocated != null)
            {
                response.Status = 403;
                response.Message = "You have already applied for this job";
                return response;
            }
            else if (_db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.isFirst == Constants.status_true).Count() >= Convert.ToInt32((clientJobInfo.totalThreads)))
            {
                response.Status = 405;
                response.Message = "all threads are already allocated !!!";
                return response;
            }

            const int expectedDeliveryTimeInMinutes = 15;

            var UserMultipleJobMapping = new UserMultipleJobMapping();
            UserMultipleJobMapping.endTime = Constants.NA;
            UserMultipleJobMapping.expectedDelivery = DateTime.Now.AddMinutes(expectedDeliveryTimeInMinutes).ToString();
            UserMultipleJobMapping.refKey = refKey;
            UserMultipleJobMapping.startTime = DateTime.Now.ToString();
            UserMultipleJobMapping.status = Constants.status_assigned;

            if (clientJobInfo.type == Constants.type_moderation && clientJobInfo.subType == Constants.subType_moderatingPhotos)
            {
                UserMultipleJobMapping.subType = Constants.subType_moderatingPhotos;
                UserMultipleJobMapping.type = Constants.type_moderation;
            }
            else if (clientJobInfo.type == Constants.type_dataEntry && clientJobInfo.subType == Constants.subType_Transcription)
            {
                UserMultipleJobMapping.subType = Constants.subType_Transcription;
                UserMultipleJobMapping.type = Constants.type_dataEntry;
            }
            UserMultipleJobMapping.surveyResult = Constants.NA;
            UserMultipleJobMapping.username = username;

            var availableJobLists = _db.CreateTemplateImgurImagesLists.Where(x => x.referenceKey == refKey && x.status == Constants.status_open).ToList();
            if (availableJobLists != null)
            {
                if (availableJobLists.Count == 0)
                {
                    response.Status = 406;
                    response.Message = "All Threads of this job is already assigned.";
                    return response;
                }
                var transcriptionTask = availableJobLists.First();
                try
                {
                    //to be inclucded in lock
                    lock (this)
                    {
                        UserMultipleJobMapping.imageKey = transcriptionTask.imgurLink;
                        var updateImgurImageMapAfterAssigning = _db.CreateTemplateImgurImagesLists.SingleOrDefault(x => x.Id == transcriptionTask.Id);
                        updateImgurImageMapAfterAssigning.status = Constants.status_assigned;
                        _db.UserMultipleJobMappings.Add(UserMultipleJobMapping);
                        _db.SaveChanges();
                    }
                    //to be inclucded in lock


                    long JobId = clientJobInfo.Id;
                    long JobCompleted = _db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_done).Count();
                    long JobAssigned = _db.UserMultipleJobMappings.Where(x => x.refKey == refKey && x.status == Constants.status_assigned).Count();
                    long JobReviewed = (JobCompleted > 1) ? (JobCompleted) / 2 : 0;  // currently hard coded.

                    //var SignalRClientHub = new SignalRClientHub();
                    //var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRClientHub>();
                    //dynamic client = SignalRManager.getSignalRDetail(clientJobInfo.username);
                    //if (client != null)
                    //{
                    //    client.updateClientProgressChart(Convert.ToString(JobId), clientJobInfo.totalThreads, Convert.ToString(JobCompleted), Convert.ToString(JobAssigned), Convert.ToString(JobReviewed));
                    //    //client.updateClientProgressChart("8", "20", "10", "8", "5");
                    //    //client.addMessage("add message signalR");
                    //}
                    bool status = new UserUpdatesClientRealTimeData().UpdateClientRealTimeData(JobId, JobCompleted, JobAssigned, JobReviewed, clientJobInfo.totalThreads, clientJobInfo.username);
                    response.Status = 200;
                    response.Message = "success-";
                    response.Payload = refKey;
                }
                catch (DbEntityValidationException e)
                {
                    DbContextException.LogDbContextException(e);
                    response.Status = 500;
                    response.Message = "Failed";
                    response.Payload = "Exception Occured";
                }
            }
            //UserMultipleJobMapping.imageKey = 


            return response;
        }