def stop_validating_tasks( stop_validating_dto: StopValidationDTO) -> TaskDTOs: """ Unlocks supplied tasks after validation :raises ValidatatorServiceError """ reset_tasks = stop_validating_dto.reset_tasks project_id = stop_validating_dto.project_id user_id = stop_validating_dto.user_id tasks_to_unlock = ValidatorService.get_tasks_locked_by_user( project_id, reset_tasks, user_id) dtos = [] for task_to_unlock in tasks_to_unlock: task = task_to_unlock['task'] if task_to_unlock['comment']: # Parses comment to see if any users have been @'d MessageService.send_message_after_comment( user_id, task_to_unlock['comment'], task.id, project_id) task.reset_lock(user_id, task_to_unlock['comment']) dtos.append(task.as_dto()) task_dtos = TaskDTOs() task_dtos.tasks = dtos return task_dtos
def unlock_tasks_after_validation( validated_dto: UnlockAfterValidationDTO) -> TaskDTOs: """ Unlocks supplied tasks after validation :raises ValidatatorServiceError """ validated_tasks = validated_dto.validated_tasks project_id = validated_dto.project_id user_id = validated_dto.user_id tasks_to_unlock = ValidatorService.get_tasks_locked_by_user( project_id, validated_tasks, user_id) # Unlock all tasks dtos = [] message_sent_to = [] for task_to_unlock in tasks_to_unlock: task = task_to_unlock['task'] if task_to_unlock['comment']: # Parses comment to see if any users have been @'d MessageService.send_message_after_comment( validated_dto.user_id, task_to_unlock['comment'], task.id, validated_dto.project_id) if task_to_unlock[ 'new_state'] == TaskStatus.VALIDATED or task_to_unlock[ 'new_state'] == TaskStatus.INVALIDATED: # All mappers get a notification if their task has been validated or invalidated. # Only once if multiple tasks mapped if task.mapped_by not in message_sent_to: MessageService.send_message_after_validation( task_to_unlock['new_state'], validated_dto.user_id, task.mapped_by, task.id, validated_dto.project_id) message_sent_to.append(task.mapped_by) if task_to_unlock['new_state'] == TaskStatus.VALIDATED: # Set last_validation_date for the mapper to current date task.mapper.last_validation_date = timestamp() # Update stats if user setting task to a different state from previous state prev_status = TaskHistory.get_last_status(project_id, task.id) if prev_status != task_to_unlock['new_state']: StatsService.update_stats_after_task_state_change( validated_dto.project_id, validated_dto.user_id, prev_status, task_to_unlock['new_state']) task_mapping_issues = ValidatorService.get_task_mapping_issues( task_to_unlock) task.unlock_task(validated_dto.user_id, task_to_unlock['new_state'], task_to_unlock['comment'], issues=task_mapping_issues) dtos.append( task.as_dto_with_instructions(validated_dto.preferred_locale)) task_dtos = TaskDTOs() task_dtos.tasks = dtos return task_dtos
def add_task_comment(task_comment: TaskCommentDTO) -> TaskDTO: """ Adds the comment to the task history """ task = Task.get(task_comment.task_id, task_comment.project_id) if task is None: raise MappingServiceError(f'Task {task_id} not found') task.set_task_history(TaskAction.COMMENT, task_comment.user_id, task_comment.comment) # Parse comment to see if any users have been @'d MessageService.send_message_after_comment(task_comment.user_id, task_comment.comment, task.id, task_comment.project_id) task.update() return task.as_dto_with_instructions(task_comment.preferred_locale)