#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))