All Reports done. Except where get_url is used

This commit is contained in:
tanshu 2020-05-12 09:23:27 +05:30
parent 2b2430c5b2
commit d62119882d
5 changed files with 100 additions and 47 deletions
brewman
overlord/src/app/stock-movement

@ -31,6 +31,9 @@ from .routers.reports import (
purchases,
raw_material_cost,
reconcile,
stock_movement,
trial_balance,
unposted,
)
from .db.base_class import Base
from .config import Settings as settings
@ -86,6 +89,9 @@ app.include_router(purchase_entries.router, prefix="/api/purchase-entries", tags
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"])
def init():

@ -1,7 +1,12 @@
import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import func
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from brewman.models.master import Product, CostCentre
from brewman.models.voucher import Voucher, Journal, VoucherType, Inventory
from brewman.routers.services.session import (
@ -10,36 +15,50 @@ from brewman.routers.services.session import (
session_period_finish,
)
from fastapi import APIRouter
router = APIRouter()
@router.get("/api/stock-movement") # "Stock Movement"
def report_blank(request):
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("")
def report_blank(
request: Request,
user: UserToken = Security(get_user, scopes=["stock-movement"]),
):
return {
"startDate": session_period_start(request),
"finishDate": session_period_finish(request),
"startDate": session_period_start(request.session),
"finishDate": session_period_finish(request.session),
"body": [],
}
@router.get("/api/stock-movement", request_param=["s", "f"], permission="Stock Movement")
def report_data(request):
start_date = request.GET["s"]
finish_date = request.GET["f"]
body = build_stock_movement(start_date, finish_date, request.dbsession)
session_period_set( start_date, finish_date, request)
return {"startDate": start_date, "finishDate": finish_date, "body": body}
@router.get("/{start}/{finish}")
def report_data(
start: str,
finish: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["stock-movement"]),
):
body = build_stock_movement(start, finish, db)
session_period_set( start, finish, request.session)
return {"startDate": start, "finishDate": finish, "body": body}
def build_stock_movement(start_date, finish_date, dbsession):
def build_stock_movement(start_date, finish_date, db):
start_date = datetime.datetime.strptime(start_date, "%d-%b-%Y")
finish_date = datetime.datetime.strptime(finish_date, "%d-%b-%Y")
dict_ = {}
quantity_sum = func.sum(Journal.debit * Inventory.quantity).label("quantity")
openings = (
dbsession.query(Product, quantity_sum)
db.query(Product, quantity_sum)
.join(Product.inventories)
.join(Inventory.voucher)
.join(Voucher.journals)
@ -56,7 +75,7 @@ def build_stock_movement(start_date, finish_date, dbsession):
"opening": quantity,
}
purchases = (
dbsession.query(Product, quantity_sum)
db.query(Product, quantity_sum)
.join(Product.inventories)
.join(Inventory.voucher)
.join(Voucher.journals)
@ -78,7 +97,7 @@ def build_stock_movement(start_date, finish_date, dbsession):
"purchase": quantity,
}
issues = (
dbsession.query(Product, quantity_sum)
db.query(Product, quantity_sum)
.join(Product.inventories)
.join(Inventory.voucher)
.join(Voucher.journals)

@ -1,7 +1,12 @@
import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import func
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from brewman.models.master import AccountBase
from brewman.models.voucher import Voucher, Journal, VoucherType
from brewman.routers.services.session import (
@ -10,28 +15,42 @@ from brewman.routers.services.session import (
session_period_finish,
)
from fastapi import APIRouter
router = APIRouter()
@router.get("/api/trial-balance") # "Trial Balance"
def report_blank(request):
return {"date": session_period_finish(request), "body": []}
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("/api/trial-balance/{date}") # "Trial Balance"
def report_data(request):
date = request.matchdict.get("date", None)
session_period_set(session_period_start(request), date, request)
return {"date": date, "body": build_report(date, request.dbsession)}
@router.get("")
def report_blank(
request: Request,
user: UserToken = Security(get_user, scopes=["trial-balance"]),
):
return {"date": session_period_finish(request.session), "body": []}
def build_report(date, dbsession):
@router.get("/{date}")
def report_data(
date: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["trial-balance"]),
):
session_period_set(session_period_start(request.session), date, request.session)
return {"date": date, "body": build_report(date, db)}
def build_report(date, db):
date = datetime.datetime.strptime(date, "%d-%b-%Y")
amount_sum = func.sum(Journal.amount * Journal.debit).label("amount")
query = (
dbsession.query(AccountBase, amount_sum)
db.query(AccountBase, amount_sum)
.join(Journal.voucher)
.join(Journal.account)
.filter(Voucher.date <= date)

@ -1,23 +1,37 @@
from sqlalchemy.orm import joinedload_all
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import joinedload_all, Session
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from brewman.models.voucher import Voucher, Journal, VoucherType
from brewman.routers.services.voucher import get_edit_url
from fastapi import APIRouter
router = APIRouter()
@router.get("/api/unposted") # "Post Vouchers"
def report_data(request):
return build_report(request)
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
def build_report(request):
@router.get("")
def report_data(
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["post-vouchers"]),
):
return build_report(db)
def build_report(db: Session):
body = []
query = (
request.dbsession.query(Voucher)
db.query(Voucher)
.options(joinedload_all(Voucher.journals, Journal.account, innerjoin=True))
.filter(Voucher.posted == False)
.filter(Voucher.type != VoucherType.by_name("Issue").id)
@ -44,7 +58,7 @@ def build_report(request):
body.append(
{
"date": voucher.date.strftime("%d-%b-%Y"),
"Url": get_edit_url(voucher, request),
"Url": "", # get_edit_url(voucher, request),
"voucherType": VoucherType.by_id(voucher.type).name,
"narration": voucher.narration,
"isPosted": voucher.posted,

@ -21,14 +21,9 @@ export class StockMovementService {
}
list(startDate: string, finishDate): Observable<StockMovement> {
const options = {params: new HttpParams()};
if (startDate !== null) {
options.params = options.params.set('s', startDate);
}
if (finishDate !== null) {
options.params = options.params.set('f', finishDate);
}
return <Observable<StockMovement>>this.http.get<StockMovement>(url, options)
startDate = startDate ? `/${startDate}` : '';
finishDate = finishDate ? `/${finishDate}` : '';
return <Observable<StockMovement>>this.http.get<StockMovement>(`${url}${startDate}${finishDate}`)
.pipe(
catchError(this.log.handleError(serviceName, 'list'))
);