# 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', '_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', '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)