def insert_booking(empid, clock_num, dte):
    #if person not found flag for update and dont save
    ret = sqlconns.sql_select_single_field(
        'SELECT COUNT(*) as FOO from temployee WHERE employee_id = ' +
        str(empid))
    if sqlconns.sql_select_single_field(
            'SELECT COUNT(*) as FOO from temployee WHERE employee_id = ' +
            str(empid)) == "0":
        ret = sqlconns.sql_command(
            'INSERT into d_zpad_events (employee_id) VALUES (?)', empid)
    terminal_id = sqlconns.sql_select_single_field(
        "SELECT TOP 1 terminal_id FROM tterminal WHERE number = " + clock_num)
    if terminal_id == "": terminal_id = "0"
    if terminal_id == -1: return -1
    if terminal_id != "0":
        ret = sqlconns.sql_command(
            "UPDATE tterminal SET poll_success = ? WHERE number = ?",
            datetime.datetime.now(), clock_num)
        if ret == -1: return
    booking = "'" + dte + "'"
    flag = 0
    tx = "INSERT INTO twork_unprocessed (employee_id,terminal_id,date_and_time,[type],flag,[key],memo,authorisation,authorisation_finalised,source)" \
                 " VALUES (" + str(empid) + "," + str(terminal_id) + "," + booking + ",1000," + str(flag) + ",0,'',3,1,0)"
    ret = sqlconns.sql_command(tx)
    if ret == -1: return -1
    tx = tx.replace("twork_unprocessed", "twork_unprocessed_archive")
    ret = sqlconns.sql_command(tx)
    if ret == -1: return -1
    return 0
Beispiel #2
0
def get_command_info():
    global TERMINAL_LIST
    for n in range(len(TERMINAL_LIST)):
        tx = "SELECT COUNT(*) AS FOO FROM d_iface_commands WHERE sent <> 1 AND terminal_id=" + str(
            TERMINAL_LIST[n][0])
        the_sum = sqlconns.sql_select_single_field(tx)
        if the_sum == -1: continue
        TERMINAL_LIST[n][1] = str(the_sum)
        tx = "SELECT COUNT(*) AS FOO FROM d_iface_commands WHERE sent = 1 AND completed_flag <> 1 and terminal_id=" + str(
            TERMINAL_LIST[n][0])
        the_sum = sqlconns.sql_select_single_field(tx)
        if the_sum == -1: continue
        TERMINAL_LIST[n][2] = str(the_sum)
        tx = "SELECT COUNT(*) AS FOO FROM d_iface_commands WHERE completed_flag = 1 AND terminal_id=" + str(
            TERMINAL_LIST[n][0])
        the_sum = sqlconns.sql_select_single_field(tx)
        if the_sum == -1: continue
        TERMINAL_LIST[n][3] = str(the_sum)
        tx = "SELECT poll_success FROM tterminal WHERE terminal_id=" + str(
            TERMINAL_LIST[n][0])
        the_sum = sqlconns.sql_select_into_list(tx)
        if the_sum == -1: continue
        if the_sum[0][0] == None:
            the_sum = "None"
        elif the_sum[0][0] != None:
            the_sum = str.replace(
                f.get_sql_date(the_sum[0][0], "dd/mm/yyyy hh:mm:ss"), "'", "")
        TERMINAL_LIST[n][4] = str(the_sum)
        tx = "SELECT TOP 1 stamp FROM d_iface_stamps WHERE table_name like 'att_stamp' and terminal_id = " + str(
            TERMINAL_LIST[n][0])
        listy = sqlconns.sql_select(tx)
        if listy == -1: continue
        if len(listy) == 0:
            att = 'None'
        elif listy[0][0] == None:
            att = "None"
        else:
            att = str(listy[0][0])
        tx = "SELECT TOP 1 stamp FROM d_iface_stamps WHERE table_name like 'op_stamp' and terminal_id = " + str(
            TERMINAL_LIST[n][0])

        listy = sqlconns.sql_select(tx)

        if listy == -1: continue
        if len(listy) == 0:
            op = 'None'
        elif listy[0][0] == None:
            op = "None"
        else:
            op = str(listy[0][0])
        TERMINAL_LIST[n][5] = att
        TERMINAL_LIST[n][6] = op
