diff --git a/alembic/versions/eed0b382c287_lowercase_fastapi.py b/alembic/versions/eed0b382c287_lowercase_fastapi.py index 8f5a1126..a6176996 100644 --- a/alembic/versions/eed0b382c287_lowercase_fastapi.py +++ b/alembic/versions/eed0b382c287_lowercase_fastapi.py @@ -7,7 +7,8 @@ Create Date: 2020-05-10 19:52:58.163810 """ from alembic import op import sqlalchemy as sa -from sqlalchemy import table, column +from sqlalchemy import table, column, select +from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. revision = 'eed0b382c287' @@ -192,11 +193,25 @@ def upgrade(): op.drop_constraint('entities_salarydeductions_JournalID_fkey', 'employee_benefit', type_='foreignkey') op.drop_constraint('salary_deductions_VoucherID_fkey', 'employee_benefit', type_='foreignkey') - permission = table('auth_permissions', column('name', sa.String)) + permission = table('auth_permissions', column('id', postgresql.UUID()), column('name', sa.String)) op.execute(permission.update().where(permission.c.name == op.inline_literal('Service Charge')).values({'name': op.inline_literal('Incentive')})) op.execute(permission.update().where(permission.c.name == op.inline_literal('Salary Deduction')).values({'name': op.inline_literal('Employee Benefit')})) account = table('accounts', column('name', sa.String)) op.execute(account.update().where(account.c.name == op.inline_literal('Service Charges')).values({'name': op.inline_literal('Incentives')})) + # Remove unneeded Payment and Receipt permissions + permission = table('auth_permissions', column('id', postgresql.UUID()), column('name', sa.String)) + role_permission = table('role_permissions', column('permission_id', postgresql.UUID()), column('role_id', postgresql.UUID())) + op.execute( + role_permission.delete().where( + role_permission.c.permission_id.in_(select([permission.c.id], permission.c.name.in_(['Payment', 'Receipt']))) + ) + ) + op.execute( + permission.delete().where( + permission.c.name.in_(['Payment', 'Receipt']) + ) + ) + ### end Alembic commands ### diff --git a/brewman/main.py b/brewman/main.py index 20bc5a33..091b02e5 100644 --- a/brewman/main.py +++ b/brewman/main.py @@ -22,10 +22,8 @@ from .routers import ( issue_grid, lock_information, maintenance, - payment, product, product_group, - receipt, rebase, reset_stock, recipe, @@ -125,8 +123,8 @@ 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"]) app.include_router(journal.router, prefix="/api/journal", tags=["vouchers"]) -app.include_router(payment.router, prefix="/api/payment", tags=["vouchers"]) -app.include_router(receipt.router, prefix="/api/receipt", tags=["vouchers"]) +app.include_router(journal.router, prefix="/api/payment", tags=["vouchers"]) +app.include_router(journal.router, prefix="/api/receipt", tags=["vouchers"]) app.include_router(purchase.router, prefix="/api/purchase", tags=["vouchers"]) app.include_router( purchase_return.router, prefix="/api/purchase-return", tags=["vouchers"] diff --git a/brewman/routers/journal.py b/brewman/routers/journal.py index 766a0423..8652b9d5 100644 --- a/brewman/routers/journal.py +++ b/brewman/routers/journal.py @@ -209,8 +209,18 @@ def get_id( @router.get("", response_model=output.Voucher) def show_blank( request: Request, + a: str = None, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["journal"]), ): - additional_info = {"date": get_date(request.session), "type": "Journal"} + if request.scope.get('path') == '/api/payment': + type_ = "Payment" + elif request.scope.get('path') == '/api/receipt': + type_ = "Receipt" + else: + type_ = "Journal" + + additional_info = {"date": get_date(request.session), "type": type_} + if a: + additional_info["account"] = a return blank_voucher(additional_info, db) diff --git a/brewman/routers/payment.py b/brewman/routers/payment.py deleted file mode 100644 index d3c296af..00000000 --- a/brewman/routers/payment.py +++ /dev/null @@ -1,133 +0,0 @@ -import traceback -import uuid -from typing import List -from fastapi import ( - APIRouter, - HTTPException, - status, - Depends, - Security, - UploadFile, - File, - Request, -) -from sqlalchemy.exc import SQLAlchemyError -from sqlalchemy.orm import Session - -from .voucher import voucher_info, blank_voucher -from ..core.session import set_date, get_date -from ..schemas.auth import UserToken -from ..core.security import get_current_active_user as get_user -from ..db.session import SessionLocal -from ..models.voucher import Voucher -from brewman.routers.journal import save, save_files, update, update_files -import brewman.schemas.voucher as output -import brewman.schemas.input as schema_in - -router = APIRouter() - - -# Dependency -def get_db() -> Session: - try: - db = SessionLocal() - yield db - finally: - db.close() - - -@router.post("", response_model=output.Voucher) -def save_route( - request: Request, - data: schema_in.JournalIn = Depends(schema_in.JournalIn.load_form), - db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), - user: UserToken = Security(get_user, scopes=["payment"]), -): - try: - i = i or [] - t = t or [] - item: Voucher = save(data, user, db) - save_files(i + t, db) - db.commit() - set_date(data.date_.strftime("%d-%b-%Y"), request.session) - info = voucher_info(item, db) - return info - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.put("/{id_}", response_model=output.Voucher) -def update_route( - id_: uuid.UUID, - request: Request, - data: schema_in.JournalIn = Depends(schema_in.JournalIn.load_form), - db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), - user: UserToken = Security(get_user, scopes=["payment"]), -): - try: - i = i or [] - t = t or [] - item: Voucher = update(id_, data, user, db) - update_files(data, i + t, db) - db.commit() - set_date(data.date_.strftime("%d-%b-%Y"), request.session) - return voucher_info(item, db) - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.get("/{id_}", response_model=output.Voucher) -def get_id( - id_: uuid.UUID, - db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["payment"]), -): - try: - item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first() - return voucher_info(item, db) - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.get("", response_model=output.Voucher) -def show_blank( - request: Request, - a: str = None, - db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["payment"]), -): - additional_info = {"date": get_date(request.session), "type": "Payment"} - if a: - additional_info["account"] = a - return blank_voucher(additional_info, db) diff --git a/brewman/routers/receipt.py b/brewman/routers/receipt.py deleted file mode 100644 index cf53f068..00000000 --- a/brewman/routers/receipt.py +++ /dev/null @@ -1,133 +0,0 @@ -import traceback -import uuid -from typing import List -from fastapi import ( - APIRouter, - HTTPException, - status, - Depends, - Security, - UploadFile, - File, - Request, -) -from sqlalchemy.exc import SQLAlchemyError -from sqlalchemy.orm import Session - -from .voucher import voucher_info, blank_voucher -from ..core.session import set_date, get_date -from ..schemas.auth import UserToken -from ..core.security import get_current_active_user as get_user -from ..db.session import SessionLocal -from ..models.voucher import Voucher -from brewman.routers.journal import save, save_files, update, update_files -import brewman.schemas.voucher as output -import brewman.schemas.input as schema_in - -router = APIRouter() - - -# Dependency -def get_db() -> Session: - try: - db = SessionLocal() - yield db - finally: - db.close() - - -@router.post("", response_model=output.Voucher) -def save_route( - request: Request, - data: schema_in.JournalIn = Depends(schema_in.JournalIn.load_form), - db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), - user: UserToken = Security(get_user, scopes=["receipt"]), -): - try: - i = i or [] - t = t or [] - item: Voucher = save(data, user, db) - save_files(i + t, db) - db.commit() - set_date(data.date_.strftime("%d-%b-%Y"), request.session) - info = voucher_info(item, db) - return info - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.put("/{id_}", response_model=output.Voucher) -def update_route( - id_: uuid.UUID, - request: Request, - data: schema_in.JournalIn = Depends(schema_in.JournalIn.load_form), - db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), - user: UserToken = Security(get_user, scopes=["receipt"]), -): - try: - i = i or [] - t = t or [] - item: Voucher = update(id_, data, user, db) - update_files(data, i + t, db) - db.commit() - set_date(data.date_.strftime("%d-%b-%Y"), request.session) - return voucher_info(item, db) - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.get("/{id_}", response_model=output.Voucher) -def get_id( - id_: uuid.UUID, - db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["receipt"]), -): - try: - item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first() - return voucher_info(item, db) - except SQLAlchemyError as e: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), - ) - except Exception: - db.rollback() - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=traceback.format_exc(), - ) - - -@router.get("", response_model=output.Voucher) -def show_blank( - request: Request, - a: str = None, - db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["receipt"]), -): - additional_info = {"date": get_date(request.session), "type": "Receipt"} - if a: - additional_info["account"] = a - return blank_voucher(additional_info, db)