You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.0 KiB
95 lines
3.0 KiB
from django.contrib import admin
|
|
from django.http import HttpResponse
|
|
from django.core.urlresolvers import reverse
|
|
from django.utils.html import format_html
|
|
from decimal import Decimal
|
|
import csv
|
|
import datetime
|
|
from django.contrib.auth.models import User
|
|
from userprofile.models import UserProfile
|
|
from .models import *
|
|
|
|
def OrderDetail(obj):
|
|
return format_html('<a href="{}">View</a>'.format(
|
|
reverse('orders:AdminOrderDetail', args=[obj.id])
|
|
))
|
|
|
|
def ExportToCSV(modeladmin, request, queryset):
|
|
opts = modeladmin.model._meta
|
|
response = HttpResponse(content_type='text/csv')
|
|
response['Content-Disposition'] = 'attachment; filename=Orders-{}.csv'.format(datetime.datetime.now().strftime("%d/%m/%Y"))
|
|
writer = csv.writer(response)
|
|
|
|
fields = [field for field in opts.get_fields() if not field.many_to_many and not field.one_to_many]
|
|
|
|
writer.writerow([field.verbose_name for field in fields])
|
|
|
|
for obj in queryset:
|
|
data_row = []
|
|
for field in fields:
|
|
value = getattr(obj, field.name)
|
|
if isinstance(value, datetime.datetime):
|
|
value = value.strftime('%d/%m/%Y')
|
|
|
|
data_row.append(value)
|
|
writer.writerow(data_row)
|
|
return response
|
|
ExportToCSV.short_description = 'Export CSV'
|
|
|
|
def OrderPDF(obj):
|
|
return format_html('<a href="{}">PDF</a>'.format(
|
|
reverse('orders:AdminOrderPDF', args=[obj.id])
|
|
))
|
|
OrderPDF.short_description = 'In PDF format'
|
|
|
|
class ProductsInOrderInline(admin.TabularInline):
|
|
model = ProductsInOrder
|
|
extra = 0
|
|
|
|
class StatusAdmin(admin.ModelAdmin):
|
|
list_display = [field.name for field in Status._meta.fields]
|
|
|
|
class Meta:
|
|
model = Status
|
|
|
|
def delete_model(modeladmin, request, queryset):
|
|
for obj in queryset:
|
|
print(obj.user)
|
|
user_profile = obj.user.profile
|
|
parent_profile = user_profile.parent.profile
|
|
parent_profile.user_points += round(obj.total_price * Decimal(0.05))
|
|
parent_profile.save()
|
|
obj.delete()
|
|
delete_model.short_description = "Удалить как завершенные"
|
|
|
|
class OrderAdmin (admin.ModelAdmin):
|
|
list_display = ['id', 'customer_name', 'customer_email', 'customer_phone', 'city', 'customer_address',
|
|
'paid', 'status', 'created', 'updated', OrderDetail, OrderPDF]
|
|
|
|
list_filter = ['paid', 'created', 'updated']
|
|
inlines = [ProductsInOrderInline]
|
|
actions = [ExportToCSV, delete_model]
|
|
|
|
class Meta:
|
|
model = Order
|
|
|
|
class ProductsInOrderAdmin(admin.ModelAdmin):
|
|
list_display = [field.name for field in ProductsInOrder._meta.fields]
|
|
|
|
class Meta:
|
|
model = ProductsInOrder
|
|
|
|
class ProductsInBasketAdmin(admin.ModelAdmin):
|
|
list_display = [field.name for field in ProductsInBasket._meta.fields]
|
|
|
|
class Meta:
|
|
model = ProductsInBasket
|
|
|
|
|
|
|
|
|
|
|
|
admin.site.register(Status, StatusAdmin)
|
|
admin.site.register(Order, OrderAdmin)
|
|
admin.site.register(ProductsInOrder, ProductsInOrderAdmin)
|
|
admin.site.register(ProductsInBasket, ProductsInBasketAdmin) |