Issue Grid
 Batch
This commit is contained in:
tanshu 2020-05-12 11:53:20 +05:30
parent 8dcda9cb56
commit de4d248de7
23 changed files with 100 additions and 61 deletions

View File

@ -35,8 +35,13 @@ from .routers.reports import (
trial_balance, trial_balance,
unposted, unposted,
) )
from .routers.voucher import (
issue_grid,
batch,
)
from .db.base_class import Base from .db.base_class import Base
from .config import Settings as settings from .config import Settings
from .db.session import engine from .db.session import engine
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
@ -93,6 +98,9 @@ app.include_router(stock_movement.router, prefix="/api/stock-movement", tags=["r
app.include_router(trial_balance.router, prefix="/api/trial-balance", 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(unposted.router, prefix="/api/unposted", tags=["reports"])
app.include_router(issue_grid.router, prefix="/api/issue-grid", tags=["vouchers"])
app.include_router(batch.router, prefix="/api/batch", tags=["vouchers"])
def init(): def init():
uvicorn.run(app, host=settings.host, port=settings.port) uvicorn.run(app, host=Settings.host, port=Settings.port)

View File

@ -39,10 +39,10 @@ def report_blank(
@router.get("/{date}") @router.get("/{date}")
def report_data( def report_data(
date: str, date: str,
request: Request, request: Request,
db: Session = Depends(get_db), db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["balance-sheet"]), user: UserToken = Security(get_user, scopes=["balance-sheet"]),
): ):
body, footer = build_balance_sheet(date, db) body, footer = build_balance_sheet(date, db)
set_period(get_start_date(request.session), date, request.session) set_period(get_start_date(request.session), date, request.session)

View File

@ -1,46 +0,0 @@
import datetime
from brewman.models.voucher import Batch
@router.get("/api/batch") # "Authenticated"
def batch_term(request):
filter_ = request.GET.get("t", None)
filter_ = filter_ if filter_ is not None and filter_.strip() is not "" else None
count = request.GET.get("c", None)
count = None if count is None or count == "" else int(count)
date = request.GET.get("d", None)
date = (
None
if date is None or date == ""
else datetime.datetime.strptime(date, "%d-%b-%Y")
)
list_ = []
for index, item in enumerate(
Batch.list(filter_, include_nil=False, date=date, dbsession=request.dbsession)
):
text = "{0} ({1}) {2:.2f}@{3:.2f} from {4}".format(
item.product.name,
item.product.units,
item.quantity_remaining,
item.rate,
item.name.strftime("%d-%b-%Y"),
)
list_.append(
{
"id": item.id,
"name": text,
"quantityRemaining": item.quantity_remaining,
"rate": item.rate,
"tax": item.tax,
"discount": item.discount,
"product": {
"id": item.product.id,
"name": item.product.name,
"units": item.product.units,
},
}
)
if count is not None and index == count - 1:
break
return list_

View File

@ -0,0 +1,55 @@
import datetime
from fastapi import APIRouter, Depends
from sqlalchemy.orm import 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 Batch
router = APIRouter()
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("")
def batch_term(
q: str,
c: int = None,
d: str = None,
db: Session = Depends(get_db),
current_user: UserToken = Depends(get_user),
):
filter_ = q if q is not None and q.strip() is not "" else None
date = None if not d else datetime.datetime.strptime(d, "%d-%b-%Y")
list_ = []
for index, item in enumerate(
Batch.list(filter_, include_nil=False, date=date, dbsession=db)
):
text = f"{item.product.name} ({item.product.units}) {item.quantity_remaining:.2f}@{item.rate:.2f} from {item.name.strftime('%d-%b-%Y')}"
list_.append(
{
"id": item.id,
"name": text,
"quantityRemaining": item.quantity_remaining,
"rate": item.rate,
"tax": item.tax,
"discount": item.discount,
"product": {
"id": item.product.id,
"name": item.product.name,
"units": item.product.units,
},
}
)
if c is not None and index == c - 1:
break
return list_

View File

@ -1,23 +1,45 @@
import datetime from datetime import datetime
from fastapi import APIRouter, Depends, Security, Request
from sqlalchemy.orm import Session
from sqlalchemy.orm.util import aliased from sqlalchemy.orm.util import aliased
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
router = APIRouter()
@router.get("/api/issue-grid/{date}") # "Issue"
def grid_date(request):
date = datetime.datetime.strptime(request.matchdict["date"], "%d-%b-%Y")
return get_grid(date, request.dbsession)
def get_grid(date, dbsession): # Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("/{date}")
def grid_date(
date: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["issue"]),
):
date = datetime.strptime(date, "%d-%b-%Y")
return get_grid(date, db)
def get_grid(date, db):
list_ = [] list_ = []
source_journal = aliased(Journal) source_journal = aliased(Journal)
destination_journal = aliased(Journal) destination_journal = aliased(Journal)
query = ( query = (
dbsession.query(Voucher, source_journal.amount) db.query(Voucher, source_journal.amount)
.join(source_journal, Voucher.journals) .join(source_journal, Voucher.journals)
.join(destination_journal, Voucher.journals) .join(destination_journal, Voucher.journals)
.filter(Voucher.date == date) .filter(Voucher.date == date)

View File

@ -15,7 +15,7 @@ export class BatchService {
} }
autocomplete(date: string, term: string): Observable<Batch[]> { autocomplete(date: string, term: string): Observable<Batch[]> {
const options = {params: new HttpParams().set('t', term).set('d', date)}; const options = {params: new HttpParams().set('q', term).set('d', date)};
return <Observable<Batch[]>>this.http.get<Batch[]>(url, options) return <Observable<Batch[]>>this.http.get<Batch[]>(url, options)
.pipe( .pipe(
catchError(this.log.handleError(serviceName, 'autocomplete')) catchError(this.log.handleError(serviceName, 'autocomplete'))