#encoding:utf-8
from django.http import *
from django.template.response import *
from django.contrib.auth import *
from django.contrib.auth.decorators import *
from atencion_ciudadana.models import *
from django.shortcuts import *
from django.contrib.auth.models import User
from atencion_ciudadana.forms import *
from datetime import *
from django.contrib import messages
from django.db.models import *
from atencion_ciudadana.forms import *
from django import forms
from django.db import *
# Create your views here.
def login_(request):
return TemplateResponse(request,'index.html')
def validar(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
mensaje = ''
if user is not None:
if user.is_active:
login(request, user )
# return HttpResponse ( dependencia.objects.filter(usuarios__in=[user.id]).count() )
if user.is_staff:
return HttpResponseRedirect( '/admin0/0' )
else:
return HttpResponseRedirect( '/admin1/0' )
else:
mensaje = mensaje + 'cuenta desactivada'
else:
mensaje = mensaje + 'Usuario no valido, verifique sus credenciales'
return TemplateResponse(request, 'index.html', {'msj': mensaje})
@login_required
def admin0(request, dependencia_id):
dependencias = dependencia.objects.all()
if not request.user.is_staff:
dependencias = dependencia.objects.filter(usuarios__in=[request.user.id])
dependencia_id = dependencias[0].id
if dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id)
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
leidas = solicitudes.filter( estatus__clave='L' )
resueltos = solicitudes.filter(estatus__clave__in = ('RS', 'RI'))
no_resueltos = solicitudes.filter(estatus__clave='AL').order_by('-bandera','-fecha_ultimo_cambio')
ultimas = solicitudes.filter(estatus__clave__in=('C','D')).order_by('-bandera', '-fecha_ultimo_cambio')
pendientes = solicitudes.filter(estatus__clave__in=('A','L')).order_by('-bandera', '-estatus', '-fecha_ultimo_cambio')
proceso = solicitudes.filter(estatus__clave__in=('A','AL','L'))
proceso.percent = 0
if solicitudes.count() != 0:
proceso.percent = str(proceso.count() * 100 / solicitudes.count())
if not request.user.is_staff:
solicitudes = solicitudes.filter(estatus__clave__in = ['A','AL','RS', 'RI'])
solicitudesC = solicitudes.filter( estatus__clave='A' )
solicitudesD = solicitudes.filter( estatus__clave='AL' )
ultimas = solicitudes.filter(estatus__clave__in=['A']).order_by('-bandera','-estatus', '-fecha_ultimo_cambio')
pendientes = solicitudes.filter(estatus__clave__in=['AL']).order_by('-bandera','-estatus', '-fecha_ultimo_cambio')
resueltos = solicitudes.filter(estatus__clave__in = ['RS', 'RI']).order_by('-bandera','-fecha_ultimo_cambio')
leidas = solicitudes.filter( estatus__clave='AL', dependencia = dependencia_id )
proceso = solicitudes.filter(estatus__clave__in=('AL'), dependencia = dependencia_id)
if solicitudes.count() != 0:
proceso.percent = str(proceso.count() * 100 / solicitudes.count())
return TemplateResponse(request, 'form-wizard.html',
{
'solicitudesC': solicitudesC,
'solicitudesD': solicitudesD,
'dependencias':dependencias,
'solicitudes':solicitudes,
'leidas':leidas,
'resueltos':resueltos,
'ultimas':ultimas,
'pendientes':pendientes,
'no_resueltos':no_resueltos,
'proceso':proceso,
'dependencia_id':dependencia_id,
'ubicacion':'inicio'
})
def captura(request):
varSolicitanteForm = solicitanteform(request.POST) or None
if 'esSolicitante' in request.POST:
try:
existePersona = persona.objects.get(
curp = request.POST['curp']
)
except Exception, e:
existePersona = None
if existePersona:
existePersona.mostrar = True
existePersona.save()
msj='El solicitante "%s" ya se encuentra registrado' % ( existePersona )
messages.info(request, msj)
else:
if varSolicitanteForm.is_valid():
try:
solicitante = varSolicitanteForm.save(commit = False)
solicitante.mostrar = True
solicitante.save()
except Exception, e:
messages.success(request, e)
return HttpResponseRedirect(request.path)
msj='Se agrego el solicitante %s' % ( solicitante )
messages.success(request, msj)
return HttpResponseRedirect(request.path)
if request.method=='POST':
# nota default
nota_ = u'Registro web'
# se refirere a la urgencia de la solicitud
if 'bandera' in request.POST:
b = request.POST['bandera']
else:
b = False
# se refiere a el origen de la solicitud opciones [Web, Gira, Fisicamente]
origen_Solicitud_ = None
# usuario default
usuario_ = 'web'
if 'origen_Solicitud' in request.POST:
origen_Solicitud_ = request.POST['origen_Solicitud']
# se cambia el usuarios default por el que captura
usuario_ = request.user.username
#print origen_Solicitud_
if origen_Solicitud_ == '1':
nota_ = u'Recibida en gira'
if origen_Solicitud_ == '2':
nota_ = u'Recibida de manera física'
# instancia inicial
asignaDefault = User.objects.get(username = usuario_)
s = solicitud(asigna_id = asignaDefault.id, nota = nota_, bandera = b)
if str(request.user) != 'AnonymousUser':
if request.user.is_staff:
estatusDefault = estatus.objects.get(clave='L')
s = solicitud(asigna_id = request.user.id, estatus_id = estatusDefault.id, nota = 'Capturado por adminstrador', bandera = b )
formulario = SolicitudForm(request.POST, request.FILES, instance = s)
if formulario.is_valid():
sol = formulario.save()
if sol.solicitante_id != None:
solicitante = persona.objects.get(pk = sol.solicitante_id)
solicitante.mostrar = False
solicitante.save()
msj='• La solicitud con numero de folio %s se ha enviado correctamente \n recuerde este folio para monitorear su solicitud en la sección de consultas.' % ( sol.id )
formulario = SolicitudForm(initial={'asigna':6})
#return TemplateResponse(request, 'captura.html', {'msj': msj, 'formulario':formulario})
# return redirect('/captura/', {'msj':msj}, context_instance = RequestContext(request))
# return redirect('captura.html',{'formulario':formulario, 'msj':msj})
messages.success(request, msj)
return HttpResponseRedirect(request.path)
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
id_d=0
# return HttpResponse( str(request.user) != 'AnonymousUser' )
if str(request.user) != 'AnonymousUser':
if not request.user.is_staff:
d = dependencia.objects.all().get(usuarios__in=[request.user.id]) # RECUPERA LA DEPENDENCIA VERIFICAR
id_d = d.id
solicitantesnuevos = persona.objects.all().filter(mostrar = True) #.exclude(
#id__in = ( solicitud.objects.values_list('solicitante_id') ) )
# print solicitud.objects.values_list('solicitante_id')
# print solicitantesnuevos
# if solicitantesnuevos.count() != 0:
# print solicitantesnuevos
SolicitudForm.base_fields['solicitante'] = forms.ModelChoiceField(required = False,
queryset = persona.objects.filter(pk__in = (solicitantesnuevos) )
)
formulario = SolicitudForm(initial={'asigna':6})
# return HttpResponse(str(id_d))
estados = estado.objects.all().order_by('nombre')
#estados = lugar.objects.filter(padre_id=50).order_by('nombre')
return render_to_response('captura.html',{'formularioSolicitante':varSolicitanteForm,'formulario':formulario, 'user':request.user, 'estados':estados}, context_instance = RequestContext(request))
@login_required
def editar_solicitud(request, solicitud_id):
return HttpResponse('1 pantalla principal de edicion de solicitudes')
@login_required
def asignar_solicitud(request):
return HttpResponse('2 pantalla principal de la dependencia')
@login_required
def ver_solicitudC(request, solicitud_id):
# formulario = SolicitudForm()
s = solicitud.objects.all().get(pk = solicitud_id)
s.estatus = estatus.objects.get(clave = 'L')
s.asigna = request.user
s.nota = 'leido por el administrador'
s.save()
return render_to_response('solicitud.html',{'solicitud':s}, context_instance = RequestContext(request))
return HttpResponse('3 pantalla de consulta de solicitud capturados')
@login_required
def ver_solicitudD(request, solicitud_id):
return HttpResponse('4 pantalla de consulta de solicitud devueltas')
def logout_user(request):
response = logout(request)
return HttpResponseRedirect('/login')
# def asignar(request, solicitud_id, dependencia_id):
# formulario = AsignacionForm(initial={'solicitud': solicitud_id, 'asigna':request.user.id, 'fecha_ultimo_cambio':datetime.now()})
# if request.method=='POST':
# dependencia_id = request.POST.get('dependencia')
# formulario = AsignacionForm(request.POST)
# if formulario.is_valid():
# formulario.save()
# s = solicitud.objects.all().get(pk=solicitud_id)
# if request.user.is_staff:
# s.estatus = estatus.objects.get(clave = 'A')
# s.nota = self.nota
# else:
# s.estatus = estatus.objects.get(clave = 'D')
# s.dependencia_id = dependencia_id
# s.nota = self.nota
# s.asigna = request.user
# s.save()
# return redirect('/ver/solicitud/'+solicitud_id+'/'+dependencia_id)
# return render_to_response('asignar.html',{'formulario':formulario, 'dependencia_id':dependencia_id}, context_instance = RequestContext(request))
@login_required
def ver_solicitud(request, solicitud_id, dependencia_id):
""" al mostrar la solicitud, le cambiamos el estatus """
# obtenemos la solicitud
s = solicitud.objects.all().get(pk=solicitud_id)
b = bitacora.objects.all().values('nota', 'dependencia__nombre', 'dependencia__clave', 'recibio__username', 'estatus__nombre').filter(solicitud_id = solicitud_id)
dependencias = dependencia.objects.all()
# verificamos si la solicitud es Captura y el usuario es Administrador
# o si la solicitud esta asignada y el usuario es Dependencia
if (s.estatus.clave == 'C' or s.estatus.clave == 'D') and request.user.is_staff:
s.estatus = estatus.objects.get(clave = 'L')
s.nota = 'leido por el administrador'
elif s.estatus.clave == 'A' and not request.user.is_staff:
s.estatus = estatus.objects.get(clave = 'AL')
s.nota = 'leido en la dependencia'
# modificamos el usuario quien registra y guardamos
s.asigna = request.user
s.save()
# return HttpResponse (request.method)
""" si el formulario fue enviado """
if request.method=='POST':
formulario = AsignacionForm( request.POST )
if formulario.is_valid():
# s = solicitud.objects.all().get(pk=solicitud_id)
if request.user.is_staff:
s.estatus = estatus.objects.get(clave = 'A')
else:
s.estatus = estatus.objects.get(clave = 'D')
s.dependencia_id = request.POST.get('dependencia')
s.nota = request.POST.get('nota')
s.asigna = request.user
s.save()
msj='la solicitud se asigno correctamente'
messages.success(request, msj)
return HttpResponseRedirect('/admin0/0')
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
# return render_to_response('solicitud.html',{'formulario':formulario, 'solicitud': s, 'dependencia_id':dependencia_id}, context_instance = RequestContext(request))
else:
# """ inicializamos el formulario """
formulario = AsignacionForm(initial={'solicitud':s, 'dependencia':s.dependencia_id})
return render_to_response('solicitud.html',{'formulario':formulario,'solicitud':s, 'dependencia_id':dependencia_id, 'bitacora':b, 'dependencias':dependencias}, context_instance = RequestContext(request))
@login_required
def resolver(request, solicitud_id, estatus_id, dependencia_id):
s = solicitud.objects.all().get(pk = solicitud_id)
if request.method=='POST':
formulario = AsignacionForm( request.POST )
if formulario.is_valid():
if estatus_id == '0':
s.estatus = estatus.objects.get(clave = 'RS')
s.dependencia_id = request.POST.get('dependencia')
s.nota = request.REQUEST['nota']
msj = 'satisfactoriamente'
else:
s.estatus = estatus.objects.get(clave = 'RI')
s.dependencia_id = request.POST.get('dependencia')
s.nota = request.REQUEST['nota']
msj = 'insatisfactoriamente'
s.asigna = request.user
s.save()
msj=u'la solicitud se resolvio %s' % (msj)
messages.success(request, msj)
return HttpResponseRedirect('/admin0/' + str(dependencia_id))
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
# """ inicializamos el formulario """
formulario = AsignacionForm(initial={'solicitud':s})
return render_to_response('solicitud.html',{'formulario':formulario,'solicitud':s, 'dependencia_id':dependencia_id}, context_instance = RequestContext(request))
return redirect('/ver/solicitud/'+solicitud_id+'/'+dependencia_id)
@login_required
def devolver(request, solicitud_id, dependencia_id):
s = solicitud.objects.all().get(pk = solicitud_id)
formulario = AsignacionForm(request.POST)
# msj = u'%s' % (dependencia_id)
# return HttpResponse(msj)
if request.method=='POST':
formulario = AsignacionForm(request.POST)
if formulario.is_valid():
s.estatus = estatus.objects.get(clave = 'D')
s.nota = request.POST.get('nota')
s.asigna = request.user
s.save()
msj = 'La solicitud se ha devuelto '
messages.success(request, msj)
return HttpResponseRedirect('/admin0/' + str(dependencia_id))
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
return render_to_response('solicitud.html',{'formulario':formulario,'solicitud':s, 'dependencia_id':dependencia_id}, context_instance = RequestContext(request))
def consulta(request):
s = None
b = None
if request.GET:
id_ = -1
if 'folio' in request.GET:
id_ = request.GET.get('folio')
if id_ == '':
messages.error(request, 'folio no proporcionado')
#curp_ = ''
if 'curp' in request.GET:
curp_ = request.GET.get('curp').upper() or None
if str(request.user) == 'AnonymousUser':
if curp_ == None:
messages.error(request, 'CURP no proporcionado')
try:
if curp_ == None and str(request.user) != 'AnonymousUser':
s = solicitud.objects.all().get(id = id_)
else:
s = solicitud.objects.all().get(id = id_, curp = curp_)
b = bitacora.objects.all().values('nota', 'dependencia__nombre', 'dependencia__clave', 'recibio__username', 'estatus__nombre').filter(solicitud_id = id_)
messages.info(request, 'Solicitud encontrada')
except Exception, e:
pass
# msj='Por favor, corrija el siguiente error. %s ' % e
# messages.error(request, msj)
if s == None:
messages.error(request, 'No se encontró solicitud con los datos proporcionados ')
return render_to_response('consulta.html',{'solicitud':s, 'bitacora':b}, context_instance = RequestContext(request))
@login_required
def dependenciaadd(request):
dependencias = dependencia.objects.all
if request.method == 'POST':
formulario = dependenciaform(request.POST)
if formulario.is_valid():
try:
formulario.save()
msj = 'La dependencia "%s" se ha agregado correctamente' % request.POST.get('nombre').upper()
messages.success(request, msj)
except Exception, e:
msj = e.message
messages.error(request, msj)
return HttpResponseRedirect('/admin0/0')
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
formulario = dependenciaform()
return render_to_response('dependencia.html',{'dependencias':dependencias, 'formulario':formulario, 'accion':'add'}, context_instance = RequestContext(request))
@login_required
def dependenciaedit(request, dependencia_id):
dependencias = dependencia.objects.all()
if request.method == 'GET':
d = dependencia.objects.all().get(pk = dependencia_id)
formulario = dependenciaform(initial = {'clave':d.clave, 'nombre':d.nombre}, instance = d)
# return HttpResponseRedirect(request.path)
elif request.method == 'POST':
formulario = dependenciaform(request.POST)
if formulario.is_valid():
d = dependencia.objects.all().get(pk = dependencia_id)
d.clave = request.POST.get('clave').upper()
d.nombre = request.POST.get('nombre').upper()
try:
d.save()
msj = 'La dependencia "%s" se modifico correctamente' % request.POST.get('nombre').upper()
messages.success(request, msj)
except Exception, e:
msj = e.message
messages.error(request, msj)
return HttpResponseRedirect(request.path)
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
formulario = dependenciaform()
return render_to_response('dependencia.html',{'dependencias':dependencias, 'formulario':formulario, 'accion':'editar', 'dependencia_id':dependencia_id}, context_instance = RequestContext(request))
def lugaradd(request):
if 'REMOTE_ADDR' in request.META:
RA = request.META['REMOTE_ADDR']
RA = request.META.get('HTTP_X_FORWARDED_FOR', '') or request.META.get('REMOTE_ADDR')
messages.warning(request, str(' Por cuestiones de seguridad usaremos su ip: %s ' % RA ) )
i = lugar(ip = RA)
lugares = lugar.objects.all
if request.method == 'POST':
formulario = lugarform(request.POST, instance = i)
if formulario.is_valid():
try:
formulario.save()
msj = 'La localidad "%s" se ha agregado correctamente' % request.POST.get('nombre')
messages.success(request, msj)
except Exception, e:
msj = e
messages.error(request, msj)
return HttpResponseRedirect('/captura')
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
formulario = lugarform()
return render_to_response('lugar.html',{'lugares':lugares, 'formulario':formulario, 'accion':'add'}, context_instance = RequestContext(request))
def lugaredit(request, lugar_id):
lugares = lugar.objects.all()
if request.method == 'GET':
d = lugar.objects.all().get(pk = lugar_id)
formulario = lugarform(initial = {'clave':d.clave, 'nombre':d.nombre}, instance = d)
# return HttpResponseRedirect(request.path)
elif request.method == 'POST':
formulario = lugarform(request.POST)
if formulario.is_valid():
d = lugar.objects.all().get(pk = lugar_id)
d.clave = request.POST.get('clave').upper()
d.nombre = request.POST.get('nombre').upper()
try:
d.save()
msj = 'La lugar "%s" se modifico correctamente' % request.POST.get('nombre')
messages.success(request, msj)
except Exception, e:
msj = e.message
messages.error(request, msj)
return HttpResponseRedirect(request.path)
else:
msj='Por favor, corrija el siguiente error.'
messages.error(request, msj)
else:
formulario = lugarform()
return render_to_response('lugar.html',{'lugares':lugares, 'formulario':formulario, 'accion':'editar', 'lugar_id':lugar_id}, context_instance = RequestContext(request))
from django.db.models import Count
from django.contrib.auth.decorators import login_required
@login_required
def bitacoraview(request, dependencia_id=0):
if dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id)
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
leidas = solicitudes.filter( estatus__clave='L' )
resueltos = solicitudes.filter(estatus__clave__in = ('RS', 'RI'))
no_resueltos = solicitudes.filter(estatus__clave='AL').order_by('-bandera','-fecha_ultimo_cambio')
ultimas = solicitudes.filter(estatus__clave__in=('C','D')).order_by('-bandera','-fecha_ultimo_cambio')
pendientes = solicitudes.filter(estatus__clave__in=('A','L')).order_by('-bandera','-estatus', '-fecha_ultimo_cambio')
proceso = solicitudes.filter(estatus__clave__in=('A','AL','L'))
proceso.percent = 0
if solicitudes.count() != 0:
proceso.percent = str(proceso.count() * 100 / solicitudes.count())
if dependencia_id != '0':
b = bitacora.objects.all().filter(dependencia_id = dependencia_id).order_by('-fecha_registro')
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id)
else:
b = bitacora.objects.all()
solicitudes = solicitud.objects.all().order_by('-bandera','-fecha_registro')
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
totales = bitacora.objects.values('estatus__nombre').order_by('estatus').annotate(total=Count('estatus'))
dependencias = dependencia.objects.all()
return render_to_response('bitacora.html',{
'bitacora':b,
'dependencias':dependencias,
'ubicacion':'bitacora',
'totales':totales,
'solicitudesC': solicitudesC,
'solicitudesD': solicitudesD,
'ultimas':ultimas,
'solicitudes': solicitudes,
'leidas':leidas,
'resueltos':resueltos,
'ultimas':ultimas,
'pendientes':pendientes,
'proceso':proceso,
}, context_instance = RequestContext(request))
from reportlab.pdfgen import canvas
from django.http import HttpResponse
def pdf1(request):
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type='application/pdf')
response ['Content-Disposition'] = 'filename="somefilename.pdf"'
# Create the PDF object, using the response object as its "file."
p = canvas.Canvas(response)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
if request.method == 'POST':
if 'de' in request.POST:
if request.REQUEST['de'] != '':
de = request.REQUEST['de']
a = request.REQUEST['a']
lugares = lugar.objects.all().filter(fecha_registro__range=[de, a])
else:
lugares = lugar.objects.all()
i=800
for lug in lugares:
linea = u' %s %s ' % (lug.padre, lug.nombre)
p.drawString( 100 , i, linea )
i-=50
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
return response
def pdf(request):
return TemplateResponse(request, 'pdf.pdf')
@login_required
def SolicitudCURP(request, solicitud_id):
# consultar solicitud, para extraer CURP
s = solicitud.objects.get(id = solicitud_id )
# consultar solicitudes por CURP
solicitudes = solicitud.objects.all().filter(curp = s.curp)
return render_to_response('SolicitudCURP.html',{'solicitud':s, 'solicitudes':solicitudes}, context_instance = RequestContext(request))
@login_required
def perfil(request, user_id):
return TemplateResponse(request, 'perfil.html' )
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
@login_required(login_url='/')
def imprimirView(request, dependencia_id):
bscr = ''
if 'bscr' in request.GET:
bscr= request.GET['bscr']
dependencias = dependencia.objects.all()
if dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id)
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
solicitudes = solicitudes.filter(
Q(nombre__icontains = bscr) |
Q(apellido_paterno__icontains = bscr) |
Q(apellido_materno__icontains = bscr) |
Q(sexo__icontains = bscr) |
Q(fecha_nacimiento__icontains = bscr) |
Q(curp__icontains = bscr) |
Q(localidad__nombre__icontains = bscr) |
Q(localidad__padre__nombre__icontains = bscr) |
Q(solicitud__icontains = bscr) |
# Q(direccion__icontains = bscr) |
Q(codigo_postal__icontains = bscr) #|
# Q(identificacion__icontains = bscr) |
# Q(correo_electronico__icontains = bscr)
|
Q(solicitante__nombre__icontains = bscr) |
Q(solicitante__apellido_paterno__icontains = bscr) |
Q(solicitante__apellido_materno__icontains = bscr) |
Q(solicitante__fecha_nacimiento__icontains = bscr)
)#.extra(where=[" CONCAT(trim(atencion_ciudadana_solicitud.nombre),' ',trim(atencion_ciudadana_solicitud.apellido_paterno),' ',trim(atencion_ciudadana_solicitud.apellido_materno)) like %s or CONCAT(trim(atencion_ciudadana_persona.nombre),' ',trim(atencion_ciudadana_persona.apellido_paterno),' ',trim(atencion_ciudadana_persona.apellido_materno)) like %s "], params=['%'+bscr+'%', '%'+bscr+'%'])
rpp = 10 # Show 10 contacts per page
if 'rpp' in request.GET:
rpp = request.GET.get('rpp')
paginator = Paginator(solicitudes, rpp)
page = request.GET.get('page')
try:
solicitudes = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
solicitudes = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
solicitudes = paginator.page(paginator.num_pages)
return TemplateResponse(request, 'imprimir.html',
{
'dependencias':dependencias,
'solicitudesC':solicitudesC,
'solicitudes':solicitudes,
'bscr':bscr,
'rpp':rpp,
'dependencia_id':dependencia_id
} )
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import Table, TableStyle, SimpleDocTemplate,PageTemplate, Paragraph, Spacer, Image
from reportlab.lib.pagesizes import letter, landscape, A4, portrait
from reportlab.lib.units import cm, mm, inch, pica
from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER
from reportlab.lib import colors
import os
from reportlab.rl_config import defaultPageSize
import locale
PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0]
Title = ''
pageinfo = ""
from reportlab.platypus import PageBreak
def PDF(request, dependencia_id):
bscr = ''
if 'bscr' in request.GET:
bscr= request.GET['bscr']
s = None
response = HttpResponse(mimetype='application/pdf')
#response['Content-Disposition'] = 'attachment;filename=Reporte.pdf'
estilo=getSampleStyleSheet()
elements = []
doc = SimpleDocTemplate(response,pagesize=landscape(A4), rightMargin=5*mm,leftMargin=5*mm,
topMargin=2.5*cm,bottomMargin=3*cm)
data = []
h1=estilo['h1']
estilo.add( ParagraphStyle( name = 'Centrado' ) )
Centrado = estilo["Centrado"]
Centrado.alignment = TA_CENTER
Centrado.fontName = "Helvetica"
Centrado.fontSize = 10
estilo.add( ParagraphStyle (name = 'Justificado') )
Justificado = estilo['Justificado']
Justificado.alignment = TA_JUSTIFY
Justificado.fontName = "Helvetica"
Justificado.fontSize = 7
# logo = Paragraph('', h1)
# elements.append(logo)
# P=Paragraph("GOBIERNO DEL ESTADO DE TABASCO",Centrado)
# elements.append(P)
# P=Paragraph("SERVICIO ESTATAL DE ADMINISTRACION DE BIENES ASEGURADOS",Centrado)
# elements.append(P)
# elements.append(Spacer(0,40))
# foto = Image('/static/images/logo_tabasco.png')
data=[[
'Nombre',
'S',
'F. nac.',
'CURP',
'Localidad',
'Dirección',
'CP',
'IFE/Licencia',
'Correo',
'Teléfono',
'Celular',
'Solicitud',
'Depcia.',
# 'Foto',
# 'Estatus',
# 'Asigna',
# 'Nota'
]]
if dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id)
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
solicitudes = solicitudes.filter(
Q(nombre__icontains = bscr) |
Q(apellido_paterno__icontains = bscr) |
Q(apellido_materno__icontains = bscr) |
Q(sexo__icontains = bscr) |
Q(fecha_nacimiento__icontains = bscr) |
Q(curp__icontains = bscr) |
Q(localidad__nombre__icontains = bscr) |
Q(localidad__padre__nombre__icontains = bscr) |
Q(solicitud__icontains = bscr) |
# Q(direccion__icontains = bscr) |
Q(codigo_postal__icontains = bscr) #|
# Q(identificacion__icontains = bscr) |
# Q(correo_electronico__icontains = bscr)
)
s = solicitudes
if request.GET:
fecha = request.GET.get('de')
fecha1 = request.GET.get('de1')
# try:
# s = Bienes.objects.all().filter(fecha__range=(fecha, fecha1) )
# except Exception, e:
# msj=e
# messages.error(request, msj)
# return HttpResponseRedirect ('/caronte/bienes/bienes/')
for p in s:
plocalidadnombre = ''
plocalidadpadrenombre = ''
if p.localidad:
if p.localidad.nombre != '':
plocalidadnombre = p.localidad.nombre[0:100]
if p.localidad.padre:
plocalidadpadrenombre = p.localidad.padre.nombre[0:100]
data.append([
Paragraph(p.nombre[0:50] + ' ' +p.apellido_paterno[0:50] + ' ' + p.apellido_materno[0:50], Justificado ),
p.sexo,
p.fecha_nacimiento,
p.curp,
Paragraph( plocalidadnombre + ', ' + plocalidadpadrenombre, Justificado ),
Paragraph(p.direccion[0:100], Justificado ),
p.codigo_postal,
p.identificacion,
p.correo_electronico,
p.telefono,
p.celular,
Paragraph(p.solicitud[0:500], Justificado ),
Paragraph(p.dependencia.nombre[0:100], Justificado ),
# p.foto,
# p.estatus,
# p.asigna,
# p.nota
# Paragraph(p.numero_averiguacion, Justificado ),
# p.autoridad,
# p.numero_oficio,
# p.persona_entrega,
# Paragraph(p.propietario, Justificado ),
# p.calidad_bien.calidad_bien[0:2],
# p.tipo_bien.tipo_bien[0:1],
# Paragraph(p.descripcion, Justificado ),
# Paragraph(p.situacion_juridica, Justificado ),
# p.fecha_devolucion
])
#data.append(PageBreak())
# elements.append(foto)
# elements.append(ted)
t_datos = Table(data,
[
3 * cm, #nombre #apellido paterno #apellido materno
0.50 * cm, #sexo
1.50 * cm, #fecha de nacimiento
3.25 * cm, #CURP
2.50 * cm, #localidad
2.50 * cm, #Direccion
1 * cm, #codigo postal
2.25 * cm, #identificacion
4 * cm, #correo
1.75 * cm, #telefono
1.50 * cm, #celular
2.75 * cm, #solicitud
1.75 * cm, #dependencia
],
repeatRows=1,
style=[('GRID',(0,0),(-1,-1),0.5,colors.grey),
('FONTSIZE',(0,1),(-1,-1),7),
# ('ALIGN',(0,0),(-1,0),'CENTER'),
# ('ALIGN',(0,0),(-11,-1),'CENTER'),
# ('ALIGN',(1,1),(-10,-1),'LEFT'),
# ('ALIGN',(2,1),(-9,-1),'CENTER'),
# ('ALIGN',(3,1),(-6,-1),'LEFT'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(8,1),(-2,-1),'LEFT'),
# ('ALIGN',(10,1),(-1,-1),'CENTER'),
# ('BACKGROUND',(10,1),(-1,-1),colors.red),
# ('INNERGRID', (0,0), (-1,-1), 0.25, colors.red),
])
# t_datos.hAlign = 'LEFT'
elements.append(t_datos)
import os
# imagen = os.path.join(os.path.dirname(os.path.abspath('settings.py')), '/static/imagenes/pleca-sup-dif.png')
imagen = ('http://atencion.tabasco.gob.mx/static/imagenes/pleca-sup-dif.png')
def myFirstPage(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
# canvas.setFont('Helvetica',10)
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d" % (doc.page))
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d %s" % (doc.page, pageinfo))
canvas.restoreState()
doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages)
return response
def comprobanteView(request):
solicitud_id = 0
if 'solicitud_id' in request.POST:
solicitud_id = request.POST['solicitud_id']
s = None
response = HttpResponse(mimetype='application/pdf')
#response['Content-Disposition'] = 'attachment;filename=Reporte.pdf'
estilo=getSampleStyleSheet()
elements = []
doc = SimpleDocTemplate(response,pagesize=portrait(letter), rightMargin=5*mm,leftMargin=5*mm,
topMargin=2.5*cm,bottomMargin=3*cm)
data = []
h1=estilo['h1']
estilo.add( ParagraphStyle( name = 'Centrado' ) )
Centrado = estilo["Centrado"]
Centrado.alignment = TA_CENTER
Centrado.fontName = "Helvetica"
Centrado.fontSize = 10
estilo.add( ParagraphStyle (name = 'Justificado') )
Justificado = estilo['Justificado']
Justificado.alignment = TA_JUSTIFY
Justificado.fontName = "Helvetica"
Justificado.fontSize = 7
# logo = Paragraph('', h1)
# elements.append(logo)
# P=Paragraph("GOBIERNO DEL ESTADO DE TABASCO",Centrado)
# elements.append(P)
# P=Paragraph("SERVICIO ESTATAL DE ADMINISTRACION DE BIENES ASEGURADOS",Centrado)
# elements.append(P)
# elements.append(Spacer(0,40))
# foto = Image('/static/images/logo_tabasco.png')
data=[]
solicitudes = solicitud.objects.all().filter(id = solicitud_id)
s = solicitudes
print s
print solicitud_id
data.append(['Folio:', s[0].id])
data.append(['Nombre:',
Paragraph(s[0].nombre+ ' ' +s[0].apellido_paterno+ ' ' +s[0].apellido_materno, Justificado ),])
if s[0].sexo == 'F':
data.append(['Sexo:', 'Femenino'])
else:
data.append(['Sexo:', 'Masculino'])
data.append(['CURP:', s[0].curp])
data.append(['Localidad:', s[0].localidad])
data.append(['Dirección:', Paragraph(s[0].direccion, Justificado )])
data.append(['Codigo Postal:', s[0].codigo_postal])
data.append(['IFE/Licencia:', s[0].identificacion])
data.append(['Fecha de nacimiento:', s[0].fecha_nacimiento])
data.append(['Correo electrónico:', s[0].correo_electronico])
data.append(['Teléfono:', s[0].telefono])
data.append(['Celular:', s[0].celular])
data.append(['Solicitud:', Paragraph(s[0].solicitud, Justificado ),])
data.append(['Estatus:', s[0].estatus])
data.append(['Dependencia:', s[0].dependencia])
data.append(['Asigna:', s[0].asigna])
data.append(['Fecha registro:', s[0].fecha_registro])
data.append(['Observaciones:', Paragraph(s[0].nota, Justificado)])
t_datos = Table(data,
[
3.5 * cm, #nombre
7 * cm, #nombre
],
repeatRows=1,
style=[('GRID',(0,0),(-1,-1),0.5,colors.grey),
('FONTSIZE',(0,0),(-1,-1),7),
('ALIGN',(0,0),(-11,-1),'CENTER'),
('ALIGN',(1,1),(-10,-1),'LEFT'),
('ALIGN',(2,1),(-9,-1),'CENTER'),
('ALIGN',(3,1),(-6,-1),'LEFT'),
('ALIGN',(6,1),(-4,-1),'CENTER'),
('ALIGN',(6,1),(-4,-1),'CENTER'),
('ALIGN',(8,1),(-2,-1),'LEFT'),
('ALIGN',(10,1),(-1,-1),'CENTER'),
# ('BACKGROUND',(10,1),(-1,-1),colors.red),
# ('INNERGRID', (0,0), (-1,-1), 0.25, colors.red),
])
# t_datos.hAlign = 'LEFT'
elements.append(t_datos)
import os
# imagen = os.path.join(os.path.dirname(os.path.abspath('settings.py')), 'static/imagenes/pleca-sup-dif.png')
imagen = ('http://atencion.tabasco.gob.mx/static/imagenes/pleca-sup-dif.png')
def myFirstPage(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen, 0.5*cm, 26*cm, 150, 62)
canvas.setFont('Helvetica',12)
canvas.drawString(9*cm, 27 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(9.2*cm, 26.5 * cm, "Sistema Estatal de Atención Ciudadana")
canvas.drawString(12*cm, 26 * cm, "Comprobante" )
canvas.setFont('Helvetica',6)
fecha = datetime.datetime.now()
from django.utils import formats
fecha_impresion = formats.date_format(fecha, "SHORT_DATETIME_FORMAT")
canvas.drawString(17 * cm, 1.5 * cm, 'Fecha de impresion:' + str( fecha_impresion ) )
canvas.setFont('Helvetica',9)
canvas.drawString(2.5*cm, 2.5 * cm, "Para conocer el estado de su solicitud ingrese con su número de Folio y CURP a: http://atencion.tabasco.gob.mx/consulta/")
canvas.drawString(3.5*cm, 2 * cm, "")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d" % (doc.page))
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen, 0.5*cm, 26*cm, 150, 62)
canvas.setFont('Helvetica',12)
canvas.drawString(9*cm, 27 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(9.2*cm, 26.5 * cm, "Sistema Estatal de Atención Ciudadana")
canvas.drawString(12*cm, 26 * cm, "Comprobante" )
# canvas.setFont('Helvetica',10)
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d %s" % (doc.page, pageinfo))
canvas.restoreState()
doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages)
return response
@login_required(login_url='/login/')
def reporteEstadistico(request):
dependenciaSeleccionada = '0'
if 'dependencia' in request.GET:
dependenciaSeleccionada = request.GET['dependencia']
camposSeleccionados = ['id', 'sexo', 'localidad_id', 'codigo_postal', 'solicitud', 'estatus_id', 'asigna_id', 'fecha_registro', 'nota']
if 'campos' in request.GET:
camposSeleccionados = request.GET.getlist('campos')
'''
Tablas de las solicitudes ingresadas,
las atendidas, las canalizadas y los estatus que tengan desagregados cada una de estas
con el usuaio logueado obtener la dependencia
filtrar solicitudes por dependencia
agruparlas por estatus
totales
usuario = request.user
d = ', '.join( [ str(d.id) for d in dependencia.objects.filter(usuarios__in=[usuario.id]) ] )
solicitudes = solicitud.objects.all().filter(dependencia_id__in = [ d ])
'''
usuario = request.user
dependencia_id = ', '.join( [ str(d.id) for d in dependencia.objects.filter(usuarios__in=[usuario.id]) ] )
dependencia_ = dependencia.objects.filter(usuarios__in=[usuario.id])
if dependenciaSeleccionada != 0:
dependencia_ = dependencia.objects.filter(id=dependenciaSeleccionada)
response = HttpResponse(mimetype='application/pdf')
#response['Content-Disposition'] = 'attachment;filename=Reporte.pdf'
estilo=getSampleStyleSheet()
elements = []
doc = SimpleDocTemplate(response,pagesize=landscape(A4), rightMargin=5*mm,leftMargin=5*mm,
topMargin=2.5*cm,bottomMargin=3*cm)
data = []
h1=estilo['h1']
estilo.add( ParagraphStyle( name = 'Centrado' ) )
Centrado = estilo["Centrado"]
Centrado.alignment = TA_CENTER
Centrado.fontName = "Helvetica"
Centrado.fontSize = 10
estilo.add( ParagraphStyle (name = 'Justificado') )
Justificado = estilo['Justificado']
Justificado.alignment = TA_JUSTIFY
Justificado.fontName = "Helvetica"
Justificado.fontSize = 7
# logo = Paragraph('', h1)
# elements.append(logo)
# P=Paragraph("GOBIERNO DEL ESTADO DE TABASCO",Centrado)
# elements.append(P)
# P=Paragraph("SERVICIO ESTATAL DE ADMINISTRACION DE BIENES ASEGURADOS",Centrado)
# elements.append(P)
# elements.append(Spacer(0,40))
# foto = Image('/static/images/logo_tabasco.png')
# data=[[
# '',
# Paragraph('Folio', Centrado ),
# #'Solicitante',
# #'Nombre',
# Paragraph('S', Centrado ),
# #'F. nac.',
# #'CURP',
# Paragraph('Localidad', Centrado ),
# #'Dirección',
# Paragraph('CP', Centrado ),
# #'IFE/Licencia',
# #'Correo',
# #'Teléfono',
# #'Celular',
# Paragraph('Solicitud', Centrado ),
# #'Dependencia',
# #'Foto',
# Paragraph('Estatus', Centrado ),
# Paragraph('Asigna', Centrado ),
# Paragraph('Fecha', Centrado ),
# #'fecha_ultimo_cambio',
# Paragraph('Nota', Centrado ),
# #'Urgente'
# ]]
rowcampo = ['']
for campo in camposSeleccionados:
tmp = campo
if campo == 'id':
tmp='Folio'
elif campo == 'solicitante_id':
tmp='Solicitante'
elif campo == 'nombre':
tmp='Nombre'
elif campo =='sexo':
tmp='S'
elif campo == 'fecha_nacimiento':
tmp='Fecha de nacimiento'
elif campo == 'curp':
tmp='CURP'
elif campo == 'localidad_id':
tmp='Localidad'
elif campo == 'direccion':
tmp='Dirección'
elif campo == 'codigo_postal':
tmp='C.P.'
elif campo == 'identificacion':
tmp='Identificación'
elif campo == 'correo_electronico':
tmp='Correo Electrónico'
elif campo == 'telefono':
tmp='Teléfono'
elif campo == 'celular':
tmp='Celular'
elif campo == 'solicitud':
tmp='Solicitud'
elif campo == 'dependencia_id':
tmp='Dependencia'
elif campo == 'foto':
tmp='Foto'
elif campo == 'estatus_id':
tmp='Estatus'
elif campo == 'asigna_id':
tmp='Asigna'
elif campo == 'fecha_registro':
tmp='Fecha'
elif campo == 'fecha_ultimo_cambio':
tmp='Ultimo cambio'
elif campo == 'nota':
tmp='Nota'
elif campo == 'bandera':
tmp='Urgente'
rowcampo.append( Paragraph(tmp, Centrado ) ),
data.append(rowcampo)
if dependenciaSeleccionada != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependenciaSeleccionada).order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
elif dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id).order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
if request.GET:
fecha = request.GET.get('de')
fecha1 = request.GET.get('de1')
i = 0
from django.utils import formats
for solicitud_ in solicitudes:
i = i+ 1
plocalidadnombre = ''
plocalidadpadrenombre = ''
if solicitud_.localidad:
if solicitud_.localidad.nombre != '':
plocalidadnombre = solicitud_.localidad.nombre[0:100]
if solicitud_.localidad.padre:
plocalidadpadrenombre = ', ' + solicitud_.localidad.padre.nombre[0:100]
plocalsolicitante = ''
if solicitud_.solicitante:
plocalsolicitante = solicitud_.solicitante.nombre[0:50] + ' ' +solicitud_.solicitante.apellido_paterno[0:50] + ' ' + solicitud_.solicitante.apellido_materno[0:50]
plocalbandera = ''
if solicitud_.bandera:
plocalbandera = 'si'
# data.append([
# i,
# solicitud_.id,
# #Paragraph(plocalsolicitante, Justificado ),
# #Paragraph(solicitud_.nombre[0:50] + ' ' +solicitud_.apellido_paterno[0:50] + ' ' + solicitud_.apellido_materno[0:50], Justificado ),
# solicitud_.sexo,
# #solicitud_.fecha_nacimiento,
# #solicitud_.curp,
# Paragraph( plocalidadnombre + plocalidadpadrenombre, Justificado ),
# #Paragraph(solicitud_.direccion[0:100], Justificado ),
# solicitud_.codigo_postal,
# #solicitud_.identificacion,
# #solicitud_.correo_electronico,
# #solicitud_.telefono,
# #solicitud_.celular,
# Paragraph(solicitud_.solicitud, Justificado ),
# #Paragraph(solicitud_.dependencia.nombre[0:100], Justificado ),
# # solicitud_.foto,
# solicitud_.estatus,
# solicitud_.asigna,
# formats.date_format(solicitud_.fecha_registro, "SHORT_DATE_FORMAT"),
# #solicitud.fecha_ultimo_cambio,
# Paragraph( solicitud_.nota , Justificado ),
# # solicitud_.urgente
# ])
rowcampo = [i]
rowcampoAnchoColumnas = [7 * mm]
for campo in camposSeleccionados:
tmp = campo
if campo == 'id':
rowcampo.append( solicitud_.id )
rowcampoAnchoColumnas.append(10 * mm)
elif campo == 'solicitante_id':
rowcampo.append( Paragraph(plocalsolicitante, Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'nombre':
rowcampo.append( Paragraph(solicitud_.nombre[0:50] + ' ' +solicitud_.apellido_paterno[0:50] + ' ' + solicitud_.apellido_materno[0:50], Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'sexo':
rowcampo.append( solicitud_.sexo )
rowcampoAnchoColumnas.append(7 * mm)
elif campo == 'fecha_nacimiento':
rowcampo.append( solicitud_.fecha_nacimiento )
rowcampoAnchoColumnas.append(20 * mm)
elif campo == 'curp':
rowcampo.append( solicitud_.curp )
rowcampoAnchoColumnas.append(32 * mm)
elif campo == 'localidad_id':
rowcampo.append( Paragraph( plocalidadnombre + plocalidadpadrenombre, Justificado ) )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'direccion':
rowcampo.append( Paragraph(solicitud_.direccion[0:100], Justificado ) )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'codigo_postal':
rowcampo.append( solicitud_.codigo_postal )
rowcampoAnchoColumnas.append(10 * mm)
elif campo == 'identificacion':
rowcampo.append( solicitud_.identificacion )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'correo_electronico':
rowcampo.append( solicitud_.correo_electronico )
rowcampoAnchoColumnas.append(40 * mm)
elif campo == 'telefono':
rowcampo.append( solicitud_.telefono )
rowcampoAnchoColumnas.append(17 * mm)
elif campo == 'celular':
rowcampo.append( solicitud_.celular )
rowcampoAnchoColumnas.append(17 * mm)
elif campo == 'solicitud':
rowcampo.append( Paragraph(solicitud_.solicitud[0:50], Justificado ) ) # corregir longitud, debe solucionarse al hacer dinamoco el ancho de la columna
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'dependencia_id':
rowcampo.append( Paragraph(solicitud_.dependencia.nombre[0:100], Justificado ) )
rowcampoAnchoColumnas.append(50 * mm)
elif campo == 'foto':
rowcampo.append( solicitud_.foto )
rowcampoAnchoColumnas.append(50 * mm)
elif campo == 'estatus_id':
rowcampo.append( solicitud_.estatus )
rowcampoAnchoColumnas.append(40 * mm)
elif campo == 'asigna_id':
rowcampo.append( solicitud_.asigna )
rowcampoAnchoColumnas.append(20 * mm)
elif campo == 'fecha_registro':
rowcampo.append( formats.date_format(solicitud_.fecha_registro, "SHORT_DATE_FORMAT") )
rowcampoAnchoColumnas.append(18 * mm)
elif campo == 'fecha_ultimo_cambio':
rowcampo.append( formats.date_format(solicitud_.fecha_ultimo_cambio, "SHORT_DATE_FORMAT") )
rowcampoAnchoColumnas.append(18 * mm)
elif campo == 'nota':
rowcampo.append( Paragraph( solicitud_.nota , Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'bandera':
rowcampo.append( plocalbandera )
rowcampoAnchoColumnas.append(15 * mm)
data.append(rowcampo)
#data.append(PageBreak())
# elements.append(foto)
# elements.append(ted)
rowcampo = [
5 * mm, #contador
10 * mm, #id
#5 * mm, #solicitante
#5 * mm, #beneficiario
5 * mm, #sexo
#1.50 * cm, #fecha de nacimiento
#2.25 * cm, #CURP
25 * mm, #localidad
#2.50 * cm, #Direccion
10 * mm, #codigo postal
#2.25 * cm, #identificacion
#4 * cm, #correo
#1.75 * cm, #telefono
#1.50 * cm, #celular
60 * mm, #solicitud
#50 * mm, #dependencia
#5 * mm, #foto
40 * mm, #estatus
20 * mm, #asigna
20 * mm, #fecha registro
#5 * mm, #fecha_ultimo cambio
60 * mm, #nota
#5 * mm, #urgencia
]
t_datos = Table(data,
rowcampoAnchoColumnas
,
repeatRows=1,
style=[('GRID',(0,0),(-1,-1),0.5,colors.grey), # cuadricula
('FONTSIZE',(0,1),(-1,-1),7, colors.red),
# ('ALIGN',(0,0),(-1,0),'CENTER'),
# ('ALIGN',(0,0),(-11,-1),'CENTER'),
# ('ALIGN',(1,1),(-10,-1),'LEFT'),
# ('ALIGN',(2,1),(-9,-1),'CENTER'),
# ('ALIGN',(3,1),(-6,-1),'LEFT'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(8,1),(-2,-1),'LEFT'),
('VALIGN',(0,1),(-1,-1),'TOP'),
#('BACKGROUND',(1,1),(-1,-1),colors.red),
# ('INNERGRID', (0,0), (-1,-1), 0.25, colors.red),
])
# t_datos.hAlign = 'LEFT'
elements.append(t_datos)
import os
# imagen = os.path.join(os.path.dirname(os.path.abspath('settings.py')), '/static/imagenes/pleca-sup-dif.png')
imagen = ('http://atencion.tabasco.gob.mx/static/imagenes/pleca-sup-dif.png')
def myFirstPage(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
#canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
canvas.drawString((18-(.125*len(str(dependencia_[0])))) * cm, 19 * cm, str(dependencia_[0]) )
#canvas.drawString(18.5*cm, 18.5*cm, str(.125*len(str(dependencia_[0]))) )
# canvas.setFont('Helvetica',10)
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d" % (doc.page))
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
#canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
canvas.drawString((18-(.125*len(str(dependencia_[0])))) * cm, 19 * cm, str(dependencia_[0]) )
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d %s" % (doc.page, pageinfo))
canvas.restoreState()
doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages)
return response
@login_required(login_url='/login/')
def reporteGrafico(request):
dependenciaSeleccionada = '0'
if 'dependencia' in request.GET:
dependenciaSeleccionada = request.GET['dependencia']
camposSeleccionados = ['id', 'sexo', 'localidad_id', 'codigo_postal', 'solicitud', 'estatus_id', 'asigna_id', 'fecha_registro', 'nota']
if 'campos' in request.GET:
camposSeleccionados = request.GET.getlist('campos')
usuario = request.user
dependencia_id = ', '.join( [ str(d.id) for d in dependencia.objects.filter(usuarios__in=[usuario.id]) ] )
dependencia_ = dependencia.objects.filter(usuarios__in=[usuario.id])
if dependenciaSeleccionada != 0:
dependencia_ = dependencia.objects.filter(id=dependenciaSeleccionada)
response = HttpResponse(mimetype='application/pdf')
#response['Content-Disposition'] = 'attachment;filename=Reporte.pdf'
estilo=getSampleStyleSheet()
elements = []
doc = SimpleDocTemplate(response,pagesize=landscape(A4), rightMargin=5*mm,leftMargin=5*mm,
topMargin=2.5*cm,bottomMargin=3*cm)
data = []
h1=estilo['h1']
estilo.add( ParagraphStyle( name = 'Centrado' ) )
Centrado = estilo["Centrado"]
Centrado.alignment = TA_CENTER
Centrado.fontName = "Helvetica"
Centrado.fontSize = 10
estilo.add( ParagraphStyle (name = 'Justificado') )
Justificado = estilo['Justificado']
Justificado.alignment = TA_JUSTIFY
Justificado.fontName = "Helvetica"
Justificado.fontSize = 7
rowcampoTitulo = ['']
for campo in camposSeleccionados:
tmp = campo
if campo == 'id':
tmp='Folio'
elif campo == 'solicitante_id':
tmp='Solicitante'
elif campo == 'nombre':
tmp='Nombre'
elif campo =='sexo':
tmp='S'
elif campo == 'fecha_nacimiento':
tmp='Fecha de nacimiento'
elif campo == 'curp':
tmp='CURP'
elif campo == 'localidad_id':
tmp='Localidad'
elif campo == 'direccion':
tmp='Dirección'
elif campo == 'codigo_postal':
tmp='C.P.'
elif campo == 'identificacion':
tmp='Identificación'
elif campo == 'correo_electronico':
tmp='Correo Electrónico'
elif campo == 'telefono':
tmp='Teléfono'
elif campo == 'celular':
tmp='Celular'
elif campo == 'solicitud':
tmp='Solicitud'
elif campo == 'dependencia_id':
tmp='Dependencia'
elif campo == 'foto':
tmp='Foto'
elif campo == 'estatus_id':
tmp='Estatus'
elif campo == 'asigna_id':
tmp='Asigna'
elif campo == 'fecha_registro':
tmp='Fecha'
elif campo == 'fecha_ultimo_cambio':
tmp='Ultimo cambio'
elif campo == 'nota':
tmp='Nota'
elif campo == 'bandera':
tmp='Urgente'
rowcampoTitulo.append( Paragraph(tmp, Centrado ) ),
data.append(rowcampoTitulo)
if dependenciaSeleccionada != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependenciaSeleccionada).order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
elif dependencia_id != '0':
solicitudes = solicitud.objects.all().filter(dependencia = dependencia_id).order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
else:
solicitudes = solicitud.objects.all()
solicitudesC = solicitudes.filter( estatus__clave='C' )
solicitudesD = solicitudes.filter( estatus__clave='D' )
if request.GET:
fecha = request.GET.get('de')
fecha1 = request.GET.get('de1')
i = 0
rowcampoAnchoColumnas = [7 * mm]
from django.utils import formats
for solicitud_ in solicitudes:
i = i+ 1
plocalidadnombre = ''
plocalidadpadrenombre = ''
if solicitud_.localidad:
if solicitud_.localidad.nombre != '':
plocalidadnombre = solicitud_.localidad.nombre[0:100]
if solicitud_.localidad.padre:
plocalidadpadrenombre = ', ' + solicitud_.localidad.padre.nombre[0:100]
plocalsolicitante = ''
if solicitud_.solicitante:
plocalsolicitante = solicitud_.solicitante.nombre[0:50] + ' ' +solicitud_.solicitante.apellido_paterno[0:50] + ' ' + solicitud_.solicitante.apellido_materno[0:50]
plocalbandera = ''
if solicitud_.bandera:
plocalbandera = 'si'
rowcampo = [i]
for campo in camposSeleccionados:
tmp = campo
if campo == 'id':
rowcampo.append( solicitud_.id )
rowcampoAnchoColumnas.append(10 * mm)
elif campo == 'solicitante_id':
rowcampo.append( Paragraph(plocalsolicitante, Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'nombre':
rowcampo.append( Paragraph(solicitud_.nombre[0:50] + ' ' +solicitud_.apellido_paterno[0:50] + ' ' + solicitud_.apellido_materno[0:50], Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'sexo':
rowcampo.append( solicitud_.sexo )
rowcampoAnchoColumnas.append(7 * mm)
elif campo == 'fecha_nacimiento':
rowcampo.append( solicitud_.fecha_nacimiento )
rowcampoAnchoColumnas.append(20 * mm)
elif campo == 'curp':
rowcampo.append( solicitud_.curp )
rowcampoAnchoColumnas.append(32 * mm)
elif campo == 'localidad_id':
rowcampo.append( Paragraph( plocalidadnombre + plocalidadpadrenombre, Justificado ) )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'direccion':
rowcampo.append( Paragraph(solicitud_.direccion[0:100], Justificado ) )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'codigo_postal':
rowcampo.append( solicitud_.codigo_postal )
rowcampoAnchoColumnas.append(10 * mm)
elif campo == 'identificacion':
rowcampo.append( solicitud_.identificacion )
rowcampoAnchoColumnas.append(25 * mm)
elif campo == 'correo_electronico':
rowcampo.append( solicitud_.correo_electronico )
rowcampoAnchoColumnas.append(40 * mm)
elif campo == 'telefono':
rowcampo.append( solicitud_.telefono )
rowcampoAnchoColumnas.append(17 * mm)
elif campo == 'celular':
rowcampo.append( solicitud_.celular )
rowcampoAnchoColumnas.append(17 * mm)
elif campo == 'solicitud':
rowcampo.append( Paragraph(solicitud_.solicitud[0:50], Justificado ) ) # corregir longitud, debe solucionarse al hacer dinamoco el ancho de la columna
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'dependencia_id':
rowcampo.append( Paragraph(solicitud_.dependencia.nombre[0:100], Justificado ) )
rowcampoAnchoColumnas.append(50 * mm)
elif campo == 'foto':
rowcampo.append( solicitud_.foto )
rowcampoAnchoColumnas.append(50 * mm)
elif campo == 'estatus_id':
rowcampo.append( solicitud_.estatus )
rowcampoAnchoColumnas.append(40 * mm)
elif campo == 'asigna_id':
rowcampo.append( solicitud_.asigna )
rowcampoAnchoColumnas.append(20 * mm)
elif campo == 'fecha_registro':
rowcampo.append( formats.date_format(solicitud_.fecha_registro, "SHORT_DATE_FORMAT") )
rowcampoAnchoColumnas.append(18 * mm)
elif campo == 'fecha_ultimo_cambio':
rowcampo.append( formats.date_format(solicitud_.fecha_ultimo_cambio, "SHORT_DATE_FORMAT") )
rowcampoAnchoColumnas.append(18 * mm)
elif campo == 'nota':
rowcampo.append( Paragraph( solicitud_.nota , Justificado ) )
rowcampoAnchoColumnas.append(60 * mm)
elif campo == 'bandera':
rowcampo.append( plocalbandera )
rowcampoAnchoColumnas.append(15 * mm)
data.append(rowcampo)
t_datos = Table(data,
rowcampoAnchoColumnas
,
repeatRows=1,
style=[('GRID',(0,0),(-1,-1),0.5,colors.grey), # cuadricula
('FONTSIZE',(0,1),(-1,-1),7, colors.red),
# ('ALIGN',(0,0),(-1,0),'CENTER'),
# ('ALIGN',(0,0),(-11,-1),'CENTER'),
# ('ALIGN',(1,1),(-10,-1),'LEFT'),
# ('ALIGN',(2,1),(-9,-1),'CENTER'),
# ('ALIGN',(3,1),(-6,-1),'LEFT'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(6,1),(-4,-1),'CENTER'),
# ('ALIGN',(8,1),(-2,-1),'LEFT'),
('VALIGN',(0,1),(-1,-1),'TOP'),
#('BACKGROUND',(1,1),(-1,-1),colors.red),
# ('INNERGRID', (0,0), (-1,-1), 0.25, colors.red),
])
# t_datos.hAlign = 'LEFT'
elements.append(t_datos)
elements.append(PageBreak())
# #
# G R A F I C O S #
# #
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart
from reportlab.graphics.charts.textlabels import Label, LabelOffset
from reportlab.lib.colors import HexColor, black
from reportlab.graphics.charts.legends import Legend
total = solicitudes.count()
if dependenciaSeleccionada != '0':
solicitudes = solicitud.objects.values('estatus', 'estatus__clave', 'estatus__nombre').annotate(Ttl=Count('estatus')).order_by('estatus__id').filter(dependencia = dependenciaSeleccionada)#.order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
solicitudSexo = solicitud.objects.values('sexo').annotate(Ttl=Count('sexo')).order_by('sexo').filter(dependencia = dependenciaSeleccionada)
solicitudLocalidad = solicitud.objects.values('localidad', 'localidad__nombre').annotate(Ttl=Count('localidad')).order_by('-Ttl').filter(dependencia = dependenciaSeleccionada)
solicitudFecha = solicitud.objects.values('fecha_registro').annotate(Ttl=Count('localidad')).order_by('-Ttl').filter(dependencia = dependenciaSeleccionada)
select_data = {"fecha_registro": """fecha_registro::timestamp::date"""}
solicitudFecha = solicitud.objects.extra(select=select_data).values('fecha_registro').annotate(Ttl=Count("fecha_registro")).order_by('fecha_registro').filter(dependencia = dependenciaSeleccionada)
elif dependencia_id != '0':
solicitudes = solicitud.objects.values('estatus').annotate(Ttl=Count('estatus')).order_by().filter(dependencia = dependencia_id)#.order_by('-fecha_registro', 'codigo_postal', 'localidad', 'estatus')
else:
solicitudes = solicitud.objects.values('estatus').annotate(Ttl=Count('estatus')).order_by()
nombreCategoriasEstatus = []
serieEstatus = []
dataEstatus = []
valueMaxEstatus_ = 100
for registro in solicitudes:
tmp = float(registro['Ttl'])
tmp = tmp * 100 / total
nombreCategoriasEstatus.append( "%s %.2f %%" % (registro['estatus__nombre'], tmp) )
serieEstatus.append(tmp)
if tmp > valueMaxEstatus_:
valueMaxEstatus_ = tmp + 10
dataEstatus.append(serieEstatus)
nombreCategoriasSexo = []
serieSexo = []
dataSexo = []
valueMaxSexo_ = 100
for registro in solicitudSexo:
tmp = float(registro['Ttl'])
tmp = tmp * 100 / total
nombreCategoriasSexo.append( "%s %.2f %%" % (registro['sexo'], tmp) )
serieSexo.append(tmp)
dataSexo.append(serieSexo)
nombreCategoriasLocalidad=[]
serieLocalidad = []
dataLocalidad = []
valueMaxLocalidad_ = 100
for registro in solicitudLocalidad:
tmp = float(registro['Ttl'])
tmp = tmp * 100 / total
nombreCategoriasLocalidad.append( "%s %.2f %%" % (registro['localidad__nombre'], tmp) )
serieLocalidad.append(tmp)
if tmp > valueMaxLocalidad_:
valueMaxLocalidad_ = tmp + 10
dataLocalidad.append(serieLocalidad)
nombreCategoriasFecha=[]
serieFecha = []
dataFecha = []
valueMaxFecha_ = 0
for registro in solicitudFecha:
tmp = float(registro['Ttl'])
tmp = tmp * 100 / total
nombreCategoriasFecha.append( "%s %d" % (registro['fecha_registro'], tmp) )
serieFecha.append(tmp)
if tmp > valueMaxFecha_:
valueMaxFecha_ = tmp + 10
dataFecha.append(serieFecha)
#print solicitudLocalidad
#print dataSexo
def bar_chart():
drawing = Drawing(400, 200)
bc = VerticalBarChart()
bc.x = 40
bc.y = 0
bc.height = 155
bc.width = 300
bc.data = dataEstatus
bc.strokeColor = colors.black
bc.bars[(0)].fillColor = HexColor("#1f1feb")
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = valueMaxEstatus_
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = -5
bc.categoryAxis.labels.dy = 145
bc.categoryAxis.labels.angle = 90
bc.categoryAxis.categoryNames = nombreCategoriasEstatus
drawing.add(bc)
bc = VerticalBarChart()
bc.x = 450
bc.y = 0
bc.height = 155
bc.width = 300
bc.data = dataSexo
bc.strokeColor = colors.black
bc.bars[(0)].fillColor = colors.blue
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = valueMaxSexo_
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = -5
bc.categoryAxis.labels.dy = 145
bc.categoryAxis.labels.angle = 90
bc.categoryAxis.categoryNames = nombreCategoriasSexo
drawing.add(bc)
bc = VerticalBarChart()
bc.x = 40
bc.y = -200
bc.height = 155
bc.width = 300
bc.data = dataLocalidad
bc.strokeColor = colors.black
bc.bars[(0)].fillColor = colors.blue
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = valueMaxLocalidad_
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = -5
bc.categoryAxis.labels.dy = 145
bc.categoryAxis.labels.angle = 90
bc.categoryAxis.categoryNames = nombreCategoriasLocalidad
bc.barLabels.fixedEnd = LabelOffset()
bc.barLabels.fixedEnd.posMode='low'
bc.barLabels.fixedEnd.pos = -10
bc.barLabels.fixedEnd.negMode='high'
bc.barLabels.fixedEnd.neg = 10
bc.barLabels.dy = -1
bc.barLabels.fixedStart = LabelOffset()
bc.barLabels.fixedStart.posMode='axis'
drawing.add(bc)
bc = VerticalBarChart()
bc.x = 450
bc.y = -200
bc.height = 155
bc.width = 300
bc.data = dataFecha
bc.strokeColor = colors.black
bc.bars[(0)].fillColor = colors.blue
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = valueMaxFecha_
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = -5
bc.categoryAxis.labels.dy = 145
bc.categoryAxis.labels.angle = 90
bc.categoryAxis.categoryNames = nombreCategoriasFecha
drawing.add(bc)
return drawing
elements.append(bar_chart())
from reportlab.graphics.charts.piecharts import Pie
pdf_chart_colors = [
HexColor("#0000e5"),
HexColor("#1f1feb"),
HexColor("#5757f0"),
HexColor("#8f8ff5"),
HexColor("#c7c7fa"),
HexColor("#f5c2c2"),
HexColor("#eb8585"),
HexColor("#e04747"),
HexColor("#d60a0a"),
HexColor("#cc0000"),
HexColor("#ff0000"),
]
data = serieEstatus
def pie_chart():
width=400
height=200
drawing = Drawing(width, height)
pc = Pie()
pc.x = 40
pc.y = 0
pc.height = 150
pc.width = 300
pc.data = data
pc.strokeColor = colors.black
l = Legend()
l.x = width - 20
l.y = 0
l.boxAnchor= 'se'
l.subCols[1].align = 'right'
drawing.add(pc)
return drawing
elements.append(PageBreak())
elements.append(pie_chart())
import os
# imagen = os.path.join(os.path.dirname(os.path.abspath('settings.py')), '/static/imagenes/pleca-sup-dif.png')
imagen = ('http://atencion.tabasco.gob.mx/static/imagenes/pleca-sup-dif.png')
def myFirstPage(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
#canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
canvas.drawString((18-(.125*len(str(dependencia_[0])))) * cm, 19 * cm, str(dependencia_[0]) )
#canvas.drawString(18.5*cm, 18.5*cm, str(.125*len(str(dependencia_[0]))) )
# canvas.setFont('Helvetica',10)
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d" % (doc.page))
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.drawImage(imagen,1*cm,535, 219, 58)
canvas.setFont('Helvetica',12)
canvas.drawString(13.75*cm, 20 * cm, "GOBIERNO DEL ESTADO DE TABASCO")
canvas.drawString(14*cm, 19.5 * cm, "Sistema Estatal de Atención Ciudadana")
#canvas.drawString(16.5*cm, 19 * cm, "Solicitudes" )
canvas.drawString((18-(.125*len(str(dependencia_[0])))) * cm, 19 * cm, str(dependencia_[0]) )
# canvas.drawString(3.5*cm, 2.5 * cm, "____________________________________")
# canvas.drawString(4.5*cm, 2 * cm, "Sr. José Antonio Rojas Calderón")
# canvas.drawString(4*cm, 1.5 * cm, "Jefe de Depto. de Bienes Asegurados")
# canvas.drawString(19.5*cm, 2.5 * cm, "_______________________________")
# canvas.drawString(20.5*cm, 2 * cm, "Lic. Pedro Sanchez Sibaja")
# canvas.drawString(20*cm, 1.5 * cm, "Dir. Gral. de Bienes Asegurados")
# canvas.setFont('Helvetica',9)
# canvas.drawString(27*cm, .25 * inch, "Página %d %s" % (doc.page, pageinfo))
canvas.restoreState()
doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages)
return response
@login_required(login_url='/login/')
def reportes(request, reporte):
usuario = request.user or None
dependencia_ = dependencia.objects.filter(usuarios__in=[usuario.id]) or [0]
dependencias = dependencia.objects.all()
solicitudes = None
if reporte == '2':
solicitudes = solicitud.objects.filter(dependencia_id = dependencia_[0])
if dependencia_[0] == 0:
solicitudes = solicitud.objects.all()
return render_to_response('reportes.html',{ 'reporte':reporte, 'dependenciaUsuario':dependencia_[0], 'dependencias':dependencias, 'solicitudes':solicitudes }, context_instance = RequestContext(request))
def CatJsonMunicipio(request, estado_id=0):
from django.core import serializers
json_municipios = serializers.serialize("json", municipio.objects.filter(estado_id = estado_id).order_by('nombre'))
#json_municipios = serializers.serialize("json", lugar.objects.filter(padre_id = estado_id).order_by('nombre'))
return HttpResponse(json_municipios, mimetype="application/javascript")
def CatJsonLocalidad(request, municipio_id=0):
from django.core import serializers
json_lugares = serializers.serialize("json", localidad.objects.filter(municipio_id = municipio_id).order_by('nombre'))
#json_lugares = serializers.serialize("json", lugar.objects.filter(padre_id = municipio_id).order_by('nombre'))
return HttpResponse(json_lugares, mimetype="application/javascript")
def usuarioDisponible(estatus, tipo):
usuario = chat_usuarios.objects.filter(estatus=estatus, nombre__startswith=tipo).order_by('nombre') or None
if usuario <> None:
tmp = chat_usuarios.objects.filter(pk=usuario[0].id).update(estatus=3)
else:
return 0
return usuario[0].id
def liberarUsuario(usuario_id):
tmp = chat_usuarios.objects.filter(pk=usuario_id).update(estatus=1)
return True
def ReservarUsuario(estatus, tipo):
''' cambia el status del usuario invitado indicando que se encuentra en chat activo'''
usuario = chat_usuarios.objects.filter(estatus=estatus, nombre__startswith=tipo).order_by('nombre') or None
if usuario <> None:
tmp = chat_usuarios.objects.filter(pk=usuario[0].id).update(estatus=4)
else:
return 0
return usuario[0].id
def cambiarEstatusChat(chat_id, estatus):
try:
tmp = chat.objects.filter(pk = chat_id)
tmp.update(estatus=estatus)
return True
except ObjectDoesNotExist:
return False
def cerrarChat(chat_id):
tmp = cambiarEstatusChat(chat_id, 5)
if tmp:
return True
return 'No se encontro el chat'
def limpiarChats():
#buscar los chats que solo tengan el mensaje de bienvenida y eliminarlos
tmp = chat.objects.values_list('id').filter(mensaje__mensaje__startswith='Bienvenido!!')
tmp = chat.objects.values_list('id').annotate(Count('mensaje')).filter(estatus=3)
for chat_ in tmp:
#print chat_[1]
if chat_[1] == 1:
#print chat_[0]
chat.objects.get(pk = chat_[0]).delete()
def chat_view(request):
#verificar si es request.GET
#limpiar sessiones si existe y restablecer estatus a los usuarios
#cargar en memoria el nuevo administrador, usuario, crear chat con bienvenida para que pueda ser mostrado
# sino y es request.post
#verificar si hay un cerrar en el post
#restablecer usuarios y destruir sesion
#recuperar campos del post y guardar
#consultar tabla con el usuario y administrador y chat
administrador = []
usuario = []
chatInst=[]
mensaje = ''
if 'enviar' in request.POST:
mensaje = ''
if 'mensaje' in request.POST:
if request.POST['mensaje'] <> '':
mensaje = request.POST['mensaje']
try:
msj = chat_mensajes.objects.get(mensaje=mensaje)
except ObjectDoesNotExist:
if request.user.id != None:
msj = chat_mensajes(mensaje=mensaje, deusuario=False)
else:
msj = chat_mensajes(mensaje=mensaje)
msj.save()
tmp = chat.objects.get(pk=request.session['chat_id'])
tmp.mensaje.add(msj)
if request.user.id != None:
if 'iniciar' in request.POST or 'enviar' in request.POST:
mensaje = 'InAdmin'
administrador_id = request.POST['asesor_id']
request.session['admin_id'] = administrador_id
administrador = chat_usuarios.objects.get(pk=request.session['admin_id'])
usuario_id = request.POST['invitado_id']
request.session['usr_id'] = usuario_id
usuario = chat_usuarios.objects.get(pk=request.session['usr_id'])
chat_id = request.POST['chat_id']
request.session['chat_id'] = chat_id
chatInst = chat.objects.get(pk=request.session['chat_id'])
return render_to_response('chat.html',{'administrador':administrador, 'usuario':usuario, 'chat':chatInst, 'mensaje':mensaje }, context_instance = RequestContext(request))
else:
mensaje='Administrador'
mensaje+=' listar los usuarios disponibles'
usuariosEnEspera = chat_usuarios.objects.all().filter(estatus=3, nombre__startswith='Invitado')
parametro1 = chat.objects.filter(estatus=1)
return render_to_response('chat.html',{'parametro1':parametro1, 'usuariosEnEspera':usuariosEnEspera, 'administrador':administrador, 'usuario':usuario, 'chat':chatInst, 'mensaje':mensaje }, context_instance = RequestContext(request))
if 'iniciar' in request.POST:
mensaje = 'In'
administrador_id = usuarioDisponible(1,'Administrador')
request.session['admin_id'] = administrador_id
usuario_id = usuarioDisponible(1,'Invitado')
request.session['usr_id'] = usuario_id
if administrador_id == 0:
tmp = liberarUsuario(usuario_id)
del request.session['admin_id']
del request.session['usr_id']
return HttpResponse('Por el momento no hay asesores disponibles')
if usuario_id == 0:
del request.session['usr_id']
return HttpResponse('Por el momento no hay salas disponibles')
chatInst = chat(administrador_id = administrador_id, usuario_id = usuario_id)
chatInst.save()
request.session['chat_id'] = chatInst.id
msj= chat_mensajes.objects.get(pk=1)
tmp = chat.objects.get(pk=request.session['chat_id'])
tmp.mensaje.add(msj)
return HttpResponseRedirect('/chat')
elif 'salir' in request.POST:
mensaje = 'Out'
if 'admin_id' in request.session:
tmp = liberarUsuario(request.session['admin_id'])
del request.session['admin_id']
if 'usr_id' in request.session:
tmp2 = liberarUsuario(request.session['usr_id'])
del request.session['usr_id']
if 'chat_id' in request.session:
#borrar los chats que no tengan mensajes
limpiarChats()
#cambiar de estatus los chats
tmp3 = cerrarChat(request.session['chat_id'])
del request.session['chat_id']
return HttpResponseRedirect('/chat')
if 'admin_id' in request.session:
if request.session['admin_id'] <> 0:
administrador = chat_usuarios.objects.get(pk=request.session['admin_id'])
#
if 'usr_id' in request.session:
usuario = chat_usuarios.objects.get(pk=request.session['usr_id'])
if 'chat_id' in request.session:
try:
chatInst = chat.objects.get(pk=request.session['chat_id'])
except ObjectDoesNotExist:
del request.session['chat_id']
return render_to_response('chat.html',{'administrador':administrador, 'usuario':usuario, 'chat':chatInst, 'mensaje':mensaje }, context_instance = RequestContext(request))
def test(request):
estados = estado.objects.all().order_by('nombre')
#estados = lugar.objects.filter(padre_id = 50)
return render_to_response('test.html',{ 'estados':estados}, context_instance = RequestContext(request))