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

View File

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

View File

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

View File

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

View File

@ -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.models.voucher import Voucher, Journal, VoucherType
from brewman.routers.services.voucher import get_edit_url
from fastapi import APIRouter
router = APIRouter() router = APIRouter()
@router.get("/api/unposted") # "Post Vouchers" # Dependency
def report_data(request): def get_db() -> Session:
return build_report(request) 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 = [] body = []
query = ( query = (
request.dbsession.query(Voucher) db.query(Voucher)
.options(joinedload_all(Voucher.journals, Journal.account, innerjoin=True)) .options(joinedload_all(Voucher.journals, Journal.account, innerjoin=True))
.filter(Voucher.posted == False) .filter(Voucher.posted == False)
.filter(Voucher.type != VoucherType.by_name("Issue").id) .filter(Voucher.type != VoucherType.by_name("Issue").id)
@ -44,7 +58,7 @@ def build_report(request):
body.append( body.append(
{ {
"date": voucher.date.strftime("%d-%b-%Y"), "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, "voucherType": VoucherType.by_id(voucher.type).name,
"narration": voucher.narration, "narration": voucher.narration,
"isPosted": voucher.posted, "isPosted": voucher.posted,

View File

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