diff --git a/brewman/routers/db_image.py b/brewman/routers/db_image.py index 650b6acb..463ca174 100644 --- a/brewman/routers/db_image.py +++ b/brewman/routers/db_image.py @@ -1,5 +1,6 @@ import uuid from io import BytesIO +from typing import List from fastapi import APIRouter, Depends, Security from fastapi.responses import StreamingResponse @@ -9,6 +10,7 @@ from ..core.security import get_user from ..models.voucher import DbImage from ..db.session import SessionLocal from ..schemas.auth import UserToken +import brewman.schemas.voucher as output router = APIRouter() @@ -34,3 +36,17 @@ def db_image( else: item = BytesIO(item.image) return StreamingResponse(item, media_type="image/jpeg") + + +def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session): + for index, value in enumerate(i): + db.add(DbImage(voucher_id, "voucher", i[index], t[index])) + + +def update_files(voucher_id: uuid.UUID, data: List[output.ImageUpload], i: List[bytes], t: List[bytes], db: Session): + old = [f.id_ for f in data if f.id_] + images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all() + for image in [i for i in images if i.id not in old]: + db.delete(image) + for index, value in enumerate(i): + db.add(DbImage(voucher_id, "voucher", i[index], t[index])) diff --git a/brewman/routers/employee_benefit.py b/brewman/routers/employee_benefit.py index b521d3a5..a7aa0280 100644 --- a/brewman/routers/employee_benefit.py +++ b/brewman/routers/employee_benefit.py @@ -9,13 +9,13 @@ from fastapi import ( status, Depends, Security, - UploadFile, File, Request, ) from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session +from .db_image import save_files, update_files from .voucher import ( voucher_info, check_voucher_lock_info, @@ -53,13 +53,11 @@ def save_route( request: Request, data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["employee-benefit"]), ): try: - i = i or [] - t = t or [] dt = get_last_day(data.date_) days_in_month = dt.day item: Voucher = save(data, dt, user, db) @@ -67,7 +65,7 @@ def save_route( item, data.employee_benefits, days_in_month, db ) save_journals(item, exp, total, db) - save_files(i + t, db) + save_files(item.id, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) info = voucher_info(item, db) @@ -170,25 +168,17 @@ def save_journals(voucher: Voucher, exp: int, total: int, db: Session): voucher.journals.append(journal) -def save_files(files: List[UploadFile], db: Session): - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - pass - - @router.put("/{id_}", response_model=output.Voucher) def update_route( id_: uuid.UUID, request: Request, data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["employee-benefit"]), ): try: - i = i or [] - t = t or [] dt = get_last_day(data.date_) days_in_month = dt.day item: Voucher = update(id_, data, user, db) @@ -199,7 +189,7 @@ def update_route( ) update_journals(item, exp, total) # journals_valid(voucher) - update_files(data, i + t, db) + update_files(item.id, data.files, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) return voucher_info(item, db) @@ -267,18 +257,6 @@ def update_journals(voucher: Voucher, exp: int, total: int): journal.amount = total -def update_files(data: schema_in.VoucherIn, files: List[UploadFile], db: Session): - pass - # old_files = [ - # uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None - # ] - # images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all() - # for image in [i for i in images if i.id not in old_files]: - # db.delete(image) - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - - @router.get("/{id_}", response_model=output.Voucher) def get_id( id_: uuid.UUID, diff --git a/brewman/routers/issue.py b/brewman/routers/issue.py index 0441ce2d..98cf91d8 100644 --- a/brewman/routers/issue.py +++ b/brewman/routers/issue.py @@ -10,13 +10,13 @@ from fastapi import ( status, Depends, Security, - UploadFile, File, Request, ) from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session +from .db_image import save_files, update_files from .voucher import ( voucher_info, check_voucher_lock_info, @@ -49,17 +49,15 @@ def save_route( request: Request, data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["issue"]), ): try: - i = i or [] - t = t or [] item, batch_consumed = save(data, user, db) amount = save_inventories(item, data.inventories, batch_consumed, db) save_journals(item, data.source, data.destination, amount, db) - save_files(i + t, db) + save_files(item.id, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) info = voucher_info(item, db) @@ -169,29 +167,21 @@ def save_journals( db.add(d) -def save_files(files: List[UploadFile], db: Session): - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - pass - - @router.put("/{id_}", response_model=output.Voucher) def update_route( id_: uuid.UUID, request: Request, data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["issue"]), ): try: - i = i or [] - t = t or [] item, batch_consumed = update(id_, data, user, db) amount = update_inventories(item, data.inventories, batch_consumed, db) update_journals(item, data.source, data.destination, amount) - update_files(data, i + t, db) + update_files(item.id, data.files, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) # item: Voucher = db.query(Voucher).filter(Voucher.id == item.id).first() @@ -333,18 +323,6 @@ def update_journals( item.amount = amount -def update_files(data: schema_in.IssueIn, files: List[UploadFile], db: Session): - pass - # old_files = [ - # uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None - # ] - # images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all() - # for image in [i for i in images if i.id not in old_files]: - # db.delete(image) - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - - @router.get("/{id_}", response_model=output.Voucher) def get_id( id_: uuid.UUID, diff --git a/brewman/routers/journal.py b/brewman/routers/journal.py index 8652b9d5..2be2e691 100644 --- a/brewman/routers/journal.py +++ b/brewman/routers/journal.py @@ -8,13 +8,13 @@ from fastapi import ( status, Depends, Security, - UploadFile, File, Request, ) from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session +from .db_image import save_files, update_files from .voucher import ( voucher_info, check_voucher_lock_info, @@ -26,7 +26,7 @@ from ..models import AccountBase 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, VoucherType, Journal, DbImage +from ..models.voucher import Voucher, VoucherType, Journal import brewman.schemas.voucher as output import brewman.schemas.input as schema_in @@ -93,11 +93,6 @@ def save(data: schema_in.JournalIn, user: UserToken, db: Session) -> Voucher: return voucher -def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session): - for index, value in enumerate(i): - db.add(DbImage(voucher_id, "voucher", i[index], t[index])) - - @router.put("/{id_}", response_model=output.Voucher) def update_route( id_: uuid.UUID, @@ -175,15 +170,6 @@ def update( return voucher -def update_files(voucher_id: uuid.UUID, data: List[output.ImageUpload], i: List[bytes], t: List[bytes], db: Session): - old = [f.id_ for f in data if f.id_] - images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all() - for image in [i for i in images if i.id not in old]: - db.delete(image) - for index, value in enumerate(i): - db.add(DbImage(voucher_id, "voucher", i[index], t[index])) - - @router.get("/{id_}", response_model=output.Voucher) def get_id( id_: uuid.UUID, diff --git a/brewman/routers/purchase.py b/brewman/routers/purchase.py index 18f9e220..7851a841 100644 --- a/brewman/routers/purchase.py +++ b/brewman/routers/purchase.py @@ -9,7 +9,6 @@ from fastapi import ( status, Depends, Security, - UploadFile, File, Request, ) @@ -17,6 +16,7 @@ from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session +from .db_image import save_files, update_files from .voucher import ( voucher_info, check_voucher_lock_info, @@ -49,17 +49,15 @@ def save_route( request: Request, data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["purchase"]), ): try: - i = i or [] - t = t or [] item: Voucher = save(data, user, db) save_inventories(item, data.inventories, db) save_journals(item, data.vendor, db) - save_files(i + t, db) + save_files(item.id, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) info = voucher_info(item, db) @@ -147,30 +145,22 @@ def save_journals(voucher: Voucher, ven: schema_in.AccountLink, db: Session): db.add(item) -def save_files(files: List[UploadFile], db: Session): - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - pass - - @router.put("/{id_}", response_model=output.Voucher) def update_route( id_: uuid.UUID, request: Request, data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["purchase"]), ): try: - i = i or [] - t = t or [] item: Voucher = update(id_, data, user, db) update_inventory(item, data.inventories, db) update_journals(item, data.vendor, db) # journals_valid(voucher) - update_files(data, i + t, db) + update_files(item.id, data.files, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) return voucher_info(item, db) @@ -330,18 +320,6 @@ def update_journals(voucher: Voucher, ven: schema_in.AccountLink, db): db.add(item) -def update_files(data: schema_in.PurchaseIn, files: List[UploadFile], db: Session): - pass - # old_files = [ - # uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None - # ] - # images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all() - # for image in [i for i in images if i.id not in old_files]: - # db.delete(image) - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - - @router.get("/{id_}", response_model=output.Voucher) def get_id( id_: uuid.UUID, diff --git a/brewman/routers/purchase_return.py b/brewman/routers/purchase_return.py index 7f0e6ced..067b5582 100644 --- a/brewman/routers/purchase_return.py +++ b/brewman/routers/purchase_return.py @@ -9,13 +9,13 @@ from fastapi import ( status, Depends, Security, - UploadFile, File, Request, ) from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session +from .db_image import save_files, update_files from .voucher import ( voucher_info, check_voucher_lock_info, @@ -48,8 +48,8 @@ def save_route( request: Request, data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["purchase-return"]), ): try: @@ -58,7 +58,7 @@ def save_route( item: Voucher = save(data, user, db) save_inventories(item, data.inventories, db) save_journals(item, data.vendor, db) - save_files(i + t, db) + save_files(item.id, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) info = voucher_info(item, db) @@ -143,30 +143,22 @@ def save_journals(voucher: Voucher, ven: schema_in.AccountLink, db: Session): db.add(item) -def save_files(files: List[UploadFile], db: Session): - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - pass - - @router.put("/{id_}", response_model=output.Voucher) def update_route( id_: uuid.UUID, request: Request, data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), db: Session = Depends(get_db), - i: List[UploadFile] = File(None), - t: List[UploadFile] = File(None), + i: List[bytes] = File(None), + t: List[bytes] = File(None), user: UserToken = Security(get_user, scopes=["purchase-return"]), ): try: - i = i or [] - t = t or [] item: Voucher = update(id_, data, user, db) update_inventory(item, data.inventories, db) update_journals(item, data.vendor, db) # journals_valid(voucher) - update_files(data, i + t, db) + update_files(item.id, data.files, i, t, db) db.commit() set_date(data.date_.strftime("%d-%b-%Y"), request.session) return voucher_info(item, db) @@ -273,18 +265,6 @@ def update_journals(voucher: Voucher, ven: schema_in.AccountLink, db): db.add(item) -def update_files(data: schema_in.PurchaseIn, files: List[UploadFile], db: Session): - pass - # old_files = [ - # uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None - # ] - # images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all() - # for image in [i for i in images if i.id not in old_files]: - # db.delete(image) - # for key, value in files.items(): - # db.add(DbImage(voucher.id, "voucher", value["f"], value["t"])) - - @router.get("/{id_}", response_model=output.Voucher) def get_id( id_: uuid.UUID,