diff --git a/src/submissions/backend/db/models/kits.py b/src/submissions/backend/db/models/kits.py index bae23dc..8e51087 100644 --- a/src/submissions/backend/db/models/kits.py +++ b/src/submissions/backend/db/models/kits.py @@ -4,6 +4,7 @@ All kit and reagent related models from . import Base from sqlalchemy import Column, String, TIMESTAMP, JSON, INTEGER, ForeignKey, Interval, Table, FLOAT from sqlalchemy.orm import relationship +from datetime import date import logging logger = logging.getLogger(f'submissions.{__name__}') @@ -100,9 +101,11 @@ class Reagent(Base): place_holder = self.expiry + self.type.eol_ext # logger.debug(f"EOL_ext for {self.lot} -- {self.expiry} + {self.type.eol_ext} = {place_holder}") except TypeError as e: - logger.debug(f"We got a type error setting {self.lot} expiry: {e}.") + place_holder = date.today() + logger.debug(f"We got a type error setting {self.lot} expiry: {e}. setting to today for testing") except AttributeError as e: - logger.debug(f"We got an attribute error setting {self.lot} expiry: {e}.") + place_holder = date.today() + logger.debug(f"We got an attribute error setting {self.lot} expiry: {e}. Setting to today for testing") return { "type": type, "lot": self.lot, diff --git a/src/submissions/backend/excel/reports.py b/src/submissions/backend/excel/reports.py index 3de176e..4b3c52b 100644 --- a/src/submissions/backend/excel/reports.py +++ b/src/submissions/backend/excel/reports.py @@ -99,7 +99,7 @@ def convert_data_list_to_df(ctx:dict, input:list[dict], subtype:str|None=None) - """ df = DataFrame.from_records(input) - df.to_excel("test.xlsx", engine="openpyxl") + # df.to_excel("test.xlsx", engine="openpyxl") safe = ['name', 'submitted_date', 'genus', 'target'] for column in df.columns: if "percent" in column: @@ -139,6 +139,7 @@ def df_column_renamer(df:DataFrame) -> DataFrame: def displace_date(df:DataFrame) -> DataFrame: """ This function serves to split samples that were submitted on the same date by incrementing dates. + It will shift the date forward by one day if it is the same day as an existing date in a list. Args: df (DataFrame): input dataframe composed of control records @@ -149,17 +150,23 @@ def displace_date(df:DataFrame) -> DataFrame: logger.debug(f"Unique items: {df['name'].unique()}") # get submitted dates for each control dict_list = [dict(name=item, date=df[df.name == item].iloc[0]['submitted_date']) for item in sorted(df['name'].unique())] + previous_dates = [] for ii, item in enumerate(dict_list): try: - check = item['date'] == dict_list[ii-1]['date'] + # check = item['date'] == dict_list[ii-1]['date'] + check = item['date'] in previous_dates except IndexError: check = False if check: + # occurences = previous_dates.count(item['date']) logger.debug(f"We found one! Increment date!\n\t{item['date'] - timedelta(days=1)}") # get df locations where name == item name mask = df['name'] == item['name'] # increment date in dataframe df.loc[mask, 'submitted_date'] = df.loc[mask, 'submitted_date'].apply(lambda x: x + timedelta(days=1)) + previous_dates.append(item['date'] + timedelta(days=1)) + else: + previous_dates.append(item['date']) return df @@ -188,8 +195,8 @@ def drop_reruns_from_df(ctx:dict, df: DataFrame) -> DataFrame: Returns: DataFrame: dataframe with originals removed in favour of repeats. """ - sample_names = get_unique_values_in_df_column(df, column_name="name") if 'rerun_regex' in ctx: + sample_names = get_unique_values_in_df_column(df, column_name="name") # logger.debug(f"Compiling regex from: {settings['rerun_regex']}") rerun_regex = re.compile(fr"{ctx['rerun_regex']}") for sample in sample_names: @@ -199,6 +206,6 @@ def drop_reruns_from_df(ctx:dict, df: DataFrame) -> DataFrame: first_run = re.sub(rerun_regex, "", sample) # logger.debug(f"First run: {first_run}") df = df.drop(df[df.name == first_run].index) - return df - else: - return None + return df + # else: + # return df diff --git a/src/submissions/frontend/__init__.py b/src/submissions/frontend/__init__.py index 63af3f2..d5dd5b4 100644 --- a/src/submissions/frontend/__init__.py +++ b/src/submissions/frontend/__init__.py @@ -34,7 +34,7 @@ class App(QMainWindow): # indicate version and database connected in title bar try: self.title = f"Submissions App (v{ctx['package'].__version__}) - {ctx['database']}" - except AttributeError: + except (AttributeError, KeyError): self.title = f"Submissions App" # set initial app position and size self.left = 0 diff --git a/src/submissions/frontend/visualizations/control_charts.py b/src/submissions/frontend/visualizations/control_charts.py index 7a41637..a70f1ce 100644 --- a/src/submissions/frontend/visualizations/control_charts.py +++ b/src/submissions/frontend/visualizations/control_charts.py @@ -37,7 +37,7 @@ def create_charts(ctx:dict, df:pd.DataFrame, ytitle:str|None=None) -> Figure: genera.append("") except IndexError: genera.append("") - df['genus'] = df['genus'].replace({'\*':''}, regex=True) + df['genus'] = df['genus'].replace({'\*':''}, regex=True).replace({"NaN":"Unknown"}) df['genera'] = genera df = df.dropna() # remove original runs, using reruns if applicable