Beispiel #1
0
 def testRecipientFiterIsActive(self):
     form = ComposeForm(
         {"recipient": "user1", "subject": "S", "body": "B"},
         recipient_filter=self.f
     )
     assert form.is_valid()
     assert self.user1 in form.cleaned_data["recipient"]
Beispiel #2
0
def signup(request, host_b36):
    host_id = base36_to_int(host_b36) 
    host_class = get_object_or_404(HostClass, pk=host_id)
    if host_class.privacy != 'c':# or host_class.is_member(request.user):
        host_class = HostClass.objects.get(pk=host_id)
        if request.method == 'POST':
            sender = request.user
            subject = 'Request to join %s' % (host_class.course.title)
            recipients = host_class.members.filter(editor__exact=True)
            #recipient = host_class.members.get(editor=True)
            form = ComposeForm({'body': request.POST.get('body'), 'subject':subject, 'recipient':'clay'})
            if form.is_valid():                    
                #message_list = form.save(sender=request.user)                                                                           
                body = form.cleaned_data['body']
                #request.user.message_set.create(message=(u"Message successfully sent."))
                from_user = request.user
                for to_user_hcm in recipients: 
                    to_user = to_user_hcm.user
                    hcs = HostClassSignup.requests.create(host_class=host_class, sender=from_user, recipient=to_user, subject=subject, body=body)
                    #hcs = HostClassSignup(host_class=host_class, message=message)
                    #hcs.save()
                return HttpResponseRedirect('/h/v/%s/' % (host_b36))
        else:
            form = ComposeForm()
            form.fields['recipient'].initial = ' '
            form.fields['subject'].initial = ' '
            form.fields['body'].initial = "I would like to take %s." % (host_class.course.title)

        #expert = HostClassExpert.objects.filter(host_class=host_class)
        return render_to_response('host/signup.html', {
            'host_class': host_class,
            'form': form
        }, context_instance=RequestContext(request))
    def send_message_after_making_name_tag(self):
        # p = re.compile(r'(^@\w+)')
        p = re.compile(r'(@\w+)')
        tag_name_list = re.findall(p, self.content)
        ori_content = self.content

        for tag_name in tag_name_list:
            tag = tag_name.replace('@', '')
            change_tag = "<a href='#' class='name-tag'>{tag_name}</a>".format(
                tag_name=tag_name, )
            ori_content = ori_content.replace(tag_name, change_tag)
            user = MyUser.objects.get(nickname=tag)

            data = {
                'recipient': user.username,
                'subject': '회원님이 언급되었습니다.',
                'body': self.content,
            }
            compose_form = ComposeForm(data)
            sender = MyUser.objects.get(pk=1)

            if compose_form.is_valid():
                compose_form.save(sender=sender)

        self.content = ori_content
        return self.content
Beispiel #4
0
 def testRecipientFilterMixed(self):
     form = ComposeForm(
         {"recipient": "user1,user2", "subject": "S", "body": "B"},
         recipient_filter=self.f
     )
     assert not form.is_valid()
     assert self.user2.username in force_text(form.errors)
