Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
K
KawowyDzienniczek
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Rafal
KawowyDzienniczek
Commits
795f84f4
Commit
795f84f4
authored
Sep 15, 2016
by
lizonr1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add panel view and promotions sets
parent
1b09c20d
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
209 additions
and
40 deletions
+209
-40
panel.html
KawowyDzienniczek/App/page/templates/panel/panel.html
+1
-0
place_detail.html
KawowyDzienniczek/App/page/templates/panel/place_detail.html
+7
-4
place_list.html
KawowyDzienniczek/App/page/templates/panel/place_list.html
+1
-0
views.py
KawowyDzienniczek/App/page/views.py
+164
-26
init_promotionsets.py
...k/App/promotion/management/commands/init_promotionsets.py
+1
-1
models.py
KawowyDzienniczek/App/promotion/models.py
+3
-3
serializers.py
KawowyDzienniczek/App/promotion/serializers.py
+1
-1
base.py
KawowyDzienniczek/config/settings/base.py
+8
-1
urls.py
KawowyDzienniczek/config/urls.py
+23
-4
No files found.
KawowyDzienniczek/App/page/templates/panel/panel.html
View file @
795f84f4
...
...
@@ -6,6 +6,7 @@ Witaj {{ user }} w panelu Kawowego Dzienniczka.
<HR>
<a
href=
"/place"
>
Twoje kawiarnie
</a><BR>
<a
href=
"/beacon"
>
Twoje beacony
</a><BR>
<a
href=
"/user/{{ user.user_profile.get.id }}"
>
Twój profil
</a><BR>
<BR><hr>
<a
href=
"/logout"
>
Logout
</a>
...
...
KawowyDzienniczek/App/page/templates/panel/place_detail.html
View file @
795f84f4
...
...
@@ -7,14 +7,17 @@ Witaj {{ user }} w panelu Kawowego Dzienniczka.
{{ place.name }}
<BR>
{{ place.type }}
<BR>
<img
src=
"{{ place.screen_img }}"
>
<BR>
<img
src=
"{{ place.logo_img }}"
>
<BR>
{{ place.description }}
<BR>
{{ place.offer }}
<BR>
{{ place.promotion }}
<BR>
{% for promotion in place.promotion.all %}
<a
href=
"/promotion_set/{{ promotion.id }}"
>
{{ promotion.name }}
</a><BR>
{% endfor %}
<a
href=
"./promotion_set/add"
>
Dodaj liste promocji
</a><BR>
{{ place.localization }}
<BR>
{{ place.beacon }}
<BR>
<img
src=
"{{ place.screen_img }}"
>
<BR>
<img
src=
"{{ place.logo_img }}"
>
<BR>
<BR><hr>
<a
href=
"/place"
>
Wróć
</a><BR>
...
...
KawowyDzienniczek/App/page/templates/panel/place_list.html
View file @
795f84f4
...
...
@@ -10,6 +10,7 @@ Witaj {{ user }} w panelu Kawowego Dzienniczka.
{% endfor %}
<BR><hr>
<a
href=
"/place/add"
>
Dodaj kawiarnie
</a><BR>
<a
href=
"/panel"
>
Panel
</a>
<BR>
...
...
KawowyDzienniczek/App/page/views.py
View file @
795f84f4
from
django.contrib.auth
import
login
,
logout
from
django.contrib.auth.decorators
import
login_required
from
django.core.urlresolvers
import
reverse
from
django.contrib.auth.models
import
User
from
django.core.urlresolvers
import
reverse
,
reverse_lazy
from
django.http
import
HttpResponseRedirect
from
django.shortcuts
import
render
,
redirect
from
django.utils.decorators
import
method_decorator
from
django.views
import
generic
from
django.views.decorators.csrf
import
csrf_exempt
from
django.views.generic
import
FormView
,
View
,
DetailView
,
ListView
,
CreateView
,
UpdateView
from
django.views.generic
import
FormView
,
View
,
DetailView
,
ListView
,
CreateView
,
UpdateView
,
DeleteView
from
django.views.generic.base
import
TemplateResponseMixin
from
App.loyaltyMe.models
import
UserPlace
,
Place
from
App.page.forms
import
EmailAuthenticationForm
from
App.loyaltyMe.models
import
Place
,
Beacon
from
App.page.forms
import
EmailAuthenticationForm
,
PlaceForm
,
PromotionForm
from
App.promotion.models
import
PromotionSet
,
Promotion
from
App.user.models
import
UserProfile
class
CommingSoonView
(
generic
.
TemplateView
):
...
...
@@ -21,55 +24,115 @@ class MainPageView(generic.TemplateView):
template_name
=
'main_page/base.html'
class
PlacePageListView
(
ListView
):
template_name
=
'panel/place_list.html'
model
=
Place
def
get_queryset
(
self
):
qs
=
super
(
PlacePageListView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
owners
=
self
.
request
.
user
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PlacePageListView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
PlacePageDetailView
(
DetailView
):
template_name
=
'panel/place_detail.html'
model
=
Place
def
get_queryset
(
self
):
qs
=
super
(
PlacePageDetailView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
owners
=
self
.
request
.
user
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PlacePageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
PlaceCreateView
(
CreateView
):
template_name
=
'panel/place_form.html'
model
=
Place
fields
=
[
'name'
,
'type'
,
'description'
]
form_class
=
PlaceForm
def
get_success_url
(
self
):
return
reverse
(
'place_detail'
,
args
=
(
self
.
object
.
id
,))
def
get_success_url
(
self
,
id
):
return
reverse
(
'place_detail'
,
args
=
(
id
,))
def
get_form_kwargs
(
self
):
kwargs
=
super
(
PlaceCreateView
,
self
)
.
get_form_kwargs
()
kwargs
[
'user'
]
=
self
.
request
.
user
return
kwargs
def
form_valid
(
self
,
form
):
self
.
object
=
form
.
save
()
UserPlace
.
objects
.
create
(
user
=
self
.
request
.
user
,
place
=
self
.
object
)
return
super
(
PlaceCreateView
,
self
)
.
form_valid
(
form
)
new_place
=
form
.
save
()
new_place
.
owners
.
add
(
self
.
request
.
user
)
new_place
.
save
()
return
HttpResponseRedirect
(
self
.
get_success_url
(
new_place
.
id
))
class
PlaceUpdateView
(
UpdateView
):
template_name
=
'panel/place_form.html'
model
=
Place
fields
=
[
'name'
,
'type'
,
'description'
]
form_class
=
PlaceForm
def
get_success_url
(
self
):
return
reverse
(
'place_detail'
,
args
=
(
self
.
object
.
id
,))
def
get_form_kwargs
(
self
):
kwargs
=
super
(
PlaceCreateView
,
self
)
.
get_form_kwargs
()
kwargs
[
'user'
]
=
self
.
request
.
user
return
kwargs
class
PlacePageListView
(
ListView
):
template_name
=
'panel/place_list.html'
model
=
Place
class
BeaconPageListView
(
ListView
):
template_name
=
'panel/beacon_list.html'
model
=
Beacon
def
get_queryset
(
self
):
qs
=
super
(
Place
PageListView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
user
place_place__user
=
self
.
request
.
user
)
qs
=
super
(
Beacon
PageListView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
user
=
self
.
request
.
user
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
Place
PageListView
,
self
)
.
get_context_data
(
**
kwargs
)
context
=
super
(
Beacon
PageListView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
Place
PageDetailView
(
DetailView
):
template_name
=
'panel/
place
_detail.html'
model
=
Place
class
Beacon
PageDetailView
(
DetailView
):
template_name
=
'panel/
beacon
_detail.html'
model
=
Beacon
def
get_queryset
(
self
):
qs
=
super
(
Place
PageDetailView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
user
place_place__user
=
self
.
request
.
user
)
qs
=
super
(
Beacon
PageDetailView
,
self
)
.
get_queryset
()
return
qs
.
filter
(
user
=
self
.
request
.
user
)
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
Place
PageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
context
=
super
(
Beacon
PageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
BeaconCreateView
(
CreateView
):
template_name
=
'panel/beacon_form.html'
model
=
Beacon
fields
=
[
'name'
,
'description'
,
'uuid'
,
'major'
,
'minor'
]
def
get_success_url
(
self
,
id
):
return
reverse
(
'place_detail'
,
args
=
(
id
,))
def
form_valid
(
self
,
form
):
new_beacon
=
form
.
save
(
commit
=
False
)
new_beacon
.
user
=
self
.
request
.
user
new_beacon
.
save
()
return
HttpResponseRedirect
(
self
.
get_success_url
(
new_beacon
.
id
))
class
BeaconUpdateView
(
UpdateView
):
template_name
=
'panel/beacon_form.html'
model
=
Beacon
fields
=
[
'name'
,
'description'
,
'uuid'
,
'major'
,
'minor'
]
def
get_success_url
(
self
):
return
reverse
(
'beacon_detail'
,
args
=
(
self
.
object
.
id
,))
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
PanelPageView
(
generic
.
TemplateView
):
template_name
=
'panel/panel.html'
...
...
@@ -104,3 +167,78 @@ class LogoutView(TemplateResponseMixin, View):
logout
(
self
.
request
)
return
render
(
request
,
self
.
template_name
)
return
render
(
request
,
self
.
template_name
)
class
UserPageDetailView
(
DetailView
):
template_name
=
'panel/user_detail.html'
model
=
UserProfile
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
UserPageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
PromotionSetPageDetailView
(
DetailView
):
template_name
=
'panel/promotion_set_detail.html'
model
=
PromotionSet
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PromotionSetPageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
PromotionSetCreateView
(
CreateView
):
template_name
=
'panel/promotion_set_form.html'
model
=
PromotionSet
fields
=
[
'name'
,
]
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PromotionSetCreateView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
def
get_success_url
(
self
,
id
):
return
reverse
(
'promotion_set_detail'
,
args
=
(
id
,))
def
form_valid
(
self
,
form
,
**
kwargs
):
new_promotion_set
=
form
.
save
()
place
=
Place
.
objects
.
get
(
pk
=
self
.
kwargs
.
get
(
'pk'
))
new_promotion_set
.
place_promotion
.
add
(
place
)
new_promotion_set
.
save
()
return
HttpResponseRedirect
(
self
.
get_success_url
(
new_promotion_set
.
id
))
class
PromotionPageDetailView
(
DetailView
):
template_name
=
'panel/promotion_detail.html'
model
=
Promotion
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PromotionPageDetailView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
class
PromotionCreateView
(
CreateView
):
template_name
=
'panel/promotion_form.html'
model
=
Promotion
form_class
=
PromotionForm
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
PromotionCreateView
,
self
)
.
get_context_data
(
**
kwargs
)
return
context
def
get_success_url
(
self
,
id
):
return
reverse
(
'promotion_detail'
,
args
=
(
id
,))
def
form_valid
(
self
,
form
,
**
kwargs
):
new_promotion
=
form
.
save
()
promotion_set
=
PromotionSet
.
objects
.
get
(
pk
=
self
.
kwargs
.
get
(
'pk'
))
promotion_set
.
promotions
.
add
(
new_promotion
)
new_promotion
.
save
()
return
HttpResponseRedirect
(
self
.
get_success_url
(
new_promotion
.
id
))
class
PromotionDeleteView
(
DeleteView
):
template_name
=
'panel/promotion_confirm_delete.html'
model
=
Promotion
success_url
=
reverse_lazy
(
'place_list'
)
\ No newline at end of file
KawowyDzienniczek/App/promotion/management/commands/init_promotionsets.py
View file @
795f84f4
...
...
@@ -9,7 +9,7 @@ class Command(BaseCommand):
def
handle
(
self
,
*
args
,
**
options
):
promotion_sets
=
[
# 'name',products
[
'
Promocja1
'
,
[
'10
%
'
,
'20
%
'
]],
[
'
Wakacyjna Promocja
'
,
[
'10
%
'
,
'20
%
'
]],
[
'Promocja2'
,
[
'20
%
'
,
'50
%
'
]],
]
print
(
"Creating PromotionSets"
)
...
...
KawowyDzienniczek/App/promotion/models.py
View file @
795f84f4
...
...
@@ -41,8 +41,8 @@ class Promotion(models.Model):
name
=
models
.
CharField
(
max_length
=
20
)
description
=
models
.
CharField
(
max_length
=
50
)
code
=
models
.
CharField
(
max_length
=
10
)
img
=
models
.
ImageField
()
code
=
models
.
CharField
(
max_length
=
10
,
blank
=
True
)
img
=
models
.
ImageField
(
blank
=
True
)
status
=
models
.
CharField
(
max_length
=
2
,
choices
=
STATUS_CHOICES
,
default
=
AVAILABLE
)
task
=
models
.
ForeignKey
(
Task
)
left_number
=
models
.
IntegerField
(
null
=
True
)
...
...
@@ -55,7 +55,7 @@ class Promotion(models.Model):
class
PromotionSet
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
20
)
promotions
=
models
.
ManyToManyField
(
'promotion.Promotion'
,
default
=
''
)
promotions
=
models
.
ManyToManyField
(
'promotion.Promotion'
,
default
=
''
,
related_name
=
'promotion_set'
)
def
__str__
(
self
):
return
self
.
name
...
...
KawowyDzienniczek/App/promotion/serializers.py
View file @
795f84f4
...
...
@@ -26,7 +26,7 @@ class PromotionSetSerializer(serializers.HyperlinkedModelSerializer):
class
Meta
:
model
=
Offer
fields
=
(
'url'
,
'id'
,
'promotions'
)
fields
=
(
'url'
,
'id'
,
'
name'
,
'
promotions'
)
class
UserPromotionSerializer
(
serializers
.
HyperlinkedModelSerializer
):
user
=
UserSerializer
()
...
...
KawowyDzienniczek/config/settings/base.py
View file @
795f84f4
...
...
@@ -133,7 +133,14 @@ STATIC_URL = '/static/'
MEDIA_URL
=
'/media/'
APPEND_SLASH
=
False
STATIC_ROOT
=
'staticfiles'
STATIC_URL
=
'/static/'
STATICFILES_DIRS
=
(
os
.
path
.
join
(
BASE_DIR
,
'static'
),
)
PROJECT_DIR
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
PROJECT_ROOT
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
STATIC_ROOT
=
os
.
path
.
join
(
PROJECT_DIR
,
'static'
)
...
...
KawowyDzienniczek/config/urls.py
View file @
795f84f4
...
...
@@ -18,7 +18,10 @@ from django.contrib import admin
from
rest_framework
import
routers
from
App.loyaltyMe
import
views
as
loyalty_views
from
App.page.views
import
coming_soon_page
,
main_page
,
login
from
App.page.views
import
CommingSoonView
,
MainPageView
,
LoginView
,
LogoutView
,
PanelPageView
,
PlacePageListView
,
\
PlacePageDetailView
,
PlaceCreateView
,
PlaceUpdateView
,
BeaconPageListView
,
BeaconCreateView
,
BeaconUpdateView
,
\
BeaconPageDetailView
,
UserPageDetailView
,
PromotionSetPageDetailView
,
PromotionPageDetailView
,
\
PromotionSetCreateView
,
PromotionCreateView
,
PromotionDeleteView
from
App.user
import
views
as
user_views
from
App.promotion
import
views
as
promotion_views
from
App.user.views
import
schema_view
...
...
@@ -40,9 +43,25 @@ router.register(r'tasks', promotion_views.TaskViewSet)
urlpatterns
=
[
url
(
r'^api/'
,
include
(
router
.
urls
)),
url
(
r'^admin/'
,
include
(
admin
.
site
.
urls
)),
url
(
r'^$'
,
coming_soon_page
,
name
=
'post_list'
),
url
(
r'^main/$'
,
main_page
,
name
=
'post_list'
),
url
(
r'^login/$'
,
login
,
name
=
'post_list'
),
url
(
r'^$'
,
CommingSoonView
.
as_view
(),
name
=
'cooming_soon'
),
url
(
r'^main/$'
,
MainPageView
.
as_view
(),
name
=
'main_page'
),
url
(
r'^panel/$'
,
PanelPageView
.
as_view
(),
name
=
'main_page'
),
url
(
r'^login/$'
,
LoginView
.
as_view
(),
name
=
'login'
),
url
(
r'^logout/$'
,
LogoutView
.
as_view
(),
name
=
'logout'
),
url
(
r'^user/(?P<pk>\d+)/$'
,
UserPageDetailView
.
as_view
(),
name
=
'user_detail'
),
url
(
r'^promotion_set/(?P<pk>\d+)/$'
,
PromotionSetPageDetailView
.
as_view
(),
name
=
'promotion_set_detail'
),
url
(
r'^promotion_set/(?P<pk>\d+)/promotion/add$'
,
PromotionCreateView
.
as_view
(),
name
=
'promotion_create'
),
url
(
r'^place/(?P<pk>\d+)/promotion_set/add$'
,
PromotionSetCreateView
.
as_view
(),
name
=
'promotion_set_create'
),
url
(
r'^promotion/(?P<pk>\d+)/$'
,
PromotionPageDetailView
.
as_view
(),
name
=
'promotion_detail'
),
url
(
r'^promotion/(?P<pk>\d+)/delete$'
,
PromotionDeleteView
.
as_view
(),
name
=
'promotion_delete'
),
url
(
r'^place/$'
,
PlacePageListView
.
as_view
(),
name
=
'place_list'
),
url
(
r'^place/add$'
,
PlaceCreateView
.
as_view
(),
name
=
'place_add'
),
url
(
r'^place/(?P<pk>\d+)/update$'
,
PlaceUpdateView
.
as_view
(),
name
=
'place_update'
),
url
(
r'^place/(?P<pk>\d+)/$'
,
PlacePageDetailView
.
as_view
(),
name
=
'place_detail'
),
url
(
r'^beacon/$'
,
BeaconPageListView
.
as_view
(),
name
=
'beacon_list'
),
url
(
r'^beacon/add$'
,
BeaconCreateView
.
as_view
(),
name
=
'beacon_add'
),
url
(
r'^beacon/(?P<pk>\d+)/update$'
,
BeaconUpdateView
.
as_view
(),
name
=
'beacon_update'
),
url
(
r'^beacon/(?P<pk>\d+)/$'
,
BeaconPageDetailView
.
as_view
(),
name
=
'beacon_detail'
),
url
(
r'^api-auth/'
,
include
(
'rest_framework.urls'
,
namespace
=
'rest_framework'
)),
url
(
r'^api-token-auth/'
,
user_views
.
obtain_auth_token
),
url
(
r'^docs/'
,
schema_view
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment