示例#1
0
def confirm_solicitud(request, token, template=None, source=None):
    encoded_string = urlsafe_base64_decode(token)
    folio = encoded_string.split('=')[1]
    context = {}
    try:
        clients = ['verifica', 'drivemee']
        solicitud = models.Solicitud.objects.get(
            folio=folio, status='pendiente', client__deviceToken__in=clients)


#         solicitud = models.Solicitud.objects.get(folio=folio, client__deviceToken__in=clients)
    except:
        return HttpResponseRedirect(reverse('drivemee:index'))
    if solicitud.client.deviceToken == 'verifica':
        template = 'drivemee/verifica_confirm_solicitud.html'
    elif solicitud.client.deviceToken == 'drivemee':
        template = 'drivemee/drivemee-confirm-solicitud.html'
    solicitud.status = 'abierto'
    solicitud.timestamp_confirmacion = timezone.now()
    solicitud.save()
    context['folio'] = solicitud.internal_folio()
    url = rest_reverse('drivemee:solicitud-detail',
                       args=('agencia', 'activo', solicitud.folio),
                       request=request)
    utilities.send_lead_email(solicitud, request)
    slackbot.send_message('Nuevo lead: ' + url, channel='#leadsvalet')
    return render(request, template, context)
示例#2
0
 def log_recibo(self, request, pk=None):
     """ Updates the object identified by the pk """
     serializer = serializers.ReciboSerializer(data=request.data)
     if serializer.is_valid():
         slackbot.send_message('Nuevo Recibo!')
         recibo = models.Recibo(cotizacion=self.get_object(),
                                poliza=serializer.data['poliza'])
         recibo.save()
         return Response({'status': 'recibo saved'})
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
示例#3
0
 def log_error(self, request, pk=None):
     """ Updates the object identified by the pk """
     serializer = serializers.CotizadorErrorSerializer(data=request.data)
     if serializer.is_valid():
         slackbot.send_message('Error al comprar cotizacion')
         error = models.CotizadorError(
             cotizacion=self.get_object(),
             descripcion=serializer.data['descripcion'])
         error.save()
         return Response({'status': 'error saved'})
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
示例#4
0
def request_cotizacion(idAuto, cp, paquete, plazo, inicioVigencia, codColonia, idCliente='219', valorFactura='', placa=None, serie=None, deviceToken=None, telefono=None, nombre=None, email=None, descripcion=None):
#     headers = {'content-type': 'text/xml'}
#     url = 'https://esb.interesse.com.mx/services/cotiza_proxy.cotiza_proxyHttpEndpoint/cotiza'
#     url = 'http://apps.ohkasystems.com/wso2/services/cotiza_proxy.cotiza_proxyHttpEndpoint/cotiza'
#     payload = '<?xml version="1.0" encoding="UTF-8"?><cotiza><cp>'+cp+'</cp><idCliente>'+idCliente+'</idCliente><idAuto>'+idAuto+'</idAuto><paquete>'+paquete+'</paquete><plazo>'+plazo+'</plazo><valorFactura>'+valorFactura+'</valorFactura><inicioVigencia>'+inicioVigencia+'</inicioVigencia><codColonia>'+codColonia+'</codColonia></cotiza>'
    headers = {'content-type': 'text/xml;charset=UTF-8', 'SOAPAction': '"urn:cotiza"'}
    debug = False
    if not telefono:
        telefono = '55555555'
    if not email:
        email = '*****@*****.**'
    if not nombre:
        nombre = 'ND'
    paterno = 'ND'
    materno = 'ND'
    if debug:
        url = 'http://189.254.19.101:8280/services/cotiza_proxy.cotiza_proxyHttpSoap11Endpoint'
    else:    
        url = 'https://esb.interesse.com.mx/services/cotiza_proxy.cotiza_proxyHttpSoap11Endpoint'
    payload= '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.interesse.ohka.com"><soapenv:Header/><soapenv:Body><ser:cotiza><ser:cp>'+cp+'</ser:cp><ser:idCliente>'+idCliente+'</ser:idCliente><ser:idAuto>'+idAuto+'</ser:idAuto><ser:paquete>'+paquete+'</ser:paquete><ser:plazo>'+plazo+'</ser:plazo><ser:valorFactura>'+valorFactura+'</ser:valorFactura><ser:inicioVigencia>'+inicioVigencia+'</ser:inicioVigencia><ser:codColonia>'+codColonia+'</ser:codColonia><ser:paterno>'+paterno+'</ser:paterno><ser:materno>'+materno+'</ser:materno><ser:nombre>'+nombre+'</ser:nombre><ser:email>'+email+'</ser:email><ser:telefono>'+telefono+'</ser:telefono></ser:cotiza></soapenv:Body></soapenv:Envelope>'
#     r = requests.post(url, data=payload, headers=headers, verify=False)
    comparacion = models.Comparacion()
    if deviceToken:
        comparacion.client = models.Client.objects.get(deviceToken=deviceToken)
    comparacion.paquete = models.Paquete.objects.get(valor_interesse=paquete)
    comparacion.plazo = models.Plazo.objects.get(valor_interesse=plazo)
    comparacion.fecha = inicioVigencia
    if not placa:
        comparacion.coche_registrado = False
    comparacion.id_auto = idAuto
    comparacion.codigo_colonia = codColonia
    comparacion.codigo_postal = cp
    if telefono:
        comparacion.telefono = telefono
    if nombre:
        comparacion.nombre = nombre
    if email:
        comparacion.email = email
    if descripcion:
        comparacion.descripcion = descripcion
    try:
        r = requests.post(url, data=payload, headers=headers, timeout=29.00)
    except requests.exceptions.Timeout:
        slackbot.send_message(message='Cotizacion: Timeout, idAuto: '+idAuto, channel='#cotizaciones')
        comparacion.timeout = True
        comparacion.elapsed = r.elapsed.total_seconds()
        comparacion.save()
    comparacion.elapsed = r.elapsed.total_seconds()
    if r.status_code == 200:
        slackbot.send_message(message='Nueva Cotizacion, idAuto: '+idAuto, channel='#cotizaciones')
        parser = etree.XMLParser(remove_blank_text=True)
        try:
            tree = etree.parse(StringIO(r.content.decode('utf-8')), parser)
            root = tree.getroot()
        except:
            tree  = r.text.encode('utf-8')
            root = etree.fromstring(tree, parser)        
        for elem in root.getiterator():
            if not hasattr(elem.tag, 'find'): continue
            i = elem.tag.find('}')
            if i >= 0:
                elem.tag = elem.tag[i+1:]
        
        objectify.deannotate(root, cleanup_namespaces=True)
        cotizaciones = []
        aba = root.find('.//aba')
#         emision_url = 'https://webapp.interesse.com.mx/autos/app/cliente/mobizen/data/'
        emision_url = 'https://autos.interesse.com.mx/autos/app/cliente/mobizen/data/'
        if aba:
            aba_result = aba_parser(aba, plazo)
            if aba_result:
                encode_string = 'ida='+idAuto+'&cp='+cp+'&idp='+paquete+'&idf='+plazo+'&fiv='+inicioVigencia+'&idas=23'
                if placa is not None:
                    encode_string += '&plc='+placa
                if serie is not None:
                    encode_string += '&ser='+serie
                aba_emision = base64.b64encode(encode_string)
                aba_result['emision'] = [{'url': emision_url+aba_emision}]
                cotizaciones.append(aba_result)