Beispiel #5
0
def sell_book_register(request, ):
    """ 팔려는 책 등록하기 """

    if request.method == 'POST':
        files = request.FILES.getlist('sell_book_status')
        form = SellBookRegisterForm(request.POST, request.FILES)

        if form.is_valid():
            sell_book = form.save(seller=request.user.my_seller)
            sell_isbn = form.data.get('isbn')
            book_info = Book.objects.get(isbn=sell_isbn)
            for f in files:
                BookStatus.objects.create(
                    sell_book_status=sell_book,
                    photo=f,
                )

            if BuyBookRegister.objects.filter(book_info_id=book_info.pk):
                data = {
                    'recipient': request.user.username,
                    'subject': '안녕하세요!',
                    'body': '{}님이 판매하시려는 책의 구매 리스트에 존재합니다. 구매 리스트를 확인해보세요 :-)'.format(request.user.username),
                }
                compose_form = ComposeForm(data)
                sender = MyUser.objects.get(pk=1)

                if compose_form.is_valid():
                    compose_form.save(sender=sender)

            news = News.objects.filter(follow_other_id=request.user.id)
            if news:
                for other in news:
                    data = {
                        'recipient': other.my_follow.username,
                        'subject': '{}님께서 새로운 글을 등록했습니다.'.format(request.user.username, ),
                        'body': 'test',
                    }
                    compose_form = ComposeForm(data)
                    sender = request.user

                    if compose_form.is_valid():
                        compose_form.save(sender=sender)

            return redirect('book:sell_book_detail', sell_pk=sell_book.pk)

    register_form = SellBookRegisterForm()
    search_form = NaverBooksSearchForm()
    context = {
        'register_form': register_form,
        'search_form': search_form,
    }
    return render(request, 'book/sell_book_register.html', context)
 def test_save(self):
     form = ComposeForm(
         {
             'recipient': self.user2.username,
             'subject': 'this is not empty',
             'body': 'this is not empty',
         }, 
         sender=self.user1,
     )
     self.assertTrue(form.is_valid())
     massage = form.save()
     self.assertIsNotNone(massage.pk)
     self.assertIsNotNone(massage.conversation)
 def test_clean_subject(self):
     form = ComposeForm(
         {
             'recipient': self.user2.username,
             'subject': 'X'*123,
             'body': 'this is not empty',
         }, 
         sender=self.user1,
     )
     
     self.assertTrue(form.is_valid())
     subject = form.cleaned_data['subject']
     
     self.assertEquals(120, len(subject))
Beispiel #8
0
def buy_book_register(request, ):
    """ 사려는 책 등록하기 """

    if request.method == 'POST':
        form = BuyBookRegisterForm(data=request.POST)

        if form.is_valid():
            buy_book = form.save(buyer=request.user)
            buy_isbn = form.data.get('isbn')
            book_info = Book.objects.get(isbn=buy_isbn)

            if SellBookRegister.objects.filter(book_info_id=book_info.pk):
                data = {
                    'recipient': request.user.username,
                    'subject': '안녕하세요!',
                    'body': '{}님이 구매하시려는 책의 판매 리스트에 존재합니다. 판매 리스트를 확인해보세요 :-)'.format(request.user.username),
                }
                compose_form = ComposeForm(data)
                sender = MyUser.objects.get(pk=1)

                if compose_form.is_valid():
                    compose_form.save(sender=sender)

            news = News.objects.filter(follow_other_id=request.user.id)
            if news:
                for other in news:
                    data = {
                        'recipient': other.my_follow.username,
                        'subject': '{}님께서 새로운 글을 등록했습니다.'.format(request.user.username, ),
                        'body': 'test',
                    }
                    compose_form = ComposeForm(data)
                    sender = request.user

                    if compose_form.is_valid():
                        compose_form.save(sender=sender)

            return redirect('book:buy_book_detail', buy_pk=buy_book.pk)

    register_form = BuyBookRegisterForm()
    search_form = NaverBooksSearchForm()
    context = {
        'register_form': register_form,
        'search_form': search_form,
    }
    return render(request, 'book/buy_book_register.html', context)
