Skip to content

Commit

Permalink
chore: Fix sending invoice from template
Browse files Browse the repository at this point in the history
  • Loading branch information
pprzetacznik committed Dec 17, 2023
1 parent dab3ae3 commit a7a68db
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 53 deletions.
22 changes: 17 additions & 5 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
59 changes: 24 additions & 35 deletions templates/invoice_example.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,13 @@
</Adres>
</Podmiot2>
<Fa>
<KodWaluty>PLN</KodWaluty>
<P_1>2023-11-30</P_1>
<P_2>FV-2023/11/01</P_2>
<P_6>2023-08-31</P_6>
<P_13_1>0</P_13_1>
<P_14_1>0</P_14_1>
<P_13_2>241.77</P_13_2>
<P_14_2>19.34</P_14_2>
<P_13_3>0</P_13_3>
<P_14_3>0</P_14_3>
<P_13_4>0</P_13_4>
<P_14_4>0</P_14_4>
<P_13_5>0</P_13_5>
<P_15>261.11</P_15>
<KodWaluty>{{ invoice.currency }}</KodWaluty>
<P_1>{{ invoice.date_of_sale }}</P_1>
<P_1M>{{ invoice.location }}</P_1M>
<P_2>{{ invoice.number }}</P_2>
<P_13_1>{{ invoice.total_value }}</P_13_1>
<P_14_1>{{ invoice.total_vat_value }}</P_14_1>
<P_15>{{ invoice.total_gross_value }}</P_15>
<Adnotacje>
<P_16>2</P_16>
<P_17>2</P_17>
Expand All @@ -58,26 +51,22 @@
<P_PMarzyN>1</P_PMarzyN>
</PMarzy>
</Adnotacje>
<RodzajFaktury>VAT</RodzajFaktury>
<FP>1</FP>
<FaWiersz>
<NrWierszaFa>1</NrWierszaFa>
<PKWiU>PKWiU 08.11.30.0</PKWiU>
<P_8A>szt</P_8A>
<P_8B>1</P_8B>
<P_9A>241.77</P_9A>
<P_10>0</P_10>
<P_11>241.77</P_11>
<P_12>8</P_12>
<GTU>GTU_01</GTU>
<KursWaluty>2</KursWaluty>
</FaWiersz>
<WarunkiTransakcji>
<Zamowienia>
<NrZamowienia>1234567</NrZamowienia>
</Zamowienia>
<KursUmowny>0</KursUmowny>
<WalutaUmowna>PLN</WalutaUmowna>
</WarunkiTransakcji>
<RodzajFaktury>{{ invoice.type }}</RodzajFaktury>
{% for item in invoice.services %}<FaWiersz>
<NrWierszaFa>{{ item.number }}</NrWierszaFa>
<P_7>{{ item.title }}</P_7>
<P_8A>{{ item.unit }}</P_8A>
<P_8B>{{ item.quantity }}</P_8B>
<P_9A>{{ item.net_price }}</P_9A>
<P_11>{{ item.net_value }}</P_11>
<P_12>{{ item.vat }}</P_12>
</FaWiersz>{% endfor %}
<Platnosc>
<TerminPlatnosci>
<Termin>{{ invoice.payment.due_date }}</Termin>
<TerminOpis>{{ invoice.payment.description }}</TerminOpis>
</TerminPlatnosci>
<FormaPlatnosci>{{ invoice.payment.form }}</FormaPlatnosci>
</Platnosc>
</Fa>
</Faktura>
43 changes: 30 additions & 13 deletions test_ksef.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
},
}


Expand All @@ -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)

0 comments on commit a7a68db

Please sign in to comment.