Feature: Tax report and consequently sale report should show tax broken up properly for taxes such as GST

This commit is contained in:
Amritanshu Agrawal 2021-06-26 08:50:41 +05:30
parent da9d58025c
commit eb2f783b9e
1 changed files with 21 additions and 1 deletions

View File

@ -1,4 +1,7 @@
import re
from datetime import date, datetime, time, timedelta from datetime import date, datetime, time, timedelta
from decimal import Decimal
from typing import List from typing import List
from fastapi import APIRouter, Depends, Security from fastapi import APIRouter, Depends, Security
@ -62,4 +65,21 @@ def get_tax(s: date, f: date, db: Session) -> List[TaxReportItem]:
.group_by(Tax.name, Inventory.tax_rate) .group_by(Tax.name, Inventory.tax_rate)
.order_by(Tax.name, Inventory.tax_rate) .order_by(Tax.name, Inventory.tax_rate)
).all() ).all()
return [TaxReportItem(name=f"{i[0]} - {i[1]:.2%}", taxRate=i[1], saleAmount=i[2], amount=i[3]) for i in amounts] return sum([get_tax_item(*i) for i in amounts], [])
def get_tax_item(name: str, rate: Decimal, net: Decimal, amount: Decimal) -> List[TaxReportItem]:
items = name.split(";")
if len(items) == 1:
return [TaxReportItem(name=name, taxRate=rate, saleAmount=net, amount=amount)]
else:
r = []
for i, item in enumerate(it.strip() for it in items):
match = re.match(r"(^.*)\s+\((.*?)/(.*?)\)[^(]*$", item)
if not match or len(match.groups()) != 3:
raise Exception("Error in tax as it has multiple items, but the format is wrong.")
ratio = Decimal(match.group(2)) / Decimal(match.group(3))
sub_net = round(net * ratio, 2)
sub_amount = round(amount * ratio, 2)
r.append(TaxReportItem(name=f"{match.group(1)}", taxRate=rate, saleAmount=sub_net, amount=sub_amount))
return r