From 163b40e9e504ac9321686713d3b2a1158edd16c6 Mon Sep 17 00:00:00 2001 From: tanshu Date: Sun, 15 Nov 2020 12:26:24 +0530 Subject: [PATCH] Simplified some permissions Renamed Accounts Audit to Audit Renamed Machines to Devices as it made sense Sections and Tables are now under Sections Permission Guest Book is now under Customers Permission Renamed Beer Consumption Report to Beer Sale Report Fix: Move Kot and Table to check what the final effect is --- DB/import.sh | 1 - DB/z-RenamePermissions.sql | 9 --- .../versions/34fe3d061c5f_finish_import.py | 62 +++++++++++++++++++ .../versions/8c06ac60d125_initial_commit.py | 3 - barker/barker/db/init_db.py | 2 +- barker/barker/main.py | 4 +- barker/barker/routers/guest_book.py | 10 +-- .../reports/beer_consumption_report.py | 4 +- .../routers/reports/bill_settlement_report.py | 2 +- .../barker/routers/reports/cashier_report.py | 8 +-- .../barker/routers/reports/discount_report.py | 4 +- .../routers/reports/product_sale_report.py | 2 +- barker/barker/routers/reports/sale_report.py | 4 +- barker/barker/routers/reports/tax_report.py | 2 +- barker/barker/routers/table.py | 12 ++-- barker/barker/routers/voucher/merge_move.py | 30 ++++++--- bookie/src/app/app-routing.module.ts | 6 +- .../beer-consumption-report-datasource.ts | 16 ----- ...onsumption-report-resolver.service.spec.ts | 18 ------ ...-consumption-report-routing.module.spec.ts | 13 ---- .../beer-consumption-report-routing.module.ts | 30 --------- .../beer-consumption-report.component.spec.ts | 24 ------- .../beer-consumption-report.module.spec.ts | 13 ---- .../beer-consumption-report.service.spec.ts | 18 ------ .../beer-consumption-report.ts | 8 --- .../beer-sale-report-datasource.ts | 16 +++++ .../beer-sale-report-item.ts} | 2 +- .../beer-sale-report-resolver.service.spec.ts | 15 +++++ .../beer-sale-report-resolver.service.ts} | 10 +-- .../beer-sale-report-routing.module.spec.ts | 13 ++++ .../beer-sale-report-routing.module.ts | 30 +++++++++ .../beer-sale-report.component.css} | 0 .../beer-sale-report.component.html} | 2 +- .../beer-sale-report.component.spec.ts | 24 +++++++ .../beer-sale-report.component.ts} | 26 ++++---- .../beer-sale-report.module.spec.ts | 13 ++++ .../beer-sale-report.module.ts} | 10 +-- .../beer-sale-report.service.spec.ts | 15 +++++ .../beer-sale-report.service.ts} | 14 ++--- .../app/beer-sale-report/beer-sale-report.ts | 8 +++ .../guest-book/guest-book-routing.module.ts | 6 +- bookie/src/app/home/home.component.html | 10 +-- bookie/src/app/sales/bills/bills.component.ts | 38 ++++++------ .../src/app/tables/tables-routing.module.ts | 6 +- 44 files changed, 310 insertions(+), 253 deletions(-) delete mode 100644 DB/z-RenamePermissions.sql delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.spec.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.spec.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report.component.spec.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report.module.spec.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report.service.spec.ts delete mode 100644 bookie/src/app/beer-consumption-report/beer-consumption-report.ts create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report-datasource.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report-item.ts => beer-sale-report/beer-sale-report-item.ts} (56%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.spec.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report-resolver.service.ts => beer-sale-report/beer-sale-report-resolver.service.ts} (51%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report-routing.module.spec.ts create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report-routing.module.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report.component.css => beer-sale-report/beer-sale-report.component.css} (100%) rename bookie/src/app/{beer-consumption-report/beer-consumption-report.component.html => beer-sale-report/beer-sale-report.component.html} (97%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report.component.spec.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report.component.ts => beer-sale-report/beer-sale-report.component.ts} (70%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report.module.spec.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report.module.ts => beer-sale-report/beer-sale-report.module.ts} (85%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report.service.spec.ts rename bookie/src/app/{beer-consumption-report/beer-consumption-report.service.ts => beer-sale-report/beer-sale-report.service.ts} (65%) create mode 100644 bookie/src/app/beer-sale-report/beer-sale-report.ts diff --git a/DB/import.sh b/DB/import.sh index e5f1d54..432d909 100755 --- a/DB/import.sh +++ b/DB/import.sh @@ -34,7 +34,6 @@ docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --en docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy reprints(id, user_id, date, voucher_id) from /mnt/u-Reprints.csv"' docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy settings(id, name, data) from /mnt/v-Settings.csv"' docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty -c "\copy settlements(id, voucher_id, settled, amount) from /mnt/w-VoucherSettlements.csv"' -docker run -it -v /home/tanshu/Programming/csv:/mnt --link postgres:db --rm --env PGPASSWORD="123456" postgres:alpine bash -c 'psql -h db -U postgres petty < /mnt/z-RenamePermissions.sql' # Show the file in code to see the hidden chars # od -t c ~/Programming/csv/n-Printers.csv diff --git a/DB/z-RenamePermissions.sql b/DB/z-RenamePermissions.sql deleted file mode 100644 index d918d8a..0000000 --- a/DB/z-RenamePermissions.sql +++ /dev/null @@ -1,9 +0,0 @@ -update permissions set name = 'Beer Consumption Report' where name = 'Beer Consumption'; -update permissions set name = 'Bill Settlement Report' where name = 'Bill Details'; -update permissions set name = 'Cashier Report' where name = 'Cashier Checkout'; -update permissions set name = 'Product Sale Report' where name = 'Sales Detail'; -update permissions set name = 'Sale Report' where name = 'Sales Analysis'; -update permissions set name = 'Tax Report' where name = 'Tax Analysis'; -delete from role_permissions where permission_id = (select id from permissions where name = 'Void or Reprinted Bill Report'); -delete from permissions where name = 'Void or Reprinted Bill Report'; -update settlements as s set settled = 9 from vouchers v where v.id = s.voucher_id and v.voucher_type = 5 and s.settled = 1; diff --git a/barker/alembic/versions/34fe3d061c5f_finish_import.py b/barker/alembic/versions/34fe3d061c5f_finish_import.py index eff2542..d75f39f 100644 --- a/barker/alembic/versions/34fe3d061c5f_finish_import.py +++ b/barker/alembic/versions/34fe3d061c5f_finish_import.py @@ -99,6 +99,66 @@ def add_all_roles_to_owner(): ) +def rename_permissions(): + p = table( + "permissions", + column("id", postgresql.UUID(as_uuid=True)), + column("name", sa.Unicode(length=255)), + ) + rp = table( + "role_permissions", + column("id", postgresql.UUID(as_uuid=True)), + column("permission_id", postgresql.UUID(as_uuid=True)), + column("role_id", postgresql.UUID(as_uuid=True)), + ) + op.execute(p.update().where(p.c.name == "Accounts Audit").values(name="Audit")) + op.execute(p.update().where(p.c.name == "Beer Consumption").values(name="Beer Sale Report")) + op.execute(p.update().where(p.c.name == "Bill Details").values(name="Bill Settlement Report")) + op.execute(p.update().where(p.c.name == "Cashier Checkout").values(name="Cashier Report")) + op.execute(p.update().where(p.c.name == "Sales Detail").values(name="Product Sale Report")) + op.execute(p.update().where(p.c.name == "Sales Analysis").values(name="Sale Report")) + op.execute(p.update().where(p.c.name == "Tax Analysis").values(name="Tax Report")) + op.execute(p.update().where(p.c.name == "Machines").values(name="Devices")) + op.execute(p.update().where(p.c.name == "Tables").values(name="Sections")) + + op.execute( + rp.delete().where( + rp.c.permission_id == select([p.c.id]).where(p.c.name.ilike("Void or Reprinted Bill Report")).as_scalar() + ) + ) + op.execute(rp.delete().where(rp.c.permission_id == select([p.c.id]).where(p.c.name.ilike("Roles")).as_scalar())) + op.execute( + rp.delete().where(rp.c.permission_id == select([p.c.id]).where(p.c.name.ilike("NC Product")).as_scalar()) + ) + op.execute( + rp.delete().where(rp.c.permission_id == select([p.c.id]).where(p.c.name.ilike("Change Rate")).as_scalar()) + ) + op.execute(p.delete().where(p.c.name == "Void or Reprinted Bill Report")) + op.execute(p.delete().where(p.c.name == "Roles")) + op.execute(p.delete().where(p.c.name == "NC Product")) + op.execute(p.delete().where(p.c.name == "Change Rate")) + + +def update_settlements(): + s = table( + "settlements", + column("voucher_id", postgresql.UUID(as_uuid=True)), + column("settled", sa.Integer()), + ) + v = table( + "vouchers", + sa.Column("id", postgresql.UUID(as_uuid=True)), + sa.Column("voucher_type", sa.Integer()), + ) + op.execute( + s.update() + .values(settled=9) + .where(s.c.voucher_id == v.c.id) + .where(v.c.voucher_type == 5) + .where(s.c.settled == 1) + ) + + def upgrade(): # ### commands auto generated by Alembic - please adjust! ### update_sale_categories() @@ -182,7 +242,9 @@ def upgrade(): (prod.c.units, "="), (func.daterange(prod.c.valid_from, prod.c.valid_till, text("'[]'")), "&&"), ) + rename_permissions() add_all_roles_to_owner() + update_settlements() # ### end Alembic commands ### diff --git a/barker/alembic/versions/8c06ac60d125_initial_commit.py b/barker/alembic/versions/8c06ac60d125_initial_commit.py index 32575b5..ac630f0 100644 --- a/barker/alembic/versions/8c06ac60d125_initial_commit.py +++ b/barker/alembic/versions/8c06ac60d125_initial_commit.py @@ -468,11 +468,8 @@ def upgrade(): ), ) - op.execute(Permission.__table__.insert().values(id="7669dfc9-cc75-4e48-b267-145c8832a83c", name="Guest Book")) op.execute(Permission.__table__.insert().values(id="5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c", name="Printers")) - op.execute(Permission.__table__.insert().values(id="c973f32c-a37b-496a-8dc5-60d2e4c39e97", name="Sections")) op.execute(Permission.__table__.insert().values(id="7a04ba63-5d08-4078-9051-a6d91cce3e48", name="Section Printers")) - op.execute(Permission.__table__.insert().values(id="d4e1d14f-f2c2-4728-9303-a0d8c74c5ea1", name="Devices")) op.execute(Permission.__table__.insert().values(id="5f6110ba-2d3a-41cb-9597-1157774f10cb", name="Add Devices")) op.execute( Section.__table__.insert().values(id="3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df", name="Main", is_fixture=True) diff --git a/barker/barker/db/init_db.py b/barker/barker/db/init_db.py index bbd4856..e731531 100644 --- a/barker/barker/db/init_db.py +++ b/barker/barker/db/init_db.py @@ -138,7 +138,7 @@ def init_db(db: Session) -> None: def add_permissions(db: Session): permissions = [ - Permission("Accounts Audit", uuid.UUID("f30fd1fb-df09-46f5-8c5d-181fd46f38de")), + Permission("Audit", uuid.UUID("f30fd1fb-df09-46f5-8c5d-181fd46f38de")), Permission("Beer Consumption", uuid.UUID("efbb8f31-9631-4491-92f4-17cc98e6a0c0")), Permission("Bill Details", uuid.UUID("612bb529-b50d-4653-a1c0-ebb725c7d728")), Permission("Cashier Checkout", uuid.UUID("a86f8bcf-66f4-4c44-89e1-b714488b8331")), diff --git a/barker/barker/main.py b/barker/barker/main.py index 2897738..92c47c3 100644 --- a/barker/barker/main.py +++ b/barker/barker/main.py @@ -75,11 +75,11 @@ app.include_router(section_printer.router, prefix="/api/section-printers", tags= app.include_router(tax.router, prefix="/api/taxes", tags=["taxes"]) -app.include_router(table.router, prefix="/api/tables", tags=["tables"]) +app.include_router(table.router, prefix="/api/tables", tags=["sections"]) app.include_router( beer_consumption_report.router, - prefix="/api/beer-consumption-report", + prefix="/api/beer-sale-report", tags=["reports"], ) app.include_router( diff --git a/barker/barker/routers/guest_book.py b/barker/barker/routers/guest_book.py index 9ead774..2451d55 100644 --- a/barker/barker/routers/guest_book.py +++ b/barker/barker/routers/guest_book.py @@ -33,7 +33,7 @@ def get_db(): def save( data: schemas.GuestBookIn, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["guest-book"]), + user: UserToken = Security(get_user, scopes=["customers"]), ) -> schemas.GuestBook: try: customer: Customer = db.query(Customer).filter(Customer.phone == data.phone).first() @@ -67,7 +67,7 @@ def update( id_: uuid.UUID, data: schemas.GuestBookIn, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["guest-book"]), + user: UserToken = Security(get_user, scopes=["customers"]), ) -> schemas.GuestBook: try: item: GuestBook = db.query(GuestBook).filter(GuestBook.id == id_).first() @@ -92,7 +92,7 @@ def update( def delete( id_: uuid.UUID, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["guest-book"]), + user: UserToken = Security(get_user, scopes=["customers"]), ) -> schemas.GuestBookIn: try: item: GuestBook = db.query(GuestBook).filter(GuestBook.id == id_).first() @@ -113,7 +113,7 @@ def delete( @router.get("", response_model=schemas.GuestBookIn) def show_blank( db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["guest-book"]), + user: UserToken = Security(get_user, scopes=["customers"]), ) -> schemas.GuestBook: return blank_guest_book_info() @@ -169,7 +169,7 @@ def show_list( def show_id( id_: uuid.UUID, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["guest-book"]), + user: UserToken = Security(get_user, scopes=["customers"]), ) -> schemas.GuestBook: item: GuestBook = db.query(GuestBook).filter(GuestBook.id == id_).first() return guest_book_info(item) diff --git a/barker/barker/routers/reports/beer_consumption_report.py b/barker/barker/routers/reports/beer_consumption_report.py index 787531f..3c86b32 100644 --- a/barker/barker/routers/reports/beer_consumption_report.py +++ b/barker/barker/routers/reports/beer_consumption_report.py @@ -30,9 +30,9 @@ def beer_consumption( start_date: date = Depends(report_start_date), finish_date: date = Depends(report_finish_date), db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["beer-consumption-report"]), + user: UserToken = Security(get_user, scopes=["beer-sale-report"]), ): - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/bill_settlement_report.py b/barker/barker/routers/reports/bill_settlement_report.py index 4f3de70..efaadba 100644 --- a/barker/barker/routers/reports/bill_settlement_report.py +++ b/barker/barker/routers/reports/bill_settlement_report.py @@ -32,7 +32,7 @@ def bill_details( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["bill-settlement-report"]), ) -> BillSettlement: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/cashier_report.py b/barker/barker/routers/reports/cashier_report.py index f595d3f..2ba6d25 100644 --- a/barker/barker/routers/reports/cashier_report.py +++ b/barker/barker/routers/reports/cashier_report.py @@ -42,7 +42,7 @@ def active_cashiers( user: UserToken = Security(get_user, scopes=["cashier-report"]), ): - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", @@ -75,7 +75,7 @@ def show_id( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["cashier-report"]), ) -> CashierReport: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", @@ -136,7 +136,7 @@ def print_report( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["cashier-report"]), ) -> bool: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", @@ -153,7 +153,7 @@ def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["cashier-report"]), ) -> CashierReport: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/discount_report.py b/barker/barker/routers/reports/discount_report.py index 02338fb..93313ca 100644 --- a/barker/barker/routers/reports/discount_report.py +++ b/barker/barker/routers/reports/discount_report.py @@ -36,7 +36,7 @@ def discount_report( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["discount-report"]), ) -> DiscountReport: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", @@ -90,7 +90,7 @@ def print_report( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["discount-report"]), ) -> bool: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/product_sale_report.py b/barker/barker/routers/reports/product_sale_report.py index a9382c7..014dfda 100644 --- a/barker/barker/routers/reports/product_sale_report.py +++ b/barker/barker/routers/reports/product_sale_report.py @@ -40,7 +40,7 @@ def product_sale_report_view( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["product-sale-report"]), ): - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/sale_report.py b/barker/barker/routers/reports/sale_report.py index f877036..4148bfa 100644 --- a/barker/barker/routers/reports/sale_report.py +++ b/barker/barker/routers/reports/sale_report.py @@ -46,7 +46,7 @@ def get_sale_analysis( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["sale-report"]), ) -> SaleReport: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", @@ -131,7 +131,7 @@ def print_report( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["discount-report"]), ) -> bool: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/reports/tax_report.py b/barker/barker/routers/reports/tax_report.py index 850e636..aae95d5 100644 --- a/barker/barker/routers/reports/tax_report.py +++ b/barker/barker/routers/reports/tax_report.py @@ -33,7 +33,7 @@ def get_tax_report( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tax-report"]), ) -> TaxReport: - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if (date.today() - start_date).days > 5 and "audit" not in user.permissions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Accounts Audit", diff --git a/barker/barker/routers/table.py b/barker/barker/routers/table.py index 3481c40..e10e3cc 100644 --- a/barker/barker/routers/table.py +++ b/barker/barker/routers/table.py @@ -31,7 +31,7 @@ def get_db(): def sort_order( data: List[schemas.Table], db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: for index, item in enumerate(data): @@ -63,7 +63,7 @@ def sort_order( def save( data: schemas.TableIn, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: item = FoodTable( @@ -91,7 +91,7 @@ def update( id_: uuid.UUID, data: schemas.TableIn, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: item: FoodTable = db.query(FoodTable).filter(FoodTable.id == id_).first() @@ -116,7 +116,7 @@ def update( def delete( id_: uuid.UUID, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: item: FoodTable = db.query(FoodTable).filter(FoodTable.id == id_).first() @@ -137,7 +137,7 @@ def delete( @router.get("") def show_blank( db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): return food_table_info(None) @@ -199,7 +199,7 @@ def show_voucher( def show_id( id_: uuid.UUID, db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["tables"]), + user: UserToken = Security(get_user, scopes=["sections"]), ): item: FoodTable = db.query(FoodTable).filter(FoodTable.id == id_).first() return food_table_info(item) diff --git a/barker/barker/routers/voucher/merge_move.py b/barker/barker/routers/voucher/merge_move.py index fb20776..6f64da4 100644 --- a/barker/barker/routers/voucher/merge_move.py +++ b/barker/barker/routers/voucher/merge_move.py @@ -36,8 +36,16 @@ def merge_kot( user: UserToken = Security(get_user, scopes=["merge-kots"]), ): try: - db.query(Kot).filter(Kot.id == data.kot_id).update({Kot.voucher_id: data.new_voucher_id}) - update_vouchers([data.voucher_id, data.new_voucher_id], db) + kots: int = db.query(func.count(Kot.id)).filter(Kot.voucher_id == data.voucher_id).scalar() + if kots <= 1: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Single kot cannot be used, move table instead. This error should not show up in frontend", + ) + db.query(Kot).filter(Kot.id == data.kot_id, Kot.voucher_id == data.voucher_id).update( + {Kot.voucher_id: data.new_voucher_id} + ) + update_settlements([data.voucher_id, data.new_voucher_id], db) db.commit() except SQLAlchemyError as e: db.rollback() @@ -57,9 +65,14 @@ def move_kot( user: UserToken = Security(get_user, scopes=["move-kot-to-new-table"]), ): try: + # TODO: Check if this is the only kot, then move table instead of move kot. now = datetime.now() - table_id = data.table_id - + kots: int = db.query(func.count(Kot.id)).filter(Kot.voucher_id == data.voucher_id).scalar() + if kots <= 1: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Single kot cannot be used, move table instead. This error should not show up in frontend", + ) kot = db.query(Kot).filter(Kot.id == data.kot_id).first() bill_id = get_bill_id(kot.voucher.voucher_type, db) kot_id = db.query(func.coalesce(func.max(Voucher.kot_id), 0) + 1).scalar() @@ -69,15 +82,16 @@ def move_kot( kot.voucher.pax, bill_id, kot_id, - table_id, + data.table_id, kot.voucher.customer_id if kot.voucher.customer is not None else None, kot.voucher.voucher_type, user.id_, ) db.add(item) item.kots.append(kot) + db.flush() do_update_table(item, None, db) - update_vouchers([data.voucher_id, item.id], db) + update_settlements([data.voucher_id, item.id], db) db.commit() except SQLAlchemyError as e: db.rollback() @@ -124,7 +138,7 @@ def merge_table( db.query(Overview).filter(Overview.voucher_id == data.voucher_id).delete() db.query(Settlement).filter(Settlement.voucher_id == data.voucher_id).delete() db.query(Voucher).filter(Voucher.id == data.voucher_id).delete() - update_vouchers([data.new_voucher_id], db) + update_settlements([data.new_voucher_id], db) db.commit() except SQLAlchemyError as e: db.rollback() @@ -137,7 +151,7 @@ def merge_table( raise -def update_vouchers(vouchers: List[uuid.UUID], db: Session): +def update_settlements(vouchers: List[uuid.UUID], db: Session): for v in vouchers: voucher: Voucher = db.query(Voucher).filter(Voucher.id == v).first() do_update_settlements(voucher, [], db) diff --git a/bookie/src/app/app-routing.module.ts b/bookie/src/app/app-routing.module.ts index 76aaa92..28faeef 100644 --- a/bookie/src/app/app-routing.module.ts +++ b/bookie/src/app/app-routing.module.ts @@ -7,11 +7,9 @@ import { HomeComponent } from './home/home.component'; const routes: Routes = [ { - path: 'beer-consumption-report', + path: 'beer-sale-report', loadChildren: () => - import('./beer-consumption-report/beer-consumption-report.module').then( - (mod) => mod.BeerConsumptionReportModule, - ), + import('./beer-sale-report/beer-sale-report.module').then((mod) => mod.BeerSaleReportModule), }, { path: 'bill-settlement-report', diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts deleted file mode 100644 index d16faeb..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DataSource } from '@angular/cdk/collections'; -import { Observable, of as observableOf } from 'rxjs'; - -import { BeerConsumptionReportItem } from './beer-consumption-report-item'; - -export class BeerConsumptionReportDataSource extends DataSource { - constructor(public data: BeerConsumptionReportItem[]) { - super(); - } - - connect(): Observable { - return observableOf(this.data); - } - - disconnect() {} -} diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.spec.ts deleted file mode 100644 index 0e5e9a2..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { inject, TestBed } from '@angular/core/testing'; - -import { BeerConsumptionReportResolver } from './beer-consumption-report-resolver.service'; - -describe('BeerConsumptionReportResolver', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [BeerConsumptionReportResolver], - }); - }); - - it('should be created', inject( - [BeerConsumptionReportResolver], - (service: BeerConsumptionReportResolver) => { - expect(service).toBeTruthy(); - }, - )); -}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.spec.ts deleted file mode 100644 index c9a8476..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BeerConsumptionReportRoutingModule } from './beer-consumption-report-routing.module'; - -describe('BeerConsumptionReportRoutingModule', () => { - let pbeerConsumptionReportRoutingModule: BeerConsumptionReportRoutingModule; - - beforeEach(() => { - pbeerConsumptionReportRoutingModule = new BeerConsumptionReportRoutingModule(); - }); - - it('should create an instance', () => { - expect(pbeerConsumptionReportRoutingModule).toBeTruthy(); - }); -}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.ts deleted file mode 100644 index 74fbee8..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { AuthGuard } from '../auth/auth-guard.service'; - -import { BeerConsumptionReportResolver } from './beer-consumption-report-resolver.service'; -import { BeerConsumptionReportComponent } from './beer-consumption-report.component'; - -const beerConsumptionReportRoutes: Routes = [ - { - path: '', - component: BeerConsumptionReportComponent, - canActivate: [AuthGuard], - data: { - permission: 'Beer Consumption Report', - }, - resolve: { - info: BeerConsumptionReportResolver, - }, - runGuardsAndResolvers: 'always', - }, -]; - -@NgModule({ - imports: [CommonModule, RouterModule.forChild(beerConsumptionReportRoutes)], - exports: [RouterModule], - providers: [BeerConsumptionReportResolver], -}) -export class BeerConsumptionReportRoutingModule {} diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.component.spec.ts deleted file mode 100644 index 1d2e7f7..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { BeerConsumptionReportComponent } from './beer-consumption-report.component'; - -describe('BeerConsumptionReportComponent', () => { - let component: BeerConsumptionReportComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [BeerConsumptionReportComponent], - }).compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(BeerConsumptionReportComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.module.spec.ts deleted file mode 100644 index 1135827..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BeerConsumptionReportModule } from './beer-consumption-report.module'; - -describe('BeerConsumptionReportModule', () => { - let pbeerConsumptionReportModule: BeerConsumptionReportModule; - - beforeEach(() => { - pbeerConsumptionReportModule = new BeerConsumptionReportModule(); - }); - - it('should create an instance', () => { - expect(pbeerConsumptionReportModule).toBeTruthy(); - }); -}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.service.spec.ts deleted file mode 100644 index c727e58..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { inject, TestBed } from '@angular/core/testing'; - -import { BeerConsumptionReportService } from './beer-consumption-report.service'; - -describe('BeerConsumptionReportService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [BeerConsumptionReportService], - }); - }); - - it('should be created', inject( - [BeerConsumptionReportService], - (service: BeerConsumptionReportService) => { - expect(service).toBeTruthy(); - }, - )); -}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.ts deleted file mode 100644 index 2045890..0000000 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { BeerConsumptionReportItem } from './beer-consumption-report-item'; - -export class BeerConsumptionReport { - startDate: string; - finishDate: string; - headers?: string[]; - data?: BeerConsumptionReportItem[]; -} diff --git a/bookie/src/app/beer-sale-report/beer-sale-report-datasource.ts b/bookie/src/app/beer-sale-report/beer-sale-report-datasource.ts new file mode 100644 index 0000000..9da8b48 --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report-datasource.ts @@ -0,0 +1,16 @@ +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; + +import { BeerSaleReportItem } from './beer-sale-report-item'; + +export class BeerSaleReportDataSource extends DataSource { + constructor(public data: BeerSaleReportItem[]) { + super(); + } + + connect(): Observable { + return observableOf(this.data); + } + + disconnect() {} +} diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-item.ts b/bookie/src/app/beer-sale-report/beer-sale-report-item.ts similarity index 56% rename from bookie/src/app/beer-consumption-report/beer-consumption-report-item.ts rename to bookie/src/app/beer-sale-report/beer-sale-report-item.ts index af323a1..25fd5fd 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-item.ts +++ b/bookie/src/app/beer-sale-report/beer-sale-report-item.ts @@ -1,4 +1,4 @@ -export class BeerConsumptionReportItem { +export class BeerSaleReportItem { date: string; name: string; quantity: number; diff --git a/bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.spec.ts b/bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.spec.ts new file mode 100644 index 0000000..0440cf5 --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.spec.ts @@ -0,0 +1,15 @@ +import { inject, TestBed } from '@angular/core/testing'; + +import { BeerSaleReportResolver } from './beer-sale-report-resolver.service'; + +describe('BeerSaleReportResolver', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [BeerSaleReportResolver], + }); + }); + + it('should be created', inject([BeerSaleReportResolver], (service: BeerSaleReportResolver) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts b/bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.ts similarity index 51% rename from bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts rename to bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.ts index 34e6c40..8c60a14 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts +++ b/bookie/src/app/beer-sale-report/beer-sale-report-resolver.service.ts @@ -2,16 +2,16 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; -import { BeerConsumptionReport } from './beer-consumption-report'; -import { BeerConsumptionReportService } from './beer-consumption-report.service'; +import { BeerSaleReport } from './beer-sale-report'; +import { BeerSaleReportService } from './beer-sale-report.service'; @Injectable({ providedIn: 'root', }) -export class BeerConsumptionReportResolver implements Resolve { - constructor(private ser: BeerConsumptionReportService) {} +export class BeerSaleReportResolver implements Resolve { + constructor(private ser: BeerSaleReportService) {} - resolve(route: ActivatedRouteSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const startDate = route.queryParamMap.get('startDate') || null; const finishDate = route.queryParamMap.get('finishDate') || null; return this.ser.get(startDate, finishDate); diff --git a/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.spec.ts b/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.spec.ts new file mode 100644 index 0000000..beb44eb --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.spec.ts @@ -0,0 +1,13 @@ +import { BeerSaleReportRoutingModule } from './beer-sale-report-routing.module'; + +describe('BeerSaleReportRoutingModule', () => { + let beerSaleReportRoutingModule: BeerSaleReportRoutingModule; + + beforeEach(() => { + beerSaleReportRoutingModule = new BeerSaleReportRoutingModule(); + }); + + it('should create an instance', () => { + expect(beerSaleReportRoutingModule).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.ts b/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.ts new file mode 100644 index 0000000..0fd5dfc --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report-routing.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { BeerSaleReportResolver } from './beer-sale-report-resolver.service'; +import { BeerSaleReportComponent } from './beer-sale-report.component'; + +const beerSaleReportRoutes: Routes = [ + { + path: '', + component: BeerSaleReportComponent, + canActivate: [AuthGuard], + data: { + permission: 'Beer Sale Report', + }, + resolve: { + info: BeerSaleReportResolver, + }, + runGuardsAndResolvers: 'always', + }, +]; + +@NgModule({ + imports: [CommonModule, RouterModule.forChild(beerSaleReportRoutes)], + exports: [RouterModule], + providers: [BeerSaleReportResolver], +}) +export class BeerSaleReportRoutingModule {} diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.css b/bookie/src/app/beer-sale-report/beer-sale-report.component.css similarity index 100% rename from bookie/src/app/beer-consumption-report/beer-consumption-report.component.css rename to bookie/src/app/beer-sale-report/beer-sale-report.component.css diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html b/bookie/src/app/beer-sale-report/beer-sale-report.component.html similarity index 97% rename from bookie/src/app/beer-consumption-report/beer-consumption-report.component.html rename to bookie/src/app/beer-sale-report/beer-sale-report.component.html index 131e731..3b87785 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html +++ b/bookie/src/app/beer-sale-report/beer-sale-report.component.html @@ -1,6 +1,6 @@ - Beer Consumption Report + Beer Sale Report diff --git a/bookie/src/app/beer-sale-report/beer-sale-report.component.spec.ts b/bookie/src/app/beer-sale-report/beer-sale-report.component.spec.ts new file mode 100644 index 0000000..8598e9b --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report.component.spec.ts @@ -0,0 +1,24 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BeerSaleReportComponent } from './beer-sale-report.component'; + +describe('BeerSaleReportComponent', () => { + let component: BeerSaleReportComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [BeerSaleReportComponent], + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BeerSaleReportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts b/bookie/src/app/beer-sale-report/beer-sale-report.component.ts similarity index 70% rename from bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts rename to bookie/src/app/beer-sale-report/beer-sale-report.component.ts index 8ddc0c0..23752db 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts +++ b/bookie/src/app/beer-sale-report/beer-sale-report.component.ts @@ -5,18 +5,18 @@ import * as moment from 'moment'; import { ToCsvService } from '../shared/to-csv.service'; -import { BeerConsumptionReport } from './beer-consumption-report'; -import { BeerConsumptionReportDataSource } from './beer-consumption-report-datasource'; +import { BeerSaleReport } from './beer-sale-report'; +import { BeerSaleReportDataSource } from './beer-sale-report-datasource'; @Component({ - selector: 'app-beer-consumption-report', - templateUrl: './beer-consumption-report.component.html', - styleUrls: ['./beer-consumption-report.component.css'], + selector: 'app-beer-sale-report', + templateUrl: './beer-sale-report.component.html', + styleUrls: ['./beer-sale-report.component.css'], }) -export class BeerConsumptionReportComponent implements OnInit { - dataSource: BeerConsumptionReportDataSource; +export class BeerSaleReportComponent implements OnInit { + dataSource: BeerSaleReportDataSource; form: FormGroup; - info: BeerConsumptionReport; + info: BeerSaleReport; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns: string[] = ['date']; @@ -31,20 +31,20 @@ export class BeerConsumptionReportComponent implements OnInit { } ngOnInit() { - this.route.data.subscribe((data: { info: BeerConsumptionReport }) => { + this.route.data.subscribe((data: { info: BeerSaleReport }) => { this.info = data.info; this.displayedColumns = ['date'].concat(this.info.headers); this.form.setValue({ startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); - this.dataSource = new BeerConsumptionReportDataSource(this.info.data); + this.dataSource = new BeerSaleReportDataSource(this.info.data); }); } show() { const info = this.getInfo(); - this.router.navigate(['beer-consumption-report'], { + this.router.navigate(['beer-sale-report'], { queryParams: { startDate: info.startDate, finishDate: info.finishDate, @@ -59,7 +59,7 @@ export class BeerConsumptionReportComponent implements OnInit { }); } - getInfo(): BeerConsumptionReport { + getInfo(): BeerSaleReport { const formModel = this.form.value; return { @@ -83,7 +83,7 @@ export class BeerConsumptionReportComponent implements OnInit { }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); - link.setAttribute('download', 'beer-consumption-report.csv'); + link.setAttribute('download', 'beer-sale-report.csv'); document.body.appendChild(link); link.click(); document.body.removeChild(link); diff --git a/bookie/src/app/beer-sale-report/beer-sale-report.module.spec.ts b/bookie/src/app/beer-sale-report/beer-sale-report.module.spec.ts new file mode 100644 index 0000000..7c268c1 --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report.module.spec.ts @@ -0,0 +1,13 @@ +import { BeerSaleReportModule } from './beer-sale-report.module'; + +describe('BeerSaleReportModule', () => { + let beerSaleReportModule: BeerSaleReportModule; + + beforeEach(() => { + beerSaleReportModule = new BeerSaleReportModule(); + }); + + it('should create an instance', () => { + expect(beerSaleReportModule).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts b/bookie/src/app/beer-sale-report/beer-sale-report.module.ts similarity index 85% rename from bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts rename to bookie/src/app/beer-sale-report/beer-sale-report.module.ts index aa549e4..f56ef06 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts +++ b/bookie/src/app/beer-sale-report/beer-sale-report.module.ts @@ -22,8 +22,8 @@ import { MatTableModule } from '@angular/material/table'; import { SharedModule } from '../shared/shared.module'; -import { BeerConsumptionReportRoutingModule } from './beer-consumption-report-routing.module'; -import { BeerConsumptionReportComponent } from './beer-consumption-report.component'; +import { BeerSaleReportRoutingModule } from './beer-sale-report-routing.module'; +import { BeerSaleReportComponent } from './beer-sale-report.component'; export const MY_FORMATS = { parse: { @@ -54,12 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - BeerConsumptionReportRoutingModule, + BeerSaleReportRoutingModule, ], - declarations: [BeerConsumptionReportComponent], + declarations: [BeerSaleReportComponent], providers: [ { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, ], }) -export class BeerConsumptionReportModule {} +export class BeerSaleReportModule {} diff --git a/bookie/src/app/beer-sale-report/beer-sale-report.service.spec.ts b/bookie/src/app/beer-sale-report/beer-sale-report.service.spec.ts new file mode 100644 index 0000000..e43058c --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report.service.spec.ts @@ -0,0 +1,15 @@ +import { inject, TestBed } from '@angular/core/testing'; + +import { BeerSaleReportService } from './beer-sale-report.service'; + +describe('BeerSaleReportService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [BeerSaleReportService], + }); + }); + + it('should be created', inject([BeerSaleReportService], (service: BeerSaleReportService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts b/bookie/src/app/beer-sale-report/beer-sale-report.service.ts similarity index 65% rename from bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts rename to bookie/src/app/beer-sale-report/beer-sale-report.service.ts index 34b360b..e094d86 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts +++ b/bookie/src/app/beer-sale-report/beer-sale-report.service.ts @@ -5,18 +5,18 @@ import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; -import { BeerConsumptionReport } from './beer-consumption-report'; +import { BeerSaleReport } from './beer-sale-report'; -const url = '/api/beer-consumption-report'; -const serviceName = 'BeerConsumptionReportService'; +const url = '/api/beer-sale-report'; +const serviceName = 'BeerSaleReportService'; @Injectable({ providedIn: 'root', }) -export class BeerConsumptionReportService { +export class BeerSaleReportService { constructor(private http: HttpClient, private log: ErrorLoggerService) {} - get(startDate: string, finishDate): Observable { + get(startDate: string, finishDate): Observable { const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); @@ -24,9 +24,9 @@ export class BeerConsumptionReportService { if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >( + return >( this.http - .get(url, options) + .get(url, options) .pipe(catchError(this.log.handleError(serviceName, 'get'))) ); } diff --git a/bookie/src/app/beer-sale-report/beer-sale-report.ts b/bookie/src/app/beer-sale-report/beer-sale-report.ts new file mode 100644 index 0000000..283977f --- /dev/null +++ b/bookie/src/app/beer-sale-report/beer-sale-report.ts @@ -0,0 +1,8 @@ +import { BeerSaleReportItem } from './beer-sale-report-item'; + +export class BeerSaleReport { + startDate: string; + finishDate: string; + headers?: string[]; + data?: BeerSaleReportItem[]; +} diff --git a/bookie/src/app/guest-book/guest-book-routing.module.ts b/bookie/src/app/guest-book/guest-book-routing.module.ts index c23c45a..657eed9 100644 --- a/bookie/src/app/guest-book/guest-book-routing.module.ts +++ b/bookie/src/app/guest-book/guest-book-routing.module.ts @@ -14,7 +14,7 @@ const routes: Routes = [ component: GuestBookListComponent, canActivate: [AuthGuard], data: { - permission: 'Guest Book', + permission: 'Customers', }, resolve: { list: GuestBookListResolver, @@ -26,7 +26,7 @@ const routes: Routes = [ component: GuestBookDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Guest Book', + permission: 'Customers', }, resolve: { item: GuestBookDetailResolver, @@ -37,7 +37,7 @@ const routes: Routes = [ component: GuestBookDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Guest Book', + permission: 'Customers', }, resolve: { item: GuestBookDetailResolver, diff --git a/bookie/src/app/home/home.component.html b/bookie/src/app/home/home.component.html index 1ea648b..96a2ff8 100644 --- a/bookie/src/app/home/home.component.html +++ b/bookie/src/app/home/home.component.html @@ -3,7 +3,7 @@ fxLayout="column" class="square-button" matRipple - *ngIf="auth.user && auth.user.perms.indexOf('guest-book') !== -1" + *ngIf="auth.user && auth.user.perms.indexOf('customers') !== -1" [routerLink]="['/', 'guest-book']" >

Guest Book

@@ -66,10 +66,10 @@ fxLayout="column" class="square-button" matRipple - *ngIf="auth.user && auth.user.perms.indexOf('beer-consumption-report') !== -1" - [routerLink]="['/', 'beer-consumption-report']" + *ngIf="auth.user && auth.user.perms.indexOf('beer-sale-report') !== -1" + [routerLink]="['/', 'beer-sale-report']" > -

Beer Consumption Report

+

Beer Sale Report

Tables

diff --git a/bookie/src/app/sales/bills/bills.component.ts b/bookie/src/app/sales/bills/bills.component.ts index 52240d8..1efc162 100644 --- a/bookie/src/app/sales/bills/bills.component.ts +++ b/bookie/src/app/sales/bills/bills.component.ts @@ -134,43 +134,45 @@ export class BillsComponent implements OnInit { this.bs.modifier(item); } - confirmMoveKotDialog(table: Table): Observable<{ table: Table; confirmed: boolean }> { + confirmMoveKotDialog(table: Table): Observable> { return this.dialog .open(ConfirmDialogComponent, { width: '250px', data: { title: 'Move KOT?', content: 'Are you sure?' }, }) .afterClosed() - .pipe(map((x: boolean) => ({ table, confirmed: x }))); + .pipe(map((x: boolean) => (x ? table : throwError('Please confirm move')))); } - moveKot(kot: Kot) { - const canMergeTables = this.auth.user.perms.indexOf('merge-tables') !== -1; - this.dialog + chooseTable(allowMerge: boolean): Observable
{ + return this.dialog .open(TablesDialogComponent, { // width: '750px', data: { list: this.tSer.running(), - canChooseRunning: canMergeTables, + canChooseRunning: allowMerge, }, }) .afterClosed() + .pipe(map((x) => x || throwError('Please choose a table'))); + } + + moveKot(kot: Kot) { + const canMergeTables = this.auth.user.perms.indexOf('merge-tables') !== -1; + this.chooseTable(canMergeTables) .pipe( - switchMap((x: boolean | Table) => { - if (x) { - return this.confirmMoveKotDialog(x as Table); + switchMap((table: Table) => this.confirmMoveKotDialog(table)), + switchMap((table: Table) => { + if (this.bs.bill.kots.length === 1 && table.status) { + return this.bs.mergeTable(table); } - return throwError('Please choose a table'); - }), - // eslint-disable-next-line @typescript-eslint/no-unused-vars - switchMap((value: { table: Table; confirmed: boolean }, index: number) => { - if (!value.confirmed) { - return throwError('Please confirm move'); + if (this.bs.bill.kots.length === 1 && !table.status) { + return this.bs.moveTable(table); } - if (value.table.status) { - return this.bs.mergeKot(kot.id, value.table); + if (table.status) { + return this.bs.mergeKot(kot.id, table); } - return this.bs.moveKot(kot.id, value.table); + return this.bs.moveKot(kot.id, table); }), ) .subscribe( diff --git a/bookie/src/app/tables/tables-routing.module.ts b/bookie/src/app/tables/tables-routing.module.ts index ea657f8..381f372 100644 --- a/bookie/src/app/tables/tables-routing.module.ts +++ b/bookie/src/app/tables/tables-routing.module.ts @@ -16,7 +16,7 @@ const tablesRoutes: Routes = [ component: TableListComponent, canActivate: [AuthGuard], data: { - permission: 'Tables', + permission: 'Sections', }, resolve: { list: TableListResolver, @@ -27,7 +27,7 @@ const tablesRoutes: Routes = [ component: TableDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Tables', + permission: 'Sections', }, resolve: { item: TableResolver, @@ -39,7 +39,7 @@ const tablesRoutes: Routes = [ component: TableDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Tables', + permission: 'Sections', }, resolve: { item: TableResolver,