def fn_insert_aa(id, fullname, aa, addr1, addr2, addr3, cty, st, zp, ctry, beg_date, phone, EARL): # print("AA = " + aa + " ID = " + str(id)) + ", Name = " + fullname try: engine = get_engine(EARL) # print(beg_date) q_insert_aa = ''' INSERT INTO aa_rec(id, aa, beg_date, peren, end_date, line1, line2, line3, city, st, zip, ctry, phone, phone_ext, ofc_add_by, cell_carrier, opt_out) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''' q_ins_aa_args = (id, aa, beg_date, "N", "", addr1, addr2, addr3, cty, st, zp, ctry, phone, "", "HR", "", "") engine.execute(q_insert_aa, q_ins_aa_args) scr.write(q_insert_aa + '\n' + str(q_ins_aa_args)) fn_write_log("Added " + addr1 + " to aa_rec for " + fullname + ", ID = " + str(id)) # logger.info("Added archive address for " + fullname); # print(q_insert_aa) # print(q_ins_aa_args) # print("insert aa completed") except Exception as e: # print("Error in aarec.py, fn_insert_aa. for ID " + str(id) + ", Name " # + fullname + " Error = " + e.message) fn_write_error("Error in aarec.py, fn_insert_aa. for ID " + str(id) + ", Name " + fullname + " Error = " + e.message)
def fn_update_aa(id, aa, aanum, fllname, add1, add2, add3, cty, st, zip, ctry, begdate, EARL): engine = get_engine(EARL) q_update_aa = ''' UPDATE aa_rec SET line1 = ?, line2 = ?, line3 = ?, city = ?, st = ?, zip = ?, ctry = ? phone = ? WHERE aa_no = ?''' q_upd_aa_args = (add1, add2, add3, cty, st, zip, ctry, fn_format_phone(phone), aanum) # logger.info("Updated address info in aa_rec table for " + fullname); fn_write_log("Updated " + add1 + " to aa_rec for " + fullname + ", ID = " + str(id)) scr.write(q_update_aa + '\n' + str(q_upd_aa_args) + '\n') engine.execute(q_update_aa, q_upd_aa_args) #print(q_update_aa) #print(q_upd_aa_args) print("update aa completed")
def fn_end_date_aa(id, aa_num, fullname, enddate, aa, EARL): engine = get_engine(EARL) try: q_enddate_aa = ''' UPDATE aa_rec SET end_date = ?, aa = ? WHERE id = ? AND aa_no = ?''' q_enddate_aa_args = (enddate, aa, id, aa_num) engine.execute(q_enddate_aa, q_enddate_aa_args) # print("Log end date aa for " + fullname) fn_write_log("Added end date to address to aa_rec for " + fullname + ", ID = " + str(id) + " aa_num = " + str(aa)) # logger.info("Log end date aa_rec for " + fullname); scr.write(q_enddate_aa + '\n' + str(q_enddate_aa_args) + '\n') # print(q_enddate_aa) # print(q_enddate_aa_args) # print("end Date aa completed") return (1) except Exception as e: fn_write_error("Exception in aarec.py fn_end_date_aa, error = " + e.message) return (0)
def fn_process_second_job(carthid, workercatcode, pcnaggr, jobtitledescr, positionstart, poseffectend, jobfunctioncode, supervisorid, rank, fullname, EARL): engine = get_engine(EARL) print("In Second Job") print(pcnaggr) try: ############################################################## # Differs from regular job rec routine # Most of the information has already been validated since this # job is in the same record row as the primary # Same supervisor as primary job # Sane homedept code for the EMPLOYEE # Same business unit code for the EMPLOYEE # Same room and building, but probably can ignore since not primary position # Same worker category code and description, no validation needed # Payroll company code COULD be different, but shouldn't be # Job Function Code should be the same # Split PCN_Aggr (Home Cost Number) into separate components # first I should determine if this is an insert or update - see if # pcn_aggr is in the pos_table # see if pcn code returns a position number # validate function code in the func_table (Position 2) # Place dept number in func_area field in position table # Must validate Division, Dept # NOT assuming custom field is correct, will notify if no matches # use PCN Codes to tie employee to job number ############################################################## ############################################################### # disassmble pcn code into parts JobType, Div, Dept, Job code ############################################################### print(pcnaggr) len = pcnaggr.__len__() pos1 = pcnaggr.find('-', 0) paycode = pcnaggr[:pos1] pos2 = pcnaggr.find('-', pos1 + 1, len) div = pcnaggr[pos1 + 1:pos2] pos3 = pcnaggr.find('-', pos2 + 1, len) dept = pcnaggr[pos2 + 1:pos3] jobnum = pcnaggr[pos3 + 1:len] spvrID = supervisorid[3:10] ############################################################### # Use PCN Agg to find TPos FROM position rec ############################################################### v_tpos = fn_validate_field(pcnaggr, "pcn_aggr", "tpos_no", "pos_table", "char", EARL) # if v_tpos == 0 or v_tpos == "" or len(str(v_tpos)) == 0: if v_tpos == "": # if v_tpos == None or len(str(v_tpos)) == 0: print("Position not valid") raise ValueError() else: print("Validated t_pos = " + str(v_tpos)) ############################################################## # validate hrpay, values in this table should not change without # a project request as they affect a number of things ############################################################## hrpay_rslt = fn_validate_field(paycode, "hrpay", "hrpay", "hrpay_table", "char", EARL) if hrpay_rslt != '': print('Validated HRPay Code = ' + str(hrpay_rslt) + '\n') else: print('Invalid Payroll Company Code ' + str(paycode) + '\n') fn_write_log( 'Data Error in secondjob.py - Invalid Payroll Company \ Code for secondary job ' + str(paycode) + '\n') func_code = fn_validate_field(dept, "func", "func", "func_table", "char", EARL) if func_code != '': print('Validated second job func_code = ' + dept + '\n') else: print('Invalid Function Code ' + dept + '\n') fn_write_log('Data Error in second job.py - Invalid Function \ Code = ' + dept + '\n') ############################################################## # Need some additional info from existing cx records # ADP does not have field for second job title ############################################################## q_get_title = ''' SELECT distinct job_rec.job_title FROM job_rec Where tpos_no = {0}'''.format(v_tpos) #print(q_get_title) sql_title = do_sql(q_get_title, key=DEBUG, earl=EARL) titlerow = sql_title.fetchone() if titlerow is None: print("Job Title Not found for tpos " + v_tpos) jr_jobtitle = "" fn_write_log('Job Title Not found for secondary job for tpos ' + str(v_tpos) + '\n') else: jr_jobtitle = titlerow[0] print("Job Title = " + jr_jobtitle) ############################################################## # validate the position, division, department ############################################################## # print("....Deal with division...") hrdivision = fn_validate_field(div, "hrdiv", "hrdiv", "hrdiv_table", "char", EARL) if hrdivision == None or hrdivision == "": print("HR Div not valid - " + div) # print("....Deal with department...") hrdepartment = fn_validate_field(dept, "hrdept", "hrdept", "hrdept_table", "char", EARL) #print(hrdepartment) if hrdepartment == None or hrdepartment == "": print("HR Dept not valid - " + dept) fn_write_log('Data Error in second job.py - HR Dept not valid ' + dept + '\n') # ############################################################## # If job rec exists for employee in job_rec -update, else insert # ############################################################## q_check_exst_job = ''' select job_rec.tpos_no, pos_table.pcn_aggr, job_no from job_rec, pos_table where job_rec.tpos_no = pos_table.tpos_no and job_rec.title_rank = {0} and job_rec.id = {1} and (job_rec.end_date is null or job_rec.end_date > TODAY) '''.format(rank, carthid) # print(q_check_exst_job) sql_exst_job = do_sql(q_check_exst_job, key=DEBUG, earl=EARL) exst_row = sql_exst_job.fetchone() if exst_row is None: print("No Existing secondary jobs") else: if exst_row[1] != pcnaggr: print("Search job = " + pcnaggr) print("Existing job = " + exst_row[1]) q_end_job = '''update job_rec set end_date = ? where id = ? and job_no = ? ''' q_end_job_args = (datetime.now().strftime("%m/%d/%Y"), carthid, exst_row[2]) print(q_end_job) print(q_end_job_args) engine.execute(q_end_job, q_end_job_args) q_get_job = ''' SELECT job_no FROM job_rec WHERE tpos_no = {0} AND id = {1} AND (end_date IS null or end_date > TODAY) '''.format(v_tpos, carthid, positionstart) # print(q_get_job) sql_job = do_sql(q_get_job, key=DEBUG, earl=EARL) jobrow = sql_job.fetchone() if jobrow is None: print("Job Number not found in job rec") # if no record, no duplicate # insert q_ins_job = ''' INSERT INTO job_rec (tpos_no, descr, bjob_no, id, hrpay, supervisor_no, hrstat, egp_type, hrdiv, hrdept, comp_beg_date, comp_end_date, beg_date, end_date, active_ctrct, ctrct_stat, excl_srvc_hrs, excl_web_time, job_title, title_rank, worker_ctgry) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''' q_ins_job_args = (v_tpos, jr_jobtitle, 0, carthid, paycode, 0, jobfunctioncode, 'R', div, func_code, None, None, datetime.now().strftime("%m/%d/%Y"), None if poseffectend == '' else poseffectend, 'N', 'N/A', 'N', 'N', jobtitledescr, rank, workercatcode) # print(q_ins_job + str(q_ins_job_args)) print("New Second Job Record for " + fullname + ', id = ' + str(carthid)) fn_write_log('New secondary Job Record for ' + fullname + ', id = ' + str(carthid) + '\n') engine.execute(q_ins_job, q_ins_job_args) scr.write(q_ins_job + '\n' + str(q_ins_job_args) + '\n') else: # jobrow = sql_job.fetchone() #print('valid job found = ' + str(jobrow[0])) #print('v_tpos = ' + str(v_tpos) ) q_upd_job = ''' UPDATE job_rec SET descr = ?, id = ?, hrpay = ?, supervisor_no = ?, hrstat = ?, hrdiv = ?, hrdept = ?, beg_date = ?, end_date = ?, job_title = ?, title_rank = ?, worker_ctgry = ? WHERE job_no = ?''' q_upd_job_args = (jr_jobtitle, carthid, paycode, 0, jobfunctioncode, div, func_code, datetime.now().strftime("%m/%d/%Y"), None if poseffectend == '' else poseffectend, jobtitledescr, rank, workercatcode, jobrow[0]) # print(q_upd_job) #print(q_upd_job_args) engine.execute(q_upd_job, q_upd_job_args) scr.write(q_upd_job + '\n' + str(q_upd_job_args) + '\n') print("Update Second Job Record for " + fullname + ', id = ' + str(carthid)) fn_write_log('Update Job Record for ' + fullname + ', id = ' + str(carthid) + '\n') return 1 ############################################################## # Faculty Qualifications - This will go into facqual_rec... # and qual_table - No longer part of Job Title # Probably not in scope as these titles do not affect pay ############################################################## except ValueError: print("Position not valid for PCN_AGGR " + pcnaggr) SUBJECT = '[APD To CX Application] Data Error' BODY = "The Home Cost Number Code is not valid for secondary job. " \ "Code = " + pcnaggr # sendmail( # settings.ADP_TO_EMAIL, settings.ADP_FROM_EMAIL, # BODY, SUBJECT # ) fn_write_log("The Home Cost Number Code is not valid for secondary " "job. Code = " + pcnaggr) except Exception as e: print("Error in second job for " + fullname + " ID = " + carthid + " Error = " + e.message) fn_write_error("Error in second job for " + fullname + " ID = " + carthid + " Error = " + e.message) return 0
def fn_process_idrec(carth_id, file_number, fullname, lastname, firstname, middlename, title, addr_line1, addr_line2, addr_line3, city, st, zip, ctry, ctry_cod, ss_no, phone, decsd, eff_date, EARL): print("Start ID Rec Processing") engine = get_engine(EARL) v_id = fn_validate_field(carth_id, "id", "id", "id_rec", "integer", EARL) if v_id == 0: fn_write_log("ID not found in CX database. ID = " + carth_id + " Name = " + fullname) BODY = "ID not found in CX database for ID " + carth_id \ + " Name, " + fullname SUBJECT = "CX ID not found" # sendmail( # settings.ADP_TO_EMAIL, settings.ADP_FROM_EMAIL, # BODY, SUBJECT) else: try: q_update_id_rec = ( '''UPDATE id_rec SET fullname = ?, lastname = ?, firstname = ?, middlename = ?, ss_no = ?, decsd = 'N', upd_date = ?, ofc_add_by = 'HR' WHERE id = ?''') q_update_id_args = (fullname, lastname, firstname, middlename, ss_no, eff_date, carth_id) # print(q_update_id_rec) # print(q_update_id_args) fn_write_log("Update basic info in id_rec table for " + fullname + ", ID = " + str(carth_id)) scr.write(q_update_id_rec + '\n' + str(q_update_id_args) + '\n') # logger.info("Update id_rec table"); engine.execute(q_update_id_rec, q_update_id_args) except Exception as err: # print(err.message) return (err.message) fn_write_error( "Error in id_rec.py updating basic info. Error = " + err.message) # logger.error(err, exc_info=True) ######################################################### # Title is a problem - most blank in ADP # To avoid overwriting, will need to validate and do # a separate update of the record try: if title is not None: x = title.replace(".", "") vTitle = fn_validate_field(x.upper(), 'title', 'title', 'title_table', 'char', EARL) # print("Title = " + str(vTitle)) if vTitle is not None and vTitle != "": q_update_title = ('''UPDATE id_rec SET title = ? WHERE id = ?''') q_update_title_args = (vTitle, carth_id) fn_write_log("Update Title info in id_rec table for " + fullname + ", ID = " + str(carth_id)) scr.write(q_update_title + '\n' + str(q_update_title_args) + '\n') # logger.info("Update id_rec table"); engine.execute(q_update_title, q_update_title_args) # else: # print("No Title") except Exception as err: # print(err.message) return (err.message) fn_write_error( "Error in id_rec.py updating title info. Error = " + err.message) # logger.error(err, exc_info=True) ######################################################### # print("Country Code = " + str(len(ctry_cod))) try: # also need to deal with address changes # Search for existing address record if ctry_cod.strip() != '' and len(ctry_cod) > 0: cntry = fn_validate_field(ctry_cod, 'ctry', 'ctry', 'ctry_table', 'char', EARL) # print("Valid Country Code = " + cntry) # print(" In Check Address") q_check_addr = ''' SELECT id, addr_line1, addr_line2, addr_line3, city, st, zip, ctry, phone FROM id_rec WHERE id = {0} '''.format(carth_id) addr_result = do_sql(q_check_addr, key=DEBUG, earl=EARL) # scr.write(q_check_addr + '\n'); row = addr_result.fetchone() if row is None: fn_write_log("Data missing in idrec.py address function. \ Employee not in id rec for id " "number " + str(carth_id)) # print("Employee not in id rec") elif str(row[0]) == '0' or str( row[0] ) == '': # No person in id rec? Should never happen fn_write_log("Data missing in idrec.py address function. \ Employee not in id rec for id number " + str(carth_id)) # print("Employee not in id rec") BODY = "ID not found in CX database id_rec.py address " \ "routine for ID " + carth_id + " Name, " + fullname SUBJECT = "CX ID not found" # sendmail( # settings.ADP_TO_EMAIL, settings.ADP_FROM_EMAIL, # BODY, SUBJECT ) # Update ID Rec and archive aa rec elif (row[1] != addr_line1 or row[2] != addr_line2 or row[3] != addr_line3 or row[4] != city or row[5] != st or row[6] != zip or row[7] != ctry_cod): # print("Update: no address match in ID_REC " + str(carth_id)) # q_update_id_rec_addr = ( '''UPDATE id_rec SET addr_line1 = ?, addr_line2 = ?, addr_line3 = ?, city = ?, st = ?, zip = ?, ctry = ?, aa = 'PERM', phone = ? WHERE id = ?''') q_update_id_addr_args = (addr_line1, addr_line2, addr_line3, city, st, zip, cntry, fn_format_phone(phone), carth_id) # print(q_update_id_rec_addr) # print(q_update_id_addr_args) fn_write_log("Update address info in id_rec table for " + fullname + ", ID = " + str(carth_id) + " address = " + addr_line1) engine.execute(q_update_id_rec_addr, q_update_id_addr_args) scr.write(q_update_id_rec_addr + '\n' + str(q_update_id_addr_args) + '\n') ######################################################### # Routine to deal with aa_rec ######################################################### # now check to see if address is a duplicate in aa_rec # find max start date to determine what date to insert # insert or update as needed if row[1] is None: # This should only happen on initial run, just need to # ignore the archive process if no address to archive fn_write_log("Empty Address 1 in ID Rec - Nothing to " "archive") elif row is not None: # print("row[1] = " + row[1]) fn_archive_address(carth_id, fullname, row[1], row[2], row[3], row[4], row[5], row[6], row[7], phone, EARL) else: fn_write_log("Empty Address 1 in ID Rec - Nothing to " "archive") # else: # print("No Change " + row[1]) elif ctry_cod is None or len(ctry_cod) == 0: # print("invalid country code" + ctry_cod) fn_write_log("invalid country code" + ctry_cod) except Exception as err: # print(err.message) fn_write_error("Error in idrec.py for id " + carth_id + ". Error = " + err.message)
def fn_set_schl_rec(id, fullname, phone, ext, loc, room, EARL): engine = get_engine(EARL) q_check_schl = ''' SELECT id, aa_no, beg_date, end_date, line1, line3, phone, phone_ext FROM aa_rec WHERE id = {0} AND aa = "{1}" '''.format(id, "SCHL") #print(q_check_schl) try: sql_schl = do_sql(q_check_schl, earl=EARL) schl_result = sql_schl.fetchone() #print("result = " + str(schl_result)) #print("Location = " + str(loc)) #print("Room = " + str(room)) location = str(loc) + " " + str(room) if schl_result is not None: if schl_result[4] == fullname and schl_result[5] == location \ and schl_result[6] == phone and schl_result[7] == ext: return ("No Change in SCHL in aa_rec") else: q_update_schl = ''' UPDATE aa_rec SET line1 = ?, line3 = ?, phone = ?, phone_ext = ? WHERE aa_no = ? ''' q_upd_schl_args = (fullname, location, phone, ext, schl_result[1]) # logger.info("update address info in aa_rec table"); engine.execute(q_update_schl, q_upd_schl_args) fn_write_log("Update to SCHL record in aa_rec for " + fullname) scr.write(q_update_schl + '\n' + str(q_upd_schl_args) + '\n') #print(q_update_schl) #print(q_upd_schl_args) #print("update SCHL completed") else: # print("New SCHL rec will be added ") # add location and room? loc = "" carthphone = "" ext = "" q_insert_schl = ''' INSERT INTO aa_rec(id, aa, beg_date, peren, end_date, line1, line2, line3, city, st, zip, ctry, phone, phone_ext, ofc_add_by, cell_carrier, opt_out) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''' q_ins_schl_args = (id, "SCHL", datetime.now().strftime("%m/%d/%Y"), "N", "", fullname, "", location, "", "", "", "", phone, ext, "HR", "", "") #print(q_insert_schl) #print(q_ins_schl_args) engine.execute(q_insert_schl, q_ins_schl_args) fn_write_log("Insert SCHL into aa_rec table for " + fullname) scr.write(q_insert_schl + '\n' + str(q_ins_schl_args) + '\n') #print("insert SCHL completed") except Exception as e: # print("Error in aarec.py, fn_set_schl_rec, Error = " + e.message) fn_write_error("Error in aarec.py, fn_set_schl_rec, for " + fullname + ", ID = " + id + "Error = " + e.message)
def fn_process_cvid(carthid, adpid, ssn, adp_assoc_id, EARL): engine = get_engine(EARL) try: ############################################################## # Inserts or updates as needed into cvid_rec ############################################################## # Validate the cx_id v_cx_id = fn_validate_field(carthid, "cx_id", "cx_id", "cvid_rec", "integer", EARL) #print("CX_ID = " + str(carthid)) #print("v_CX_ID = " + str(v_cx_id)) # Should also check for duplicates of the adp_id and associate_id # What to do in that case? v_adp_match = fn_check_duplicates(adpid, "adp_id", "cx_id", "cvid_rec", v_cx_id, "char", EARL) #print("Found_ID = " + str(v_adp_match)) # By definition, associate ID cannot be a duplicate in ADP, but # possibility of duplicate might exist in CX v_assoc_match = fn_check_duplicates(adp_assoc_id, "adp_associate_id", "cx_id", "cvid_rec", v_cx_id, "char", EARL) #print("Found ID = " + str(v_assoc_match)) if v_cx_id == 0 and v_assoc_match == 0 and v_adp_match == 0: # Insert or update as needed to ID_rec q_insert_cvid_rec = ''' INSERT INTO cvid_rec (old_id, old_id_num, adp_id, ssn, cx_id, cx_id_char, adp_associate_id) VALUES (?,?,?,?,?,?,?)''' q_insert_cvid_args = (carthid, carthid, adpid, ssn, carthid, carthid, adp_assoc_id) # print(q_insert_cvid_rec) engine.execute(q_insert_cvid_rec, q_insert_cvid_args) scr.write(q_insert_cvid_rec + '\n' + str(q_insert_cvid_args) + '\n') fn_write_log("Inserted into cvid_rec table, all cx ID fields = " + str(v_cx_id) + ", ADP ID = " + str(adpid) + ", Associate ID + " + adp_assoc_id) elif str(v_cx_id) != v_assoc_match and v_assoc_match != 0: print('Duplicate Associate ID found') fn_write_log('Duplicate Associate ID found' + carthid) elif str(v_cx_id) != str(v_adp_match) and v_adp_match != 0: fn_write_log('Duplicate Associate ID found' + carthid) print('Duplicate ADP ID found') else: q_update_cvid_rec = ''' UPDATE cvid_rec SET old_id = ?, old_id_num = ?, adp_id = ?, ssn = ?, adp_associate_id = ? WHERE cx_id = ?''' q_update_cvid_args = (carthid, carthid, adpid, ssn, adp_assoc_id, carthid) # print(q_update_cvid_rec) fn_write_log("Updated cvid_rec table, all cx id fields = " + str(v_cx_id) + ", ADP ID = " + str(adpid) + ", Associate ID = " + adp_assoc_id) # logger.info("Update cvid_rec table"); scr.write(q_update_cvid_rec + '\n' + str(q_update_cvid_args) + '\n') engine.execute(q_update_cvid_rec, q_update_cvid_args) return 1 except Exception as e: print(e) fn_write_error("Error in cvidrec.py for " + carthid + " Error = " + e.message) return 0
def form(request, stype, cid=None): medical_staff=False staff = in_group(request.user, settings.STAFF_GROUP) if not cid: cid = request.user.id else: if not staff: return HttpResponseRedirect( reverse_lazy('home') ) else: medical_staff=True # get academic term term = get_term() # get student sql = ''' {} WHERE id_rec.id = "{}" AND stu_serv_rec.yr = "{}" AND stu_serv_rec.sess = "{}" '''.format( STUDENT_VITALS, cid, term['yr'], term['sess'] ) engine = get_engine(EARL) obj = engine.execute(sql) student = obj.fetchone() if not student: if medical_staff: return HttpResponseRedirect( reverse_lazy('dashboard_home') ) else: return HttpResponseRedirect( reverse_lazy('home') ) # create database session session = get_session(settings.INFORMIX_EARL) # obtain our student medical manager manager = get_manager(session, cid) # obtain our health insturance object insurance = session.query(StudentHealthInsurance).\ filter_by(college_id=cid).\ filter(StudentHealthInsurance.current(settings.START_DATE)).first() update = None data = row2dict(insurance) if data: update = cid # opt out oo = data.get('opt_out') # UI display for 1st, 2nd, and 3rd forms primary = data.get('primary_dob') secondary = data.get('secondary_dob') tertiary = data.get('tertiary_dob') # form name fname = '{}Form'.format(stype.capitalize()) # form class form = str_to_class('djsani.insurance.forms', fname)( initial=data, manager=manager, insurance=insurance ) if request.method=='POST': update = request.POST.get('update') form = str_to_class( 'djsani.insurance.forms', fname )(request.POST, request.FILES, manager=manager, insurance=insurance) if form.is_valid(): form = form.cleaned_data # update the manager manager.cc_student_health_insurance=True # commit, because the above has not been saving properly # for some reason when opt-out session.commit() # opt out of insurance oo = form.get('opt_out') if oo: if manager.athlete: if not medical_staff: # alert email to staff if settings.DEBUG: TO_LIST = [settings.SERVER_EMAIL,] else: TO_LIST = settings.INSURANCE_RECIPIENTS send_mail( request, TO_LIST, u"[Health Insurance] Opt Out: {} {} ({})".format( request.user.first_name,request.user.last_name,cid ), request.user.email, 'alert_email.html', request, settings.MANAGERS ) else: # empty table form = STUDENT_HEALTH_INSURANCE else: # deal with file uploads if request.FILES: folder = 'insurance/{}/{}'.format( cid, manager.created_at.strftime('%Y%m%d%H%M%S%f') ) p = join(settings.UPLOADS_DIR, folder) if request.FILES.get('primary_card_front'): front = handle_uploaded_file( request.FILES['primary_card_front'], p ) form['primary_card_front'] = '{}/{}'.format( folder, front ) else: form.pop('primary_card_front', None) if request.FILES.get('primary_card_back'): back = handle_uploaded_file( request.FILES['primary_card_back'], p ) form['primary_card_back'] = '{}/{}'.format( folder, back ) else: form.pop('primary_card_back', None) else: form.pop('primary_card_front', None) form.pop('primary_card_back', None) # student did not opt out form['opt_out'] = False # insert else update if not update: # insert form['college_id'] = cid form['manager_id'] = manager.id s = StudentHealthInsurance(**form) session.add(s) else: # fetch our insurance object obj = session.query(StudentHealthInsurance).\ filter_by(college_id=cid).\ filter(StudentHealthInsurance.current(settings.START_DATE)).\ first() # update it with form values for key, value in form.iteritems(): setattr(obj, key, value) # lastly, commit and redirect session.commit() if staff: redirect = reverse_lazy('student_detail', args=[cid]) else: redirect = reverse_lazy('insurance_success') return HttpResponseRedirect(redirect) else: primary = data.get('primary_dob') secondary = request.POST.get('secondary_dob') tertiary = request.POST.get('tertiary_dob') # close database session session.close() return render( request, 'insurance/form.html', { 'form':form,'update':update,'oo':oo,'student':student, 'medical_staff':medical_staff, 'manager':manager, 'primary':primary,'secondary':secondary,'tertiary':tertiary } )
def main(): try: # set global variable global EARL # determines which database is being called from the command line if database == 'cars': EARL = INFORMIX_EARL_PROD elif database == 'train': #python address_lookup.py --database=train --test EARL = INFORMIX_EARL_TEST elif database == 'sandbox': #python address_lookup.py --database=sandbox --test EARL = INFORMIX_EARL_SANDBOX else: # this will raise an error when we call get_engine() # below but the argument parser should have taken # care of this scenario and we will never arrive here. EARL = None # establish database connection engine = get_engine(EARL) #---------------------------------------------------- # First go find the records marked for purging #---------------------------------------------------- q_get_pool = '''SELECT cc_stage_merge_no, prim_id, sec_id, id1, id2, fullname1, fullname2 FROM cc_stage_merge WHERE analysis_status not like '%PURGE%' AND adm_review = 'PURGE' AND sec_id = 1360472 ORDER BY fullname1 ''' sql_val = do_sql(q_get_pool, key=DEBUG, earl=EARL) # print(q_get_pool) if sql_val is not None: rows = sql_val.fetchall() for row in rows: purge_id = row[2] stage_merge_number = row[0] # ---------------------------------------------------- # Verify that the sec_id is really the duplicate marked for # purge # ---------------------------------------------------- if (row[2] == row[4]) and (str(row[6])[:3] != 'DUP'): fn_write_log("Sec ID " + str(row[4]) + ", " + str(row[6]) + " not marked as DUP") elif (row[2] == row[3]) and (str(row[5])[:3] != 'DUP'): fn_write_log("Sec ID " + str(row[3]) + ", " + str(row[5]) + " not marked as DUP") else: # ---------------------------------------------------- # Next go find the ID record # ---------------------------------------------------- if purge_id is not None: q_get_id_rec = "SELECT fullname, middlename, valid" \ " FROM id_rec " \ "WHERE id = " + str(purge_id) # print(q_get_id_rec) sql_val2 = do_sql(q_get_id_rec, key=DEBUG, earl=EARL) row2 = sql_val2.fetchone() # print("Row2 value = " + str(row2)) if row2 is not None: # ------------------------------------------------ # Next update the ID record # ------------------------------------------------ # print("Name = " + row2[0] + ", Valid = " # + row2[2] ) if str(row2[0]).find("PURGED") == -1: q_upd_id_rec = '''UPDATE id_rec SET valid = ?, fullname = fullname[1, 24]||'(PURGED)' WHERE id = ? ''' q_upd_id_rec_args = ('N', purge_id) print(q_upd_id_rec + ", " + str(q_upd_id_rec_args)) engine.execute(q_upd_id_rec, q_upd_id_rec_args) # -------------------------------------------- # Next update the stage merge record # -------------------------------------------- q_upd_stage = '''UPDATE cc_stage_merge SET analysis_status = ?, final_actn_date = TODAY WHERE cc_stage_merge_no = ? and sec_id = ? ''' q_upd_stage_args = ('PURGECOMPLETE', stage_merge_number, purge_id) print(q_upd_stage + ", " + str(q_upd_stage_args)) engine.execute(q_upd_stage, q_upd_stage_args) fn_write_log("ID " + str(purge_id) + ", " + row2[0] + " Purged.") else: fn_write_log("Second ID " + str(purge_id) + ", " + row2[0] + " already purged") else: fn_write_error("Second ID " + str(purge_id) + ", " + " not in id_rec table") else: fn_write_error("Null value for secondary ID -" " no primary chosen") except Exception as e: # fn_write_error("Error in zip_distance.py for zip, Error = " # + e.message) print("Error in purge_id.py: " + e.message)
def fn_process_job(carthid, workercatcode, workercatdescr, businessunitcode, businessunitdescr, homedeptcode, homedeptdescr, jobtitlecode, jobtitledescr, positioneffective, terminationdate, payrollcompcode, jobfunctioncode, jobfuncdtiondescription, jobclass, jobclassdescr, primaryposition, supervisorid, last, first, middle,EARL): engine = get_engine(EARL) try: ############################################################## # must validate ID of supervisor # Split PCN_Aggr (Home Cost Number) into separate components # first I should determine if this is an insert or update - see if # pcn_aggr is in the pos_table # validate function code in the func_table # Place dept number in func_area field in position table # Must account for Division, Dept # use PCN Codes to tie employee to job number # validate a number of fields as needed # add GL Func code to func_area in position table # if there is a secondary job record, do the same.. ############################################################## # There are records with no job number. Nothing to validate against. # If Jobtitle_code is empty, end the process with an invalid data message # print("Job Title Code = " + jobtitlecode + ", " + jobtitledescr # + ", " + str(terminationdate) + "------------------") if jobtitlecode is None: # print("Missing Job Title Code for " + last + "," + first # + " ID = " + carthid) raise ValueError("Missing Job Title Code for " + last + "," + first + " ID = " + carthid) elif jobtitlecode == '': # print("Missing Job Title Code for " + last + "," + first # + " ID = " + carthid) raise ValueError("Missing Job Title Code for " + last + "," + first + " ID = " + carthid) # There is a supervisor flag in ADP. But it may not be valid to use # for validation at this point. Just note. spvrID = fn_validate_supervisor(supervisorid[3:10], EARL) # Construct the pcn code from existing items? # func_area = left(homedeptcode,3) # hrdept/pcn_03 = homedeptcode[:3] # pcn_04 = job title code # hrdiv = business unit code # pcn_aggr = jobfunctioncode-businessunitcode-homedeptcode-jobtitlecode pcnaggr = payrollcompcode + "-" + businessunitcode[:4] + "-" \ + homedeptcode[:3] + "-" + jobtitlecode print("PCN Aggregate = " + pcnaggr) func_code = fn_validate_field(homedeptcode[:3],"func","func", "func_table", "char", EARL) # print("Function Code = " + str(func_code)) if func_code != '': fn_write_log("Valid func_code") # print('Validated func_code = ' + homedeptcode[:3] + '\n') else: # print('Invalid Function Code ' + str(homedeptcode[:3]) + '\n') fn_write_log('Invalid Function Code ' + str(homedeptcode[:3]) + '\n') # fn_write_error("Error in jobrec.py - Invalid Function Code for ' " # + id + ' Code = ' + str(homedeptcode[:3]) + '\n'); # print("Error in jobrec.py - Invalid Function Code for " + # str(carthid) + " Code = " + str(homedeptcode[:3]) + "\n"); # print("Supervisor = " + str(spvrID) +'\n') ############################################################## # validate hrpay, values in this table should not change without # a project request as they affect a number of things ############################################################## hrpay_rslt = fn_validate_field(payrollcompcode,"hrpay","hrpay", "hrpay_table", "char", EARL) if hrpay_rslt != '': #print('Validated HRPay Code = ' + str(hrpay_rslt) + '\n') fn_write_log('Valid HRPay Code ' + str(hrpay_rslt) + '\n'); else: #print('Invalid Payroll Company Code ' + str(payrollcompcode) + '\n') fn_write_error('Error in jobrec.py - Invalid Payroll Company Code '+ str(payrollcompcode) +'\n'); fn_write_error("Error in jobrec.py - Invalid Payroll Company Code " + str(payrollcompcode) + '\n') ############################################################## # New table in Informix - Worker Category # Not maintained in CX, so we will have to maintain it with # inserts and updates ############################################################# # print("Worker Cat Code") v_work_cat_update = fn_needs_update(workercatcode, workercatdescr, "work_cat_code", "work_cat_descr", "cc_work_cat_table", "char", EARL) # print("Work Cat Update = " + str(v_work_cat_update)) if v_work_cat_update == None or len(str(v_work_cat_update)) == 0: q_ins_wc = ''' INSERT INTO cc_work_cat_table (work_cat_code, work_cat_descr, active_date) VALUES (?,?,?)''' q_ins_wc_args = (workercatcode,workercatdescr, datetime.now().strftime("%m/%d/%Y")) # print(q_ins_wc) # print(q_ins_wc_args) engine.execute(q_ins_wc, q_ins_wc_args) fn_write_log("Inserted into cc_work_cat_table, code = " + workercatcode) scr.write(q_ins_wc + '\n' + str(q_ins_wc_args) + '\n') else: 'Exists but no match' if v_work_cat_update[1] != workercatdescr: q_upd_wc = ''' UPDATE cc_work_cat_table set work_cat_descr = ? WHERE work_cat_code = ?''' q_upd_wc_args = (workercatdescr, workercatcode) # print(q_upd_wc) # print(q_upd_wc_args) engine.execute(q_upd_wc, q_upd_wc_args) fn_write_log("Updated cc_work_cat_table, code = " + workercatcode) scr.write(q_upd_wc + '\n' + str(q_upd_wc_args) + '\n') ############################################################## # Job Class Code, HRClass field in Job Rec ############################################################## if jobclass.strip() != "" and jobclass is not None: # print(jobclass) # print(jobclassdescr) # Find out if class is in the hrclass table q_hrclass = ''' SELECT * FROM hrclass_table WHERE hrclass = "{0}" AND inactive_date is null'''.format(jobclass) jclass = do_sql(q_hrclass, key=DEBUG, earl=EARL) row = jclass.fetchone() if row is None: q_hrclass_ins = ''' INSERT INTO hrclass_table (hrclass, txt, active_date, inactive_date) VALUES(?, ?, ?, ?)''' q_hrclass_ins_args = (jobclass, jobclassdescr, datetime.now().strftime("%m/%d/%Y"), None) engine.execute(q_hrclass_ins, q_hrclass_ins_args) fn_write_log("Inserted into hrclass_table, code = " + jobclass) scr.write(q_hrclass_ins + '\n' + str(q_hrclass_ins_args) + '\n') else: # print(row[1]) if row[1] != jobclassdescr: q_hrclass_upd = ''' UPDATE hrclass_table SET txt = ? WHERE hrclass = ?''' q_hrclass_upd_args = (jobclassdescr, jobclass) engine.execute(q_hrclass_upd, q_hrclass_upd_args) scr.write(q_upd_dept + '\n' + str(q_hrclass_upd_args) + '\n'); fn_write_log("Updated hrclass_table, code = " + jobclass) else: #print("No change in HRClass Description") fn_write_log('There were no changes in HRClass ' 'description.\n'); # else: # print("No Job Class") ############################################################## # validate the position, division, department ############################################################## hrdivision = fn_needs_update(str(businessunitcode[:4]), businessunitdescr, "hrdiv", "descr", "hrdiv_table", "char", EARL) if hrdivision is None: q_ins_div = ''' INSERT INTO hrdiv_table(hrdiv, descr, beg_date, end_date) VALUES(?, ?, ?, null)''' q_ins_div_args = (businessunitcode[:4], businessunitdescr, datetime.now().strftime("%m/%d/%Y")) # print("New HR Division = " + businessunitcode[:4] + '\n') # print(q_ins_div + str(q_ins_div_args)) fn_write_log( "Inserted into hrdiv_table, code = " + businessunitcode[:4]) engine.execute(q_ins_div, q_ins_div_args) scr.write(q_ins_div + '\n' + str(q_ins_div_args) + '\n') elif hrdivision == "": q_ins_div = ''' INSERT INTO hrdiv_table(hrdiv, descr, beg_date, end_date) VALUES(?, ?, ?, null)''' q_ins_div_args = (businessunitcode[:4], businessunitdescr, datetime.now().strftime("%m/%d/%Y")) # print("New HR Division = " + businessunitcode[:4] + '\n') # print(q_ins_div + str(q_ins_div_args)) fn_write_log("Inserted into hrdiv_table, code = " + businessunitcode[:4]) engine.execute(q_ins_div, q_ins_div_args) scr.write(q_ins_div + '\n' + str(q_ins_div_args) + '\n') else: if hrdivision[1] != businessunitdescr: # This query works 5/25/18 q_upd_div = ''' UPDATE hrdiv_table SET descr = ?, beg_date = ? WHERE hrdiv = ?''' q_upd_div_args = (businessunitdescr, datetime.now().strftime("%m/%d/%Y"), businessunitcode[:4]) # print("Existing HR Division = " + hrdivision[0] + '\n') # print(q_upd_div + str(q_upd_div_args)) fn_write_log("Updated hrdiv_table, code = " + businessunitcode[:4]) engine.execute(q_upd_div, q_upd_div_args) scr.write(q_upd_div + '\n' + str(q_upd_div_args) + '\n'); # print("Home Dept Code = " + homedeptcode[:3]) # print("Home Dept descr = " + homedeptdescr) hrdepartment = fn_needs_update(homedeptcode[:3], homedeptdescr, "hrdept", "descr", "hrdept_table", "char", EARL) # print("HR Dept Needs update = " + str(hrdepartment)) if hrdepartment==None or hrdepartment=="" or len(hrdepartment)==0: # print("Insert Dept") # This query works 5/25/18 q_ins_dept = ''' INSERT INTO hrdept_table(hrdept, hrdiv, descr, beg_date, end_date) VALUES(?, ?, ?, ?, ?)''' q_ins_dept_args = (homedeptcode[:3], businessunitcode[:4], homedeptdescr, datetime.now().strftime("%m/%d/%Y"),None) # print(q_ins_dept) # print(q_ins_dept_args) engine.execute(q_ins_dept, q_ins_dept_args) fn_write_log("Inserted into hrdept_table, code = " + homedeptcode[:3]) scr.write(q_ins_dept + '\n' + str(q_ins_dept_args) + '\n'); else: # print("Update Dept") if hrdepartment[1] != homedeptdescr: q_upd_dept = ''' UPDATE hrdept_table SET hrdiv = ?, descr = ?, beg_date = ? WHERE hrdept = ?''' q_upd_dept_args = (businessunitcode[:4], homedeptdescr, datetime.now().strftime("%m/%d/%Y"), func_code) # print(q_upd_dept) # print(q_upd_dept_args) engine.execute(q_upd_dept, q_upd_dept_args) fn_write_log("Updated hrdept_table, code = " + homedeptcode[:3]) scr.write(q_upd_dept + '\n' + str(q_upd_dept_args) + '\n'); else: # Need to make sure the department is linked to the division q_check_dept_div = ''' select hrdiv from hrdept_table where hrdept = {0} '''.format(homedeptcode[:3]) div_val = do_sql(q_check_dept_div, key=DEBUG, earl=EARL) if div_val != businessunitcode[:4]: # print("update dept/div relationship") q_upd_dept_div = ''' UPDATE hrdept_table SET hrdiv = ?, descr = ?, beg_date = ? WHERE hrdept = ?''' q_upd_dept_div_args = (businessunitcode[:4], homedeptdescr, datetime.now().strftime("%m/%d/%Y"), func_code) # print(q_upd_dept_div) # print(q_upd_dept_div_args) engine.execute(q_upd_dept_div, q_upd_dept_div_args) fn_write_log( "Updated hrdept_table, code = " + homedeptcode[:3]) scr.write(q_upd_dept_div + '\n' + str(q_upd_dept_div_args) + '\n'); # else: # print("Home Dept not updated " + homedeptdescr) ############################################################### # Use PCN Agg to find TPos FROM position rec ############################################################### print("Find Tpos") # v_tpos = fn_validate_field(pcnaggr,"pcn_aggr","tpos_no", # "pos_table","char", EARL) v_pos = ''' SELECT tpos_no, descr, func_area, hrpay FROM pos_table WHERE pcn_aggr = '{0}' '''.format(pcnaggr) sql_vtpos = do_sql(v_pos, key=DEBUG, earl=EARL) # print(sql_vtpos) row = sql_vtpos.fetchone() if row == None: q_ins_pos = ''' INSERT INTO pos_table(pcn_aggr, pcn_01, pcn_02, pcn_03, pcn_04, descr, ofc, func_area, supervisor_no, tenure_track, fte, max_jobs, hrpay, active_date, prev_pos) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''' q_ins_pos_args = (pcnaggr,payrollcompcode,businessunitcode[:4], func_code,jobtitlecode, jobtitledescr, 'OFC', func_code, None, '', 0, 0, payrollcompcode, datetime.now().strftime("%m/%d/%Y"),'') # print(q_ins_pos) # print(q_ins_pos_args) engine.execute(q_ins_pos, q_ins_pos_args) fn_write_log("Inserted into pos_table, code = " + pcnaggr) scr.write(q_ins_pos + '\n' + str(q_ins_pos_args) + '\n') # Need to return the tpos_no as it is created in the INSERT #print("New t_pos needed for = " + pcnaggr) q_get_tpos = ''' SELECT tpos_no FROM pos_table WHERE pcn_aggr = '{0}' '''.format(pcnaggr) # if tpos exists return the tpos number to find the job record sql_tpos = do_sql(q_get_tpos, key=DEBUG, earl=EARL) row = sql_tpos.fetchone() tpos_result = row[0] v_tpos = tpos_result # print("New tpos = " + str(v_tpos)) fn_write_log("New tpos = " + str(v_tpos)) # print(q_ins_pos) else: v_tpos = row[0] # print("v-tpos = " + str(v_tpos)) # print("Existing values =" + row[1] + ", " + row[2] + ", " + row[3]) if row[1] != jobtitledescr or row[2] != func_code or row[3] != payrollcompcode: # print("Validated t_pos = " + str(v_tpos)) q_upd_pos = ''' UPDATE pos_table SET pcn_aggr = ?, pcn_01 = ?, pcn_02 = ?, pcn_03 = ?, pcn_04 = ?, descr = ?, ofc = ?, func_area = ?, supervisor_no = ?, tenure_track = ?, fte = ?, max_jobs = ?, hrpay = ?, active_date = ?, inactive_date = ? WHERE tpos_no = ?''' q_upd_pos_args = (pcnaggr, payrollcompcode, businessunitcode[:4], func_code, jobtitlecode, jobtitledescr, 'OFC', func_code, None, 'TENURE', 0, 0, payrollcompcode, datetime.now().strftime("%m/%d/%Y"), None, v_tpos) # print(q_upd_pos) # print(q_upd_pos_args) fn_write_log("Updated pos_table, code = " + pcnaggr) engine.execute(q_upd_pos, q_upd_pos_args) scr.write(q_upd_pos + '\n' + str(q_upd_pos_args) + '\n') ############################################################## # validate hrstat, # Per Meeting 6/22/18, Job Function Code redundant and unreliable # Skip this - Worker Category Code will suffice ############################################################## # v_job_function_code = fn_validate_field(jobfunctioncode,"hrstat", # "hrstat", "hrstat_table","char", EARL) # if v_job_function_code == None or len(v_job_function_code)==0: # # Insert into hr_stat # q_ins_stat = ''' # INSERT INTO hrstat_table(hrstat, txt, active_date, inactive_date) # VALUES(?, ?, ?, null)''' # q_ins_stat_args = (jobfunctioncode, jobfuncdtiondescription, # datetime.now().strftime("%m/%d/%Y")) # engine.execute(q_ins_stat, q_ins_stat_args) # scr.write(q_ins_stat + '\n' + str(q_ins_stat_args) + '\n'); # else: # # hrstat_rslt = row[0] # # valid_hrstat = hrstat_rslt # print("Existing Job Function Code = " + v_job_function_code) # q_upd_stat = ''' # UPDATE hrstat_table SET txt = ? # WHERE hrstat = ?''' # q_upd_stat_args = (jobfuncdtiondescription, v_job_function_code) # engine.execute(q_upd_stat, q_upd_stat_args) # scr.write(q_upd_stat + '\n' + str(q_upd_stat_args) + '\n') ############################################################## # Determine job rank for job_rec ############################################################## rank = '' # print("Primary Position = " + primaryposition + " " + str(terminationdate)) if primaryposition == 'Yes': rank = 1 elif primaryposition == 'No': rank = 2 # elif terminationdate.strip != '': # rank = '' # print("Rank = " + str(rank) +'\n') # ############################################################## # If job rec exists in job_rec -update, else insert # ############################################################## print("Do Job Rec") # Need to add a check here for same job, different department. # If department changes, then the previous job (PCN AGGR) needs an # end date - it is in essence a new job # select job_no from job_rec where id = id and end_date is null # and hrdept <> homedeptcode[:3] # If found, end date q_check_exst_job = ''' select job_rec.tpos_no, pos_table.pcn_aggr, job_no from job_rec, pos_table where job_rec.tpos_no = pos_table.tpos_no and job_rec.title_rank = 1 and job_rec.id = {0} and (job_rec.end_date is null or job_rec.end_date > TODAY) '''.format(carthid) # print(q_check_exst_job) sql_exst_job = do_sql(q_check_exst_job, key=DEBUG, earl=EARL) exst_row = sql_exst_job.fetchone() if exst_row is None: print("No Existing primary jobs") else: if exst_row[1] != pcnaggr: # print(pcnaggr) # print(exst_row[1]) q_end_job = '''update job_rec set end_date = ? where id = ? and job_no = ? ''' q_end_job_args = (datetime.now().strftime("%m/%d/%Y"), carthid, exst_row[2]) # print(q_end_job) # print(q_end_job_args) engine.execute(q_end_job, q_end_job_args) scr.write(q_end_job + '\n' + str(q_end_job_args) + '\n') q_get_job = ''' SELECT job_no FROM job_rec WHERE tpos_no = {0} AND id = {1} AND (end_date IS null or end_date > TODAY) '''.format(v_tpos,carthid,positioneffective) # Something in the formatting of the date is failing... # and beg_date = '{2}' # print(q_get_job) sql_job = do_sql(q_get_job, key=DEBUG, earl=EARL) jobrow = sql_job.fetchone() if jobrow is None: # print("Job Number not found in job rec") fn_write_log("Job Number not found in job rec") # if no record, no duplicate # insert # NOTE: NEED TO ADD JOB CLASS CODE into HRCLASS field # Insert into job rec # Query works as of 5/29/18 # print("Rank = " + str(rank)) # print("Supervisor = " + str(spvrID) + '\n') q_ins_job = ''' INSERT INTO job_rec (tpos_no, descr, bjob_no, id, hrpay, supervisor_no, hrstat, egp_type, hrdiv, hrdept, comp_beg_date, comp_end_date, beg_date, end_date, active_ctrct, ctrct_stat, excl_srvc_hrs, excl_web_time, job_title, title_rank, worker_ctgry, hrclass) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''' q_ins_job_args = (v_tpos, jobtitledescr, 0, carthid, payrollcompcode, spvrID, '', 'R', businessunitcode[:4], func_code, None, None, positioneffective, None if terminationdate == '' else terminationdate, 'N', 'N/A', 'N', 'N', jobtitledescr, rank, workercatcode, jobclass) print(q_ins_job + str(q_ins_job_args)) # print("New Job Record for " + last + ', id = ' + str(carthid)) engine.execute(q_ins_job, q_ins_job_args) fn_write_log("Inserted into job_rec, tpos = " + str(v_tpos) + " Description = " + jobtitledescr + " ID = " + str(carthid)) scr.write(q_ins_job + str(q_ins_job_args) + '\n') else: # jobrow = sql_job.fetchone() # print('valid job found = ' + str(jobrow[0])) fn_write_log('valid job found = ' + str(jobrow[0])) #print('v_tpos = ' + str(v_tpos) ) q_upd_job = ''' UPDATE job_rec SET descr = ?, id = ?, hrpay = ?, supervisor_no = ?, hrstat = ?, hrdiv = ?, hrdept = ?, beg_date = ?, end_date = ?, job_title = ?, worker_ctgry = ?, hrclass = ? WHERE job_no = ?''' q_upd_job_args = (jobtitledescr, carthid, payrollcompcode, spvrID, '', businessunitcode[:4], func_code, positioneffective, None if terminationdate == '' else terminationdate, jobtitledescr, workercatcode, jobclass, jobrow[0]) # print("Supervisor = " + str(spvrID) + '\n') print(q_upd_job) print(q_upd_job_args) # print("Update Job Record for " + last + ', id = ' + str(carthid)) engine.execute(q_upd_job, q_upd_job_args) fn_write_log("Updated job_rec, tpos = " + str(v_tpos) + " Description = " + jobtitledescr + " ID = " + str(carthid)) scr.write(q_upd_job + '\n' + str(q_upd_job_args) + '\n') ############################################################## # Question - on first run, will we need to end date existing jobs that # are NOT listed in ADP? How to determine which those are if there # is no match...Figure out in testing # May be able to query cc_adp_rec and compare that to the job_rec # table to find jobs NOT listed in ADP but still active in CX # Not certain we can end date them without further evaluation ############################################################## ############################################################## # TENURE - This will go into HREMP_REC... ############################################################## # print("Tenure") if workercatcode == "T": #tenure is_tenured = "Y" is_tenure_track = "N" elif workercatcode == "TE": is_tenured = "N" is_tenure_track = "Y" else: is_tenured = "N" is_tenure_track = "N" # Same as all others, first have to avoid duplicate by finding out # if a record already exists q_get_emp_rec = ''' SELECT id, home_tpos_no FROM hremp_rec WHERE id = {0} '''.format(carthid) #print(q_get_emp_rec) sql_emp = do_sql(q_get_emp_rec, key=DEBUG, earl=EARL) row = sql_emp.fetchone() if row == None: #print("No Emp record") # This query works 5/25/18 q_emp_insert = ''' INSERT into hremp_rec (id, home_tpos_no, ss_first, ss_middle, ss_last, ss_suffix, tenure, tenure_date, is_tenured, is_tenure_track) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ? )''' q_emp_ins_args = (carthid, v_tpos, first,middle,last,"","","", is_tenured,is_tenure_track) #print(q_emp_insert) #print(q_emp_ins_args) #print("Insert into hremp_rec") engine.execute(q_emp_insert, q_emp_ins_args) fn_write_log("Inserted into hremp_rec, home_tpos_no = " + str(v_tpos) + " ID = " + str(carthid)) scr.write(q_emp_insert + '\n' + str(q_emp_ins_args) + '\n') else: # print('Found Emp Rec') emp_rslt = row # print(emp_rslt) # this query words - 05/25/2018 q_emp_upd = ''' UPDATE hremp_rec SET home_tpos_no = ?, ss_first = ?, ss_middle = ?, ss_last = ?, ss_suffix = ?, tenure = ?, tenure_date = ?, is_tenured = ?, is_tenure_track = ? WHERE id = ?''' q_emp_upd_args = (v_tpos, first, middle, last, "", "", "", is_tenured,is_tenure_track, carthid) #print(q_emp_upd) #print(q_emp_upd_args) # print("Update HREMP_REC") engine.execute(q_emp_upd, q_emp_upd_args) fn_write_log("Updated hremp_rec, home_tpos_no = " + str(v_tpos) + " ID = " + str(carthid)) scr.write(q_emp_upd + '\n' + str(q_emp_upd_args) + '\n'); ############################################################## # Faculty Qualifications - This will go into facqual_rec... # and qual_table - No longer part of Job Title # Probably not in scope as these titles do not affect pay ############################################################## return(1) except Exception as e: print(e) fn_write_error("Error in jobrec.py for " + last + ", " + first + ", ID = " + carthid + " Error = " + e.message) return(0)
def main(): # set start_time in order to see how long script takes to execute start_time = time.time() ########################################################################## # development server (bng), you would execute: # ==> python adptocx.py --database=train --test # production server (psm), you would execute: # ==> python adptocx.py --database=cars # without the --test argument ########################################################################## # set global variable global EARL # determines which database is being called from the command line if database == 'cars': EARL = INFORMIX_EARL_PROD if database == 'train': EARL = INFORMIX_EARL_TEST elif database == 'sandbox': EARL = INFORMIX_EARL_SANDBOX else: # this will raise an error when we call get_engine() # below but the argument parser should have taken # care of this scenario and we will never arrive here. EARL = None # establish database connection engine = get_engine(EARL) # set date and time to be added to the filename datetimestr = time.strftime("%Y%m%d%H%M%S") # set local directory for which the common app file will be downloaded to source_dir = ('{0}'.format(settings.ADP_CSV_OUTPUT)) # Defines file names and directory location new_adp_file = ('{0}ADPtoCX.csv'.format(settings.ADP_CSV_OUTPUT)) last_adp_file = ('{0}ADPtoCXLast.csv'.format(settings.ADP_CSV_OUTPUT)) adp_diff_file = ('{0}different.csv'.format(settings.ADP_CSV_OUTPUT)) # First remove yesterdays file of updates if os.path.isfile(adp_diff_file): os.remove(adp_diff_file) try: ################################################################# # STEP 0-- # Pull the file from the ADP FTP site # execute sftp code that needs to be executed in production only ################################################################# # if not test: # file_download() ################################################################# # STEP 1-- # Read files and write out differences ################################################################# # # # Need to delete the differences file to start fresh # if os.path.isfile(adp_diff_file): # os.remove(adp_diff_file) # # # Read in both files and compare # # the codecs function prevents the header from ADP getting # # into the comparison - needed because of extra characters in header # with codecs.open(new_adp_file, 'r', # encoding='utf-8-sig') as t1, codecs.open(last_adp_file, # 'r', encoding='utf-8-sig') as t2: # # newfile = t1.readlines() # oldfile = t2.readlines() # # # This uses sets to compare the two files # # returns additions or changes in new but not in original # bigb = set(newfile) - set(oldfile) # # # Write differences to output file # with open(adp_diff_file, 'wb') as file_out: # # Write header row # csvWriter = csv.writer(file_out) # csvWriter.writerow( # ["file_number", "carth_id", "last_name", "first_name", # "middle_name", "salutation", "payroll_name", # "preferred_name", "birth_date", "gender", "marital_status", # "race", "race_descr", "ethnicity", "ethnicity_id_meth", # "personal_email", "primary_address1", "primary_address2", # "primary_address3", "primary_city", "primary_state_code", # "primary_state_descr", "primary_zip", "primary_county", # "primary_country", "primary_country_code", # "primary_legal_address", "home_phone", "mobile_phone", # "work_phone", "wc_work_phone", "wc_work_email", # "use_work_for_notification", "legal_address1", # "legal_address2", "legal_address3", "legal_city", # "legal_state_code", "legal_state_description", "legal_zip", # "legal_county", "legal_country", "legal_country_code", # "ssn", "hire_date", "hire_rehire_date", "rehire_date", # "pos_start_date", "pos_effective_date", # "pos_effective_end_date", "termination_date", # "position_status", "status_effective_date", # "status_eff_end_date", "adj_service_date", "archived", # "position_id", "primary_position", "payroll_comp_code", # "payroll_comp_name", "cip", "worker_cat_code", # "worker_cat_descr", "job_title_code", "job_title_descr", # "home_cost_code", "home_cost_descr", "job_class_code", # "job_class_descr", "job_description", "job_function_code", # "job_function_description", "room_number", "location_code", # "location_description", "leave_start_date", # "leave_return_date", # "home_dept_code", "home_dept_descr", "supervisor_id", # "supervisor_fname", "supervisor_lname","business_unit_code", # "business_unit_descr","reports_to_name","reports_to_pos_id", # "reports_to_assoc_id", "employee_assoc_id", # "management_position", "supervisor_flag", "long_title"]) # # for line_no, line in enumerate(bigb): # x = line.split(',') # file_out.write(line) # # print('File = ' + x[0] + ', ID = ' + x[ # # 1] + ', First = ' + x[3] + ', Last = ' + x[6]) # # # close the files # t1.close() # t2.close() # file_out.close() # # scr.write('-------------------------------------------------------\n') # scr.write('-- CREATES APPLICATION FROM APD TO CX DATA \n') # scr.write('-------------------------------------------------------\n') ################################################################# # STEP 2-- # Open differences file and start loop through records ################################################################# with open(adp_diff_file, 'r') as f: d_reader = csv.DictReader(f, delimiter=',') adpcount = 0 ccadpcount = 0 idcount = 0 cvidcount = 0 emailcount = 0 phonecount = 0 jobcount = 0 profilecount = 0 secondjobcount = 0 for row in d_reader: print('--------------------------------------------------') print('carthid = {0}, Fullname = {1}'.format( row["carth_id"], row["payroll_name"])) # print("Use as legal {0}".format(row["primary_legal_address"])) ethnic_code = { 'Not Hispanic or Latino': 'N', 'Hispanic or Latino': 'Y' } is_hispanic = ethnic_code.get(row["ethnicity"]) if is_hispanic is None: is_hispanic = "" # else: # print("Is Hispanic = " + str(is_hispanic)) racecode = { '1': 'WH', '2': 'BL', '4': 'AS', '5': 'AM', '6': 'AP', '9': 'MU' } race = racecode.get(row["race"]) if race is None: race = "" # print("Race = " + str(race)) # else: ############################################################## # STEP 2a-- # Write entire row to cc_adp_rec table ############################################################## # # try: # q_cc_adp_rec = ("INSERT INTO cc_adp_rec (file_no, \ # carthage_id, lastname, firstname, middlename, \ # salutation, fullname, pref_name, birth_date, gender, \ # marital_status, race, \ # race_descr, hispanic, race_id_method, personal_email, \ # primary_addr_line1, primary_addr_line2, \ # primary_addr_line3, primary_addr_city, primary_addr_st, \ # primary_addr_state, primary_addr_zip, \ # primary_addr_county, primary_addr_country, \ # primary_addr_country_code, primary_addr_as_legal, \ # home_phone, cell_phone, work_phone, \ # work_contact_phone, work_contact_email, \ # work_contact_notification, \ # legal_addr_line1, legal_addr_line2, legal_addr_line3, \ # legal_addr_city, legal_addr_st, legal_addr_state, \ # legal_addr_zip, legal_addr_county, legal_addr_country, \ # legal_addr_country_code, ssn, hire_date, \ # hire_rehire_date, rehire_date, position_start_date, \ # position_effective_date, position_effective_end_date, \ # termination_date, position_status, status_effective_date, \ # status_effective_end_date, adjusted_service_date, \ # archived_employee, position_id, primary_position, \ # payroll_company_code, payroll_company_name, \ # cip_code, worker_category_code, worker_category_descr, \ # job_title_code, job_title_descr, home_cost_number_code, \ # home_cost_number_descr, job_class_code, job_class_descr, \ # job_descr, job_function_code, \ # job_function_descr, room, bldg, bldg_name, \ # leave_of_absence_start_date, \ # leave_of_absence_return_date, \ # home_depart_num_code, home_depart_num_descr, \ # supervisor_id, supervisor_firstname, supervisor_lastname, \ # business_unit_code, business_unit_descr, reports_to_name, \ # reports_to_position_id, reports_to_associate_id, \ # employee_associate_id, management_position, \ # supervisor_flag, long_title, date_stamp) \ # VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \ # ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \ # ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \ # ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \ # ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \ # ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") # cc_adp_args = (row["file_number"], row["carth_id"], # row["last_name"], # row["first_name"], row["middle_name"], row["salutation"], # row["payroll_name"], row["preferred_name"], # fn_convert_date(row["birth_date"]), (row["gender"][:1]), # row["marital_status"], race, # row["race_descr"], is_hispanic, # row["ethnicity_id_meth"], row["personal_email"], # row["primary_address1"], row["primary_address2"], # row["primary_address3"], row["primary_city"], # row["primary_state_code"], row["primary_state_descr"], # row["primary_zip"], row["primary_county"], # row["primary_country"], row["primary_country_code"], # (row["primary_legal_address"][:1]), # fn_format_phone(row["home_phone"]), # fn_format_phone(row["mobile_phone"]), # fn_format_phone(row["work_phone"]), # fn_format_phone(row["wc_work_phone"]), row["wc_work_email"], # (row["use_work_for_notification"][:1]), # row["legal_address1"], # row["legal_address2"], row["legal_address3"], # row["legal_city"], row["legal_state_code"], # row["legal_state_description"], row["legal_zip"], # row["legal_county"], row["legal_country"], # row["legal_country_code"], row["ssn"], # row["hire_date"], # fn_convert_date(row["hire_rehire_date"]), # fn_convert_date(row["rehire_date"]), # fn_convert_date(row["pos_start_date"]), # fn_convert_date(row["pos_effective_date"]), # fn_convert_date(row["pos_effective_end_date"]), # fn_convert_date(row["termination_date"]), # row["position_status"], # fn_convert_date(row["status_effective_date"]), # fn_convert_date(row["status_eff_end_date"]), # fn_convert_date(row["adj_service_date"]), # row["archived"], row["position_id"], # row["primary_position"], row["payroll_comp_code"], # row["payroll_comp_name"], row["cip"], # row["worker_cat_code"], row["worker_cat_descr"], # row["job_title_code"], row["job_title_descr"], # row["home_cost_code"], row["home_cost_descr"], # row["job_class_code"], row["job_class_descr"], # row["job_description"], row["job_function_code"], # row["job_function_description"], row["room_number"], # row["location_code"], row["location_description"], # fn_convert_date(row["leave_start_date"]), # fn_convert_date(row["leave_return_date"]), # row["home_dept_code"], row["home_dept_descr"], # row["supervisor_id"], row["supervisor_fname"], # row["supervisor_lname"], row["business_unit_code"].zfill(3), # row["business_unit_descr"], row["reports_to_name"], # row["reports_to_pos_id"], row["reports_to_assoc_id"], # row["employee_assoc_id"], row["management_position"], # row["supervisor_flag"], row["long_title"], # datetime.now()) # # print(q_cc_adp_rec) # # print(cc_adp_args) # engine.execute(q_cc_adp_rec, cc_adp_args) # # ccadpcount =+ 1 # scr.write(q_cc_adp_rec + '\n' + str(cc_adp_args) + '\n'); # fn_write_log("Inserted data into cc_adp_rec table for " # + row["payroll_name"] + " ID = " # + row["carth_id"]); # # ccadpcount = ccadpcount + 1 # except Exception as e: # fn_write_error("Error in adptcx.py while inserting into" # " cc_adp_rec. Error = " + e.message) # continue # # print(e) # # # fn_convert_date(row["termination_date"]), ############################################################## # STEP 2b-- # Do updates to id_rec # Note - we may have to deal with addresses separately from # basic demographic information ############################################################## # If ADP File is missing the Carthage ID, we cannot process the # record - For ALL in file # email HR if CarthID is missing print("In ID Rec sub") if row["carth_id"] == "": # print('No Carthage ID - abort this record and email HR') SUBJECT = 'No Carthage ID - abort this record and email HR' BODY = 'No Carthage ID, process aborted. Name = {0}, \ ADP File = {1}' .format(row["payroll_name"], \ row["file_number"]) # sendmail(settings.ADP_TO_EMAIL, settings.ADP_FROM_EMAIL, # BODY, SUBJECT # ) fn_write_log('There was no carthage ID in file, row \ skipped. Name = {0}, \ ADP File = {1}' .format(row["payroll_name"], \ row["file_number"])) else: # Check to see if record exists in id_rec # Do this first, or everything else is moot results = fn_validate_field(row["carth_id"], "id", "id", "id_rec", "integer", EARL) # print("ID Validate result = " + str(results)) if results is None: SUBJECT = 'No matcining ID in id_rec - abort and ' \ 'email HR' BODY = 'No matching ID in id_rec, process aborted. ' \ 'Name = {0}, \ ADP File = {1}' .format( fullname, file_number) #print(SUBJECT) # sendmail(settings.ADP_TO_EMAIL, # settings.ADP_FROM_EMAIL, BODY, SUBJECT) fn_write_log('There was no matching ID in id_Rec \ table, row skipped. Name ' '= {0}, \ ADP File = {1}'.format( fullname, file_number)) # We should theoretically never insert an ID record # unless at some point they don't need the cx_id in # ADP and can let CX create new ID numbers # programatically # # fn_process_idrec(row["carth_id"], row["file_number"], # row["payroll_name"], # row["last_name"], row["first_name"], # row["middle_name"], row["salutation"], # row["primary_address1"], # row["primary_address2"], # row["primary_address3"], # row["primary_city"], # row["primary_state_code"], # row["primary_zip"], row["primary_country"], # row["ssn"], row["home_phone"], # row["position_status"], # fn_convert_date(row["hire_date"])) # Use hire date if we do the initial insert... ## fn_convert_date(row["pos_effective_date"])) # Student employees should have cvid_rec for # provisioning # Initial test done against cx 6/12/18 else: # Exclude student employees from main process, # paycode DPW if row["payroll_comp_code"] != 'DPW': ######################################## # This will take care of addresses and demographics ######################################## print("Deal with Address") # print("Home Phone = " # + fn_format_phone(row["home_phone"])) id_rslt = fn_process_idrec( row["carth_id"], row["file_number"], row["payroll_name"], row["last_name"], row["first_name"], row["middle_name"], row["salutation"], row["primary_address1"], row["primary_address2"], row["primary_address3"], row["primary_city"], row["primary_state_code"], row["primary_zip"], row["primary_country"], row["primary_country_code"], row["ssn"], fn_format_phone(row["home_phone"]), # ("" if None else row["position_status"], fn_convert_date(row["pos_effective_date"]), EARL) # print(id_rslt) # print("ID Result = " + str(id_rslt)) # idcount = idcount + 1 # print("sql addr " + addr_result[1].strip() + " loop # address = " + row["primary_address1"].strip()) # print("Email 2 = " + row["personal_email"]) # print("Email 3 = " + row["wc_work_email"]) if row["personal_email"] != '' and \ row["wc_work_email"] is not None: email_result = fn_set_email( row["personal_email"], row["carth_id"], row["payroll_name"], "EML2", EARL) print("Email = " + str(email_result)) # if email_result.strip == "": # # elif email_result is None: # else # emailcount = emailcount + 1 # else: # we can remove the else # print("No personal email from ADP") if row["wc_work_email"] != '' \ and row["wc_work_email"] is not None: email_result = fn_set_email( row["wc_work_email"], row["carth_id"], row["payroll_name"], "EML3", EARL) # print("Email3 = " + str(email_result)) # if email_result != "": # emailcount = emailcount + 1 # Check to update phone in aa_rec if row["mobile_phone"] != "": cell = fn_set_cell_phone( fn_format_phone(row["mobile_phone"]), row["carth_id"], row["payroll_name"], EARL) if cell != "": phonecount = phonecount + 1 #print("Cell phone result: " + cell) ################################################# # STEP 2c-- # Do updates to profile_rec (profilerec.py) ################################################# print("In Profile Rec") prof_rslt = fn_process_profile_rec( row["carth_id"], is_hispanic, row["gender"], race, row["birth_date"], datetime.now().strftime("%m/%d/%Y"), EARL) # profilecount = profilecount + prof_rslt print("Profile Result = " + str(prof_rslt)) ################################################# # STEP 2d-- # Do updates to cvid_rec (cvidrec.py) ################################################## print("In CVID_REC") cvid_rslt = fn_process_cvid( row["carth_id"], row["file_number"], row["ssn"], row["employee_assoc_id"], EARL) cvidcount = cvidcount + cvid_rslt ################################################## # STEP 2e-- # Do updates to job_rec (jobrec.py) ################################################## print("In Job Rec") job_rslt = fn_process_job( row["carth_id"], row["worker_cat_code"], row["worker_cat_descr"], row["business_unit_code"].zfill(3), row["business_unit_descr"], row["home_dept_code"], row["home_dept_descr"], row["job_title_code"], row["job_title_descr"], row["pos_effective_date"], row["termination_date"], row["payroll_comp_code"], row["job_function_code"], row["job_function_description"], row["job_class_code"], row["job_class_descr"], row["primary_position"], row["supervisor_id"], row["last_name"], row["first_name"], row["middle_name"], EARL) # print("Process Job Returned " + str(job_rslt)) jobcount = jobcount + job_rslt # ############################################### # # STEP 2f-- # # Do updates to second job_rec (jobrec.py) # ############################################### # print("In secondary Job Rec") # # if row["home_cost_number2"] != '': # fn_process_second_job(row["carth_id"], # row["worker_cat_code"], # row["home_cost_number2"], # row["job_title_descr"], # row["position_eff_date2"], # row["position_end_date2"], # row["job_function_code"], # row["supervisor_id"], 3, # row["payroll_name"], EARL) # secondjobcount = secondjobcount + 1 # print("Second Job for " + row["carth_id"] # + " Job = " + row["home_cost_number2"]) # elif row["home_cost_number3"] != '': # fn_process_second_job( # row["carth_id"], # row["worker_cat_code"], # row["home_cost_number3"], # row["job_title_descr"], # row["position_eff_date3"], # row["position_end_date3"], # row["job_function_code"], # row["supervisor_id"], 4, # row["payroll_name"], EARL) # secondjobcount = secondjobcount + 1 # # elif row["home_cost_number4"] != '': # fn_process_second_job( # row["carth_id"], # row["worker_cat_code"], # row["home_cost_number4"], # row["job_title_descr"], # row["position_eff_date4"], # row["position_end_date4"], # row["job_function_code"], # row["supervisor_id"], 5, # row["payroll_name"], EARL) # secondjobcount = secondjobcount + 1 ################################################## # STEP 2g-- # Add SCHL record to aa_rec # (Directory Name - Location) ################################################## # Check to see if one exists # If not write new # May include carthage work phone, ext, # building code and room (LH 444) print("Begin Schl record process") loc_code = { '1': 'LH', '2': 'CC', '3': 'DSC', '4': 'HL', '5': 'JAC', '6': 'TWC', '7': 'TC', '11': 'MADR', '15': 'SC', '16': 'TA' } #print(str(loc_code)) loc = loc_code.get(row["location_code"]) #print("loc = " + str(loc)) fn_set_schl_rec(row["carth_id"], row["payroll_name"], "", "", loc, row["room_number"], EARL) ###################################################### # Finally for student employees ##################################################### else: ################################################ # Do updates to cvid_rec (cvidrec.py) for students # for provisioning ################################################ fn_process_cvid(row["carth_id"], row["file_number"], row["ssn"], row["employee_assoc_id"], EARL) fn_clear_logger() adpcount = adpcount + 1 # set destination directory for which the sql file # will be archived to archived_destination = ('{0}apdtocx_output-{1}.sql'.format( settings.ADP_CSV_ARCHIVED, datetimestr)) # set name for the sqloutput file sqloutput = ('{0}/apdtocx_output.sql'.format(os.getcwd())) # Check to see if sql file exists, if not send Email if os.path.isfile("apdtocx_output.sql") != True: # there was no file found on the server SUBJECT = '[APD To CX Application] failed' BODY = "There was no .sql output file to move." # sendmail( # settings.ADP_TO_EMAIL,settings.ADP_FROM_EMAIL, # BODY, SUBJECT # ) fn_write_log("There was no .sql output file to move.") else: # rename and move the file to the archive directory shutil.move(sqloutput, archived_destination) ################################################################## # The last step - move last to archive, rename new file to _last ################################################################## if not test: adptocx_archive = ('{0}adptocxlast_{1}.csv'.format( settings.ADP_CSV_ARCHIVED, datetimestr)) shutil.move(last_adp_file, adptocx_archive) adptocx_rename = ('{0}ADPtoCXLast.csv'.format( settings.ADP_CSV_OUTPUT)) shutil.move(new_adp_file, adptocx_rename) print("---------------------------------------------------------") print("ADP Count = " + str(adpcount)) print("CCADP Count = " + str(ccadpcount)) print("ID Count = " + str(idcount)) print("CVID Count = " + str(cvidcount)) print("Email Count = " + str(emailcount)) print("CELL Count = " + str(phonecount)) print("Job Count = " + str(jobcount)) print("Profile Count = " + str(profilecount)) print("Job2 Count = " + str(secondjobcount)) except Exception as e: fn_write_error("Error in adptocx.py, Error = " + e.message) print(e)
def home(request): if settings.ACADEMIC_YEAR_LIMBO: return render( request, 'closed.html', ) # for when faculty/staff sign in here or not student found data = {} # create database session session = get_session(EARL) user = request.user # fetch college id from user object cid = user.id # retrieve student manager (or create a new one if none exists) manager = get_manager(session, cid) # intialise some things my_sports = '' student = None adult = False # get academic term term = get_term() # get student sql = ''' {} WHERE id_rec.id = "{}" AND stu_serv_rec.yr = "{}" AND UPPER(stu_serv_rec.sess) = "{}" AND cc_student_medical_manager.created_at > "{}" '''.format( STUDENT_VITALS, cid, term['yr'], term['sess'], settings.START_DATE ) engine = get_engine(EARL) obj = engine.execute(sql) student = obj.fetchone() if student: # save some things to Django session: request.session['gender'] = student.sex # sports needs a python list if manager.sports: my_sports = manager.sports.split(',') # adult or minor? if we do not have a DOB, default to minor if student.birth_date: age = calculate_age(student.birth_date) if age >= 18: adult = True # show the corresponding list of sports if student.sex == 'F': sports = SPORTS_WOMEN else: sports = SPORTS_MEN # quick switch for minor age students if request.GET.get('minor'): adult = False # context dict data = { 'switch_earl': reverse_lazy('set_val'), 'student':student, 'manager':manager, 'sports':sports, 'my_sports':my_sports, 'adult':adult,'sql':sql } # emergency contact modal form sql = 'SELECT * FROM aa_rec WHERE aa in {} AND id="{}"'.format( ENS_CODES, cid ) objs = session.execute(sql) for o in objs: row = {} for field in ENS_FIELDS: try: value = getattr(o, field).decode('cp1252').encode('utf-8') except: value = getattr(o, field) row[field] = value data[o.aa] = row data['mobile_carrier'] = MOBILE_CARRIER data['relationship'] = RELATIONSHIP data['solo'] = True else: if not in_group(user, 'carthageStaffStatus') and \ not in_group(user, 'carthageFacultyStatus'): # could not find student by college_id data = { 'student':student,'sports':SPORTS,'solo':True,'adult':adult } # notify managers send_mail( request, settings.HOUSING_EMAIL_LIST, u'[Lost] Student: {} {} ({})'.format( user.first_name, user.last_name, cid ), user.email, 'alert_email.html', request, [settings.MANAGERS[0][1],] ) session.close() return render(request, 'home.html', data)
def fn_process_profile_rec(id, ethnicity, sex, race, birth_date, prof_last_upd_date, EARL): engine = get_engine(EARL) try: ########################################################## # Find out if record exists to determine update vs insert ########################################################## prof_rslt = fn_validate_field(id, "id", "id", "profile_rec", "integer", EARL) print("Prof Result = " + str(prof_rslt)) # create race dictionary if race is None: # fn_write_error("Race is None") v_race = 'UN' else: v_race = race # create ethnicity dictionary if ethnicity is None: is_hispanic = 'N' # elif ethnicity == '': # is_hispanic = 'N' else: is_hispanic = ethnicity # print(is_hispanic) if birth_date is None or birth_date.strip() == "" or len( birth_date) == 0: b_date = None print("Empty Birthdate") age = None else: age = fn_calculate_age(birth_date) b_date = birth_date # print("Age = " + str(age)) if prof_rslt is None or prof_rslt == 0: # Insert or update as needed q_insert_prof_rec = ''' INSERT INTO profile_rec (id, sex, race, hispanic, birth_date, age, prof_last_upd_date) VALUES (?, ?, ?, ?, ?, ?, ?) ''' q_ins_prof_args = (id, sex, v_race, is_hispanic, b_date, age, prof_last_upd_date) # print(q_insert_prof_rec) # print(q_ins_prof_args) engine.execute(q_insert_prof_rec, q_ins_prof_args) fn_write_log("Inserted into profile_rec table values " + str(id) + ", " + v_race + ", " + str(is_hispanic)) # print("Inserted into profile_rec table values " + str(id) + "," # + v_race + ", " + str(is_hispanic)) scr.write(q_insert_prof_rec + '\n' + str(q_ins_prof_args) + '\n') else: q_update_prof_rec = ''' UPDATE profile_rec SET sex = ?, hispanic = ?, race = ?, birth_date = ?, age = ?, prof_last_upd_date = ? WHERE id = ?''' q_upd_prof_args = (sex, is_hispanic, v_race, b_date, age, prof_last_upd_date, id) # print(q_update_prof_rec) # print(q_upd_prof_args) engine.execute(q_update_prof_rec, q_upd_prof_args) fn_write_log("Updated profile_rec table values " + str(id) + "," + v_race + ", " + str(is_hispanic)) scr.write(q_update_prof_rec + '\n' + str(q_upd_prof_args) + '\n') return 1 except Exception as e: print(e) fn_write_error("Error in profilerec.py for ID " + str(id) + ", Error = " + e.message) return 0