All Reports done!!
This commit is contained in:
@ -10,9 +10,14 @@ POSTGRES_USER=
|
||||
POSTGRES_PASSWORD=
|
||||
POSTGRES_DB=
|
||||
|
||||
# openssl rand -hex 32
|
||||
SECRET_KEY=
|
||||
# openssl rand -hex 5
|
||||
MIDDLEWARE_SECRET_KEY=
|
||||
ALGORITHM=HS256
|
||||
JWT_TOKEN_EXPIRE_MINUTES=30
|
||||
|
||||
NEW_DAY_OFFSET_MINUTES =420
|
||||
|
||||
ALEMBIC_LOG_LEVEL=INFO
|
||||
ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN
|
||||
|
||||
106
barker/main.py
106
barker/main.py
@ -3,62 +3,28 @@ from fastapi import FastAPI
|
||||
from starlette.middleware.sessions import SessionMiddleware
|
||||
|
||||
from .routers import (
|
||||
# account,
|
||||
# account_types,
|
||||
# attendance_report,
|
||||
# attendance_types,
|
||||
# attendance,
|
||||
# batch,
|
||||
# cost_centre,
|
||||
# credit_salary,
|
||||
# db_image,
|
||||
# db_integrity,
|
||||
# employee,
|
||||
# employee_attendance,
|
||||
# employee_benefit,
|
||||
# fingerprint,
|
||||
# incentive,
|
||||
# issue,
|
||||
# issue_grid,
|
||||
# lock_information,
|
||||
# maintenance,
|
||||
menu_category,
|
||||
modifier,
|
||||
modifier_category,
|
||||
printer,
|
||||
product,
|
||||
# rebase,
|
||||
# reset_stock,
|
||||
# recipe,
|
||||
login,
|
||||
sale_category,
|
||||
section,
|
||||
section_printer,
|
||||
table,
|
||||
tax,
|
||||
# journal,
|
||||
# purchase,
|
||||
# purchase_return,
|
||||
# voucher,
|
||||
)
|
||||
from .routers.auth import client, user, role
|
||||
# from .routers.reports import (
|
||||
# ledger,
|
||||
# balance_sheet,
|
||||
# profit_loss,
|
||||
# closing_stock,
|
||||
# cash_flow,
|
||||
# daybook,
|
||||
# net_transactions,
|
||||
# product_ledger,
|
||||
# purchase_entries,
|
||||
# purchases,
|
||||
# raw_material_cost,
|
||||
# reconcile,
|
||||
# stock_movement,
|
||||
# trial_balance,
|
||||
# unposted,
|
||||
# )
|
||||
from .routers.reports import (
|
||||
beer_consumption_report,
|
||||
bill_settlement_report,
|
||||
cashier_report,
|
||||
discount_report,
|
||||
product_sale_report,
|
||||
sale_report,
|
||||
tax_report
|
||||
)
|
||||
|
||||
from .db.base_class import Base
|
||||
from .core.config import settings
|
||||
@ -69,54 +35,36 @@ Base.metadata.create_all(bind=engine)
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
app.add_middleware(SessionMiddleware, secret_key="29e4c76b6c")
|
||||
# app.include_router(db_image.router, prefix="/db-image", tags=["db-image"])
|
||||
app.include_router(login.router, tags=["login"])
|
||||
# app.include_router(account.router, prefix="/api/accounts", tags=["accounts"])
|
||||
# app.include_router(account_types.router, prefix="/api/account-types", tags=["accounts"])
|
||||
# app.include_router(attendance.router, prefix="/api/attendance", tags=["attendance"])
|
||||
# app.include_router(attendance_types.router, prefix="/api/attendance-types", tags=["attendance"])
|
||||
# app.include_router(employee_attendance.router, prefix="/api/employee-attendance", tags=["attendance"])
|
||||
# app.include_router(employee_attendance.router, prefix="/api/employee-attendance", tags=["attendance"])
|
||||
# app.include_router(attendance_report.router, prefix="/attendance-report", tags=["attendance"])
|
||||
app.add_middleware(SessionMiddleware, secret_key=settings.MIDDLEWARE_SECRET_KEY)
|
||||
|
||||
# app.include_router(cost_centre.router, prefix="/api/cost-centres", tags=["cost-centres"])
|
||||
# app.include_router(employee.router, prefix="/api/employees", tags=["employees"])
|
||||
# app.include_router(fingerprint.router, prefix="/api/fingerprint", tags=["employees"])
|
||||
app.include_router(login.router, tags=["login"])
|
||||
app.include_router(client.router, prefix="/api/clients", tags=["clients"])
|
||||
app.include_router(role.router, prefix="/api/roles", tags=["users"])
|
||||
app.include_router(user.router, prefix="/api/users", tags=["users"])
|
||||
|
||||
app.include_router(modifier.router, prefix="/api/modifiers", tags=["modifiers"])
|
||||
app.include_router(modifier_category.router, prefix="/api/modifier-categories", tags=["modifiers"])
|
||||
|
||||
app.include_router(printer.router, prefix="/api/printers", tags=["printers"])
|
||||
|
||||
app.include_router(menu_category.router, prefix="/api/menu-categories", tags=["products"])
|
||||
app.include_router(product.router, prefix="/api/products", tags=["products"])
|
||||
app.include_router(sale_category.router, prefix="/api/sale-categories", tags=["products"])
|
||||
app.include_router(tax.router, prefix="/api/taxes", tags=["products"])
|
||||
|
||||
app.include_router(modifier.router, prefix="/api/modifiers", tags=["modifiers"])
|
||||
app.include_router(modifier_category.router, prefix="/api/modifier-categories", tags=["modifiers"])
|
||||
|
||||
app.include_router(section.router, prefix="/api/sections", tags=["sections"])
|
||||
app.include_router(section_printer.router, prefix="/api/section-printers", tags=["section-printers"])
|
||||
|
||||
app.include_router(tax.router, prefix="/api/taxes", tags=["taxes"])
|
||||
|
||||
app.include_router(table.router, prefix="/api/tables", tags=["tables"])
|
||||
|
||||
app.include_router(client.router, prefix="/api/clients", tags=["clients"])
|
||||
app.include_router(role.router, prefix="/api/roles", tags=["users"])
|
||||
app.include_router(user.router, prefix="/api/users", tags=["users"])
|
||||
|
||||
# app.include_router(ledger.router, prefix="/api/ledger", tags=["reports"])
|
||||
# app.include_router(balance_sheet.router, prefix="/api/balance-sheet", tags=["reports"])
|
||||
# app.include_router(profit_loss.router, prefix="/api/profit-loss", tags=["reports"])
|
||||
# app.include_router(closing_stock.router, prefix="/api/closing-stock", tags=["reports"])
|
||||
# app.include_router(cash_flow.router, prefix="/api/cash-flow", tags=["reports"])
|
||||
# app.include_router(daybook.router, prefix="/api/daybook", tags=["reports"])
|
||||
# app.include_router(net_transactions.router, prefix="/api/net-transactions", tags=["reports"])
|
||||
# app.include_router(product_ledger.router, prefix="/api/product-ledger", tags=["reports"])
|
||||
# app.include_router(purchase_entries.router, prefix="/api/purchase-entries", tags=["reports"])
|
||||
# app.include_router(purchases.router, prefix="/api/purchases", tags=["reports"])
|
||||
# app.include_router(raw_material_cost.router, prefix="/api/raw-material-cost", tags=["reports"])
|
||||
# app.include_router(reconcile.router, prefix="/api/reconcile", tags=["reports"])
|
||||
# app.include_router(stock_movement.router, prefix="/api/stock-movement", tags=["reports"])
|
||||
# app.include_router(trial_balance.router, prefix="/api/trial-balance", tags=["reports"])
|
||||
# app.include_router(unposted.router, prefix="/api/unposted", tags=["reports"])
|
||||
app.include_router(beer_consumption_report.router, prefix="/api/beer-consumption-report", tags=["reports"])
|
||||
app.include_router(bill_settlement_report.router, prefix="/api/bill-settlement-report", tags=["reports"])
|
||||
app.include_router(cashier_report.router, prefix="/api/cashier-report", tags=["reports"])
|
||||
app.include_router(discount_report.router, prefix="/api/discount-report", tags=["reports"])
|
||||
app.include_router(product_sale_report.router, prefix="/api/product-sale-report", tags=["reports"])
|
||||
app.include_router(sale_report.router, prefix="/api/sale-report", tags=["reports"])
|
||||
app.include_router(tax_report.router, prefix="/api/tax-report", tags=["reports"])
|
||||
|
||||
# app.include_router(issue_grid.router, prefix="/api/issue-grid", tags=["vouchers"])
|
||||
# app.include_router(batch.router, prefix="/api/batch", tags=["vouchers"])
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
__author__ = "tanshu"
|
||||
|
||||
|
||||
def get_start_date(s):
|
||||
if not s:
|
||||
return datetime.today().replace(hour=7)
|
||||
else:
|
||||
return datetime.strptime(s, "%d-%b-%Y").replace(hour=7)
|
||||
|
||||
|
||||
def get_finish_date(f):
|
||||
if not f:
|
||||
return datetime.today().replace(hour=7) + timedelta(days=1)
|
||||
else:
|
||||
return datetime.strptime(f, "%d-%b-%Y").replace(hour=7) + timedelta(days=1)
|
||||
|
||||
@ -1,32 +1,43 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from pyramid.view import view_config
|
||||
from sqlalchemy import func
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.sql.expression import func
|
||||
|
||||
from barker.models import Inventory, Kot, Product, Voucher, VoucherType
|
||||
from barker.models.validation_exception import ValidationError
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from barker.core.config import settings
|
||||
from ...models import Inventory, Product, Kot, Voucher, VoucherType
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_beer_consumption_report",
|
||||
renderer="json",
|
||||
permission="Beer Consumption Report",
|
||||
)
|
||||
def beer_consumption(request):
|
||||
start_date = get_start_date(request.GET.get("s", None)) - timedelta(hours=7)
|
||||
finish_date = get_finish_date(request.GET.get("f", None)) - timedelta(hours=7)
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
day = func.date_trunc("day", Voucher.date - timedelta(hours=7)).label("day")
|
||||
@router.get("")
|
||||
def beer_consumption(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["beer-consumption-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day")
|
||||
sum_ = func.sum(Inventory.quantity * Product.quantity).label("sum")
|
||||
list_ = (
|
||||
request.dbsession.query(day, Product.name, sum_)
|
||||
db.query(day, Product.name, sum_)
|
||||
.join(Voucher.kots)
|
||||
.join(Kot.inventories)
|
||||
.join(Inventory.product)
|
||||
@ -44,17 +55,17 @@ def beer_consumption(request):
|
||||
)
|
||||
headers = []
|
||||
data = []
|
||||
for date, name, quantity in list_:
|
||||
for date_, name, quantity in list_:
|
||||
if name not in headers:
|
||||
headers.append(name)
|
||||
old = [d for d in data if d["date"] == date.strftime("%d-%b-%Y")]
|
||||
old = [d for d in data if d["date"] == date_.strftime("%d-%b-%Y")]
|
||||
if len(old):
|
||||
old[0][name] = quantity
|
||||
else:
|
||||
data.append({"date": date.strftime("%d-%b-%Y"), name: quantity})
|
||||
data.append({"date": date_.strftime("%d-%b-%Y"), name: quantity})
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"headers": headers,
|
||||
"data": data,
|
||||
}
|
||||
|
||||
@ -1,35 +1,51 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from pyramid.view import view_config
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from barker.models import Settlement, SettleOption, Voucher, VoucherType, Reprint
|
||||
from barker.models.validation_exception import ValidationError
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from barker.core.config import settings
|
||||
from ...models import Voucher, VoucherType, Settlement, Reprint, SettleOption
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_bill_settlement_report", renderer="json", permission="Bill Settlement Report",
|
||||
)
|
||||
def bill_details(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
@router.get("")
|
||||
def bill_details(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["bill-settlement-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"amounts": settlements(start_date, finish_date, request.dbsession)
|
||||
+ reprints(start_date, finish_date, request.dbsession),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"amounts": settlements(start_date, finish_date, db)
|
||||
+ reprints(start_date, finish_date, db),
|
||||
}
|
||||
|
||||
|
||||
def settlements(start_date, finish_date, dbsession):
|
||||
def settlements(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
vouchers = (
|
||||
dbsession.query(Voucher)
|
||||
db.query(Voucher)
|
||||
.join(Voucher.settlements)
|
||||
.join(Settlement.settle_option)
|
||||
.filter(Voucher.date >= start_date, Voucher.date <= finish_date)
|
||||
@ -60,7 +76,9 @@ def settlements(start_date, finish_date, dbsession):
|
||||
return report
|
||||
|
||||
|
||||
def reprints(start_date, finish_date, dbsession):
|
||||
def reprints(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
return [
|
||||
{
|
||||
"date": item.date.strftime("%d-%b-%Y %H:%M:%S"),
|
||||
@ -70,5 +88,5 @@ def reprints(start_date, finish_date, dbsession):
|
||||
next(s.amount for s in item.voucher.settlements if s.settled == SettleOption.AMOUNT()) * -1, 2,
|
||||
),
|
||||
}
|
||||
for item in dbsession.query(Reprint).filter(Reprint.date >= start_date, Reprint.date <= finish_date).all()
|
||||
for item in db.query(Reprint).filter(Reprint.date >= start_date, Reprint.date <= finish_date).all()
|
||||
]
|
||||
|
||||
@ -1,65 +1,78 @@
|
||||
import uuid
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from barker.models import Voucher, User, Settlement
|
||||
from pyramid.view import view_config
|
||||
from sqlalchemy.orm import joinedload
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy import distinct
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from ...core.config import settings
|
||||
from ...models import Voucher, Settlement, User
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
__author__ = "tanshu"
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_active_cashiers", renderer="json", permission="Cashier Report",
|
||||
)
|
||||
def active_cashiers(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
user_ids = (
|
||||
request.dbsession.query(Voucher.user_id)
|
||||
.filter(Voucher.date >= start_date, Voucher.date <= finish_date)
|
||||
.distinct()
|
||||
|
||||
@router.get("/active")
|
||||
def active_cashiers(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["cashier-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
users = (
|
||||
db.query(User)
|
||||
.filter(
|
||||
User.id.in_(
|
||||
db.query(distinct(Voucher.user_id)).filter(
|
||||
Voucher.date >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES),
|
||||
Voucher.date <= finish_date + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES),
|
||||
)
|
||||
)
|
||||
)
|
||||
.order_by(User.name)
|
||||
.all()
|
||||
)
|
||||
|
||||
users = request.dbsession.query(User).filter(User.id.in_(user_ids)).order_by(User.name).all()
|
||||
|
||||
return [{"id": u.id, "name": u.name} for u in users]
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_cashier_report", renderer="json", permission="Cashier Report",
|
||||
)
|
||||
def blank_out(request):
|
||||
start_date = request.GET.get("s", datetime.today().strftime("%d-%b-%Y"))
|
||||
finish_date = request.GET.get("f", datetime.today().strftime("%d-%b-%Y"))
|
||||
|
||||
return {
|
||||
"startDate": start_date,
|
||||
"finishDate": finish_date,
|
||||
"user": {"id": ""},
|
||||
"amounts": [],
|
||||
"info": [],
|
||||
}
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET",
|
||||
route_name="v1_cashier_report_id",
|
||||
renderer="json",
|
||||
permission="Cashier Report",
|
||||
request_param=("s", "f"),
|
||||
)
|
||||
def check_me_out(request):
|
||||
id_ = uuid.UUID(request.matchdict["id"])
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
@router.get("/{id_}")
|
||||
def show_id(
|
||||
id_: uuid.UUID,
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["cashier-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
vouchers = (
|
||||
request.dbsession.query(Voucher)
|
||||
db.query(Voucher)
|
||||
.options(joinedload(Voucher.settlements, innerjoin=True).joinedload(Settlement.settle_option, innerjoin=True))
|
||||
.filter(Voucher.date >= start_date, Voucher.date <= finish_date, Voucher.user_id == id_,)
|
||||
.filter(
|
||||
Voucher.date >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES),
|
||||
Voucher.date <= finish_date + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES),
|
||||
Voucher.user_id == id_,
|
||||
)
|
||||
.order_by(Voucher.voucher_type)
|
||||
.order_by(Voucher.bill_id)
|
||||
.all()
|
||||
@ -82,9 +95,30 @@ def check_me_out(request):
|
||||
)
|
||||
amounts[so.settle_option.name] += so.amount
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"user": {"id": id_},
|
||||
"amounts": [{"name": key, "amount": value} for key, value in amounts.items()],
|
||||
"info": info,
|
||||
}
|
||||
|
||||
|
||||
@router.get("")
|
||||
def show_blank(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["cashier-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"user": {"id": ""},
|
||||
"amounts": [],
|
||||
"info": [],
|
||||
}
|
||||
|
||||
@ -1,36 +1,53 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from pyramid.view import view_config
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from barker.models import Inventory, Kot, Product, Voucher, SaleCategory, VoucherType
|
||||
from barker.models.validation_exception import ValidationError
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from barker.core.config import settings
|
||||
from ...models import Voucher, VoucherType, Settlement, Reprint, SettleOption, Inventory, SaleCategory, Kot, Product
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_discount_report", renderer="json", permission="Discount Report",
|
||||
)
|
||||
def discount_report_view(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
@router.get("")
|
||||
def discount_report_view(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["discount-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"amounts": discount_report(start_date, finish_date, request.dbsession),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"amounts": discount_report(start_date, finish_date, db),
|
||||
}
|
||||
|
||||
|
||||
def discount_report(start_date, finish_date, dbsession):
|
||||
def discount_report(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
|
||||
amount = func.sum(Inventory.quantity * Inventory.effective_price * Inventory.discount).label("Amount")
|
||||
list_ = (
|
||||
dbsession.query(SaleCategory.name, amount)
|
||||
db.query(SaleCategory.name, amount)
|
||||
.join(Voucher.kots)
|
||||
.join(Kot.inventories)
|
||||
.join(Inventory.product)
|
||||
|
||||
@ -1,42 +1,54 @@
|
||||
from datetime import datetime, timedelta
|
||||
from pyramid.view import view_config
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from barker.models import (
|
||||
Inventory,
|
||||
Kot,
|
||||
Product,
|
||||
Voucher,
|
||||
SaleCategory,
|
||||
VoucherType,
|
||||
MenuCategory,
|
||||
)
|
||||
from barker.models.validation_exception import ValidationError
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from barker.core.config import settings
|
||||
from ...models import Voucher, VoucherType, Product, Inventory, Kot, SaleCategory, \
|
||||
MenuCategory
|
||||
from ...schemas import to_camel
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_product_sale_report", renderer="json", permission="Product Sale Report",
|
||||
)
|
||||
def product_sale_report_view(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
@router.get("")
|
||||
def product_sale_report_view(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["product-sale-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"amounts": product_sale_report(start_date, finish_date, request.dbsession),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"amounts": product_sale_report(start_date, finish_date, db),
|
||||
}
|
||||
|
||||
|
||||
def product_sale_report(start_date, finish_date, dbsession):
|
||||
def product_sale_report(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
|
||||
list_ = (
|
||||
dbsession.query(
|
||||
db.query(
|
||||
Product.id, Product.full_name, Voucher.voucher_type, Inventory.is_happy_hour, func.sum(Inventory.quantity),
|
||||
)
|
||||
.join(Inventory.kot)
|
||||
@ -58,7 +70,7 @@ def product_sale_report(start_date, finish_date, dbsession):
|
||||
)
|
||||
info = []
|
||||
for id_, name, type_, hh, quantity in list_:
|
||||
type_ = to_camel_case(VoucherType(type_).name)
|
||||
type_ = to_camel(VoucherType(type_).name)
|
||||
old = [i for i in info if i["id"] == id_ and i["isHappyHour"] == hh]
|
||||
if len(old):
|
||||
old[0][type_] = quantity
|
||||
@ -69,8 +81,3 @@ def product_sale_report(start_date, finish_date, dbsession):
|
||||
return info
|
||||
|
||||
|
||||
def to_camel_case(snake_str):
|
||||
components = snake_str.split("_")
|
||||
# We capitalize the first letter of each component except the first one
|
||||
# with the 'title' method and join them together.
|
||||
return components[0].lower() + "".join(x.title() for x in components[1:])
|
||||
|
||||
@ -1,50 +1,59 @@
|
||||
from datetime import datetime, timedelta
|
||||
from pyramid.view import view_config
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from barker.models import (
|
||||
Inventory,
|
||||
Kot,
|
||||
Product,
|
||||
Settlement,
|
||||
SettleOption,
|
||||
Tax,
|
||||
Voucher,
|
||||
SaleCategory,
|
||||
VoucherType,
|
||||
)
|
||||
from barker.models.validation_exception import ValidationError
|
||||
from barker.views.reports import get_start_date, get_finish_date
|
||||
from barker.core.config import settings
|
||||
from .tax_report import get_tax
|
||||
from ...models import Voucher, VoucherType, Settlement, SettleOption, Product, Inventory, Kot, SaleCategory
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_sale_report", renderer="json", permission="Sale Report",
|
||||
)
|
||||
def get_sale_analysis(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
@router.get("")
|
||||
def get_sale_analysis(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["sale-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"amounts": (
|
||||
get_sale(start_date, finish_date, request.dbsession)
|
||||
get_sale(start_date, finish_date, db)
|
||||
+ [{"name": "--", "amount": 0}]
|
||||
+ get_settlements(start_date, finish_date, request.dbsession)
|
||||
+ get_settlements(start_date, finish_date, db)
|
||||
+ [{"name": "--", "amount": 0}]
|
||||
+ get_tax(start_date, finish_date, request.dbsession)
|
||||
+ get_tax(start_date, finish_date, db)
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def get_sale(start_date, finish_date, dbsession):
|
||||
def get_sale(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
|
||||
list_ = (
|
||||
dbsession.query(SaleCategory.name, func.sum(Inventory.net))
|
||||
db.query(SaleCategory.name, func.sum(Inventory.net))
|
||||
.join(Inventory.kot)
|
||||
.join(Kot.voucher)
|
||||
.join(Inventory.product)
|
||||
@ -66,9 +75,12 @@ def get_sale(start_date, finish_date, dbsession):
|
||||
return info + [{"name": "Total Settled", "amount": total}]
|
||||
|
||||
|
||||
def get_settlements(start_date, finish_date, dbsession):
|
||||
def get_settlements(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
|
||||
list_ = (
|
||||
dbsession.query(SettleOption.name, func.sum(Settlement.amount))
|
||||
db.query(SettleOption.name, func.sum(Settlement.amount))
|
||||
.join(Voucher.settlements)
|
||||
.join(Settlement.settle_option)
|
||||
.filter(Voucher.date >= start_date, Voucher.date <= finish_date)
|
||||
@ -82,48 +94,3 @@ def get_settlements(start_date, finish_date, dbsession):
|
||||
total += am
|
||||
info.append({"name": gt, "amount": am})
|
||||
return info + [{"name": "Total", "amount": total}]
|
||||
|
||||
|
||||
@view_config(
|
||||
request_method="GET", route_name="v1_tax_report", renderer="json", permission="Tax Report",
|
||||
)
|
||||
def get_tax_view(request):
|
||||
start_date = get_start_date(request.GET.get("s", None))
|
||||
finish_date = get_finish_date(request.GET.get("f", None))
|
||||
|
||||
if (
|
||||
datetime.today() - start_date.replace(hour=0)
|
||||
).days > 5 and "Accounts Audit" not in request.effective_principals:
|
||||
raise ValidationError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.date().strftime("%d-%b-%Y"),
|
||||
"finishDate": (finish_date - timedelta(days=1)).date().strftime("%d-%b-%Y"),
|
||||
"amounts": get_tax(start_date, finish_date, request.dbsession),
|
||||
}
|
||||
|
||||
|
||||
def get_tax(start_date, finish_date, dbsession):
|
||||
amounts = (
|
||||
dbsession.query(
|
||||
Tax.name,
|
||||
Inventory.tax_rate,
|
||||
func.coalesce(func.sum(Inventory.net), 0),
|
||||
func.coalesce(func.sum(Inventory.tax_amount), 0),
|
||||
)
|
||||
.join(Voucher.kots)
|
||||
.join(Kot.inventories)
|
||||
.join(Inventory.tax)
|
||||
.filter(
|
||||
Voucher.date >= start_date,
|
||||
Voucher.date <= finish_date,
|
||||
Voucher.voucher_type == VoucherType.REGULAR_BILL.value,
|
||||
)
|
||||
.group_by(Tax.name, Inventory.tax_rate)
|
||||
.order_by(Tax.name, Inventory.tax_rate)
|
||||
.all()
|
||||
)
|
||||
return [
|
||||
{"name": "{0} - {1:.2%}".format(i[0], i[1]), "taxRate": i[1], "saleAmount": i[2], "amount": i[3],}
|
||||
for i in amounts
|
||||
]
|
||||
|
||||
70
barker/routers/reports/tax_report.py
Normal file
70
barker/routers/reports/tax_report.py
Normal file
@ -0,0 +1,70 @@
|
||||
from datetime import datetime, timedelta, date
|
||||
|
||||
from fastapi import APIRouter, Depends, Security
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from barker.core.config import settings
|
||||
from ...models import Voucher, VoucherType, Inventory, Kot, Tax
|
||||
from ...schemas.auth import UserToken
|
||||
from ...core.security import get_current_active_user as get_user
|
||||
from ...db.session import SessionLocal
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# Dependency
|
||||
def get_db() -> Session:
|
||||
try:
|
||||
db = SessionLocal()
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.get("")
|
||||
def get_tax_report(
|
||||
s: str = None,
|
||||
f: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["tax-report"]),
|
||||
):
|
||||
start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions:
|
||||
raise ValueError("Accounts Audit")
|
||||
|
||||
return {
|
||||
"startDate": start_date.strftime("%d-%b-%Y"),
|
||||
"finishDate": finish_date.strftime("%d-%b-%Y"),
|
||||
"amounts": get_tax(start_date, finish_date, db),
|
||||
}
|
||||
|
||||
|
||||
def get_tax(s: date, f: date, db: Session):
|
||||
start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES)
|
||||
|
||||
amounts = (
|
||||
db.query(
|
||||
Tax.name,
|
||||
Inventory.tax_rate,
|
||||
func.coalesce(func.sum(Inventory.net), 0),
|
||||
func.coalesce(func.sum(Inventory.tax_amount), 0),
|
||||
)
|
||||
.join(Voucher.kots)
|
||||
.join(Kot.inventories)
|
||||
.join(Inventory.tax)
|
||||
.filter(
|
||||
Voucher.date >= start_date,
|
||||
Voucher.date <= finish_date,
|
||||
Voucher.voucher_type == VoucherType.REGULAR_BILL.value,
|
||||
)
|
||||
.group_by(Tax.name, Inventory.tax_rate)
|
||||
.order_by(Tax.name, Inventory.tax_rate)
|
||||
.all()
|
||||
)
|
||||
return [
|
||||
{"name": "{0} - {1:.2%}".format(i[0], i[1]), "taxRate": i[1], "saleAmount": i[2], "amount": i[3],}
|
||||
for i in amounts
|
||||
]
|
||||
@ -25,7 +25,7 @@ def get_db():
|
||||
|
||||
@router.post("/", response_model=schemas.Tax)
|
||||
def save(
|
||||
data: schemas.TaxIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]),
|
||||
data: schemas.TaxIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]),
|
||||
):
|
||||
try:
|
||||
item = Tax(name=data.name, rate=data.rate)
|
||||
@ -47,7 +47,7 @@ def update(
|
||||
id_: uuid.UUID,
|
||||
data: schemas.TaxIn,
|
||||
db: Session = Depends(get_db),
|
||||
user: UserToken = Security(get_user, scopes=["products"]),
|
||||
user: UserToken = Security(get_user, scopes=["taxes"]),
|
||||
):
|
||||
try:
|
||||
item: Tax = db.query(Tax).filter(Tax.id == id_).first()
|
||||
@ -71,7 +71,7 @@ def update(
|
||||
|
||||
@router.delete("/{id_}")
|
||||
def delete(
|
||||
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]),
|
||||
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]),
|
||||
):
|
||||
try:
|
||||
item: Tax = db.query(Tax).filter(Tax.id == id_).first()
|
||||
@ -94,7 +94,7 @@ def delete(
|
||||
|
||||
@router.get("/")
|
||||
def show_blank(
|
||||
db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]),
|
||||
db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]),
|
||||
):
|
||||
return tax_info(None)
|
||||
|
||||
@ -109,7 +109,7 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)
|
||||
|
||||
@router.get("/{id_}")
|
||||
def show_id(
|
||||
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]),
|
||||
id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]),
|
||||
):
|
||||
item: Tax = db.query(Tax).filter(Tax.id == id_).first()
|
||||
return tax_info(item)
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
def to_camel(string: str) -> str:
|
||||
first, *others = string.split("_")
|
||||
return "".join([first] + [word.capitalize() for word in others])
|
||||
return "".join([first.lower()] + [word.capitalize() for word in others])
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/beer-consumption-report';
|
||||
const url = '/api/beer-consumption-report';
|
||||
const serviceName = 'BeerConsumptionReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/bill-settlement-report';
|
||||
const url = '/api/bill-settlement-report';
|
||||
const serviceName = 'BillSettlementReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@ -10,8 +10,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/cashier-report';
|
||||
const urlActiveCashiers = '/v1/active-cashiers';
|
||||
const url = '/api/cashier-report';
|
||||
const serviceName = 'CashierReportService';
|
||||
|
||||
@Injectable({
|
||||
@ -45,7 +44,7 @@ export class CashierReportService {
|
||||
if (finishDate !== null) {
|
||||
options.params = options.params.set('f', finishDate);
|
||||
}
|
||||
return <Observable<User[]>>this.http.get<User[]>(urlActiveCashiers, options)
|
||||
return <Observable<User[]>>this.http.get<User[]>(`${url}/active`, options)
|
||||
|
||||
.pipe(
|
||||
catchError(this.log.handleError(serviceName, 'activeCashiers'))
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/discount-report';
|
||||
const url = '/api/discount-report';
|
||||
const serviceName = 'DiscountReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/product-sale-report';
|
||||
const url = '/api/product-sale-report';
|
||||
const serviceName = 'ProductSaleReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/sale-report';
|
||||
const url = '/api/sale-report';
|
||||
const serviceName = 'SaleReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
@ -9,7 +9,7 @@ const httpOptions = {
|
||||
headers: new HttpHeaders({'Content-Type': 'application/json'})
|
||||
};
|
||||
|
||||
const url = '/v1/tax-report';
|
||||
const url = '/api/tax-report';
|
||||
const serviceName = 'TaxReportService';
|
||||
|
||||
@Injectable({
|
||||
|
||||
Reference in New Issue
Block a user