diff --git a/server.py b/server.py index b25971c..eb25247 100644 --- a/server.py +++ b/server.py @@ -193,25 +193,37 @@ def wait_until_logged(self): def send_invoice(self, **kwargs): invoice = render_template("invoice_example.xml", **kwargs) print(invoice) + invoice_encoded = invoice.encode("utf-8") invoice_hash = { - "fileSize": len(invoice), + "fileSize": len(invoice_encoded), "hashSHA": { "algorithm": "SHA-256", "encoding": "Base64", "value": base64.b64encode( - hashlib.sha256(invoice.encode("utf-8")).digest() + hashlib.sha256(invoice_encoded).digest() ).decode("utf-8"), }, } invoice_payload = { - "invoiceBody": base64.b64encode(invoice.encode("utf-8")).decode( - "utf-8" - ), + "invoiceBody": base64.b64encode(invoice_encoded).decode("utf-8"), "type": "plain", } data = {"invoiceHash": invoice_hash, "invoicePayload": invoice_payload} return self.server.send_invoice(data, self.init_token) + def wait_until_invoice(self, reference_number): + invoice_status = {} + while not invoice_status: + response = self.get_invoice_status(reference_number) + print(response.status_code) + print(json.dumps(response.json(), indent=4)) + invoice_status = response.json().get("invoiceStatus") + if not invoice_status.get("ksefReferenceNumber"): + invoice_status = {} + if not invoice_status: + sleep(1) + return invoice_status + def get_invoice_status(self, reference_number: str): return self.server.get_invoice_status( reference_number, self.init_token diff --git a/templates/invoice_example.xml b/templates/invoice_example.xml index 84f566f..8c1691f 100644 --- a/templates/invoice_example.xml +++ b/templates/invoice_example.xml @@ -28,20 +28,13 @@ - PLN - 2023-11-30 - FV-2023/11/01 - 2023-08-31 - 0 - 0 - 241.77 - 19.34 - 0 - 0 - 0 - 0 - 0 - 261.11 + {{ invoice.currency }} + {{ invoice.date_of_sale }} + {{ invoice.location }} + {{ invoice.number }} + {{ invoice.total_value }} + {{ invoice.total_vat_value }} + {{ invoice.total_gross_value }} 2 2 @@ -58,26 +51,22 @@ 1 - VAT - 1 - - 1 - PKWiU 08.11.30.0 - szt - 1 - 241.77 - 0 - 241.77 - 8 - GTU_01 - 2 - - - - 1234567 - - 0 - PLN - + {{ invoice.type }} + {% for item in invoice.services %} + {{ item.number }} + {{ item.title }} + {{ item.unit }} + {{ item.quantity }} + {{ item.net_price }} + {{ item.net_value }} + {{ item.vat }} + {% endfor %} + + + {{ invoice.payment.due_date }} + {{ invoice.payment.description }} + + {{ invoice.payment.form }} + diff --git a/test_ksef.py b/test_ksef.py index 6dcebcc..a95bfac 100644 --- a/test_ksef.py +++ b/test_ksef.py @@ -60,7 +60,35 @@ def invoice_data(config): "address2": "40-100 Krakow", "country_code": "PL", }, - "invoice": {"creation_date": creation_date}, + "invoice": { + "creation_date": creation_date, + "currency": "PLN", + "type": "VAT", + "number": "FV-2023/12/10", + "location": "Kraków", + "date_of_sale": "2023-12-11", + "services": [ + { + "number": "1", + "gross_value": "", + "net_price": "100", + "net_value": "200", + "quantity": "2", + "title": "Service", + "vat": "23", + "vat_value": "", + "unit": "szt", + } + ], + "total_gross_value": "246", + "total_value": "200", + "total_vat_value": "46", + "payment": { + "due_date": "2023-12-20", + "description": "10 dni", + "form": 6, + }, + }, } @@ -72,20 +100,9 @@ def test_send_invoice(config, service, invoice_data): response_send_invoice = service.send_invoice(**invoice_data) print(response_send_invoice.status_code) print(dumps(response_send_invoice.json(), indent=4)) - reference_number = response_send_invoice.json().get( "elementReferenceNumber" ) - invoice_status = {} - while not invoice_status: - response = service.get_invoice_status(reference_number) - print(response.status_code) - print(dumps(response.json(), indent=4)) - invoice_status = response.json().get("invoiceStatus") - if not invoice_status.get("ksefReferenceNumber"): - invoice_status = {} - if not invoice_status: - sleep(1) - + invoice_status = service.wait_until_invoice(reference_number) invoice = service.get_invoice(invoice_status.get("ksefReferenceNumber")) print(invoice)