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,
unposted,
)
from .routers.voucher import (
issue_grid,
batch,
)
from .db.base_class import Base
from .config import Settings as settings
from .config import Settings
from .db.session import 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(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():
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}")
def report_data(
date: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["balance-sheet"]),
date: str,
request: Request,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["balance-sheet"]),
):
body, footer = build_balance_sheet(date, db)
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 ...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
@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)
router = APIRouter()
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_ = []
source_journal = aliased(Journal)
destination_journal = aliased(Journal)
query = (
dbsession.query(Voucher, source_journal.amount)
db.query(Voucher, source_journal.amount)
.join(source_journal, Voucher.journals)
.join(destination_journal, Voucher.journals)
.filter(Voucher.date == date)

View File

@ -15,7 +15,7 @@ export class BatchService {
}
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)
.pipe(
catchError(this.log.handleError(serviceName, 'autocomplete'))