def password_change(request, template_name='usuario/perfil/cambiar_clave.html', current_app=None, extra_context=None, expresion=None, tipo_mensaje=None, mensaje=None, palabra_clave=None): context = {} context.update(csrf(request)) # Determinar cuál formulario usar. # 'Asignar' no necesita contraseña anterior # 'Cambiar' necesita contraseña anterior accion = '' if palabra_clave == 'asignar': form = SetPasswordForm(user=request.user, data=request.POST or None) accion = 'cambiada' elif palabra_clave == 'cambiar': accion = 'actualizada' form = PasswordChangeForm(user=request.user, data=request.POST or None) if form.is_valid(): form.save() mensaje = u'Contraseña %s exitosamente' %(accion) tipo_mensaje = 'success' else: tipo_mensaje = 'error' for error in form.errors: mensaje = form.errors['%s' %(error)].as_text().replace('* ','') (tipo_mensaje, expresion) = msj_expresion(tipo_mensaje) context.update({'formulario':form}) context.update({'request':request}) context.update({'mensaje':mensaje}) context.update({'tipo_mensaje':tipo_mensaje}) context.update({'expresion':expresion}) return render_to_response(template_name, context)
def post(self, request, *args, **kwargs): form = self.form(request.POST) self.diccionario.update({'form': self.form}) usuario = User.objects.filter( Q(username=request.POST['username']) | Q(email=request.POST['username'])) self.diccionario.update({'request': request}) if usuario.exists(): usuario = usuario[0] user = authenticate(username=usuario, password=request.POST['password']) if user is not None: login(request, usuario) #"User is not valid, active and authenticated" if not user.is_active: self.mensaje = u"La contraseña es válida pero la cuenta ha sido desactivada" (self.tipo_mensaje, self.expresion) = msj_expresion('error') return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form) else: # El usuario se loggea correctamente return HttpResponseRedirect('/preguntas_secretas/') else: # El usuario o contraseña eran incorrectos self.mensaje = u"Contraseña incorrecta. Por favor, inténtelo nuevamente" (self.tipo_mensaje, self.expresion) = msj_expresion('error') return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form) else: # El usuario no existe self.mensaje = u"No existe el usuario %s. Por favor, confirme sus datos" % ( request.POST['username']) (self.tipo_mensaje, self.expresion) = msj_expresion('error') form = self.form(request.POST) return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form)
def post(self, request, *args, **kwargs): form = self.form(request.POST) self.diccionario.update({'form':self.form}) usuario = User.objects.filter(Q(username=request.POST['username'])|Q(email=request.POST['username'])) self.diccionario.update({'request':request}) if usuario.exists(): usuario = usuario[0] user = authenticate(username=usuario, password=request.POST['password']) if user is not None: login(request, usuario) #"User is not valid, active and authenticated" if not user.is_active: self.mensaje = u"La contraseña es válida pero la cuenta ha sido desactivada" (self.tipo_mensaje, self.expresion) = msj_expresion('error') return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form ) else: # El usuario se loggea correctamente return HttpResponseRedirect('/preguntas_secretas/') else: # El usuario o contraseña eran incorrectos self.mensaje = u"Contraseña incorrecta. Por favor, inténtelo nuevamente" (self.tipo_mensaje, self.expresion) = msj_expresion('error') return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form ) else: # El usuario no existe self.mensaje = u"No existe el usuario %s. Por favor, confirme sus datos" %(request.POST['username']) (self.tipo_mensaje, self.expresion) = msj_expresion('error') form = self.form(request.POST) return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form )
def post(self, request, *args, **kwargs): form = self.form(request.POST) error = False if form.is_valid(): posicion = 0 usuario = request.user transaction.savepoint() for formulario in form.forms: pregunta = formulario['pregunta'].data pregunta = Pregunta.objects.get(id=pregunta) respuesta = formulario['respuesta'].data pregunta_secreta = PreguntasSecretas.objects.filter(usuario=usuario, pregunta=pregunta) if not pregunta_secreta.exists(): PreguntasSecretas.objects.create(usuario=usuario, pregunta=pregunta, respuesta=respuesta) else: (self.tipo_mensaje, self.expresion) = msj_expresion('error') self.mensaje = u'Al parecer la pregunta "%s" ya la has elegido más de una vez.' %(pregunta) error=True if not error: transaction.commit() return HttpResponseRedirect('/') else: transaction.rollback() return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form )
def get(self, request, *args, **kwargs): try: usuario = User.objects.get(id=kwargs['user_id']) except: raise Http404 else: if usuario.preguntassecretas_set.get_query_set().exists(): preguntas = PreguntasSecretas.objects.filter( usuario__id=int(kwargs['user_id'])) preguntas = random.sample(preguntas, 3) pregs = [] for pregunta in preguntas: pregs.append(pregunta.id) preguntas = PreguntasSecretas.objects.filter(id__in=pregs) form = self.form() self.mensaje = u'Para su mayor seguridad debe proporcionar algunas preguntas y respuestas secretas' (self.tipo_mensaje, self.expresion) = msj_expresion('alert') return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form, extra=preguntas) else: return HttpResponseRedirect('preguntas_secretas/')
def post(self, request, *args, **kwargs): form = self.form(request.POST) if not form.is_valid(): self.tipo_mensaje = 'error' for error in form.errors: mensaje = form.errors['%s' % (error)].as_text().replace( '* ', '') pregunta_1 = request.POST['pregunta_1'] respuesta_1 = request.POST['respuesta_1'] pregunta_2 = request.POST['pregunta_2'] respuesta_2 = request.POST['respuesta_2'] pregunta_3 = request.POST['pregunta_3'] respuesta_3 = request.POST['respuesta_3'] # Revisión de respuestas para la pregunta pregunta_1 = PreguntasSecretas.objects.get(id__iexact=pregunta_1) pregunta_2 = PreguntasSecretas.objects.get(id__iexact=pregunta_2) pregunta_3 = PreguntasSecretas.objects.get(id__iexact=pregunta_3) if not pregunta_1.respuesta == respuesta_1: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' % ( respuesta_1, pregunta_1) self.tipo_mensaje = 'error' elif not pregunta_2.respuesta == respuesta_2: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' % ( respuesta_2, pregunta_2) self.tipo_mensaje = 'error' elif not pregunta_3.respuesta == respuesta_3: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' % ( respuesta_3, pregunta_3) self.tipo_mensaje = 'error' pregs = [] if self.tipo_mensaje == 'error': pregs.append(pregunta_1.id) pregs.append(pregunta_2.id) pregs.append(pregunta_3.id) preguntas = PreguntasSecretas.objects.filter(id__in=pregs) (self.tipo_mensaje, self.expresion) = msj_expresion(self.tipo_mensaje) return renderizar_plantilla( request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form, extra=preguntas, ) else: try: usuario = User.objects.get(id=kwargs['user_id']) except: raise Http404 else: usuario = User.objects.get(id=kwargs['user_id']) usuario.backend = 'django.contrib.auth.backends.ModelBackend' login(request, usuario) return HttpResponseRedirect('/perfil/asignar_clave/')
def get(self, request, *args, **kwargs): try: usuario = User.objects.get(id=kwargs['user_id']) except: raise Http404 else: if usuario.preguntassecretas_set.get_query_set().exists(): preguntas = PreguntasSecretas.objects.filter(usuario__id=int(kwargs['user_id'])) preguntas = random.sample(preguntas, 3) pregs = [] for pregunta in preguntas: pregs.append(pregunta.id) preguntas = PreguntasSecretas.objects.filter(id__in=pregs) form = self.form() self.mensaje = u'Para su mayor seguridad debe proporcionar algunas preguntas y respuestas secretas' (self.tipo_mensaje, self.expresion) = msj_expresion('alert') return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form, extra=preguntas ) else: return HttpResponseRedirect('preguntas_secretas/')
def post(self, request, *args, **kwargs): form = self.form(request.POST) if not form.is_valid(): self.tipo_mensaje = 'error' for error in form.errors: mensaje = form.errors['%s' %(error)].as_text().replace('* ','') pregunta_1 = request.POST['pregunta_1'] respuesta_1 = request.POST['respuesta_1'] pregunta_2 = request.POST['pregunta_2'] respuesta_2 = request.POST['respuesta_2'] pregunta_3 = request.POST['pregunta_3'] respuesta_3 = request.POST['respuesta_3'] # Revisión de respuestas para la pregunta pregunta_1 = PreguntasSecretas.objects.get(id__iexact=pregunta_1) pregunta_2 = PreguntasSecretas.objects.get(id__iexact=pregunta_2) pregunta_3 = PreguntasSecretas.objects.get(id__iexact=pregunta_3) if not pregunta_1.respuesta == respuesta_1: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' %(respuesta_1, pregunta_1) self.tipo_mensaje = 'error' elif not pregunta_2.respuesta == respuesta_2: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' %(respuesta_2, pregunta_2) self.tipo_mensaje = 'error' elif not pregunta_3.respuesta == respuesta_3: self.mensaje = u'%s no es la respuesta para %s. Por favor inténtelo de nuevo' %(respuesta_3, pregunta_3) self.tipo_mensaje = 'error' pregs = [] if self.tipo_mensaje == 'error': pregs.append(pregunta_1.id) pregs.append(pregunta_2.id) pregs.append(pregunta_3.id) preguntas = PreguntasSecretas.objects.filter(id__in=pregs) (self.tipo_mensaje, self.expresion) = msj_expresion(self.tipo_mensaje) return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form, extra = preguntas, ) else: try: usuario = User.objects.get(id=kwargs['user_id']) except: raise Http404 else: usuario = User.objects.get(id=kwargs['user_id']) usuario.backend = 'django.contrib.auth.backends.ModelBackend' login(request, usuario) return HttpResponseRedirect('/perfil/asignar_clave/')
def get(self, request, *args, **kwargs): if request.user.is_authenticated(): if not request.user.preguntassecretas_set.get_query_set().exists(): form = self.form() self.mensaje = u'Para su mayor seguridad debe proporcionar algunas preguntas y respuestas secretas' (self.tipo_mensaje, self.expresion) = msj_expresion('alert') return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form) else: return HttpResponseRedirect('/') else: return HttpResponseRedirect('/auth')
def post(self, request, *args, **kwargs): form = self.form(request.POST) if form.is_valid(): primer_nombre = form.cleaned_data['primer_nombre'] segundo_nombre = form.cleaned_data['segundo_nombre'] primer_apellido = form.cleaned_data['primer_apellido'] segundo_apellido = form.cleaned_data['segundo_apellido'] genero = form.cleaned_data['genero'] telefono = form.cleaned_data['telefono'] notificaciones = form.cleaned_data['notificaciones'] # Buscar persona y usuario persona = Personas.objects.get(num_identificacion=request.user. profile.persona.num_identificacion) user_profile = UserProfile.objects.get(persona=persona) # Buscar asignar datos persona.primer_nombre = primer_nombre persona.segundo_nombre = segundo_nombre persona.primer_apellido = primer_apellido persona.segundo_apellido = segundo_apellido persona.genero = genero persona.telefono = telefono user_profile.notificaciones = notificaciones # Guardar registros persona.save() user_profile.save() self.mensaje = u'¡Tus datos han sido actualizados exitosamente!' self.tipo_mensaje = 'success' else: self.tipo_mensaje = 'error' for error in form.errors: self.mensaje = form.errors['%s' % (error)].as_text().replace( '* ', '') + ": " + error (self.tipo_mensaje, self.expresion) = msj_expresion(self.tipo_mensaje) return renderizar_plantilla( request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form, )
def get(self, request, *args, **kwargs): if request.user.is_authenticated(): if not request.user.preguntassecretas_set.get_query_set().exists(): form = self.form() self.mensaje = u'Para su mayor seguridad debe proporcionar algunas preguntas y respuestas secretas' (self.tipo_mensaje, self.expresion) = msj_expresion('alert') return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form ) else: return HttpResponseRedirect('/') else: return HttpResponseRedirect('/auth')
def post(self, request, *args, **kwargs): form = self.form(request.POST) if form.is_valid(): primer_nombre = form.cleaned_data['primer_nombre'] segundo_nombre = form.cleaned_data['segundo_nombre'] primer_apellido = form.cleaned_data['primer_apellido'] segundo_apellido = form.cleaned_data['segundo_apellido'] genero = form.cleaned_data['genero'] telefono = form.cleaned_data['telefono'] notificaciones = form.cleaned_data['notificaciones'] # Buscar persona y usuario persona = Personas.objects.get(num_identificacion=request.user.profile.persona.num_identificacion) user_profile = UserProfile.objects.get(persona=persona) # Buscar asignar datos persona.primer_nombre = primer_nombre persona.segundo_nombre = segundo_nombre persona.primer_apellido = primer_apellido persona.segundo_apellido = segundo_apellido persona.genero = genero persona.telefono = telefono user_profile.notificaciones = notificaciones # Guardar registros persona.save() user_profile.save() self.mensaje = u'¡Tus datos han sido actualizados exitosamente!' self.tipo_mensaje = 'success' else: self.tipo_mensaje = 'error' for error in form.errors: self.mensaje = form.errors['%s' %(error)].as_text().replace('* ','') + ": " + error (self.tipo_mensaje, self.expresion) = msj_expresion(self.tipo_mensaje) return renderizar_plantilla(request, plantilla = self.template, tipo_mensaje = self.tipo_mensaje, expresion = self.expresion, mensaje = self.mensaje, form = form, )
def post(self, request, *args, **kwargs): form = self.form(request.POST) error = False if form.is_valid(): posicion = 0 usuario = request.user transaction.savepoint() for formulario in form.forms: pregunta = formulario['pregunta'].data pregunta = Pregunta.objects.get(id=pregunta) respuesta = formulario['respuesta'].data pregunta_secreta = PreguntasSecretas.objects.filter( usuario=usuario, pregunta=pregunta) if not pregunta_secreta.exists(): PreguntasSecretas.objects.create(usuario=usuario, pregunta=pregunta, respuesta=respuesta) else: (self.tipo_mensaje, self.expresion) = msj_expresion('error') self.mensaje = u'Al parecer la pregunta "%s" ya la has elegido más de una vez.' % ( pregunta) error = True if not error: transaction.commit() return HttpResponseRedirect('/') else: transaction.rollback() return renderizar_plantilla(request, plantilla=self.template, tipo_mensaje=self.tipo_mensaje, expresion=self.expresion, mensaje=self.mensaje, form=form)
def password_change(request, template_name='usuario/perfil/cambiar_clave.html', current_app=None, extra_context=None, expresion=None, tipo_mensaje=None, mensaje=None, palabra_clave=None): context = {} context.update(csrf(request)) # Determinar cuál formulario usar. # 'Asignar' no necesita contraseña anterior # 'Cambiar' necesita contraseña anterior accion = '' if palabra_clave == 'asignar': form = SetPasswordForm(user=request.user, data=request.POST or None) accion = 'cambiada' elif palabra_clave == 'cambiar': accion = 'actualizada' form = PasswordChangeForm(user=request.user, data=request.POST or None) if form.is_valid(): form.save() mensaje = u'Contraseña %s exitosamente' % (accion) tipo_mensaje = 'success' else: tipo_mensaje = 'error' for error in form.errors: mensaje = form.errors['%s' % (error)].as_text().replace('* ', '') (tipo_mensaje, expresion) = msj_expresion(tipo_mensaje) context.update({'formulario': form}) context.update({'request': request}) context.update({'mensaje': mensaje}) context.update({'tipo_mensaje': tipo_mensaje}) context.update({'expresion': expresion}) return render_to_response(template_name, context)
def index(request, template_name='usuario/reportes/reportes.html', mensaje=''): jefe = jefe_dep(request) usuario = user_destin(request) dependencia = request.user.profile.persona.cargo_principal.dependencia c = {} c.update(csrf(request)) c.update({'request': request}) c.update(csrf(request)) fecha_actual = datetime.datetime.today() c.update({'fecha_actual': fecha_actual}) from django.contrib.admin.models import LogEntry log_user = LogEntry.objects.filter( user_id=request.user.pk, ).order_by('-action_time')[:4] libro_memo = LibroMemoForm(request.POST) consulta_memo = ConsultaMemoForm(request.POST) c.update({'log_user': log_user}) c.update({'mensaje': mensaje}) c.update({'libro_memo': libro_memo}) c.update({'consulta_memo': consulta_memo}) (tipo_mensaje, expresion) = msj_expresion('error') c.update({'tipo_mensaje': tipo_mensaje}) c.update({'expresion': expresion}) if request.method == 'POST': c.update({'consulto': False}) resultado_memo = [] if consulta_memo.is_valid(): if consulta_memo['codigo'].data: codigo = request.POST['codigo'] resultado_memo = Message.objects.filter(codigo=codigo).exclude( status__nombre='Anulado') c.update({'memo_result': resultado_memo}) if resultado_memo.exists(): resultado_memo = resultado_memo[0] asunto = resultado_memo.subject hora = resultado_memo.sent_at sender = resultado_memo.sender destinos = resultado_memo.recipient if destinos == None: mensaje = u"Ese memorándum no tiene todavía un destinatario." (tipo_mensaje, expresion) = msj_expresion('error') else: memo = resultado_memo # Si el memorándum es para el usuario conectado, o lo redactó él o es el jefe de la dependencia, entonces puede descargar el memorándum. descargable = False if request.user.profile.persona == destinos.usuarios.persona or request.user.profile.persona == sender.usuarios.persona or request.user.profile.persona == jefe.usuarios.persona: descargable = True c.update({'jefe': jefe}) c.update({'asunto': asunto}) c.update({'hora': hora}) c.update({'sender': sender}) c.update({'destinos': destinos}) c.update({'descargable': descargable}) c.update({'memo': memo}) if resultado_memo.status.nombre == 'Aprobado': c.update({'aprobado': True}) else: c.update({'aprobado': False}) consulta_memo = ConsultaMemoForm(request.POST) c.update({'consulta_memo': consulta_memo}) # Saber si consultó algún memorándum c.update({'consulto': True}) return render_to_response(template_name, c) else: mensaje = consulta_memo.errors['codigo'] if libro_memo.is_valid(): hora_inicio = datetime.time(0, 00) hora_fin = datetime.time(23, 59) # Se convierte el string a fecha + hora fecha_inicio = request.POST['fecha_inicio'] + ' ' + str( hora_inicio) fecha_inicio = datetime.datetime.strptime(fecha_inicio, '%m/%d/%Y %H:%M:%S') fecha_fin = request.POST['fecha_fin'] + ' ' + str(hora_fin) fecha_fin = datetime.datetime.strptime(fecha_fin, '%m/%d/%Y %H:%M:%S') opcion = request.POST['opcion'] # La fecha de inicio no puede ser mayor a la final (valido, mensaje) = revisar_fechas(fecha_inicio, fecha_fin) if valido == False: c.update({'mensaje': mensaje}) c.update({'libro_memo': libro_memo}) return render_to_response(template_name, c) # Opciones de libro # 'entrada': Memos para el usuario # 'salida': Memos escritos por el usuario. Si es el fefe, entonces enviados de la dependencia # 'ambos': Memos para el usuario y memos escritos por el usuario. Si es el jefe entonces enviados de la dependencia lista_mensajes = Message.objects.filter( sent_at__range=(fecha_inicio, fecha_fin), ) if opcion == 'entrada': # Si no es el jefe, entonces sólo verá los mensajes que son para él if jefe == usuario: lista_mensajes = lista_mensajes.filter( recipient__usuarios__user__userprofile__persona__cargo_principal__dependencia =dependencia) else: lista_mensajes = lista_mensajes.filter( recipient__id__exact=usuario.id) elif opcion == 'salida': if jefe == usuario: lista_mensajes = lista_mensajes.filter( sender__usuarios__user__userprofile__persona__cargo_principal__dependencia =dependencia) else: lista_mensajes = lista_mensajes.filter(sender=usuario) elif opcion == 'ambos': if jefe == usuario: lista_mensajes = lista_mensajes.filter( models. Q(recipient__usuarios__user__userprofile__persona__cargo_principal__dependencia =dependencia) | models. Q(sender__usuarios__user__userprofile__persona__cargo_principal__dependencia =dependencia)) else: lista_mensajes = lista_mensajes.filter( models.Q(sender=usuario) | models.Q(recipient__id__exact=usuario.id)) # Si no hay ningún mensaje en ese rango de fechas memos = lista_mensajes if not lista_mensajes.exists(): mensaje = u'No existe ningún memorándum entre las fechas seleccionadas.' c.update({'mensaje': mensaje}) c.update({'libro_memo': libro_memo}) else: paginador = Paginator(memos, settings.SUIT_CONFIG['LIST_PER_PAGE']) page = request.GET.get('page') try: memos = paginador.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. memos = paginador.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. memos = paginador.page(paginator.num_pages) c.update({'memos': memos}) c.update({'opcion': opcion}) lista_mensajes = '' for memo in memos: lista_mensajes = str(memo.id) + ',' + lista_mensajes c.update( {'lista_mensajes': lista_mensajes} ) # pasamos la misma variable de memos pero para traernosla de vuelta en el hidden para sacar el PDF return render_to_response(template_name, c) else: if not request.POST.has_key('opcion') and not request.POST.has_key( 'codigo'): mensaje = u'Debe elegir un tipo de libro de memos.' c.update({'tipo_mensaje': tipo_mensaje}) c.update({'mensaje': mensaje}) c.update({'expresion': expresion}) c.update({'request': request}) c.update({'libro_memo': libro_memo}) c.update({'consulta_memo': consulta_memo}) return render_to_response(template_name, c) if request.POST.has_key('lista_mensajes'): memos = request.POST['lista_mensajes'] opcion = request.POST['opcion'] memos = memos.split(',') lista_mensaje = [] if opcion == 'salida': opcion = 'enviados' elif opcion == 'entrada': opcion = 'recibidos' for memo in memos: if memo: lista_mensaje.append(memo) memos = Message.objects.filter(id__in=lista_mensaje) fecha_inicio = request.POST['fecha_inicio'] fecha_fin = request.POST['fecha_fin'] salto = '<br />' #Libro_Memos_PDF(request, lista_mensajes) #def Libro_Memos_PDF(request, memos): response = HttpResponse(mimetype='application/pdf') if opcion == 'ambos': response[ 'Content-Disposition'] = 'attachment; filename=Libro_memorandum_enviados_recibidos.pdf; pagesize=A4;' opcion = 'enviados y recibidos' else: response[ 'Content-Disposition'] = 'attachment; filename=Libro_memorandum_' + opcion + '.pdf; pagesize=A4;' #elementos es la lista donde almaceno todos lo que voy a incluir al documento pdf elementos = [] # SimpleDocTemplate es la clase para generar el pdf doc = SimpleDocTemplate(response) style = getSampleStyleSheet() styleFecha = getSampleStyleSheet() fechas = datetime.datetime.today() mes = fecha.NormalDate().monthName( ) # esta variable contiene el nombre del mes actual a partir de la libreria fecha añadida en lib/ dia = fecha.NormalDate().dayOfWeekName( ) # esta variable contiene el dia actual a partir de la libreria fecha añadida en lib/ #Espacio para poner el encabezado con la clase Canvas elementos.append(Spacer(1, 40)) # Estilos de la tabla. x = [ #('BOX', (0,0), (4,0), 0.60, colors.black), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('TOPPADDING', (0, 0), (-1, -1), 1), ('BOTTOMPADDING', (0, 0), (-1, -1), 2), ('GRID', (0, 0), (-1, -1), 0.80, colors.black), ('FONT', (0, 0), (-1, -1), "Helvetica", 7), ('FONT', (0, 0), (5, 0), "Helvetica-Bold", 7), ('ALIGN', (1, 1), (2, -1), 'CENTER'), ] elementos = [] doc = SimpleDocTemplate(response) style = getSampleStyleSheet() style2 = getSampleStyleSheet() styleFecha = getSampleStyleSheet() styleEncabezado = getSampleStyleSheet() fechas = datetime.datetime.today() mes = fecha.NormalDate().monthName() dia = fecha.NormalDate().dayOfWeekName() salto = '<br />' txtFecha = '%s, %s %s %s' % (dia.upper(), fechas.day, mes.upper(), fechas.year) styleF = styleFecha['Normal'] styleF.fontSize = 8 styleF.fontName = 'Helvetica' styleF.alignment = TA_RIGHT fechaV = Paragraph(txtFecha, styleF) elementos.append(fechaV) elementos.append(Spacer(1, 5)) #-- Espacio para poner el encabezado con la clase Canvas elementos.append(Spacer(1, 75)) #Titulo del reporte txtTitulo = u'LIBRO DE MEMORÁNDUM %s%s' % (opcion.upper(), str(salto) * 2) titulo = style['Heading1'] titulo.fontSize = 9 titulo.fontName = 'Helvetica-Bold' titulo.alignment = TA_CENTER tituloV = Paragraph(txtTitulo, titulo) elementos.append(tituloV) #Periodo elementos.append(Spacer( 1, -15)) # Quitandole espacio al periodo para subirlo un poco mas #txtPeriodo = u'%s hasta %s'%(memos[0].sent_at, memos[memos.count()-1].sent_at) txtPeriodo = u'Lista de memorándum desde %s/%s/%s hasta %s/%s/%s' % ( memos[0].sent_at.day, memos[0].sent_at.month, memos[0].sent_at.year, memos[memos.count() - 1].sent_at.day, memos[memos.count() - 1].sent_at.month, memos[memos.count() - 1].sent_at.year) periodo = Paragraph(txtPeriodo, styleF) elementos.append(periodo) num = 0 tabla = [] tabla.append([ 'NUM', 'REDACTADO', 'APROBADO POR', 'PARA', 'FECHA', 'ASUNTO' ]) # Encabezado de la Tabla. for memo in memos: num += 1 jefe = jefe_dep(request) tabla.append([ num, '%s \n(%s)' % (memo.sender.usuarios.persona.__unicode__(), memo.sender.usuarios.persona. cargo_principal.dependencia.departamento), '%s \n(%s)' % (jefe.usuarios.persona.__unicode__(), jefe.usuarios. persona.cargo_principal.dependencia.departamento), '%s \n(%s)' % (memo.recipient.usuarios.persona.__unicode__(), memo.recipient.usuarios.persona.cargo_principal. dependencia.departamento), u'%s/%s/%s' % (memo.sent_at.day, memo.sent_at.month, memo.sent_at.year), memo.subject ]) t1 = Table(tabla, colWidths=('', '', '', '', '', '')) t1.setStyle(TableStyle(x)) elementos.append(t1) #--> Para cargar la ultima tabla del reporte doc.build(elementos, canvasmaker=NumeroDePagina, onFirstPage=encabezado_constancia) return response #libro_memos(request, lista_mensajes) #memo(request, lista_mensajes[0].id) c.update({'mensaje': mensaje}) return render_to_response(template_name, c)
def bandeja(request, tipo_bandeja='', expresion='', tipo_mensaje='', mensaje=''): """ Displays a list of received messages for the current user. Optional Arguments: ``template_name``: name of the template to use. """ notify = False diccionario = {} diccionario.update(csrf(request)) if request.user.is_authenticated(): if request.method == "POST": form = BandejaForm(request.POST) now = datetime.datetime.now() # Revisar si hay POST con archivar if request.POST.has_key('archivar'): lista = request.POST.getlist('seleccion') if lista.__len__() == 0: form.errors.update( {'mensajes': u'No seleccionó ningún mensaje'}) tipo_mensaje = 'error' mensaje = form.errors['mensajes'] else: lista_memos = [] for num in lista: lista_memos.append(int(num)) # Buscar los memos según los ids que llegan lista_memos = Message.objects.filter(id__in=lista_memos) total_memos = lista_memos.count() if lista_memos.exclude( status__nombre='En espera').count() == total_memos: tipo_mensaje = 'success' mensaje = 'Un total de %s mensajes fueron archivados' % ( total_memos) else: tipo_mensaje = 'error' mensaje = 'Los memorándum en espera que no pueden ser archivados. ' if lista_memos.exclude( status__nombre='En espera').count() > 1: mensaje = mensaje + 'Sin embargo, %s memos fueron archivados' % ( lista_memos.exclude( status__nombre='En espera').count()) elif lista_memos.exclude( status__nombre='En espera').count() == 1: mensaje = mensaje + 'Sin embargo, %s memo fue archivado.' % ( lista_memos.exclude( status__nombre='En espera').count()) for memo in lista_memos.exclude( status__nombre='En espera'): # Se filtran los memos con el código del memo con el id filtrado anteriormente memos = Message.objects.filter( codigo=memo.codigo).exclude( status__nombre='En espera') for memorandum in memos: memorandum.deleted_at = now # Guardar log de memo archivado LogEntry.objects.create( user_id=request.user.pk, content_type_id=ContentType.objects. get_for_model(Message).id, object_id=memorandum.id, object_repr=repr(memo), change_message=mensaje, action_flag=DELETION) memorandum.save() form = BandejaForm() if tipo_bandeja == 'archivados': # ARCHIVADOS sender = Destinatarios.objects.get(usuarios__user=request.user) dependencia = request.user.profile.persona.cargo_principal.dependencia message_list = Message.objects.filter( models.Q(sender=sender) | models.Q(recipient=sender), deleted_at__isnull=False).order_by('codigo').distinct('codigo') if tipo_bandeja == 'por_aprobar': # POR APROBAR sender = Destinatarios.objects.get(usuarios__user=request.user) dependencia = request.user.profile.persona.cargo_principal.dependencia message_list = Message.objects.filter( models.Q( status__nombre__iexact='En espera', sender__usuarios__persona__cargo_principal__dependencia= dependencia) | models.Q( sender__usuarios__persona__cargos_autorizados__dependencia= dependencia)).order_by('codigo').distinct('codigo') if tipo_bandeja == 'borradores': # BORRADORES sender = Destinatarios.objects.get(usuarios__user=request.user) message_list = Message.objects.filter( sender=sender, borrador=True).order_by('codigo').distinct('codigo') if tipo_bandeja == 'enviados': # ENVIADOS destinatarios = Destinatarios.objects.filter( models.Q(usuarios__user=request.user) | models.Q(grupos__user=request.user)) # Si es el jefe maximo, deben aparecer todos los memos de esa dependencia if request.user.profile.persona.cargo_principal.cargo == request.user.profile.persona.cargo_principal.dependencia.cargo_max: message_list = Message.objects.filter( sender__usuarios__persona__cargo_principal__dependencia= request.user.profile.persona.cargo_principal.dependencia, status__nombre__iexact='Aprobado') else: message_list = Message.objects.filter(sender__in=destinatarios) destinatario = Destinatarios.objects.get(usuarios__user=request.user) if tipo_bandeja == 'entrada': # ENTRADA message_list = Message.objects.filter( recipient=destinatario, deleted_at__isnull=True).distinct() if not request.user.profile.persona.cargo_principal.cargo == request.user.profile.persona.cargo_principal.dependencia.cargo_max: message_list = message_list.filter( status__nombre__iexact='Aprobado') if request.POST.has_key('filtro'): filtro = request.POST['filtro'] if not filtro == '': message_list = Message.objects.filter( deleted_at__isnull=True).distinct() message_list = message_list.filter( Q(subject__icontains=filtro) | Q(body__icontains=filtro) | Q(sender__usuarios__persona__primer_nombre__icontains=filtro ) | Q(sender__usuarios__persona__primer_apellido__icontains= filtro) | Q(sender__usuarios__persona__segundo_nombre__icontains= filtro) | Q(sender__usuarios__persona__segundo_apellido__icontains= filtro) | Q(recipient__usuarios__persona__cargo__dependencia__departamento__icontains =filtro) | Q(sender__usuarios__persona__cargo__dependencia__departamento__icontains =filtro) | Q(recipient__grupos__name__icontains=filtro) | Q(recipient__usuarios__persona__primer_nombre__icontains= filtro) | Q(recipient__usuarios__persona__primer_apellido__icontains= filtro) | Q(recipient__usuarios__persona__segundo_nombre__icontains =filtro) | Q(recipient__usuarios__persona__segundo_apellido__icontains =filtro) | Q(status__nombre__iexact=filtro) | Q(codigo__iexact=filtro) | Q(num_ident__iexact=filtro)) message_list = message_list.order_by('codigo', 'con_copia').distinct('codigo') if not message_list.exists() and mensaje == '': if request.POST.has_key('filtro'): mensaje = u'No se consiguió ningún mensaje' else: mensaje = u'No tiene ningún mensaje hasta ahora' (tipo_mensaje, expresion) = msj_expresion('info') # Revisar si hay algún orden if request.GET.has_key('ver'): opcion = request.GET['ver'] if opcion == 'leido': # Excluir los que no están sin leer message_list = message_list.exclude(read_at=None) if opcion == 'no_leido': # Filtrar los que están sin leer message_list = message_list.filter(read_at=None) if opcion == 'apro': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='Aprobado') if opcion == 'espera': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='En espera') if opcion == 'anulado': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='Anulado') paginador = Paginator(message_list, settings.SUIT_CONFIG['LIST_PER_PAGE']) page = request.GET.get('page') try: message_list = paginador.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. message_list = paginador.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. message_list = paginador.page(paginator.num_pages) diccionario.update({'request': request}) diccionario.update({'message_list': message_list}) diccionario.update({'tipo_mensaje': tipo_mensaje}) diccionario.update({'expresion': expresion}) diccionario.update({'mensaje': mensaje}) diccionario.update({'tipo_bandeja': tipo_bandeja}) diccionario.update({'nombre_action': 'buscar_memos'}) return render_to_response('usuario/mensajes/bandejas.html', diccionario, context_instance=RequestContext(request)) else: return HttpResponseRedirect('/')
def compose(request, message_id=None, template_name='usuario/mensajes/redactar.html', success_url=None, recipient_filter=None): """ Displays and handles the ``form_class`` form to compose new messages. Required Arguments: None Optional Arguments: ``recipient``: username of a `django.contrib.auth` User, who should receive the message, optionally multiple usernames could be separated by a '+' ``form_class``: the form-class to use ``template_name``: the template to use ``success_url``: where to redirect after successfull submission """ form_errors = '' (tipo_mensaje, expresion) = msj_expresion('alert') mensaje = u'El mensaje será guardado como borrador automáticamente cada 5 minutos' message = None if request.method == "POST": form = ComposeForm(request.POST) cuerpo = '' valido = form.is_valid() # Revisar si hay quien apruebe en el departamento del redactor jefe = Destinatarios.objects.filter( usuarios__user__userprofile__persona__cargo_principal__dependencia= request.user.profile.persona.cargo_principal.dependencia, usuarios__user__userprofile__persona__cargo_principal__cargo=request .user.profile.persona.cargo_principal.dependencia.cargo_max) if not jefe.exists(): mensaje = u'Este memo no puede ser enviado ni aprobado porque no existe un jefe de departamento en %s' % ( request.user.profile.persona.cargo_principal.dependencia) valido = False else: jefe = jefe[0] if valido: if request.POST.has_key('recipient'): destinatarios = form.cleaned_data['recipient'] destinos = [] for dest in destinatarios: if dest.usuarios == None: destinatarios2 = Destinatarios.objects.filter( usuarios__persona__cargo_principal__cargo=dest. grupos) for dest2 in destinatarios2: if not dest2 in form.cleaned_data['recipient']: destinos.append(dest2) else: destinos.append(dest) destinatarios = destinos else: destinatarios = None if request.POST.has_key('con_copia'): con_copia = form.cleaned_data['con_copia'] else: con_copia = None if request.POST.has_key('archivo'): archivo = request.POST['archivo'] else: archivo = None sender = Destinatarios.objects.get(usuarios__user=request.user) # Revisar si se envió el formulario como borrador borrador = False enviar = False plantilla = False if request.POST.has_key('borrador'): borrador = True if request.POST.has_key('enviar'): enviar = True if request.POST.has_key('plantilla'): plantilla = True if enviar: mensaje = u'Mensaje enviado exitosamente' elif borrador: mensaje = u'Borrador guardado exitosamente' elif plantilla: print "Aún no programado" mensaje = u'Plantilla guardada exitosamente' # Por cada destinatario, enviar el memo, generar un log y enviar correo si está en la opción de envío if message_id: msjs_guardados = Message.objects.get(id=message_id) body = request.POST['body'] subject = request.POST['subject'] num_ident = msjs_guardados.num_ident codigo = msjs_guardados.codigo # Enlazar los destinatarios con los con_copia destinos = [] if destinatarios: for dest in destinatarios: destinos.append(dest) if con_copia: for dest_cc in con_copia: destinos.append(dest_cc) ''' if not destinatarios or not con_copia: message = Message.objects.get(id=message_id) message.body = body message.subject = subject message.archivo = archivo message.borrador = borrador message.save() ''' msjs_guardados = Message.objects.filter(codigo=codigo) for dest in destinos: # Si el destinatario no está en el campo 'recipient', entonces está en 'con_copia' if not dest in destinatarios: cc = True else: cc = False # Si con ese codigo, están los mismos destinatarios, entonces se guarda la información if msjs_guardados.filter(recipient=dest).exists(): message = Message.objects.get(recipient=dest, codigo=codigo) message.recipient = dest message.body = body message.subject = subject message.archivo = archivo message.borrador = borrador message.con_copia = cc message.save() # Si no existe, se crea else: message = crear_mensaje( destino=dest, envio=sender, asunto=subject, cc=cc, cuerpo=body, num_ident=msjs_guardados[0].num_ident, codigo=msjs_guardados[0].codigo, borrador=borrador, archivo=archivo, ) # Eliminar memos cuyos destinatarios hayan sido excluidos if destinos: msjs_guardados = msjs_guardados.exclude( recipient__in=destinos) if msjs_guardados.exists(): msjs_guardados.delete() else: fecha_actual = datetime.datetime.today() mensajes = Message.objects.filter( sender__usuarios__user__userprofile__persona__cargo_principal__dependencia =sender.usuarios.user.profile.persona.cargo_principal. dependencia, sent_at__year=fecha_actual.year, sent_at__month=fecha_actual.month) num_ident = mensajes.count() + 1 # El identificador se genera a partir del id del memo, del jefe de departamento y del minuto, segundo y microsegundo actual identificador = '%s%s' % (Message.objects.all().count(), jefe.id) codigo = '' for ident in identificador: codigo = codigo + str(ord(ident)) codigo = codigo + str(datetime.datetime.today().microsecond) if destinatarios: for destino in destinatarios: message = crear_mensaje( destino=destino, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) elif con_copia: for destino_cc in con_copia: message = crear_mensaje( destino=destino_cc, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=True, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) else: message = crear_mensaje( destino=None, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) # ¿Necesita el jefe recibir directamente el memorándum? ''' if enviar and not destinatarios.__contains__(jefe): destino = jefe, message = crear_mensaje( destino=destino, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) ''' (tipo_mensaje, expresion) = msj_expresion('success') if success_url is None: success_url = reverse('messages_inbox') if request.GET.has_key('next'): success_url = request.GET['next'] form.body = request.POST['body'] if form.errors or not valido: (tipo_mensaje, expresion) = msj_expresion('error') label = "" if form.errors.keys()[0] == 'subject': label = "Asunto" elif form.errors.keys()[0] == 'recipient': label = "Destinatarios" elif form.errors.keys()[0] == 'body': label = "Texto" if not label == "": mensaje = label + ': ' + form.errors.values()[0][0] if form.errors.has_key('__all__'): mensaje = form.errors['__all__'].as_text().split('* ')[1] if form.errors or not valido: return render_to_response(template_name, { 'tipo': 'Redactar', 'tipo_mensaje': tipo_mensaje, 'mensaje': mensaje, 'message': message, 'expresion': expresion, 'request': request, 'form': form, }, context_instance=RequestContext(request)) elif request.POST.has_key('borrador'): return HttpResponseRedirect('/redactar/%s/' % (message.id)) return bandeja(request, tipo_bandeja='enviados', expresion=expresion, tipo_mensaje=tipo_mensaje, mensaje=mensaje) else: form = ComposeForm() if message_id: message = Message.objects.get(id=message_id) if message.status.nombre == 'Aprobado': (tipo_mensaje, expresion) = msj_expresion('error') mensaje = u'Ese mensaje ya ha sido aprobado. No puede ser editado' return bandeja(request, tipo_bandeja='enviados', expresion=expresion, tipo_mensaje=tipo_mensaje, mensaje=mensaje) messages = Message.objects.filter(codigo=message.codigo) messages_cc = messages.filter(con_copia=True) messages = messages.filter(con_copia=False) dest_cc = [] dest = [] if messages_cc.exists(): for msj in messages_cc: dest_cc.append(msj.recipient) if messages.exists(): for msj in messages: dest.append(msj.recipient) form.fields['recipient'].initial = dest form.fields['body'].initial = message.body form.fields['con_copia'].initial = dest_cc form.fields['subject'].initial = message.subject form.fields['archivo'].initial = message.archivo else: persona = u"%s.</br /> %s de %s" % ( request.user.profile.persona, request.user.profile.persona.cargo_principal.cargo, request.user.profile.persona.cargo_principal.dependencia) form.fields[ 'body'].initial = u"<br /><br />Sin otro particular al cual hacer referencia, se despide. </br /></br /><b>Atentamente,</br /> %s</b>" % ( persona.upper()) return render_to_response(template_name, { 'tipo': 'Redactar', 'tipo_mensaje': tipo_mensaje, 'mensaje': mensaje, 'message': message, 'expresion': expresion, 'request': request, 'form': form, }, context_instance=RequestContext(request))
def bandeja(request, tipo_bandeja='', expresion='', tipo_mensaje='', mensaje=''): """ Displays a list of received messages for the current user. Optional Arguments: ``template_name``: name of the template to use. """ notify = False diccionario = {} diccionario.update(csrf(request)) if request.user.is_authenticated(): if request.method == "POST": form = BandejaForm(request.POST) now = datetime.datetime.now() # Revisar si hay POST con archivar if request.POST.has_key('archivar'): lista = request.POST.getlist('seleccion') if lista.__len__() == 0: form.errors.update({'mensajes':u'No seleccionó ningún mensaje'}) tipo_mensaje = 'error' mensaje = form.errors['mensajes'] else: lista_memos = [] for num in lista: lista_memos.append(int(num)) # Buscar los memos según los ids que llegan lista_memos = Message.objects.filter(id__in=lista_memos) total_memos = lista_memos.count() if lista_memos.exclude(status__nombre = 'En espera').count() == total_memos: tipo_mensaje = 'success' mensaje = 'Un total de %s mensajes fueron archivados' %(total_memos) else: tipo_mensaje = 'error' mensaje = 'Los memorándum en espera que no pueden ser archivados. ' if lista_memos.exclude(status__nombre = 'En espera').count() > 1: mensaje = mensaje + 'Sin embargo, %s memos fueron archivados' %(lista_memos.exclude(status__nombre = 'En espera').count()) elif lista_memos.exclude(status__nombre = 'En espera').count() == 1: mensaje = mensaje + 'Sin embargo, %s memo fue archivado.' %(lista_memos.exclude(status__nombre = 'En espera').count()) for memo in lista_memos.exclude(status__nombre = 'En espera'): # Se filtran los memos con el código del memo con el id filtrado anteriormente memos = Message.objects.filter(codigo = memo.codigo).exclude(status__nombre = 'En espera') for memorandum in memos: memorandum.deleted_at = now # Guardar log de memo archivado LogEntry.objects.create( user_id = request.user.pk, content_type_id = ContentType.objects.get_for_model(Message).id, object_id = memorandum.id, object_repr = repr(memo), change_message = mensaje, action_flag = DELETION ) memorandum.save() form = BandejaForm() if tipo_bandeja == 'archivados': # ARCHIVADOS sender = Destinatarios.objects.get(usuarios__user=request.user) dependencia = request.user.profile.persona.cargo_principal.dependencia message_list = Message.objects.filter(models.Q(sender=sender) | models.Q(recipient=sender), deleted_at__isnull=False).order_by('codigo').distinct('codigo') if tipo_bandeja == 'por_aprobar': # POR APROBAR sender = Destinatarios.objects.get(usuarios__user=request.user) dependencia = request.user.profile.persona.cargo_principal.dependencia message_list = Message.objects.filter(models.Q(status__nombre__iexact='En espera', sender__usuarios__persona__cargo_principal__dependencia=dependencia)| models.Q(sender__usuarios__persona__cargos_autorizados__dependencia=dependencia)).order_by('codigo').distinct('codigo') if tipo_bandeja == 'borradores': # BORRADORES sender = Destinatarios.objects.get(usuarios__user=request.user) message_list = Message.objects.filter(sender=sender, borrador=True).order_by('codigo').distinct('codigo') if tipo_bandeja == 'enviados': # ENVIADOS destinatarios = Destinatarios.objects.filter(models.Q(usuarios__user=request.user)|models.Q(grupos__user=request.user)) # Si es el jefe maximo, deben aparecer todos los memos de esa dependencia if request.user.profile.persona.cargo_principal.cargo == request.user.profile.persona.cargo_principal.dependencia.cargo_max: message_list = Message.objects.filter(sender__usuarios__persona__cargo_principal__dependencia=request.user.profile.persona.cargo_principal.dependencia, status__nombre__iexact='Aprobado') else: message_list = Message.objects.filter(sender__in=destinatarios) destinatario = Destinatarios.objects.get(usuarios__user=request.user) if tipo_bandeja == 'entrada': # ENTRADA message_list = Message.objects.filter(recipient=destinatario, deleted_at__isnull=True).distinct() if not request.user.profile.persona.cargo_principal.cargo == request.user.profile.persona.cargo_principal.dependencia.cargo_max: message_list = message_list.filter(status__nombre__iexact='Aprobado') if request.POST.has_key('filtro'): filtro = request.POST['filtro'] if not filtro == '': message_list = Message.objects.filter(deleted_at__isnull=True).distinct() message_list = message_list.filter(Q(subject__icontains=filtro)| Q(body__icontains=filtro)| Q(sender__usuarios__persona__primer_nombre__icontains=filtro)| Q(sender__usuarios__persona__primer_apellido__icontains=filtro)| Q(sender__usuarios__persona__segundo_nombre__icontains=filtro)| Q(sender__usuarios__persona__segundo_apellido__icontains=filtro)| Q(recipient__usuarios__persona__cargo__dependencia__departamento__icontains=filtro)| Q(sender__usuarios__persona__cargo__dependencia__departamento__icontains=filtro)| Q(recipient__grupos__name__icontains=filtro)| Q(recipient__usuarios__persona__primer_nombre__icontains=filtro)| Q(recipient__usuarios__persona__primer_apellido__icontains=filtro)| Q(recipient__usuarios__persona__segundo_nombre__icontains=filtro)| Q(recipient__usuarios__persona__segundo_apellido__icontains=filtro)| Q(status__nombre__iexact=filtro)| Q(codigo__iexact=filtro)| Q(num_ident__iexact=filtro) ) message_list = message_list.order_by('codigo','con_copia').distinct('codigo') if not message_list.exists() and mensaje == '': if request.POST.has_key('filtro'): mensaje = u'No se consiguió ningún mensaje' else: mensaje = u'No tiene ningún mensaje hasta ahora' (tipo_mensaje, expresion) = msj_expresion('info') # Revisar si hay algún orden if request.GET.has_key('ver'): opcion = request.GET['ver'] if opcion == 'leido': # Excluir los que no están sin leer message_list = message_list.exclude(read_at=None) if opcion == 'no_leido': # Filtrar los que están sin leer message_list = message_list.filter(read_at=None) if opcion == 'apro': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='Aprobado') if opcion == 'espera': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='En espera') if opcion == 'anulado': # Filtrar los que tengan estatus con nombre 'Aprobado' message_list = message_list.filter(status__nombre='Anulado') paginador = Paginator(message_list, settings.SUIT_CONFIG['LIST_PER_PAGE']) page = request.GET.get('page') try: message_list = paginador.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. message_list = paginador.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. message_list = paginador.page(paginator.num_pages) diccionario.update({'request':request}) diccionario.update({'message_list':message_list}) diccionario.update({'tipo_mensaje':tipo_mensaje}) diccionario.update({'expresion':expresion}) diccionario.update({'mensaje':mensaje}) diccionario.update({'tipo_bandeja':tipo_bandeja}) diccionario.update({'nombre_action':'buscar_memos'}) return render_to_response('usuario/mensajes/bandejas.html', diccionario, context_instance=RequestContext(request)) else: return HttpResponseRedirect('/')
def compose(request, message_id=None, template_name='usuario/mensajes/redactar.html', success_url=None, recipient_filter=None): """ Displays and handles the ``form_class`` form to compose new messages. Required Arguments: None Optional Arguments: ``recipient``: username of a `django.contrib.auth` User, who should receive the message, optionally multiple usernames could be separated by a '+' ``form_class``: the form-class to use ``template_name``: the template to use ``success_url``: where to redirect after successfull submission """ form_errors = '' (tipo_mensaje, expresion) = msj_expresion('alert') mensaje = u'El mensaje será guardado como borrador automáticamente cada 5 minutos' message = None if request.method == "POST": form = ComposeForm(request.POST) cuerpo = '' valido = form.is_valid() # Revisar si hay quien apruebe en el departamento del redactor jefe = Destinatarios.objects.filter(usuarios__user__userprofile__persona__cargo_principal__dependencia = request.user.profile.persona.cargo_principal.dependencia, usuarios__user__userprofile__persona__cargo_principal__cargo = request.user.profile.persona.cargo_principal.dependencia.cargo_max) if not jefe.exists(): mensaje = u'Este memo no puede ser enviado ni aprobado porque no existe un jefe de departamento en %s' %(request.user.profile.persona.cargo_principal.dependencia) valido = False else: jefe = jefe[0] if valido: if request.POST.has_key('recipient'): destinatarios = form.cleaned_data['recipient'] destinos = [] for dest in destinatarios: if dest.usuarios == None: destinatarios2 = Destinatarios.objects.filter(usuarios__persona__cargo_principal__cargo=dest.grupos) for dest2 in destinatarios2: if not dest2 in form.cleaned_data['recipient']: destinos.append(dest2) else: destinos.append(dest) destinatarios = destinos else: destinatarios = None if request.POST.has_key('con_copia'): con_copia = form.cleaned_data['con_copia'] else: con_copia = None if request.POST.has_key('archivo'): archivo = request.POST['archivo'] else: archivo = None sender = Destinatarios.objects.get(usuarios__user=request.user) # Revisar si se envió el formulario como borrador borrador = False enviar = False plantilla = False if request.POST.has_key('borrador'): borrador = True if request.POST.has_key('enviar'): enviar = True if request.POST.has_key('plantilla'): plantilla = True if enviar: mensaje = u'Mensaje enviado exitosamente' elif borrador: mensaje = u'Borrador guardado exitosamente' elif plantilla: print "Aún no programado" mensaje = u'Plantilla guardada exitosamente' # Por cada destinatario, enviar el memo, generar un log y enviar correo si está en la opción de envío if message_id: msjs_guardados = Message.objects.get(id=message_id) body = request.POST['body'] subject = request.POST['subject'] num_ident = msjs_guardados.num_ident codigo = msjs_guardados.codigo # Enlazar los destinatarios con los con_copia destinos = [] if destinatarios: for dest in destinatarios: destinos.append(dest) if con_copia: for dest_cc in con_copia: destinos.append(dest_cc) ''' if not destinatarios or not con_copia: message = Message.objects.get(id=message_id) message.body = body message.subject = subject message.archivo = archivo message.borrador = borrador message.save() ''' msjs_guardados = Message.objects.filter(codigo=codigo) for dest in destinos: # Si el destinatario no está en el campo 'recipient', entonces está en 'con_copia' if not dest in destinatarios: cc = True else: cc = False # Si con ese codigo, están los mismos destinatarios, entonces se guarda la información if msjs_guardados.filter(recipient=dest).exists(): message = Message.objects.get(recipient=dest, codigo=codigo) message.recipient = dest message.body = body message.subject = subject message.archivo = archivo message.borrador = borrador message.con_copia = cc message.save() # Si no existe, se crea else: message = crear_mensaje( destino=dest, envio=sender, asunto=subject, cc=cc, cuerpo=body, num_ident=msjs_guardados[0].num_ident, codigo=msjs_guardados[0].codigo, borrador=borrador, archivo = archivo, ) # Eliminar memos cuyos destinatarios hayan sido excluidos if destinos: msjs_guardados = msjs_guardados.exclude(recipient__in=destinos) if msjs_guardados.exists(): msjs_guardados.delete() else: fecha_actual = datetime.datetime.today() mensajes = Message.objects.filter(sender__usuarios__user__userprofile__persona__cargo_principal__dependencia=sender.usuarios.user.profile.persona.cargo_principal.dependencia, sent_at__year=fecha_actual.year, sent_at__month=fecha_actual.month) num_ident = mensajes.count() + 1 # El identificador se genera a partir del id del memo, del jefe de departamento y del minuto, segundo y microsegundo actual identificador = '%s%s' %(Message.objects.all().count(), jefe.id) codigo = '' for ident in identificador: codigo = codigo + str(ord(ident)) codigo = codigo + str(datetime.datetime.today().microsecond) if destinatarios: for destino in destinatarios: message = crear_mensaje( destino=destino, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) elif con_copia: for destino_cc in con_copia: message = crear_mensaje( destino=destino_cc, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=True, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) else: message = crear_mensaje( destino=None, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) # ¿Necesita el jefe recibir directamente el memorándum? ''' if enviar and not destinatarios.__contains__(jefe): destino = jefe, message = crear_mensaje( destino=destino, envio=sender, asunto=request.POST['subject'], cuerpo=request.POST['body'], cc=False, num_ident=num_ident, codigo=codigo, borrador=borrador, archivo=archivo, ) ''' (tipo_mensaje, expresion) = msj_expresion('success') if success_url is None: success_url = reverse('messages_inbox') if request.GET.has_key('next'): success_url = request.GET['next'] form.body = request.POST['body'] if form.errors or not valido: (tipo_mensaje, expresion) = msj_expresion('error') label = "" if form.errors.keys()[0] == 'subject': label = "Asunto" elif form.errors.keys()[0] == 'recipient': label = "Destinatarios" elif form.errors.keys()[0] == 'body': label = "Texto" if not label == "": mensaje = label + ': ' + form.errors.values()[0][0] if form.errors.has_key('__all__'): mensaje = form.errors['__all__'].as_text().split('* ')[1] if form.errors or not valido: return render_to_response(template_name, { 'tipo': 'Redactar', 'tipo_mensaje':tipo_mensaje, 'mensaje':mensaje, 'message':message, 'expresion':expresion, 'request': request, 'form': form, }, context_instance=RequestContext(request)) elif request.POST.has_key('borrador'): return HttpResponseRedirect('/redactar/%s/' %(message.id)) return bandeja(request, tipo_bandeja='enviados', expresion=expresion, tipo_mensaje=tipo_mensaje, mensaje=mensaje) else: form = ComposeForm() if message_id: message = Message.objects.get(id=message_id) if message.status.nombre == 'Aprobado': (tipo_mensaje, expresion) = msj_expresion('error') mensaje = u'Ese mensaje ya ha sido aprobado. No puede ser editado' return bandeja(request, tipo_bandeja='enviados', expresion=expresion, tipo_mensaje=tipo_mensaje, mensaje=mensaje) messages = Message.objects.filter(codigo=message.codigo) messages_cc = messages.filter(con_copia=True) messages = messages.filter(con_copia=False) dest_cc = [] dest = [] if messages_cc.exists(): for msj in messages_cc: dest_cc.append(msj.recipient) if messages.exists(): for msj in messages: dest.append(msj.recipient) form.fields['recipient'].initial = dest form.fields['body'].initial = message.body form.fields['con_copia'].initial = dest_cc form.fields['subject'].initial = message.subject form.fields['archivo'].initial = message.archivo else: persona = u"%s.</br /> %s de %s" %(request.user.profile.persona, request.user.profile.persona.cargo_principal.cargo, request.user.profile.persona.cargo_principal.dependencia) form.fields['body'].initial = u"<br /><br />Sin otro particular al cual hacer referencia, se despide. </br /></br /><b>Atentamente,</br /> %s</b>" %(persona.upper()) return render_to_response(template_name, { 'tipo': 'Redactar', 'tipo_mensaje':tipo_mensaje, 'mensaje':mensaje, 'message':message, 'expresion':expresion, 'request': request, 'form': form, }, context_instance=RequestContext(request))
def index(request, template_name='usuario/reportes/reportes.html', mensaje=''): jefe = jefe_dep(request) usuario = user_destin(request) dependencia = request.user.profile.persona.cargo_principal.dependencia c = {} c.update(csrf(request)) c.update({'request':request}) c.update(csrf(request)) fecha_actual = datetime.datetime.today() c.update({'fecha_actual':fecha_actual}) from django.contrib.admin.models import LogEntry log_user = LogEntry.objects.filter( user_id = request.user.pk, ).order_by('-action_time')[:4] libro_memo = LibroMemoForm(request.POST) consulta_memo = ConsultaMemoForm(request.POST) c.update({'log_user':log_user}) c.update({'mensaje':mensaje}) c.update({'libro_memo':libro_memo}) c.update({'consulta_memo':consulta_memo}) (tipo_mensaje, expresion) = msj_expresion('error') c.update({'tipo_mensaje':tipo_mensaje}) c.update({'expresion':expresion}) if request.method == 'POST': c.update({'consulto':False}) resultado_memo = [] if consulta_memo.is_valid(): if consulta_memo['codigo'].data: codigo = request.POST['codigo'] resultado_memo = Message.objects.filter(codigo=codigo).exclude(status__nombre='Anulado') c.update({'memo_result':resultado_memo}) if resultado_memo.exists(): resultado_memo = resultado_memo[0] asunto = resultado_memo.subject hora = resultado_memo.sent_at sender = resultado_memo.sender destinos = resultado_memo.recipient if destinos == None: mensaje = u"Ese memorándum no tiene todavía un destinatario." (tipo_mensaje, expresion) = msj_expresion('error') else: memo = resultado_memo # Si el memorándum es para el usuario conectado, o lo redactó él o es el jefe de la dependencia, entonces puede descargar el memorándum. descargable = False if request.user.profile.persona == destinos.usuarios.persona or request.user.profile.persona == sender.usuarios.persona or request.user.profile.persona == jefe.usuarios.persona: descargable = True c.update({'jefe':jefe}) c.update({'asunto':asunto}) c.update({'hora':hora}) c.update({'sender':sender}) c.update({'destinos':destinos}) c.update({'descargable':descargable}) c.update({'memo':memo}) if resultado_memo.status.nombre == 'Aprobado': c.update({'aprobado':True}) else: c.update({'aprobado':False}) consulta_memo = ConsultaMemoForm(request.POST) c.update({'consulta_memo':consulta_memo}) # Saber si consultó algún memorándum c.update({'consulto':True}) return render_to_response(template_name, c) else: mensaje = consulta_memo.errors['codigo'] if libro_memo.is_valid(): hora_inicio = datetime.time(0,00) hora_fin = datetime.time(23,59) # Se convierte el string a fecha + hora fecha_inicio = request.POST['fecha_inicio'] + ' '+ str(hora_inicio) fecha_inicio = datetime.datetime.strptime(fecha_inicio, '%m/%d/%Y %H:%M:%S') fecha_fin = request.POST['fecha_fin'] + ' ' + str(hora_fin) fecha_fin = datetime.datetime.strptime(fecha_fin, '%m/%d/%Y %H:%M:%S') opcion = request.POST['opcion'] # La fecha de inicio no puede ser mayor a la final (valido, mensaje) = revisar_fechas(fecha_inicio, fecha_fin) if valido == False: c.update({'mensaje':mensaje}) c.update({'libro_memo':libro_memo}) return render_to_response(template_name, c) # Opciones de libro # 'entrada': Memos para el usuario # 'salida': Memos escritos por el usuario. Si es el fefe, entonces enviados de la dependencia # 'ambos': Memos para el usuario y memos escritos por el usuario. Si es el jefe entonces enviados de la dependencia lista_mensajes = Message.objects.filter(sent_at__range=(fecha_inicio, fecha_fin),) if opcion == 'entrada': # Si no es el jefe, entonces sólo verá los mensajes que son para él if jefe == usuario: lista_mensajes = lista_mensajes.filter(recipient__usuarios__user__userprofile__persona__cargo_principal__dependencia=dependencia) else: lista_mensajes = lista_mensajes.filter(recipient__id__exact=usuario.id) elif opcion == 'salida': if jefe == usuario: lista_mensajes = lista_mensajes.filter(sender__usuarios__user__userprofile__persona__cargo_principal__dependencia=dependencia) else: lista_mensajes = lista_mensajes.filter(sender = usuario) elif opcion == 'ambos': if jefe == usuario: lista_mensajes = lista_mensajes.filter(models.Q(recipient__usuarios__user__userprofile__persona__cargo_principal__dependencia=dependencia)|models.Q(sender__usuarios__user__userprofile__persona__cargo_principal__dependencia=dependencia)) else: lista_mensajes = lista_mensajes.filter(models.Q(sender = usuario)|models.Q(recipient__id__exact=usuario.id)) # Si no hay ningún mensaje en ese rango de fechas memos = lista_mensajes if not lista_mensajes.exists(): mensaje = u'No existe ningún memorándum entre las fechas seleccionadas.' c.update({'mensaje':mensaje}) c.update({'libro_memo':libro_memo}) else: paginador = Paginator(memos, settings.SUIT_CONFIG['LIST_PER_PAGE']) page = request.GET.get('page') try: memos = paginador.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. memos = paginador.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. memos = paginador.page(paginator.num_pages) c.update({'memos':memos}) c.update({'opcion':opcion}) lista_mensajes = '' for memo in memos: lista_mensajes = str(memo.id) + ',' + lista_mensajes c.update({'lista_mensajes':lista_mensajes}) # pasamos la misma variable de memos pero para traernosla de vuelta en el hidden para sacar el PDF return render_to_response(template_name, c) else: if not request.POST.has_key('opcion') and not request.POST.has_key('codigo'): mensaje = u'Debe elegir un tipo de libro de memos.' c.update({'tipo_mensaje':tipo_mensaje}) c.update({'mensaje':mensaje}) c.update({'expresion':expresion}) c.update({'request':request}) c.update({'libro_memo':libro_memo}) c.update({'consulta_memo':consulta_memo}) return render_to_response(template_name, c) if request.POST.has_key('lista_mensajes'): memos = request.POST['lista_mensajes'] opcion = request.POST['opcion'] memos = memos.split(',') lista_mensaje = [] if opcion == 'salida': opcion = 'enviados' elif opcion == 'entrada': opcion = 'recibidos' for memo in memos: if memo: lista_mensaje.append(memo) memos = Message.objects.filter(id__in=lista_mensaje) fecha_inicio = request.POST['fecha_inicio'] fecha_fin = request.POST['fecha_fin'] salto = '<br />' #Libro_Memos_PDF(request, lista_mensajes) #def Libro_Memos_PDF(request, memos): response = HttpResponse(mimetype='application/pdf') if opcion == 'ambos': response['Content-Disposition'] = 'attachment; filename=Libro_memorandum_enviados_recibidos.pdf; pagesize=A4;' opcion = 'enviados y recibidos' else: response['Content-Disposition'] = 'attachment; filename=Libro_memorandum_'+ opcion +'.pdf; pagesize=A4;' #elementos es la lista donde almaceno todos lo que voy a incluir al documento pdf elementos = [] # SimpleDocTemplate es la clase para generar el pdf doc = SimpleDocTemplate(response) style = getSampleStyleSheet() styleFecha = getSampleStyleSheet() fechas = datetime.datetime.today() mes = fecha.NormalDate().monthName() # esta variable contiene el nombre del mes actual a partir de la libreria fecha añadida en lib/ dia = fecha.NormalDate().dayOfWeekName() # esta variable contiene el dia actual a partir de la libreria fecha añadida en lib/ #Espacio para poner el encabezado con la clase Canvas elementos.append(Spacer(1,40)) # Estilos de la tabla. x = [ #('BOX', (0,0), (4,0), 0.60, colors.black), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 1), ('BOTTOMPADDING', (0,0), (-1,-1), 2), ('GRID', (0,0), (-1,-1), 0.80, colors.black), ('FONT', (0,0), (-1,-1), "Helvetica", 7), ('FONT', (0,0), (5,0), "Helvetica-Bold", 7), ('ALIGN', (1,1), (2,-1), 'CENTER'), ] elementos = [] doc = SimpleDocTemplate(response) style = getSampleStyleSheet() style2 = getSampleStyleSheet() styleFecha = getSampleStyleSheet() styleEncabezado = getSampleStyleSheet() fechas = datetime.datetime.today() mes = fecha.NormalDate().monthName() dia = fecha.NormalDate().dayOfWeekName() salto = '<br />' txtFecha = '%s, %s %s %s'%(dia.upper(), fechas.day, mes.upper(), fechas.year) styleF = styleFecha['Normal'] styleF.fontSize = 8 styleF.fontName = 'Helvetica' styleF.alignment = TA_RIGHT fechaV = Paragraph(txtFecha, styleF) elementos.append(fechaV) elementos.append(Spacer(1,5)) #-- Espacio para poner el encabezado con la clase Canvas elementos.append(Spacer(1,75)) #Titulo del reporte txtTitulo = u'LIBRO DE MEMORÁNDUM %s%s' %(opcion.upper(), str(salto)*2) titulo = style['Heading1'] titulo.fontSize = 9 titulo.fontName = 'Helvetica-Bold' titulo.alignment = TA_CENTER tituloV = Paragraph(txtTitulo, titulo) elementos.append(tituloV) #Periodo elementos.append(Spacer(1,-15))# Quitandole espacio al periodo para subirlo un poco mas #txtPeriodo = u'%s hasta %s'%(memos[0].sent_at, memos[memos.count()-1].sent_at) txtPeriodo = u'Lista de memorándum desde %s/%s/%s hasta %s/%s/%s'%(memos[0].sent_at.day, memos[0].sent_at.month, memos[0].sent_at.year, memos[memos.count()-1].sent_at.day, memos[memos.count()-1].sent_at.month, memos[memos.count()-1].sent_at.year) periodo = Paragraph(txtPeriodo, styleF) elementos.append(periodo) num = 0 tabla = [] tabla.append(['NUM', 'REDACTADO', 'APROBADO POR', 'PARA', 'FECHA', 'ASUNTO']) # Encabezado de la Tabla. for memo in memos: num += 1 jefe = jefe_dep(request) tabla.append([num, '%s \n(%s)' %(memo.sender.usuarios.persona.__unicode__(), memo.sender.usuarios.persona.cargo_principal.dependencia.departamento), '%s \n(%s)' %(jefe.usuarios.persona.__unicode__(), jefe.usuarios.persona.cargo_principal.dependencia.departamento), '%s \n(%s)' %(memo.recipient.usuarios.persona.__unicode__(), memo.recipient.usuarios.persona.cargo_principal.dependencia.departamento), u'%s/%s/%s' %(memo.sent_at.day, memo.sent_at.month, memo.sent_at.year), memo.subject]) t1 = Table(tabla, colWidths=('', '', '', '', '', '')) t1.setStyle(TableStyle(x)) elementos.append(t1)#--> Para cargar la ultima tabla del reporte doc.build(elementos, canvasmaker=NumeroDePagina, onFirstPage=encabezado_constancia) return response #libro_memos(request, lista_mensajes) #memo(request, lista_mensajes[0].id) c.update({'mensaje':mensaje}) return render_to_response(template_name, c)