def preview(event: int, provider: str): event = Event.objects.get(id=event) with rolledback_transaction(), language(event.settings.locale): item = event.items.create(name=_("Sample product"), default_price=42.23, description=_("Sample product description")) item2 = event.items.create(name=_("Sample workshop"), default_price=23.40) from pretix.base.models import Order order = event.orders.create(status=Order.STATUS_PENDING, datetime=now(), email='*****@*****.**', locale=event.settings.locale, expires=now(), code="PREVIEW1234", total=119) scheme = PERSON_NAME_SCHEMES[event.settings.name_scheme] sample = {k: str(v) for k, v in scheme['sample'].items()} p = order.positions.create(item=item, attendee_name_parts=sample, price=item.default_price) order.positions.create(item=item2, attendee_name_parts=sample, price=item.default_price, addon_to=p) order.positions.create(item=item2, attendee_name_parts=sample, price=item.default_price, addon_to=p) InvoiceAddress.objects.create(order=order, name_parts=sample, company=_("Sample company")) responses = register_ticket_outputs.send(event) for receiver, response in responses: prov = response(event) if prov.identifier == provider: return prov.generate(p)
def get_all_payment_providers(): global PAYMENT_PROVIDERS if PAYMENT_PROVIDERS: return PAYMENT_PROVIDERS with rolledback_transaction(): event = Event.objects.create( plugins=",".join([app.name for app in apps.get_app_configs()]), name="INTERNAL", date_from=now(), organizer=Organizer.objects.create(name="INTERNAL") ) provs = register_payment_providers.send( sender=event ) choices = [] for recv, prov in provs: if isinstance(prov, list): for p in prov: p = p(event) if not p.is_meta: choices.append((p.identifier, p.verbose_name)) else: prov = prov(event) if not prov.is_meta: choices.append((prov.identifier, prov.verbose_name)) PAYMENT_PROVIDERS = choices return choices
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 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 post(self, request, *args, **kwargs): if "background" in request.FILES: error, fileobj = self.process_upload() if error: return JsonResponse({ "status": "error", "error": error }) c = CachedFile() c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.file = fileobj c.save() c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('control:pdf.background', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) cf = None if request.POST.get("background", "").strip(): try: cf = CachedFile.objects.get(id=request.POST.get("background")) except CachedFile.DoesNotExist: pass if "preview" in request.POST: with rolledback_transaction(), language(request.event.settings.locale): p = self._get_preview_position() fname, mimet, data = self.generate( p, override_layout=(json.loads(self.request.POST.get("data")) if self.request.POST.get("data") else None), override_background=cf.file if cf else None ) resp = HttpResponse(data, content_type=mimet) ftype = fname.split(".")[-1] resp['Content-Disposition'] = 'attachment; filename="ticket-preview.{}"'.format(ftype) return resp elif "data" in request.POST: if cf: self.save_background(cf) self.save_layout() return JsonResponse({'status': 'ok'}) return HttpResponseBadRequest()
def preview(event: int, provider: str): event = Event.objects.get(id=event) with rolledback_transaction(), language(event.settings.locale): item = event.items.create(name=_("Sample product"), default_price=42.23) order = event.orders.create(status=Order.STATUS_PENDING, datetime=now(), email='*****@*****.**', expires=now(), code="PREVIEW1234", total=119) p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price) responses = register_ticket_outputs.send(event) for receiver, response in responses: prov = response(event) if prov.identifier == provider: return prov.generate(p)
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=now(), expires=now(), code="PREVIEW", total=119) invoice = Invoice( order=order, event=event, invoice_no="PREVIEW", date=date.today(), locale=locale ) 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 ) with tempfile.NamedTemporaryFile(suffix=".pdf") as f: _invoice_generate_german(invoice, f) f.seek(0) return f.read()
def post(self, request, *args, **kwargs): if "background" in request.FILES: error, fileobj = self.process_upload() if error: return JsonResponse({"status": "error", "error": error}) c = CachedFile() c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.file = fileobj c.save() c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('plugins:ticketoutputpdf:pdf', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) cf = None if request.POST.get("background", "").strip(): try: cf = CachedFile.objects.get(id=request.POST.get("background")) except CachedFile.DoesNotExist: pass if "preview" in request.POST: with rolledback_transaction(), language( request.event.settings.locale): p = self._get_preview_position() prov = self.get_output( override_layout=(json.loads(request.POST.get("data")) if request.POST.get("data") else None), override_background=cf.file if cf else None) fname, mimet, data = prov.generate(p) resp = HttpResponse(data, content_type=mimet) ftype = fname.split(".")[-1] resp[ 'Content-Disposition'] = 'attachment; filename="ticket-preview.{}"'.format( ftype) return resp elif "data" in request.POST: if cf: fexisting = request.event.settings.get( 'ticketoutput_{}_layout'.format(self.identifier), as_type=File) if fexisting: try: default_storage.delete(fexisting.name) except OSError: # pragma: no cover logger.error('Deleting file %s failed.' % fexisting.name) # Create new file nonce = get_random_string(length=8) fname = '%s-%s/%s/%s.%s.%s' % ( 'event', 'settings', self.request.event.pk, 'ticketoutput_{}_layout'.format( self.identifier), nonce, 'pdf') newname = default_storage.save(fname, cf.file) request.event.settings.set( 'ticketoutput_{}_background'.format(self.identifier), 'file://' + newname) request.event.settings.set( 'ticketoutput_{}_layout'.format(self.identifier), request.POST.get("data")) CachedTicket.objects.filter( order_position__order__event=self.request.event, provider=self.identifier).delete() CachedCombinedTicket.objects.filter( order__event=self.request.event, provider=self.identifier).delete() return JsonResponse({'status': 'ok'}) return HttpResponseBadRequest()
def post(self, request, *args, **kwargs): if "background" in request.FILES: error, fileobj = self.process_upload() if error: return JsonResponse({ "status": "error", "error": error }) c = CachedFile() c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.file = fileobj c.save() c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('plugins:ticketoutputpdf:pdf', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) cf = None if request.POST.get("background", "").strip(): try: cf = CachedFile.objects.get(id=request.POST.get("background")) except CachedFile.DoesNotExist: pass if "preview" in request.POST: with rolledback_transaction(), language(request.event.settings.locale): item = request.event.items.create(name=_("Sample product"), default_price=42.23) item2 = request.event.items.create(name=_("Sample workshop"), default_price=23.40) from pretix.base.models import Order order = request.event.orders.create(status=Order.STATUS_PENDING, datetime=now(), email='*****@*****.**', expires=now(), code="PREVIEW1234", total=119) p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price) order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p) order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p) prov = PdfTicketOutput(request.event, override_layout=(json.loads(request.POST.get("data")) if request.POST.get("data") else None), override_background=cf.file if cf else None) fname, mimet, data = prov.generate(p) resp = HttpResponse(data, content_type=mimet) ftype = fname.split(".")[-1] resp['Content-Disposition'] = 'attachment; filename="ticket-preview.{}"'.format(ftype) return resp elif "data" in request.POST: if cf: fexisting = request.event.settings.get('ticketoutput_pdf_layout', as_type=File) if fexisting: try: default_storage.delete(fexisting.name) except OSError: # pragma: no cover logger.error('Deleting file %s failed.' % fexisting.name) # Create new file nonce = get_random_string(length=8) fname = '%s-%s/%s/%s.%s.%s' % ( 'event', 'settings', self.request.event.pk, 'ticketoutput_pdf_layout', nonce, 'pdf' ) newname = default_storage.save(fname, cf.file) request.event.settings.set('ticketoutput_pdf_background', 'file://' + newname) request.event.settings.set('ticketoutput_pdf_layout', request.POST.get("data")) return JsonResponse({'status': 'ok'}) return HttpResponseBadRequest()
def post(self, request, *args, **kwargs): if "emptybackground" in request.POST: p = PdfFileWriter() try: p.addBlankPage( width=float(request.POST.get('width')) * mm, height=float(request.POST.get('height')) * mm, ) except ValueError: return JsonResponse({ "status": "error", "error": "Invalid height/width given." }) buffer = BytesIO() p.write(buffer) buffer.seek(0) c = CachedFile(web_download=True) c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.save() c.file.save('empty.pdf', ContentFile(buffer.read())) c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('control:pdf.background', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) if "background" in request.FILES: error, fileobj = self.process_upload() if error: return JsonResponse({"status": "error", "error": error}) c = CachedFile(web_download=True) c.expires = now() + timedelta(days=7) c.date = now() c.filename = 'background_preview.pdf' c.type = 'application/pdf' c.file = fileobj c.save() c.refresh_from_db() return JsonResponse({ "status": "ok", "id": c.id, "url": reverse('control:pdf.background', kwargs={ 'event': request.event.slug, 'organizer': request.organizer.slug, 'filename': str(c.id) }) }) cf = None if request.POST.get("background", "").strip(): try: cf = CachedFile.objects.get(id=request.POST.get("background")) except CachedFile.DoesNotExist: pass if "preview" in request.POST: with rolledback_transaction(), language( request.event.settings.locale, request.event.settings.region): p = self._get_preview_position() fname, mimet, data = self.generate( p, override_layout=(json.loads(self.request.POST.get("data")) if self.request.POST.get("data") else None), override_background=cf.file if cf else None) resp = HttpResponse(data, content_type=mimet) ftype = fname.split(".")[-1] if settings.DEBUG: # attachment is more secure as we're dealing with user-generated stuff here, but inline is much more convenient during debugging resp[ 'Content-Disposition'] = 'inline; filename="ticket-preview.{}"'.format( ftype) resp._csp_ignore = True else: resp[ 'Content-Disposition'] = 'attachment; filename="ticket-preview.{}"'.format( ftype) return resp elif "data" in request.POST: if cf: self.save_background(cf) self.save_layout() return JsonResponse({'status': 'ok'}) return HttpResponseBadRequest()