Beispiel #3
0
def get_terminal_id(door_id, terminal_id):
    sqltxt = """SELECT TOP 1 number from tterminal WHERE terminal_id = """ + str(
        terminal_id)
    ret = sqlconns.sql_select_single_field(sqltxt)
    if ret == -1:
        return -1
    terminal_num = int(ret) + (int(door_id) - 1)
    sqltxt = """SELECT TOP 1 terminal_id from tterminal WHERE number = """ + str(
        terminal_num)
    ret = sqlconns.sql_select_single_field(sqltxt)
    #preparing for door not existing for whatever reason, do not know why, saw this in testing
    if ret == -1: return 0
    return ret
    def get(self):
        if OLD_TIME == True:
            old_time_status = 'Oldtime option = ON.<br>'
        else:
            old_time_status = 'Oldtime option = OFF.<br>'
        if gl.face_to_personnel == True:
            photo_save_status = 'Save face photo to personnel = ON.<br>'
        else:
            photo_save_status = 'Save face photo to personnel = OFF.<br>'
        terminal_configuration_status = "Attendance terminals = configuration " + str(ATTENDANCE_TERMINAL) + '.<br>'\
                                        "Access terminals = configuration " + str(ACCESS_TERMINAL) + '.<br>'
        data = ("<p>Ifaceserver from " + DISTRIBUTOR + " is broadcasting.</p>" \
                                                + "Iface Server Version = " \
                                               + APP_VERSION + "<br><br>" \
                                                + "SQL Instance: " + str(sqlconns.sql_select_single_field('SELECT @@ServerName')) + "<br>" \
                                                + "HTTP Port: " + str(gl.server_port) + "<br>" \
                                                + "HTTPS Port: " + str(gl.https_port) + "<br><br>" \
                                                + "normaltime = " + str(date_time_string_test('normaltime')) \
                                                + ".<br>****oldtime = " + str(date_time_string_test('oldtime')) + '.<br>' \
                                                + old_time_status + terminal_configuration_status + photo_save_status \
                                                + 'Fingerprint delete old scan set to ' + str(FINGER_DELETION_MINS) +' mins.' + '<br>' \
                                                + 'Using Inbio Communication (ensure inbio tables are setup)= ' + str(INBIO_USED) + '.<br>' \
                                                + 'S680 Function keys = ' + str(FUNCTION_KEYS) + '.<br>' \
                                                + 'S680 Cost Centre Function keys = ' + str(CC_FUNCTION_KEYS)  + '.<br>' \
                                                + """Populating 'Original Bookings' = """ + str(ORIGINAL_BOOKINGS) + '.<br>' \
                                                + 'Iface Function keys = ' + str(IFACE_FUNCTION_KEYS) + '.<br><br>' \
                                                + 'License Year = ' + str(return_version()) + '.<br><br>'\
                                                + 'Min Stamp = ' + str(MIN_STAMP) + '.<br>'\
                                                + 'Max Stamp = ' + str(MAX_STAMP) + '<br><br>')

        self.render('templates/ifaceinformation.html', data=data)
 def get(self):
     print('tested')
     if OLD_TIME == True:
         old_time_status = 'Oldtime option = ON.<br>'
     else:
         old_time_status = 'Oldtime option = OFF.<br>'
     if gl.face_to_personnel == True:
         photo_save_status = 'Save face photo to personnel = ON.<br>'
     else:
         photo_save_status = 'Save face photo to personnel = OFF.<br>'
     terminal_configuration_status = "Attendance terminals = configuration " + str(ATTENDANCE_TERMINAL) + '.<br>'\
                                     "Access terminals = configuration " + str(ACCESS_TERMINAL) + '.<br>'
     data = ("<HTML>Ifaceserver from " + DISTRIBUTOR + " is broadcasting.<br>Iface Server Version = " \
                                            + APP_VERSION + "<br><br>" \
                                             + "SQL Instance: " + str(sqlconns.sql_select_single_field('SELECT @@ServerName')) + "<br><br>" \
                                             + "normaltime = " + str(date_time_string_test('normaltime'))
                                             + ".<br>****oldtime = " + str(date_time_string_test('oldtime')) + '.<br>' \
                                             + old_time_status + terminal_configuration_status + photo_save_status \
                                             + 'Fingerprint delete old scan set to ' + str(FINGER_DELETION_MINS) +' mins.' + '<br>' \
                                             + 'Using Inbio Communication (ensure inbio tables are setup)= ' + str(INBIO_USED) + '.<br><br>' \
                                             + 'S680 Function keys = ' + str(FUNCTION_KEYS) + '.<br>' \
                                             + 'Iface Function keys = ' + str(IFACE_FUNCTION_KEYS) + '.<br><br>' \
                                             + 'License Year = ' + str(return_version()) + '<br><br>'\
                                            + get_terminal_status_list() +'</HTML>')
     self.write(data)
def test_inbio_sql_tables():
    sql = """IF OBJECT_ID (N'd_inbio_events', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res"""
    ret = sqlconns.sql_select_single_field(sql)
    if ret == '0':
        return 0
    elif ret == -1:
        return 0
    else:
        sql = """IF OBJECT_ID (N'd_inbio_misc', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res"""
        ret = sqlconns.sql_select_single_field(sql)
        if ret  == '0':
            return 0
        elif ret == -1:
            return 0
        else:
            return 1
Beispiel #7
0
def bAttFound(sn, emp_id, booking):
    tx = "select TOP 1 [d_iface_att_id] from d_iface_att WHERE sn = '" + sn + "' AND emp_id = " + str(
        emp_id) + " AND date_and_time = " + booking
    ret = sqlconns.sql_select_single_field(tx)

    if ret == "":
        return False
    if int(ret) > 0:
        tx = "If ("\
        "SELECT count(*) from d_iface_att" \
        " where d_iface_att_id = "+str(int(ret))+ " and repoll_count is null) > 0"\
        " UPDATE d_iface_att"\
        " SET repoll_count = 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_att_id ="+ str(int(ret))+ ""\
        " ELSE"\
        " UPDATE d_iface_att"\
        " SET repoll_count = repoll_count + 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_att_id = "+ str(int(ret))
        ret = sqlconns.sql_command(tx)

        return True
    else:
        return False
def build_power_on_get_request(sn):
    terminal_id = get_terminal_id_from_sn(sn)
    if terminal_id=="": return ""
    att_stamp = 1
    op_stamp = 1
    tx = "SELECT table_name,stamp FROM d_iface_stamps WHERE terminal_id = " + str(terminal_id)
    ret = sqlconns.sql_select_into_list(tx)
    if ret!=-1:
        for index in range(len(ret)):
            if ret[index][0]== "att_stamp": att_stamp = ret[index][1]
            if ret[index][0]== "op_stamp": op_stamp = ret[index][1]
    else:
        return ret
    tx =   "SELECT TOP 1 notepad from tterminal WHERE ip_address = '" + sn + "'"
    notepad_options = str.lower(sqlconns.sql_select_single_field(tx))
#tidy up on stamps based on latest push firmware, refer to older backups if you need to revert this.
    trans_flag_string = "1"
    if 'uface' in notepad_options:
        trans_flag_string = 'TransData AttLog\tOpLog\tAttPhoto\tEnrollUser\tChgUser\tEnrollFP\tChgFP\tFACE\tUserPic'
    xx = "GET OPTION FROM:" + sn + \
            "\r\nStamp=" + str(att_stamp) +\
            "\r\nOpStamp=" + str(op_stamp) + \
            "\r\nPhotoStamp=" + str(op_stamp) + \
            "\r\nErrorDelay=3" +\
            "\r\nDelay=5" + \
            "\r\nTransTimes=" + "00:00;14:05" + \
            "\r\nTransInterval=" + "1" + \
            "\r\nTransFlag=" + trans_flag_string + \
            "\r\nRealtime=1" + \
            "\r\nTimeZone=1" + \
            "\r\nATTLOGStamp=" + str(att_stamp) + \
            "\r\nOPERLOGStamp=" + str(op_stamp) + \
            "\r\nATTPHOTOStamp=" + str(op_stamp) + \
            "\r\n"
    return xx
def version_check():
    if os.path.isfile(gl.LICENSE_TXT):
        fob = open(gl.LICENSE_TXT, "r")
        listme = fob.readlines()
        fob.close()
        try:
            version_year = sqlconns.decrypt_with_key(listme[0])
            ret = sqlconns.sql_select_single_field(
                "SELECT TOP 1 [data] FROM tversion WHERE [property] like 'database version'"
            )
            if ret == -1: return False
            database_version = str.split(ret, '.')
            if int(version_year) >= int('20' + database_version[0]):
                return True
            else:
                f.error_logging(APPNAME,
                                "Version is out of date....cannot start.",
                                "error_log", "")
                return False
        except Exception as e:
            return False
    else:
        f.error_logging(APPNAME, "Error reading license.txt file.",
                        "error_log", "")
        return False
def get_commands_list(sn):
    terminal_id = sqlconns.sql_select_single_field("SELECT TOP 1 terminal_id FROM tterminal WHERE ip_address = '" + sn+"'")
    if terminal_id == "": return -1
    if int(terminal_id) > 0:
        data_list = sqlconns.sql_select_into_list("SELECT top 50 iface_command_id,command FROM d_iface_commands where sent <> 1 and terminal_id ="+terminal_id+"ORDER BY iface_command_id")
        if data_list==-1: return -1
        return data_list
    else:
        return -1
Beispiel #11
0
def check_spool_transactions():
    global SPOOL_TRANSACTIONS
    ret = sqlconns.sql_select_single_field(
        "SELECT TOP 1 value FROM d_inbio_misc WHERE property like 'SPOOL_TRANSACTIONS'"
    )
    if ret == "1":
        SPOOL_TRANSACTIONS = 1
    else:
        SPOOL_TRANSACTIONS = 0
Beispiel #12
0
 def get(self):
     list = self.request.uri.split("?SN=")
     list2 = list[1].split("&")
     sn = list2[0]
     uface = False  #TODO this line is legacy. can it be removed
     tx = "SELECT TOP 1 notepad from tterminal WHERE ip_address = '" + sn + "'"
     notepad_options = str.lower(sqlconns.sql_select_single_field(tx))
     if "uface" in str.lower(notepad_options):
         uface = True  #TODO this line is legacy, can it be removed
     data_list = get_commands_list(sn)
     if data_list == -1:
         return
     ret = sqlconns.sql_command(
         "UPDATE tterminal SET poll_success = ? WHERE ip_address = ?",
         datetime.now(), sn)
     if ret == -1: return
     counter = 0
     reboot = 0
     clear_data = 0
     data = ""
     #used to do this for uface terminals now do for all
     if len(data_list) == 0:
         ok = "OK"
         self.write(ok)
     for index in range(len(data_list)):
         if data_list[index][1] == "REBOOT":
             reboot = 1
         elif data_list[index][1] == "CLEAR DATA":
             clear_data = 1
         else:
             counter += 1
             if sys.getsizeof(data +
                              ("C:ID" + str(data_list[index][0]) + ":" +
                               data_list[index][1] + "\r\n")) > 39000:
                 break
             data = data + "C:ID" + str(
                 data_list[index][0]) + ":" + data_list[index][1] + "\r\n"
         ret = update_commands_to_sent_status(data_list[index][0])
         if ret == -1: return
     if data != "":
         self.write(data)
         dte = date_time_string(sn)
         bDateHeader = False  # are we sending the date header?
         if dte != None: bDateHeader = True
         self.device_headers(dte, bDateHeader)
         return
     if clear_data == 1:
         self.write("C:ID" + str(data_list[index][0]) + ":CLEAR DATA\r\n")
         self.write(data)
     if reboot == 1:
         self.write("C:ID" + str(data_list[index][0]) + ":REBOOT\r\n")
     dte = date_time_string(sn)
     bDateHeader = False  # are we sending the date header?
     if dte != None: bDateHeader = True
     self.device_headers(dte, bDateHeader)
def date_time_string_old(serial_number):
    dte = datetime.now()
    if OLD_TIME == True:
        tx = sqlconns.sql_select_single_field("SELECT TOP 1 notepad from tterminal WHERE ip_address = '" + serial_number + "'")
        if 'oldtime' in str(tx):
            dte = dte - timedelta(hours = 1)
    now = time.mktime(dte.timetuple())
    year, month, day, hh, mm, ss, wd, y, z = time.localtime(now)
    s = "%s,%02d %3s %4d %02d:%02d:%02d GMT" % (
        dte.strftime('%a'),
        day, dte.strftime('%b'), year,hh, mm, ss)
    return s
