diff --git a/scripts/UserImageDownload.py b/scripts/UserImageDownload.py new file mode 100644 index 0000000..1474a35 --- /dev/null +++ b/scripts/UserImageDownload.py @@ -0,0 +1,129 @@ +import os +import firebase_admin +from firebase_admin import credentials, firestore +import pandas as pd +from urllib.request import urlopen +import datetime +import tkinter as tk +from tkinter import filedialog + +# Initialize Firebase Admin SDK +cred = credentials.Certificate(r'C:\Users\smila\PycharmProjects\pythonProject\hpos-prod-firebase-adminsdk-bionp-5486f7becd.json') # Replace with your own service account key path +firebase_admin.initialize_app(cred) + +# Get a reference to the Firestore database +db = firestore.client() + +# Specify the collections +patient_collection = db.collection("patientData") +test_collection = db.collection("testData") + +# Create a tkinter root window (hidden) +root = tk.Tk() +root.withdraw() + +# Ask the user to select the base folder where images and data will be saved +base_output_folder = filedialog.askdirectory(title="Select Base Output Folder") + +# Get user-defined date ranges +start_date = "2023-08-01" +end_date = "2023-08-10" + +# Parse the date range to get a list of days +start_datetime = datetime.datetime.strptime(start_date, "%Y-%m-%d") +end_datetime = datetime.datetime.strptime(end_date, "%Y-%m-%d") +date_range = [start_datetime + datetime.timedelta(days=x) for x in range((end_datetime - start_datetime).days + 1)] + +# Iterate through each day +for date in date_range: + current_date = date.strftime("%Y-%m-%d") + output_folder = os.path.join(base_output_folder, current_date) + os.makedirs(output_folder, exist_ok=True) + + print(f"Processing data for {current_date}...") + + # Query Firestore for patient data + query = patient_collection.where("createdAt", ">=", current_date).where("createdAt", "<", (date + datetime.timedelta(days=1)).strftime("%Y-%m-%d")) + patient_docs = query.stream() + + # Initialize a list to hold the combined data + data = [] + + # Iterate through patient documents + for patient_doc in patient_docs: + patient_data = patient_doc.to_dict() + patient_id = patient_data["_id"] + + # Query the document from testData collection based on the common _id + test_docs = test_collection.where("_id", "==", patient_id).stream() + + # Iterate through test documents + for test_doc in test_docs: + test_data = test_doc.to_dict() + + # Combine the data from both collections into a single dictionary + combined_data = {**patient_data, **test_data} + + # Access specific attributes from the combined data + csv_path = combined_data.get("csvPath", "") + if csv_path and not csv_path.startswith("http"): + # Perform the desired action + print("CSV path does not start with 'http'.") + + # Append the combined_data dictionary to the list + data.append(combined_data) + + # Download images separately and store them in the specified folder + user_image_url = combined_data.get("userImageURL", "") + if user_image_url and user_image_url.startswith("http"): + image_data = urlopen(user_image_url).read() + image_filename = f"{patient_id}.jpg" # Use only patient ID as the filename + image_path = os.path.join(output_folder, image_filename) + with open(image_path, "wb") as image_file: + image_file.write(image_data) + + # Convert the data to a DataFrame + df = pd.DataFrame(data) + + # Rename columns + df.rename(columns={ + "name": "Name", + "abhaId": "ABHA ID", + "birthYear": "Age", + "gender": "Gender", + "category": "Category", + "maritalStatus": "Marital Status", + "careOf": "Care-of", + "city": "Address", + "district": "District", + "state": "State", + "pinCode": "Pincode", + "phoneNumber": "Mobile Number", + "bloodGroup": "Blood group", + "result": "Test Result" + }, inplace=True) + + # Select specific columns + selected_columns = [ + "Name", "ABHA ID", "Age", "Gender", "Category", "Marital Status", + "Care-of", "Address", "District", "State", "Pincode", "Mobile Number", + "Blood group", "Test Result" + ] + + # Check if selected columns are present in the DataFrame + missing_columns = [col for col in selected_columns if col not in df.columns] + if missing_columns: + print(f"Missing columns: {missing_columns}") + else: + # Create a new DataFrame with selected columns + df = df[selected_columns] + + # Save the DataFrame to a CSV file + output_filename = f"data_{current_date}.csv" + output_path = os.path.join(output_folder, output_filename) + df.to_csv(output_path, index=False) + + print(f"Data and images for {current_date} saved to '{output_folder}'") + +# Close the Firebase Admin SDK +firebase_admin.delete_app(firebase_admin.get_app())