File size: 4,883 Bytes
597fb2d
7d0d991
 
 
6efa259
 
 
c355b8a
 
7d0d991
 
c1f3539
7d0d991
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c1f3539
 
 
7d0d991
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597fb2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456badc
597fb2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import streamlit as st
from src.utils import add_latlng_col, parse_gg_sheet, parse_json_file, is_request_in_list
import pandas as pd

VERIFIED_REQUESTS_URL = st.secrets["VERIFIED_REQUESTS_URL"]
REQUESTS_URL = st.secrets["REQUESTS_URL"]
INTERVENTIONS_URL = st.secrets["INTERVENTIONS_URL"]
INTERVENTIONS_PROCESSED_URL = st.secrets["INTERVENTIONS_PROCESSED_URL"]
VERIFIED_REQUESTS_PROCESSED_URL = st.secrets["VERIFIED_REQUESTS_PROCESSED_URL"]
DOUARS_URL = "data/regions.json"


def load_data(show_unverified, selected_options, options):
    df = parse_gg_sheet(REQUESTS_URL)
    if show_unverified:
        df = add_latlng_col(df, process_column=15)
    interventions_df = parse_gg_sheet(INTERVENTIONS_URL)
    interventions_df = add_latlng_col(interventions_df, process_column="Automatic Extracted Coordinates")
    verified_df = parse_gg_sheet(VERIFIED_REQUESTS_URL)
    verified_df = add_latlng_col(verified_df, process_column="Automatic Extracted Coordinates")
    douar_df = parse_json_file(DOUARS_URL)

    # check if verified requests have been solved
    solved_verified_requests = verified_df[~pd.isnull(verified_df["Status"])]
    verified_df = verified_df[pd.isnull(verified_df["Status"])]

    len_requests = len(df)
    len_interventions = len(interventions_df)
    len_solved_verified_requests = len(solved_verified_requests)

    df["id"] = df.index  # Needed to display request id
    verified_df["id"] = verified_df.index  # Needed to display request id
    # keep rows with at least one request in selected_options
    filtered_df = df[
        df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(
            lambda x: is_request_in_list(x, selected_options, options)
        )
    ]
    filtered_verified_df = verified_df[
        verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options))
    ]
    return (
        df,
        filtered_df,
        interventions_df,
        verified_df,
        filtered_verified_df,
        solved_verified_requests,
        douar_df,
        len_requests,
        len_interventions,
        len_solved_verified_requests,
    )


def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for_help_requests=False, show_link=True):
    """Display the dataframe in a table"""
    col_1, col_2 = st.columns([1, 1])

    # has df's first row
    df_hash = hash(df.iloc[0].to_string())

    with col_1:
        query = st.text_input("🔍 Search for information / بحث عن المعلومات", key=f"query_{df_hash}")
    with col_2:
        if search_id:
            id_number = st.number_input(
                "🔍 Search for an id / بحث عن رقم",
                min_value=0,
                # max_value=len(df),
                value=0,
                step=1,
                key=f"id_{df_hash}",
            )
        if status:
            selected_status = st.selectbox(
                "🗓️ Status / حالة", ["all / الكل", "Done / تم", "Planned / مخطط لها"], key=f"status_{df_hash}"
            )

    if query:
        # Filtering the dataframe based on the query
        mask = df.apply(lambda row: row.astype(str).str.contains(query.lower(), case=False).any(), axis=1)
        display_df = df[mask]
    else:
        display_df = df

    if search_id and id_number:
        display_df = display_df[display_df["id"] == id_number]

    display_df = display_df.drop(drop_cols, axis=1)

    if status:
        target = "Intervention status"
        if selected_status == "Done / تم":
            display_df = display_df[display_df[target] == "Intervention déjà passée / Past intevention"]

        elif selected_status == "Planned / مخطط لها":
            display_df = display_df[display_df[target] != "Intervention déjà passée / Past intevention"]

    st.dataframe(display_df, height=500)
    # Original link to the Google Sheet
    if show_link:
        st.markdown(
            f"To view the full Google Sheet for advanced filtering go to: {data_url} **لعرض الورقة كاملة، اذهب إلى**"
        )
    # if we want to check hidden contact information
    if for_help_requests:
        st.markdown(
            "We are hiding contact information to protect the privacy of the victims. If you are an NGO and want to contact the victims, please contact us at nt3awnoumorocco@gmail.com",
        )
        st.markdown(
            """
                    <div style="text-align: left;">
                    <a href="mailto:nt3awnoumorocco@gmail.com">nt3awnoumorocco@gmail.com</a> نحن نخفي معلومات الاتصال لحماية خصوصية الضحايا. إذا كنت جمعية وتريد الاتصال بالضحايا، يرجى الاتصال بنا على
                    </div>
                    """,
            unsafe_allow_html=True,
        )