def date_time_string(serial_number):
    notepad_options = sqlconns.sql_select_single_field(
            "SELECT TOP 1 notepad from tterminal WHERE ip_address = '" + serial_number + "'")
    if 'notime' in str.lower(notepad_options): return None
    dte = datetime.now()
    if OLD_TIME == True:
        if 'oldtime' in str.lower(notepad_options):
            dte = dte - timedelta(hours = 1)
    #'timezone mod, use timezone=1 in the notepad option for Denmark'
    dte = timezone_difference(dte,str(notepad_options))
    now = time.mktime(dte.timetuple())
    year, month, day, hh, mm, ss, wd, y, z = time.localtime(now)
    s = "%s,%02d %3s %4d %02d:%02d:%02d GMT" % (
        dte.strftime('%a'),
        day, dte.strftime('%b'), year,hh, mm, ss)
    return s
def date_time_string_power(serial_number):
#probably not used anymore since not setting time and date in power on get request
    dte = datetime.now()
    if OLD_TIME == True:
        tx = sqlconns.sql_select_single_field("SELECT TOP 1 notepad from tterminal WHERE ip_address = '" + serial_number + "'")
        if 'oldtime' in str(tx):
            dte = dte - timedelta(hours = 1)

    #'are we using timezones'
    if 'timezone' in str(tx): dte = timezone_difference (dte,tx)

    now = time.mktime(dte.timetuple())
    year, month, day, hh, mm, ss, wd, y, z = time.localtime(now)
    s = "%s,%02d %3s %4d %02d:%02d:%02d GMT" % (
        dte.strftime('%a'),
        day, dte.strftime('%b'), year,hh, mm, ss)
    return s
 def date_time_string(self):
     now = time.time()
     year, month, day, hh, mm, ss, wd, y, z = time.localtime(now)
     #there was a space between first , and %02d
     s = "%s,%02d %3s %4d %02d:%02d:%02d GMT" % (
         self.weekdayname[wd], day, self.monthname[month], year, hh, mm, ss)
     if self.serial_number == '': return s
     #bug out if oldtime is false
     if OLD_TIME == False: return s
     tx = sqlconns.sql_select_single_field(
         "SELECT TOP 1 notepad from tterminal WHERE ip_address = '" +
         self.serial_number + "'")
     if 'oldtime' in str(tx):
         dte = datetime.now()
         dte = dte - timedelta(hours=1)
         now = time.mktime(dte.timetuple())
         year, month, day, hh, mm, ss, wd, y, z = time.localtime(now)
         s = "%s,%02d %3s %4d %02d:%02d:%02d GMT" % (
             self.weekdayname[wd], day, self.monthname[month], year, hh, mm,
             ss)
     return s
def bAttEventFound (terminal_id,emp_id,booking):
    tx = "select TOP 1 [d_iface_att_id] from d_iface_att WHERE terminal_id = "+ str(terminal_id) + " AND emp_id = "+ str(emp_id)+ " AND date_and_time = "+ booking
    ret = sqlconns.sql_select_single_field(tx)
    if ret == "": return False
    if int(ret) > 0:
        tx = "If ("
        "SELECT count(*) from d_iface_att_event"
        " where d_iface_events_id = "+str(int(ret))+ " and repoll_count is null) > 0"
        " UPDATE d_iface_att_event"
        " SET repoll_count = 1,"
        " repoll_date = getdate()"
        " WHERE d_iface_events_id ="+ str(int(ret))+ ""
        " ELSE"
        " UPDATE d_iface_att_event"
        " SET repoll_count = repoll_count + 1,"
        " repoll_date = getdate()"
        " WHERE d_iface_events_id = "+ str(int(ret))
        ret = sqlconns.sql_command(tx)
        return True
    else:
        return False
