Newer
Older
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from flask import Blueprint, session, current_app
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():

Marco De Donno
committed
@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/<uuid>" )
@admin_required
def admin_show_target( uuid ):
return show_folder_inner( uuid, True )
@afis_view.route( "/afis/<uuid>" )
@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
left join cnm_data_type ON cnm_data.type_id = cnm_data_type.id
WHERE
folder_uuid = %s AND
cnm_data_type.name = 'annotation'
"""
annotation_list = config.db.query_fetchall( sql, ( uuid, ) )

Marco De Donno
committed
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 )
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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, ) )

Marco De Donno
committed
else:
submission_id = None
finger_name = None
username = None
all_afis_users = None
users_assigned_refs = []
users_assigned_marks = []
"shared/segment.html",
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/<uuid>/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