def build_preview_invoice_pdf(event): locale = event.settings.invoice_language if not locale or locale == '__user__': locale = event.settings.locale with rolledback_transaction(), language(locale): order = event.orders.create(status=Order.STATUS_PENDING, datetime=timezone.now(), expires=timezone.now(), code="PREVIEW", total=119) invoice = Invoice( order=order, event=event, invoice_no="PREVIEW", date=timezone.now().date(), locale=locale, organizer=event.organizer ) invoice.invoice_from = event.settings.get('invoice_address_from') introductory = event.settings.get('invoice_introductory_text', as_type=LazyI18nString) additional = event.settings.get('invoice_additional_text', as_type=LazyI18nString) footer = event.settings.get('invoice_footer_text', as_type=LazyI18nString) payment = _("A payment provider specific text might appear here.") invoice.introductory_text = str(introductory).replace('\n', '<br />') invoice.additional_text = str(additional).replace('\n', '<br />') invoice.footer_text = str(footer) invoice.payment_provider_text = str(payment).replace('\n', '<br />') invoice.invoice_to = _("John Doe\n214th Example Street\n012345 Somecity") invoice.file = None invoice.save() invoice.lines.all().delete() InvoiceLine.objects.create( invoice=invoice, description=_("Sample product A"), gross_value=119, tax_value=19, tax_rate=19 ) return event.invoice_renderer.generate(invoice)
def generate_invoice(order: Order): locale = order.event.settings.get('invoice_language') if locale: if locale == '__user__': locale = order.locale with language(locale): i = Invoice(order=order, event=order.event) i.invoice_from = order.event.settings.get('invoice_address_from') i.additional_text = order.event.settings.get('invoice_additional_text') try: addr_template = pgettext( "invoice", """{i.company} {i.name} {i.street} {i.zipcode} {i.city} {i.country}""") i.invoice_to = addr_template.format( i=order.invoice_address).strip() if order.invoice_address.vat_id: i.invoice_to += "\n" + pgettext( "invoice", "VAT-ID: %s") % order.invoice_address.vat_id except InvoiceAddress.DoesNotExist: i.invoice_to = "" i.date = date.today() i.locale = locale i.save() responses = register_payment_providers.send(order.event) for receiver, response in responses: provider = response(order.event) if provider.identifier == order.payment_provider: payment_provider = provider break for p in order.positions.all(): desc = str(p.item.name) if p.variation: desc += " - " + str(p.variation.value) InvoiceLine.objects.create(invoice=i, description=desc, gross_value=p.price, tax_value=p.tax_value, tax_rate=p.tax_rate) if order.payment_fee: InvoiceLine.objects.create( invoice=i, description=_('Payment via {method}').format( method=str(payment_provider.verbose_name)), gross_value=order.payment_fee, tax_value=order.payment_fee_tax_value, tax_rate=order.payment_fee_tax_rate) invoice_pdf(i.pk) return i
def build_preview_invoice_pdf(event): locale = event.settings.invoice_language if not locale or locale == '__user__': locale = event.settings.locale with rolledback_transaction(), language(locale): order = event.orders.create(status=Order.STATUS_PENDING, datetime=timezone.now(), expires=timezone.now(), code="PREVIEW", total=119) invoice = Invoice( order=order, event=event, invoice_no="PREVIEW", date=timezone.now().date(), locale=locale, organizer=event.organizer ) invoice.invoice_from = event.settings.get('invoice_address_from') invoice.invoice_from_name = invoice.event.settings.get('invoice_address_from_name') invoice.invoice_from_zipcode = invoice.event.settings.get('invoice_address_from_zipcode') invoice.invoice_from_city = invoice.event.settings.get('invoice_address_from_city') invoice.invoice_from_country = invoice.event.settings.get('invoice_address_from_country') invoice.invoice_from_tax_id = invoice.event.settings.get('invoice_address_from_tax_id') invoice.invoice_from_vat_id = invoice.event.settings.get('invoice_address_from_vat_id') introductory = event.settings.get('invoice_introductory_text', as_type=LazyI18nString) additional = event.settings.get('invoice_additional_text', as_type=LazyI18nString) footer = event.settings.get('invoice_footer_text', as_type=LazyI18nString) payment = _("A payment provider specific text might appear here.") invoice.introductory_text = str(introductory).replace('\n', '<br />') invoice.additional_text = str(additional).replace('\n', '<br />') invoice.footer_text = str(footer) invoice.payment_provider_text = str(payment).replace('\n', '<br />') invoice.invoice_to_name = _("John Doe") invoice.invoice_to_street = _("214th Example Street") invoice.invoice_to_zipcode = _("012345") invoice.invoice_to_city = _('Sample city') invoice.invoice_to_country = Country('DE') invoice.invoice_to = '{}\n{}\n{} {}'.format( invoice.invoice_to_name, invoice.invoice_to_street, invoice.invoice_to_zipcode, invoice.invoice_to_city ) invoice.invoice_to_beneficiary = '' invoice.file = None invoice.save() invoice.lines.all().delete() if event.tax_rules.exists(): for i, tr in enumerate(event.tax_rules.all()): tax = tr.tax(Decimal('100.00')) InvoiceLine.objects.create( invoice=invoice, description=_("Sample product {}").format(i + 1), gross_value=tax.gross, tax_value=tax.tax, tax_rate=tax.rate ) else: InvoiceLine.objects.create( invoice=invoice, description=_("Sample product A"), gross_value=100, tax_value=0, tax_rate=0 ) return event.invoice_renderer.generate(invoice)
def generate_invoice(order: Order): locale = order.event.settings.get('invoice_language') if locale: if locale == '__user__': locale = order.locale invoice = Invoice(order=order, event=order.event, date=timezone.now().date(), locale=locale) invoice = build_invoice(invoice) invoice_pdf(invoice.pk) return invoice
def generate_invoice(order: Order, trigger_pdf=True): invoice = Invoice( order=order, event=order.event, organizer=order.event.organizer, date=timezone.now().date(), ) invoice = build_invoice(invoice) if trigger_pdf: invoice_pdf(invoice.pk) if order.status == Order.STATUS_CANCELED: generate_cancellation(invoice, trigger_pdf) return invoice
def generate_invoice(order: Order): locale = order.event.settings.get('invoice_language') if locale: if locale == '__user__': locale = order.locale invoice = Invoice(order=order, event=order.event, organizer=order.event.organizer, date=timezone.now().date(), locale=locale) invoice = build_invoice(invoice) invoice_pdf(invoice.pk) if order.status in (Order.STATUS_CANCELED, Order.STATUS_REFUNDED): generate_cancellation(invoice) return invoice
def generate_invoice(order: Order, trigger_pdf=True): locale = order.event.settings.get('invoice_language', order.event.settings.locale) if locale: if locale == '__user__': locale = order.locale or order.event.settings.locale invoice = Invoice(order=order, event=order.event, organizer=order.event.organizer, date=timezone.now().date(), locale=locale) invoice = build_invoice(invoice) if trigger_pdf: invoice_pdf(invoice.pk) if order.status == Order.STATUS_CANCELED: generate_cancellation(invoice, trigger_pdf) return invoice
def test_cannot_write_invoice_without_order(env): event, _ = env with pytest.raises(Exception): i = Invoice(order=None, event=event) i.save()