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 decimal import Decimal
from typing import List
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)
.order_by(Tax.name, Inventory.tax_rate)
).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