def hour_match(inputs, pattern): """ This function is used to create instance for hour match score count function. Args: inputs (dict): Qualified shifter data and vacated shift, shifter data as dictionary. pattern (list): Score pattern. Return: dict: The instance for calculate hour match score. """ try: shifter_data = inputs["qualified_shifter"]["confirmedshifthours"] vacated_data = inputs["vacated_params"] shifter_hour_list = [] for data in shifter_data: status = DateTimeDuration.is_date_match( data, vacated_data, "date") if status is True: shifter_hour_list = DateTimeDuration.get_hour_list( data["starttime"], data["endtime"]) vacated_hour_list = DateTimeDuration.get_hour_list( vacated_data["startTime"], vacated_data["endTime"]) instance = { "hour_match": { "input": { "shifter_available_hour": shifter_hour_list, "vacated_shifter_hour": vacated_hour_list }, "pattern": pattern } } return instance except BaseException: return None
def week_overtime_risk(inputs, discualify_params): """ This function is used to create instance for shift week overtime risk filter function. Args: inputs (dict): Shifter data and vacated shift data as dictionary. discualify_params (list): Disqualify pattern. Return: Instance: The return value. """ try: shifter_shift_data = inputs["shifter"]["confirmedshifthours"] vacated_data = inputs["vacated_params"] vacated_duration = DateTimeDuration.get_duration( vacated_data["startTime"], vacated_data["endTime"], "hour") shifter_week_hour = 0 for data in shifter_shift_data: status = DateTimeDuration.is_date_match( data, vacated_data, "week") if status is True: duration = DateTimeDuration.get_duration( data["starttime"], data["endtime"], "hour") shifter_week_hour = shifter_week_hour + duration instance = { "week_overtime_risk": { "shifter_week_hour": shifter_week_hour, "vacated_hour": vacated_duration, "disqualify_params": discualify_params } } return instance except BaseException: return None
def convenience(inputs, pattern): """ This function is used to create instance for convenience score function. Args: inputs (dict): Qualified shifter data and vacated shifter, shift data as dictionary. pattern (list): Score pattern. Return: dict: The instance for calculate convenience score value. """ try: shifter_data = inputs["qualified_shifter"]["confirmedshifthours"][ 0] vacated_data = inputs["vacated_params"] shifter_hour_list = DateTimeDuration.get_hour_list( shifter_data["starttime"], shifter_data["endtime"]) vacated_hour_list = DateTimeDuration.get_hour_list( vacated_data["startTime"], vacated_data["endTime"]) instance = { "convenience": { "input": { "shifter_branch": shifter_data["existingshifterjpid"], "Vacated_shift_branch": vacated_data["jobProviderId"], "shifter_shift_hour": shifter_hour_list, "vacated_shift_hours": vacated_hour_list }, "pattern": pattern } } return instance except BaseException: return None
def shift_overlap(inputs, discualify_params): """ This function is used to create instance for shift overlap filter function. Args: inputs (dict): Shifter data and vacated shift data as dictionary. discualify_params (list): Disqualify pattern. Return: Instance: The return value. """ try: shifter_shift_data = inputs["shifter"]["confirmedshifthours"] vacated_data = inputs["vacated_params"] vacated_hour_list = DateTimeDuration.get_hour_list( vacated_data["startTime"], vacated_data["endTime"]) shifter_hour_list = [] for data in shifter_shift_data: status = DateTimeDuration.is_date_match( data, vacated_data, "date") if status is True: shifter_hour_list = DateTimeDuration.get_hour_list( data["starttime"], data["endtime"]) instance = { "shift_overlap": { "shifter_hour_list": shifter_hour_list, "vacated_hour_list": vacated_hour_list, "disqualify_params": discualify_params } } return instance except BaseException: return None
def test_get_datetime_iso_str(self): print( "======================== Test get_datetime_iso_str function ==================" ) datetime_str = DateTimeDuration.get_datetime_iso_str(DATETIME) self.type_datetime = type(datetime_str) assert self.type_datetime.__name__ == 'str'
def test_is_iso_formate(self): print( "======================== Test is_iso_formate function ==================" ) self.response = DateTimeDuration.is_iso_formate( TEST_DATA["start_time"]) assert self.response is True
def test_get_duration(self): print( "======================== Test get_duration function ==================" ) self.response = DateTimeDuration.get_duration(TEST_DATA["start_time"], TEST_DATA["end_time"], "hour") assert self.response == 24
def test_get_datetime_obj(self): print( "======================== Test get_datetime_obj function ==================" ) datetime_obj = DateTimeDuration.get_datetime_obj( TEST_DATA["start_time"]) self.type_datetime = type(datetime_obj) assert self.type_datetime.__name__ == 'datetime'
def duration_difference(inputs, discualify_params): """ This function is used to create instance for shifter flexibility filter function. Args: inputs (dict): Shifter data and vacated shift data as dictionary. discualify_params (list): Disqualify pattern. Return: Instance: The return value. """ try: shifter_shift_data = inputs["shifter"]["confirmedshifthours"] vacated_data = inputs["vacated_params"] duration_difference_list = [] for data in shifter_shift_data: status = DateTimeDuration.is_date_match( data, vacated_data, "date") if status is True: shifter_start_to_shift_end = DateTimeDuration.get_duration( data["starttime"], vacated_data["endTime"], "hour") shifter_end_to_shift_start = DateTimeDuration.get_duration( data["endtime"], vacated_data["startTime"], "hour") duration_difference_list.append( abs(shifter_start_to_shift_end)) duration_difference_list.append( abs(shifter_end_to_shift_start)) instance = { "duration_difference": { "duration_difference_list": duration_difference_list, "duration_difference_range": discualify_params["duration_difference_range"] } } return instance except BaseException: return None
def pay_match(inputs, pattern): """ This function is used to create instance for pay match score function. Args: inputs (dict): Qualified shifter data and vacated shifter, shift data as dictionary. pattern (list): Score pattern. Return: dict: The instance for calculate pay match score. """ try: shifter_data = inputs["qualified_shifter"] vacated_data = inputs["vacated_params"] vacated_pay_rate = vacated_data["rate"] shifter_pay_rate = 0 pay_type = None vacated_date = DateTimeDuration.get_datetime_obj( vacated_data["startTime"]) vacated_day = vacated_date.weekday() for data in shifter_data["shifteravailability"]: if data["day"] == vacated_day: shifter_pay_rate = data["minimumsalary"] pay_type = data["minimumsalarytype"] instance = { "pay_match": { "input": { "shifter_pref_pay": vacated_pay_rate, "vacated_shift_pay": shifter_pay_rate, "pay_type": pay_type }, "pattern": pattern } } return instance except BaseException: return None