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.
127 lines
4.2 KiB
127 lines
4.2 KiB
# coding=utf-8
|
|
from django.contrib import admin
|
|
from django.http import HttpResponse
|
|
|
|
from access.models import User
|
|
from finance.models import Bill, ServiceRequest, Price, Installment, \
|
|
YandexKassaHistory, RequestAlert
|
|
|
|
from import_export.admin import ImportExportModelAdmin
|
|
|
|
from lms.tools import out_date_format
|
|
|
|
|
|
def export_bills(modeladmin, request, queryset):
|
|
import xlwt
|
|
response = HttpResponse(content_type='application/ms-excel')
|
|
response['Content-Disposition'] = 'attachment; filename=report.xls'
|
|
wb = xlwt.Workbook(encoding='utf-8')
|
|
ws = wb.add_sheet("MyModel")
|
|
|
|
row_num = 0
|
|
|
|
columns = [
|
|
(u"№", 3000),
|
|
(u"Дата платежа", 6000),
|
|
(u"Продукт", 8000),
|
|
(u'ФИО', 6000),
|
|
(u'Сумма', 8000),
|
|
(u'Сумма минус комиссия', 1000),
|
|
(u"Комиссия", 4000),
|
|
(u"№ Транзакции", 1000),
|
|
(u'ID в системе', 1000),
|
|
(u'Email', 3000),
|
|
(u"Телефон", 3000)
|
|
]
|
|
|
|
font_style = xlwt.XFStyle()
|
|
font_style.font.bold = True
|
|
|
|
for col_num in range(len(columns)):
|
|
ws.write(row_num, col_num, columns[col_num][0], font_style)
|
|
ws.col(col_num).width = columns[col_num][1]
|
|
|
|
font_style = xlwt.XFStyle()
|
|
font_style.alignment.wrap = 1
|
|
|
|
for obj in queryset:
|
|
row_num += 1
|
|
row = [
|
|
row_num,
|
|
out_date_format(obj.status_changed),
|
|
obj.service.get_name() if obj.service else '-',
|
|
obj.user.get_name(),
|
|
obj.price,
|
|
obj.real_price if obj.user.phone else '-',
|
|
str(float(obj.price) - float(obj.real_price)) if obj.real_price else '-',
|
|
obj.out_id if obj.out_id else '-',
|
|
obj.id,
|
|
obj.user.email,
|
|
obj.user.phone if obj.user.phone else '-'
|
|
]
|
|
for col_num in range(len(row)):
|
|
ws.write(row_num, col_num, row[col_num], font_style)
|
|
|
|
wb.save(response)
|
|
return response
|
|
|
|
|
|
export_bills.short_description = u"Отчет по поступлениям"
|
|
|
|
|
|
class BillAdmin(ImportExportModelAdmin):
|
|
list_display = (
|
|
'user', 'status', 'manager', 'opener', 'flow',
|
|
'_method', 'service', 'price', 'real_price',
|
|
'date', 'status_changed', 'traf_source', 'gen_pay_link')
|
|
raw_id_fields = ['user', 'flow']
|
|
search_fields = ['user__email', 'user__fname', 'user__name', 'id']
|
|
list_filter = ['date', 'status_changed', 'status', 'flow',
|
|
'user__in_role', '_method', 'created_sent', 'service', 'date']
|
|
actions = [export_bills]
|
|
|
|
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
|
|
if db_field.name == "opener":
|
|
kwargs["queryset"] = User.objects.filter(is_admin=True)
|
|
return super(BillAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
|
|
|
|
admin.site.register(Bill, BillAdmin)
|
|
|
|
|
|
class ServiceRequestAdmin(admin.ModelAdmin):
|
|
list_display = ('get_lead_name', 'get_client_name', 'date', 'send', 'send_date', 'host', )
|
|
list_filter = ('send', 'company', 'service', 'host', 'send_date', )
|
|
search_fields = ['lead_name', 'email', 'phone', 'name', 'host']
|
|
|
|
admin.site.register(ServiceRequest, ServiceRequestAdmin)
|
|
|
|
|
|
class PriceAdmin(admin.ModelAdmin):
|
|
list_display = ('title', 'course', 'cost', 'public', 'key', 'freepay', )
|
|
filter_horizontal = ['included']
|
|
list_filter = ['freepay', 'course',]
|
|
|
|
admin.site.register(Price, PriceAdmin)
|
|
|
|
|
|
class InstallmentAdmin(admin.ModelAdmin):
|
|
list_display = ('user', 'price', 'first_price', 'period', 'date', 'f_date', 'rest', 'wait', 'expired')
|
|
list_filter = ['expired']
|
|
raw_id_fields = ['user']
|
|
search_fields = ['user__email', 'user__fname', 'user__name', 'price', 'first_price']
|
|
|
|
admin.site.register(Installment, InstallmentAdmin)
|
|
|
|
|
|
class RequestAlertAdmin(admin.ModelAdmin):
|
|
list_display = ('title', 'get_mails_str', '_count', 'date', 'f_date', )
|
|
list_filter = ['title', 'date', 'f_date']
|
|
search_fields = ('mails', 'title', )
|
|
|
|
admin.site.register(RequestAlert, RequestAlertAdmin)
|
|
|
|
|
|
class YandexKassaHistoryAdmin(admin.ModelAdmin):
|
|
list_display = ('date', '_type', 'result', )
|
|
|
|
admin.site.register(YandexKassaHistory, YandexKassaHistoryAdmin)
|
|
|