コード例 #1
1
ファイル: views.py プロジェクト: Axelio/Umail
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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: views.py プロジェクト: Axelio/Umail
    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
                            )
コード例 #4
0
ファイル: views.py プロジェクト: Axelio/Umail
    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
                                )
コード例 #5
0
    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/')
コード例 #6
0
    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/')
コード例 #7
0
ファイル: views.py プロジェクト: Axelio/Umail
    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/')
コード例 #8
0
ファイル: views.py プロジェクト: Axelio/Umail
    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/')
コード例 #9
0
    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')
コード例 #10
0
    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,
        )
コード例 #11
0
ファイル: views.py プロジェクト: Axelio/Umail
    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')
コード例 #12
0
ファイル: views.py プロジェクト: Axelio/Umail
    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,
                        )
コード例 #13
0
    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)
コード例 #14
0
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)
コード例 #15
0
ファイル: views.py プロジェクト: axeliodiaz/Umail
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)
コード例 #16
0
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('/')
コード例 #17
0
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))
コード例 #18
0
ファイル: views.py プロジェクト: Axelio/Umail
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('/')
コード例 #19
0
ファイル: views.py プロジェクト: Axelio/Umail
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))
コード例 #20
0
ファイル: views.py プロジェクト: Axelio/Umail
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)