From e88815d9cc3765bac4b895854da5333472f975bf Mon Sep 17 00:00:00 2001 From: Milos Mrdakovic Date: Mon, 25 Jun 2018 16:04:57 +0300 Subject: [PATCH] Add sponsoring page --- pyconbalkan/settings.py | 1 + pyconbalkan/sponsoring/__init__.py | 0 pyconbalkan/sponsoring/admin.py | 3 + pyconbalkan/sponsoring/apps.py | 5 ++ .../sponsoring/migrations/0001_initial.py | 25 ++++++++ pyconbalkan/sponsoring/migrations/__init__.py | 0 pyconbalkan/sponsoring/models.py | 63 +++++++++++++++++++ pyconbalkan/sponsoring/serializers.py | 8 +++ .../sponsoring/templates/sponsoring.html | 24 +++++++ pyconbalkan/sponsoring/tests.py | 3 + pyconbalkan/sponsoring/views.py | 27 ++++++++ pyconbalkan/urls.py | 2 + 12 files changed, 161 insertions(+) create mode 100644 pyconbalkan/sponsoring/__init__.py create mode 100644 pyconbalkan/sponsoring/admin.py create mode 100644 pyconbalkan/sponsoring/apps.py create mode 100644 pyconbalkan/sponsoring/migrations/0001_initial.py create mode 100644 pyconbalkan/sponsoring/migrations/__init__.py create mode 100644 pyconbalkan/sponsoring/models.py create mode 100644 pyconbalkan/sponsoring/serializers.py create mode 100644 pyconbalkan/sponsoring/templates/sponsoring.html create mode 100644 pyconbalkan/sponsoring/tests.py create mode 100644 pyconbalkan/sponsoring/views.py diff --git a/pyconbalkan/settings.py b/pyconbalkan/settings.py index 8455cde5..630d4fbc 100644 --- a/pyconbalkan/settings.py +++ b/pyconbalkan/settings.py @@ -48,6 +48,7 @@ 'pyconbalkan.cfp', 'pyconbalkan.contact', 'pyconbalkan.news', + 'pyconbalkan.sponsoring', # others 'rest_framework', 'django_countries', diff --git a/pyconbalkan/sponsoring/__init__.py b/pyconbalkan/sponsoring/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pyconbalkan/sponsoring/admin.py b/pyconbalkan/sponsoring/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/pyconbalkan/sponsoring/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/pyconbalkan/sponsoring/apps.py b/pyconbalkan/sponsoring/apps.py new file mode 100644 index 00000000..65d58466 --- /dev/null +++ b/pyconbalkan/sponsoring/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class SponsoringConfig(AppConfig): + name = 'sponsoring' diff --git a/pyconbalkan/sponsoring/migrations/0001_initial.py b/pyconbalkan/sponsoring/migrations/0001_initial.py new file mode 100644 index 00000000..7d515d19 --- /dev/null +++ b/pyconbalkan/sponsoring/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# Generated by Django 2.0.5 on 2018-06-25 10:56 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Sponsoring', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('organization', models.CharField(blank=True, max_length=100, null=True)), + ('name', models.CharField(max_length=256)), + ('phone', models.CharField(blank=True, max_length=17, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", regex='^\\+?1?\\d{9,15}$')])), + ('email', models.EmailField(max_length=254)), + ], + ), + ] diff --git a/pyconbalkan/sponsoring/migrations/__init__.py b/pyconbalkan/sponsoring/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pyconbalkan/sponsoring/models.py b/pyconbalkan/sponsoring/models.py new file mode 100644 index 00000000..0f911298 --- /dev/null +++ b/pyconbalkan/sponsoring/models.py @@ -0,0 +1,63 @@ +from django.db import models +from django import forms +from django.forms import ModelForm +from django.core.validators import RegexValidator +from django.forms.widgets import RadioSelect + + +class Sponsoring(models.Model): + organization = models.CharField(max_length=100, null=True, blank=True) + name = models.CharField(max_length=256) + phone_regex = RegexValidator( + regex=r'^\+?1?\d{9,15}$', + message= + "Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed." + ) + phone = models.CharField( + validators=[phone_regex], max_length=17, blank=True) + email = models.EmailField() + + def __str__(self): + sponsoring_str = '{} | {} | {}'.format(self.name, self.phone, + self.email) + if self.organization: + return '{} | {}'.format(sponsoring_str, self.organization) + return sponsoring_str + + +class SponsoringForm(ModelForm): + organization = forms.CharField( + widget=forms.TextInput(attrs={'class': 'form-control'}), + max_length=100, + required=False, + label='Sponsor Organization') + organization_type = forms.ChoiceField(choices=((0, 'For - profit corporation'), (1, 'Foundation / Non profit')), label='Type of organization', widget=RadioSelect()) + name = forms.CharField( + widget=forms.TextInput(attrs={'class': 'form-control'}), + max_length=256, + error_messages={'required': 'Please, enter your name.'}, + label='Name and Surname') + phone = forms.CharField( + widget=forms.TextInput(attrs={'class': 'form-control'}), + max_length=17, + error_messages={ + 'required': 'Please enter your phone number.', + 'invalid': 'Please enter a valid phone number.' + }, + label='Phone number') + email = forms.EmailField( + widget=forms.TextInput(attrs={'class': 'form-control'}), + error_messages={ + 'required': 'Please, enter a valid email address.', + 'invalid': 'Please enter a valid email address.' + }, + label='e-mail') + CHOICES = (('platinum', '5000'), + ('gold', '2500'), + ('silver', '1000'), + ('bronze', '500'),) + level = forms.ChoiceField(choices=CHOICES, label='Level of sponsorship', widget=RadioSelect()) + + class Meta: + model = Sponsoring + fields = '__all__' diff --git a/pyconbalkan/sponsoring/serializers.py b/pyconbalkan/sponsoring/serializers.py new file mode 100644 index 00000000..c4299259 --- /dev/null +++ b/pyconbalkan/sponsoring/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from pyconbalkan.sponsoring.models import Sponsoring + + +class SponsoringSerializer(serializers.ModelSerializer): + class Meta: + model = Sponsoring + fields = '__all__' diff --git a/pyconbalkan/sponsoring/templates/sponsoring.html b/pyconbalkan/sponsoring/templates/sponsoring.html new file mode 100644 index 00000000..c24746d4 --- /dev/null +++ b/pyconbalkan/sponsoring/templates/sponsoring.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} + +{% block main_content %} + +{# Sponsoring #} + +

