def project_progress(obj): sessions_status_data = {str(i.pk): i.status for i in obj.uploadsession_set.all()} completed_sessions = {k: v for k, v in sessions_status_data.items() if v == 'Parsed'} uncompleted_sessions = {k: v for k, v in sessions_status_data.items() if v != 'Parsed'} project_uploaded_documents_count = Document.objects.filter( upload_session__project=obj).count() stats = {'project_current_documents_count': obj.document_set.count(), 'project_uploaded_documents_count': project_uploaded_documents_count, 'project_tasks_progress': obj.project_tasks_progress, 'project_tasks_completed': obj.project_tasks_completed, 'completed_sessions': completed_sessions or None, 'uncompleted_sessions': uncompleted_sessions or None} if obj.type is None: project_clusters_documents_count = obj.projectclustering_set.last() \ .document_clusters.aggregate(c=Count('documents'))['c'] \ if obj.projectclustering_set.exists() else 0 project_unclustered_documents_count = project_uploaded_documents_count - \ project_clusters_documents_count reassigning_ots = {'task_name': 'reassigning', 'old_project_id': obj.pk} stats.update({ 'project_clusters_documents_count': project_clusters_documents_count, 'project_unclustered_documents_count': project_unclustered_documents_count, 'reassigning_progress': Task.special_tasks_progress_groups(reassigning_ots), 'reassigning_completed': Task.special_tasks_completed(reassigning_ots), 'cleanup_completed': Task.special_tasks_completed({'task_name': 'clean-project', '_project_id': obj.pk}), }) return stats
def project_tasks_completed(self): """ Whether project tasks completed or not (None if no project tasks at all) """ return Task.special_tasks_completed({'project_id': str(self.pk)})