mirror of
https://github.com/nikdoof/vapemap.git
synced 2025-12-14 06:42:17 +00:00
171 lines
6.5 KiB
Python
171 lines
6.5 KiB
Python
from django.http import HttpResponseRedirect
|
|
from django.template import RequestContext
|
|
from django.shortcuts import render_to_response
|
|
from django import forms
|
|
from django.db import transaction
|
|
from django.db.models import Count
|
|
from django.contrib import admin
|
|
from django.contrib.contenttypes.generic import GenericStackedInline
|
|
from .models import Chain, Store, Address, Brand, ClaimRequest, Link, LinkType, County, Country
|
|
|
|
|
|
class LinkInlineAdmin(GenericStackedInline):
|
|
model = Link
|
|
ct_field = 'object_type'
|
|
|
|
|
|
class ChainAdmin(admin.ModelAdmin):
|
|
list_filter = ['active']
|
|
list_display = ['name']
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
search_fields = ['name']
|
|
inlines = [
|
|
LinkInlineAdmin,
|
|
]
|
|
|
|
class StoreAdmin(admin.ModelAdmin):
|
|
list_filter = ['chain', 'active']
|
|
list_display = ['name', 'store_type', 'active']
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
search_fields = ['name']
|
|
inlines = [
|
|
LinkInlineAdmin,
|
|
]
|
|
actions = ['add_brand', 'set_chain']
|
|
|
|
class AddBrandForm(forms.Form):
|
|
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
|
|
brand = forms.ModelChoiceField(Brand.objects)
|
|
|
|
def add_brand(self, request, queryset):
|
|
form = None
|
|
if 'apply' in request.POST:
|
|
form = self.AddBrandForm(request.POST)
|
|
if form.is_valid():
|
|
count = queryset.count()
|
|
brand = form.cleaned_data['brand']
|
|
with transaction.commit_on_success():
|
|
for store in queryset:
|
|
store.brands.add(brand)
|
|
if count > 1:
|
|
plural = 's'
|
|
else:
|
|
plural = ''
|
|
self.message_user(request, "Successfully added %s to %d store%s." % (brand, count, plural))
|
|
return HttpResponseRedirect(request.get_full_path())
|
|
if not form:
|
|
form = self.AddBrandForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
|
|
return render_to_response('admin/add_brand.html', {'stores': queryset, 'brand_form': form }, RequestContext(request))
|
|
|
|
add_brand.short_description = "Add brand to the selected stores"
|
|
|
|
class SetChainForm(forms.Form):
|
|
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
|
|
chain = forms.ModelChoiceField(Chain.objects)
|
|
|
|
def set_chain(self, request, queryset):
|
|
form = None
|
|
if 'apply' in request.POST:
|
|
form = self.SetChainForm(request.POST)
|
|
if form.is_valid():
|
|
count = queryset.count()
|
|
chain = form.cleaned_data['chain']
|
|
with transaction.commit_on_success():
|
|
for store in queryset:
|
|
store.chain = chain
|
|
store.save()
|
|
if count > 1:
|
|
plural = 's'
|
|
else:
|
|
plural = ''
|
|
self.message_user(request, "Successfully set %d store%s to %s." % (count, plural, chain))
|
|
return HttpResponseRedirect(request.get_full_path())
|
|
if not form:
|
|
form = self.SetChainForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
|
|
return render_to_response('admin/set_chain.html', {'stores': queryset, 'chain_form': form }, RequestContext(request))
|
|
|
|
set_chain.short_description = "Set the selected store's chain"
|
|
|
|
|
|
class ClaimAdmin(admin.ModelAdmin):
|
|
list_filter = ['status']
|
|
list_display = ['generic_obj', 'user', 'status', 'note']
|
|
actions = ['approve_request']
|
|
|
|
|
|
def approve_request(self, request, queryset):
|
|
qs = queryset.filter(status=ClaimRequest.CLAIM_STATUS_PENDING)
|
|
for obj in qs:
|
|
obj.status = ClaimRequest.CLAIM_STATUS_APPROVED
|
|
target = obj.generic_obj
|
|
target.editor = obj.user
|
|
target.save()
|
|
obj.save()
|
|
if qs.count() == 1:
|
|
message_bit = "1 request was"
|
|
else:
|
|
message_bit = "%s requests were" % qs.count()
|
|
self.message_user(request, "%s successfully approved." % message_bit)
|
|
|
|
approve_request.short_description = 'Approve selected requests.'
|
|
|
|
|
|
class CountyAdmin(admin.ModelAdmin):
|
|
list_display = ['pk', 'name', 'country', 'address_count']
|
|
actions = ['set_country']
|
|
|
|
def address_count(self, obj):
|
|
return obj.address_count
|
|
address_count.admin_order_field = 'address_count'
|
|
|
|
def queryset(self, request):
|
|
qs = super(CountyAdmin, self).queryset(request)
|
|
return qs.annotate(address_count=Count('addresses'))
|
|
|
|
class SetCountryForm(forms.Form):
|
|
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
|
|
country = forms.ModelChoiceField(Country.objects)
|
|
|
|
def set_country(self, request, queryset):
|
|
form = None
|
|
if 'apply' in request.POST:
|
|
form = self.SetCountryForm(request.POST)
|
|
if form.is_valid():
|
|
country = form.cleaned_data['country']
|
|
with transaction.commit_on_success():
|
|
for county in queryset:
|
|
county.country = country
|
|
county.save()
|
|
self.message_user(request, "Successfully set %d counties to %s." % (queryset.count(), country))
|
|
return HttpResponseRedirect(request.get_full_path())
|
|
if not form:
|
|
form = self.SetCountryForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
|
|
return render_to_response('admin/set_country.html', {'stores': queryset, 'country_form': form}, RequestContext(request))
|
|
|
|
set_country.short_description = "Set the selected county's country"
|
|
|
|
|
|
class CountryAdmin(admin.ModelAdmin):
|
|
list_display = ['pk', 'name', 'address_count', 'county_count']
|
|
|
|
def address_count(self, obj):
|
|
return obj.address_count
|
|
address_count.admin_order_field = 'address_count'
|
|
|
|
def county_count(self, obj):
|
|
return obj.county_count
|
|
county_count.admin_order_field = 'county_count'
|
|
|
|
def queryset(self, request):
|
|
qs = super(CountryAdmin, self).queryset(request)
|
|
return qs.annotate(address_count=Count('addresses'), county_count=Count('counties'))
|
|
|
|
|
|
admin.site.register(Chain, ChainAdmin)
|
|
admin.site.register(Store, StoreAdmin)
|
|
admin.site.register(Address, admin.ModelAdmin)
|
|
admin.site.register(Brand, admin.ModelAdmin)
|
|
admin.site.register(ClaimRequest, ClaimAdmin)
|
|
admin.site.register(LinkType, admin.ModelAdmin)
|
|
admin.site.register(County, CountyAdmin)
|
|
admin.site.register(Country, CountryAdmin) |