#         atlas = root.find('.//atlas')
#         if atlas:
#             atlas_result = atlas_parser(atlas, paquete)
#             if atlas_result:
#                 encode_string = 'ida='+idAuto+'&cp='+cp+'&idp='+paquete+'&idf='+plazo+'&fiv='+inicioVigencia+'&nombre='+nombre+'&paterno='+paterno+'&materno='+materno+'&telefono='+telefono+'&email='+email+'&idas=1'
#                 if placa is not None:
#                     encode_string += '&plc='+placa
#                 if serie is not None:
#                     encode_string += '&ser='+serie
#                 atlas_emision = base64.b64encode(encode_string)
#                 atlas_result['emision'] = [{'url': emision_url+atlas_emision}]
#                 cotizaciones.append(atlas_result)
        qualitas = root.find('.//qualitas')
        if qualitas:
            qualitas_result = qualitas_parser(qualitas)
            if qualitas_result:
                encode_string = 'ida='+idAuto+'&cp='+cp+'&idp='+paquete+'&idf='+plazo+'&fiv='+inicioVigencia+'&idas=22'
                if placa is not None:
                    encode_string += '&plc='+placa
                if serie is not None:
                    encode_string += '&ser='+serie
                qualitas_emision = base64.b64encode(encode_string)
                qualitas_result['emision'] = [{'url': emision_url+qualitas_emision}]
                cotizaciones.append(qualitas_result)
        if paquete == '1':
            mapfre = root.find('.//mapfre')
            if mapfre:
                mapfre_result = mapfre_parser(mapfre)
                if mapfre_result:
                    encode_string = 'ida='+idAuto+'&cp='+cp+'&idp='+paquete+'&idf='+plazo+'&fiv='+inicioVigencia+'&idas=29'
                    if placa is not None:
                        encode_string += '&plc='+placa
                    if serie is not None:
                        encode_string += '&ser='+serie
                    mapfre_emision = base64.b64encode(encode_string)
                    mapfre_result['emision'] = [{'url': emision_url+mapfre_emision}]
                    cotizaciones.append(mapfre_result)        
        if len(cotizaciones) == 0:
            comparacion.error_message = 'No hubo aseguradoras'
            comparacion.save()
            return [{'status':'Cotización no disponible'}]
        costos = []
        comparacion.save()
        for cot in cotizaciones:
            costo = models.Costo()
            if 'costoTotal' in cot:
                costo.costo = cot['costoTotal']
            aseguradora, created = models.Aseguradora.objects.get_or_create(name__icontains=cot['aseguradora'])
            costo.aseguradora = aseguradora
            costo.save()
            costos.append(costo)
        comparacion.costos = costos
        comparacion.save()
        return {'seguros' : cotizaciones}
    elif r.status_code == 202:
        comparacion.error_message = 'Fallo cotizacion, reintentar'
        comparacion.save()
        slackbot.send_message(message='Fallo cotizacion: Reintenta Más tarde, idAuto: '+idAuto, channel='#cotizaciones')
        return [{'status':'Reintenta más tarde'}]
    else:
        comparacion.error_message = 'Error en Servidor'
        comparacion.save()
        slackbot.send_message(message='Fallo cotizacion: Error Server, idAuto: '+idAuto, channel='#cotizaciones')
        return [{'status':r.status_code}]
示例#5
0
def ns_request_cotizacion(idAuto, cp, paquete, plazo, inicioVigencia, codColonia, idCliente='557', valorFactura='', placa=None, serie=None, deviceToken=None, telefono=None, nombre=None, email=None, descripcion=None):
    if not telefono:
        telefono = '55555555'
    if not email:
        email = '*****@*****.**'
    if not nombre:
        nombre = 'ND'

## API Key Dev
    # apikey = 'af508bca-6438-5acc-b358-e9f9f903c861'
    # url = 'http://api.interesse.com.mx/api/autos/cotizaciones'
## API Key Prod
    apikey = '41b317e3-741b-5bae-97b2-5b19a9e8e26d'
    url = 'http://api.interesse.com.mx/api/autos/cotizaciones'

### Parametros obligatorios
###
    id_auto = idAuto
### Plazo viene como Mensual, Trimestral, Semestral o Anual
### Sin embargo, este dato se ha omitido en todas las cotizaciones ya que solo se autorizo pago anual
    id_forma_pago = plazo
    codigo_postal = cp
    udi = None
    email_usuario = email
    numero_telefono = telefono
    nombre_usuario = nombre
#     apellido_paterno_usuario = paterno
#     apellido_materno_usuario = materno

    fecha_inicio_vigencia = inicioVigencia
    id_paquete = paquete
    id_subgrupo = idCliente
### Parametros opcionales
###
    id_aseguradora = None
    valor_factura = None
    id_uso = None
    id_tipo = None
    edad_conductor = None
    id_moneda = None
    coberturas = None
    adaptaciones_especiales = None
    equipo_especial = None
