| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/usr/bin/env python3
- import pandas as pd
- import os
- import sys
- import datetime
- version_major=0
- version_minor=0
- version_serial=2
- version = '.'.join([str(version_major),str(version_minor),str(version_serial)])
- def help_file():
- print('')
- print('Usage: ')
- print('')
- print('Download the Master Pilot Seniority List from CWA-')
- print(' CWA -> Reports -> System Seniority -> Sort By Seniority Number ')
- print('')
- print('Download the monthly Award file from Crew Planning in .pdf format')
- print('')
- print('Run SeniorityCalculator.py using these two files as inputs')
- print('')
- print('Run analyse.py using the resultant .csv file from SeniorityCalculator.py')
- print('')
- print('The results show the current master seniority to hold various domicile relative seniorities as a Captian')
- print('')
- def analyse_CA_seniority(mergedfile='merged.csv', empid=88292):
- print('')
- print('Master Relative Seniority to hold Domicile Seniority')
- print('Version: ' + version)
- print('')
- if os.path.exists(mergedfile):
- #Read csv file into DataFrame
- df_merged = pd.read_csv(mergedfile)
- else:
- print("Cannot find file: " + mergedfile)
- print("Run python3 parse2.py to build appropriate files")
- sys.exit()
- # Get list of domiciles for iteration
- domiciles = df_merged.Dom.unique()
- #Get Total number of pilots on Seniority List
- intMaxSen = int(df_merged.TotalSen.max())
- SenChart = []
- chkpercents = []
- x = range(100, 1, -5)
- for n in x:
- chkpercents.append(n)
- for domicile in domiciles:
- column_names=['Domicile']
- #Populate Dataframe with each domicile's CA list
- df_domicile = df_merged.loc[ (df_merged['Dom'] == str(domicile).upper()) & (df_merged['Seat'] == str('CA').upper()) ]
- percent_results = []
- new_seniority = []
- new_seniority.append(domicile)
- for item in chkpercents:
- sen = int(item)/100
- domsen = int(round(sen * df_domicile.DomSen.max()))
- totalsen = float(df_domicile.loc[df_merged['DomSen'] == domsen].TotalSen.values[0]) / float(intMaxSen) * 100
- new_seniority.append(totalsen)
- column_names.append(str(item))
- SenChart.append(new_seniority)
- dfSeniority = pd.DataFrame(SenChart)
- dfSeniority.columns=column_names
- dfSeniority = dfSeniority.round(2)
- print(dfSeniority.to_string(index=False))
- print('')
- ## Check inputs ##
- if not len(sys.argv) > 1:
- help_file()
- raise Exception('Missing Arguments filename.csv and [optional] employee number')
- if len(sys.argv) > 1 and not sys.argv[1].lower().endswith('.csv'):
- raise Exception('Command needs a CSV filename to open')
- if not os.path.exists(sys.argv[1]):
- raise Exception('File name does not exist.')
- if len(sys.argv) > 2:
- empid = sys.argv[2].strip()
- if not empid.isdigit(): #check if string is digit
- if empid[0].lower() == 'e': #check if string starts with an 'e'
- empid = empid[1: ] #strip leading char
- if not empid.isdigit(): #recheck if its a digit now
- raise Exception('Employee numbers is not in a valid format')
- else:
- raise Exception('Employee number must be a digit or start with an e')
- else:
- empid=88291
- analyse_CA_seniority(sys.argv[1], empid)
- ##Known Errors:
- # OAK has OAK and OAK ETOPS listngs on vacsen causing duplicte names on merged list
- # CAdt has a trailing zero for some reason
|