1010from utils .screening_subject_page_searcher import verify_subject_event_status_by_nhs_no
1111from utils .oracle .oracle_specific_functions import get_nhs_no_from_batch_id
1212from utils .oracle .oracle import OracleDB
13+ from utils .pdf_reader import extract_nhs_no_from_pdf
1314import os
1415import pytest
1516from playwright .sync_api import Page
1617import logging
18+ import pandas as pd
1719
1820
1921def batch_processing (
@@ -22,6 +24,7 @@ def batch_processing(
2224 batch_description : str ,
2325 latest_event_status : str ,
2426 run_timed_events : bool = False ,
27+ get_subjects_from_pdf : bool = False ,
2528) -> None :
2629 """
2730 This util is used to process batches. It expects the following inputs:
@@ -39,8 +42,9 @@ def batch_processing(
3942
4043 batch_description_cells = page .locator (f"//td[text()='{ batch_description } ']" )
4144
42- if batch_description_cells .count () == 0 and page .locator (
43- "td" , has_text = "No matching records found"
45+ if (
46+ batch_description_cells .count () == 0
47+ and page .locator ("td" , has_text = "No matching records found" ).is_visible ()
4448 ):
4549 pytest .fail (f"No { batch_type } { batch_description } batch found" )
4650
@@ -55,41 +59,31 @@ def batch_processing(
5559 logging .info (
5660 f"Successfully found open '{ batch_type } - { batch_description } ' batch"
5761 )
58- try :
59- logging .info (
60- f"Attempting to get NHS Numbers for batch { link_text } from the DB"
61- )
62+ if not get_subjects_from_pdf :
63+ logging .info (f"Getting NHS Numbers for batch { link_text } from the DB" )
6264 nhs_no_df = get_nhs_no_from_batch_id (link_text )
63- logging .info (
64- f"Successfully retrieved NHS Numbers from batch { link_text } "
65- )
66- except Exception as e :
67- pytest .fail (
68- f"Failed to retrieve NHS Numbers from batch { link_text } , { str (e )} "
69- )
7065 link .click ()
7166 break
7267 elif (i + 1 ) == batch_description_cells .count ():
7368 pytest .fail (f"No open '{ batch_type } - { batch_description } ' batch found" )
7469
75- prepare_and_print_batch (page , link_text )
70+ if get_subjects_from_pdf :
71+ nhs_no_df = prepare_and_print_batch (page , link_text , get_subjects_from_pdf )
72+ else :
73+ prepare_and_print_batch (page , link_text , get_subjects_from_pdf )
7674
7775 check_batch_in_archived_batch_list (page , link_text )
7876
7977 first_nhs_no = nhs_no_df ["subject_nhs_number" ].iloc [0 ]
80- try :
81- verify_subject_event_status_by_nhs_no (page , first_nhs_no , latest_event_status )
82- logging .info (
83- f"Successfully verified NHS number { first_nhs_no } with status { latest_event_status } "
84- )
85- except Exception as e :
86- pytest .fail (f"Verification failed for NHS number { first_nhs_no } : { str (e )} " )
78+ verify_subject_event_status_by_nhs_no (page , first_nhs_no , latest_event_status )
8779
8880 if run_timed_events :
8981 OracleDB ().exec_bcss_timed_events (nhs_no_df )
9082
9183
92- def prepare_and_print_batch (page : Page , link_text ) -> None :
84+ def prepare_and_print_batch (
85+ page : Page , link_text : str , get_subjects_from_pdf : bool = False
86+ ) -> pd .DataFrame | None :
9387 """
9488 This method prepares the batch, retreives the files and confirms them as printed
9589 Once those buttons have been pressed it waits for the message 'Batch Successfully Archived'
@@ -114,6 +108,8 @@ def prepare_and_print_batch(page: Page, link_text) -> None:
114108 file = download_file .suggested_filename
115109 # Wait for the download process to complete and save the downloaded file in a temp folder
116110 download_file .save_as (file )
111+ if file .endswith (".pdf" ) and get_subjects_from_pdf :
112+ nhs_no_df = extract_nhs_no_from_pdf (file )
117113 os .remove (file ) # Deletes the file after extracting the necessary data
118114 except Exception as e :
119115 pytest .fail (f"No retrieve button available to click: { str (e )} " )
@@ -137,6 +133,8 @@ def prepare_and_print_batch(page: Page, link_text) -> None:
137133 except Exception as e :
138134 pytest .fail (f"Batch successfully archived message is not shown: { str (e )} " )
139135
136+ return nhs_no_df if "nhs_no_df" in locals () else None
137+
140138
141139def check_batch_in_archived_batch_list (page : Page , link_text ) -> None :
142140 """
0 commit comments