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; }