Refactoring ifirma core
This commit is contained in:
parent
8483d1432c
commit
b91ddb6685
@ -1,4 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import six
|
||||
import json
|
||||
import datetime
|
||||
@ -9,6 +10,9 @@ from python_ifirma.helpers import Helpers
|
||||
import requests
|
||||
|
||||
|
||||
from urllib.parse import urljoin, quote
|
||||
|
||||
|
||||
class VAT:
|
||||
VAT_0 = 0.00
|
||||
VAT_5 = 0.05
|
||||
@ -50,17 +54,17 @@ class Client:
|
||||
"Ulica": self.address.street,
|
||||
"Miejscowosc": self.address.city,
|
||||
"Kraj": self.address.country,
|
||||
#"Email": self.email,
|
||||
#"Telefon": self.phone_number,
|
||||
# "Email": self.email,
|
||||
# "Telefon": self.phone_number,
|
||||
"OsobaFizyczna": False,
|
||||
}
|
||||
if self.export == "eu":
|
||||
d.update({"PrefiksUE": self.tax_id[:2]})
|
||||
if self.export == "eu" or self.export == "yes":
|
||||
d.update({"NIP": self.tax_id[2:]})
|
||||
#if self.export == "eu":
|
||||
#d.update({"PrefiksUE": self.tax_id[:2]})
|
||||
#elif self.export == "yes":
|
||||
# if self.export == "eu":
|
||||
# d.update({"PrefiksUE": self.tax_id[:2]})
|
||||
# elif self.export == "yes":
|
||||
d.update({"Kraj": self.tax_id[:2]})
|
||||
else:
|
||||
d.update({"NIP": self.tax_id})
|
||||
@ -147,7 +151,7 @@ class NewInvoiceParams:
|
||||
d.update({
|
||||
"DataObowiazkuPodatkowego": self.__get_issue_date(),
|
||||
"NazwaUslugi": "services",
|
||||
"Waluta": self.currency, #"PLN",
|
||||
"Waluta": self.currency,
|
||||
"Jezyk": "en",
|
||||
"KursWalutyWidoczny": False,
|
||||
"KursWalutyZDniaPoprzedzajacegoDzienWystawieniaFaktury": 1.00,
|
||||
@ -164,6 +168,8 @@ class NewInvoiceParams:
|
||||
|
||||
|
||||
class iFirmaAPI():
|
||||
__base_url = "https://www.ifirma.pl/iapi/"
|
||||
|
||||
__username = None
|
||||
__invoice_key_name = 'faktura'
|
||||
__invoice_key_value = None
|
||||
@ -195,17 +201,37 @@ class iFirmaAPI():
|
||||
|
||||
return response_dict
|
||||
|
||||
def __create_authentication_header_value(self, request_hash_text, key_value=""):
|
||||
def __get_auth_header(self, request_hash_text, key_value=""):
|
||||
key_value = key_value or self.__invoice_key_value
|
||||
return "IAPIS user={}, hmac-sha1={}".format(
|
||||
self.__username,
|
||||
Helpers.get_hmac_of_text(key_value, request_hash_text)
|
||||
)
|
||||
|
||||
def __get(self, url_path, key_name, key_value="", params={}):
|
||||
"""Send GET request to IFirma API"""
|
||||
|
||||
url = urljoin(self.__base_url, url_path)
|
||||
request_hash_text = f"{url}{self.__username}{key_name}"
|
||||
headers = {
|
||||
# Content-type not needed in GET requests
|
||||
# "Content-type": "application/json; charset=UTF-8",
|
||||
"Accept": "application/json",
|
||||
"Authentication": self.__get_auth_header(request_hash_text,
|
||||
key_value=key_value)
|
||||
}
|
||||
response = requests.get(url, headers=headers, params=params)
|
||||
return json.loads(response.content.decode('utf-8'))
|
||||
|
||||
def find_partner(self, keyword):
|
||||
return self.__get(f"kontrahenci/{quote(keyword)}.json",
|
||||
self.__invoice_key_name)
|
||||
|
||||
def __create_invoice_and_return_id(self, invoice, url):
|
||||
# from pprint import pprint
|
||||
# pprint(invoice.get_request_data())
|
||||
request_content = json.dumps(invoice.get_request_data(), separators=(',', ':'))
|
||||
request_content = json.dumps(invoice.get_request_data(),
|
||||
separators=(',', ':'))
|
||||
request_hash_text = "{}{}{}{}".format(
|
||||
url,
|
||||
self.__username,
|
||||
@ -215,7 +241,8 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text,
|
||||
key_value=__user_key_value)
|
||||
}
|
||||
|
||||
response_dict = self.__execute_post_request(headers, request_content, url)
|
||||
@ -243,21 +270,13 @@ class iFirmaAPI():
|
||||
self.__post_cost(cost_json, url)
|
||||
|
||||
def get_accounting_month(self):
|
||||
url = 'https://www.ifirma.pl/iapi/abonent/miesiacksiegowy.json'
|
||||
request_hash_text = "{}{}{}".format(
|
||||
url,
|
||||
self.__username,
|
||||
self.__user_key_name,
|
||||
)
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication":
|
||||
self.__create_authentication_header_value(request_hash_text, self.__user_key_value)
|
||||
}
|
||||
resp = requests.get(url, headers=headers)
|
||||
content = resp.content
|
||||
return content
|
||||
response = self.__get("abonent/miesiacksiegowy.json",
|
||||
self.__user_key_name,
|
||||
key_value=self.__user_key_value)
|
||||
|
||||
month = response['response']["MiesiacKsiegowy"]
|
||||
year = response['response']['RokKsiegowy']
|
||||
return year, month
|
||||
|
||||
def __post_cost(self, cost_json, url):
|
||||
request_content = json.dumps(cost_json, separators=(',', ':'))
|
||||
@ -270,7 +289,7 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text)
|
||||
}
|
||||
|
||||
response_dict = self.__execute_post_request(headers, request_content, url)
|
||||
@ -281,6 +300,15 @@ class iFirmaAPI():
|
||||
else:
|
||||
return None
|
||||
|
||||
def list_invoices(self, date_from="", date_to=""):
|
||||
params = {"dataOd": date_from}
|
||||
if date_to:
|
||||
params.update(dataDo=date_to)
|
||||
|
||||
return self.__get("faktury.json", self.__invoice_key_name,
|
||||
params=params)
|
||||
|
||||
|
||||
def get_invoice_list(self, limit=0):
|
||||
url = "https://www.ifirma.pl/iapi/fakturaeksportuslugue/list.json"
|
||||
request_hash_text = "{}{}{}".format(
|
||||
@ -291,7 +319,7 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text)
|
||||
}
|
||||
params = {}
|
||||
if limit:
|
||||
@ -301,7 +329,7 @@ class iFirmaAPI():
|
||||
return rj
|
||||
|
||||
def get_invoice(self, invoice_id):
|
||||
url = "https://www.ifirma.pl/iapi/fakturaeksportuslug/{}.json".format(invoice_id)
|
||||
url = f"https://www.ifirma.pl/iapi/fakturaeksportuslug/{invoice_id}.json"
|
||||
request_hash_text = "{}{}{}".format(
|
||||
url,
|
||||
self.__username,
|
||||
@ -310,7 +338,7 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text)
|
||||
}
|
||||
resp = requests.get(url, headers=headers)
|
||||
rj = json.loads(resp.content.decode('utf-8'))
|
||||
@ -320,11 +348,11 @@ class iFirmaAPI():
|
||||
return rj
|
||||
|
||||
def get_invoice_pdf(self, invoice_id):
|
||||
url = "https://www.ifirma.pl/iapi/fakturakraj/{}.pdf".format(invoice_id)
|
||||
url = f"https://www.ifirma.pl/iapi/fakturakraj/{invoice_id}.pdf"
|
||||
return self.__download_pdf(url)
|
||||
|
||||
def __get_invoice_number(self, invoice_id):
|
||||
url = "https://www.ifirma.pl/iapi/fakturakraj/{}.json".format(invoice_id)
|
||||
url = f"https://www.ifirma.pl/iapi/fakturakraj/{invoice_id}.json"
|
||||
request_hash_text = "{}{}{}".format(
|
||||
url,
|
||||
self.__username,
|
||||
@ -333,7 +361,7 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/json",
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text)
|
||||
}
|
||||
resp = requests.get(url, headers=headers)
|
||||
rj = json.loads(resp.content.decode('utf-8'))
|
||||
@ -351,7 +379,7 @@ class iFirmaAPI():
|
||||
headers = {
|
||||
"Accept": "application/pdf",
|
||||
"Content-type": "application/pdf; charset=UTF-8",
|
||||
"Authentication": self.__create_authentication_header_value(request_hash_text)
|
||||
"Authentication": self.__get_auth_header(request_hash_text)
|
||||
}
|
||||
resp = requests.get(url, headers=headers)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user