Skip to content
This repository has been archived by the owner on Nov 25, 2024. It is now read-only.

Commit

Permalink
3º sprint
Browse files Browse the repository at this point in the history
  • Loading branch information
gjmveloso committed Feb 20, 2011
1 parent 43d71fd commit 902a088
Show file tree
Hide file tree
Showing 10 changed files with 129 additions and 11 deletions.
Binary file modified database.db
Binary file not shown.
8 changes: 7 additions & 1 deletion settings.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
# Django settings for eventex project.

ON_HERIKE = False
DEBUG = True
TEMPLATE_DEBUG = DEBUG

import os

PROJECT_DIR = os.path.dirname(__file__)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
if ON_HERIKE:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
else:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = ''
EMAIL_HOST_USER = ''
Expand Down Expand Up @@ -105,6 +110,7 @@
'subscription',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'south',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
38 changes: 36 additions & 2 deletions subscription/admin.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,52 @@
# encoding: utf-8
import datetime
from django.contrib import admin
from subscription.models import Subscription
from django.utils.translation import ugettext as _
from django.utils.translation import ungettext
from django.http import HttpResponse
from django.conf.urls.defaults import patterns, url

class SubscriptionAdmin(admin.ModelAdmin):
list_display = ('name', 'email', 'phone', 'created_at', 'subscribed_today')
list_display = ('name', 'email', 'phone', 'created_at', 'subscribed_today', 'paid')
date_hierarchy = 'created_at'
search_fields = ('name', 'email', 'phone', 'cpf', 'created_at')
list_filter = ['created_at']
list_filter = ['created_at', 'paid']

actions = ['mark_as_paid']

def subscribed_today(self, obj):
return obj.created_at.date() == datetime.date.today()

subscribed_today.short_description = 'Inscrito hoje?'
subscribed_today.boolean = True

def mark_as_paid(self, request, queryset):
count = queryset.update(paid=True)
msg = ungettext (
u'%(count)d inscrição foi marcada como paga.',
u'%(count)d inscrições foram marcadas como pagas.',
count) % {'count': count}
self.message_user(request, msg)

mark_as_paid.short_description = _(u'Marcar como pagas')

def export_subscriptions(self, request):
subscriptions = self.model.objects.all()
rows = [','.join([s.name, s.email]) for s in subscriptions] #list comprehension
response = HttpResponse('\r\n'.join(rows))
response.mimetype = 'text/csv'
response['Content-Disposition'] = 'attachment; filename=inscritos.csv'

return response

def get_urls(self):
default_urls = super(SubscriptionAdmin, self).get_urls()
new_urls = patterns('',
url(r'^exportar-inscricoes/$', self.admin_site.admin_view(self.export_subscriptions),
name='export_subscriptions'))

return new_urls + default_urls


admin.site.register(Subscription, SubscriptionAdmin)
51 changes: 50 additions & 1 deletion subscription/forms.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,56 @@
# encoding: utf-8

from django import forms
from subscription.models import Subscription
from django.utils.translation import ugettext as _
from subscription import validators
from django.core.validators import EMPTY_VALUES

class PhoneWidget(forms.MultiWidget):
def __init__(self, attrs=None):
widgets = (
forms.TextInput(attrs=attrs),
forms.TextInput(attrs=attrs))
super(PhoneWidget, self).__init__(widgets, attrs)

def decompress(self, value):
if value:
return value.split('‐')
return [None, None]

class PhoneField(forms.MultiValueField):

widget = PhoneWidget

def __init__(self, *args, **kwargs):
fields = (forms.IntegerField(), forms.IntegerField())
super(PhoneField, self).__init__(fields, *args, **kwargs)

def compress(self, data_list):
if data_list:
if data_list[0] in EMPTY_VALUES:
raise forms.ValidationError(_(u'DDD inválido.'))
if data_list[1] in EMPTY_VALUES:
raise forms.ValidationError(_(u'Número inválido.'))
return '%s‐%s' % tuple(data_list)
return ""

class SubscriptionForm(forms.ModelForm):

phone = PhoneField(required=False)

class Meta:
model = Subscription
exclude= ("created_at",)
exclude= ('created_at', 'paid')

def clean(self):
super(SubscriptionForm, self).clean()
if not self.cleaned_data.get('email') and not self.cleaned_data.get('phone'):
raise forms.ValidationError(_(u'Você deve informar pelo menos o e-mail ou o telefone.'))
return self.cleaned_data






10 changes: 7 additions & 3 deletions subscription/models.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
#coding: utf-8
# encoding: utf-8

from django.db import models
from subscription import validators

# Create your models here.

class Subscription(models.Model):
name = models.CharField('Nome', max_length=100)
cpf = models.CharField('CPF', max_length=11, unique=True)
email = models.EmailField('E-mail', unique=True)
cpf = models.CharField('CPF', max_length=11, unique=True, validators=[validators.CpfValidator])
email = models.EmailField('E-mail', unique=True, blank=True)
phone = models.CharField('Telefone', max_length=20, blank=True)
created_at = models.DateTimeField('Data inscrição', auto_now_add=True)
paid = models.BooleanField('Pagou?', default=False)

def __unicode__(self):
return self.name
Expand All @@ -18,3 +20,5 @@ class Meta:
ordering = ["created_at"]
verbose_name = u"Inscrição"
verbose_name_plural = u"Inscrições"


13 changes: 13 additions & 0 deletions subscription/validators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# encoding: utf-8
from django.utils.translation import ugettext as _
from django.core.exceptions import ValidationError

def CpfValidator(value):
if not value.isdigit():
raise ValidationEror(_(u'O CPF deve conter apenas números'))
if len(value) != 11:
raise ValidationError(_(u'O CPF deve conter 11 dígitos'))




2 changes: 1 addition & 1 deletion subscription/views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# coding: utf-8
# encoding: utf-8
# Create your views here.

from django.http import HttpResponseRedirect
Expand Down
13 changes: 13 additions & 0 deletions templates/admin/subscription/change_list.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{% extends 'admin/change_list.html' %}
{% block object-tools %}

<ul class="object-tools" style="margin-right: 150px;">
<li>
<a href="{% url admin:export_subscriptions %}" class="addlink">
Exportar inscritos
</a>
</li>
</ul>
{{ block.super }}
{% endblock object-tools %}

3 changes: 1 addition & 2 deletions templates/master.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@ <h1><a href="#">EventeX</a></h1>
<div id="header">
<div id="menu">
<ul>
<li><a href="#" class="first">Home</a></li>
<li><a href="{% url home %}" class="first">Home</a></li>
<li><a href="{% url subscription:subscribe %}">Inscrições</a></li>
<li><a href="#">Contato</a></li>
<li><a href="#">Admin</a></li>
</ul>
</div>
<!-- end #menu -->
Expand Down
2 changes: 1 addition & 1 deletion urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
admin.autodiscover()

urlpatterns = patterns('',
(r'^$', homepage),
url(r'^$', homepage, name="home"),
(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.MEDIA_ROOT }),
(r'^inscricao/', include('subscription.urls', namespace='subscription')),
# Example:
Expand Down

0 comments on commit 902a088

Please sign in to comment.