Beispiel #9
0
def create_reply(request,
                 message_id,
                 template_name='django_messages/compose.html',
                 success_url=None,
                 subject_template=_(u"Re: %(subject)s")):
    """  """

    parent = get_object_or_404(Message, id=message_id)

    if parent.sender != request.user and parent.recipient != request.user:
        raise Http404

    if request.method == "POST":
        data = {
            'recipient': request.POST.get('recipient', ''),
            'subject': request.POST.get('subject', ''),
            'body': request.POST.get('body', ''),
        }

        compose_form = ComposeForm(data)

        if compose_form.is_valid():
            compose_form.save(sender=request.user, parent_msg=parent)
            messages.info(request, _(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('messages_inbox')
            return HttpResponseRedirect(success_url)

    context = {
        'message_id': message_id,
        'subject': subject_template % {
            'subject': parent.subject
        },
        'recipient': parent.sender.username,
    }

    return render(request, template_name, context)
 def test_valid_sender_recipient_transaction(self):
     """If the recipient blacklisted the sender, the form should not
     validate and report an error"""
     blocking = RelationshipStatus.objects.get(from_slug='blocking')
     relationship = Relationship(
         from_user=self.user2,
         to_user=self.user1,
         status=blocking
     )
     relationship.save()
     form = ComposeForm(
         {
             'recipient': self.user2.username,
             'subject': 'this is not empty',
             'body': 'this is not empty',
         }, 
         sender=self.user1,
     )
     self.assertFalse(form.is_valid())
     errors = form.errors['recipient']
     self.assertEquals(1, len(errors))
     expected_error_message = u"%(recipient)s has blacklisted you, you can't message him any more."
     expected_error_message = expected_error_message % {'recipient': self.user2}
     self.assertEquals(expected_error_message, errors[0])
Beispiel #11
0
def contact(
    request, slug, recipient=None, success_url=None, recipient_filter=None
):
    row = get_object_or_404(Ad, slug=slug)

    if request.method == "POST":
        # sender = request.user
        form = ComposeForm(request.POST, recipient_filter=recipient_filter)
        if form.is_valid():
            form.save(sender=request.user)
            messages.info(request, "Message and email successfully sent.")
            if success_url is None:
                success_url = reverse("ads:ad_detail", kwargs={"slug": slug})
            if "next" in request.GET:
                success_url = request.GET["next"]
            return HttpResponseRedirect(success_url)
    else:
        form = ComposeForm(
            initial={"recipient": row.user.username, "subject": row.title}
        )

        if recipient is not None:
            recipients = [
                u
                for u in User.objects.filter(
                    **{
                        "%s__in"
                        % get_username_field(): [
                            r.strip() for r in recipient.split("+")
                        ]
                    }
                )
            ]
            form.fields["recipient"].initial = recipients

    context = {
        "form": form,
    }

    return render(request, "ads/contact.html", context)
Beispiel #12
0
def contact(request,
            slug,
            recipient=None,
            success_url=None,
            recipient_filter=None):
    row = get_object_or_404(Ad, slug=slug)

    if request.method == "POST":
        form = ComposeForm(request.POST, recipient_filter=recipient_filter)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['body']
            sender = request.user.email
            recipient = row.user.email
            form.save(sender=request.user)
            send_mail(subject, message, sender, [recipient])
            messages.info(request, "Message successfully sent.")
            if success_url is None:
                success_url = reverse('ads:ad', kwargs={'slug': slug})
            if 'next' in request.GET:
                success_url = request.GET['next']
            return HttpResponseRedirect(success_url)
    else:
        form = ComposeForm(initial={
            'recipient': row.user.username,
            'subject': row.title
        })

        if recipient is not None:
            recipients = [
                u for u in User.objects.filter(
                    **{
                        '%s__in' % get_username_field():
                        [r.strip() for r in recipient.split('+')]
                    })
            ]
            form.fields['recipient'].initial = recipients

    return render(request, 'ads/contact.html', {'form': form})
Beispiel #13
0
def compose(request, recipient):
    if request.method == "POST":
        print(request.POST)
        form = ComposeForm(request.POST)
        if form.is_valid():
            form.save(sender=request.user)
            messages.info(request, "Message successfully sent.")
            success_url = reverse('profile')
            if 'next' in request.GET:
                success_url = request.GET['next']
            return redirect(success_url)
    else:
        form = ComposeForm()
        if recipient is not None:
            recipients = [
                u for u in User.objects.filter(**{
                    'username__in': [r.strip() for r in recipient.split('+')]
                })
            ]
            form.fields['recipient'].initial = recipients
    return render(request, 'django_messages/compose.html', {
        'form': form,
    })
Beispiel #14
0
def send_message(request, data, is_registered, source=None):
	dajax = Dajax()

#	sender = request.user
	if is_registered:
		form = ComposeForm(QueryDict(data))
		if form.is_valid():
			sender = str(request.user.client)

			lines = []
			lines.append("From: %s" % sender)
			lines.append("Email: %s" % request.user.email)
			lines.append("")
			lines.append("Subject: %s" % form.cleaned_data['subject'])
			lines.append("")
			lines.append(form.cleaned_data['body'])

			message = "\n".join(lines)

			ctx = {
				"SITE_NAME": settings.SITE_NAME,
				"sender": sender,
				"message": message,
				"reply_url": absolute_url(reverse('messages_inbox'))
			}

			subject = render_to_string("account/emails/send_message_unregistered_subject.txt", ctx)

			send_hs_mail(subject, "account/emails/send_message_unregistered_body.txt", ctx, settings.DEFAULT_FROM_EMAIL, [form.cleaned_data['recipient'][0].email])

	else:
		qd = QueryDict(data)

		try:
			recipient = Healer.objects.get(user__username__iexact=qd['recipient_username'])
		except Healer.DoesNotExist:
			return

		form = ComposeFormUnregistered(qd)
		form.recipient = recipient.user.email

	dajax.remove_css_class('#new_message_form input','error')
	dajax.remove_css_class('#new_message_form textarea','error')
	if form.is_valid():
		m = form.save(sender=request.user)
		if source:
			MessageExtra.objects.create(message=m[0], source=source)
#		request.user.message_set.create(
#			message=_(u"Message successfully sent."))
#		success_url = reverse('messages_inbox')
#		if request.GET.has_key('next'):
#			success_url = request.GET['next']

		dajax.script("new_message_success();")

	else:
		for error in form.errors:
			if error == "captcha":
				css_class = '#new_message_form #id_%s_1'
			else:
				css_class = '#new_message_form #id_%s'
			dajax.add_css_class(css_class % error,'error')

	#update captcha
	challenge, response = captcha_settings.get_challenge()()
	store = CaptchaStore.objects.create(challenge=challenge, response=response)
	dajax.assign('img.captcha', 'src', reverse('captcha-image',kwargs=dict(key=store.hashkey)))
	dajax.assign('#id_msg_security_verification_0', 'value', store.hashkey)
	dajax.assign('#id_msg_security_verification_1', 'value', '')

	return dajax.json()

#def new_message_form_processor(request):
#
#	if request.user.is_authenticated():
#		new_message_form = ComposeForm()
#	else:
#		new_message_form = None
#
#	return { "new_message_form" : new_message_form }
Beispiel #15
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))
Beispiel #16
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))
Beispiel #17
0
	def post(self, request, format=None):
		try:
			data = request.POST['data'].encode('utf-8')
			source = request.POST.get('source', None)
		except:
			return HttpResponseBadRequest()

		if request.user.is_authenticated():
			form = ComposeForm(QueryDict(data))
			if form.is_valid():
				sender = str(request.user.client)

				lines = []
				lines.append("From: %s" % sender)
				lines.append("Email: %s" % request.user.email)
				lines.append("")
				lines.append("Subject: %s" % form.cleaned_data['subject'])
				lines.append("")
				lines.append(form.cleaned_data['body'])

				message = "\n".join(lines)

				ctx = {
					"SITE_NAME": settings.SITE_NAME,
					"sender": sender,
					"message": message,
					"reply_url": absolute_url(reverse('messages_inbox'))
				}

				subject = render_to_string("account/emails/send_message_unregistered_subject.txt", ctx)

				send_hs_mail(subject, "account/emails/send_message_unregistered_body.txt", ctx, settings.DEFAULT_FROM_EMAIL, [form.cleaned_data['recipient'][0].email])

		else:
			qd = QueryDict(data)

			try:
				recipient = Healer.objects.get(user__username__iexact=qd['recipient_username'])
			except Healer.DoesNotExist:
				return

			form = ComposeFormUnregistered(qd)
			form.recipient = recipient.user.email

		if form.is_valid():
			m = form.save(sender=request.user)
			if source:
				MessageExtra.objects.create(message=m[0], source=source)
	#		request.user.message_set.create(
	#			message=_(u"Message successfully sent."))
	#		success_url = reverse('messages_inbox')
	#		if request.GET.has_key('next'):
	#			success_url = request.GET['next']

		#update captcha
		challenge, captcha_response = captcha_settings.get_challenge()()
		store = CaptchaStore.objects.create(challenge=challenge, response=captcha_response)
		errors, error_elements, _ = get_errors(form)

		return Response({'errors': errors,
						'error_elements': error_elements,
						'captcha': {
							'img': reverse('captcha-image', kwargs=dict(key=store.hashkey)),
							'code': store.hashkey}})