Sponsoring

+
+ +
+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+ +{% if success %} +
+ {{ success }} +
+{% endif %} + +{% endblock %} diff --git a/pyconbalkan/sponsoring/tests.py b/pyconbalkan/sponsoring/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/pyconbalkan/sponsoring/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/pyconbalkan/sponsoring/views.py b/pyconbalkan/sponsoring/views.py new file mode 100644 index 00000000..91d2becf --- /dev/null +++ b/pyconbalkan/sponsoring/views.py @@ -0,0 +1,27 @@ +from rest_framework import viewsets +from rest_framework.permissions import AllowAny + +from pyconbalkan.sponsoring.serializers import SponsoringSerializer +from pyconbalkan.sponsoring.models import Sponsoring +from django.shortcuts import render +from .models import SponsoringForm + + +class SponsoringViewSet(viewsets.ModelViewSet): + queryset = Sponsoring.objects.all() + serializer_class = SponsoringSerializer + permission_classes = [AllowAny] + + +def sponsoring_view(request): + context = {} + if request.method == 'POST': + form = SponsoringForm(request.POST) + if form.is_valid(): + form.save() + context['success'] = 'Thank you for taking the part in PyCon Balkan 2018! ' + form = SponsoringForm() + else: + form = SponsoringForm() + context['form'] = form + return render(request, 'sponsoring.html', context) diff --git a/pyconbalkan/urls.py b/pyconbalkan/urls.py index 2bc61eca..a0f3c182 100644 --- a/pyconbalkan/urls.py +++ b/pyconbalkan/urls.py @@ -22,6 +22,7 @@ from pyconbalkan.contact.api_urls import router as contact from pyconbalkan.news.api_urls import router as news from pyconbalkan.timetable.views import timetable_view +from pyconbalkan.sponsoring.views import sponsoring_view from markdownx import urls as markdownx @@ -42,6 +43,7 @@ path('robots.txt', TemplateView.as_view(template_name='robots.txt', content_type='text/plain')), path('organizers//', organizer_view, name='organizer_detail'), path('organizers', organizers_listview, name='organizers'), + path('sponsoring', sponsoring_view, name='sponsoring'), path('about', about_view, name='about'), path('contact', contact_view, name='contact'), path('cfp', cfp_view, name='cfp'),