Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from Fidelizacion.forms import FiltrosMailingForm
- from Fidelizacion.models import EnvioCampaignLista, PersonaNoMailing, \
- AtributosFiltroMailing, ConfigMailing, Campaign, CantidadExtraMesCliente, \
- PersonaCampaign, ListaMailing, PacienteLista, StockMailsCliente, RegistroLista, ListaMailingExcel
- from Fidelizacion.tasks import TaskEnviarMailing
- from Giftcard.models import TipoGiftcard
- from SQSApplication.Queues import QueueSendCampaignToLista
- from SQSApplication.tasks import SendCampaignMail
- from cliente.models import empresa, cliente
- from configuracion.models import ConfiguracionCadena
- from datetime import date
- from diccionario.templatetags.traduction import traduceWords
- from disponibilidadProfesional.models import TicketMultiTratamientoIPLService
- from django.conf import settings
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- from django.core.serializers.json import DjangoJSONEncoder
- from django.core.urlresolvers import reverse
- from django.db.models import Count
- from django.http import HttpResponse, HttpResponseRedirect
- from django.shortcuts import render, render_to_response
- from django.template import loader, Context
- from django.template.loader import render_to_string
- from django.utils.encoding import smart_str
- from mail.models import mail
- from mail.views import sendemail
- from cliente.models import cliente
- from pacienteDentista.models import PacienteDentista
- from planes.models import plan
- from productos.models import producto
- from tratamiento.models import tratamiento
- from upload.models import ModelWithFileField
- from utils.models import get_or_none
- import datetime
- import json
- import requests
- import time
- import xlwt
- import xlrd
- # from Reservo.settings import celery
- def correosincorrectos(request):
- ocliente = request.user.usuario.cliente
- oPacientes = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente, valid_mail=False,
- correo_validado=True).exclude(mail='')
- oListas = ListaMailingExcel.objects.from_chain(cliente=ocliente)
- oListas = oListas.filter(estado=1)
- oRegistros = RegistroLista.objects.none()
- oRegistros_validacion = RegistroLista.objects.none()
- oRegistros_no_validados = 0
- for lista in oListas:
- print "LISTAAA --> ", lista
- oregs = RegistroLista.objects.filter(estado=1, lista=lista, valid_mail=False, correo_validado=True).exclude(
- mail='')
- oregs_no_validados = RegistroLista.objects.filter(estado=1, lista=lista, correo_validado=False).exclude(
- mail='').exclude(mail__isnull=True).count()
- oregs_validacion = RegistroLista.objects.filter(estado=1, lista=lista, correo_validado=False).exclude(
- mail='').exclude(mail__isnull=True)
- print "NO VALIDOS LISTAAA --> ", oregs_no_validados
- oRegistros = oRegistros | oregs
- oRegistros_validacion = oRegistros_validacion | oregs_validacion
- oRegistros_no_validados += oregs_no_validados
- print "NO VALIDOS TOTAL --> ", oRegistros_no_validados
- oPacientes_no_validados = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente,
- correo_validado=False).exclude(mail='').exclude(
- mail__isnull=True).count()
- oPacientes_validacion = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente,
- correo_validado=False).exclude(mail='').exclude(
- mail__isnull=True)
- print "PACIENTES NO VALIDADOS --> ", oPacientes_no_validados
- if request.is_ajax():
- #print request.POST
- registros_validos = request.POST.getlist('registros_validos[]')
- registros_invalidos = request.POST.getlist('registros_invalidos[]')
- pacientes_validos = request.POST.getlist('pacientes_validos[]')
- pacientes_invalidos = request.POST.getlist('pacientes_invalidos[]')
- print pacientes_validos
- print pacientes_invalidos
- print registros_validos
- print registros_invalidos
- for paciente in pacientes_validos:
- PacienteDentista.objects.filter(pk = paciente).update(correo_validado = 1, valid_mail = 1)
- for paciente in pacientes_invalidos:
- PacienteDentista.objects.filter(pk = paciente).update(correo_validado = 1, valid_mail = 0)
- for registro in registros_validos:
- RegistroLista.objects.filter(pk = registro).update(correo_validado = 1, valid_mail = 1)
- for registro in registros_invalidos:
- RegistroLista.objects.filter(pk = registro).update(correo_validado = 1, valid_mail = 0)
- '''
- if request.is_ajax():
- envio = 1
- ValidaMail(ocliente)
- print envio
- jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
- return HttpResponse(jsonevento, mimetype='application/json')
- '''
- print 'oPacientes --> ', oPacientes
- print 'oRegistros --> ', oRegistros
- print 'oPacientes VALIDACION --> ', oPacientes_validacion
- print 'oRegistros VALIDACION --> ', oRegistros_validacion
- # print 'oPacientes_no_validados',oPacientes_no_validados
- return render(request, 'fidelizacion/mail_incorrectos.html', {'paciente': oPacientes, 'registros': oRegistros,
- 'oPacientes_no_validados': oPacientes_no_validados + oRegistros_no_validados,
- 'paciente_validacion': oPacientes_validacion,
- 'registro_validacion': oRegistros_validacion})
- def editcorreosincorrecto(request, paciente_id=None, tipo_lista=None):
- ocliente = request.user.usuario.cliente
- # print 'paciente_id',paciente_id
- #print tipo_lista
- if tipo_lista == "True":
- try:
- oPacientes = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente, id=paciente_id)[0]
- except:
- oPacientes = []
- else:
- try:
- oPacientes = RegistroLista.objects.filter(estado = 1, id = paciente_id)[0]
- except:
- oPacientes = []
- if request.is_ajax():
- blanco = request.POST.get('id')
- if blanco:
- tipo = request.POST.get('tipo')
- print blanco
- print tipo
- if tipo == "paciente":
- PacienteDentista.objects.filter(pk = blanco).update(mail = "", valid_mail = 0, correo_validado = 0)
- else:
- RegistroLista.objects.filter(pk = blanco).update(mail = "", valid_mail = 0, correo_validado = 0)
- else:
- registros_validos = request.POST.getlist('registros_validos[]')
- registros_invalidos = request.POST.getlist('registros_invalidos[]')
- pacientes_validos = request.POST.getlist('pacientes_validos[]')
- pacientes_invalidos = request.POST.getlist('pacientes_invalidos[]')
- mail = request.POST.get('mail')
- print pacientes_validos
- print pacientes_invalidos
- print registros_validos
- print registros_invalidos
- print mail
- for paciente in pacientes_validos:
- PacienteDentista.objects.filter(pk=paciente).update(mail = mail, correo_validado=1, valid_mail=1)
- for paciente in pacientes_invalidos:
- PacienteDentista.objects.filter(pk=paciente).update(correo_validado=1, valid_mail=0)
- for registro in registros_validos:
- RegistroLista.objects.filter(pk=registro).update(mail = mail, correo_validado=1, valid_mail=1)
- for registro in registros_invalidos:
- RegistroLista.objects.filter(pk=registro).update(correo_validado=1, valid_mail=0)
- return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
- else:
- return render(request, 'fidelizacion/edit_mail_incorrecto.html',
- {'paciente': oPacientes, 'tipo_lista': tipo_lista})
- ''' # print 'oPacientes',oPacientes
- if request.method == 'POST':
- addressToVerify = request.POST.get('new_mail')
- # print 'addressToVerify',addressToVerify
- addressToVerify = addressToVerify.lower()
- if not addressToVerify:
- oPacientes.mail = ''
- oPacientes.valid_mail = False
- oPacientes.correo_validado = False
- oPacientes.save()
- return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
- import re
- match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)
- if match == None:
- print addressToVerify, '-->', ('Bad Syntax')
- return render(request, 'fidelizacion/edit_mail_incorrecto.html',
- {'paciente': oPacientes, 'error': 'Mala Sintaxis'})
- # Api Moncho -> pubkey-44c5725e0768a9d4f59098bf2ad25180
- req = requests.get("https://api.mailgun.net/v3/address/validate",
- auth=("api", "pubkey-5ogiflzbnjrljiky49qxsiozqef5jxp7"), params={"address": addressToVerify})
- try:
- respuesta = req.json()
- if respuesta['is_valid']:
- print addressToVerify, '->', ('Success Valid Mail API')
- oPacientes.mail = addressToVerify
- oPacientes.valid_mail = True
- oPacientes.correo_validado = True
- oPacientes.save()
- return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
- else:
- oPacientes.mail = addressToVerify
- oPacientes.valid_mail = False
- oPacientes.correo_validado = True
- oPacientes.save()
- print addressToVerify, '->', ('Bad')
- return render(request, 'fidelizacion/edit_mail_incorrecto.html',
- {'paciente': oPacientes, 'error': 'Correo No Valido '})
- except:
- print addressToVerify, '->', ('error Bad')
- oPacientes.mail = addressToVerify
- oPacientes.valid_mail = False
- oPacientes.correo_validado = True
- oPacientes.save()
- return render(request, 'fidelizacion/edit_mail_incorrecto.html',
- {'paciente': oPacientes, 'error': 'No se pudo validar el correo'})
- '''
- '''
- def ValidaMail(cliente_id):
- #print 'ValidaMail'
- from cliente.models import cliente
- oPacientes = PacienteDentista.objects.from_chain(cliente_id=cliente_id, estado=1).exclude(mail__isnull=True)
- oPacientes = oPacientes.exclude(mail='')
- oPacientes = oPacientes.exclude(correo_validado=True)
- oPaciantesLista = PacienteLista.objects.filter(paciente__in=oPacientes, estado = 1)
- oRegistros = PacienteLista.objects.none()
- #cliente = cliente.objects.get(pk = cliente_id)
- oListas = ListaMailingExcel.objects.from_chain(cliente = cliente_id)
- oListas = oListas.filter(estado = 1)
- for lista in oListas:
- oregs = PacienteLista.objects.filter(registro__lista = lista, estado = 1)
- oRegistros = oRegistros | oregs
- oRevisionMail = oPaciantesLista | oRegistros
- print oRevisionMail
- for revmail in oRevisionMail:
- continuar = True
- addresstoVerify = None
- paciente = True
- try:
- addresstoVerify = revmail.paciente.mail.lower()
- paciente = True
- except:
- addresstoVerify = revmail.registro.mail.lower()
- paciente = False
- import re
- match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addresstoVerify)
- if match == None:
- continuar = False
- if paciente:
- revmail.paciente.valid_mail = False
- revmail.paciente.correo_validado = True
- revmail.save()
- else:
- revmail.registro.valid_mail = False
- revmail.registro.correo_validado = True
- revmail.save()
- if continuar:
- i = 1
- if i == 1:
- # Api Moncho -> pubkey-44c5725e0768a9d4f59098bf2ad25180
- req = requests.get("https://api.mailgun.net/v3/address/validate",
- auth=("api", "pubkey-44c5725e0768a9d4f59098bf2ad25180"),
- params={"address": addresstoVerify})
- i = 2
- if i == 2:
- # Api Concho sebastian sc3.cl -> pubkey-5a11d2ceacbfafb56af933c41aca9be8
- req = requests.get("https://api.mailgun.net/v3/address/validate",
- auth=("api", "pubkey-5a11d2ceacbfafb56af933c41aca9be8"),
- params={"address": addresstoVerify})
- i = 3
- if i == 3:
- # Pablo pubkey-3cd9a401026f2c67a23bd0c5bfc719e8
- req = requests.get("https://api.mailgun.net/v3/address/validate",
- auth=("api", "pubkey-3cd9a401026f2c67a23bd0c5bfc719e8"),
- params={"address": addresstoVerify})
- i = 4
- if i == 4:
- # Api Contacto Reservo ->3cd9a401026f2c67a23bd0c5bfc719e8
- req = requests.get("https://api.mailgun.net/v3/address/validate",
- auth=("api", "pubkey-c5e62cb03f6eba279bb28d54c01931f3"),
- params={"address": addresstoVerify})
- i = 1
- try:
- respuesta = req.json()
- if respuesta['is_valid']:
- if paciente:
- revmail.paciente.valid_mail = True
- revmail.paciente.correo_validado = True
- revmail.save()
- else:
- revmail.registro.valid_mail = True
- revmail.registro.correo_validado = True
- revmail.save()
- else:
- if paciente:
- revmail.paciente.valid_mail = False
- revmail.paciente.correo_validado = True
- revmail.save()
- else:
- revmail.registro.valid_mail = False
- revmail.registro.correo_validado = True
- revmail.save()
- except:
- if paciente:
- revmail.paciente.mail = addresstoVerify
- revmail.paciente.valid_mail = False
- revmail.paciente.correo_validado = True
- revmail.save()
- else:
- revmail.registro.mail = addresstoVerify
- revmail.registro.valid_mail = False
- revmail.registro.correo_validado = True
- revmail.save()
- '''
- def SeleccionarFiltros(request, lista_id):
- # print "en SeleccionarFiltros"
- oatributos_pacientes = None
- ocliente = request.user.usuario.cliente
- olista = ListaMailing.objects.get(pk=lista_id, estado=1)
- # print 'cadena',ocliente.cadena
- PacientesCadena = False
- try:
- oConfiguracionCadena = ConfiguracionCadena.objects.get(cadena=ocliente.cadena)
- except:
- oConfiguracionCadena = []
- # print 'oConfiguracionCadena',oConfiguracionCadena.pacientetodosLocales
- if oConfiguracionCadena:
- PacientesCadena = oConfiguracionCadena.pacientetodosLocales
- if PacientesCadena:
- oClientes = cliente.objects.filter(cadena=ocliente.cadena)
- else:
- oClientes = [request.user.usuario.cliente]
- # print 'oClientes',oClientes
- if request.method == 'POST':
- # print "en el post dfe filtros"
- data = request.POST
- print "DATAA", data
- form = FiltrosMailingForm(cliente=ocliente, data=data)
- pacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
- ids_pacientes = set()
- ids_registros = set()
- for pac_list in pacientes_lista:
- try:
- ids_pacientes.add(pac_list.paciente.id)
- except:
- ids_registros.add(pac_list.registro.id)
- oatributos_pacientes_anteriores = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes,
- persona_id__in=ids_pacientes, estado=1,
- persona__mail__isnull=False).exclude(
- persona__mail="")
- oatributos_registros_anteriores = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes,
- registro_id__in=ids_registros, estado=1,
- registro__mail__isnull=False).exclude(
- registro__mail="")
- oatributos_pacientes_anteriores = oatributos_pacientes_anteriores | oatributos_registros_anteriores
- print "ANTERIOREEES --> ", oatributos_pacientes_anteriores
- if form.is_valid():
- olistas = request.POST.getlist('otras_listas')
- print "LISTAAAS --> ", olistas
- try:
- olistas.remove('multiselect-all')
- except:
- pass
- ids = []
- ids_lista = []
- oexistent = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes, estado=1).values(
- 'registro_id')
- print oexistent
- for existent in oexistent:
- ids.append(existent['registro_id'])
- for lista in olistas:
- print lista
- regs = []
- i = 0
- oregistros = RegistroLista.objects.filter(lista_id=lista, estado=1)
- print oregistros
- for registro in oregistros:
- ids_lista.append(registro.lista_id)
- if registro.id not in ids:
- oatribs = AtributosFiltroMailing(registro=registro, estado=1)
- regs.append(oatribs)
- i += 1
- if i == 2000:
- AtributosFiltroMailing.objects.bulk_create(regs[d] for d in range(0, i))
- regs = []
- i = 0
- AtributosFiltroMailing.objects.bulk_create(regs[d] for d in range(0, i))
- oatributos_pacientes = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes, estado=1,
- persona__mail__isnull=False).exclude(
- persona__mail="")
- oatributos_registros = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes, estado=1,
- registro__mail__isnull=False,
- registro__lista_id__in=ids_lista).exclude(
- registro__mail="")
- # print "atributos antes de los filtros ",oatributos_pacientes
- palabras_antecedentes = data['antecedentes_personales']
- if palabras_antecedentes:
- print "palabras_antecedentes"
- palabras = palabras_antecedentes.split(" ")
- for palabra in palabras:
- oatributos_pacientes = oatributos_pacientes.filter(
- persona__antecedentes_personales__icontains=palabra)
- if data['puntos_desde'] and data['puntos_hasta']:
- print "PUNTOS DESDE Y HASTA"
- oatributos_pacientes = oatributos_pacientes.filter(
- persona__puntos_fidelizacion__gte=data['puntos_desde'],
- persona__puntos_fidelizacion__lte=data['puntos_hasta'])
- if data['puntos_desde'] and not data['puntos_hasta']:
- print "PUNTOS DESDE Y NO HASTA"
- oatributos_pacientes = oatributos_pacientes.filter(
- persona__puntos_fidelizacion__gte=data['puntos_desde'])
- if not data['puntos_desde'] and data['puntos_hasta']:
- print "PUNTOS NO DESDE Y HASTA"
- oatributos_pacientes = oatributos_pacientes.filter(
- persona__puntos_fidelizacion__lte=data['puntos_hasta'])
- try:
- if data['sexo']:
- print "SEXO"
- oatributos_pacientes = oatributos_pacientes.filter(persona__sexo=data['sexo'])
- except:
- pass
- if data['edad_desde'] and data['edad_hasta']:
- print "EDAD 1"
- hoy = datetime.datetime.now()
- oday = hoy.day
- omonth = hoy.month
- oyear = hoy.year
- date_desde = date(int(oyear) - int(data['edad_hasta']), omonth, oday)
- date_hasta = date(int(oyear) - int(data['edad_desde']), omonth, oday)
- oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__gte=date_desde,
- persona__fecha_nacimiento__lte=date_hasta)
- else:
- if data['edad_desde']:
- print "EDAD 2"
- hoy = datetime.datetime.now()
- oday = hoy.day
- omonth = hoy.month
- oyear = hoy.year
- date_hasta = date(int(oyear) - int(data['edad_desde']), omonth, oday)
- oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__lte=date_hasta)
- if data['edad_hasta']:
- print "EDAD 3"
- hoy = datetime.datetime.now()
- oday = hoy.day
- omonth = hoy.month
- oyear = hoy.year
- date_desde = date(int(oyear) - int(data['edad_hasta']), omonth, oday)
- oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__gte=date_desde)
- if data['fecha_ultima_cita_desde'] and data['fecha_ultima_cita_hasta']:
- print "fecha 1"
- fecha_ultima_cita_desde = datetime.datetime.strptime(data['fecha_ultima_cita_desde'],
- '%d-%m-%Y').strftime('%Y-%m-%d')
- fecha_ultima_cita_hasta = datetime.datetime.strptime(data['fecha_ultima_cita_hasta'],
- '%d-%m-%Y').strftime('%Y-%m-%d')
- oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__gte=fecha_ultima_cita_desde,
- fecha_ultima_cita__lte=fecha_ultima_cita_hasta)
- else:
- if data['fecha_ultima_cita_desde']:
- print "fecha 2"
- fecha_ultima_cita_desde = datetime.datetime.strptime(data['fecha_ultima_cita_desde'],
- '%d-%m-%Y').strftime('%Y-%m-%d')
- oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__gte=fecha_ultima_cita_desde)
- if data['fecha_ultima_cita_hasta']:
- print "fecha 3"
- fecha_ultima_cita_hasta = datetime.datetime.strptime(data['fecha_ultima_cita_hasta'],
- '%d-%m-%Y').strftime('%Y-%m-%d')
- oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__lte=fecha_ultima_cita_hasta)
- if data['gasto_total_desde'] and data['gasto_total_hasta']:
- print "gasto 1"
- oatributos_pacientes = oatributos_pacientes.filter(gasto_total__gte=data['gasto_total_desde'],
- gasto_total__lte=data['gasto_total_hasta'])
- else:
- if data['gasto_total_desde']:
- print "gasto 2"
- oatributos_pacientes = oatributos_pacientes.filter(gasto_total__gte=data['gasto_total_desde'])
- if data['gasto_total_hasta']:
- print "gasto 3"
- oatributos_pacientes = oatributos_pacientes.filter(gasto_total__lte=data['gasto_total_hasta'])
- if data['numero_de_citas_desde'] and data['numero_de_citas_hasta']:
- print "citas 1"
- oatributos_pacientes = oatributos_pacientes.filter(numero_de_citas__gte=data['numero_de_citas_desde'],
- numero_de_citas__lte=data['numero_de_citas_hasta'])
- else:
- if data['numero_de_citas_desde']:
- print "citas 2"
- oatributos_pacientes = oatributos_pacientes.filter(
- numero_de_citas__gte=data['numero_de_citas_desde'])
- if data['numero_de_citas_hasta']:
- print "citas 3"
- oatributos_pacientes = oatributos_pacientes.filter(
- numero_de_citas__lte=data['numero_de_citas_hasta'])
- request.method = ""
- tratamientos = request.POST.getlist('tratamientos')
- try:
- tratamientos.remove('multiselect-all')
- except:
- pass
- # print 'tratamientos',tratamientos
- fechainicio = request.POST.get('fecha_tratamiento_desde')
- fechafin = request.POST.get('fecha_tratamiento_hasta')
- if fechainicio and fechafin and tratamientos:
- print "aca", fechainicio, fechafin, tratamientos
- dateinicio = datetime.datetime.strptime(fechainicio, '%d-%m-%Y')
- datefin = datetime.datetime.strptime(fechafin, '%d-%m-%Y')
- oTicketMultiTratamientoIPLService = TicketMultiTratamientoIPLService.objects.filter(
- tratamientos__in=tratamientos, ticket__fecha__range=[dateinicio, datefin],
- ticket__estadoTicket__codigo='A').exclude(ticket__demandante__persona=None).values(
- 'ticket__demandante__persona').distinct()
- # print oTicketMultiTratamientoIPLService
- id_pacientes = []
- for oticket in oTicketMultiTratamientoIPLService:
- id_pacientes.append(oticket['ticket__demandante__persona'])
- print 'id_pacientes', id_pacientes
- oatributos_pacientes = oatributos_pacientes.filter(persona__in=id_pacientes)
- # oPacienteDentista=PacienteDentista.objects.filter(id__in=id_pacientes)
- # print "oatributos_pacientes ",len(oatributos_pacientes)
- oatributos_pacientes = oatributos_pacientes.exclude(
- persona_id__in=PersonaNoMailing.objects.filter(cliente__in=oClientes, estado=1).values_list(
- 'paciente_id', flat=True))
- print 'tratamientos', tratamientos
- string_tratamientos = ''
- i = 0
- for otratamiento in tratamientos:
- if i == 0:
- string_tratamientos = str(otratamiento)
- i = 1
- else:
- string_tratamientos = string_tratamientos + ',' + str(otratamiento)
- print 'string_tratamientos', string_tratamientos
- categorias = request.POST.getlist('categoria')
- print "CATEGORIAS --> ", categorias
- try:
- categorias.remove('multiselect-all')
- except:
- pass
- oatributos_pacientes = oatributos_pacientes.filter(persona__categoria__in=categorias)
- oatributos_pacientes = oatributos_pacientes | oatributos_registros
- oatributos_template = []
- for atrib in oatributos_pacientes:
- if atrib not in oatributos_pacientes_anteriores:
- oatributos_template.append(atrib)
- print "AHORAAA --> ", oatributos_template
- return render(request, 'fidelizacion/filtromailing.html',
- {'tratamientos': string_tratamientos, 'form': form, 'lista': olista,
- 'atributos': oatributos_template, 'atributos_anteriores': oatributos_pacientes_anteriores})
- # return HttpResponseRedirect(reverse('fidelizacion:getlistacorreos', args=(request,oatributos_pacientes)))
- # return HttpResponseRedirect(reverse('fidelizacion:gestlistacorreos' , args=(), kwargs={'atributos':oatributos_pacientes}))
- else:
- # print "not valid"
- return render(request, 'fidelizacion/filtromailing.html',
- {'form': form, 'lista': olista, 'atributos_anteriores': oatributos_pacientes_anteriores})
- else:
- form = FiltrosMailingForm(cliente=ocliente)
- print "ESTYO ACA: ", olista
- pacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
- ids_pacientes = set()
- ids_registros = set()
- for pac_list in pacientes_lista:
- try:
- ids_pacientes.add(pac_list.paciente.id)
- except:
- ids_registros.add(pac_list.registro.id)
- oatributos_pacientes = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes,
- persona_id__in=ids_pacientes, estado=1,
- persona__mail__isnull=False).exclude(
- persona__mail="").exclude(
- persona_id__in=PersonaNoMailing.objects.filter(cliente=ocliente, estado=1).values_list('paciente_id',
- flat=True))
- oatributos_registros = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes,
- registro_id__in=ids_registros, estado=1).exclude(
- registro__mail="")
- oatributos_pacientes = oatributos_pacientes | oatributos_registros
- print "CANTIDAD DE ANTERIORES: ", len(oatributos_pacientes)
- return render(request, 'fidelizacion/filtromailing.html',
- {'form': form, 'lista': olista, 'pacientes_lista': pacientes_lista,
- 'atributos_anteriores': oatributos_pacientes})
- def getListaCorreos(request, atributos=None, lista_id=None):
- print "en getListaCorreos", atributos
- print "LISTAS ID ", lista_id
- if request.method == 'POST':
- pacientes_lista = PacienteLista.objects.filter(lista_id=lista_id, estado=1)
- registros_lista = RegistroLista.objects.filter(lista_id=lista_id, estado=1)
- ids_pacientes = set()
- ids_registros = set()
- for pac_list in pacientes_lista:
- try:
- ids_pacientes.add(pac_list.paciente.id)
- except:
- pass
- for reg_list in registros_lista:
- ids_registros.add(reg_list.id)
- print "ES POSTT"
- atributos_pacientes_correo = set()
- pacientes_a_agregar = {}
- contador_pacientes = 1
- for key, value in request.POST.iteritems():
- print "valuesss ", value
- if "pac_" in key and value == 'on':
- id = key[4:]
- # print "id ",id
- oatrib = AtributosFiltroMailing.objects.filter(persona__id=id)[0]
- atributos_pacientes_correo.add(oatrib)
- if lista_id:
- if oatrib.persona.id not in ids_pacientes:
- opacientelista = PacienteLista(paciente=oatrib.persona, lista_id=lista_id, estado=1)
- pacientes_a_agregar[contador_pacientes] = opacientelista
- contador_pacientes = contador_pacientes + 1
- if "reg_" in key and value == 'on':
- id = key[4:]
- # print "id ",id
- oatrib = AtributosFiltroMailing.objects.filter(registro__id=id)[0]
- atributos_pacientes_correo.add(oatrib)
- if lista_id:
- if oatrib.registro.id not in ids_registros:
- oregistrolista = PacienteLista(registro=oatrib.registro, lista_id=lista_id, estado=1)
- pacientes_a_agregar[contador_pacientes] = oregistrolista
- contador_pacientes = contador_pacientes + 1
- if contador_pacientes == 2000:
- PacienteLista.objects.bulk_create(pacientes_a_agregar[d] for d in range(1, contador_pacientes))
- contador_pacientes = 1
- pacientes_a_agregar = {}
- PacienteLista.objects.bulk_create(pacientes_a_agregar[d] for d in range(1, contador_pacientes))
- request.method = ""
- return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
- else:
- print "NO ES POST:"
- return render(request, 'fidelizacion/listadocorreosmailing.html', {'atributos': atributos})
- def SelectDesignMail(request, atributos_final=None):
- print "en SelectDesignMail"
- ocliente = request.user.usuario.cliente
- oEmpresa = empresa.objects.get(cliente=ocliente)
- hoy = datetime.datetime.now()
- month = hoy.month
- year = hoy.year
- cantidad_extra = 0
- try:
- omail = mail.objects.get(cliente_id=ocliente.id)
- except:
- omail = None
- print "MAILLLLLLLLLL: ", omail
- try:
- ocantidad_extra = CantidadExtraMesCliente.objects.filter(cliente=ocliente, month=month, year=year)
- for ocant_extra in ocantidad_extra:
- cantidad_extra = cantidad_extra + ocant_extra.cantidad_extra
- except:
- cantidad_extra = 0
- max_correos_mes = ConfigMailing.objects.all()[0].max_correos
- ocampaigns = Campaign.objects.filter(cliente=ocliente, fecha__month=month, fecha__year=year)
- correos_acumulados_mes = 0
- for ocamp in ocampaigns:
- correos_acumulados_mes = correos_acumulados_mes + ocamp.cantidad
- if request.method == 'POST':
- print "EN EL POST DE SELECTDESIGNMAIL"
- texto = request.POST['texto_mail']
- titulo = request.POST['titulo_mail']
- asunto = request.POST['asunto_mail']
- ancho = request.POST['ancho']
- color = request.POST['color']
- try:
- ocultar_barra = request.POST['ocultar_barra_superior']
- except:
- ocultar_barra = False
- try:
- ocultar_logo = request.POST['ocultar_logo']
- except:
- ocultar_logo = False
- try:
- ocultar_texto = request.POST['ocultar_texto']
- except:
- ocultar_texto = False
- print "Ocultar barra ", ocultar_barra
- if not ancho:
- ancho = 350
- file = None
- if request.FILES:
- print "HAY ARCHIVOS !"
- file = request.FILES.getlist('imagen_mailing')[0]
- if file:
- imagen_mailing = ModelWithFileField(cliente=ocliente, docfile=file)
- imagen_mailing.save()
- else:
- imagen_mailing = None
- cantidad = int(request.POST['cantidad_correos'])
- if cantidad + correos_acumulados_mes > max_correos_mes + cantidad_extra:
- print "ESTE CASO ES CUANDO QUIERE ENVIAR MAS DE LOS QUE TIENE DISPONIBLES"
- total_a_enviar = max_correos_mes + cantidad_extra - correos_acumulados_mes
- return render(request, 'fidelizacion/filtromailing.html',
- {'falla': 'falla', 'correos_acumulados_mes': correos_acumulados_mes,
- 'comprados': cantidad_extra, 'correos_campaign': cantidad, 'cuota_maxima': max_correos_mes})
- else:
- total_a_enviar = cantidad
- ocampaign = Campaign(cliente=ocliente, asunto=asunto, titulo=titulo, texto=texto, cantidad=total_a_enviar,
- fecha=hoy, imagen=imagen_mailing, ocultar_texto=ocultar_texto, ocultar_logo=ocultar_logo,
- ocultar_barra_superior=ocultar_barra, ancho=ancho, color=color)
- ocampaign.save()
- contador_enviados = 0
- ids_destinatarios = []
- for key, value in request.POST.iteritems():
- if "pac_" in key:
- print "acaaaaaa"
- id = key[4:]
- ids_destinatarios.append(id)
- try:
- TaskEnviarMailing.apply_async(args=[ocliente, ids_destinatarios, ocampaign], countdown=10)
- except Exception, e:
- print "ERROR: ", e
- return render(request, 'fidelizacion/filtromailing.html', {'exito': 'exito'})
- else:
- cantidad_correos = len(atributos_final)
- return render(request, 'fidelizacion/designcorreomailing.html',
- {'mail': omail, 'atributos': atributos_final, 'empresa': oEmpresa,
- 'cantidad_correos': cantidad_correos, 'correos_acumulados': correos_acumulados_mes,
- 'max_correos_cliente': max_correos_mes + cantidad_extra})
- def SendCorreoMailing(cliente, paciente, campaign, lista_id):
- print "en SendCorreoMailing"
- images = []
- ocliente = cliente
- urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
- # images.append('Web/img/reservomail.png')
- from_email = get_or_none(mail, cliente=ocliente)
- if from_email == None:
- from_email = "contacto@reservo.cl"
- else:
- try:
- from_email = str(from_email.mail)
- except Exception:
- from_email = "contacto@reservo.cl"
- oEmpresa = empresa.objects.get(cliente=ocliente)
- try:
- oMail = mail.objects.get(cliente=ocliente)
- except Exception:
- oMail = None
- urllogo = None
- urllogo_duro = None
- if oMail:
- urllogo = oMail.urllogo
- urllogo_duro = oMail.urllogo_duro
- # images.append(urllogo2)
- texto = None
- # print "paciente: ",paciente
- if campaign.texto:
- texto = campaign.texto
- if paciente.name:
- nombre = paciente.name
- else:
- nombre = ""
- if paciente.app_paterno:
- app_paterno = paciente.app_paterno
- else:
- app_paterno = ""
- if paciente.app_materno:
- app_materno = paciente.app_materno
- else:
- app_materno = ""
- texto = texto.replace("/NOMBRE/", str(nombre))
- texto = texto.replace("/APELLIDO_PATERNO/", str(app_paterno))
- texto = texto.replace("/APELLIDO_MATERNO/", str(app_materno))
- correo_pac = paciente.mail
- s1 = str(correo_pac)
- s2 = "@"
- # print "correo ", correo_cump
- if correo_pac:
- """
- mail_server=s1[s1.index(s2) + len(s2):
- if mail_server=="gmail.com":
- template = 'fidelizacion/mail_mailing_gmail.html'
- else:
- template = 'fidelizacion/mail_mailing.html'
- """
- template = 'fidelizacion/mail_mailing.html'
- try:
- imagen_src = campaign.imagen.docfile.url
- except:
- imagen_src = None
- body = loader.get_template(template)
- # nombre_pac=str(paciente.name)+" "+str(paciente.app_paterno)+" "+str(paciente.app_materno)
- urlremovelista = str(settings.URL_SITIO) + str(
- reverse('fidelizacion:removefromcampaign', args=(paciente.uuid, cliente.id)))
- # print "URLREMOVELISTA: ",urlremovelista
- context = Context({
- "mail": correo_pac,
- "empresa": oEmpresa.nombre,
- "urllogo": urllogo,
- "urllogo_duro": urllogo_duro,
- "texto": texto,
- "titulo": campaign.titulo,
- "color": campaign.color,
- "ancho": campaign.ancho,
- "ocultar_barra_superior": campaign.ocultar_barra_superior,
- "ocultar_logo": campaign.ocultar_logo,
- "ocultar_texto": campaign.ocultar_texto,
- "imagen_src": imagen_src,
- "urllogoreservo": urllogoreservo,
- "urlremovelista": urlremovelista,
- "url_top": campaign.url,
- })
- html_content = render_to_string(template, context)
- try:
- # if correo_pac=="saintford@hotmail.com" or correo_pac=="pablosaintard@gmail.com":
- # print "Enviando mailing... "
- # if correo_pac=="saintford@hotmail.com":
- """
- print "enviado correo !"
- if settings.CELERY:
- sendemail.apply_async(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,cliente=None)
- else:
- """
- sendemail(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,
- cliente=None)
- hoy = datetime.datetime.now()
- opersona_campaign = PersonaCampaign(persona=paciente, campaign=campaign, lista_id=lista_id, fecha=hoy)
- opersona_campaign.save()
- except Exception, e:
- print "No se envio mail cumpleano con error e->", e
- return 0
- return 0
- def SendCorreoMailingTest(request):
- print "en SendCorreoMailing"
- images = []
- ocliente = request.user.usuario.cliente
- if request.method == "POST":
- id_campaing = request.POST.get('campaing')
- oCampaign = Campaign.objects.get(pk=id_campaing, cliente=ocliente)
- urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
- # images.append('Web/img/reservomail.png')
- from_email = get_or_none(mail, cliente=ocliente)
- if from_email == None:
- from_email = "contacto@reservo.cl"
- else:
- try:
- from_email = str(from_email.mail)
- except Exception:
- from_email = "contacto@reservo.cl"
- oEmpresa = empresa.objects.get(cliente=ocliente)
- try:
- oMail = mail.objects.get(cliente=ocliente)
- except Exception:
- oMail = None
- urllogo = None
- urllogo_duro = None
- if oMail:
- urllogo = oMail.urllogo
- urllogo_duro = oMail.urllogo_duro
- # images.append(urllogo2)
- texto = None
- # print "paciente: ",paciente
- if oCampaign.texto:
- texto = oCampaign.texto
- nombre = 'Nombre'
- app_paterno = 'Apellido1'
- app_materno = 'Apellido2'
- '''
- if paciente.name:
- nombre = paciente.name
- else:
- nombre = ""
- if paciente.app_paterno:
- app_paterno = paciente.app_paterno
- else:
- app_paterno = ""
- if paciente.app_materno:
- app_materno = paciente.app_materno
- else:
- app_materno = ""
- '''
- texto = texto.replace("/NOMBRE/", str(nombre))
- texto = texto.replace("/APELLIDO_PATERNO/", str(app_paterno))
- texto = texto.replace("/APELLIDO_MATERNO/", str(app_materno))
- correo_pac = request.POST.get('mail')
- s1 = str(correo_pac)
- s2 = "@"
- # print "correo ", correo_cump
- if correo_pac:
- """
- mail_server=s1[s1.index(s2) + len(s2):
- if mail_server=="gmail.com":
- template = 'fidelizacion/mail_mailing_gmail.html'
- else:
- template = 'fidelizacion/mail_mailing.html'
- """
- template = 'fidelizacion/mail_mailing.html'
- try:
- imagen_src = oCampaign.imagen.docfile.url
- except:
- imagen_src = None
- body = loader.get_template(template)
- # nombre_pac=str(paciente.name)+" "+str(paciente.app_paterno)+" "+str(paciente.app_materno)
- # urlremovelista = "https://reservo.cl"+str(reverse('fidelizacion:removefromcampaign', args=('paciente.uuid',cliente.id)))
- urlremovelista = str(settings.URL_SITIO)
- # print "URLREMOVELISTA: ",urlremovelista
- context = Context({
- "mail": correo_pac,
- "empresa": oEmpresa.nombre,
- "urllogo": urllogo,
- "urllogo_duro": urllogo_duro,
- "texto": texto,
- "titulo": oCampaign.titulo,
- "color": oCampaign.color,
- "ancho": oCampaign.ancho,
- "ocultar_barra_superior": oCampaign.ocultar_barra_superior,
- "ocultar_logo": oCampaign.ocultar_logo,
- "ocultar_texto": oCampaign.ocultar_texto,
- "imagen_src": imagen_src,
- "urllogoreservo": urllogoreservo,
- "urlremovelista": urlremovelista,
- "url_top": oCampaign.url,
- })
- html_content = render_to_string(template, context)
- try:
- # if correo_pac=="saintford@hotmail.com" or correo_pac=="pablosaintard@gmail.com":
- # print "Enviando mailing... "
- # if correo_pac=="saintford@hotmail.com":
- """
- print "enviado correo !"
- if settings.CELERY:
- sendemail.apply_async(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,cliente=None)
- else:
- """
- sendemail(oCampaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,
- cliente=None)
- hoy = datetime.datetime.now()
- # opersona_campaign=PersonaCampaign(persona=paciente,campaign=campaign,lista_id=lista_id,fecha=hoy)
- # opersona_campaign.save()
- envio = {'enviado': 1}
- jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
- return HttpResponse(jsonevento, mimetype='application/json')
- except Exception, e:
- print "No se envio mail test de campana e->", e
- envio = {'enviado': 0}
- jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
- return HttpResponse(jsonevento, mimetype='application/json')
- return 0
- def HistoricoCampaigns(request):
- ocliente = request.user.usuario.cliente
- oenvios = EnvioCampaignLista.objects.filter(cliente=ocliente).order_by('-id')
- paginator = Paginator(oenvios, 20) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- oenvios = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- oenvios = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- oenvios = paginator.page(paginator.num_pages)
- return render(request, 'fidelizacion/historicocampaigns.html', {'envios': oenvios})
- def DestinatariosCampaign(request, envio_id):
- oenvio = EnvioCampaignLista.objects.get(pk=envio_id)
- opersonas = PersonaCampaign.objects.filter(campaign=oenvio.campaign, lista=oenvio.lista)
- return render(request, 'fidelizacion/destinatarioscampaign.html', {'personas': opersonas})
- def SumarPuntosFidelizacion(paciente_id, giftcard_id=None, cantidad_giftcard=None, tratamiento_id=None,
- cantidad_tratamiento=None, producto_id=None, cantidad_producto=None, plan_id=None,
- cantidad_plan=None):
- # print 'SumarPuntosFidelizacion'
- try:
- opaciente = PacienteDentista.objects.get(pk=paciente_id)
- except:
- opaciente = None
- if opaciente:
- if tratamiento_id:
- try:
- puntos_a_sumar = int(tratamiento.objects.get(pk=tratamiento_id).puntos_fidelizacion) * int(
- cantidad_tratamiento)
- except:
- puntos_a_sumar = 0
- if producto_id:
- try:
- puntos_a_sumar = int(producto.objects.get(pk=producto_id).puntos_fidelizacion) * int(cantidad_producto)
- except:
- puntos_a_sumar = 0
- if plan_id:
- try:
- puntos_a_sumar = int(plan.objects.get(pk=plan_id).puntos_fidelizacion) * int(cantidad_plan)
- except:
- puntos_a_sumar = 0
- if giftcard_id:
- try:
- puntos_a_sumar = int(TipoGiftcard.objects.get(pk=giftcard_id).puntos_fidelizacion) * int(
- cantidad_giftcard)
- except:
- puntos_a_sumar = 0
- acumulado_final = int(opaciente.puntos_fidelizacion) + int(puntos_a_sumar)
- # print "ACUMULADO FINAL: ",acumulado_final
- if acumulado_final < 0:
- acumulado_final = 0
- opaciente.puntos_fidelizacion = acumulado_final
- opaciente.save()
- def RestarPuntosFidelizacion(paciente_id, giftcard_id=None, cantidad_giftcard=None, tratamiento_id=None,
- cantidad_tratamiento=None, producto_id=None, cantidad_producto=None, plan_id=None,
- cantidad_plan=None):
- try:
- opaciente = PacienteDentista.objects.get(pk=paciente_id)
- except:
- opaciente = None
- if opaciente:
- if tratamiento_id and cantidad_tratamiento:
- try:
- puntos_a_restar = int(tratamiento.objects.get(pk=tratamiento_id).puntos_fidelizacion) * int(
- cantidad_tratamiento)
- except:
- puntos_a_restar = 0
- if producto_id and cantidad_producto:
- try:
- puntos_a_restar = int(producto.objects.get(pk=producto_id).puntos_fidelizacion) * int(cantidad_producto)
- except:
- puntos_a_restar = 0
- if plan_id and cantidad_plan:
- try:
- puntos_a_restar = int(plan.objects.get(pk=plan_id).puntos_fidelizacion) * int(cantidad_plan)
- except:
- puntos_a_restar = 0
- if giftcard_id and cantidad_giftcard:
- try:
- puntos_a_restar = int(TipoGiftcard.objects.get(pk=giftcard_id).puntos_fidelizacion) * int(
- cantidad_giftcard)
- except:
- puntos_a_restar = 0
- acumulado_final = int(opaciente.puntos_fidelizacion) - int(puntos_a_restar)
- if acumulado_final < 0:
- acumulado_final = 0
- opaciente.puntos_fidelizacion = acumulado_final
- opaciente.save()
- def PuntosFidelizacion(request):
- pcliente = request.user.usuario.cliente
- if request.method == "POST":
- puntos_desde = request.POST.get('puntos_desde')
- puntos_hasta = request.POST.get('puntos_hasta')
- if puntos_desde and not puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__gte=int(puntos_desde)).order_by(
- '-puntos_fidelizacion')
- if puntos_hasta and not puntos_desde:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
- '-puntos_fidelizacion')
- if puntos_desde and puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__gte=int(puntos_desde),
- puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
- '-puntos_fidelizacion')
- if not puntos_desde and not puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
- return render(request, 'fidelizacion/puntosfidelizacion.html',
- {'pacientes': opacientes, 'puntos_desde': puntos_desde, 'puntos_hasta': puntos_hasta})
- else:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
- paginator = Paginator(opacientes, 20) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- opacientes = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- opacientes = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- opacientes = paginator.page(paginator.num_pages)
- return render(request, 'fidelizacion/puntosfidelizacion.html', {'pacientes': opacientes})
- def DescargarClientesPuntosFidelizacion(request):
- print "DescargarClientesPuntosFidelizacion"
- pcliente = request.user.usuario.cliente
- if request.method == "POST":
- puntos_desde = request.POST.get('puntos_desde2')
- puntos_hasta = request.POST.get('puntos_hasta2')
- # Ver que hacer si tipo pago es borrado o esta repetido, q pasa con los datos
- # oPacientes = PacienteDentista.objects.filter(cliente=pcliente,estado=1).order_by('name')
- if puntos_desde and not puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__gte=int(puntos_desde)).order_by(
- '-puntos_fidelizacion')
- if puntos_hasta and not puntos_desde:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
- '-puntos_fidelizacion')
- if puntos_desde and puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
- puntos_fidelizacion__gte=int(puntos_desde),
- puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
- '-puntos_fidelizacion')
- if not puntos_desde and not puntos_hasta:
- opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
- # print "oReferenciaPaciente",oReferenciaPaciente
- '''
- Escribir Excel
- '''
- style = xlwt.XFStyle()
- response = HttpResponse(mimetype='application/ms-excel')
- response['Content-Disposition'] = 'attachment; filename=PuntajePacientes.xls'
- libro = xlwt.Workbook()
- libro1 = libro.add_sheet("Puntaje Pacientes")
- fila = 0
- columna = 0
- oTraduccion_RUT = traduceWords("RUT")
- traduccion_RUT = oTraduccion_RUT.traduce_from_view(pcliente).decode("UTF-8")
- row = libro1.row(fila)
- row.write(columna, "Nombre")
- columna = columna + 1
- row.write(columna, "Apellido paterno")
- columna = columna + 1
- row.write(columna, "Apellido materno")
- columna = columna + 1
- row.write(columna, traduccion_RUT)
- columna = columna + 1
- row.write(columna, "Mail")
- columna = columna + 1
- row.write(columna, "Puntaje")
- fila = fila + 1
- for Paciente in opacientes:
- columna = 0
- row = libro1.row(fila)
- row.write(columna, smart_str(Paciente.name).decode("UTF-8"))
- columna = columna + 1
- row.write(columna, smart_str(Paciente.app_paterno).decode("UTF-8"))
- columna = columna + 1
- row.write(columna, smart_str(Paciente.app_materno).decode("UTF-8"))
- columna = columna + 1
- row.write(columna, smart_str(Paciente.rut).decode("UTF-8"))
- columna = columna + 1
- row.write(columna, smart_str(Paciente.mail).decode("UTF-8"))
- columna = columna + 1
- row.write(columna, int(Paciente.puntos_fidelizacion))
- fila = fila + 1
- libro.save(response)
- '''
- for num in range(5):
- row = libro1.row(num)
- for index, col in enumerate(cols):
- value = txt % (num+1, col)
- row.write(index, value)
- '''
- '''
- response = HttpResponse(content_type='text/csv')
- response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
- writer = csv.writer(response)
- writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
- writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
- '''
- print "ASDF"
- return response
- def ListListas(request):
- ocliente = request.user.usuario.cliente
- olistas = ListaMailing.objects.filter(cliente=ocliente, estado=1)
- oListasExcel = ListaMailingExcel.objects.filter(cliente=ocliente, estado=1)
- rows_listas = []
- for olista in olistas:
- opacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
- rows_listas.append({'lista': olista, 'Excel': False, 'asociados': len(opacientes_lista)})
- for olista in oListasExcel:
- registros = RegistroLista.objects.filter(lista=olista, estado=1)
- rows_listas.append({'lista': olista, 'Excel': True, 'asociados': len(registros)})
- return render(request, 'fidelizacion/listasmailing.html', {'rows_listas': rows_listas})
- def MakeLista(request):
- ocliente = request.user.usuario.cliente
- if request.method == "POST":
- nombre = request.POST.get('nombre')
- descripcion = request.POST.get('descripcion')
- oLista = ListaMailing(cliente=ocliente, nombre=nombre, descripcion=descripcion)
- oLista.save()
- return HttpResponseRedirect(reverse('fidelizacion:filtrosmailinglista', args=(oLista.id,)))
- else:
- return render(request, 'fidelizacion/makelista.html')
- def RemoveLista(request, lista_id, tipo_lista):
- if tipo_lista:
- ListaMailingExcel.objects.filter(pk=lista_id).update(estado=0)
- RegistroLista.objects.filter(lista_id=lista_id).update(estado=0)
- else:
- ListaMailing.objects.filter(pk=lista_id).update(estado=0)
- PacienteLista.objects.filter(lista_id=lista_id).update(estado=0)
- return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
- def EditLista(request, lista_id):
- olista = ListaMailing.objects.get(pk=lista_id, estado=1)
- ocliente = request.user.usuario.cliente
- if request.method == "POST":
- nombre = request.POST.get('nombre')
- descripcion = request.POST.get('descripcion')
- ListaMailing.objects.filter(pk=lista_id, cliente=ocliente).update(nombre=nombre, descripcion=descripcion)
- return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
- else:
- return render(request, 'fidelizacion/makelista.html', {'lista': olista})
- def EditPacientesLista(request, lista_id):
- opacienteslista = PacienteLista.objects.filter(lista_id=lista_id, estado=1)
- olista = ListaMailing.objects.get(pk=lista_id, estado=1)
- def DeletePacienteLista(request, lista_id, paciente_id):
- PacienteLista.objects.filter(lista_id=lista_id, paciente_id=paciente_id).update(estado=0)
- return HttpResponseRedirect(reverse('fidelizacion:filtrosmailinglista', args=(lista_id,)))
- def MakeEditCampaign(request, campaign_id=None):
- if campaign_id:
- ocampaign = Campaign.objects.get(pk=campaign_id)
- else:
- ocampaign = None
- ocliente = request.user.usuario.cliente
- try:
- oMail = mail.objects.get(cliente=ocliente)
- except Exception:
- oMail = None
- oEmpresa = empresa.objects.get(cliente=ocliente)
- if request.method == 'POST':
- texto = request.POST['texto_mail']
- texto = texto.replace("\n", "<br>")
- texto = texto.replace("\r", "")
- titulo = request.POST['titulo_mail']
- asunto = request.POST['asunto_mail']
- ancho = request.POST['ancho']
- color = request.POST['color']
- url = request.POST['url']
- try:
- ocultar_barra = request.POST['ocultar_barra_superior']
- except:
- ocultar_barra = False
- try:
- ocultar_logo = request.POST['ocultar_logo']
- except:
- ocultar_logo = False
- try:
- ocultar_texto = request.POST['ocultar_texto']
- except:
- ocultar_texto = False
- print "Ocultar barra ", ocultar_barra
- if not ancho:
- ancho = 350
- file = None
- if request.FILES:
- print "HAY ARCHIVOS !"
- file = request.FILES.getlist('imagen_mailing')[0]
- if file:
- imagen_mailing = ModelWithFileField(cliente=ocliente, docfile=file)
- imagen_mailing.save()
- else:
- imagen_mailing = None
- if campaign_id:
- imagen_mailing = ocampaign.imagen
- if campaign_id:
- Campaign.objects.filter(pk=campaign_id).update(asunto=asunto, titulo=titulo, texto=texto,
- imagen=imagen_mailing, ocultar_texto=ocultar_texto,
- ocultar_logo=ocultar_logo,
- ocultar_barra_superior=ocultar_barra, ancho=ancho,
- color=color, url=url)
- else:
- ocampaign = Campaign(cliente=ocliente, asunto=asunto, titulo=titulo, texto=texto, imagen=imagen_mailing,
- ocultar_texto=ocultar_texto, ocultar_logo=ocultar_logo,
- ocultar_barra_superior=ocultar_barra, ancho=ancho, color=color, url=url)
- ocampaign.save()
- return HttpResponseRedirect(reverse('fidelizacion:listcampaigns', args=()))
- else:
- return render(request, 'fidelizacion/designcorreomailing.html',
- {'empresa': oEmpresa, 'mail': oMail, 'campaign': ocampaign})
- def ListCampaigns(request, campaign_id=None, lista_id=None):
- ocliente = request.user.usuario.cliente
- from_email = get_or_none(mail, cliente=ocliente)
- ocampaigns = Campaign.objects.filter(cliente=ocliente, estado=1)
- mensaje = None
- if campaign_id and lista_id:
- ocampaign = Campaign.objects.get(pk=campaign_id)
- olista = ListaMailing.objects.get(pk=lista_id)
- mensaje = "Campaña de título: " + str(
- ocampaign.titulo) + ", enviada exitosamente a los clientes de la lista " + str(olista.nombre)
- return render(request, 'fidelizacion/listcampaigns.html',
- {'campaigns': ocampaigns, 'exito': mensaje, 'correo_amazon': from_email})
- def DeleteCampaign(request, campaign_id):
- ocliente = request.user.usuario.cliente
- Campaign.objects.filter(pk=campaign_id, cliente=ocliente).update(estado=0)
- return HttpResponseRedirect(reverse('fidelizacion:listcampaigns', args=()))
- def EliminarFotoCampaign(request, campaign_id):
- ocliente = request.user.usuario.cliente
- Campaign.objects.filter(pk=campaign_id, cliente=ocliente).update(imagen=None)
- return HttpResponseRedirect(reverse('fidelizacion:editcampaign', args=(campaign_id,)))
- def SelectListCampaign(request, campaign_id):
- ocliente = request.user.usuario.cliente
- try:
- stock_cliente = StockMailsCliente.objects.get(cliente=ocliente)
- except:
- stock_cliente = StockMailsCliente(cliente=ocliente, stock=0)
- stock_cliente.save()
- ocampaign = Campaign.objects.get(pk=campaign_id)
- olistas = ListaMailing.objects.filter(cliente=ocliente, estado=1)
- rows = []
- for lista in olistas:
- boton = True
- cantidad = len(PacienteLista.objects.filter(lista=lista, estado=1))
- if cantidad > stock_cliente.stock:
- boton = False
- row = {'lista': lista, 'cantidad': cantidad, 'boton': boton}
- rows.append(row)
- return render(request, 'fidelizacion/selectlistcampaign.html',
- {'rows_listas': rows, 'campaign': ocampaign, 'stock_cliente': stock_cliente})
- def SendCampaignLista(request, campaign_id, lista_id):
- # olista = ListaMailing.objects.get(pk=lista_id)
- # TODO: ACA SE DEBE TIRAR ESTO COMO UNA TAREA A UNA COLA
- cliente = request.user.usuario.cliente
- cliente_id = request.user.usuario.cliente.id
- now = datetime.datetime.now()
- oenviocampaignlista = EnvioCampaignLista(campaign_id=campaign_id, lista_id=lista_id, fecha=now, cliente=cliente)
- oenviocampaignlista.save()
- # QueueSendCampaignToLista(campaign_id,lista_id,cliente_id,oenviocampaignlista.id)
- SendCampaignMail.apply_async(args=[campaign_id, lista_id, cliente_id, oenviocampaignlista.id], countdown=5)
- return HttpResponseRedirect(reverse('fidelizacion:listcampaignsexito', args=(campaign_id, lista_id)))
- def RemoveFromCampaigns(request, uuid, cliente_id):
- ocliente = cliente.objects.get(pk=cliente_id)
- oempresa = empresa.objects.get(cliente_id=cliente_id)
- opaciente = None
- urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
- try:
- opaciente = PacienteDentista.objects.get(uuid=uuid)
- if request.method == "POST":
- now = datetime.datetime.now()
- salir = request.POST.get('salir')
- print "SALIR: ", salir
- if salir == "si":
- # aca lo saco de las listas siempre y cuando no haya una insercion previo en la tabal de personanomailing
- try:
- opersonanomailing = PersonaNoMailing.objects.get(paciente=opaciente, cliente=ocliente, estado=1)
- opersonanomailing.fecha = now
- opersonanomailing.save()
- except:
- opersonanomailing = PersonaNoMailing(paciente=opaciente, cliente=ocliente, fecha=now)
- opersonanomailing.save()
- PacienteLista.objects.filter(paciente=opaciente).update(estado=0)
- return render(request, 'fidelizacion/removidodelistas.html', {'urllogoreservo': urllogoreservo})
- if salir == "no":
- # aca lo devuelvo a las listas en las que estaba en caso que haya tenido una insercion previo en la tabla de personanomailing
- try:
- opersonanomailing = PersonaNoMailing.objects.get(paciente=opaciente, cliente=ocliente, estado=1)
- opersonanomailing.estado = 0
- opersonanomailing.save()
- PacienteLista.objects.filter(paciente=opaciente).update(estado=1)
- except:
- pass
- return render(request, 'fidelizacion/noremovidodelistas.html', {'urllogoreservo': urllogoreservo})
- else:
- return render(request, 'fidelizacion/remove_de_lista.html',
- {'paciente': opaciente, 'empresa': oempresa, 'cliente': ocliente,
- 'urllogoreservo': urllogoreservo})
- except:
- return render(request, 'fidelizacion/remove_de_lista.html',
- {'paciente': opaciente, 'empresa': oempresa, 'cliente': ocliente,
- 'urllogoreservo': urllogoreservo})
- def ListadoDesvinculados(request):
- ocliente = request.user.usuario.cliente
- odesvinculados = PersonaNoMailing.objects.filter(cliente=ocliente, estado=1)
- paginator = Paginator(odesvinculados, 20) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- odesvinculados = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- odesvinculados = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- odesvinculados = paginator.page(paginator.num_pages)
- return render(request, 'fidelizacion/personasnomailing.html', {'desvinculados': odesvinculados})
- def BolsaDeCorreos(request):
- ocliente = request.user.usuario.cliente
- try:
- stock_cliente = StockMailsCliente.objects.get(cliente=ocliente)
- except:
- stock_cliente = StockMailsCliente(cliente=ocliente, stock=0)
- stock_cliente.save()
- return render(request, 'fidelizacion/bolsadecorreos.html', {'stock': stock_cliente})
- def ScriptUpdateUuidRepetidos():
- # from django.db.models import Count
- import uuid
- PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
- dupes = PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
- paciente_a_updatear = PacienteDentista.objects.filter(uuid__in=[item['uuid'] for item in dupes])
- print "CANTIDAD DE UUIDS REPETIDOS 1: ", len(paciente_a_updatear)
- for pac in paciente_a_updatear:
- pac.uuid = uuid.uuid1()
- pac.save()
- # print "UUID: ",pac.uuid
- # print "UUID RANDOM: ",uuid.uuid1()
- PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
- dupes = PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
- paciente_a_updatear = PacienteDentista.objects.filter(uuid__in=[item['uuid'] for item in dupes])
- print "CANTIDAD DE UUIDS REPETIDOS 2: ", len(paciente_a_updatear)
- def reloadAtributosFiltroMailing(cliente_id):
- AtributosFiltroMailing.objects.filter(persona__cliente_id=cliente_id, estado=1).update(estado=0)
- AtributosFiltroMailing.crear_AtributosFiltroMailing(cliente_id)
- return 'Listo'
- # from Fidelizacion.views import reloadAllAtributosMailing
- def reloadAllAtributosMailing():
- from cliente.models import cliente
- oClientes = cliente.objects.filter()
- for oCliente in oClientes:
- print " agregando atributo mailing para cliente -> ", oCliente
- reloadAtributosFiltroMailing(oCliente.pk)
- def UploadLista(request):
- ocliente = request.user.usuario.cliente
- if request.method == 'POST':
- file = request.FILES['uploadedList']
- # print file
- nombre = request.POST.get('nombre')
- descripcion = request.POST.get('descripcion')
- oLista = ListaMailingExcel(cliente=ocliente, nombre=nombre, descripcion=descripcion)
- oLista.save()
- workbook = xlrd.open_workbook(file_contents=file.read())
- # print workbook.sheet_names()
- worksheet = workbook.sheet_by_name('Lista Mailing')
- num_rows = worksheet.nrows - 1
- # print 'num_rows',num_rows
- num_cells = worksheet.ncols - 1
- # print "num_cells",num_cells
- curr_row = 0
- errors = []
- registros = []
- i = 0
- while curr_row < num_rows:
- data = []
- mail = None
- curr_row += 1
- row = worksheet.row(curr_row)
- # print 'Row:', curr_row
- curr_cell = -1
- while curr_cell < num_cells:
- curr_cell += 1
- # Cell Types: 0=Empty, 1=Text, 2=Number, 3=Date, 4=Boolean, 5=Error, 6=Blank
- cell_type = worksheet.cell_type(curr_row, curr_cell)
- cell_value = worksheet.cell_value(curr_row, curr_cell)
- data.append(cell_value)
- # print ' ', cell_type, ':', cell_value
- try:
- nombre = data[0]
- except:
- nombre = None
- try:
- app_paterno = data[1]
- except:
- app_paterno = None
- try:
- app_materno = data[2]
- except:
- app_materno = None
- try:
- mail = data[4]
- if mail == "":
- error = "No se encontro el Mail en la fila " + str(curr_row) + "."
- errors.append(error)
- except:
- error = "No se encontro informacion en la columna del Mail en la fila " + str(curr_row) + "."
- errors.append(error)
- try:
- sexo = data[3]
- except:
- sexo = None
- if mail:
- # print "SAVEE --> "
- oRegistro = RegistroLista(cliente=ocliente, nombre=nombre, app_paterno=app_paterno,
- app_materno=app_materno, sexo=sexo, mail=mail, lista=oLista)
- registros.append(oRegistro)
- i += 1
- if not errors:
- if i == 2000:
- RegistroLista.objects.bulk_create(registros[d] for d in range(1, i))
- registros = []
- i = 0
- if not errors:
- RegistroLista.objects.bulk_create(registros[d] for d in range(0, i))
- return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
- else:
- ListaMailing.objects.filter(pk=oLista.id).update(estado=0)
- print errors
- return render(request, 'fidelizacion/uploadLista.html',
- {"error": "Se detectaron errores en el documento.", "errors": errors})
- else:
- return render(request, 'fidelizacion/uploadLista.html', {})
- def PrintBaseUpload(request):
- style = xlwt.XFStyle()
- response = HttpResponse(mimetype='application/ms-excel')
- response['Content-Disposition'] = 'attachment; filename=base-mailing.xls'
- libro = xlwt.Workbook()
- libro1 = libro.add_sheet("Lista Mailing")
- fila = 0
- columna = 0
- row = libro1.row(fila)
- row.write(columna, "Nombre")
- columna = columna + 1
- row.write(columna, "Apellido Paterno")
- columna = columna + 1
- row.write(columna, "Apellido Materno")
- columna = columna + 1
- row.write(columna, "Sexo")
- columna = columna + 1
- row.write(columna, "Mail")
- libro.save(response)
- return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement