def generate_report_xlsx(self, project_id, report_type):
    project = Project.get(Project.id == project_id)
    total_probes = len([p for p in project.project_stacks])
    project_users = AppUser.select().join(ProjectUser).where(ProjectUser.project == project)
    project_info = project.title.split('_')
    report = {}
    total_iteration = 0
    
    for iteration, project_stack in enumerate(project.project_stacks):
        stack = {}
        stack_images = StackImage.select().where(StackImage.stack == project_stack.stack.id)
        for stack_image in stack_images:
            users = {}
            for user in project_users:
                markers = Marker.select().where(
                                    Marker.app_user == user.id,
                                    Marker.stack_image == stack_image.id,
                                    Marker.project_stack == project_stack.id
                                )

                user_markers = [m.serialized for m in markers]
                if user_markers:
                    users[user.email] = user_markers
            stack[stack_image.image.name] = users

        report[project_stack.stack.title] = stack
        self.update_state(state='PROGRESS', meta={
            'current': iteration,
            'total': total_probes,
            'projectId': project_id,
            'reportType': report_type
        })
        total_iteration += 1
    
    return {
        'current': total_iteration,
        'total': total_probes,
        'status': 'Task complete',
        'projectId': project_id,
        'report': report,
        'reportType': report_type
    }
def get_project_report(project_id):
    users = User.select().join(ProjectUser).where(ProjectUser.project == project_id)
    return jsonify({ 'users': [u.serialized for u in users] })