### Plazo viene como Mensual, Trimestral, Semestral o Anual
### El ws de Interesse pide numero de meses >= 12, por lo que por ahora sera omitido
    plazo_multianual = 12
    headers = {'content-type': 'application/json', 'apikey': apikey}
    payload = {
        'id_auto':id_auto,
        'id_forma_pago':id_forma_pago,
        'codigo_postal':codigo_postal,
        'udi':udi,
        'email_usuario':email_usuario,
        'numero_telefono':numero_telefono,
        'nombre_usuario':nombre_usuario,
        'apellido_paterno_usuario':'ND',
        'apellido_materno_usuario':'ND',
        'fecha_inicio_vigencia':fecha_inicio_vigencia,
        'id_paquete':id_paquete,
        'id_subgrupo':557,
        'id_aseguradora':id_aseguradora,
        'valor_factura':valor_factura,
        'id_uso':id_uso,
        'id_tipo':id_tipo,
        'edad_conductor':edad_conductor,
        'id_moneda':id_moneda,
        'coberturas':coberturas,
        'adaptaciones_especiales':adaptaciones_especiales,
        'equipo_especial':equipo_especial,
        'plazo_multianual':plazo_multianual,
    }
    comparacion = models.Comparacion()
    if deviceToken:
        comparacion.client = models.Client.objects.get(deviceToken=deviceToken)
    comparacion.paquete = models.Paquete.objects.get(valor_interesse=paquete)
    comparacion.plazo = models.Plazo.objects.get(valor_interesse=plazo)
    comparacion.fecha = inicioVigencia
    if not placa:
        comparacion.coche_registrado = False
    comparacion.id_auto = idAuto
    comparacion.codigo_colonia = codColonia
    comparacion.codigo_postal = cp
    if telefono:
        comparacion.telefono = telefono
    if nombre:
        comparacion.nombre = nombre
    if email:
        comparacion.email = email
    if descripcion:
        comparacion.descripcion = descripcion
    try:
        print payload
        r = requests.get(url, data=payload, headers=headers, timeout=29.00)
    except requests.exceptions.Timeout:
        slackbot.send_message(message='Cotizacion: Timeout, idAuto: '+str(idAuto), channel='#cotizaciones')
        comparacion.timeout = True
        comparacion.elapsed = r.elapsed.total_seconds()
        comparacion.save()
    comparacion.elapsed = r.elapsed.total_seconds()
    if r.status_code == 200:
        slackbot.send_message(message='Nueva Cotizacion, idAuto: '+str(idAuto), channel='#cotizaciones')
        r.encoding = 'utf-8'
        content = r.json()
        try:
            content = r.json()
        except:
            content = None
            comparacion.error_message = 'JSON inválido'
            comparacion.save()
            slackbot.send_message(message='Fallo cotizacion: Error JSON, idAuto: '+str(idAuto), channel='#cotizaciones')
            return [{'status':'No JSON object could be decoded'}]
        if content:
            cotizaciones = []
            emision_url = 'https://autos.interesse.com.mx/autos/app/cliente/mobizen/data/'
            data = content.get('data')
            print data
            json_cotizaciones = data.get('cotizaciones')
            for key, json_aseguradora in json_cotizaciones.iteritems():
                if 'aseguradora' in json_aseguradora:
                    id_aseguradora = int(key)
                    parseado = parse_cotizacion(json_aseguradora, id_aseguradora)
                    if parseado:
                    ## Agregamos este valor aqui para no pasar los parametros al parser
                        encode_string = 'ida='+idAuto+'&cp='+cp+'&idp='+paquete+'&idf='+plazo+'&fiv='+inicioVigencia+'&idas='+id_aseguradora
                        if placa is not None:
                            encode_string += '&plc='+placa
                        if serie is not None:
                            encode_string += '&ser='+serie
                        encoded_emision_string = base64.b64encode(encode_string)
                        parseado['emision'] = [{'url': emision_url+encoded_emision_string}]
                        cotizaciones.append(parseado)
            costos = []
            comparacion.save()
            for cot in cotizaciones:
                costo = models.Costo()
                if 'costoTotal' in cot:
                    costo.costo = cot['costoTotal']
                aseguradora, created = models.Aseguradora.objects.get_or_create(name__icontains=cot['aseguradora'])
                costo.aseguradora = aseguradora
                costo.save()
                costos.append(costo)
            comparacion.costos = costos
            comparacion.save()
            return {'seguros' : cotizaciones}
        else:
            comparacion.error_message = 'Error desconocido'
            comparacion.save()
            slackbot.send_message(message='Fallo cotizacion: Error Server, idAuto: '+idAuto, channel='#cotizaciones')
            return [{'status':'Error desconocido'}]
    else:
        comparacion.error_message = 'Error en Servidor'
        comparacion.save()
        slackbot.send_message(message='Fallo cotizacion: Error Server, idAuto: '+idAuto, channel='#cotizaciones')
        return [{'status':r.status_code}]