#encoding:utf-8 from control.models import * from django.shortcuts import * from django.http import * from django.template import * from django.template.response import * from django.contrib.auth import * from django.contrib.auth.models import User from control.forms import * from django.db.models import Q from django.contrib.auth.decorators import * from django.contrib import messages from reportlab.pdfgen import canvas from reportlab.pdfgen.canvas import Canvas from reportlab.lib.pagesizes import letter, landscape, A4 from reportlab.lib.units import cm, mm, inch, pica from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER from reportlab.platypus import Table, TableStyle, SimpleDocTemplate,PageTemplate, Paragraph, Spacer, Image from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from django.core.paginator import Paginator, EmptyPage, InvalidPage from pyjasperclient import JasperClient from pyjasperclient import JasperClient from django.views.generic import ListView, DetailView, View from django.views.generic.edit import CreateView, UpdateView, FormView import datetime from datetime import date #from datetime import * from reportlab.rl_config import defaultPageSize import locale PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0] Title = '' pageinfo = "" def login_(request): return TemplateResponse(request,'index.html') def validacion(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) msj = '' if user is not None: if user.is_active: login(request, user) return HttpResponseRedirect('/captura/') else: msj = msj + 'La cuenta esta desactivada' else: msj = msj + 'Usuario no valido' return TemplateResponse(request, 'index.html', {'msj':msj}) def logout_user(request): response = logout(request) return HttpResponseRedirect('/login') @login_required def captura(request): usuario = request.user d = date.today() dia = d.day mes = d.month year = d.year consulta = control.objects.all() con_year = control.objects.filter(fecha__year = year) # filtro por año con_month = control.objects.filter(fecha__year = year, fecha__month = mes) # filtro por mes start_week = d - datetime.timedelta(d.weekday()) end_week = start_week + datetime.timedelta(7) semana = control.objects.filter(fecha__range=[start_week, end_week]) if usuario.is_staff: consulta_dependencia = dependencia.objects.all() return render_to_response('form-w.html',{'con_dependencia':consulta_dependencia, 'consulta':consulta, 'con_year':con_year, 'con_month':con_month, 'semana':semana},context_instance=RequestContext(request)) else: consul=None direcc = direcciones.objects.all().get(usuarios=usuario) usrs = direcc.usuarios.values_list('id').order_by('id') consul = control.objects.filter() consul = consul.filter( usuario__in= usrs ) con_year1 = consul.filter(fecha__year = year) con_month = consul.filter(fecha__year = year, fecha__month = mes) start_week = d - datetime.timedelta(d.weekday()) end_week = start_week + datetime.timedelta(7) consul_semana = consul.filter(fecha__range=[start_week, end_week]) if request.method=='POST': formulario = ControlForm(request.POST) if formulario.is_valid(): formulario.instance.usuario = request.user formulario.save() msj='Los datos se guardaron correctamente.' messages.success(request, msj) return HttpResponseRedirect('/captura/') else: msj='Por favor, corrija el siguiente error.' messages.error(request, msj) else: formulario = ControlForm() return render_to_response('form-w.html',{'formulario':formulario,'consul':consul, 'con_year1':con_year1, 'con_month':con_month, 'consul_semana':consul_semana},context_instance=RequestContext(request)) @login_required def consulta(request): d = date.today() dia = d.day mes = d.month year = d.year consul=None usuario = request.user direcc = direcciones.objects.all().get(usuarios=usuario) usrs = direcc.usuarios.values_list('id').order_by('id') consul = control.objects.filter() fecha_ini="" fecha_fin="" fe = 0 if request.GET: if 'fecha_ini' in request.GET and 'fecha_fin' in request.GET: fecha_ini = request.GET.get('fecha_ini') fecha_fin = request.GET.get('fecha_fin') fe = 1 try: consul = control.objects.filter(fecha__range=(fecha_ini, fecha_fin)) except Exception, e: pass consul = consul.filter( usuario__in= usrs ) con_year1 = consul.filter(fecha__year = year) con_month = consul.filter(fecha__year = year, fecha__month = mes) start_week = d - datetime.timedelta(d.weekday()) end_week = start_week + datetime.timedelta(7) consul_semana = consul.filter(fecha__range=[start_week, end_week]) return render_to_response('consulta.html',{'fe':fe,'consulta':consul, 'fecha_ini':fecha_ini, 'fecha_fin':fecha_fin, 'con_year1':con_year1, 'con_month':con_month, 'consul_semana':consul_semana},context_instance=RequestContext(request)) @login_required def controledit(request, control_id): d = date.today() dia = d.day mes = d.month year = d.year consul=None usuario = request.user direcc = direcciones.objects.all().get(usuarios=usuario) usrs = direcc.usuarios.values_list('id').order_by('id') consul = control.objects.filter() consul = consul.filter( usuario__in= usrs ) con_year2 = consul.filter(fecha__year = year) con_mont2 = consul.filter(fecha__year = year, fecha__month = mes) start_week = d - datetime.timedelta(d.weekday()) end_week = start_week + datetime.timedelta(7) consul_semana = consul.filter(fecha__range=[start_week, end_week]) if request.method == 'GET': d = control.objects.all().get(pk = control_id) formulario = ControlForm(initial = {'fecha':d.fecha, 'dependencia':d.dependencia, 'nombre_persona':d.nombre_persona, 'asunto':d.asunto, 'observaciones':d.observaciones, 'correo':d.correo, 'telefono_cel':d.telefono_cel, 'teléfono':d.telefono, 'extension':d.extension}, instance = d) elif request.method == 'POST': formulario = ControlForm(request.POST) if formulario.is_valid(): d = control.objects.all().get(pk = control_id) d.fecha = formulario.cleaned_data['fecha'] d.dependencia = formulario.cleaned_data['dependencia'] d.nombre_persona = formulario.cleaned_data['nombre_persona'] d.asunto = formulario.cleaned_data['asunto'] d.observaciones = formulario.cleaned_data['observaciones'] d.correo = formulario.cleaned_data['correo'] d.telefono_cel = formulario.cleaned_data['telefono_cel'] d.telefono = formulario.cleaned_data['telefono'] d.extension = formulario.cleaned_data['extension'] d.save() # msj="El registro se modifico correctamente" # messages.success(request, msj) return HttpResponseRedirect('/consulta/') else: msj='Por favor, corrija el siguiente error.' messages.error(request, msj) else: formulario = ControlForm() return render_to_response('form-w.html',{ 'formulario':formulario ,'control':control_id, 'consul':consul, 'con_year1':con_year2, 'con_month':con_mont2, 'consul_semana':consul_semana}, context_instance = RequestContext(request)) @login_required def consulta_todo(request): s = None consulta=None response = HttpResponse(mimetype='application/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 data=[[ 'Fecha', 'Hora', 'Dependencia', 'Persona', 'Asunto', 'Observaciones', 'Correo', 'Celular', 'Teléfono', 'Extensión']] usuario = request.user direcc = direcciones.objects.all().get(usuarios=usuario) usrs = direcc.usuarios.values_list('id').order_by('id') if request.GET: fecha_ini = request.GET.get('fecha_ini') fecha_fin = request.GET.get('fecha_fin') imput = request.GET.get('consulta') consulta = control.objects.filter( Q(dependencia__nombre__icontains = imput) | Q(observaciones__icontains = imput) | Q(dependencia__clave__icontains = imput) | Q(nombre_persona__icontains = imput) | Q(asunto__icontains=imput) | Q(extension__icontains=imput)) consulta = consulta.filter( usuario__in= usrs ) if fecha_ini != "" and fecha_fin != "": consulta = consulta.filter(fecha__range=(fecha_ini, fecha_fin)) for p in consulta: data.append([ p.fecha, p.hora, p.dependencia, Paragraph(p.nombre_persona, Justificado), Paragraph(p.asunto, Justificado ), Paragraph(p.observaciones, Justificado ), Paragraph(p.correo, Justificado ), p.telefono_cel, Paragraph(p.telefono, Justificado ), p.extension ]) # elements.append(foto) # elements.append(ted) t_datos = Table(data, [1.5 * cm, 2.25 * cm, 4.5* cm, 3.5* cm, 4* cm, 5* cm, 4* cm, 1.75* cm, 1.5* cm], 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',(0,0),(-1,0),colors.white), # ('INNERGRID', (0,0), (-1,-1), 0.25, colors.red), ] ) t_datos.hAlign = 'CENTER' elements.append(t_datos) import os imagen = os.path.join(os.path.dirname(__file__),'static/img/logo.jpg') imagen2 = os.path.join(os.path.dirname(__file__),'static/img/triangulo.jpg') def myFirstPage(canvas, doc): canvas.saveState() canvas.drawImage(imagen,1*cm,520, 156, 70) # canvas.setFont('Helvetica',12) # canvas.drawString(4.5*cm, 2 * cm, "Firma1") # canvas.setFont('Helvetica',12) # canvas.drawString(4*cm, 1.5 * cm, "Firma1") # canvas.setFont('Helvetica',12) # canvas.drawString(20.5*cm, 2 * cm, "Firma2") # canvas.setFont('Helvetica',12) # canvas.drawString(20*cm, 1.5 * cm, "Firma2") canvas.setFont('Helvetica',9) canvas.drawImage(imagen2,27.2*cm,-17, 80, 90) canvas.drawString(15*cm, .25 * inch, "Página %d" % (doc.page)) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() canvas.drawImage(imagen,1*cm,520, 162, 70) # canvas.setFont('Helvetica',12) # canvas.drawString(4.5*cm, 2 * cm, "Firma1") # canvas.setFont('Helvetica',12) # canvas.drawString(4*cm, 1.5 * cm, "Firma1") # canvas.setFont('Helvetica',12) # canvas.drawString(20.5*cm, 2 * cm, "Firma2") # canvas.setFont('Helvetica',12) # canvas.drawString(20*cm, 1.5 * cm, "Firma2") canvas.setFont('Helvetica',9) canvas.drawImage(imagen2,27.2*cm,-17, 80, 90) canvas.drawString(15*cm, .25 * inch, "Página %d %s" % (doc.page, pageinfo)) canvas.restoreState() doc.build(elements, onFirstPage = myFirstPage, onLaterPages = myLaterPages) return response class JasperMix(object): #clase para invocar el reporte url = settings.JASPERSERVER username = 'jasperadmin' password = 'jasperadmin' def generateReport(self, path, namefile, params={}, tipo=None): """ Gennara reportes atravez del jasperserver :param path: :param namefile: :param params: :param tipo: default is PDF """ j = JasperClient(self.url, self.username, self.password) ret = j.runReport(path, ("PDF" if not tipo else tipo), params) f = file(namefile, 'w') f.write(ret['data']) f.close() class ListasVistas(View, JasperMix, ): def get(self, request, *args, **kwargs): try: self.generateReport('/visitasiap/reportes/listadovisitas', settings.MEDIA_ROOT + 'listadovisitas.pdf') return HttpResponseRedirect('/media/listadovisitas.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/consulta/') class reportefechas(View, JasperMix, ): def get(self, request, *args, **kwargs): try: uno = kwargs.get('fecha_ini') dos =kwargs.get('fecha_fin') url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fvisitasiap%2Freportes&reportUnit=%2Fvisitasiap%2Freportes%2Ffechasvisitas&j_username=jasperadmin&j_password=jasperadmin&fecha1='+uno+'&fecha2='+dos+'&output=pdf' return HttpResponseRedirect(url) except: msj = "Seleccione Fecha de Inicio y Fecha Final para realizar una consulta" messages.error(request, msj) return HttpResponseRedirect('/consulta/')