ifixkart-backend/venv/lib/python3.12/site-packages/razorpay/resources/invoice.py

114 lines
3.7 KiB
Python

from .base import Resource
from ..constants.url import URL
import warnings
class Invoice(Resource):
def __init__(self, client=None):
super(Invoice, self).__init__(client)
self.base_url = URL.V1 + URL.INVOICE_URL
def fetch_all(self, data={}, **kwargs): # pragma: no cover
warnings.warn("Will be Deprecated in next release", DeprecationWarning)
return self.all(data, **kwargs)
def all(self, data={}, **kwargs):
"""
Fetch all Invoice entities
Returns:
Dictionary of Invoice data
"""
return super(Invoice, self).all(data, **kwargs)
def fetch(self, invoice_id, data={}, **kwargs):
"""
Fetch Invoice for given Id
Args:
invoice_id : Id for which invoice object has to be retrieved
Returns:
Invoice dict for given invoice Id
"""
return super(Invoice, self).fetch(invoice_id, data, **kwargs)
def create(self, data={}, **kwargs):
"""
Create Invoice from given dict
Args:
data : Dictionary having keys using which invoice have to be created
Returns:
Invoice Dict which was created
"""
url = self.base_url
return self.post_url(url, data, **kwargs)
def notify_by(self, invoice_id, medium, **kwargs):
"""
Send/Resend notifications to customer via email/sms
Args:
invoice_id : Id for trigger notify
medium : Medium for triggering notification via email or sms
Returns:
{"success": true}
"""
url = "{}/{}/notify_by/{}".format(self.base_url, invoice_id, medium)
return self.post_url(url, {}, **kwargs)
def cancel(self, invoice_id, **kwargs):
"""
Cancel an unpaid Invoice with given ID via API
It can only be called on an invoice that is not in the paid state.
Args:
invoice_id : Id for cancel the invoice
Returns:
The response for the API will be the invoice entity, similar to create/update API response, with status attribute's value as cancelled
"""
url = "{}/{}/cancel".format(self.base_url, invoice_id)
return self.post_url(url, {}, **kwargs)
def delete(self, invoice_id, **kwargs):
"""
Delete an invoice
You can delete an invoice which is in the draft state.
Args:
invoice_id : Id for delete the invoice
Returns:
The response is always be an empty array like this - []
"""
url = "{}/{}".format(self.base_url, invoice_id)
return self.delete_url(url, {}, **kwargs)
def issue(self, invoice_id, **kwargs):
"""
Issues an invoice in draft state
Args:
invoice_id : Id for delete the invoice
Returns:
Its response is the invoice entity, similar to create/update API response. Its status now would be issued.
"""
url = "{}/{}/issue".format(self.base_url, invoice_id)
return self.post_url(url, {}, **kwargs)
def edit(self, invoice_id, data={}, **kwargs):
"""
Update an invoice
In draft state all the attributes are allowed.
Args:
invoice_id : Id for delete the invoice
data : Dictionary having keys using which invoice have to be updated
Returns:
Its response is the invoice entity, similar to create/update API response. Its status now would be issued.
Refer https://razorpay.com/docs/invoices/api/#entity-structure
"""
url = "{}/{}".format(self.base_url, invoice_id)
return self.patch_url(url, data, **kwargs)