1from __future__ import absolute_import, division, print_function 2 3from stripe import api_requestor 4from stripe import util 5from stripe.api_resources.abstract import CreateableAPIResource 6from stripe.api_resources.abstract import DeletableAPIResource 7from stripe.api_resources.abstract import ListableAPIResource 8from stripe.api_resources.abstract import UpdateableAPIResource 9from stripe.api_resources.abstract import custom_method 10 11 12@custom_method("finalize_invoice", http_verb="post", http_path="finalize") 13@custom_method("mark_uncollectible", http_verb="post") 14@custom_method("pay", http_verb="post") 15@custom_method("send_invoice", http_verb="post", http_path="send") 16@custom_method("void_invoice", http_verb="post", http_path="void") 17class Invoice( 18 CreateableAPIResource, 19 DeletableAPIResource, 20 ListableAPIResource, 21 UpdateableAPIResource, 22): 23 OBJECT_NAME = "invoice" 24 25 def finalize_invoice(self, idempotency_key=None, **params): 26 url = self.instance_url() + "/finalize" 27 headers = util.populate_headers(idempotency_key) 28 self.refresh_from(self.request("post", url, params, headers)) 29 return self 30 31 def mark_uncollectible(self, idempotency_key=None, **params): 32 url = self.instance_url() + "/mark_uncollectible" 33 headers = util.populate_headers(idempotency_key) 34 self.refresh_from(self.request("post", url, params, headers)) 35 return self 36 37 def pay(self, idempotency_key=None, **params): 38 url = self.instance_url() + "/pay" 39 headers = util.populate_headers(idempotency_key) 40 self.refresh_from(self.request("post", url, params, headers)) 41 return self 42 43 def send_invoice(self, idempotency_key=None, **params): 44 url = self.instance_url() + "/send" 45 headers = util.populate_headers(idempotency_key) 46 self.refresh_from(self.request("post", url, params, headers)) 47 return self 48 49 def void_invoice(self, idempotency_key=None, **params): 50 url = self.instance_url() + "/void" 51 headers = util.populate_headers(idempotency_key) 52 self.refresh_from(self.request("post", url, params, headers)) 53 return self 54 55 @classmethod 56 def upcoming( 57 cls, api_key=None, stripe_version=None, stripe_account=None, **params 58 ): 59 requestor = api_requestor.APIRequestor( 60 api_key, api_version=stripe_version, account=stripe_account 61 ) 62 url = cls.class_url() + "/upcoming" 63 response, api_key = requestor.request("get", url, params) 64 return util.convert_to_stripe_object( 65 response, api_key, stripe_version, stripe_account 66 ) 67