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)
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)
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)
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}]
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}]