예제 #1
0
파일: models.py 프로젝트: roofcat/dtracking
    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
예제 #2
0
    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))
예제 #3
0
파일: views.py 프로젝트: roofcat/dtracking
    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))
예제 #4
0
파일: views.py 프로젝트: roofcat/dtracking
    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)
예제 #5
0
    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)
예제 #6
0
파일: views.py 프로젝트: roofcat/dtracking
    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")
예제 #7
0
    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')
예제 #8
0
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.")
예제 #9
0
    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')
예제 #10
0
파일: views.py 프로젝트: roofcat/dtracking
    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)
예제 #11
0
    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
예제 #12
0
    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)