finance: allow pdfs in proof field

pull/103/head
Christian Merten 12 months ago
parent 4c7ff39432
commit a749aca7a4
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -1,5 +1,6 @@
from django.contrib import admin, messages from django.contrib import admin, messages
from django.forms import Textarea from django import forms
from django.forms import Textarea, ClearableFileInput
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.db.models import TextField, Q from django.db.models import TextField, Q
from django.urls import path, reverse from django.urls import path, reverse
@ -9,7 +10,7 @@ from django.shortcuts import render
from django.conf import settings from django.conf import settings
from contrib.admin import CommonAdminInlineMixin, CommonAdminMixin from contrib.admin import CommonAdminInlineMixin, CommonAdminMixin
from utils import get_member from utils import get_member, RestrictedFileField
from rules.contrib.admin import ObjectPermissionsModelAdmin from rules.contrib.admin import ObjectPermissionsModelAdmin
@ -22,14 +23,21 @@ class LedgerAdmin(admin.ModelAdmin):
search_fields = ('name', ) search_fields = ('name', )
class BillOnStatementInlineForm(forms.ModelForm):
class Meta:
model = BillOnStatementProxy
fields = ['short_description', 'explanation', 'amount', 'paid_by', 'proof']
widgets = {
'proof': ClearableFileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'}),
'explanation': Textarea(attrs={'rows': 1, 'cols': 40})
}
class BillOnStatementInline(CommonAdminInlineMixin, admin.TabularInline): class BillOnStatementInline(CommonAdminInlineMixin, admin.TabularInline):
model = BillOnStatementProxy model = BillOnStatementProxy
extra = 0 extra = 0
sortable_options = [] sortable_options = []
fields = ['short_description', 'explanation', 'amount', 'paid_by', 'proof'] form = BillOnStatementInlineForm
formfield_overrides = {
TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})}
}
@admin.register(StatementUnSubmitted) @admin.register(StatementUnSubmitted)

@ -0,0 +1,19 @@
# Generated by Django 4.0.1 on 2024-12-26 09:45
from django.db import migrations
import utils
class Migration(migrations.Migration):
dependencies = [
('finance', '0004_alter_bill_amount'),
]
operations = [
migrations.AlterField(
model_name='bill',
name='proof',
field=utils.RestrictedFileField(blank=True, upload_to='bill_images', verbose_name='Proof'),
),
]

@ -13,7 +13,7 @@ from django.conf import settings
import rules import rules
from contrib.models import CommonModel from contrib.models import CommonModel
from contrib.rules import has_global_perm from contrib.rules import has_global_perm
from utils import cvt_to_decimal from utils import cvt_to_decimal, RestrictedFileField
# Create your models here. # Create your models here.
@ -423,7 +423,14 @@ class Bill(CommonModel):
costs_covered = models.BooleanField(verbose_name=_('Covered'), default=False) costs_covered = models.BooleanField(verbose_name=_('Covered'), default=False)
refunded = models.BooleanField(verbose_name=_('Refunded'), default=False) refunded = models.BooleanField(verbose_name=_('Refunded'), default=False)
proof = models.ImageField(_('Proof'), upload_to='bill_images', blank=True) proof = RestrictedFileField(verbose_name=_('Proof'),
upload_to='bill_images',
blank=True,
max_upload_size=5,
content_types=['application/pdf',
'image/jpeg',
'image/png',
'image/gif'])
def __str__(self): def __str__(self):
return "{} ({}€)".format(self.short_description, self.amount) return "{} ({}€)".format(self.short_description, self.amount)

@ -42,7 +42,7 @@ from .models import (Member, Group, Freizeit, MemberNoteList, NewMemberOnList, K
from finance.models import Statement, BillOnExcursionProxy from finance.models import Statement, BillOnExcursionProxy
from mailer.mailutils import send as send_mail, get_echo_link from mailer.mailutils import send as send_mail, get_echo_link
from django.conf import settings from django.conf import settings
from utils import get_member from utils import get_member, RestrictedFileField
#from easy_select2 import apply_select2 #from easy_select2 import apply_select2
@ -215,10 +215,9 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin):
list_display_links = None list_display_links = None
readonly_fields = ['echoed', 'good_conduct_certificate_valid'] readonly_fields = ['echoed', 'good_conduct_certificate_valid']
inlines = [EmergencyContactInline, TrainingOnMemberInline, PermissionOnMemberInline] inlines = [EmergencyContactInline, TrainingOnMemberInline, PermissionOnMemberInline]
#formfield_overrides = { formfield_overrides = {
# ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, RestrictedFileField: {'widget': forms.ClearableFileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'})},
# ForeignKey: {'widget': apply_select2(forms.Select)} }
#}
change_form_template = "members/change_member.html" change_form_template = "members/change_member.html"
ordering = ('lastname',) ordering = ('lastname',)
actions = ['request_echo', 'invite_as_user_action'] actions = ['request_echo', 'invite_as_user_action']
@ -771,7 +770,8 @@ class BillOnExcursionInline(CommonAdminInlineMixin, admin.TabularInline):
sortable_options = [] sortable_options = []
fields = ['short_description', 'explanation', 'amount', 'paid_by', 'proof'] fields = ['short_description', 'explanation', 'amount', 'paid_by', 'proof']
formfield_overrides = { formfield_overrides = {
TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})} TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})},
RestrictedFileField: {'widget': forms.ClearableFileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'})},
} }

Loading…
Cancel
Save