def save_invoice(self, *args, **kwargs): status_detail = kwargs.get('status_detail', 'tendered') admin_notes = kwargs.get('admin_notes', None) object_type = ContentType.objects.get(app_label=self._meta.app_label, model=self._meta.module_name) try: # get invoice invoice = Invoice.objects.get( object_type = object_type, object_id = self.pk, ) except ObjectDoesNotExist: # else; create invoice # cannot use get_or_create method # because too many fields are required invoice = Invoice() invoice.object_type = object_type invoice.object_id = self.pk # update invoice with details invoice.title = "Registration %s for Event: %s" % (self.pk, self.event.title) invoice.estimate = True invoice.status_detail = status_detail invoice.subtotal = self.amount_paid invoice.total = self.amount_paid invoice.balance = invoice.total invoice.tender_date = datetime.now() invoice.due_date = datetime.now() invoice.ship_date = datetime.now() invoice.admin_notes = admin_notes invoice.save() self.invoice = invoice self.save() return invoice