class ProjectAdmin(PaymentSystemModelAdmin): def get_expiring_date(self, obj: Project): return obj.active_p2s.expiring_date get_expiring_date.short_description = 'Expiring date' def get_is_paid(self, obj: Project): return obj.active_p2s.is_paid get_is_paid.short_description = 'Is paid' list_display = ( 'id', 'name', 'owner', 'disabled_at', 'active_subscription', 'get_expiring_date', 'get_is_paid', ) list_display_links = ('name', ) list_filter = ( 'disabled_at', input_filter('owner', 'owner (name, email)', [ 'owner__email', 'owner__first_name', 'owner__last_name', ]), input_filter('name', 'name', ['name']), ) search_fields = ( 'owner__email', 'owner__first_name', 'owner__last_name', 'name', ) readonly_fields = ( 'id', 'name', 'owner', 'description', 'disabled_at', 'active_subscription', 'get_expiring_date', 'get_is_paid', ) form = ProjectForm inlines = [UserProjectInline, ProjectSubscriptionInline] def save_model(self, request, obj, form, change): return obj def has_delete_permission(self, request, obj=None): return False def has_add_permission(self, request): return False
class PersonSanctionAdmin(RegisterModelAdmin): def get_countries(self, obj: PersonSanction): return ', '.join( obj.countries_of_citizenship.values_list('name', flat=True)) get_countries.short_description = 'Countries of citizenship' save_as = True form = get_sanction_form(PersonSanction) list_display = ( 'id', 'full_name', 'date_of_birth', 'start_date', 'end_date', 'taxpayer_number', 'get_countries', ) filter_horizontal = ('types_of_sanctions', 'countries_of_citizenship') autocomplete_fields = [ 'pep', 'countries_of_citizenship', 'types_of_sanctions' ] search_fields = ( 'full_name', 'full_name_original', 'taxpayer_number', 'address', 'place_of_birth', 'types_of_sanctions__name', ) ordering = ('start_date', ) list_filter = ( input_filter('id', 'id', ['id'], 'exact'), input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), input_filter('countries_of_citizenship', 'countries of citizenship name', ['countries_of_citizenship__name']), input_filter('taxpayer_number', 'taxpayer number', ['taxpayer_number']), input_filter('occupation', 'occupation', ['occupation']), input_filter('id_card', 'id card', ['id_card']), ('date_of_birth', DateRangeFilter), ('start_date', DateRangeFilter), ('end_date', DateRangeFilter), ('reasoning_date', DateRangeFilter), input_filter('reasoning', 'reasoning', ['reasoning']), input_filter('additional_info', 'additional_info', ['additional_info']), ) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class CountrySanctionAdmin(RegisterModelAdmin): save_as = True form = get_sanction_form(CountrySanction) list_display = ( 'id', 'country', ) search_fields = ( 'country__name', 'types_of_sanctions__name', ) filter_horisontal = ('types_of_sanctions', ) autocomplete_fields = [ 'types_of_sanctions', ] ordering = ('start_date', ) list_filter = (input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), ) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class InvitationAdmin(PaymentSystemModelAdmin): change_form_template = 'admin/change_invitation_form.html' list_display = ( 'id', 'email', 'project', 'deleted_at', ) autocomplete_fields = ('project', ) list_filter = ( input_filter('email', 'Email', ['email']), input_filter('project_name', 'project name', ['project__name']), input_filter('project_owner', 'project owner (name or email)', [ 'project__owner__first_name', 'project__owner__last_name', 'project__owner__email', ]), ) search_fields = ('email', 'project__name') def response_change(self, request, obj: Invitation): res = super().response_change(request, obj) if 'save-send-email' in request.POST: obj.send() self.message_user(request, "Email was sent") return res def get_readonly_fields(self, request, obj=None): readonly_fields = [] if obj: readonly_fields += [ 'project', 'created_at', 'deleted_at', ] return readonly_fields def get_queryset(self, request): return Invitation.include_deleted_objects.order_by('-deleted_at') def delete_model(self, request, obj): obj.soft_delete()
class CompanySanctionAdmin(RegisterModelAdmin): save_as = True form = get_sanction_form(CompanySanction) list_display = ( 'id', 'name', 'start_date', 'end_date', 'registration_number', 'taxpayer_number', 'country_of_registration', ) filter_horisontal = ('types_of_sanctions', 'country_of_registration') autocomplete_fields = ('company', 'country_of_registration', 'types_of_sanctions') search_fields = ( 'name', 'name_original', 'registration_number', 'address', 'country_of_registration__name', 'types_of_sanctions__name', ) ordering = ('start_date', ) list_filter = ( input_filter('id', 'id', ['id'], 'exact'), input_filter('name', 'name', ['name']), input_filter('registration_number', 'registration number', ['registration_number']), input_filter('taxpayer_number', 'taxpayer number', ['taxpayer_number']), input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), input_filter('country_of_registration', 'countries of registration name', ['country_of_registration__name']), ('start_date', DateRangeFilter), ('end_date', DateRangeFilter), ('reasoning_date', DateRangeFilter), input_filter('reasoning', 'reasoning', ['reasoning']), input_filter('additional_info', 'additional_info', ['additional_info']), ) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class SanctionTypeAdmin(RegisterModelAdmin): save_as = True list_display = ('id', 'name', 'law') search_fields = ('name', 'law') ordering = ('created_at', ) list_filter = ( input_filter('id', 'id', ['id'], 'exact'), 'law', ) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class CountrySanctionAdmin(RegisterModelAdmin): api = '/api/sanction/country/' save_as = True form = get_sanction_form(CountrySanction) list_display = ('id', 'country', 'decree', 'start_date', 'end_date') search_fields = ( 'decree', 'country__name', 'types_of_sanctions__name', ) filter_horisontal = ('types_of_sanctions', ) autocomplete_fields = [ 'types_of_sanctions', ] ordering = ('start_date', ) list_filter = ( input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), is_empty_filter('decree', 'decree number'), is_empty_filter('initial_data', 'initial data'), ) actions = [ 'actualize', ] def actualize(self, request, queryset): actualize_action(self, request) actualize.short_description = 'ACTUALIZE COUNTRY SANCTIONS' def changelist_view(self, request, extra_context=None): self.request = request actualize_noqs(self) return super().changelist_view(self.request, extra_context) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class CompanySanctionAdmin(RegisterModelAdmin): api = '/api/sanction/company/' save_as = True form = get_sanction_form(CompanySanction) list_display = ( 'id', 'name', 'decree', 'start_date', 'end_date', 'registration_number', 'taxpayer_number', 'country_of_registration', ) filter_horisontal = ('types_of_sanctions', 'country_of_registration') autocomplete_fields = ('company', 'country_of_registration', 'types_of_sanctions') search_fields = ( 'name', 'name_original', 'decree', 'registration_number', 'address', 'country_of_registration__name', 'types_of_sanctions__name', ) ordering = ('start_date', ) list_filter = ( input_filter('id', 'id', ['id'], 'exact'), input_filter('name', 'name', ['name']), input_filter('registration_number', 'registration number', ['registration_number']), input_filter('taxpayer_number', 'taxpayer number', ['taxpayer_number']), input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), input_filter('country_of_registration', 'countries of registration name', ['country_of_registration__name']), ('start_date', DateRangeFilter), ('end_date', DateRangeFilter), ('reasoning_date', DateRangeFilter), input_filter('reasoning', 'reasoning', ['reasoning']), input_filter('additional_info', 'additional_info', ['additional_info']), is_empty_filter('decree', 'decree number'), is_empty_filter('initial_data', 'initial data'), ) actions = [ 'actualize', ] def actualize(self, request, queryset): actualize_action(self, request) actualize.short_description = 'ACTUALIZE COMPANY SANCTIONS' def changelist_view(self, request, extra_context=None): self.request = request actualize_noqs(self) return super().changelist_view(self.request, extra_context) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class PersonSanctionAdmin(RegisterModelAdmin): api = '/api/sanction/person/' def get_countries(self, obj: PersonSanction): return ', '.join( obj.countries_of_citizenship.values_list('name', flat=True)) get_countries.short_description = 'Countries of citizenship' save_as = True form = get_sanction_form(PersonSanction) list_display = ( 'id', 'full_name', 'date_of_birth', 'decree', 'start_date', 'end_date', 'taxpayer_number', 'get_countries', ) filter_horizontal = ('types_of_sanctions', 'countries_of_citizenship') autocomplete_fields = [ 'pep', 'countries_of_citizenship', 'types_of_sanctions' ] search_fields = ( 'decree', 'full_name', 'full_name_original', 'taxpayer_number', 'address', 'place_of_birth', 'types_of_sanctions__name', ) ordering = ('start_date', ) list_filter = ( input_filter('id', 'id', ['id'], 'exact'), input_filter('types_of_sanctions', 'types of sanctions', ['types_of_sanctions__name']), input_filter('countries_of_citizenship', 'countries of citizenship name', ['countries_of_citizenship__name']), input_filter('taxpayer_number', 'taxpayer number', ['taxpayer_number']), input_filter('occupation', 'occupation', ['occupation']), input_filter('id_card', 'id card', ['id_card']), ('date_of_birth', DateRangeFilter), ('start_date', DateRangeFilter), ('end_date', DateRangeFilter), ('reasoning_date', DateRangeFilter), input_filter('reasoning', 'reasoning', ['reasoning']), input_filter('additional_info', 'additional_info', ['additional_info']), is_empty_filter('decree', 'decree number'), is_empty_filter('initial_data', 'initial data'), ) actions = [ 'actualize', ] def actualize(self, request, queryset): actualize_action(self, request) actualize.short_description = 'ACTUALIZE PERSON SANCTIONS' def changelist_view(self, request, extra_context=None): self.request = request actualize_noqs(self) return super().changelist_view(self.request, extra_context) def has_change_permission(self, request, obj=None): return self.has_module_permission(request) def has_add_permission(self, request, obj=None): return self.has_module_permission(request) def has_delete_permission(self, request, obj=None): return self.has_module_permission(request)
class InvoiceAdmin(PaymentSystemModelAdmin): def get_owner(self, obj: Invoice): return obj.project_subscription.project.owner get_owner.short_description = 'Owner' get_owner.admin_order_field = 'project_subscription__project__owner' def get_project(self, obj: Invoice): return obj.project_subscription.project get_project.short_description = 'Project' get_project.admin_order_field = 'project_subscription__project__name' def get_subscription(self, obj: Invoice): return obj.project_subscription.subscription get_subscription.short_description = 'Subscription' get_subscription.admin_order_field = 'project_subscription__subscription__name' def get_expiring_date(self, obj: Invoice): return obj.project_subscription.expiring_date get_expiring_date.short_description = 'Expiring date' get_expiring_date.admin_order_field = 'project_subscription__expiring_date' def get_invoice_number(self, obj: Invoice): return f'#{obj.id}' get_invoice_number.short_description = 'Invoice #' get_invoice_number.admin_order_field = 'id' def get_invoice_date(self, obj: Invoice): return obj.created_at.date() get_invoice_date.short_description = 'Invoice date' get_invoice_date.admin_order_field = 'created_at' list_display = ( 'get_invoice_number', 'get_invoice_date', 'get_owner', # 'get_project', 'project_name', 'get_subscription', # 'is_paid', 'get_expiring_date', 'paid_at', 'grace_period_block', # 'note', ) list_filter = ( input_filter('id', 'invoice #', ['id'], 'exact'), input_filter('project_name', 'project name', ['project_subscription__project__name']), input_filter('project_owner', 'project owner (name, email)', [ 'project_subscription__project__owner__email', 'project_subscription__project__owner__first_name', 'project_subscription__project__owner__last_name', ]), 'project_subscription__subscription', ('paid_at', DateRangeFilter), ('project_subscription__expiring_date', DateRangeFilter), 'grace_period_block', ) search_fields = ( 'id', 'project_subscription__project__owner__email', 'project_subscription__project__owner__first_name', 'project_subscription__project__owner__last_name', 'project_subscription__project__name', ) exclude = ('deleted_at', 'token') def get_readonly_fields(self, request, obj=None): readonly_fields = { 'project_subscription', 'start_date', 'end_date', 'requests_limit', 'subscription_name', 'project_name', 'price', 'is_custom_subscription', } if obj: if timezone.localdate() < obj.project_subscription.expiring_date: readonly_fields.add('grace_period_block') else: readonly_fields.add('paid_at') if obj.is_paid or not obj.grace_period_block: readonly_fields.add('paid_at') readonly_fields.add('grace_period_block') if obj.project_subscription.status == ProjectSubscription.PAST: readonly_fields.add('paid_at') return list(readonly_fields) def get_form(self, request, obj=None, change=False, **kwargs): form = super().get_form(request, obj=obj, change=change, **kwargs) form.base_fields['note'].widget.attrs['rows'] = 2 return form def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False