def get_emails_by_dynamic_query_async(self, date_from, date_to, empresa, correo, folio, rut, mount_from, mount_to, fallidos, opcional1, opcional2, opcional3): date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) if folio is not None: logging.info("query de folio con empresa") emails = Email.objects.filter( empresa=empresa, numero_folio=folio ).order_by('-input_date') elif fallidos is True: logging.info("query de fallidos") emails = Email.objects.filter( Q(input_date__range=(date_from, date_to)), Q(bounce_event='bounce') | Q(dropped_event='dropped') ).order_by('-input_date') else: params = dict() logging.info("query dinamica") if date_from and date_to: params['input_date__range'] = (date_from, date_to) if empresa is not None: logging.info("con empresa") params['empresa'] = empresa if correo is not None: logging.info("con correo") params['correo'] = correo if rut is not None: logging.info("con rut receptor") params['rut_receptor'] = rut if mount_from is not None and mount_to is not None: logging.info("con montos") params['monto__range'] = (mount_from, mount_to) if opcional1 is not None: logging.info("con campo opcional1") params['opcional1'] = opcional1 if opcional2 is not None: logging.info("con campo opcional2") params['opcional2'] = opcional2 if opcional3 is not None: logging.info("con campo opcional3") params['opcional3'] = opcional3 emails = Email.objects.filter(**params).order_by('-input_date') # imprimir consulta logging.info("query") logging.info(emails.query) # despues de consultar paginar y preparar retorno de emails query_total = emails.count() logging.info(query_total) # retornar emails if emails: return emails else: return None
def get(self, request, *args, **kwargs): params = dict() date_from = request.GET['date_from'] date_to = request.GET['date_to'] params['empresa'] = request.GET['empresa'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) params['date_from'] = timestamp_to_date(date_from) params['date_to'] = timestamp_to_date(date_to) count = EmailLogEvent.get_count_by_months(**params) data = { 'total': count, } return HttpResponse(json.dumps(data))
def get(self, request, *args, **kwargs): try: date_from = request.GET['date_from'] date_to = request.GET['date_to'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) query_params = dict() query_params['date_from'] = timestamp_to_date(date_from) query_params['date_to'] = timestamp_to_date(date_to) query_params['empresa'] = request.GET['empresas'] query_params['tipo_receptor'] = request.GET['tipo_receptor'] statistic = Email.get_statistics_count_by_dates(**query_params) results = Email.get_statistics_range_by_dates(**query_params) data = { 'statistic': statistic, 'results': results, } data = json.dumps(data) return HttpResponse(data, content_type='application/json') except Exception, e: logging.error(e)
def get(self, request, *args, **kwargs): try: date_from = request.GET['date_from'] date_to = request.GET['date_to'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) query_params = dict() query_params['date_from'] = timestamp_to_date(date_from) query_params['date_to'] = timestamp_to_date(date_to) query_params['empresa'] = request.GET['empresas'] query_params['tipo_receptor'] = request.GET['tipo_receptor'] statistic = Email.get_statistics_count_by_dates(**query_params) results = Email.get_statistics_range_by_dates(**query_params) data = { 'statistic': statistic, 'results': results, } data = json.dumps(data) return HttpResponse(data, content_type='application/json') except Exception as e: logger.error(e)
def post(self, request, *args, **kwargs): logging.info(request.body) export_type = request.POST.get('export_type') if export_type == 'export_general_email': tipo_receptor = request.POST.get('tipo_receptor') empresa = request.POST.get('empresa') user_email = request.POST.get('user_email') file_name = request.POST.get('file_name') date_from = request.POST.get('date_from') date_to = request.POST.get('date_to') date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_emails_by_dates_async(**params) elif export_type == 'export_sended_email': tipo_receptor = request.POST.get('tipo_receptor') empresa = request.POST.get('empresa') user_email = request.POST.get('user_email') file_name = request.POST.get('file_name') date_from = request.POST.get('date_from') date_to = request.POST.get('date_to') date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_sended_emails_by_dates_async(**params) elif export_type == 'export_failure_email': tipo_receptor = request.POST.get('tipo_receptor') empresa = request.POST.get('empresa') user_email = request.POST.get('user_email') file_name = request.POST.get('file_name') date_from = request.POST.get('date_from') date_to = request.POST.get('date_to') date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_failure_emails_by_dates_async(**params) elif export_type == 'export_dynamic_emails': user_email = request.POST.get('user_email') empresa = request.POST.get('empresa') file_name = request.POST.get('file_name') params = request.POST.get('params') params = json.loads(params) logging.info(params) data = Email.get_emails_by_dynamic_query_async(**params) if data is not None: # Creación del documento report_file = create_tablib(data, empresa) # evaluacion del formato del archivo reporte report_file_format = get_report_file_format(empresa) if report_file_format == 'xlsx': response_file = report_file.xlsx response_filename = file_name elif report_file_format == 'tsv': response_file = report_file.tsv response_filename = file_name else: response_file = report_file.csv response_filename = file_name # evaluar si el archivo es comprimido en zip general_conf = GeneralConfiguration.get_configuration(empresa) if general_conf is not None and general_conf.report_file_zipped: # ejecutar proceso de comprimir reporte in_memory = StringIO() with ZipFile(in_memory, 'w') as archive: archive.writestr(response_filename, str(response_file), ZIP_DEFLATED) response_file = in_memory.getvalue() response_filename = file_name + '.zip' # Crear objeto para enviarlo por correo data = dict() data['name'] = response_filename data['report'] = response_file # preparación de parametros mail = EmailClient(empresa) mail.send_report_to_user_with_attach(user_email, data) data = {"status": "ok"} return HttpResponse(json.dumps(data), content_type="application/json") else: logging.info("No se crear el archivo reporte por consulta vacía.") data = {"status": "consulta vacía"} return HttpResponse(json.dumps(data), content_type="application/json")
def execute(self): """ Validar si la URL para el servicio web esta disponible """ if self.soap_conf.url: # Creacion de la instancia Client client = Client(self.soap_conf.url, cache=None) email = Email.get_email_by_id(self.email_id) documento = None body = None if email is not None: email = email.__dict__ if self.soap_conf.con_autenticacion: """ Método por definir cuando el cliente solicita algún metodo de autenticación a un web service """ pass if self.soap_conf.con_objeto_documento: # Se prepara el objeto documento logging.info("creando objeto documento") documento = client.factory.create(self.soap_conf.nombre_objeto_documento) doc_attr = (self.soap_conf.parametros_objeto_documento).split(';') doc_field = (self.soap_conf.campos_objeto_documento).split(';') for att, field in map(None, doc_attr, doc_field): documento[att] = email[field] logging.info("imprimiendo documento") logging.info(documento) if self.soap_conf.con_objeto_request: logging.info("Creando objeto request") body = client.factory.create(self.soap_conf.nombre_objeto_request) if self.soap_conf.solo_default: """ Método por definir cuando se utiliza un solo metodo para notificar eventos sendgrid a un web service """ pass else: if self.event == 'processed': logging.info("ws procesados") data = dict() params = (self.soap_conf.parametros_procesado).split(';') fields = (self.soap_conf.campos_procesado).split(';') client = getattr(client.service, self.soap_conf.metodo_procesado) for param, field in map(None, params, fields): logging.info(field) logging.info(email[field]) """ Validar si los parametros se guardan en la variable data o en body. """ if self.soap_conf.con_objeto_request: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith('_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(body)) else: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith('_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(**data)) elif self.event == 'delivered': logging.info("ws enviados") data = dict() params = (self.soap_conf.parametros_enviado).split(';') fields = (self.soap_conf.campos_enviado).split(';') client = getattr(client.service, self.soap_conf.metodo_enviado) for param, field in map(None, params, fields): logging.info(field) if self.soap_conf.con_objeto_request: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith('_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(body)) else: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith('_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(**data)) elif self.event == 'open': logging.info("ws leidos") data = dict() params = (self.soap_conf.parametros_leido).split(';') fields = (self.soap_conf.campos_leido).split(';') client = getattr(client.service, self.soap_conf.metodo_leido) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith('_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(body)) else: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith('_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(**data)) elif self.event == 'dropped': logging.info("ws rechazados") data = dict() params = (self.soap_conf.parametros_rechazado).split(';') fields = (self.soap_conf.campos_rechazado).split(';') client = getattr(client.service, self.soap_conf.metodo_rechazado) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith('_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(body)) else: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith('_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(**data)) elif self.event == 'bounce': logging.info("ws rebotados") data = dict() params = (self.soap_conf.parametros_rebotado).split(';') fields = (self.soap_conf.campos_rebotado).split(';') client = getattr(client.service, self.soap_conf.metodo_rebotado) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith('_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(body)) else: if field.endswith('_date') and email[field] is not None: logging.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith('_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[self.soap_conf.nombre_parametro_documento] = documento logging.info("imprimiendo resultado del WS") logging.info(client(**data)) else: logging.error("Email id no corresponde") else: logging.error('No hay url soap ws configurada')
def export_task(**kwargs): logger.info(kwargs) export_type = kwargs['export_type'] if export_type == 'export_general_email': tipo_receptor = kwargs['tipo_receptor'] empresa = kwargs['empresa'] user_email = kwargs['user_email'] file_name = kwargs['file_name'] date_from = kwargs['date_from'] date_to = kwargs['date_to'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_emails_by_dates_async(**params) elif export_type == 'export_sended_email': tipo_receptor = kwargs['tipo_receptor'] empresa = kwargs['empresa'] user_email = kwargs['user_email'] file_name = kwargs['file_name'] date_from = kwargs['date_from'] date_to = kwargs['date_to'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_sended_emails_by_dates_async(**params) elif export_type == 'export_failure_email': tipo_receptor = kwargs['tipo_receptor'] empresa = kwargs['empresa'] user_email = kwargs['user_email'] file_name = kwargs['file_name'] date_from = kwargs['date_from'] date_to = kwargs['date_to'] date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) params = dict() params['date_from'] = date_from params['date_to'] = date_to params['empresa'] = empresa params['tipo_receptor'] = tipo_receptor # Consulta data = Email.get_failure_emails_by_dates_async(**params) elif export_type == 'export_dynamic_emails': user_email = kwargs['user_email'] empresa = kwargs['empresa'] file_name = kwargs['file_name'] params = kwargs['params'] params = json.loads(params) logger.info(params) data = Email.get_emails_by_dynamic_query_async(**params) if data is not None: try: logger.info("Existen datos para reporte") # Creación del documento report_file = create_tablib(data, empresa) logger.info("Se ha creado el archivo tablib.") # evaluacion del formato del archivo reporte report_file_format = get_report_file_format(empresa) logger.info("Se va a exportar archivo en formato %s", report_file_format) if report_file_format == 'xlsx': response_file = report_file.xlsx response_filename = file_name elif report_file_format == 'tsv': response_file = report_file.tsv response_filename = file_name else: response_file = report_file.csv response_filename = file_name # evaluar si el archivo es comprimido en zip general_conf = GeneralConfiguration.get_configuration(empresa) logger.info("Se obtiene configuración General de la Empresa") logger.info(general_conf.__dict__) if general_conf is not None and general_conf.report_file_zipped: logger.info("Intentando comprimir archivo reporte") # ejecutar proceso de comprimir reporte in_memory = StringIO() with ZipFile(in_memory, 'w') as archive: archive.writestr(response_filename, str(response_file), ZIP_DEFLATED) response_file = in_memory.getvalue() response_filename = file_name + '.zip' logger.info("Archivo comprimido exitosamente.") # Crear objeto para enviarlo por correo data = dict() data['name'] = response_filename data['report'] = response_file # preparación de parametros mail = EmailClient(empresa) mail.send_report_to_user_with_attach(user_email, data) logger.info("Reportes generado correctamente") except Exception as e: logger.error("Error al enviar correo reporte") logger.error(e) else: logger.info("No se crear el archivo reporte por consulta vacía.")
def execute(self): """ Validar si la URL para el servicio web esta disponible """ if self.soap_conf.url: # Creacion de la instancia Client client = Client(self.soap_conf.url, cache=None) email = Email.get_email_by_id(self.email_id) documento = None body = None if email is not None: email = email.__dict__ if self.soap_conf.con_autenticacion: """ Método por definir cuando el cliente solicita algún metodo de autenticación a un web service """ pass if self.soap_conf.con_objeto_documento: # Se prepara el objeto documento logger.info("creando objeto documento") documento = client.factory.create( self.soap_conf.nombre_objeto_documento) doc_attr = self.soap_conf.parametros_objeto_documento.split( ';') doc_field = self.soap_conf.campos_objeto_documento.split( ';') for att, field in map(None, doc_attr, doc_field): documento[att] = email[field] logger.info("imprimiendo documento") logger.info(documento) if self.soap_conf.con_objeto_request: logger.info("Creando objeto request") body = client.factory.create( self.soap_conf.nombre_objeto_request) if self.soap_conf.solo_default: """ Método por definir cuando se utiliza un solo metodo para notificar eventos sendgrid a un web service """ pass else: if self.event == 'processed': logger.info("ws procesados") data = dict() params = self.soap_conf.parametros_procesado.split(';') fields = self.soap_conf.campos_procesado.split(';') client = getattr(client.service, self.soap_conf.metodo_procesado) for param, field in map(None, params, fields): logger.info(field) logger.info(email[field]) """ Validar si los parametros se guardan en la variable data o en body. """ if self.soap_conf.con_objeto_request: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith( '_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(body)) else: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith( '_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(**data)) elif self.event == 'delivered': logger.info("ws enviados") data = dict() params = self.soap_conf.parametros_enviado.split(';') fields = self.soap_conf.campos_enviado.split(';') client = getattr(client.service, self.soap_conf.metodo_enviado) for param, field in map(None, params, fields): logger.info(field) if self.soap_conf.con_objeto_request: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith( '_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(body)) else: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith( '_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(**data)) elif self.event == 'open': logger.info("ws leidos") data = dict() params = self.soap_conf.parametros_leido.split(';') fields = self.soap_conf.campos_leido.split(';') client = getattr(client.service, self.soap_conf.metodo_leido) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith( '_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(body)) else: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith( '_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(**data)) elif self.event == 'dropped': logger.info("ws rechazados") data = dict() params = self.soap_conf.parametros_rechazado.split(';') fields = self.soap_conf.campos_rechazado.split(';') client = getattr(client.service, self.soap_conf.metodo_rechazado) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith( '_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(body)) else: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith( '_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(**data)) elif self.event == 'bounce': logger.info("ws rebotados") data = dict() params = self.soap_conf.parametros_rebotado.split(';') fields = self.soap_conf.campos_rebotado.split(';') client = getattr(client.service, self.soap_conf.metodo_rebotado) for param, field in map(None, params, fields): if self.soap_conf.con_objeto_request: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) body[param] = field elif field.endswith( '_date') and email[field] is None: body[param] = datetime.now() else: body[param] = email[field] if documento is not None: body[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(body)) else: if field.endswith( '_date') and email[field] is not None: logger.info(email[field]) field = timestamp_to_date(email[field]) data[param] = field elif field.endswith( '_date') and email[field] is None: data[param] = datetime.now() else: data[param] = email[field] if documento is not None: data[ self.soap_conf. nombre_parametro_documento] = documento logger.info("imprimiendo resultado del WS") logger.info(client(**data)) else: logger.error("Email id no corresponde") else: logger.error('No hay url soap ws configurada')
def get(self, request, date_from, date_to, empresa, correo, folio, rut, mount_from, mount_to, fallidos, op1, op2, op3, *args, **kwargs): parameters = dict() # preparación de parámetros date_from = int(date_from, base=10) date_to = int(date_to, base=10) date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) parameters['date_from'] = date_from parameters['date_to'] = date_to parameters['empresa'] = empresa if correo == '-': correo = None parameters['correo'] = correo if folio == '-': folio = None parameters['folio'] = folio if rut == '-': rut = None parameters['rut'] = rut if mount_from == '-': mount_from = None else: mount_from = int(mount_from, base=10) parameters['mount_from'] = mount_from if mount_to == '-': mount_to = None else: mount_to = int(mount_to, base=10) parameters['mount_to'] = mount_to if fallidos == 'true': parameters['fallidos'] = True elif fallidos == 'false': parameters['fallidos'] = False else: parameters['fallidos'] = False if op1 == '-': parameters['opcional1'] = None else: parameters['opcional1'] = op1 if op2 == '-': parameters['opcional2'] = None else: parameters['opcional2'] = op2 if op3 == '-': parameters['opcional3'] = None else: parameters['opcional3'] = op3 # preparación de parámetros de paginación echo = request.GET['sEcho'] display_start = request.GET['iDisplayStart'] display_length = request.GET['iDisplayLength'] parameters['display_start'] = int(display_start, base=10) parameters['display_length'] = int(display_length, base=10) # ejecución de query dinamica emails = Email.get_emails_by_dynamic_query(**parameters) response = self.serializer_class(emails['data'], many=True) data = { 'sEcho': echo, 'data': response.data, 'iTotalDisplayRecords': emails['query_total'], 'iTotalRecords': emails['query_total'], } return Response(data)
def get_emails_by_dynamic_query_async(self, date_from, date_to, empresa, correo, folio, rut, mount_from, mount_to, fallidos, opcional1, opcional2, opcional3): date_from = timestamp_to_date(date_from) date_to = timestamp_to_date(date_to) if folio is not None: logger.info("query de folio con empresa") emails = Email.objects.filter( empresa=empresa, numero_folio=folio).select_related().order_by('-input_date') elif fallidos is True: logger.info("query de fallidos") emails = Email.objects.filter( Q(input_date__range=(date_from, date_to)), Q(empresa=empresa), Q(bounce_event='bounce') | Q(dropped_event='dropped')).select_related().order_by( '-input_date') else: params = dict() logger.info("query dinamica") if date_from and date_to: params['input_date__range'] = (date_from, date_to) if empresa is not None: logger.info("con empresa") params['empresa'] = empresa if correo is not None: logger.info("con correo") params['correo'] = correo if rut is not None: logger.info("con rut receptor") params['rut_receptor'] = rut if mount_from is not None and mount_to is not None: logger.info("con montos") params['monto__range'] = (mount_from, mount_to) if opcional1 is not None: logger.info("con campo opcional1") params['opcional1'] = opcional1 if opcional2 is not None: logger.info("con campo opcional2") params['opcional2'] = opcional2 if opcional3 is not None: logger.info("con campo opcional3") params['opcional3'] = opcional3 emails = Email.objects.filter( **params).select_related().order_by('-input_date') # imprimir consulta logger.info("query") logger.info(emails.query) # despues de consultar paginar y preparar retorno de emails query_total = emails.count() logger.info(query_total) # retornar emails if emails: return emails else: return None