Initial version of the E-Invoice solution of JR IT Services
This commit is contained in:
24
jr_einvoice/calc.py
Normal file
24
jr_einvoice/calc.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict
|
||||
from .models import Invoice
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Totals:
|
||||
net_total: float
|
||||
tax_total: float
|
||||
gross_total: float
|
||||
tax_by_rate: Dict[float, float]
|
||||
|
||||
def compute_totals(inv: Invoice) -> Totals:
|
||||
net = 0.0
|
||||
tax_total = 0.0
|
||||
tax_by_rate: Dict[float, float] = {}
|
||||
for it in inv.items:
|
||||
line_net = float(it.quantity) * float(it.unit_price_net)
|
||||
net += line_net
|
||||
tax = line_net * float(it.tax_rate) / 100.0
|
||||
tax_total += tax
|
||||
tax_by_rate[it.tax_rate] = tax_by_rate.get(it.tax_rate, 0.0) + tax
|
||||
gross = net + tax_total
|
||||
return Totals(net_total=net, tax_total=tax_total, gross_total=gross, tax_by_rate=tax_by_rate)
|
||||
Reference in New Issue
Block a user