Done:
Issue Grid Batch
This commit is contained in:
parent
8dcda9cb56
commit
de4d248de7
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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_
|
|
55
brewman/routers/voucher/batch.py
Normal file
55
brewman/routers/voucher/batch.py
Normal 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_
|
@ -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)
|
0
brewman/routers/services/voucher/salary_deduction.py → brewman/routers/voucher/salary_deduction.py
0
brewman/routers/services/voucher/salary_deduction.py → brewman/routers/voucher/salary_deduction.py
@ -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'))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user