#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 django.views.generic import View from django.views.generic.edit import UpdateView, DeleteView, FormView import datetime from datetime import date 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="" if request.GET: fecha_ini = request.GET.get('fecha_ini') fecha_fin = request.GET.get('fecha_fin') 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',{'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 """reporte de visita echo en jasper-report""" import requests from io import BytesIO class JasperMix(object): 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 imprimirvisita(View, JasperMix): def get(self, request, *args, **kwargs): try: fecha = kwargs.get('fecha') s = fecha slist = s.split("-") fecha_final = slist[2] +'-'+ slist[1] +'-'+ slist[0] url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fvisitas_SA&reportUnit=%2Fvisitas_SA%2Fvisita&j_username=jasperadmin&j_password=jasperadmin&fecha=' + str(fecha_final) + '&output=pdf' return HttpResponseRedirect(url) except: msj = "Seleccione Fecha de Inicio" messages.error(request,msj) return HttpResponseRedirect('/consulta/')