mobixconsulting commited on
Commit
2b296dd
1 Parent(s): ef39357

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +167 -0
main.py ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, HTTPException
2
+ from pydantic import BaseModel
3
+ import requests
4
+ import pandas as pd
5
+ from io import StringIO
6
+ import warnings
7
+
8
+ app = FastAPI()
9
+
10
+ class ConsultaParams(BaseModel):
11
+ fecha_inicio_value: str
12
+ fecha_fin_value: str
13
+ cod_donacion: str
14
+
15
+ @app.post("/consulta")
16
+ async def consulta_data(params: ConsultaParams):
17
+ fecha_inicio_value = params.fecha_inicio_value
18
+ fecha_fin_value = params.fecha_fin_value
19
+ cod_donacion = params.cod_donacion
20
+
21
+ # Desactivar todas las advertencias
22
+ warnings.filterwarnings("ignore")
23
+
24
+ # Desactivar las advertencias de FutureWarning
25
+ warnings.simplefilter(action='ignore', category=FutureWarning)
26
+
27
+ # URL sin filtros de fecha
28
+ url = "https://beneficiarios.eatcloud.info/api/abaco/eatc_match_registry?eatc-dona_header_code=_*&_csv"
29
+
30
+ # Realizar la solicitud a la API
31
+ response = requests.get(url)
32
+
33
+ # Verificar si la solicitud fue exitosa (código de estado 200)
34
+ if response.status_code == 200:
35
+ # Obtener la URL del archivo CSV desde la respuesta JSON
36
+ csv_url = response.json()["csv"]
37
+
38
+ # Descargar el archivo CSV
39
+ csv_data = requests.get(csv_url).content
40
+
41
+ # Convertir los datos CSV a un DataFrame de pandas con punto y coma como delimitador
42
+ df_match = pd.read_csv(StringIO(csv_data.decode('latin-1')), delimiter=';')
43
+
44
+ # Generar un archivo CSV con el DataFrame
45
+ #df_match.to_csv('df_match.csv', index=False)
46
+
47
+ # Imprimir mensaje de éxito
48
+ print("Proceso completado: carga datos de match.")
49
+ else:
50
+ print("Error al realizar la solicitud a la API. Código de estado:", response.status_code)
51
+
52
+ # Verificar si ambas fechas fueron ingresadas
53
+ if fecha_inicio_value is not None and fecha_fin_value is not None:
54
+ # Construir la URL con las fechas ingresadas
55
+ url = f"https://donantes.eatcloud.info/api/abaco/eatc_dona_headers?eatc-publication_date[0]={fecha_inicio_value}&eatc-publication_date[1]={fecha_fin_value}&_csv"
56
+
57
+ # Realizar la solicitud a la API
58
+ response = requests.get(url)
59
+
60
+ # Verificar si la solicitud fue exitosa (código de estado 200)
61
+ if response.status_code == 200:
62
+ # Obtener la URL del archivo CSV desde la respuesta JSON
63
+ csv_url = response.json()["csv"]
64
+
65
+ # Descargar el archivo CSV
66
+ csv_data = requests.get(csv_url).content
67
+
68
+ # Convertir los datos CSV a un DataFrame de pandas con punto y coma como delimitador
69
+ df_headers = pd.read_csv(StringIO(csv_data.decode('latin-1')), delimiter=';')
70
+ # Generar un archivo CSV con el DataFrame
71
+ #df_headers.to_csv('df_headers.csv', index=False)
72
+ # Imprimir mensaje de éxito
73
+ print("Proceso completado. Carga de datos de donación")
74
+ else:
75
+ print("Error al realizar la solicitud a la API. Código de estado:", response.status_code)
76
+ else:
77
+ print("Por favor, ingrese ambas fechas.")
78
+
79
+ #FILTRAR POR CODIGO INGRESADO cod_donacion
80
+
81
+ # Desactivar las advertencias de FutureWarning
82
+ warnings.simplefilter(action='ignore', category=FutureWarning)
83
+
84
+ # Filtrar registros para 'eatc-donation_manager_code' igual a '805025018'
85
+ filtro_codigo = df_match['eatc-dona_header_code'] == f"{cod_donacion}"
86
+ df_filtrado_cod = df_match[filtro_codigo].copy()
87
+
88
+ # Contar la cantidad de registros
89
+ cantidad_registros = len(df_filtrado_cod)
90
+
91
+ # Visualizar 'eatc-pod_name' y 'eatc-dona_header_code'
92
+ if cantidad_registros > 0:
93
+ pod_name_y_dona_header_code = df_filtrado_cod[['eatc-pod_name', 'eatc-dona_header_code']]
94
+ print(f"Para 'eatc-dona_header_code' igual a '{cod_donacion}', hay {cantidad_registros} registros en el MATCH:")
95
+ else:
96
+ print(f"LA DONACIÓN INGRESADA 'eatc-dona_header' igual a '{cod_donacion}' NO TIENE REGISTROS EN EL MATCH")
97
+
98
+ #RESULTADOS
99
+
100
+ # URL del nuevo API
101
+ url = "https://donantes.eatcloud.info/api/abaco/eatc_dona_headers"
102
+
103
+ # Parámetros de la consulta
104
+ params = {
105
+ 'eatc-code': cod_donacion
106
+ }
107
+
108
+ # Realizar la consulta al nuevo API
109
+ response = requests.get(url, params=params)
110
+
111
+ # Verificar si la solicitud fue exitosa (código de estado 200)
112
+ if response.status_code == 200:
113
+ # Obtener los datos en formato JSON
114
+ data = response.json()
115
+
116
+ # Extraer los campos específicos e imprimirlos
117
+ result = data.get('res', [])
118
+
119
+ for item in result:
120
+ for key, value in item.items():
121
+ print(f"{key}: {value}")
122
+ print() # Separador entre elementos
123
+
124
+ else:
125
+ # Imprimir un mensaje de error si la solicitud no fue exitosa
126
+ print(f"Error en la solicitud. Código de estado: {response.status_code}")
127
+ print(response.text)
128
+
129
+ #VERIFICAR REGLA DEL MATCH
130
+
131
+ # URL del nuevo API
132
+ url = "https://donantes.eatcloud.info/api/abaco/eatc_dona_headers"
133
+
134
+ # Par��metros de la consulta
135
+ params = {
136
+ 'eatc-code': cod_donacion
137
+ }
138
+
139
+ # Realizar la consulta al nuevo API
140
+ response = requests.get(url, params=params)
141
+
142
+ # Verificar si la solicitud fue exitosa (código de estado 200)
143
+ if response.status_code == 200:
144
+ # Obtener los datos en formato JSON
145
+ data = response.json()
146
+
147
+ # Extraer los campos específicos
148
+ result = data.get('res', [])
149
+
150
+ for item in result:
151
+ # Verificar si el campo eatc_match_asignation_rule está vacío
152
+ match_rule = item.get('eatc_match_asignation_rule', '')
153
+ if not match_rule:
154
+ print("ESTA DONACIÓN NO TIENE REGLA DE MATCH")
155
+ else:
156
+ print(f"LA REGLA DEL MATCH PARA ESTA DONACIÓN ES: {match_rule}")
157
+
158
+ else:
159
+ # Imprimir un mensaje de error si la solicitud no fue exitosa
160
+ print(f"Error en la solicitud. Código de estado: {response.status_code}")
161
+ print(response.text)
162
+
163
+ return {"message": "Consulta realizada exitosamente", "fecha_inicio_value": fecha_inicio_value, "fecha_fin_value": fecha_fin_value, "cod_donacion": cod_donacion}
164
+
165
+ if __name__ == "__main__":
166
+ import uvicorn
167
+ uvicorn.run(app, host="0.0.0.0", port=8000)