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.
 
 
 
 
 
 

113 lines
3.8 KiB

from django.contrib import admin
from django.http import HttpResponse
from access.models import User
from finance.models import Bill, ServiceRequest, Price, Installment, YandexKassaHistory
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', '_method', 'service', 'price', 'real_price', 'date', 'status_changed', 'traf_source', 'gen_pay_link')
raw_id_fields = ['user']
search_fields = ['user__email', 'id']
list_filter = ['date', 'status_changed', 'status', 'user__in_role', '_method', 'created_sent', 'service']
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', 'amo',)
list_filter = ('amo', 'company', 'service')
search_fields = ['lead_name', 'email', 'phone', 'name']
admin.site.register(ServiceRequest, ServiceRequestAdmin)
class PriceAdmin(admin.ModelAdmin):
list_display = ('title', 'course', 'cost', 'public', 'key', 'url', 'freepay', )
filter_horizontal = ['included']
list_filter = ['freepay']
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 YandexKassaHistoryAdmin(admin.ModelAdmin):
list_display = ('date', '_type', 'result', )
admin.site.register(YandexKassaHistory, YandexKassaHistoryAdmin)