help_text="The amount of this expense in DKK. Must match the amount on the invoice uploaded below.",
max_digits=12,
),
),
(
"description",
models.CharField(
help_text="A short description of this expense. Please keep it meningful as it helps the Economy team a lot when categorising expenses. 200 characters or fewer.",
max_length=200,
),
),
(
"paid_by_bornhack",
models.BooleanField(
default=True,
help_text="Leave checked if this expense was paid by BornHack. Uncheck if you need a reimbursement for this expense.",
),
),
(
"invoice",
models.ImageField(
help_text="The invoice for this expense. Please make sure the amount on the invoice matches the amount you entered above. All common image formats are accepted.",
upload_to="expenses/",
),
),
(
"approved",
models.NullBooleanField(
default=None,
help_text="True if this expense has been approved by the responsible team. False if it has been rejected. Blank if noone has decided yet.",
),
),
(
"notes",
models.TextField(
blank=True,
help_text="Economy Team notes for this expense. Only visible to the Economy team and the submitting user.",
),
),
(
"camp",
models.ForeignKey(
help_text="The camp to which this expense belongs",
help_text="The reimbursement for this expense, if any. This is a dual-purpose field. If expense.paid_by_bornhack is true then expense.reimbursement references the reimbursement which this expense is created to cover. If expense.paid_by_bornhack is false then expense.reimbursement references the reimbursement which reimbursed this expense.",