An unofficial package help developers to implement ZATCA (Fatoora) QR code easily which required for e-invoicing
Project description
ZATCA (Fatoora) QR-Code Implementation
An unofficial package help developers to implement ZATCA (Fatoora) QR code easily which required for e-invoicing
Table of Contents
Requirements
- Python >= 3.8
- zbar-tools
Installation
PyPi
$ pip3 install fatoora
GitHub
$ git clone https://github.com/TheAwiteb/fatoora/
$ cd fatoora
$ python3 setup.py install
Usage
Variables
Here the features of the variables of the Fatoora class will be explained
Name | Feature | How will it be in the tag | How will it be when you call |
---|---|---|---|
seller_name | saved directly without processing | No changes will be made to it | No changes will be made to it |
tax_number | receives the tax number as a text and a number as well, and save it as string | number as string | number as string |
invoice_date | receives the date as timestamp or datetime object, or string ISO 8601 Zulu format | string of date as ISO 8601 Zulu format | datetime object |
total_amount | receives the tax number as a text and a number as well | It is of type str | It is of type float |
tax_amount | same total_amount | same total_amount | same total_amount |
Generate Base64
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891, # or "1234567891"
invoice_date=1635872693.3186214, # timestamp or datetime object, or string ISO 8601 Zulu format
total_amount=115, # or 115.0, 115.00, "115.0", "115.00"
tax_amount=15, # or 15.0, 15.00, "15.0", "15.00"
)
print(fatoora_obj.base64)
# AQZBd2l0ZWICCjEyMzQ1Njc4OTEDDzE2MzU4NzI2OTMuMzE4NgQGMTAwLjAwBQUxNS4wMA==
Render A QR Code Image
You can render the tags as QR code image easily
The content is the base64 of the invoice
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=115,
tax_amount=15,
)
fatoora_obj.qrcode("qr_code.png")
The content is the invoice url
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=115,
tax_amount=15,
qrcode_url="https://example.com"
)
fatoora_obj.qrcode("qr_code_with_url.png")
Generate hash (sha256)
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=115,
tax_amount=15,
)
print(fatoora_obj.hash)
# 0863de708b8bfb02541e3662c327f7a6a22173b635690960ad5a1ba506096522
Read qr code
from fatoora import Fatoora
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=115,
tax_amount=15,
)
fatoora_obj.qrcode("qr_code.png")
print(Fatoora.read_qrcode("qr_code.png", dct=True))
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '1635872693.3186', 'total_amount': '115.00', 'tax_amount': '15.00'}
print(Fatoora.read_qrcode("qr_code.png", dct=False))
# AQZBd2l0ZWICCjEyMzQ1Njc4OTEDDzE2MzU4NzI2OTMuMzE4NgQGMTAwLjAwBQUxNS4wMA==
Extra Methods
fatoora_obj = Fatoora(
seller_name="Awiteb",
tax_number=1234567891,
invoice_date=1635872693.3186214,
total_amount=115,
tax_amount=15,
)
print(fatoora_obj.invoice_date.year)
# 2021
print(fatoora_obj.invoice_date.isoformat())
# 2021-11-02T20:04:53.318600
print(fatoora_obj.invoice_date.timestamp())
# 1635872693.3186
print(fatoora_obj.json())
# '{"seller_name": "Awiteb", "tax_number": "1234567891", "invoice_date": "1635872693.3186", "total_amount": "115.00", "tax_amount": "15.00"}'
print(fatoora_obj.dict())
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '1635872693.3186', 'total_amount': '115.00', 'tax_amount': '15.00'}
# Use class to get fatoora details by base64
print(Fatoora.base2dict(fatoora_obj.base64))
# {'seller_name': 'Awiteb', 'tax_number': '1234567891', 'invoice_date': '1635872693.3186', 'total_amount': '115.00', 'tax_amount': '15.00'}
Discussions
Question, feature request, discuss about fatoora here
Issues
You can report a bug here
Security
If you discover any security related issues.
Project use this package
no one yet
If you are interested in adding your project to the list, you can make a PR and add it
License
The MIT License (MIT). Please see License File for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.