File size: 6,375 Bytes
478fd8c
 
 
 
 
 
 
 
 
 
 
 
ec04543
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478fd8c
 
 
 
 
 
 
 
 
 
349ff65
 
478fd8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ec04543
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478fd8c
 
 
 
 
 
 
 
 
 
ec04543
 
 
 
 
 
 
478fd8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
from pathlib import Path
import json
from queries import query_formularios, query_usuarios, get_macros_differences
                     
formularios_weight_difference_path = 'anonymized_formularios_weight_difference'
usuarios_macros_difference_path = 'usuarios_macros_difference'

# Find users dates that match the query
def find_user_dates_matches(query, debug=False):
    # Create a dictionary to store the matches
    matches_dict = {}

    # Get the query values
    query_cumplimiento_entrenamiento = None
    query_cumplimiento_dieta = None
    query_compromiso = None
    query_esfuerzo_dieta = None
    query_objetivo = None
    for query_item in query:
        query_item_key = list(query_item.keys())[0]
        query_item_value = query_item[query_item_key]['value']
        if query_item_key == 'cumplimientoEntrenamiento':
            query_cumplimiento_entrenamiento = query_item_value
        elif query_item_key == 'cumplimientoDieta':
            query_cumplimiento_dieta = query_item_value
        elif query_item_key == 'compromiso':
            query_compromiso = query_item_value
        elif query_item_key == 'esfuerzoParaCumplirDieta':
            query_esfuerzo_dieta = query_item_value
        elif query_item_key == 'objetivo':
            query_objetivo = query_item_value

    # If cumplimiento entrenamiento or cumplimiento dieta is mal, then return empty dict
    if query_cumplimiento_entrenamiento == 'mal' or query_cumplimiento_dieta == 'mal':
        print("[find_user_dates_matches] Cumplimiento entrenamiento or cumplimiento dieta is \"mal\"")
        return matches_dict
    
    # If query_esfuerzo_dieta is costo subir macros, then return subir macros dict
    if query_esfuerzo_dieta == 'costo subir macros':
        print("[find_user_dates_matches] query_esfuerzo_dieta is \"costo subir macros\"")
        subir_macros_dict = {}
        subir_macros_dict['costo subir macros'] = []
        return subir_macros_dict

    # If query_esfuerzo_dieta is costo bajar macros, then return bajar macros dict
    elif query_esfuerzo_dieta == 'costo bajar macros':
        print("[find_user_dates_matches] query_esfuerzo_dieta is \"costo bajar macros\"")
        bajar_macros_dict = {}
        bajar_macros_dict['costo bajar macros'] = []
        return bajar_macros_dict

    # Get all the files in the formularios_path
    files = Path(formularios_weight_difference_path).glob('*.json')
    files = list(files)
    files.sort()

    # Iterate over the user data
    for i, file in enumerate(files):
        with open(file, 'r') as f:
            data = json.load(f)

        if file.name == '[email protected]':
            dates = query_formularios(data, query, debug=True, file_name=file.name)
        else:
            dates = query_formularios(data, query, debug=debug)
        if len(dates) > 0:
            file_name = file.name
            matches_dict[file_name] = dates
            if debug:
                if i > 0:
                    print("")
                print(f"{file_name} has {len(dates)} dates that match the query:")
                for date in dates:
                    print(f"\t{date}")
                    for query_item in query:
                        key = list(query_item.keys())[0]
                        data_value = data[date][key]
                        query_value = query_item[key]['value']
                        operator = query_item[key]['operator']
                        if type(data_value) == int or type(data_value) == float:
                            data_value = f"{data_value:.2f}"
                        if operator == 'in' or operator == 'contains':
                            print(f"\t\t{key} data: \"{data_value}\", query: \"{query_value}\"")
                        else:
                            print(f"\t\t{key} data: \"{data_value}\" \"{operator}\" query: \"{query_value}\"")
    
    return matches_dict

def find_macros_that_match_dates_of_users(matches_dict, debug=False):
    # Create a list to store the macros differences
    macros_differences_list = []
    macros_differences_list_subir_macros = ["0 20 0 0 0 0 20 0"]
    macros_differences_list_bajar_macros = ["0 -20 0 0 0 0 -20 0"]

    # If matches_dict is empty, then return empty list
    if len(matches_dict) == 0:
        print("[find_macros_that_match_dates_of_users] matches_dict is empty")
        return macros_differences_list
    
    # If matches_dict is costo subir macros, then return empty list
    if list(matches_dict.keys())[0] == 'costo subir macros':
        print("[find_macros_that_match_dates_of_users] matches_dict is \"costo subir macros\"")
        return macros_differences_list_subir_macros
    elif list(matches_dict.keys())[0] == 'costo bajar macros':
        print("[find_macros_that_match_dates_of_users] matches_dict is \"costo bajar macros\"")
        return macros_differences_list_bajar_macros

    # Iterate over the matches dictionary
    for match_user in matches_dict:
        if debug: print(f"match_user: {match_user}")

        # Get dates list
        dates_list_from_user = matches_dict[match_user]

        # Get user data
        user_data = usuarios_macros_difference_path + '/' + match_user

        # Check if user data exists
        if not Path(user_data).exists():
            if debug: print(f"User data not found: {user_data}")
            continue

        # Load user data
        user_data = json.load(open(user_data, 'r'))

        # Query usuarios
        dates_that_match = query_usuarios(user_data, dates_list_from_user, debug=False, limit_days=31)
        if len(dates_that_match) > 0:
            if debug: print(f"\tdates that match: {dates_that_match}")

            # Get macros differences
            macros_differences = get_macros_differences(user_data, dates_that_match)
            if type(macros_differences) == list:
                if len(macros_differences) > 0:
                    for macros_difference in macros_differences:
                        macros_differences_list.append(macros_difference)
                        if debug: print(f"\tmacros_differences: {macros_difference}")
                    if debug: print("")
            else:
                macros_differences_list.append(macros_differences)
                if debug: print(f"\tmacros_differences: {macros_differences}\n")
    
    return macros_differences_list