#!/usr/bin/python # -*- coding: UTF-8 -*- from flask import Blueprint, session, current_app import config from utils.decorator import login_required, admin_required from utils.template import my_render_template from NIST.fingerprint.labels import FINGER_POSITION_CODE, PALM_POSITION_CODE segments_position_code = dict( FINGER_POSITION_CODE, **PALM_POSITION_CODE ) afis_view = Blueprint( "afis", __name__, template_folder = "templates" ) @afis_view.route( "/admin/afis/list" ) @admin_required def admin_list_folders(): return "ok" @afis_view.route( "/afis/list" ) @login_required def list_folders(): user_id = session.get( "user_id", None ) sql = """ SELECT cnm_assignment.folder_uuid, tmp.* FROM cnm_assignment LEFT JOIN cnm_folder ON cnm_assignment.folder_uuid = cnm_folder.folder_uuid LEFT JOIN ( SELECT DISTINCT ON ( donor_id, pc ) * FROM donor_segments_v ) AS tmp ON cnm_folder.donor_id = tmp.donor_id AND cnm_folder.pc = tmp.pc WHERE cnm_assignment.user_id = %s ORDER BY tmp.donor_id ASC, tmp.pc ASC """ folder_list = config.db.query_fetchall( sql, ( user_id, ) ) return my_render_template( "afis/folder_list.html", folder_list = folder_list ) @afis_view.route( "/admin/target/" ) @admin_required def admin_show_target( uuid ): return show_folder_inner( uuid, True ) @afis_view.route( "/afis/" ) @login_required def show_folder( uuid ): return show_folder_inner( uuid, False ) def show_folder_inner( uuid, admin ): sql = """ SELECT cnm_assignment.folder_uuid, donor_segments_v.* FROM cnm_assignment LEFT JOIN cnm_folder ON cnm_assignment.folder_uuid = cnm_folder.folder_uuid LEFT JOIN fingers_same ON cnm_folder.pc = fingers_same.base_finger RIGHT JOIN donor_segments_v ON cnm_folder.donor_id = donor_segments_v.donor_id AND fingers_same.target = donor_segments_v.pc WHERE cnm_assignment.folder_uuid = %s ORDER BY donor_segments_v.donor_id ASC, donor_segments_v.pc ASC """ segments_list = config.db.query_fetchall( sql, ( uuid, ) ) sql = """ SELECT uuid FROM cnm_data WHERE folder_uuid = %s """ annotation_list = config.db.query_fetchall( sql, ( uuid, ) ) if admin: sql = """ SELECT submissions.uuid, cnm_folder.pc, users.username FROM cnm_folder INNER JOIN submissions ON cnm_folder.donor_id = submissions.donor_id INNER JOIN users ON cnm_folder.donor_id = users.id WHERE cnm_folder.folder_uuid = %s """ submission_id, pc, username = config.db.query_fetchone( sql, ( uuid, ) ) finger_name = "{} (F{})".format( segments_position_code[ pc ], pc ) sql = """ SELECT users.id, users.username FROM users LEFT JOIN account_type ON users.type = account_type.id WHERE account_type.name = 'AFIS' """ all_afis_users = config.db.query_fetchall( sql ) sql = """ SELECT cnm_assignment.user_id AS id FROM cnm_assignment LEFT JOIN cnm_assignment_type ON cnm_assignment.assignment_type = cnm_assignment_type.id WHERE cnm_assignment.folder_uuid = %s AND cnm_assignment_type.name = 'reference' """ users_assigned_refs = config.db.query_fetchall( sql, ( uuid, ) ) sql = """ SELECT cnm_assignment.user_id AS id FROM cnm_assignment LEFT JOIN cnm_assignment_type ON cnm_assignment.assignment_type = cnm_assignment_type.id WHERE cnm_assignment.folder_uuid = %s AND cnm_assignment_type.name = 'mark' """ users_assigned_marks = config.db.query_fetchall( sql, ( uuid, ) ) else: submission_id = None finger_name = None username = None all_afis_users = None users_assigned_refs = None users_assigned_marks = None return my_render_template( "shared/segment.html", target_uuid = uuid, segments_list = segments_list, annotation_list = annotation_list, submission_id = submission_id, username = username, finger_name = finger_name, all_afis_users = all_afis_users, users_assigned_refs = users_assigned_refs, users_assigned_marks = users_assigned_marks ) @afis_view.route( "/admin//target/list" ) @admin_required def admin_show_target_list( uuid ): sql = """ SELECT DISTINCT ON ( donor_segments_v.pc ) donor_segments_v.*, cnm_folder.folder_uuid FROM donor_segments_v LEFT JOIN submissions ON submissions.donor_id = donor_segments_v.donor_id LEFT JOIN cnm_folder ON donor_segments_v.donor_id = cnm_folder.donor_id AND donor_segments_v.pc = cnm_folder.pc WHERE submissions.uuid = %s """ segments_list = config.db.query_fetchall( sql, ( uuid, ) ) return my_render_template( "admin/folder_list.html", segments_list = segments_list, segments_position_code = segments_position_code )