Beispiel #18
0
def save_user_finger(xx, terminal_id):
    list = xx.split("\t")
    user_id = list[0].replace("FP PIN=", "")
    if user_id == "": return 0
    fid = list[1].replace("FID=", "")
    size = list[2].replace("Size=", "")
    valid = list[3].replace("Valid=", "")
    tmp = list[4].replace("TMP=", "")
    #check if exists
    tx = "Select top 1 [d_iface_finger_id] from d_iface_finger WHERE employee_id =" + user_id + " AND fid=" + fid + " AND tmp = '" + tmp + "'"
    ret = sqlconns.sql_select_single_field(tx)
    if ret != "" and int(ret) > 0:
        tx = "If ("\
        "SELECT count(*) from d_iface_finger"\
        " where d_iface_finger_id = "+str(int(ret))+ " and repoll_count is null) > 0"\
        " UPDATE d_iface_finger"\
        " SET repoll_count = 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_finger_id ="+ str(int(ret))+ ""\
        " ELSE"\
        " UPDATE d_iface_finger"\
        " SET repoll_count = repoll_count + 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_finger_id = "+ str(int(ret))
        ret = sqlconns.sql_command(tx)
        return 1
    #clear old templates
    tx = "DELETE from d_iface_finger WHERE employee_id = " + str(
        user_id) + " AND date_added < dateadd(minute,-" + str(
            FINGER_DELETION_MINS) + ",getdate())"
    sqlconns.sql_command(tx)
    date_now = f.get_sql_date(datetime.now(), "yyyy-mm-dd hh:mm:ss")
    tx = "UPDATE d_iface_finger SET size = '" + size + "',[valid]="+valid+", [tmp]='" + tmp + "',date_added="+date_now+",terminal_id="+str(terminal_id)+" WHERE employee_id =" + user_id + " AND fid="+fid+"" \
                " IF @@ROWCOUNT=0" \
                " INSERT INTO d_iface_finger(employee_id,size,tmp,date_added,[valid],fid,terminal_id) VALUES ('"+user_id+"','"+size+"','"+tmp+"',"+date_now+","+valid+","+fid+","+str(terminal_id)+")"
    ret = sqlconns.sql_command(tx)
    if ret == -1: return ret
    ret = update_tevent_update(user_id)
    return ret
def save_user_face(xx,terminal_id):
    list = xx.split("\t")
    user_id = list[0].replace("FACE PIN=","")
    if user_id=="":return 0
    fid = list[1].replace("FID=","")
    size = list[2].replace("SIZE=","")
    valid = list[3].replace("VALID=","")
    tmp = list[4].replace("TMP=","")
    date_now = f.get_sql_date(datetime.now(),"yyyy-mm-dd hh:mm:ss")
    #check if already there
    tx = "SELECT TOP 1 d_iface_face_id from d_iface_tmp WHERE employee_id ="+ user_id+ " AND fid="+fid+" AND [tmp] ='"+ tmp+ "'"
    ret = sqlconns.sql_select_single_field(tx)
    if ret!= "" and int(ret) > 0:
        tx = "If ("\
        "SELECT count(*) from d_iface_tmp"\
        " where d_iface_face_id = " + str(int(ret)) + " and repoll_count is null) > 0"\
        " UPDATE d_iface_tmp"\
        " SET repoll_count = 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_face_id =" + str(int(ret)) + ""\
        " ELSE"\
        " UPDATE d_iface_tmp"\
        " SET repoll_count = repoll_count + 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_Face_id = " + str(int(ret))
        ret = sqlconns.sql_command(tx)

        return 1
    tx = "UPDATE d_iface_tmp SET size = '" + size + "',[valid]="+valid+", [tmp]='" + tmp + "',date_added="+date_now+",terminal_id="+str(terminal_id)+" WHERE employee_id =" + user_id + " AND fid="+fid+"" \
                " IF @@ROWCOUNT=0" \
                " INSERT INTO d_iface_tmp(employee_id,size,tmp,date_added,[valid],fid,terminal_id) VALUES ('"+user_id+"','"+size+"','"+tmp+"',"+date_now+","+valid+","+fid+","+str(terminal_id)+")"
    ret = sqlconns.sql_command(tx)
    if ret==-1: return ret
    #if fid = 11 then check recently got 12 from this terminal that are new and put entry into tevent_update AND clear new flag
    if fid=="11":
        ret = update_tevent_update(user_id)
    return ret
