diff --git a/scipost_django/finances/forms.py b/scipost_django/finances/forms.py index 163678983c83c3c3efae461926e297ff856204ab..07f9bb9671592247c7a584a903c68ec7bfffd56e 100644 --- a/scipost_django/finances/forms.py +++ b/scipost_django/finances/forms.py @@ -240,15 +240,26 @@ class SubsidyPaymentForm(forms.ModelForm): super().__init__(*args, **kwargs) self.fields["subsidy"].initial = subsidy self.fields["subsidy"].widget = forms.HiddenInput() - print(subsidy.attachments.invoices()) - self.fields["invoice"].choices = [ - (att.id, f"{att.attachment.name.split('/')[-1]}") - for att in subsidy.attachments.invoices() + + invoice_qs = subsidy.attachments.unattached().invoices() + if self.instance.invoice: + invoice_qs |= SubsidyAttachment.objects.filter(id=self.instance.invoice.id) + self.fields["invoice"].initial = self.instance.invoice.id + + proofs_qs = subsidy.attachments.unattached().proofs_of_payment() + if self.instance.proof_of_payment: + proofs_qs |= SubsidyAttachment.objects.filter( + id=self.instance.proof_of_payment.id + ) + self.fields["proof_of_payment"].initial = self.instance.proof_of_payment.id + + self.fields["invoice"].choices = [(None, "---")] + [ + (att.id, f"{att.attachment.name.split('/')[-1]}") for att in invoice_qs ] - self.fields["proof_of_payment"].choices = [ - (att.id, f"{att.attachment.name.split('/')[-1]}") - for att in subsidy.attachments.proofs_of_payment() + self.fields["proof_of_payment"].choices = [(None, "---")] + [ + (att.id, f"{att.attachment.name.split('/')[-1]}") for att in proofs_qs ] + self.helper = FormHelper() self.helper.layout = Layout( Field("subsidy"), @@ -278,10 +289,8 @@ class SubsidyPaymentForm(forms.ModelForm): def save(self, commit=True): instance = super().save(commit=False) - if invoice := self.cleaned_data["invoice"]: - instance.invoice = invoice - if proof_of_payment := self.cleaned_data["proof_of_payment"]: - instance.proof_of_payment = proof_of_payment + instance.invoice = self.cleaned_data["invoice"] or None + instance.proof_of_payment = self.cleaned_data["proof_of_payment"] or None if commit: instance.save() return instance diff --git a/scipost_django/finances/managers.py b/scipost_django/finances/managers.py index d2adcc17aad33f3110634cbcaf46cc53aabbf20f..b6b19719a4661259b1f5910d863fcf0594148f9c 100644 --- a/scipost_django/finances/managers.py +++ b/scipost_django/finances/managers.py @@ -33,6 +33,12 @@ class SubsidyAttachmentQuerySet(models.QuerySet): def orphaned(self): return self.filter(subsidy__isnull=True) + def unattached(self): + return self.filter( + models.Q(proof_of_payment_for__isnull=True) + & models.Q(invoice_for__isnull=True) + ) + class PubFracQuerySet(models.QuerySet): def uncompensated(self):