Advertisement
Guest User

Untitled

a guest
Feb 10th, 2017
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 74.10 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from Fidelizacion.forms import FiltrosMailingForm
  3. from Fidelizacion.models import EnvioCampaignLista, PersonaNoMailing, \
  4. AtributosFiltroMailing, ConfigMailing, Campaign, CantidadExtraMesCliente, \
  5. PersonaCampaign, ListaMailing, PacienteLista, StockMailsCliente, RegistroLista, ListaMailingExcel
  6. from Fidelizacion.tasks import TaskEnviarMailing
  7. from Giftcard.models import TipoGiftcard
  8. from SQSApplication.Queues import QueueSendCampaignToLista
  9. from SQSApplication.tasks import SendCampaignMail
  10. from cliente.models import empresa, cliente
  11. from configuracion.models import ConfiguracionCadena
  12. from datetime import date
  13. from diccionario.templatetags.traduction import traduceWords
  14. from disponibilidadProfesional.models import TicketMultiTratamientoIPLService
  15. from django.conf import settings
  16. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  17. from django.core.serializers.json import DjangoJSONEncoder
  18. from django.core.urlresolvers import reverse
  19. from django.db.models import Count
  20. from django.http import HttpResponse, HttpResponseRedirect
  21. from django.shortcuts import render, render_to_response
  22. from django.template import loader, Context
  23. from django.template.loader import render_to_string
  24. from django.utils.encoding import smart_str
  25. from mail.models import mail
  26. from mail.views import sendemail
  27. from cliente.models import cliente
  28. from pacienteDentista.models import PacienteDentista
  29. from planes.models import plan
  30. from productos.models import producto
  31. from tratamiento.models import tratamiento
  32. from upload.models import ModelWithFileField
  33. from utils.models import get_or_none
  34. import datetime
  35. import json
  36. import requests
  37. import time
  38. import xlwt
  39. import xlrd
  40.  
  41.  
  42. # from Reservo.settings import celery
  43.  
  44.  
  45. def correosincorrectos(request):
  46. ocliente = request.user.usuario.cliente
  47. oPacientes = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente, valid_mail=False,
  48. correo_validado=True).exclude(mail='')
  49.  
  50. oListas = ListaMailingExcel.objects.from_chain(cliente=ocliente)
  51. oListas = oListas.filter(estado=1)
  52. oRegistros = RegistroLista.objects.none()
  53. oRegistros_validacion = RegistroLista.objects.none()
  54. oRegistros_no_validados = 0
  55.  
  56. for lista in oListas:
  57. print "LISTAAA --> ", lista
  58. oregs = RegistroLista.objects.filter(estado=1, lista=lista, valid_mail=False, correo_validado=True).exclude(
  59. mail='')
  60. oregs_no_validados = RegistroLista.objects.filter(estado=1, lista=lista, correo_validado=False).exclude(
  61. mail='').exclude(mail__isnull=True).count()
  62. oregs_validacion = RegistroLista.objects.filter(estado=1, lista=lista, correo_validado=False).exclude(
  63. mail='').exclude(mail__isnull=True)
  64. print "NO VALIDOS LISTAAA --> ", oregs_no_validados
  65.  
  66. oRegistros = oRegistros | oregs
  67. oRegistros_validacion = oRegistros_validacion | oregs_validacion
  68. oRegistros_no_validados += oregs_no_validados
  69. print "NO VALIDOS TOTAL --> ", oRegistros_no_validados
  70.  
  71. oPacientes_no_validados = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente,
  72. correo_validado=False).exclude(mail='').exclude(
  73. mail__isnull=True).count()
  74. oPacientes_validacion = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente,
  75. correo_validado=False).exclude(mail='').exclude(
  76. mail__isnull=True)
  77. print "PACIENTES NO VALIDADOS --> ", oPacientes_no_validados
  78.  
  79. if request.is_ajax():
  80. #print request.POST
  81.  
  82. registros_validos = request.POST.getlist('registros_validos[]')
  83. registros_invalidos = request.POST.getlist('registros_invalidos[]')
  84. pacientes_validos = request.POST.getlist('pacientes_validos[]')
  85. pacientes_invalidos = request.POST.getlist('pacientes_invalidos[]')
  86.  
  87. print pacientes_validos
  88. print pacientes_invalidos
  89. print registros_validos
  90. print registros_invalidos
  91.  
  92. for paciente in pacientes_validos:
  93. PacienteDentista.objects.filter(pk = paciente).update(correo_validado = 1, valid_mail = 1)
  94.  
  95. for paciente in pacientes_invalidos:
  96. PacienteDentista.objects.filter(pk = paciente).update(correo_validado = 1, valid_mail = 0)
  97.  
  98. for registro in registros_validos:
  99. RegistroLista.objects.filter(pk = registro).update(correo_validado = 1, valid_mail = 1)
  100.  
  101. for registro in registros_invalidos:
  102. RegistroLista.objects.filter(pk = registro).update(correo_validado = 1, valid_mail = 0)
  103.  
  104.  
  105. '''
  106. if request.is_ajax():
  107. envio = 1
  108. ValidaMail(ocliente)
  109. print envio
  110. jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
  111. return HttpResponse(jsonevento, mimetype='application/json')
  112. '''
  113.  
  114. print 'oPacientes --> ', oPacientes
  115. print 'oRegistros --> ', oRegistros
  116. print 'oPacientes VALIDACION --> ', oPacientes_validacion
  117. print 'oRegistros VALIDACION --> ', oRegistros_validacion
  118. # print 'oPacientes_no_validados',oPacientes_no_validados
  119. return render(request, 'fidelizacion/mail_incorrectos.html', {'paciente': oPacientes, 'registros': oRegistros,
  120. 'oPacientes_no_validados': oPacientes_no_validados + oRegistros_no_validados,
  121. 'paciente_validacion': oPacientes_validacion,
  122. 'registro_validacion': oRegistros_validacion})
  123.  
  124.  
  125. def editcorreosincorrecto(request, paciente_id=None, tipo_lista=None):
  126. ocliente = request.user.usuario.cliente
  127. # print 'paciente_id',paciente_id
  128. #print tipo_lista
  129. if tipo_lista == "True":
  130. try:
  131. oPacientes = PacienteDentista.objects.from_chain(estado=1, cliente=ocliente, id=paciente_id)[0]
  132. except:
  133. oPacientes = []
  134. else:
  135. try:
  136. oPacientes = RegistroLista.objects.filter(estado = 1, id = paciente_id)[0]
  137. except:
  138. oPacientes = []
  139.  
  140. if request.is_ajax():
  141. blanco = request.POST.get('id')
  142.  
  143. if blanco:
  144. tipo = request.POST.get('tipo')
  145.  
  146. print blanco
  147. print tipo
  148.  
  149. if tipo == "paciente":
  150. PacienteDentista.objects.filter(pk = blanco).update(mail = "", valid_mail = 0, correo_validado = 0)
  151. else:
  152. RegistroLista.objects.filter(pk = blanco).update(mail = "", valid_mail = 0, correo_validado = 0)
  153.  
  154. else:
  155. registros_validos = request.POST.getlist('registros_validos[]')
  156. registros_invalidos = request.POST.getlist('registros_invalidos[]')
  157. pacientes_validos = request.POST.getlist('pacientes_validos[]')
  158. pacientes_invalidos = request.POST.getlist('pacientes_invalidos[]')
  159. mail = request.POST.get('mail')
  160.  
  161. print pacientes_validos
  162. print pacientes_invalidos
  163. print registros_validos
  164. print registros_invalidos
  165. print mail
  166.  
  167. for paciente in pacientes_validos:
  168. PacienteDentista.objects.filter(pk=paciente).update(mail = mail, correo_validado=1, valid_mail=1)
  169.  
  170. for paciente in pacientes_invalidos:
  171. PacienteDentista.objects.filter(pk=paciente).update(correo_validado=1, valid_mail=0)
  172.  
  173. for registro in registros_validos:
  174. RegistroLista.objects.filter(pk=registro).update(mail = mail, correo_validado=1, valid_mail=1)
  175.  
  176. for registro in registros_invalidos:
  177. RegistroLista.objects.filter(pk=registro).update(correo_validado=1, valid_mail=0)
  178.  
  179. return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
  180.  
  181. else:
  182. return render(request, 'fidelizacion/edit_mail_incorrecto.html',
  183. {'paciente': oPacientes, 'tipo_lista': tipo_lista})
  184.  
  185.  
  186. ''' # print 'oPacientes',oPacientes
  187. if request.method == 'POST':
  188. addressToVerify = request.POST.get('new_mail')
  189. # print 'addressToVerify',addressToVerify
  190. addressToVerify = addressToVerify.lower()
  191.  
  192. if not addressToVerify:
  193. oPacientes.mail = ''
  194. oPacientes.valid_mail = False
  195. oPacientes.correo_validado = False
  196. oPacientes.save()
  197. return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
  198.  
  199. import re
  200. match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)
  201. if match == None:
  202. print addressToVerify, '-->', ('Bad Syntax')
  203. return render(request, 'fidelizacion/edit_mail_incorrecto.html',
  204. {'paciente': oPacientes, 'error': 'Mala Sintaxis'})
  205.  
  206.  
  207. # Api Moncho -> pubkey-44c5725e0768a9d4f59098bf2ad25180
  208. req = requests.get("https://api.mailgun.net/v3/address/validate",
  209. auth=("api", "pubkey-5ogiflzbnjrljiky49qxsiozqef5jxp7"), params={"address": addressToVerify})
  210. try:
  211. respuesta = req.json()
  212. if respuesta['is_valid']:
  213. print addressToVerify, '->', ('Success Valid Mail API')
  214. oPacientes.mail = addressToVerify
  215. oPacientes.valid_mail = True
  216. oPacientes.correo_validado = True
  217. oPacientes.save()
  218. return HttpResponseRedirect(reverse('fidelizacion:correosincorrectos', args=()))
  219. else:
  220. oPacientes.mail = addressToVerify
  221. oPacientes.valid_mail = False
  222. oPacientes.correo_validado = True
  223. oPacientes.save()
  224. print addressToVerify, '->', ('Bad')
  225. return render(request, 'fidelizacion/edit_mail_incorrecto.html',
  226. {'paciente': oPacientes, 'error': 'Correo No Valido '})
  227. except:
  228. print addressToVerify, '->', ('error Bad')
  229. oPacientes.mail = addressToVerify
  230. oPacientes.valid_mail = False
  231. oPacientes.correo_validado = True
  232. oPacientes.save()
  233. return render(request, 'fidelizacion/edit_mail_incorrecto.html',
  234. {'paciente': oPacientes, 'error': 'No se pudo validar el correo'})
  235. '''
  236.  
  237.  
  238.  
  239.  
  240. '''
  241. def ValidaMail(cliente_id):
  242. #print 'ValidaMail'
  243. from cliente.models import cliente
  244. oPacientes = PacienteDentista.objects.from_chain(cliente_id=cliente_id, estado=1).exclude(mail__isnull=True)
  245. oPacientes = oPacientes.exclude(mail='')
  246. oPacientes = oPacientes.exclude(correo_validado=True)
  247.  
  248. oPaciantesLista = PacienteLista.objects.filter(paciente__in=oPacientes, estado = 1)
  249. oRegistros = PacienteLista.objects.none()
  250.  
  251. #cliente = cliente.objects.get(pk = cliente_id)
  252.  
  253. oListas = ListaMailingExcel.objects.from_chain(cliente = cliente_id)
  254. oListas = oListas.filter(estado = 1)
  255.  
  256. for lista in oListas:
  257. oregs = PacienteLista.objects.filter(registro__lista = lista, estado = 1)
  258.  
  259. oRegistros = oRegistros | oregs
  260.  
  261. oRevisionMail = oPaciantesLista | oRegistros
  262. print oRevisionMail
  263.  
  264. for revmail in oRevisionMail:
  265.  
  266. continuar = True
  267. addresstoVerify = None
  268. paciente = True
  269.  
  270. try:
  271. addresstoVerify = revmail.paciente.mail.lower()
  272. paciente = True
  273.  
  274. except:
  275. addresstoVerify = revmail.registro.mail.lower()
  276. paciente = False
  277.  
  278. import re
  279.  
  280. match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addresstoVerify)
  281.  
  282. if match == None:
  283.  
  284. continuar = False
  285. if paciente:
  286. revmail.paciente.valid_mail = False
  287. revmail.paciente.correo_validado = True
  288. revmail.save()
  289. else:
  290. revmail.registro.valid_mail = False
  291. revmail.registro.correo_validado = True
  292. revmail.save()
  293.  
  294. if continuar:
  295. i = 1
  296. if i == 1:
  297. # Api Moncho -> pubkey-44c5725e0768a9d4f59098bf2ad25180
  298. req = requests.get("https://api.mailgun.net/v3/address/validate",
  299. auth=("api", "pubkey-44c5725e0768a9d4f59098bf2ad25180"),
  300. params={"address": addresstoVerify})
  301. i = 2
  302. if i == 2:
  303. # Api Concho sebastian sc3.cl -> pubkey-5a11d2ceacbfafb56af933c41aca9be8
  304. req = requests.get("https://api.mailgun.net/v3/address/validate",
  305. auth=("api", "pubkey-5a11d2ceacbfafb56af933c41aca9be8"),
  306. params={"address": addresstoVerify})
  307. i = 3
  308. if i == 3:
  309. # Pablo pubkey-3cd9a401026f2c67a23bd0c5bfc719e8
  310. req = requests.get("https://api.mailgun.net/v3/address/validate",
  311. auth=("api", "pubkey-3cd9a401026f2c67a23bd0c5bfc719e8"),
  312. params={"address": addresstoVerify})
  313. i = 4
  314. if i == 4:
  315. # Api Contacto Reservo ->3cd9a401026f2c67a23bd0c5bfc719e8
  316. req = requests.get("https://api.mailgun.net/v3/address/validate",
  317. auth=("api", "pubkey-c5e62cb03f6eba279bb28d54c01931f3"),
  318. params={"address": addresstoVerify})
  319. i = 1
  320.  
  321. try:
  322. respuesta = req.json()
  323. if respuesta['is_valid']:
  324. if paciente:
  325. revmail.paciente.valid_mail = True
  326. revmail.paciente.correo_validado = True
  327. revmail.save()
  328.  
  329. else:
  330. revmail.registro.valid_mail = True
  331. revmail.registro.correo_validado = True
  332. revmail.save()
  333.  
  334. else:
  335. if paciente:
  336. revmail.paciente.valid_mail = False
  337. revmail.paciente.correo_validado = True
  338. revmail.save()
  339.  
  340. else:
  341. revmail.registro.valid_mail = False
  342. revmail.registro.correo_validado = True
  343. revmail.save()
  344.  
  345. except:
  346. if paciente:
  347. revmail.paciente.mail = addresstoVerify
  348. revmail.paciente.valid_mail = False
  349. revmail.paciente.correo_validado = True
  350. revmail.save()
  351.  
  352. else:
  353. revmail.registro.mail = addresstoVerify
  354. revmail.registro.valid_mail = False
  355. revmail.registro.correo_validado = True
  356. revmail.save()
  357. '''
  358.  
  359.  
  360. def SeleccionarFiltros(request, lista_id):
  361. # print "en SeleccionarFiltros"
  362. oatributos_pacientes = None
  363. ocliente = request.user.usuario.cliente
  364. olista = ListaMailing.objects.get(pk=lista_id, estado=1)
  365. # print 'cadena',ocliente.cadena
  366. PacientesCadena = False
  367. try:
  368. oConfiguracionCadena = ConfiguracionCadena.objects.get(cadena=ocliente.cadena)
  369. except:
  370. oConfiguracionCadena = []
  371. # print 'oConfiguracionCadena',oConfiguracionCadena.pacientetodosLocales
  372. if oConfiguracionCadena:
  373. PacientesCadena = oConfiguracionCadena.pacientetodosLocales
  374. if PacientesCadena:
  375. oClientes = cliente.objects.filter(cadena=ocliente.cadena)
  376. else:
  377. oClientes = [request.user.usuario.cliente]
  378. # print 'oClientes',oClientes
  379. if request.method == 'POST':
  380. # print "en el post dfe filtros"
  381. data = request.POST
  382. print "DATAA", data
  383. form = FiltrosMailingForm(cliente=ocliente, data=data)
  384. pacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
  385. ids_pacientes = set()
  386. ids_registros = set()
  387. for pac_list in pacientes_lista:
  388. try:
  389. ids_pacientes.add(pac_list.paciente.id)
  390. except:
  391. ids_registros.add(pac_list.registro.id)
  392.  
  393. oatributos_pacientes_anteriores = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes,
  394. persona_id__in=ids_pacientes, estado=1,
  395. persona__mail__isnull=False).exclude(
  396. persona__mail="")
  397. oatributos_registros_anteriores = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes,
  398. registro_id__in=ids_registros, estado=1,
  399. registro__mail__isnull=False).exclude(
  400. registro__mail="")
  401.  
  402. oatributos_pacientes_anteriores = oatributos_pacientes_anteriores | oatributos_registros_anteriores
  403. print "ANTERIOREEES --> ", oatributos_pacientes_anteriores
  404.  
  405. if form.is_valid():
  406.  
  407. olistas = request.POST.getlist('otras_listas')
  408. print "LISTAAAS --> ", olistas
  409. try:
  410. olistas.remove('multiselect-all')
  411. except:
  412. pass
  413.  
  414. ids = []
  415. ids_lista = []
  416. oexistent = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes, estado=1).values(
  417. 'registro_id')
  418. print oexistent
  419.  
  420. for existent in oexistent:
  421. ids.append(existent['registro_id'])
  422.  
  423. for lista in olistas:
  424. print lista
  425. regs = []
  426. i = 0
  427.  
  428. oregistros = RegistroLista.objects.filter(lista_id=lista, estado=1)
  429. print oregistros
  430.  
  431. for registro in oregistros:
  432. ids_lista.append(registro.lista_id)
  433. if registro.id not in ids:
  434. oatribs = AtributosFiltroMailing(registro=registro, estado=1)
  435. regs.append(oatribs)
  436. i += 1
  437.  
  438. if i == 2000:
  439. AtributosFiltroMailing.objects.bulk_create(regs[d] for d in range(0, i))
  440. regs = []
  441. i = 0
  442.  
  443. AtributosFiltroMailing.objects.bulk_create(regs[d] for d in range(0, i))
  444.  
  445. oatributos_pacientes = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes, estado=1,
  446. persona__mail__isnull=False).exclude(
  447. persona__mail="")
  448. oatributos_registros = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes, estado=1,
  449. registro__mail__isnull=False,
  450. registro__lista_id__in=ids_lista).exclude(
  451. registro__mail="")
  452.  
  453. # print "atributos antes de los filtros ",oatributos_pacientes
  454. palabras_antecedentes = data['antecedentes_personales']
  455. if palabras_antecedentes:
  456. print "palabras_antecedentes"
  457. palabras = palabras_antecedentes.split(" ")
  458. for palabra in palabras:
  459. oatributos_pacientes = oatributos_pacientes.filter(
  460. persona__antecedentes_personales__icontains=palabra)
  461.  
  462. if data['puntos_desde'] and data['puntos_hasta']:
  463. print "PUNTOS DESDE Y HASTA"
  464. oatributos_pacientes = oatributos_pacientes.filter(
  465. persona__puntos_fidelizacion__gte=data['puntos_desde'],
  466. persona__puntos_fidelizacion__lte=data['puntos_hasta'])
  467. if data['puntos_desde'] and not data['puntos_hasta']:
  468. print "PUNTOS DESDE Y NO HASTA"
  469. oatributos_pacientes = oatributos_pacientes.filter(
  470. persona__puntos_fidelizacion__gte=data['puntos_desde'])
  471. if not data['puntos_desde'] and data['puntos_hasta']:
  472. print "PUNTOS NO DESDE Y HASTA"
  473. oatributos_pacientes = oatributos_pacientes.filter(
  474. persona__puntos_fidelizacion__lte=data['puntos_hasta'])
  475. try:
  476. if data['sexo']:
  477. print "SEXO"
  478. oatributos_pacientes = oatributos_pacientes.filter(persona__sexo=data['sexo'])
  479. except:
  480. pass
  481. if data['edad_desde'] and data['edad_hasta']:
  482. print "EDAD 1"
  483. hoy = datetime.datetime.now()
  484. oday = hoy.day
  485. omonth = hoy.month
  486. oyear = hoy.year
  487. date_desde = date(int(oyear) - int(data['edad_hasta']), omonth, oday)
  488. date_hasta = date(int(oyear) - int(data['edad_desde']), omonth, oday)
  489. oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__gte=date_desde,
  490. persona__fecha_nacimiento__lte=date_hasta)
  491. else:
  492. if data['edad_desde']:
  493. print "EDAD 2"
  494. hoy = datetime.datetime.now()
  495. oday = hoy.day
  496. omonth = hoy.month
  497. oyear = hoy.year
  498. date_hasta = date(int(oyear) - int(data['edad_desde']), omonth, oday)
  499. oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__lte=date_hasta)
  500. if data['edad_hasta']:
  501. print "EDAD 3"
  502. hoy = datetime.datetime.now()
  503. oday = hoy.day
  504. omonth = hoy.month
  505. oyear = hoy.year
  506. date_desde = date(int(oyear) - int(data['edad_hasta']), omonth, oday)
  507. oatributos_pacientes = oatributos_pacientes.filter(persona__fecha_nacimiento__gte=date_desde)
  508. if data['fecha_ultima_cita_desde'] and data['fecha_ultima_cita_hasta']:
  509. print "fecha 1"
  510. fecha_ultima_cita_desde = datetime.datetime.strptime(data['fecha_ultima_cita_desde'],
  511. '%d-%m-%Y').strftime('%Y-%m-%d')
  512. fecha_ultima_cita_hasta = datetime.datetime.strptime(data['fecha_ultima_cita_hasta'],
  513. '%d-%m-%Y').strftime('%Y-%m-%d')
  514. oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__gte=fecha_ultima_cita_desde,
  515. fecha_ultima_cita__lte=fecha_ultima_cita_hasta)
  516. else:
  517. if data['fecha_ultima_cita_desde']:
  518. print "fecha 2"
  519. fecha_ultima_cita_desde = datetime.datetime.strptime(data['fecha_ultima_cita_desde'],
  520. '%d-%m-%Y').strftime('%Y-%m-%d')
  521. oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__gte=fecha_ultima_cita_desde)
  522. if data['fecha_ultima_cita_hasta']:
  523. print "fecha 3"
  524. fecha_ultima_cita_hasta = datetime.datetime.strptime(data['fecha_ultima_cita_hasta'],
  525. '%d-%m-%Y').strftime('%Y-%m-%d')
  526. oatributos_pacientes = oatributos_pacientes.filter(fecha_ultima_cita__lte=fecha_ultima_cita_hasta)
  527.  
  528. if data['gasto_total_desde'] and data['gasto_total_hasta']:
  529. print "gasto 1"
  530. oatributos_pacientes = oatributos_pacientes.filter(gasto_total__gte=data['gasto_total_desde'],
  531. gasto_total__lte=data['gasto_total_hasta'])
  532. else:
  533. if data['gasto_total_desde']:
  534. print "gasto 2"
  535. oatributos_pacientes = oatributos_pacientes.filter(gasto_total__gte=data['gasto_total_desde'])
  536. if data['gasto_total_hasta']:
  537. print "gasto 3"
  538. oatributos_pacientes = oatributos_pacientes.filter(gasto_total__lte=data['gasto_total_hasta'])
  539. if data['numero_de_citas_desde'] and data['numero_de_citas_hasta']:
  540. print "citas 1"
  541. oatributos_pacientes = oatributos_pacientes.filter(numero_de_citas__gte=data['numero_de_citas_desde'],
  542. numero_de_citas__lte=data['numero_de_citas_hasta'])
  543. else:
  544. if data['numero_de_citas_desde']:
  545. print "citas 2"
  546. oatributos_pacientes = oatributos_pacientes.filter(
  547. numero_de_citas__gte=data['numero_de_citas_desde'])
  548. if data['numero_de_citas_hasta']:
  549. print "citas 3"
  550. oatributos_pacientes = oatributos_pacientes.filter(
  551. numero_de_citas__lte=data['numero_de_citas_hasta'])
  552. request.method = ""
  553.  
  554. tratamientos = request.POST.getlist('tratamientos')
  555. try:
  556. tratamientos.remove('multiselect-all')
  557. except:
  558. pass
  559. # print 'tratamientos',tratamientos
  560. fechainicio = request.POST.get('fecha_tratamiento_desde')
  561. fechafin = request.POST.get('fecha_tratamiento_hasta')
  562. if fechainicio and fechafin and tratamientos:
  563. print "aca", fechainicio, fechafin, tratamientos
  564. dateinicio = datetime.datetime.strptime(fechainicio, '%d-%m-%Y')
  565. datefin = datetime.datetime.strptime(fechafin, '%d-%m-%Y')
  566. oTicketMultiTratamientoIPLService = TicketMultiTratamientoIPLService.objects.filter(
  567. tratamientos__in=tratamientos, ticket__fecha__range=[dateinicio, datefin],
  568. ticket__estadoTicket__codigo='A').exclude(ticket__demandante__persona=None).values(
  569. 'ticket__demandante__persona').distinct()
  570. # print oTicketMultiTratamientoIPLService
  571. id_pacientes = []
  572. for oticket in oTicketMultiTratamientoIPLService:
  573. id_pacientes.append(oticket['ticket__demandante__persona'])
  574. print 'id_pacientes', id_pacientes
  575. oatributos_pacientes = oatributos_pacientes.filter(persona__in=id_pacientes)
  576. # oPacienteDentista=PacienteDentista.objects.filter(id__in=id_pacientes)
  577. # print "oatributos_pacientes ",len(oatributos_pacientes)
  578.  
  579. oatributos_pacientes = oatributos_pacientes.exclude(
  580. persona_id__in=PersonaNoMailing.objects.filter(cliente__in=oClientes, estado=1).values_list(
  581. 'paciente_id', flat=True))
  582. print 'tratamientos', tratamientos
  583. string_tratamientos = ''
  584. i = 0
  585. for otratamiento in tratamientos:
  586. if i == 0:
  587. string_tratamientos = str(otratamiento)
  588. i = 1
  589. else:
  590. string_tratamientos = string_tratamientos + ',' + str(otratamiento)
  591. print 'string_tratamientos', string_tratamientos
  592.  
  593. categorias = request.POST.getlist('categoria')
  594. print "CATEGORIAS --> ", categorias
  595. try:
  596. categorias.remove('multiselect-all')
  597. except:
  598. pass
  599.  
  600. oatributos_pacientes = oatributos_pacientes.filter(persona__categoria__in=categorias)
  601.  
  602. oatributos_pacientes = oatributos_pacientes | oatributos_registros
  603. oatributos_template = []
  604.  
  605. for atrib in oatributos_pacientes:
  606. if atrib not in oatributos_pacientes_anteriores:
  607. oatributos_template.append(atrib)
  608.  
  609. print "AHORAAA --> ", oatributos_template
  610.  
  611. return render(request, 'fidelizacion/filtromailing.html',
  612. {'tratamientos': string_tratamientos, 'form': form, 'lista': olista,
  613. 'atributos': oatributos_template, 'atributos_anteriores': oatributos_pacientes_anteriores})
  614. # return HttpResponseRedirect(reverse('fidelizacion:getlistacorreos', args=(request,oatributos_pacientes)))
  615. # return HttpResponseRedirect(reverse('fidelizacion:gestlistacorreos' , args=(), kwargs={'atributos':oatributos_pacientes}))
  616. else:
  617. # print "not valid"
  618. return render(request, 'fidelizacion/filtromailing.html',
  619. {'form': form, 'lista': olista, 'atributos_anteriores': oatributos_pacientes_anteriores})
  620. else:
  621. form = FiltrosMailingForm(cliente=ocliente)
  622. print "ESTYO ACA: ", olista
  623. pacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
  624. ids_pacientes = set()
  625. ids_registros = set()
  626. for pac_list in pacientes_lista:
  627. try:
  628. ids_pacientes.add(pac_list.paciente.id)
  629. except:
  630. ids_registros.add(pac_list.registro.id)
  631.  
  632. oatributos_pacientes = AtributosFiltroMailing.objects.filter(persona__cliente__in=oClientes,
  633. persona_id__in=ids_pacientes, estado=1,
  634. persona__mail__isnull=False).exclude(
  635. persona__mail="").exclude(
  636. persona_id__in=PersonaNoMailing.objects.filter(cliente=ocliente, estado=1).values_list('paciente_id',
  637. flat=True))
  638. oatributos_registros = AtributosFiltroMailing.objects.filter(registro__cliente__in=oClientes,
  639. registro_id__in=ids_registros, estado=1).exclude(
  640. registro__mail="")
  641.  
  642. oatributos_pacientes = oatributos_pacientes | oatributos_registros
  643.  
  644. print "CANTIDAD DE ANTERIORES: ", len(oatributos_pacientes)
  645. return render(request, 'fidelizacion/filtromailing.html',
  646. {'form': form, 'lista': olista, 'pacientes_lista': pacientes_lista,
  647. 'atributos_anteriores': oatributos_pacientes})
  648.  
  649.  
  650. def getListaCorreos(request, atributos=None, lista_id=None):
  651. print "en getListaCorreos", atributos
  652. print "LISTAS ID ", lista_id
  653. if request.method == 'POST':
  654. pacientes_lista = PacienteLista.objects.filter(lista_id=lista_id, estado=1)
  655. registros_lista = RegistroLista.objects.filter(lista_id=lista_id, estado=1)
  656. ids_pacientes = set()
  657. ids_registros = set()
  658. for pac_list in pacientes_lista:
  659. try:
  660. ids_pacientes.add(pac_list.paciente.id)
  661. except:
  662. pass
  663.  
  664. for reg_list in registros_lista:
  665. ids_registros.add(reg_list.id)
  666.  
  667. print "ES POSTT"
  668. atributos_pacientes_correo = set()
  669. pacientes_a_agregar = {}
  670. contador_pacientes = 1
  671. for key, value in request.POST.iteritems():
  672. print "valuesss ", value
  673. if "pac_" in key and value == 'on':
  674. id = key[4:]
  675. # print "id ",id
  676. oatrib = AtributosFiltroMailing.objects.filter(persona__id=id)[0]
  677. atributos_pacientes_correo.add(oatrib)
  678. if lista_id:
  679. if oatrib.persona.id not in ids_pacientes:
  680. opacientelista = PacienteLista(paciente=oatrib.persona, lista_id=lista_id, estado=1)
  681. pacientes_a_agregar[contador_pacientes] = opacientelista
  682. contador_pacientes = contador_pacientes + 1
  683.  
  684. if "reg_" in key and value == 'on':
  685. id = key[4:]
  686. # print "id ",id
  687. oatrib = AtributosFiltroMailing.objects.filter(registro__id=id)[0]
  688. atributos_pacientes_correo.add(oatrib)
  689. if lista_id:
  690. if oatrib.registro.id not in ids_registros:
  691. oregistrolista = PacienteLista(registro=oatrib.registro, lista_id=lista_id, estado=1)
  692. pacientes_a_agregar[contador_pacientes] = oregistrolista
  693. contador_pacientes = contador_pacientes + 1
  694.  
  695. if contador_pacientes == 2000:
  696. PacienteLista.objects.bulk_create(pacientes_a_agregar[d] for d in range(1, contador_pacientes))
  697. contador_pacientes = 1
  698. pacientes_a_agregar = {}
  699.  
  700. PacienteLista.objects.bulk_create(pacientes_a_agregar[d] for d in range(1, contador_pacientes))
  701.  
  702. request.method = ""
  703. return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
  704. else:
  705. print "NO ES POST:"
  706. return render(request, 'fidelizacion/listadocorreosmailing.html', {'atributos': atributos})
  707.  
  708.  
  709. def SelectDesignMail(request, atributos_final=None):
  710. print "en SelectDesignMail"
  711. ocliente = request.user.usuario.cliente
  712. oEmpresa = empresa.objects.get(cliente=ocliente)
  713. hoy = datetime.datetime.now()
  714. month = hoy.month
  715. year = hoy.year
  716. cantidad_extra = 0
  717. try:
  718. omail = mail.objects.get(cliente_id=ocliente.id)
  719. except:
  720. omail = None
  721. print "MAILLLLLLLLLL: ", omail
  722. try:
  723. ocantidad_extra = CantidadExtraMesCliente.objects.filter(cliente=ocliente, month=month, year=year)
  724. for ocant_extra in ocantidad_extra:
  725. cantidad_extra = cantidad_extra + ocant_extra.cantidad_extra
  726. except:
  727. cantidad_extra = 0
  728. max_correos_mes = ConfigMailing.objects.all()[0].max_correos
  729. ocampaigns = Campaign.objects.filter(cliente=ocliente, fecha__month=month, fecha__year=year)
  730. correos_acumulados_mes = 0
  731. for ocamp in ocampaigns:
  732. correos_acumulados_mes = correos_acumulados_mes + ocamp.cantidad
  733. if request.method == 'POST':
  734. print "EN EL POST DE SELECTDESIGNMAIL"
  735. texto = request.POST['texto_mail']
  736. titulo = request.POST['titulo_mail']
  737. asunto = request.POST['asunto_mail']
  738. ancho = request.POST['ancho']
  739. color = request.POST['color']
  740. try:
  741. ocultar_barra = request.POST['ocultar_barra_superior']
  742. except:
  743. ocultar_barra = False
  744. try:
  745. ocultar_logo = request.POST['ocultar_logo']
  746. except:
  747. ocultar_logo = False
  748. try:
  749. ocultar_texto = request.POST['ocultar_texto']
  750. except:
  751. ocultar_texto = False
  752. print "Ocultar barra ", ocultar_barra
  753. if not ancho:
  754. ancho = 350
  755. file = None
  756. if request.FILES:
  757. print "HAY ARCHIVOS !"
  758. file = request.FILES.getlist('imagen_mailing')[0]
  759. if file:
  760. imagen_mailing = ModelWithFileField(cliente=ocliente, docfile=file)
  761. imagen_mailing.save()
  762. else:
  763. imagen_mailing = None
  764. cantidad = int(request.POST['cantidad_correos'])
  765. if cantidad + correos_acumulados_mes > max_correos_mes + cantidad_extra:
  766. print "ESTE CASO ES CUANDO QUIERE ENVIAR MAS DE LOS QUE TIENE DISPONIBLES"
  767. total_a_enviar = max_correos_mes + cantidad_extra - correos_acumulados_mes
  768.  
  769. return render(request, 'fidelizacion/filtromailing.html',
  770. {'falla': 'falla', 'correos_acumulados_mes': correos_acumulados_mes,
  771. 'comprados': cantidad_extra, 'correos_campaign': cantidad, 'cuota_maxima': max_correos_mes})
  772. else:
  773. total_a_enviar = cantidad
  774. ocampaign = Campaign(cliente=ocliente, asunto=asunto, titulo=titulo, texto=texto, cantidad=total_a_enviar,
  775. fecha=hoy, imagen=imagen_mailing, ocultar_texto=ocultar_texto, ocultar_logo=ocultar_logo,
  776. ocultar_barra_superior=ocultar_barra, ancho=ancho, color=color)
  777. ocampaign.save()
  778. contador_enviados = 0
  779. ids_destinatarios = []
  780. for key, value in request.POST.iteritems():
  781. if "pac_" in key:
  782. print "acaaaaaa"
  783. id = key[4:]
  784. ids_destinatarios.append(id)
  785. try:
  786. TaskEnviarMailing.apply_async(args=[ocliente, ids_destinatarios, ocampaign], countdown=10)
  787. except Exception, e:
  788. print "ERROR: ", e
  789. return render(request, 'fidelizacion/filtromailing.html', {'exito': 'exito'})
  790. else:
  791. cantidad_correos = len(atributos_final)
  792. return render(request, 'fidelizacion/designcorreomailing.html',
  793. {'mail': omail, 'atributos': atributos_final, 'empresa': oEmpresa,
  794. 'cantidad_correos': cantidad_correos, 'correos_acumulados': correos_acumulados_mes,
  795. 'max_correos_cliente': max_correos_mes + cantidad_extra})
  796.  
  797.  
  798. def SendCorreoMailing(cliente, paciente, campaign, lista_id):
  799. print "en SendCorreoMailing"
  800. images = []
  801. ocliente = cliente
  802. urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
  803. # images.append('Web/img/reservomail.png')
  804. from_email = get_or_none(mail, cliente=ocliente)
  805. if from_email == None:
  806. from_email = "contacto@reservo.cl"
  807. else:
  808. try:
  809. from_email = str(from_email.mail)
  810. except Exception:
  811. from_email = "contacto@reservo.cl"
  812. oEmpresa = empresa.objects.get(cliente=ocliente)
  813. try:
  814. oMail = mail.objects.get(cliente=ocliente)
  815. except Exception:
  816. oMail = None
  817. urllogo = None
  818. urllogo_duro = None
  819.  
  820. if oMail:
  821. urllogo = oMail.urllogo
  822. urllogo_duro = oMail.urllogo_duro
  823.  
  824. # images.append(urllogo2)
  825. texto = None
  826. # print "paciente: ",paciente
  827. if campaign.texto:
  828. texto = campaign.texto
  829. if paciente.name:
  830. nombre = paciente.name
  831. else:
  832. nombre = ""
  833.  
  834. if paciente.app_paterno:
  835. app_paterno = paciente.app_paterno
  836. else:
  837. app_paterno = ""
  838.  
  839. if paciente.app_materno:
  840. app_materno = paciente.app_materno
  841. else:
  842. app_materno = ""
  843. texto = texto.replace("/NOMBRE/", str(nombre))
  844. texto = texto.replace("/APELLIDO_PATERNO/", str(app_paterno))
  845. texto = texto.replace("/APELLIDO_MATERNO/", str(app_materno))
  846.  
  847. correo_pac = paciente.mail
  848. s1 = str(correo_pac)
  849. s2 = "@"
  850. # print "correo ", correo_cump
  851. if correo_pac:
  852. """
  853. mail_server=s1[s1.index(s2) + len(s2):
  854. if mail_server=="gmail.com":
  855. template = 'fidelizacion/mail_mailing_gmail.html'
  856. else:
  857. template = 'fidelizacion/mail_mailing.html'
  858. """
  859. template = 'fidelizacion/mail_mailing.html'
  860. try:
  861. imagen_src = campaign.imagen.docfile.url
  862. except:
  863. imagen_src = None
  864. body = loader.get_template(template)
  865. # nombre_pac=str(paciente.name)+" "+str(paciente.app_paterno)+" "+str(paciente.app_materno)
  866.  
  867. urlremovelista = str(settings.URL_SITIO) + str(
  868. reverse('fidelizacion:removefromcampaign', args=(paciente.uuid, cliente.id)))
  869. # print "URLREMOVELISTA: ",urlremovelista
  870. context = Context({
  871. "mail": correo_pac,
  872. "empresa": oEmpresa.nombre,
  873. "urllogo": urllogo,
  874. "urllogo_duro": urllogo_duro,
  875. "texto": texto,
  876. "titulo": campaign.titulo,
  877. "color": campaign.color,
  878. "ancho": campaign.ancho,
  879. "ocultar_barra_superior": campaign.ocultar_barra_superior,
  880. "ocultar_logo": campaign.ocultar_logo,
  881. "ocultar_texto": campaign.ocultar_texto,
  882. "imagen_src": imagen_src,
  883. "urllogoreservo": urllogoreservo,
  884. "urlremovelista": urlremovelista,
  885. "url_top": campaign.url,
  886. })
  887. html_content = render_to_string(template, context)
  888. try:
  889. # if correo_pac=="saintford@hotmail.com" or correo_pac=="pablosaintard@gmail.com":
  890. # print "Enviando mailing... "
  891.  
  892. # if correo_pac=="saintford@hotmail.com":
  893. """
  894. print "enviado correo !"
  895. if settings.CELERY:
  896. sendemail.apply_async(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,cliente=None)
  897. else:
  898. """
  899. sendemail(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,
  900. cliente=None)
  901. hoy = datetime.datetime.now()
  902. opersona_campaign = PersonaCampaign(persona=paciente, campaign=campaign, lista_id=lista_id, fecha=hoy)
  903. opersona_campaign.save()
  904.  
  905. except Exception, e:
  906. print "No se envio mail cumpleano con error e->", e
  907. return 0
  908. return 0
  909.  
  910.  
  911. def SendCorreoMailingTest(request):
  912. print "en SendCorreoMailing"
  913. images = []
  914. ocliente = request.user.usuario.cliente
  915.  
  916. if request.method == "POST":
  917. id_campaing = request.POST.get('campaing')
  918. oCampaign = Campaign.objects.get(pk=id_campaing, cliente=ocliente)
  919. urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
  920. # images.append('Web/img/reservomail.png')
  921. from_email = get_or_none(mail, cliente=ocliente)
  922. if from_email == None:
  923. from_email = "contacto@reservo.cl"
  924. else:
  925. try:
  926. from_email = str(from_email.mail)
  927. except Exception:
  928. from_email = "contacto@reservo.cl"
  929. oEmpresa = empresa.objects.get(cliente=ocliente)
  930. try:
  931. oMail = mail.objects.get(cliente=ocliente)
  932. except Exception:
  933. oMail = None
  934. urllogo = None
  935. urllogo_duro = None
  936.  
  937. if oMail:
  938. urllogo = oMail.urllogo
  939. urllogo_duro = oMail.urllogo_duro
  940.  
  941. # images.append(urllogo2)
  942. texto = None
  943. # print "paciente: ",paciente
  944. if oCampaign.texto:
  945. texto = oCampaign.texto
  946. nombre = 'Nombre'
  947. app_paterno = 'Apellido1'
  948. app_materno = 'Apellido2'
  949. '''
  950. if paciente.name:
  951. nombre = paciente.name
  952. else:
  953. nombre = ""
  954.  
  955. if paciente.app_paterno:
  956. app_paterno = paciente.app_paterno
  957. else:
  958. app_paterno = ""
  959.  
  960. if paciente.app_materno:
  961. app_materno = paciente.app_materno
  962. else:
  963. app_materno = ""
  964. '''
  965. texto = texto.replace("/NOMBRE/", str(nombre))
  966. texto = texto.replace("/APELLIDO_PATERNO/", str(app_paterno))
  967. texto = texto.replace("/APELLIDO_MATERNO/", str(app_materno))
  968.  
  969. correo_pac = request.POST.get('mail')
  970. s1 = str(correo_pac)
  971. s2 = "@"
  972. # print "correo ", correo_cump
  973. if correo_pac:
  974. """
  975. mail_server=s1[s1.index(s2) + len(s2):
  976. if mail_server=="gmail.com":
  977. template = 'fidelizacion/mail_mailing_gmail.html'
  978. else:
  979. template = 'fidelizacion/mail_mailing.html'
  980. """
  981. template = 'fidelizacion/mail_mailing.html'
  982. try:
  983. imagen_src = oCampaign.imagen.docfile.url
  984. except:
  985. imagen_src = None
  986. body = loader.get_template(template)
  987. # nombre_pac=str(paciente.name)+" "+str(paciente.app_paterno)+" "+str(paciente.app_materno)
  988.  
  989. # urlremovelista = "https://reservo.cl"+str(reverse('fidelizacion:removefromcampaign', args=('paciente.uuid',cliente.id)))
  990. urlremovelista = str(settings.URL_SITIO)
  991. # print "URLREMOVELISTA: ",urlremovelista
  992. context = Context({
  993. "mail": correo_pac,
  994. "empresa": oEmpresa.nombre,
  995. "urllogo": urllogo,
  996. "urllogo_duro": urllogo_duro,
  997. "texto": texto,
  998. "titulo": oCampaign.titulo,
  999. "color": oCampaign.color,
  1000. "ancho": oCampaign.ancho,
  1001. "ocultar_barra_superior": oCampaign.ocultar_barra_superior,
  1002. "ocultar_logo": oCampaign.ocultar_logo,
  1003. "ocultar_texto": oCampaign.ocultar_texto,
  1004. "imagen_src": imagen_src,
  1005. "urllogoreservo": urllogoreservo,
  1006. "urlremovelista": urlremovelista,
  1007. "url_top": oCampaign.url,
  1008. })
  1009. html_content = render_to_string(template, context)
  1010. try:
  1011. # if correo_pac=="saintford@hotmail.com" or correo_pac=="pablosaintard@gmail.com":
  1012. # print "Enviando mailing... "
  1013.  
  1014. # if correo_pac=="saintford@hotmail.com":
  1015. """
  1016. print "enviado correo !"
  1017. if settings.CELERY:
  1018. sendemail.apply_async(campaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,cliente=None)
  1019. else:
  1020. """
  1021. sendemail(oCampaign.asunto, body.render(context), from_email, [correo_pac], False, html_content, images,
  1022. cliente=None)
  1023. hoy = datetime.datetime.now()
  1024. # opersona_campaign=PersonaCampaign(persona=paciente,campaign=campaign,lista_id=lista_id,fecha=hoy)
  1025. # opersona_campaign.save()
  1026. envio = {'enviado': 1}
  1027. jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
  1028. return HttpResponse(jsonevento, mimetype='application/json')
  1029. except Exception, e:
  1030. print "No se envio mail test de campana e->", e
  1031. envio = {'enviado': 0}
  1032. jsonevento = json.dumps(envio, cls=DjangoJSONEncoder)
  1033. return HttpResponse(jsonevento, mimetype='application/json')
  1034. return 0
  1035.  
  1036.  
  1037. def HistoricoCampaigns(request):
  1038. ocliente = request.user.usuario.cliente
  1039. oenvios = EnvioCampaignLista.objects.filter(cliente=ocliente).order_by('-id')
  1040.  
  1041. paginator = Paginator(oenvios, 20) # Show 25 contacts per page
  1042. page = request.GET.get('page')
  1043. try:
  1044. oenvios = paginator.page(page)
  1045. except PageNotAnInteger:
  1046. # If page is not an integer, deliver first page.
  1047. oenvios = paginator.page(1)
  1048. except EmptyPage:
  1049. # If page is out of range (e.g. 9999), deliver last page of results.
  1050. oenvios = paginator.page(paginator.num_pages)
  1051.  
  1052. return render(request, 'fidelizacion/historicocampaigns.html', {'envios': oenvios})
  1053.  
  1054.  
  1055. def DestinatariosCampaign(request, envio_id):
  1056. oenvio = EnvioCampaignLista.objects.get(pk=envio_id)
  1057. opersonas = PersonaCampaign.objects.filter(campaign=oenvio.campaign, lista=oenvio.lista)
  1058. return render(request, 'fidelizacion/destinatarioscampaign.html', {'personas': opersonas})
  1059.  
  1060.  
  1061. def SumarPuntosFidelizacion(paciente_id, giftcard_id=None, cantidad_giftcard=None, tratamiento_id=None,
  1062. cantidad_tratamiento=None, producto_id=None, cantidad_producto=None, plan_id=None,
  1063. cantidad_plan=None):
  1064. # print 'SumarPuntosFidelizacion'
  1065. try:
  1066. opaciente = PacienteDentista.objects.get(pk=paciente_id)
  1067. except:
  1068. opaciente = None
  1069. if opaciente:
  1070. if tratamiento_id:
  1071. try:
  1072. puntos_a_sumar = int(tratamiento.objects.get(pk=tratamiento_id).puntos_fidelizacion) * int(
  1073. cantidad_tratamiento)
  1074. except:
  1075. puntos_a_sumar = 0
  1076. if producto_id:
  1077. try:
  1078. puntos_a_sumar = int(producto.objects.get(pk=producto_id).puntos_fidelizacion) * int(cantidad_producto)
  1079. except:
  1080. puntos_a_sumar = 0
  1081. if plan_id:
  1082. try:
  1083. puntos_a_sumar = int(plan.objects.get(pk=plan_id).puntos_fidelizacion) * int(cantidad_plan)
  1084. except:
  1085. puntos_a_sumar = 0
  1086. if giftcard_id:
  1087. try:
  1088. puntos_a_sumar = int(TipoGiftcard.objects.get(pk=giftcard_id).puntos_fidelizacion) * int(
  1089. cantidad_giftcard)
  1090. except:
  1091. puntos_a_sumar = 0
  1092. acumulado_final = int(opaciente.puntos_fidelizacion) + int(puntos_a_sumar)
  1093. # print "ACUMULADO FINAL: ",acumulado_final
  1094. if acumulado_final < 0:
  1095. acumulado_final = 0
  1096. opaciente.puntos_fidelizacion = acumulado_final
  1097. opaciente.save()
  1098.  
  1099.  
  1100. def RestarPuntosFidelizacion(paciente_id, giftcard_id=None, cantidad_giftcard=None, tratamiento_id=None,
  1101. cantidad_tratamiento=None, producto_id=None, cantidad_producto=None, plan_id=None,
  1102. cantidad_plan=None):
  1103. try:
  1104. opaciente = PacienteDentista.objects.get(pk=paciente_id)
  1105. except:
  1106. opaciente = None
  1107. if opaciente:
  1108. if tratamiento_id and cantidad_tratamiento:
  1109. try:
  1110. puntos_a_restar = int(tratamiento.objects.get(pk=tratamiento_id).puntos_fidelizacion) * int(
  1111. cantidad_tratamiento)
  1112. except:
  1113. puntos_a_restar = 0
  1114. if producto_id and cantidad_producto:
  1115. try:
  1116. puntos_a_restar = int(producto.objects.get(pk=producto_id).puntos_fidelizacion) * int(cantidad_producto)
  1117. except:
  1118. puntos_a_restar = 0
  1119. if plan_id and cantidad_plan:
  1120. try:
  1121. puntos_a_restar = int(plan.objects.get(pk=plan_id).puntos_fidelizacion) * int(cantidad_plan)
  1122. except:
  1123. puntos_a_restar = 0
  1124. if giftcard_id and cantidad_giftcard:
  1125. try:
  1126. puntos_a_restar = int(TipoGiftcard.objects.get(pk=giftcard_id).puntos_fidelizacion) * int(
  1127. cantidad_giftcard)
  1128. except:
  1129. puntos_a_restar = 0
  1130. acumulado_final = int(opaciente.puntos_fidelizacion) - int(puntos_a_restar)
  1131. if acumulado_final < 0:
  1132. acumulado_final = 0
  1133. opaciente.puntos_fidelizacion = acumulado_final
  1134. opaciente.save()
  1135.  
  1136.  
  1137. def PuntosFidelizacion(request):
  1138. pcliente = request.user.usuario.cliente
  1139.  
  1140. if request.method == "POST":
  1141. puntos_desde = request.POST.get('puntos_desde')
  1142. puntos_hasta = request.POST.get('puntos_hasta')
  1143. if puntos_desde and not puntos_hasta:
  1144. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1145. puntos_fidelizacion__gte=int(puntos_desde)).order_by(
  1146. '-puntos_fidelizacion')
  1147. if puntos_hasta and not puntos_desde:
  1148. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1149. puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
  1150. '-puntos_fidelizacion')
  1151. if puntos_desde and puntos_hasta:
  1152. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1153. puntos_fidelizacion__gte=int(puntos_desde),
  1154. puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
  1155. '-puntos_fidelizacion')
  1156. if not puntos_desde and not puntos_hasta:
  1157. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
  1158. return render(request, 'fidelizacion/puntosfidelizacion.html',
  1159. {'pacientes': opacientes, 'puntos_desde': puntos_desde, 'puntos_hasta': puntos_hasta})
  1160. else:
  1161. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
  1162. paginator = Paginator(opacientes, 20) # Show 25 contacts per page
  1163. page = request.GET.get('page')
  1164. try:
  1165. opacientes = paginator.page(page)
  1166. except PageNotAnInteger:
  1167. # If page is not an integer, deliver first page.
  1168. opacientes = paginator.page(1)
  1169. except EmptyPage:
  1170. # If page is out of range (e.g. 9999), deliver last page of results.
  1171. opacientes = paginator.page(paginator.num_pages)
  1172.  
  1173. return render(request, 'fidelizacion/puntosfidelizacion.html', {'pacientes': opacientes})
  1174.  
  1175.  
  1176. def DescargarClientesPuntosFidelizacion(request):
  1177. print "DescargarClientesPuntosFidelizacion"
  1178. pcliente = request.user.usuario.cliente
  1179. if request.method == "POST":
  1180. puntos_desde = request.POST.get('puntos_desde2')
  1181. puntos_hasta = request.POST.get('puntos_hasta2')
  1182. # Ver que hacer si tipo pago es borrado o esta repetido, q pasa con los datos
  1183. # oPacientes = PacienteDentista.objects.filter(cliente=pcliente,estado=1).order_by('name')
  1184. if puntos_desde and not puntos_hasta:
  1185. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1186. puntos_fidelizacion__gte=int(puntos_desde)).order_by(
  1187. '-puntos_fidelizacion')
  1188. if puntos_hasta and not puntos_desde:
  1189. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1190. puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
  1191. '-puntos_fidelizacion')
  1192. if puntos_desde and puntos_hasta:
  1193. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1,
  1194. puntos_fidelizacion__gte=int(puntos_desde),
  1195. puntos_fidelizacion__lte=int(puntos_hasta)).order_by(
  1196. '-puntos_fidelizacion')
  1197. if not puntos_desde and not puntos_hasta:
  1198. opacientes = PacienteDentista.objects.filter(cliente=pcliente, estado=1).order_by('-puntos_fidelizacion')
  1199. # print "oReferenciaPaciente",oReferenciaPaciente
  1200. '''
  1201. Escribir Excel
  1202. '''
  1203. style = xlwt.XFStyle()
  1204. response = HttpResponse(mimetype='application/ms-excel')
  1205. response['Content-Disposition'] = 'attachment; filename=PuntajePacientes.xls'
  1206. libro = xlwt.Workbook()
  1207. libro1 = libro.add_sheet("Puntaje Pacientes")
  1208. fila = 0
  1209. columna = 0
  1210.  
  1211. oTraduccion_RUT = traduceWords("RUT")
  1212. traduccion_RUT = oTraduccion_RUT.traduce_from_view(pcliente).decode("UTF-8")
  1213.  
  1214. row = libro1.row(fila)
  1215. row.write(columna, "Nombre")
  1216. columna = columna + 1
  1217. row.write(columna, "Apellido paterno")
  1218. columna = columna + 1
  1219. row.write(columna, "Apellido materno")
  1220. columna = columna + 1
  1221. row.write(columna, traduccion_RUT)
  1222. columna = columna + 1
  1223. row.write(columna, "Mail")
  1224. columna = columna + 1
  1225. row.write(columna, "Puntaje")
  1226. fila = fila + 1
  1227. for Paciente in opacientes:
  1228. columna = 0
  1229. row = libro1.row(fila)
  1230. row.write(columna, smart_str(Paciente.name).decode("UTF-8"))
  1231. columna = columna + 1
  1232. row.write(columna, smart_str(Paciente.app_paterno).decode("UTF-8"))
  1233. columna = columna + 1
  1234. row.write(columna, smart_str(Paciente.app_materno).decode("UTF-8"))
  1235. columna = columna + 1
  1236. row.write(columna, smart_str(Paciente.rut).decode("UTF-8"))
  1237. columna = columna + 1
  1238. row.write(columna, smart_str(Paciente.mail).decode("UTF-8"))
  1239. columna = columna + 1
  1240. row.write(columna, int(Paciente.puntos_fidelizacion))
  1241. fila = fila + 1
  1242.  
  1243. libro.save(response)
  1244. '''
  1245. for num in range(5):
  1246. row = libro1.row(num)
  1247. for index, col in enumerate(cols):
  1248. value = txt % (num+1, col)
  1249. row.write(index, value)
  1250. '''
  1251. '''
  1252. response = HttpResponse(content_type='text/csv')
  1253. response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
  1254.  
  1255. writer = csv.writer(response)
  1256. writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
  1257. writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
  1258. '''
  1259. print "ASDF"
  1260. return response
  1261.  
  1262.  
  1263. def ListListas(request):
  1264. ocliente = request.user.usuario.cliente
  1265. olistas = ListaMailing.objects.filter(cliente=ocliente, estado=1)
  1266. oListasExcel = ListaMailingExcel.objects.filter(cliente=ocliente, estado=1)
  1267. rows_listas = []
  1268. for olista in olistas:
  1269. opacientes_lista = PacienteLista.objects.filter(lista=olista, estado=1)
  1270. rows_listas.append({'lista': olista, 'Excel': False, 'asociados': len(opacientes_lista)})
  1271.  
  1272. for olista in oListasExcel:
  1273. registros = RegistroLista.objects.filter(lista=olista, estado=1)
  1274. rows_listas.append({'lista': olista, 'Excel': True, 'asociados': len(registros)})
  1275.  
  1276. return render(request, 'fidelizacion/listasmailing.html', {'rows_listas': rows_listas})
  1277.  
  1278.  
  1279. def MakeLista(request):
  1280. ocliente = request.user.usuario.cliente
  1281. if request.method == "POST":
  1282. nombre = request.POST.get('nombre')
  1283. descripcion = request.POST.get('descripcion')
  1284. oLista = ListaMailing(cliente=ocliente, nombre=nombre, descripcion=descripcion)
  1285. oLista.save()
  1286. return HttpResponseRedirect(reverse('fidelizacion:filtrosmailinglista', args=(oLista.id,)))
  1287. else:
  1288. return render(request, 'fidelizacion/makelista.html')
  1289.  
  1290.  
  1291. def RemoveLista(request, lista_id, tipo_lista):
  1292. if tipo_lista:
  1293. ListaMailingExcel.objects.filter(pk=lista_id).update(estado=0)
  1294. RegistroLista.objects.filter(lista_id=lista_id).update(estado=0)
  1295.  
  1296. else:
  1297. ListaMailing.objects.filter(pk=lista_id).update(estado=0)
  1298. PacienteLista.objects.filter(lista_id=lista_id).update(estado=0)
  1299. return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
  1300.  
  1301.  
  1302. def EditLista(request, lista_id):
  1303. olista = ListaMailing.objects.get(pk=lista_id, estado=1)
  1304. ocliente = request.user.usuario.cliente
  1305. if request.method == "POST":
  1306. nombre = request.POST.get('nombre')
  1307. descripcion = request.POST.get('descripcion')
  1308. ListaMailing.objects.filter(pk=lista_id, cliente=ocliente).update(nombre=nombre, descripcion=descripcion)
  1309. return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
  1310. else:
  1311. return render(request, 'fidelizacion/makelista.html', {'lista': olista})
  1312.  
  1313.  
  1314. def EditPacientesLista(request, lista_id):
  1315. opacienteslista = PacienteLista.objects.filter(lista_id=lista_id, estado=1)
  1316. olista = ListaMailing.objects.get(pk=lista_id, estado=1)
  1317.  
  1318.  
  1319. def DeletePacienteLista(request, lista_id, paciente_id):
  1320. PacienteLista.objects.filter(lista_id=lista_id, paciente_id=paciente_id).update(estado=0)
  1321. return HttpResponseRedirect(reverse('fidelizacion:filtrosmailinglista', args=(lista_id,)))
  1322.  
  1323.  
  1324. def MakeEditCampaign(request, campaign_id=None):
  1325. if campaign_id:
  1326. ocampaign = Campaign.objects.get(pk=campaign_id)
  1327. else:
  1328. ocampaign = None
  1329. ocliente = request.user.usuario.cliente
  1330. try:
  1331. oMail = mail.objects.get(cliente=ocliente)
  1332. except Exception:
  1333. oMail = None
  1334. oEmpresa = empresa.objects.get(cliente=ocliente)
  1335. if request.method == 'POST':
  1336. texto = request.POST['texto_mail']
  1337. texto = texto.replace("\n", "<br>")
  1338. texto = texto.replace("\r", "")
  1339. titulo = request.POST['titulo_mail']
  1340. asunto = request.POST['asunto_mail']
  1341. ancho = request.POST['ancho']
  1342. color = request.POST['color']
  1343. url = request.POST['url']
  1344. try:
  1345. ocultar_barra = request.POST['ocultar_barra_superior']
  1346. except:
  1347. ocultar_barra = False
  1348. try:
  1349. ocultar_logo = request.POST['ocultar_logo']
  1350. except:
  1351. ocultar_logo = False
  1352. try:
  1353. ocultar_texto = request.POST['ocultar_texto']
  1354. except:
  1355. ocultar_texto = False
  1356. print "Ocultar barra ", ocultar_barra
  1357. if not ancho:
  1358. ancho = 350
  1359. file = None
  1360. if request.FILES:
  1361. print "HAY ARCHIVOS !"
  1362. file = request.FILES.getlist('imagen_mailing')[0]
  1363. if file:
  1364. imagen_mailing = ModelWithFileField(cliente=ocliente, docfile=file)
  1365. imagen_mailing.save()
  1366. else:
  1367. imagen_mailing = None
  1368. if campaign_id:
  1369. imagen_mailing = ocampaign.imagen
  1370. if campaign_id:
  1371. Campaign.objects.filter(pk=campaign_id).update(asunto=asunto, titulo=titulo, texto=texto,
  1372. imagen=imagen_mailing, ocultar_texto=ocultar_texto,
  1373. ocultar_logo=ocultar_logo,
  1374. ocultar_barra_superior=ocultar_barra, ancho=ancho,
  1375. color=color, url=url)
  1376. else:
  1377. ocampaign = Campaign(cliente=ocliente, asunto=asunto, titulo=titulo, texto=texto, imagen=imagen_mailing,
  1378. ocultar_texto=ocultar_texto, ocultar_logo=ocultar_logo,
  1379. ocultar_barra_superior=ocultar_barra, ancho=ancho, color=color, url=url)
  1380. ocampaign.save()
  1381. return HttpResponseRedirect(reverse('fidelizacion:listcampaigns', args=()))
  1382. else:
  1383. return render(request, 'fidelizacion/designcorreomailing.html',
  1384. {'empresa': oEmpresa, 'mail': oMail, 'campaign': ocampaign})
  1385.  
  1386.  
  1387. def ListCampaigns(request, campaign_id=None, lista_id=None):
  1388. ocliente = request.user.usuario.cliente
  1389. from_email = get_or_none(mail, cliente=ocliente)
  1390. ocampaigns = Campaign.objects.filter(cliente=ocliente, estado=1)
  1391. mensaje = None
  1392. if campaign_id and lista_id:
  1393. ocampaign = Campaign.objects.get(pk=campaign_id)
  1394. olista = ListaMailing.objects.get(pk=lista_id)
  1395. mensaje = "Campaña de título: " + str(
  1396. ocampaign.titulo) + ", enviada exitosamente a los clientes de la lista " + str(olista.nombre)
  1397. return render(request, 'fidelizacion/listcampaigns.html',
  1398. {'campaigns': ocampaigns, 'exito': mensaje, 'correo_amazon': from_email})
  1399.  
  1400.  
  1401. def DeleteCampaign(request, campaign_id):
  1402. ocliente = request.user.usuario.cliente
  1403. Campaign.objects.filter(pk=campaign_id, cliente=ocliente).update(estado=0)
  1404. return HttpResponseRedirect(reverse('fidelizacion:listcampaigns', args=()))
  1405.  
  1406.  
  1407. def EliminarFotoCampaign(request, campaign_id):
  1408. ocliente = request.user.usuario.cliente
  1409. Campaign.objects.filter(pk=campaign_id, cliente=ocliente).update(imagen=None)
  1410. return HttpResponseRedirect(reverse('fidelizacion:editcampaign', args=(campaign_id,)))
  1411.  
  1412.  
  1413. def SelectListCampaign(request, campaign_id):
  1414. ocliente = request.user.usuario.cliente
  1415. try:
  1416. stock_cliente = StockMailsCliente.objects.get(cliente=ocliente)
  1417. except:
  1418. stock_cliente = StockMailsCliente(cliente=ocliente, stock=0)
  1419. stock_cliente.save()
  1420. ocampaign = Campaign.objects.get(pk=campaign_id)
  1421. olistas = ListaMailing.objects.filter(cliente=ocliente, estado=1)
  1422. rows = []
  1423. for lista in olistas:
  1424. boton = True
  1425. cantidad = len(PacienteLista.objects.filter(lista=lista, estado=1))
  1426. if cantidad > stock_cliente.stock:
  1427. boton = False
  1428. row = {'lista': lista, 'cantidad': cantidad, 'boton': boton}
  1429. rows.append(row)
  1430. return render(request, 'fidelizacion/selectlistcampaign.html',
  1431. {'rows_listas': rows, 'campaign': ocampaign, 'stock_cliente': stock_cliente})
  1432.  
  1433.  
  1434. def SendCampaignLista(request, campaign_id, lista_id):
  1435. # olista = ListaMailing.objects.get(pk=lista_id)
  1436. # TODO: ACA SE DEBE TIRAR ESTO COMO UNA TAREA A UNA COLA
  1437. cliente = request.user.usuario.cliente
  1438. cliente_id = request.user.usuario.cliente.id
  1439. now = datetime.datetime.now()
  1440. oenviocampaignlista = EnvioCampaignLista(campaign_id=campaign_id, lista_id=lista_id, fecha=now, cliente=cliente)
  1441. oenviocampaignlista.save()
  1442. # QueueSendCampaignToLista(campaign_id,lista_id,cliente_id,oenviocampaignlista.id)
  1443. SendCampaignMail.apply_async(args=[campaign_id, lista_id, cliente_id, oenviocampaignlista.id], countdown=5)
  1444. return HttpResponseRedirect(reverse('fidelizacion:listcampaignsexito', args=(campaign_id, lista_id)))
  1445.  
  1446.  
  1447. def RemoveFromCampaigns(request, uuid, cliente_id):
  1448. ocliente = cliente.objects.get(pk=cliente_id)
  1449. oempresa = empresa.objects.get(cliente_id=cliente_id)
  1450. opaciente = None
  1451. urllogoreservo = "https://s3-sa-east-1.amazonaws.com/staticfilesreservo/Web/img/reservomail.png"
  1452. try:
  1453. opaciente = PacienteDentista.objects.get(uuid=uuid)
  1454. if request.method == "POST":
  1455. now = datetime.datetime.now()
  1456. salir = request.POST.get('salir')
  1457. print "SALIR: ", salir
  1458. if salir == "si":
  1459. # aca lo saco de las listas siempre y cuando no haya una insercion previo en la tabal de personanomailing
  1460. try:
  1461. opersonanomailing = PersonaNoMailing.objects.get(paciente=opaciente, cliente=ocliente, estado=1)
  1462. opersonanomailing.fecha = now
  1463. opersonanomailing.save()
  1464. except:
  1465. opersonanomailing = PersonaNoMailing(paciente=opaciente, cliente=ocliente, fecha=now)
  1466. opersonanomailing.save()
  1467. PacienteLista.objects.filter(paciente=opaciente).update(estado=0)
  1468. return render(request, 'fidelizacion/removidodelistas.html', {'urllogoreservo': urllogoreservo})
  1469. if salir == "no":
  1470. # aca lo devuelvo a las listas en las que estaba en caso que haya tenido una insercion previo en la tabla de personanomailing
  1471. try:
  1472. opersonanomailing = PersonaNoMailing.objects.get(paciente=opaciente, cliente=ocliente, estado=1)
  1473. opersonanomailing.estado = 0
  1474. opersonanomailing.save()
  1475. PacienteLista.objects.filter(paciente=opaciente).update(estado=1)
  1476. except:
  1477. pass
  1478. return render(request, 'fidelizacion/noremovidodelistas.html', {'urllogoreservo': urllogoreservo})
  1479. else:
  1480. return render(request, 'fidelizacion/remove_de_lista.html',
  1481. {'paciente': opaciente, 'empresa': oempresa, 'cliente': ocliente,
  1482. 'urllogoreservo': urllogoreservo})
  1483. except:
  1484. return render(request, 'fidelizacion/remove_de_lista.html',
  1485. {'paciente': opaciente, 'empresa': oempresa, 'cliente': ocliente,
  1486. 'urllogoreservo': urllogoreservo})
  1487.  
  1488.  
  1489. def ListadoDesvinculados(request):
  1490. ocliente = request.user.usuario.cliente
  1491. odesvinculados = PersonaNoMailing.objects.filter(cliente=ocliente, estado=1)
  1492. paginator = Paginator(odesvinculados, 20) # Show 25 contacts per page
  1493. page = request.GET.get('page')
  1494. try:
  1495. odesvinculados = paginator.page(page)
  1496. except PageNotAnInteger:
  1497. # If page is not an integer, deliver first page.
  1498. odesvinculados = paginator.page(1)
  1499. except EmptyPage:
  1500. # If page is out of range (e.g. 9999), deliver last page of results.
  1501. odesvinculados = paginator.page(paginator.num_pages)
  1502. return render(request, 'fidelizacion/personasnomailing.html', {'desvinculados': odesvinculados})
  1503.  
  1504.  
  1505. def BolsaDeCorreos(request):
  1506. ocliente = request.user.usuario.cliente
  1507. try:
  1508. stock_cliente = StockMailsCliente.objects.get(cliente=ocliente)
  1509. except:
  1510. stock_cliente = StockMailsCliente(cliente=ocliente, stock=0)
  1511. stock_cliente.save()
  1512. return render(request, 'fidelizacion/bolsadecorreos.html', {'stock': stock_cliente})
  1513.  
  1514.  
  1515. def ScriptUpdateUuidRepetidos():
  1516. # from django.db.models import Count
  1517. import uuid
  1518. PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
  1519. dupes = PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
  1520. paciente_a_updatear = PacienteDentista.objects.filter(uuid__in=[item['uuid'] for item in dupes])
  1521. print "CANTIDAD DE UUIDS REPETIDOS 1: ", len(paciente_a_updatear)
  1522. for pac in paciente_a_updatear:
  1523. pac.uuid = uuid.uuid1()
  1524. pac.save()
  1525. # print "UUID: ",pac.uuid
  1526. # print "UUID RANDOM: ",uuid.uuid1()
  1527. PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
  1528. dupes = PacienteDentista.objects.values('uuid').annotate(Count('id')).order_by().filter(id__count__gt=1)
  1529. paciente_a_updatear = PacienteDentista.objects.filter(uuid__in=[item['uuid'] for item in dupes])
  1530. print "CANTIDAD DE UUIDS REPETIDOS 2: ", len(paciente_a_updatear)
  1531.  
  1532.  
  1533. def reloadAtributosFiltroMailing(cliente_id):
  1534. AtributosFiltroMailing.objects.filter(persona__cliente_id=cliente_id, estado=1).update(estado=0)
  1535. AtributosFiltroMailing.crear_AtributosFiltroMailing(cliente_id)
  1536. return 'Listo'
  1537.  
  1538.  
  1539. # from Fidelizacion.views import reloadAllAtributosMailing
  1540. def reloadAllAtributosMailing():
  1541. from cliente.models import cliente
  1542. oClientes = cliente.objects.filter()
  1543. for oCliente in oClientes:
  1544. print " agregando atributo mailing para cliente -> ", oCliente
  1545. reloadAtributosFiltroMailing(oCliente.pk)
  1546.  
  1547.  
  1548. def UploadLista(request):
  1549. ocliente = request.user.usuario.cliente
  1550.  
  1551. if request.method == 'POST':
  1552. file = request.FILES['uploadedList']
  1553.  
  1554. # print file
  1555.  
  1556. nombre = request.POST.get('nombre')
  1557. descripcion = request.POST.get('descripcion')
  1558. oLista = ListaMailingExcel(cliente=ocliente, nombre=nombre, descripcion=descripcion)
  1559. oLista.save()
  1560.  
  1561. workbook = xlrd.open_workbook(file_contents=file.read())
  1562. # print workbook.sheet_names()
  1563. worksheet = workbook.sheet_by_name('Lista Mailing')
  1564. num_rows = worksheet.nrows - 1
  1565. # print 'num_rows',num_rows
  1566. num_cells = worksheet.ncols - 1
  1567. # print "num_cells",num_cells
  1568. curr_row = 0
  1569. errors = []
  1570. registros = []
  1571. i = 0
  1572. while curr_row < num_rows:
  1573. data = []
  1574. mail = None
  1575. curr_row += 1
  1576. row = worksheet.row(curr_row)
  1577. # print 'Row:', curr_row
  1578. curr_cell = -1
  1579. while curr_cell < num_cells:
  1580. curr_cell += 1
  1581. # Cell Types: 0=Empty, 1=Text, 2=Number, 3=Date, 4=Boolean, 5=Error, 6=Blank
  1582. cell_type = worksheet.cell_type(curr_row, curr_cell)
  1583. cell_value = worksheet.cell_value(curr_row, curr_cell)
  1584. data.append(cell_value)
  1585. # print ' ', cell_type, ':', cell_value
  1586.  
  1587. try:
  1588. nombre = data[0]
  1589. except:
  1590. nombre = None
  1591.  
  1592. try:
  1593. app_paterno = data[1]
  1594. except:
  1595. app_paterno = None
  1596.  
  1597. try:
  1598. app_materno = data[2]
  1599. except:
  1600. app_materno = None
  1601.  
  1602. try:
  1603. mail = data[4]
  1604. if mail == "":
  1605. error = "No se encontro el Mail en la fila " + str(curr_row) + "."
  1606. errors.append(error)
  1607. except:
  1608. error = "No se encontro informacion en la columna del Mail en la fila " + str(curr_row) + "."
  1609. errors.append(error)
  1610.  
  1611. try:
  1612. sexo = data[3]
  1613. except:
  1614. sexo = None
  1615.  
  1616. if mail:
  1617. # print "SAVEE --> "
  1618. oRegistro = RegistroLista(cliente=ocliente, nombre=nombre, app_paterno=app_paterno,
  1619. app_materno=app_materno, sexo=sexo, mail=mail, lista=oLista)
  1620. registros.append(oRegistro)
  1621. i += 1
  1622.  
  1623. if not errors:
  1624. if i == 2000:
  1625. RegistroLista.objects.bulk_create(registros[d] for d in range(1, i))
  1626. registros = []
  1627. i = 0
  1628.  
  1629. if not errors:
  1630. RegistroLista.objects.bulk_create(registros[d] for d in range(0, i))
  1631. return HttpResponseRedirect(reverse('fidelizacion:listasmailing', args=()))
  1632.  
  1633. else:
  1634. ListaMailing.objects.filter(pk=oLista.id).update(estado=0)
  1635.  
  1636. print errors
  1637. return render(request, 'fidelizacion/uploadLista.html',
  1638. {"error": "Se detectaron errores en el documento.", "errors": errors})
  1639.  
  1640. else:
  1641. return render(request, 'fidelizacion/uploadLista.html', {})
  1642.  
  1643.  
  1644. def PrintBaseUpload(request):
  1645. style = xlwt.XFStyle()
  1646. response = HttpResponse(mimetype='application/ms-excel')
  1647. response['Content-Disposition'] = 'attachment; filename=base-mailing.xls'
  1648. libro = xlwt.Workbook()
  1649. libro1 = libro.add_sheet("Lista Mailing")
  1650. fila = 0
  1651. columna = 0
  1652.  
  1653. row = libro1.row(fila)
  1654. row.write(columna, "Nombre")
  1655. columna = columna + 1
  1656. row.write(columna, "Apellido Paterno")
  1657. columna = columna + 1
  1658. row.write(columna, "Apellido Materno")
  1659. columna = columna + 1
  1660. row.write(columna, "Sexo")
  1661. columna = columna + 1
  1662. row.write(columna, "Mail")
  1663.  
  1664. libro.save(response)
  1665.  
  1666. return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement