def spec_plan(plan): return OrderedDict([ ("name", plan.name), ("url", absolute_url(reverse("plan-detail", args=[plan.id]))), ("interval", plan.interval), ("interval_count", plan.interval_count), ("amount", str(Decimal(plan.amount).quantize(Decimal('0.0000')))), ("currency", plan.currency), ("trial_period_days", plan.trial_period_days), ("generate_after", plan.generate_after), ("enabled", plan.enabled), ("private", plan.private), ("product_code", plan.product_code.value), ("metered_features", [ spec_metered_feature(metered_feature) for metered_feature in plan.metered_features.all() ]), ("provider", absolute_url(reverse("provider-detail", args=[plan.provider.id]))) ])
def spec_subscription(subscription, detail=False): return OrderedDict([ ("id", subscription.id), ("url", absolute_url(reverse("subscription-detail", args=[subscription.customer.id, subscription.id]))), ("plan", (spec_plan(subscription.plan) if detail else absolute_url(reverse("plan-detail", args=[subscription.plan.id])))), ("customer", absolute_url(reverse("customer-detail", args=[subscription.customer.id]))), ("trial_end", str(subscription.trial_end) if subscription.trial_end else None), ("start_date", str(subscription.start_date) if subscription.start_date else None), ("cancel_date", str(subscription.cancel_date) if subscription.cancel_date else None), ("ended_at", str(subscription.ended_at) if subscription.ended_at else None), ("state", subscription.state), ("reference", subscription.reference), ("updateable_buckets", subscription.updateable_buckets()), ("meta", subscription.meta), ("description", subscription.description) ])
}, 'invoice_entries': { 'required': False, 'expected_input_types': list, 'output': lambda invoice: [ spec_document_entry(entry) for entry in invoice.entries ], 'assertions': [ lambda input, invoice, output: ( len(input) == len(invoice.entries) == len(output) if input else len(invoice.entries) == len(output) ), # TODO # lambda input, invoice, output: ( # document_entry_definition.check_response(input, invoice.entries, output) # ) ] }, 'pdf_url': { 'read_only': True, 'output': lambda invoice: ( None if not (invoice.pdf and invoice.pdf.url) else absolute_url(invoice.pdf.url) ) } }) def spec_invoice(invoice): return invoice_definition.generate(invoice)
def spec_payment_method_url(payment_method): return absolute_url(reverse("payment-method-detail", args=[payment_method.customer.id, payment_method.id]))
def spec_invoice_url(invoice): return absolute_url(reverse("invoice-detail", args=[invoice.id]))
def spec_transaction_pay_url(transaction): return absolute_url(reverse("payment", args=[_get_jwt_token(transaction)]))
def spec_transaction_url(transaction): return absolute_url(reverse("transaction-detail", args=[transaction.customer.id, transaction.uuid]))
def spec_provider_url(provider): return absolute_url(reverse("provider-detail", args=[provider.id]))
def spec_customer_url(customer): return absolute_url(reverse("customer-detail", args=[customer.id]))
def spec_proforma_url(proforma): return absolute_url(reverse("proforma-detail", args=[proforma.id]))