def save_user_photo(xx,terminal_id):
    list = xx.split("\t")
    user_id = list[0].replace("USERPIC PIN=","")
    file_name = list[1].replace("FileName=","")
    size = list[2].replace("Size=","")
    content = list[3].replace("Content=","")
    date_now = f.get_sql_date(datetime.now(),"yyyy-mm-dd hh:mm:ss")
    #check exixts and dont write
    tx = "Select top 1 [d_iface_photo_id] from d_iface_photo WHERE employee_id =" + user_id + " AND content = '"+ content + "'"
    ret = sqlconns.sql_select_single_field(tx)
    if ret != "" and int(ret) > 0:
        tx = "If ("\
        "SELECT count(*) from d_iface_photo"\
        " where d_iface_photo_id = "+str(int(ret))+ " and repoll_count is null) > 0"\
        " UPDATE d_iface_photo"\
        " SET repoll_count = 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_photo_id ="+ str(int(ret))+ ""\
        " ELSE"\
        " UPDATE d_iface_photo"\
        " SET repoll_count = repoll_count + 1,"\
        " repoll_date = getdate()"\
        " WHERE d_iface_photo_id = "+ str(int(ret))
        ret = sqlconns.sql_command(tx)
        return 1
    #photo does not exist, carry on
    tx = "UPDATE d_iface_photo SET size = '" + size + "', content='" + content + "',date_added="+date_now+",terminal_id="+str(terminal_id)+",new=1 WHERE employee_id =" + user_id + "" \
                    " IF @@ROWCOUNT=0" \
                    " INSERT INTO d_iface_photo(employee_id,file_name,size,content,date_added,terminal_id,new) VALUES ('"+user_id+"','"+file_name+"','"+size+"','"+content+"',"+date_now+","+str(terminal_id)+",1)"
    ret = sqlconns.sql_command(tx)
    if ret==0:
        if gl.face_to_personnel==True:
            content = base64.b64decode(content)
            tx = "UPDATE temployee SET photo = ? WHERE employee_id = ?"
            ret = sqlconns.sql_command_args(tx,content,user_id)
    return ret
 def update_inbio(self,event):
     ret = wx.MessageDialog(None,'Do you wish to update all terminal tables in Inbio ' + self.terminal_ip + '?', 'User Option', wx.YES_NO)
     ret1 = ret.ShowModal()
     if ret1 == wx.ID_NO:
         ret.Destroy()
         return -1
 #keep track of how many items to send for the progress bar later
     progressMax = 0
     sql_text = "Select * From taccess_pattern"
     access_patterns = sqlconns.sql_select_into_list(sql_text)
     access_list = build_access_string(access_patterns)
     personnel_list, personnel_auth_list,finger_template_list = build_personnel_list(self.terminal_ip)
     progressMax +=len(personnel_list) + len(access_list) + len(personnel_auth_list) +len(finger_template_list)
     if len(personnel_list) == 0:
         wx.MessageBox('No data to send, please check personnel.','User Alert')
         return
     progressMax+=1
     constr = create_string_buffer(str.encode('protocol=TCP,ipaddress='+ self.terminal_ip + ',port=4370,timeout=' + str(gl.COMM_TIMEOUT) +',passwd='))
     commpro = windll.LoadLibrary("plcommpro.dll")
     hcommpro = commpro.Connect(constr)
     if hcommpro == 0:
         wx.MessageBox('No communications, please check connections.','User Alert')
         return
 #relay times
     term_list = get_doors_from_ip(self.terminal_ip)
     for index in range(len(term_list)):
         tx = 'select top 1 relay_trip_seconds from tterminal where terminal_id = ' +  str(term_list[index][0])
         relay_time= sqlconns.sql_select_single_field(tx)
         if relay_time == - 1:
             wx.MessageBox('Error during communications (relay list)...' + '(' + str(relay_time) + ')','User Alert')
             commpro.Disconnect(hcommpro)
             return
         if term_list[index][1]%100 == 1:
             door_relay = 'Door1Drivertime=' + str(relay_time)
             p_items = create_string_buffer(str.encode(door_relay))
             ret = commpro.SetDeviceParam(hcommpro, p_items)
             if ret < 0:
                 wx.MessageBox('Error during communications (door relay)...' + '(' + str(ret) + ')','User Alert')
                 commpro.Disconnect(hcommpro)
                 return
         if term_list[index][1]%100 == 2:
             door_relay = 'Door2Drivertime=' + str(relay_time)
             p_items = create_string_buffer(str.encode(door_relay))
             ret = commpro.SetDeviceParam(hcommpro, p_items)
             if ret < 0:
                 wx.MessageBox('Error during communications (door relay)...' + '(' + str(ret) + ')','User Alert')
                 commpro.Disconnect(hcommpro)
                 return
         if term_list[index][1]%100 == 3:
             door_relay = 'Door3Drivertime=' + str(relay_time)
             p_items = create_string_buffer(str.encode(door_relay))
             ret = commpro.SetDeviceParam(hcommpro, p_items)
             if ret < 0:
                 wx.MessageBox('Error during communications (door relay)...' + '(' + str(ret) + ')','User Alert')
                 commpro.Disconnect(hcommpro)
                 return
         if term_list[index][1]%100 == 4:
             door_relay = 'Door4Drivertime=' + str(relay_time)
             p_items = create_string_buffer(str.encode(door_relay))
             ret = commpro.SetDeviceParam(hcommpro, p_items)
             if ret < 0:
                 wx.MessageBox('Error during communications (door relay)...' + '(' + str(ret) + ')','User Alert')
                 commpro.Disconnect(hcommpro)
                 return
     p_data = create_string_buffer(str.encode(""))
     p_table = create_string_buffer(str.encode("userauthorize"))
     ret = commpro.DeleteDeviceData(hcommpro,p_table,p_data,"")
     p_table = create_string_buffer(str.encode("user"))
     ret = commpro.DeleteDeviceData(hcommpro,p_table,p_data,"")
     p_table = create_string_buffer(str.encode("timezone"))
     dialog = wx.ProgressDialog("Progress Information", ("Sending Settings to Inbio  = " + self.terminal_ip+"."), progressMax)
     counter = 0
     for index in range(len(access_list)):
         ret = commpro.SetDeviceData(hcommpro,p_table,create_string_buffer(str.encode(access_list[index])),"")
         if ret < 0:
             wx.MessageBox('Error during communications...' + '(' + str(ret) + ')','User Alert')
             commpro.Disconnect(hcommpro)
             return
         counter +=1
         dialog.Update(counter)
     p_table = create_string_buffer(str.encode("user"))
     for index in range(len(personnel_list)):
         ret = commpro.SetDeviceData(hcommpro,p_table,create_string_buffer(str.encode(personnel_list[index])),"")
         if ret < 0:
             dialog.Destroy()
             wx.MessageBox('Error during communications...' + '(' + str(ret) + ')','User Alert')
             commpro.Disconnect(hcommpro)
             return
         counter +=1
         dialog.Update(counter)
     p_table = create_string_buffer(str.encode("userauthorize"))
     for index in range(len(personnel_auth_list)):
         ret = commpro.SetDeviceData(hcommpro,p_table,create_string_buffer(str.encode(personnel_auth_list[index])),"")
         if ret < 0:
             dialog.Destroy()
             wx.MessageBox('Error during communications...' + '(' + str(ret) + ')','User Alert')
             commpro.Disconnect(hcommpro)
             return
         counter +=1
         dialog.Update(counter)
     #finger part
     p_table = create_string_buffer(str.encode("templatev10"))
     for index in range(len(finger_template_list)):
         ret = commpro.SetDeviceData(hcommpro,p_table,create_string_buffer(str.encode(finger_template_list[index])),"")
         if ret < 0:
             dialog.Destroy()
             wx.MessageBox('Error during communications...' + '(' + str(ret) + ')','User Alert')
             commpro.Disconnect(hcommpro)
             return
         counter +=1
         dialog.Update(counter)
     #time, do other params here if you need, make sure set as two way up above if need be
     ret = commpro.SetDeviceParam(hcommpro,create_string_buffer(str.encode("DateTime="+str(convert_now_to_int()))))
     if ret < 0:
         dialog.Destroy()
         wx.MessageBox('Error during communications...' + '(' + str(ret) + ')','User Alert')
         commpro.Disconnect(hcommpro)
         return
     counter +=1
     dialog.Update(counter)
     wx.MessageBox('Send all Settings to Inbio ' + self.terminal_ip + ' was successful.','User Alert')
     return
def get_terminal_id_from_sn(sn):
    tx = "SELECT TOP 1 terminal_id from tterminal WHERE ip_address = '" + sn+"'"
    ret = sqlconns.sql_select_single_field(tx)
    if ret==-1: return ""
    return ret