From f1128609d7c1c234ca2b6198470ff836eb7eac90 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Thu, 15 Sep 2016 14:52:52 +0200 Subject: [PATCH] general: sms are separated from mail announces (#12918) --- corbo/forms.py | 11 +++++- corbo/manage_urls.py | 11 +++++- corbo/migrations/0006_sms.py | 26 ++++++++++++++ corbo/models.py | 17 +++++++++- corbo/templates/corbo/category_detail.html | 11 +++--- corbo/templates/corbo/manage.html | 4 +++ corbo/views.py | 54 +++++++++++++++++++++++++++--- 7 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 corbo/migrations/0006_sms.py diff --git a/corbo/forms.py b/corbo/forms.py index 423cab4..85c607f 100644 --- a/corbo/forms.py +++ b/corbo/forms.py @@ -1,7 +1,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ -from .models import Announce, Category, Broadcast, channel_choices +from .models import Announce, Category, Broadcast, SMS class AnnounceForm(forms.ModelForm): @@ -27,3 +27,12 @@ class CategoryForm(forms.ModelForm): class Meta: fields = ('name', ) model = Category + + +class SMSForm(forms.ModelForm): + + class Meta: + model = SMS + fields = '__all__' + widgets = {'expedition_time': forms.TextInput(attrs={'class': 'datetimepicker', + 'readonly': True})} diff --git a/corbo/manage_urls.py b/corbo/manage_urls.py index 089fc1e..47fb99e 100644 --- a/corbo/manage_urls.py +++ b/corbo/manage_urls.py @@ -2,7 +2,8 @@ from django.conf.urls import patterns, include, url from .views import add_announce, edit_announce, delete_announce, \ add_category, edit_category, view_category, delete_category, manage, \ - add_announce_for_category, menu_json + add_announce_for_category, add_sms, add_sms_for_category, edit_sms, \ + delete_sms, menu_json urlpatterns = patterns('', url(r'^$', manage, name='manage'), @@ -15,6 +16,14 @@ urlpatterns = patterns('', name='view_category'), url(r'^category/(?P\d+)/announce/$', add_announce_for_category, name='add_announce_for_category'), + url(r'^sms/add$', add_sms, + name='add_sms'), + url(r'^category/(?P\d+)/sms/$', add_sms_for_category, + name='add_sms_for_category'), + url(r'^sms/edit/(?P\d+)$', edit_sms, + name='edit_sms'), + url(r'^sms/delete/(?P\d+)$', delete_sms, + name='delete_sms'), url(r'^category/add$', add_category, name='add_category'), url(r'^category/edit/(?P\d+)$', edit_category, diff --git a/corbo/migrations/0006_sms.py b/corbo/migrations/0006_sms.py new file mode 100644 index 0000000..c22af99 --- /dev/null +++ b/corbo/migrations/0006_sms.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('corbo', '0005_auto_20160504_1747'), + ] + + operations = [ + migrations.CreateModel( + name='SMS', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('content', models.TextField(help_text='160 chars maximum', max_length=160)), + ('expedition_time', models.DateTimeField(null=True, verbose_name='Expedition time', blank=True)), + ('category', models.ForeignKey(verbose_name='category', to='corbo.Category')), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/corbo/models.py b/corbo/models.py index 141c0f9..bde1075 100644 --- a/corbo/models.py +++ b/corbo/models.py @@ -19,7 +19,8 @@ from ckeditor.fields import RichTextField channel_choices = ( ('mailto', _('Email')), - ('homepage', _('Homepage')) + ('homepage', _('Homepage')), + ('sms', _('SMS')) ) logger = logging.getLogger(__name__) @@ -34,6 +35,9 @@ class Category(models.Model): def get_announces_count(self): return self.announce_set.all().count() + def get_sms_count(self): + return self.sms_set.all().count() + def get_subscriptions_count(self): return self.subscription_set.all().count() @@ -139,3 +143,14 @@ class Subscription(models.Model): class Meta: unique_together = ('category', 'identifier', 'uuid') + + +class SMS(models.Model): + category = models.ForeignKey('Category', verbose_name=_('category')) + content = models.TextField(max_length=160, help_text=_('160 chars maximum')) + expedition_time = models.DateTimeField(_('Expedition time'), blank=True, + null=True) + + @property + def sent(self): + return self.expedition_time and self.expedition_time > timezone.now() diff --git a/corbo/templates/corbo/category_detail.html b/corbo/templates/corbo/category_detail.html index 4290871..6f0cc17 100644 --- a/corbo/templates/corbo/category_detail.html +++ b/corbo/templates/corbo/category_detail.html @@ -12,12 +12,19 @@

{{ object.name }}

{% trans 'Delete' %} {% trans 'Rename' %} +{% trans 'New SMS' %} {% trans 'New announce' %} {% endblock %} {% block content %}
-{% empty %} -
- {% trans "No announces yet." %} -
{% endfor %} {% endblock %} diff --git a/corbo/templates/corbo/manage.html b/corbo/templates/corbo/manage.html index d9074fa..41459d6 100644 --- a/corbo/templates/corbo/manage.html +++ b/corbo/templates/corbo/manage.html @@ -4,6 +4,7 @@ {% block appbar %}

{% trans "Categories" %}

{% trans 'New category' %} +{% trans 'New sms' %} {% trans 'New announce' %} {% endblock %} @@ -18,6 +19,9 @@ {% plural %} {{ announces_number }} announces {% endblocktrans %} / + {% blocktrans with sms_number=obj.get_sms_count %} + {{ sms_number }} sms + {% endblocktrans %} / {% blocktrans count subscriptions_number=obj.get_subscriptions_count %} {{ subscriptions_number }} subscription {% plural %} diff --git a/corbo/views.py b/corbo/views.py index ce5402c..006fd06 100644 --- a/corbo/views.py +++ b/corbo/views.py @@ -19,7 +19,7 @@ from django.contrib.auth import views as auth_views from django.utils.translation import ugettext_lazy as _ import models -from .forms import AnnounceForm, CategoryForm +from .forms import AnnounceForm, CategoryForm, SMSForm try: from mellon.utils import get_idps @@ -60,18 +60,21 @@ class AnnounceCreateView(CreateView): add_announce = AnnounceCreateView.as_view() -class AnnounceForCategoryCreateView(AnnounceCreateView): - +class ForCategoryMixin(object): def get_initial(self): - initial = super(AnnounceForCategoryCreateView, self).get_initial() + initial = super(ForCategoryMixin, self).get_initial() initial['category'] = models.Category.objects.get(pk=self.kwargs['pk']) return initial def get_context_data(self, **kwargs): - context = super(AnnounceForCategoryCreateView, self).get_context_data(**kwargs) + context = super(ForCategoryMixin, self).get_context_data(**kwargs) context['category'] = kwargs['form'].initial['category'] return context + +class AnnounceForCategoryCreateView(ForCategoryMixin, AnnounceCreateView): + pass + add_announce_for_category = AnnounceForCategoryCreateView.as_view() @@ -98,6 +101,46 @@ class AnnounceDeleteView(DeleteView): delete_announce = AnnounceDeleteView.as_view() + +class SmsCreateView(CreateView): + model = models.SMS + form_class = SMSForm + template_name = 'corbo/sms_form.html' + + def get_success_url(self): + return reverse('view_category', kwargs={'pk': self.object.category.pk}) + +add_sms = SmsCreateView.as_view() + + +class SmsForCategoryCreateView(ForCategoryMixin, SmsCreateView): + pass + +add_sms_for_category = SmsForCategoryCreateView.as_view() + + +class SmsEditView(UpdateView): + model = models.SMS + form_class = SMSForm + + def get_context_data(self, **kwargs): + context = super(SmsEditView, self).get_context_data(**kwargs) + category_id = kwargs['form'].initial['category'] + context['category'] = models.Category.objects.get(pk=category_id) + return context + + def get_success_url(self): + return reverse('view_category', kwargs={'pk': self.object.category.pk}) + +edit_sms = SmsEditView.as_view() + + +class SMSDeleteView(DeleteView): + model = models.SMS + +delete_sms = SMSDeleteView.as_view() + + class CategoryCreateView(CreateView): form_class = CategoryForm template_name = 'corbo/category_form.html' @@ -128,6 +171,7 @@ class CategoryView(DetailView): def get_context_data(self, **kwargs): context = super(CategoryView, self).get_context_data(**kwargs) context['announces'] = self.object.announce_set.all() + context['sms_messages'] = self.object.sms_set.all() return context view_category = CategoryView.as_view() -- 2.9.3