From bd0a13e81b1d3a36e87b4b80423f97e7b5a3a984 Mon Sep 17 00:00:00 2001 From: AdalbertoCV <34152734@uaz.edu.mx> Date: Sat, 12 Oct 2024 12:16:56 -0600 Subject: [PATCH] =?UTF-8?q?Actualizaci=C3=B3n=20de=20recuperar=20y=20expor?= =?UTF-8?q?tar=20reportes=20solo=20por=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cosiap_api/archivo.zip | Bin 0 -> 122 bytes cosiap_api/descargar_reporte.py | 15 +++++++++++++++ cosiap_api/dynamic_tables/DynamicTable.py | 17 ++++++++++++----- cosiap_api/dynamic_tables/views.py | 20 ++++++++------------ 4 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 cosiap_api/archivo.zip create mode 100644 cosiap_api/descargar_reporte.py diff --git a/cosiap_api/archivo.zip b/cosiap_api/archivo.zip new file mode 100644 index 0000000000000000000000000000000000000000..5b20bd466e3ea030635f26d3cf3fd4fe73b48cd8 GIT binary patch literal 122 zcmWIWW@Zs#00E9fpU5?>i$s`!Y!K!K;-b`o{GyUnz2xFDUakOdMkWzv+=_wf!C*-v Xh(gjD;LXYg5@G~GOCYTc;xGUJ-y0If literal 0 HcmV?d00001 diff --git a/cosiap_api/descargar_reporte.py b/cosiap_api/descargar_reporte.py new file mode 100644 index 0000000..f829e5f --- /dev/null +++ b/cosiap_api/descargar_reporte.py @@ -0,0 +1,15 @@ +import requests + +url = "http://localhost:8000/api/solicitudes/reportes/exportar/?reporte_id=500" +headers = { + "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzI4ODM4NTk2LCJpYXQiOjE3Mjg3NTIxOTYsImp0aSI6IjFiODBhNThmZWUxZTQ4YjFhY2IyMWQ4ZWIwYzQ5OWQxIiwidXNlcl9pZCI6OH0.JpYIUcQbHLiWDpulj8x8AdZ7CD3ZNW-Ms-ON8vAjJk0" +} + +response = requests.get(url, headers=headers) + +if response.status_code == 200: + with open("archivo.zip", "wb") as f: + f.write(response.content) + print("Archivo descargado exitosamente.") +else: + print(f"Error: {response.status_code}") \ No newline at end of file diff --git a/cosiap_api/dynamic_tables/DynamicTable.py b/cosiap_api/dynamic_tables/DynamicTable.py index 771b204..4110d73 100644 --- a/cosiap_api/dynamic_tables/DynamicTable.py +++ b/cosiap_api/dynamic_tables/DynamicTable.py @@ -22,9 +22,9 @@ from django.core.files.base import ContentFile from django.http import HttpResponse from zipfile import ZipFile import io -from dynamic_forms.models import RDocumento +from dynamic_forms.models import RDocumento, RegistroSeccion -exclude_pattern = re.compile(r'id|imagen|staff|user|active|timestamp|^password$|^last_login$|^created_at$|^updated_at$|^usuario_ptr$|^groups$|^user_permissions$|^dynamic_form__nombre$|^dynamic_form__secciones$',re.IGNORECASE) +exclude_pattern = re.compile(r'INE|doc|id|imagen|staff|user|active|timestamp|^password$|^last_login$|^created_at$|^updated_at$|^usuario_ptr$|^groups$|^user_permissions$|^dynamic_form__nombre$|^dynamic_form__secciones$',re.IGNORECASE) class Reporte(serializers.ModelSerializer): @@ -427,6 +427,8 @@ class DynamicTable(serializers.ModelSerializer): :param data: Diccionario para almacenar los campos y sus valores. """ + exclude_pattern = re.compile(r'id|staff|user|active|timestamp|^password$|^last_login$|^created_at$|^updated_at$|^usuario_ptr$|^groups$|^user_permissions$|^dynamic_form__nombre$|^dynamic_form__secciones$',re.IGNORECASE) + for field in instance._meta.get_fields(): if (exclude_pattern.search(field.name) and field.name != "id" and "modalidad" not in field.name.lower()) or isinstance(field, ManyToOneRel): continue @@ -643,7 +645,11 @@ class DynamicTable(serializers.ModelSerializer): respuestas_dir = os.path.join(solicitud_dir, 'respuestas') os.makedirs(respuestas_dir, exist_ok=True) self.handle_files(item, solicitud_dir) - self.handle_responses(id_solicitud, respuestas_dir) + solicitud = Solicitud.objects.get(id= id_solicitud) + registro_formulario = solicitud.registro_formulario + registros_secciones = RegistroSeccion.objects.filter(registro_formulario = registro_formulario) + print("Registros_secciones : ", registros_secciones) + self.handle_responses(registros_secciones, respuestas_dir) else: self.handle_files(item, files_dir) writer.writerow(item) @@ -724,12 +730,13 @@ class DynamicTable(serializers.ModelSerializer): continue - def handle_responses(self, id_solicitud, respuestas_dir): + def handle_responses(self, registros_secciones, respuestas_dir): """ Maneja la extracción de respuestas relacionadas con la solicitud y las guarda en el directorio correspondiente. """ # Filtrar las respuestas por solicitud - responses = RDocumento.objects.filter(registro_seccion_id=id_solicitud) + responses = RDocumento.objects.filter(registro_seccion_id__in=registros_secciones) + print(responses) for response in responses: file_path = os.path.join(respuestas_dir, os.path.basename(response.valor.name)) diff --git a/cosiap_api/dynamic_tables/views.py b/cosiap_api/dynamic_tables/views.py index 9755cf3..8d5640b 100644 --- a/cosiap_api/dynamic_tables/views.py +++ b/cosiap_api/dynamic_tables/views.py @@ -312,17 +312,14 @@ class Exportar_CSV(BasePermissionAPIView): ''' Recuperar la configuración del reporte de la request si se ha enviado. ''' - if request.method == 'GET': - reporte_data = request.query_params.get('reporte', '{}') - try: - reporte_data = json.loads(reporte_data) - except ValueError: - reporte_data = {} - - if reporte_data: - return DynamicTableReport(**reporte_data) - else: - return None + try: + reporte_id = request.query_params.get('reporte_id', None) + return DynamicTableReport.objects.get(id = reporte_id) + + except Exception as e: + data = {} + Mensaje.error(data, str(e)) + return Response(data, status = status.HTTP_400_BAD_REQUEST) def get(self, request, *args, **kwargs): @@ -339,6 +336,5 @@ class Exportar_CSV(BasePermissionAPIView): configuracion = self.get_configuracion_reporte(request) reporte = DynamicTableDynamicForm(instance=configuracion, model_class=self.model_class) data = reporte.get_data(configuracion) - response = reporte.export_to_csv_and_zip(data) return response \ No newline at end of file -- GitLab