diff --git a/barker/barker/__main__.py b/barker/barker/__main__.py index c470f10..c727fcc 100644 --- a/barker/barker/__main__.py +++ b/barker/barker/__main__.py @@ -1,3 +1,4 @@ from barker.main import init + init() diff --git a/barker/barker/core/config.py b/barker/barker/core/config.py index 9bb069e..32a39e9 100644 --- a/barker/barker/core/config.py +++ b/barker/barker/core/config.py @@ -1,7 +1,8 @@ -from dotenv import load_dotenv import secrets + from typing import Any, Dict, Optional +from dotenv import load_dotenv from pydantic import BaseSettings, PostgresDsn, validator diff --git a/barker/barker/core/security.py b/barker/barker/core/security.py index b71ee71..20e1854 100644 --- a/barker/barker/core/security.py +++ b/barker/barker/core/security.py @@ -1,23 +1,25 @@ import uuid + from datetime import datetime, timedelta from typing import List, Optional -from jwt import PyJWTError - -from fastapi import Depends, HTTPException, status, Security -from fastapi.security import OAuth2PasswordBearer, SecurityScopes -from pydantic import BaseModel, ValidationError -from sqlalchemy.orm import Session -from jose import jwt -from jose.exceptions import ExpiredSignatureError from barker.core.config import settings -from barker.models.auth import User as UserModel, Client -from ..db.session import SessionLocal +from barker.models.auth import Client +from barker.models.auth import User as UserModel +from fastapi import Depends, HTTPException, Security, status +from fastapi.security import OAuth2PasswordBearer, SecurityScopes +from jose import jwt +from jose.exceptions import ExpiredSignatureError +from jwt import PyJWTError +from pydantic import BaseModel, ValidationError +from sqlalchemy.orm import Session +from ..db.session import SessionLocal # to get a string like this run: from ..schemas.auth import UserToken + oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token", scopes={}) @@ -53,12 +55,20 @@ def create_access_token(*, data: dict, expires_delta: timedelta = None): else: expire = datetime.utcnow() + timedelta(minutes=15) to_encode.update({"exp": expire}) - encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM) + encoded_jwt = jwt.encode( + to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM + ) return encoded_jwt def get_user(username: str, id_: str, locked_out: bool, scopes: List[str]) -> UserToken: - return UserToken(id_=uuid.UUID(id_), name=username, locked_out=locked_out, password="", permissions=scopes,) + return UserToken( + id_=uuid.UUID(id_), + name=username, + locked_out=locked_out, + password="", + permissions=scopes, + ) def authenticate_user( @@ -68,9 +78,15 @@ def authenticate_user( return user -def client_allowed(user: UserModel, client_id: int, otp: Optional[int] = None, db: Session = None) -> (bool, int): - client = db.query(Client).filter(Client.id == client_id).first() if client_id else None - allowed = "clients" in set([p.name.replace(" ", "-").lower() for r in user.roles for p in r.permissions]) +def client_allowed( + user: UserModel, client_id: int, otp: Optional[int] = None, db: Session = None +) -> (bool, int): + client = ( + db.query(Client).filter(Client.id == client_id).first() if client_id else None + ) + allowed = "clients" in set( + [p.name.replace(" ", "-").lower() for r in user.roles for p in r.permissions] + ) if allowed or True: return True, 0 elif client is None: @@ -86,7 +102,10 @@ def client_allowed(user: UserModel, client_id: int, otp: Optional[int] = None, d return False, client.id -async def get_current_user(security_scopes: SecurityScopes, token: str = Depends(oauth2_scheme),) -> UserToken: +async def get_current_user( + security_scopes: SecurityScopes, + token: str = Depends(oauth2_scheme), +) -> UserToken: if security_scopes.scopes: authenticate_value = f'Bearer scope="{security_scopes.scope_str}"' else: @@ -97,7 +116,9 @@ async def get_current_user(security_scopes: SecurityScopes, token: str = Depends headers={"WWW-Authenticate": authenticate_value}, ) try: - payload = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM]) + payload = jwt.decode( + token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM] + ) username: str = payload.get("sub") if username is None: raise credentials_exception diff --git a/barker/barker/core/session.py b/barker/barker/core/session.py index 13abcd8..540d710 100644 --- a/barker/barker/core/session.py +++ b/barker/barker/core/session.py @@ -26,7 +26,9 @@ def get_finish_date(session): def set_period(start, finish, session): session["start"] = start if isinstance(start, str) else start.strftime("%d-%b-%Y") - session["finish"] = finish if isinstance(finish, str) else finish.strftime("%d-%b-%Y") + session["finish"] = ( + finish if isinstance(finish, str) else finish.strftime("%d-%b-%Y") + ) def get_first_day(dt, d_years=0, d_months=0): diff --git a/barker/barker/db/base.py b/barker/barker/db/base.py index c82573a..ef8e298 100644 --- a/barker/barker/db/base.py +++ b/barker/barker/db/base.py @@ -1,31 +1,30 @@ # Import all the models, so that Base has them before being # imported by Alembic from barker.db.base_class import Base # noqa -from brewman.models import ( - Client, - user_group, - role_group, - User, - LoginHistory, - Role, - Permission, - Product, - AttendanceType, - CostCentre, - Employee, +from brewman.models import ( # noqa Account, AccountBase, AccountType, - ProductGroup, - Recipe, - RecipeItem, Attendance, + AttendanceType, Batch, + Client, + CostCentre, + Employee, + EmployeeBenefit, Fingerprint, Inventory, Journal, + LoginHistory, + Permission, Product, - EmployeeBenefit, + ProductGroup, + Recipe, + RecipeItem, + Role, + User, Voucher, VoucherType, -) # noqa + role_group, + user_group, +) diff --git a/barker/barker/db/base_class.py b/barker/barker/db/base_class.py index 98c6156..0c31347 100644 --- a/barker/barker/db/base_class.py +++ b/barker/barker/db/base_class.py @@ -1,6 +1,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.schema import MetaData + # Recommended naming convention used by Alembic, as various different database # providers will autogenerate vastly different names making migrations more # difficult. See: http://alembic.zzzcomputing.com/en/latest/naming.html diff --git a/barker/barker/db/init_db.py b/barker/barker/db/init_db.py index ac65e92..48c7291 100644 --- a/barker/barker/db/init_db.py +++ b/barker/barker/db/init_db.py @@ -1,10 +1,19 @@ import uuid +from barker.core.config import settings +from barker.models import ( + Customer, + DbSetting, + ModifierCategory, + Permission, + Role, + Section, + SettleOption, + User, +) +from brewman.db import base # noqa: F401 from sqlalchemy.orm import Session -from barker.core.config import settings -from brewman.db import base # noqa: F401 -from barker.models import Permission, Section, ModifierCategory, SettleOption, Customer, DbSetting, Role, User # make sure all SQL Alchemy models are imported (app.db.base) before initializing DB # otherwise, SQL Alchemy might fail to initialize relationships properly @@ -19,22 +28,75 @@ def init_db(db: Session) -> None: prod = True if prod: - db.add(Permission("Guest Book", uuid.UUID("7669dfc9-cc75-4e48-b267-145c8832a83c"))) - db.add(Permission("Printers", uuid.UUID("5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c"))) - db.add(Permission("Sections", uuid.UUID("c973f32c-a37b-496a-8dc5-60d2e4c39e97"))) - db.add(Permission("Section Printers", uuid.UUID("7a04ba63-5d08-4078-9051-a6d91cce3e48"), )) + db.add( + Permission("Guest Book", uuid.UUID("7669dfc9-cc75-4e48-b267-145c8832a83c")) + ) + db.add( + Permission("Printers", uuid.UUID("5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c")) + ) + db.add( + Permission("Sections", uuid.UUID("c973f32c-a37b-496a-8dc5-60d2e4c39e97")) + ) + db.add( + Permission( + "Section Printers", + uuid.UUID("7a04ba63-5d08-4078-9051-a6d91cce3e48"), + ) + ) else: add_permissions(db) main_section = Section("Main", uuid.UUID("3f13f6e7-dc76-4fca-8fdb-b2bbf29b35df")) db.add(main_section) mcs = [ - ModifierCategory("Old Modifiers", 0, 0, True, 0, uuid.UUID("e046ad33-dc65-4c78-8833-c3d3538d44c0"), ), - ModifierCategory("Bar Instructions", 0, 0, True, 0, uuid.UUID("b572f401-3c2f-48b9-8973-ada5a6e4d3a6"), ), - ModifierCategory("Delivery", 0, 0, True, 0, uuid.UUID("caa72832-5034-405e-8442-68a8cc12ace9"), ), - ModifierCategory("Kitchen Instructions", 0, 0, True, 0, uuid.UUID("d6a0595f-e209-42e4-bb12-b7499f9a9c4d"), ), - ModifierCategory("Mixers", 0, 0, True, 0, uuid.UUID("60ca9122-adc5-463b-ad5f-33a68df8c3ae"), ), - ModifierCategory("Pasta Sauce", 0, 0, True, 0, uuid.UUID("ef5b1a0b-5eb1-45ff-bd82-3209c8b888df"), ), + ModifierCategory( + "Old Modifiers", + 0, + 0, + True, + 0, + uuid.UUID("e046ad33-dc65-4c78-8833-c3d3538d44c0"), + ), + ModifierCategory( + "Bar Instructions", + 0, + 0, + True, + 0, + uuid.UUID("b572f401-3c2f-48b9-8973-ada5a6e4d3a6"), + ), + ModifierCategory( + "Delivery", + 0, + 0, + True, + 0, + uuid.UUID("caa72832-5034-405e-8442-68a8cc12ace9"), + ), + ModifierCategory( + "Kitchen Instructions", + 0, + 0, + True, + 0, + uuid.UUID("d6a0595f-e209-42e4-bb12-b7499f9a9c4d"), + ), + ModifierCategory( + "Mixers", + 0, + 0, + True, + 0, + uuid.UUID("60ca9122-adc5-463b-ad5f-33a68df8c3ae"), + ), + ModifierCategory( + "Pasta Sauce", + 0, + 0, + True, + 0, + uuid.UUID("ef5b1a0b-5eb1-45ff-bd82-3209c8b888df"), + ), ] for item in mcs: db.add(item) @@ -53,7 +115,9 @@ def init_db(db: Session) -> None: ] for option in options: db.add(option) - db.add(Customer("", "Cash", "", "", uuid.UUID("2c716f4b-0736-429a-ad51-610d7c47cb5e"))) + db.add( + Customer("", "Cash", "", "", uuid.UUID("2c716f4b-0736-429a-ad51-610d7c47cb5e")) + ) db.add( DbSetting( uuid.UUID("fb738ba2-a3c9-40ed-891c-b930e6454974"), @@ -83,21 +147,35 @@ def init_db(db: Session) -> None: def add_permissions(db: Session): permissions = [ Permission("Accounts Audit", uuid.UUID("f30fd1fb-df09-46f5-8c5d-181fd46f38de")), - Permission("Beer Consumption", uuid.UUID("efbb8f31-9631-4491-92f4-17cc98e6a0c0")), + 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")), + Permission( + "Cashier Checkout", uuid.UUID("a86f8bcf-66f4-4c44-89e1-b714488b8331") + ), Permission("Change Rate", uuid.UUID("10c63aae-0e48-4e54-b3b8-dd8a80b88fbf")), Permission("Customers", uuid.UUID("e5fef133-cdbe-441f-bb54-1f0db0c5db79")), Permission("Discount", uuid.UUID("1f66f131-0105-4466-8f8e-21e0ccc2ac27")), - Permission("Discount Report", uuid.UUID("0d8ba1d5-6731-417c-ab0e-be03cfdc96db")), - Permission("Edit Printed Bill", uuid.UUID("4ff6cb0f-93cb-4760-8219-4de280eaa957")), - Permission("Edit Printed Product", uuid.UUID("959713be-d753-4e14-8ecd-e27f33587499"),), + Permission( + "Discount Report", uuid.UUID("0d8ba1d5-6731-417c-ab0e-be03cfdc96db") + ), + Permission( + "Edit Printed Bill", uuid.UUID("4ff6cb0f-93cb-4760-8219-4de280eaa957") + ), + Permission( + "Edit Printed Product", + uuid.UUID("959713be-d753-4e14-8ecd-e27f33587499"), + ), Permission("Guest Book", uuid.UUID("7669dfc9-cc75-4e48-b267-145c8832a83c")), Permission("Machines", uuid.UUID("f12b573f-edcb-490d-91c3-fa76f6502ffd")), Permission("Merge Kots", uuid.UUID("bed774e9-4857-43b0-a4af-40230c9eb5db")), Permission("Merge Tables", uuid.UUID("dfc493fb-ac14-4602-8596-f93f47b617de")), Permission("Modifiers", uuid.UUID("9dc82529-1e86-41b4-a152-eaea9f775fea")), - Permission("Move Kot to New Table", uuid.UUID("5ed5796a-ca99-437f-8f67-483b1ade81ed"),), + Permission( + "Move Kot to New Table", + uuid.UUID("5ed5796a-ca99-437f-8f67-483b1ade81ed"), + ), Permission("Move Table", uuid.UUID("cfdb69c9-d37a-40af-bef2-e29c04602543")), Permission("NC Product", uuid.UUID("54263587-773e-4cbb-b1e4-4e814141158e")), Permission("Open Bill", uuid.UUID("5811d233-a1ae-4d32-af52-cebbf46d274a")), @@ -116,7 +194,10 @@ def add_permissions(db: Session): Permission("Taxes", uuid.UUID("5c8fcdde-460d-4047-810f-e34fb899fadc")), Permission("Users", uuid.UUID("243447b8-b403-47e6-8b3d-8e76f4df44a9")), Permission("Void Bill", uuid.UUID("e3c76262-adc0-4936-8b4d-217c6292298b")), - Permission("Void or Reprinted Bill Report", uuid.UUID("30c8e743-c710-42d7-843a-0b75543b3516"),), + Permission( + "Void or Reprinted Bill Report", + uuid.UUID("30c8e743-c710-42d7-843a-0b75543b3516"), + ), Permission("Printers", uuid.UUID("5b66c6f6-003a-4ef8-ba28-49b8ff1ac33c")), Permission("Sections", uuid.UUID("c973f32c-a37b-496a-8dc5-60d2e4c39e97")), ] @@ -137,12 +218,19 @@ def add_permissions(db: Session): ] roles[0].permissions = permissions - roles[1].permissions = list(permissions[i] for i in [2, 3, 11, 18, 24, 25, 26, 30, 34]) + roles[1].permissions = list( + permissions[i] for i in [2, 3, 11, 18, 24, 25, 26, 30, 34] + ) roles[2].permissions = list(permissions[i] for i in [26]) roles[3].permissions = list(permissions[i] for i in [16]) roles[4].permissions = list(permissions[i] for i in [20, 24, 27]) - roles[5].permissions = list(permissions[i] for i in [0, 2, 7, 11, 18, 22, 24, 25, 26, 34]) - roles[6].permissions = list(permissions[i] for i in [2, 3, 4, 5, 6, 8, 11, 14, 18, 22, 25, 26, 28, 29, 33, 34]) + roles[5].permissions = list( + permissions[i] for i in [0, 2, 7, 11, 18, 22, 24, 25, 26, 34] + ) + roles[6].permissions = list( + permissions[i] + for i in [2, 3, 4, 5, 6, 8, 11, 14, 18, 22, 25, 26, 28, 29, 33, 34] + ) roles[7].permissions = list(permissions[i] for i in [9, 12, 13, 15, 16]) roles[8].permissions = list(permissions[i] for i in [21, 24]) diff --git a/barker/barker/db/session.py b/barker/barker/db/session.py index b296b8b..f5056a7 100644 --- a/barker/barker/db/session.py +++ b/barker/barker/db/session.py @@ -1,8 +1,9 @@ import logging + +from barker.core.config import settings from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -from barker.core.config import settings logging.basicConfig() logging.getLogger("sqlalchemy.engine").setLevel(settings.LOG_LEVEL) diff --git a/barker/barker/main.py b/barker/barker/main.py index ee5ae2e..487ed4a 100644 --- a/barker/barker/main.py +++ b/barker/barker/main.py @@ -1,22 +1,26 @@ import uvicorn + from fastapi import FastAPI from starlette.middleware.sessions import SessionMiddleware +from .core.config import settings +from .db.base_class import Base +from .db.session import engine from .routers import ( guest_book, + login, menu_category, modifier, modifier_category, printer, product, - login, sale_category, section, section_printer, table, tax, ) -from .routers.auth import client, user, role +from .routers.auth import client, role, user from .routers.reports import ( beer_consumption_report, bill_settlement_report, @@ -24,13 +28,19 @@ from .routers.reports import ( discount_report, product_sale_report, sale_report, - tax_report + tax_report, +) +from .routers.voucher import ( + change, + merge_move, + receive_payment, + save, + show, + split, + update, + void, ) -from .routers.voucher import show, save, update, receive_payment, void, merge_move, split, change -from .db.base_class import Base -from .core.config import settings -from .db.session import engine Base.metadata.create_all(bind=engine) @@ -45,26 +55,48 @@ app.include_router(role.router, prefix="/api/roles", tags=["users"]) app.include_router(user.router, prefix="/api/users", tags=["users"]) app.include_router(modifier.router, prefix="/api/modifiers", tags=["modifiers"]) -app.include_router(modifier_category.router, prefix="/api/modifier-categories", tags=["modifiers"]) +app.include_router( + modifier_category.router, prefix="/api/modifier-categories", tags=["modifiers"] +) app.include_router(printer.router, prefix="/api/printers", tags=["printers"]) -app.include_router(menu_category.router, prefix="/api/menu-categories", tags=["products"]) +app.include_router( + menu_category.router, prefix="/api/menu-categories", tags=["products"] +) app.include_router(product.router, prefix="/api/products", tags=["products"]) -app.include_router(sale_category.router, prefix="/api/sale-categories", tags=["products"]) +app.include_router( + sale_category.router, prefix="/api/sale-categories", tags=["products"] +) app.include_router(section.router, prefix="/api/sections", tags=["sections"]) -app.include_router(section_printer.router, prefix="/api/section-printers", tags=["section-printers"]) +app.include_router( + section_printer.router, prefix="/api/section-printers", tags=["section-printers"] +) app.include_router(tax.router, prefix="/api/taxes", tags=["taxes"]) app.include_router(table.router, prefix="/api/tables", tags=["tables"]) -app.include_router(beer_consumption_report.router, prefix="/api/beer-consumption-report", tags=["reports"]) -app.include_router(bill_settlement_report.router, prefix="/api/bill-settlement-report", tags=["reports"]) -app.include_router(cashier_report.router, prefix="/api/cashier-report", tags=["reports"]) -app.include_router(discount_report.router, prefix="/api/discount-report", tags=["reports"]) -app.include_router(product_sale_report.router, prefix="/api/product-sale-report", tags=["reports"]) +app.include_router( + beer_consumption_report.router, + prefix="/api/beer-consumption-report", + tags=["reports"], +) +app.include_router( + bill_settlement_report.router, + prefix="/api/bill-settlement-report", + tags=["reports"], +) +app.include_router( + cashier_report.router, prefix="/api/cashier-report", tags=["reports"] +) +app.include_router( + discount_report.router, prefix="/api/discount-report", tags=["reports"] +) +app.include_router( + product_sale_report.router, prefix="/api/product-sale-report", tags=["reports"] +) app.include_router(sale_report.router, prefix="/api/sale-report", tags=["reports"]) app.include_router(tax_report.router, prefix="/api/tax-report", tags=["reports"]) diff --git a/barker/barker/models/__init__.py b/barker/barker/models/__init__.py index aa0999d..92e4a01 100644 --- a/barker/barker/models/__init__.py +++ b/barker/barker/models/__init__.py @@ -1,6 +1,23 @@ from sqlalchemy import engine_from_config -from sqlalchemy.orm import sessionmaker -from sqlalchemy.orm import configure_mappers +from sqlalchemy.orm import configure_mappers, sessionmaker + +from .auth import Client, Permission, Role, User, role_permissions, user_roles +from .master import ( + Customer, + DbSetting, + Device, + FoodTable, + MenuCategory, + Modifier, + ModifierCategory, + Printer, + Product, + SaleCategory, + Section, + SectionPrinter, + SettleOption, + Tax, +) # import or define all models here to ensure they are attached to the # Base.metadata prior to any initialization routines @@ -15,30 +32,7 @@ from .voucher import ( Voucher, VoucherType, ) -from .master import ( - Customer, - DbSetting, - Device, - FoodTable, - MenuCategory, - Modifier, - ModifierCategory, - Printer, - Product, - Section, - SectionPrinter, - SaleCategory, - SettleOption, - Tax, -) -from .auth import ( - Client, - Permission, - Role, - role_permissions, - User, - user_roles, -) + # run configure_mappers after defining all of the models to ensure # all relationships can be setup diff --git a/barker/barker/models/auth.py b/barker/barker/models/auth.py index 924dcd6..3d27c72 100644 --- a/barker/barker/models/auth.py +++ b/barker/barker/models/auth.py @@ -1,14 +1,15 @@ import random import string import uuid -from hashlib import md5 + from datetime import datetime +from hashlib import md5 -from sqlalchemy.schema import ForeignKey, Table -from sqlalchemy import Column, Boolean, Unicode, Integer, DateTime, UniqueConstraint -from sqlalchemy.orm import synonym, relationship, Session - +from sqlalchemy import Boolean, Column, DateTime, Integer, Unicode, UniqueConstraint from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.orm import Session, relationship, synonym +from sqlalchemy.schema import ForeignKey, Table + from .meta import Base @@ -25,7 +26,9 @@ class Client(Base): otp = Column("otp", Integer) creation_date = Column("creation_date", DateTime(timezone=True), nullable=False) - def __init__(self, id_=None, name=None, enabled=False, otp=None, creation_date=None): + def __init__( + self, id_=None, name=None, enabled=False, otp=None, creation_date=None + ): self.id = id_ self.name = name self.enabled = enabled @@ -44,7 +47,9 @@ class Client(Base): def create(cls, db: Session): client_code = random.randint(1000, 9999) otp = random.randint(1000, 9999) - name = "".join(random.choice(string.ascii_uppercase + string.digits) for x in range(6)) + name = "".join( + random.choice(string.ascii_uppercase + string.digits) for x in range(6) + ) client = Client(client_code, name, False, otp) db.add(client) return client @@ -63,7 +68,12 @@ role_permissions = Table( "role_permissions", Base.metadata, Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4), - Column("permission_id", UUID(as_uuid=True), ForeignKey("permissions.id"), nullable=False), + Column( + "permission_id", + UUID(as_uuid=True), + ForeignKey("permissions.id"), + nullable=False, + ), Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id"), nullable=False), UniqueConstraint("permission_id", "role_id"), ) diff --git a/barker/barker/models/master.py b/barker/barker/models/master.py index 63fbd44..dfe5076 100644 --- a/barker/barker/models/master.py +++ b/barker/barker/models/master.py @@ -1,21 +1,23 @@ import uuid from sqlalchemy import ( - UniqueConstraint, - Column, - Unicode, - Numeric, + JSON, Boolean, + Column, ForeignKey, Integer, - case, - JSON, + Numeric, Table, + Unicode, + UniqueConstraint, + case, ) +from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import relationship + from .meta import Base -from sqlalchemy.dialects.postgresql import UUID + class Customer(Base): __tablename__ = "customers" @@ -48,7 +50,9 @@ class FoodTable(Base): id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column("name", Unicode(255), nullable=False, unique=True) seats = Column("seats", Integer, nullable=False) - section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False) + section_id = Column( + "section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False + ) is_active = Column("is_active", Boolean, nullable=False) sort_order = Column("sort_order", Integer, nullable=False) @@ -59,7 +63,13 @@ class FoodTable(Base): return self.name def __init__( - self, name=None, seats=None, section_id=None, is_active=None, sort_order=0, id_=None, + self, + name=None, + seats=None, + section_id=None, + is_active=None, + sort_order=0, + id_=None, ): self.name = name self.seats = seats @@ -95,7 +105,9 @@ class MenuCategory(Base): is_fixture = Column("is_fixture", Boolean, nullable=False) sort_order = Column("sort_order", Integer, nullable=False) - def __init__(self, name, discount_limit, is_active, sort_order, is_fixture=False, id_=None): + def __init__( + self, name, discount_limit, is_active, sort_order, is_fixture=False, id_=None + ): self.name = name self.discount_limit = discount_limit self.is_active = is_active @@ -109,7 +121,9 @@ class SaleCategory(Base): id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column("name", Unicode(255), nullable=False, unique=True) - tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False) + tax_id = Column( + "tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False + ) tax = relationship("Tax", foreign_keys=tax_id) def __init__(self, name, tax_id=False, id_=None): @@ -125,8 +139,18 @@ class Product(Base): id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column("name", Unicode(255), nullable=False) units = Column("units", Unicode(255), nullable=False) - menu_category_id = Column("menu_category_id", UUID(as_uuid=True), ForeignKey("menu_categories.id"), nullable=False) - sale_category_id = Column("sale_category_id", UUID(as_uuid=True), ForeignKey("sale_categories.id"), nullable=False) + menu_category_id = Column( + "menu_category_id", + UUID(as_uuid=True), + ForeignKey("menu_categories.id"), + nullable=False, + ) + sale_category_id = Column( + "sale_category_id", + UUID(as_uuid=True), + ForeignKey("sale_categories.id"), + nullable=False, + ) price = Column("price", Numeric, nullable=False) has_happy_hour = Column("has_happy_hour", Boolean, nullable=False) is_not_available = Column("is_not_available", Boolean, nullable=False) @@ -192,7 +216,12 @@ modifier_categories_products = Table( Base.metadata, Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4), Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False), - Column("modifier_categories_id", UUID(as_uuid=True), ForeignKey("modifier_categories.id"), nullable=False,), + Column( + "modifier_categories_id", + UUID(as_uuid=True), + ForeignKey("modifier_categories.id"), + nullable=False, + ), UniqueConstraint("product_id", "modifier_categories_id"), ) @@ -208,7 +237,13 @@ class ModifierCategory(Base): sort_order = Column("sort_order", Integer, nullable=False) def __init__( - self, name=None, minimum=None, maximum=None, is_active=True, sort_order=0, id_=None, + self, + name=None, + minimum=None, + maximum=None, + is_active=True, + sort_order=0, + id_=None, ): self.id = id_ self.name = name @@ -226,12 +261,23 @@ class Modifier(Base): show_in_bill = Column("show_in_bill", Boolean, nullable=False) price = Column("price", Numeric, nullable=False) is_active = Column("is_active", Boolean, nullable=False) - modifier_category_id = Column("modifier_category_id", UUID(as_uuid=True), ForeignKey("modifier_categories.id"), nullable=False,) + modifier_category_id = Column( + "modifier_category_id", + UUID(as_uuid=True), + ForeignKey("modifier_categories.id"), + nullable=False, + ) modifier_category = relationship("ModifierCategory", backref="modifiers") def __init__( - self, name=None, show_in_bill=None, price=None, modifier_category_id=None, is_active=True, id_=None, + self, + name=None, + show_in_bill=None, + price=None, + modifier_category_id=None, + is_active=True, + id_=None, ): self.id = id_ self.name = name @@ -270,7 +316,9 @@ class Device(Base): id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column("name", Unicode(255), unique=True, nullable=False) - section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False) + section_id = Column( + "section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False + ) section = relationship("Section", foreign_keys=section_id) @@ -300,16 +348,29 @@ class SectionPrinter(Base): __table_args__ = (UniqueConstraint("menu_category_id", "section_id"),) id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - menu_category_id = Column("menu_category_id", UUID(as_uuid=True), ForeignKey("menu_categories.id")) - section_id = Column("section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False) - printer_id = Column("printer_id", UUID(as_uuid=True), ForeignKey("printers.id"), nullable=False) + menu_category_id = Column( + "menu_category_id", UUID(as_uuid=True), ForeignKey("menu_categories.id") + ) + section_id = Column( + "section_id", UUID(as_uuid=True), ForeignKey("sections.id"), nullable=False + ) + printer_id = Column( + "printer_id", UUID(as_uuid=True), ForeignKey("printers.id"), nullable=False + ) copies = Column("copies", Integer, nullable=False) menu_category = relationship("MenuCategory", backref="section_printers") section = relationship("Section", backref="section_printers") printer = relationship("Printer", backref="section_printers") - def __init__(self, menu_category_id=None, section_id=None, printer_id=None, copies=None, id_=None): + def __init__( + self, + menu_category_id=None, + section_id=None, + printer_id=None, + copies=None, + id_=None, + ): self.id = id_ self.menu_category_id = menu_category_id self.section_id = section_id @@ -326,7 +387,14 @@ class SettleOption(Base): display_group = Column("display_group", Integer, nullable=False) is_print = Column("is_print", Boolean, nullable=False) - def __init__(self, name=None, show_in_choices=None, display_group=None, is_print=None, id_=None): + def __init__( + self, + name=None, + show_in_choices=None, + display_group=None, + is_print=None, + id_=None, + ): self.id = id_ self.name = name self.show_in_choices = show_in_choices diff --git a/barker/barker/models/meta.py b/barker/barker/models/meta.py index 98c6156..0c31347 100644 --- a/barker/barker/models/meta.py +++ b/barker/barker/models/meta.py @@ -1,6 +1,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.schema import MetaData + # Recommended naming convention used by Alembic, as various different database # providers will autogenerate vastly different names making migrations more # difficult. See: http://alembic.zzzcomputing.com/en/latest/naming.html diff --git a/barker/barker/models/tzinfoutc.py b/barker/barker/models/tzinfoutc.py index 7f6927c..b993e59 100644 --- a/barker/barker/models/tzinfoutc.py +++ b/barker/barker/models/tzinfoutc.py @@ -1,4 +1,5 @@ -from datetime import timedelta, tzinfo, datetime +from datetime import datetime, timedelta, tzinfo + ZERO = timedelta(0) HOUR = timedelta(hours=1) diff --git a/barker/barker/models/voucher.py b/barker/barker/models/voucher.py index 6e672e5..e7db9f2 100644 --- a/barker/barker/models/voucher.py +++ b/barker/barker/models/voucher.py @@ -1,22 +1,24 @@ -from datetime import datetime -from enum import Enum import uuid -from decimal import Decimal -from sqlalchemy.ext.hybrid import hybrid_property +from datetime import datetime +from decimal import Decimal +from enum import Enum + from sqlalchemy import ( - Column, - Integer, Boolean, - Unicode, + Column, DateTime, - Numeric, ForeignKey, + Integer, + Numeric, + Unicode, UniqueConstraint, case, ) -from sqlalchemy.orm import relationship, backref, synonym from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.orm import backref, relationship, synonym + from .meta import Base @@ -31,7 +33,9 @@ class VoucherType(Enum): class GuestBook(Base): __tablename__ = "guest_book" id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False) + customer_id = Column( + "customer_id", UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False + ) pax = Column("pax", Numeric, nullable=False) date = Column("creation_date", DateTime(timezone=True), nullable=False) @@ -48,13 +52,26 @@ class GuestBook(Base): self.customer = customer - class Overview(Base): __tablename__ = "overview" id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - voucher_id = Column("voucher_id", UUID(as_uuid=True), ForeignKey("vouchers.id"), nullable=False, unique=True) - food_table_id = Column("food_table_id", UUID(as_uuid=True), ForeignKey("food_tables.id"), nullable=False, unique=True,) - guest_book_id = Column("guest_book_id", UUID(as_uuid=True), ForeignKey("guest_book.id"), unique=True) + voucher_id = Column( + "voucher_id", + UUID(as_uuid=True), + ForeignKey("vouchers.id"), + nullable=False, + unique=True, + ) + food_table_id = Column( + "food_table_id", + UUID(as_uuid=True), + ForeignKey("food_tables.id"), + nullable=False, + unique=True, + ) + guest_book_id = Column( + "guest_book_id", UUID(as_uuid=True), ForeignKey("guest_book.id"), unique=True + ) status = Column("status", Unicode(255), nullable=False) voucher = relationship("Voucher", backref=backref("status", uselist=False)) @@ -74,8 +91,12 @@ class InventoryModifier(Base): __table_args__ = (UniqueConstraint("inventory_id", "modifier_id"),) id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - inventory_id = Column("inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False) - modifier_id = Column("modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False) + inventory_id = Column( + "inventory_id", UUID(as_uuid=True), ForeignKey("inventories.id"), nullable=False + ) + modifier_id = Column( + "modifier_id", UUID(as_uuid=True), ForeignKey("modifiers.id"), nullable=False + ) price = Column("price", Numeric, nullable=False) inventory = relationship("Inventory", backref="modifiers") @@ -98,22 +119,42 @@ class Voucher(Base): kot_id = Column("kot_id", Numeric, nullable=False, unique=True) creation_date = Column("creation_date", DateTime(timezone=True), nullable=False) last_edit_date = Column("last_edit_date", DateTime(timezone=True), nullable=False) - food_table_id = Column("food_table_id", UUID(as_uuid=True), ForeignKey("food_tables.id"), nullable=False) + food_table_id = Column( + "food_table_id", + UUID(as_uuid=True), + ForeignKey("food_tables.id"), + nullable=False, + ) customer_id = Column("customer_id", UUID(as_uuid=True), ForeignKey("customers.id")) narration = Column("narration", Unicode(1000), nullable=False) reason = Column("reason", Unicode(255)) _voucher_type = Column("voucher_type", Integer, nullable=False) - user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + user_id = Column( + "user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False + ) user = relationship("User", backref="vouchers") food_table = relationship("FoodTable", backref="vouchers") customer = relationship("Customer", backref="vouchers") - kots = relationship("Kot", backref="voucher", cascade="delete, delete-orphan", cascade_backrefs=False,) - settlements = relationship( - "Settlement", backref="voucher", cascade="delete, delete-orphan", cascade_backrefs=False, + kots = relationship( + "Kot", + backref="voucher", + cascade="delete, delete-orphan", + cascade_backrefs=False, + ) + settlements = relationship( + "Settlement", + backref="voucher", + cascade="delete, delete-orphan", + cascade_backrefs=False, + ) + reprints = relationship( + "Reprint", + backref="voucher", + cascade="delete, delete-orphan", + cascade_backrefs=False, ) - reprints = relationship("Reprint", backref="voucher", cascade="delete, delete-orphan", cascade_backrefs=False,) def _get_voucher_type(self): return VoucherType(self._voucher_type) @@ -125,7 +166,15 @@ class Voucher(Base): voucher_type = synonym("_voucher_type", descriptor=voucher_type) def __init__( - self, date, pax, bill_id, kot_id, food_table_id, customer_id, voucher_type, user_id, + self, + date, + pax, + bill_id, + kot_id, + food_table_id, + customer_id, + voucher_type, + user_id, ): self.date = date self.pax = pax @@ -163,17 +212,36 @@ class Kot(Base): __tablename__ = "kots" id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - voucher_id = Column("voucher_id", UUID(as_uuid=True), ForeignKey("vouchers.id"), nullable=False, index=True) + voucher_id = Column( + "voucher_id", + UUID(as_uuid=True), + ForeignKey("vouchers.id"), + nullable=False, + index=True, + ) code = Column("code", Numeric, nullable=False, unique=True) - food_table_id = Column("food_table_id", UUID(as_uuid=True), ForeignKey("food_tables.id"), nullable=False) + food_table_id = Column( + "food_table_id", + UUID(as_uuid=True), + ForeignKey("food_tables.id"), + nullable=False, + ) date = Column("date", DateTime, nullable=False, index=True) - user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + user_id = Column( + "user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False + ) user = relationship("User", backref="kots") food_table = relationship("FoodTable", backref="kots") def __init__( - self, voucher_id=None, code=None, food_table_id=None, date=None, user_id=None, id_=None, + self, + voucher_id=None, + code=None, + food_table_id=None, + date=None, + user_id=None, + id_=None, ): self.id = id_ self.voucher_id = voucher_id @@ -188,7 +256,13 @@ class Settlement(Base): __table_args__ = (UniqueConstraint("voucher_id", "settled"),) id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - voucher_id = Column("voucher_id", UUID(as_uuid=True), ForeignKey("vouchers.id"), nullable=False, index=True) + voucher_id = Column( + "voucher_id", + UUID(as_uuid=True), + ForeignKey("vouchers.id"), + nullable=False, + index=True, + ) settled = Column("settled", ForeignKey("settle_options.id"), nullable=False) amount = Column("amount", Numeric, nullable=False) @@ -206,8 +280,16 @@ class Reprint(Base): id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) date = Column("date", DateTime, nullable=False, index=True) - voucher_id = Column("voucher_id", UUID(as_uuid=True), ForeignKey("vouchers.id"), nullable=False, index=True) - user_id = Column("user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) + voucher_id = Column( + "voucher_id", + UUID(as_uuid=True), + ForeignKey("vouchers.id"), + nullable=False, + index=True, + ) + user_id = Column( + "user_id", UUID(as_uuid=True), ForeignKey("users.id"), nullable=False + ) user = relationship("User", backref="reprints") @@ -220,16 +302,24 @@ class Reprint(Base): class Inventory(Base): __tablename__ = "inventories" - __table_args__ = (UniqueConstraint("kot_id", "product_id", "is_happy_hour", "price"),) + __table_args__ = ( + UniqueConstraint("kot_id", "product_id", "is_happy_hour", "price"), + ) id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - kot_id = Column("kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True) - product_id = Column("product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False) + kot_id = Column( + "kot_id", UUID(as_uuid=True), ForeignKey("kots.id"), nullable=False, index=True + ) + product_id = Column( + "product_id", UUID(as_uuid=True), ForeignKey("products.id"), nullable=False + ) quantity = Column("quantity", Numeric) price = Column("price", Numeric) is_happy_hour = Column("is_happy_hour", Boolean, nullable=False) tax_rate = Column("tax_rate", Numeric) - tax_id = Column("tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False) + tax_id = Column( + "tax_id", UUID(as_uuid=True), ForeignKey("taxes.id"), nullable=False + ) discount = Column("discount", Numeric) sort_order = Column("sort_order", Numeric, nullable=False) @@ -238,7 +328,16 @@ class Inventory(Base): product = relationship("Product", backref="inventories") def __init__( - self, kot_id, product_id, quantity, price, discount, is_hh, tax_id, tax_rate, sort_order, + self, + kot_id, + product_id, + quantity, + price, + discount, + is_hh, + tax_id, + tax_rate, + sort_order, ): self.kot_id = kot_id self.product_id = product_id diff --git a/barker/barker/printing/__init__.py b/barker/barker/printing/__init__.py index 5e30ffb..1f57910 100644 --- a/barker/barker/printing/__init__.py +++ b/barker/barker/printing/__init__.py @@ -1,3 +1,2 @@ from barker.printing.bill import print_bill # noqa: F401 from barker.printing.kot import print_kot # noqa: F401 - diff --git a/barker/barker/printing/bill.py b/barker/barker/printing/bill.py index 37c2767..cf1ff3c 100644 --- a/barker/barker/printing/bill.py +++ b/barker/barker/printing/bill.py @@ -1,11 +1,18 @@ import uuid + from decimal import Decimal from typing import List, Tuple -from sqlalchemy.orm import Session - -from barker.models import SectionPrinter, Printer, Voucher, Inventory, DbSetting, VoucherType +from barker.models import ( + DbSetting, + Inventory, + Printer, + SectionPrinter, + Voucher, + VoucherType, +) from barker.worker import sent_to_printer +from sqlalchemy.orm import Session def print_bill(voucher_id: uuid.UUID, db: Session): @@ -22,7 +29,11 @@ def print_bill(voucher_id: uuid.UUID, db: Session): items_dict = {} tax = {} for i in [i for k in voucher.kots for i in k.inventories]: - key = (i.product_id, i.is_happy_hour, tuple(m.modifier_id for m in i.modifiers if m.modifier.show_in_bill)) + key = ( + i.product_id, + i.is_happy_hour, + tuple(m.modifier_id for m in i.modifiers if m.modifier.show_in_bill), + ) if key in items_dict: items_dict[key].quantity += i.quantity else: @@ -35,9 +46,17 @@ def print_bill(voucher_id: uuid.UUID, db: Session): sent_to_printer.delay(data, printer.address, printer.cut_code) -def design_bill(voucher: Voucher, items: List[Tuple[Inventory, Decimal]], tax: List[Tuple[str, Decimal]], db: Session): +def design_bill( + voucher: Voucher, + items: List[Tuple[Inventory, Decimal]], + tax: List[Tuple[str, Decimal]], + db: Session, +): # Header - s = "\n\r" + db.query(DbSetting).filter(DbSetting.name == "Header").first().data['Text'] + s = ( + "\n\r" + + db.query(DbSetting).filter(DbSetting.name == "Header").first().data["Text"] + ) if voucher.voucher_type == VoucherType.REGULAR_BILL: s += "\n\r" + "Retail Invoice".center(42) s += "\n\r" @@ -55,8 +74,15 @@ def design_bill(voucher: Voucher, items: List[Tuple[Inventory, Decimal]], tax: L s += "\n\r" + "Qty. Particulars Price Amount" s += "\n\r" + "-" * 42 for item in [i for i in items if i.quantity != 0]: - name = "H H " + item.product.full_name if item.is_happy_hour else item.product.full_name - s += "\n\r" + f"{item.quantity: >5.2f} {name:<22.22} {item.price: >6.2f} {item.price * item.quantity: >6.2f}" + name = ( + "H H " + item.product.full_name + if item.is_happy_hour + else item.product.full_name + ) + s += ( + "\n\r" + + f"{item.quantity: >5.2f} {name:<22.22} {item.price: >6.2f} {item.price * item.quantity: >6.2f}" + ) for m in [m for m in item.modifiers if m.modifier.show_in_bill]: s += f"\n\r -- {m.modifier.name: <38.38}" s += "\n\r" + "------------------------------------------" @@ -93,5 +119,8 @@ def design_bill(voucher: Voucher, items: List[Tuple[Inventory, Decimal]], tax: L s += "\n\r" + "-" * 42 s += "\n\r" + "Cashier : " + voucher.user.name - s += "\n\r" + db.query(DbSetting).filter(DbSetting.name == "Footer").first().data['Text'] + s += ( + "\n\r" + + db.query(DbSetting).filter(DbSetting.name == "Footer").first().data["Text"] + ) return s diff --git a/barker/barker/printing/kot.py b/barker/barker/printing/kot.py index 754f6ef..e7791ec 100644 --- a/barker/barker/printing/kot.py +++ b/barker/barker/printing/kot.py @@ -1,23 +1,32 @@ import uuid + from typing import List +from barker.models import Inventory, Kot, Printer, SectionPrinter, Voucher +from barker.worker import sent_to_printer from sqlalchemy import or_ from sqlalchemy.orm import Session -from barker.models import SectionPrinter, Printer, Voucher, Kot, Inventory -from barker.worker import sent_to_printer - -def design_kot(voucher: Voucher, kot: Kot, items: List[Inventory], copy_number: int) -> str: +def design_kot( + voucher: Voucher, kot: Kot, items: List[Inventory], copy_number: int +) -> str: s = ( f"KOT / BOT".center(42) - + "\n\r" + f"Copy No. {copy_number}:".center(42) - + "\n\r" + "".ljust(42, "-") - + "\n\r" + f"KOT ID : K-{voucher.kot_id:>5}/S-{kot.code:>5} {kot.date:%d-%b-%Y %H:%M}" - + "\n\r" + f"Table No.: {voucher.food_table.name}" - + "\n\r" + "".ljust(42, "-") - + "\n\r" + " Qty. x Name " - + "\n\r" + "".ljust(42, "-") + + "\n\r" + + f"Copy No. {copy_number}:".center(42) + + "\n\r" + + "".ljust(42, "-") + + "\n\r" + + f"KOT ID : K-{voucher.kot_id:>5}/S-{kot.code:>5} {kot.date:%d-%b-%Y %H:%M}" + + "\n\r" + + f"Table No.: {voucher.food_table.name}" + + "\n\r" + + "".ljust(42, "-") + + "\n\r" + + " Qty. x Name " + + "\n\r" + + "".ljust(42, "-") ) for item in items: name = ( @@ -46,7 +55,8 @@ def print_kot(voucher_id: uuid.UUID, db: Session): SectionPrinter.menu_category_id == item.product.menu_category_id, SectionPrinter.menu_category_id == None, ) - ).order_by(SectionPrinter.menu_category_id) + ) + .order_by(SectionPrinter.menu_category_id) .first() ) key = (printer.id, copies) diff --git a/barker/barker/routers/auth/client.py b/barker/barker/routers/auth/client.py index 4e47ef8..cc10566 100644 --- a/barker/barker/routers/auth/client.py +++ b/barker/barker/routers/auth/client.py @@ -1,15 +1,17 @@ import uuid -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.auth as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import desc from sqlalchemy.exc import SQLAlchemyError 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 ...models.auth import Client -import barker.schemas.auth as schemas +from ...schemas.auth import UserToken + router = APIRouter() @@ -41,7 +43,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -50,7 +53,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["clients"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["clients"]), ): try: item: Client = db.query(Client).filter(Client.id == id_).first() @@ -61,7 +66,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -70,7 +76,8 @@ def delete( @router.get("/list") async def show_list( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["clients"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["clients"]), ): list_ = db.query(Client).order_by(Client.name).all() clients = [] @@ -96,7 +103,9 @@ async def show_list( @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["clients"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["clients"]), ): item: Client = db.query(Client).filter(Client.id == id_).first() return { diff --git a/barker/barker/routers/auth/role.py b/barker/barker/routers/auth/role.py index 2ee3375..d0ead04 100644 --- a/barker/barker/routers/auth/role.py +++ b/barker/barker/routers/auth/role.py @@ -1,15 +1,18 @@ import uuid + from typing import List, Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.auth as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError 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 ...models.auth import Role, Permission -import barker.schemas.auth as schemas +from ...models.auth import Permission, Role +from ...schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Role) def save( - data: schemas.RoleIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + data: schemas.RoleIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item = Role(data.name) @@ -36,7 +41,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -59,7 +65,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -71,24 +78,30 @@ def add_permissions(role: Role, permissions: List[schemas.PermissionItem], db): gp = [p for p in role.permissions if p.id == permission.id_] gp = None if len(gp) == 0 else gp[0] if permission.enabled and gp is None: - role.permissions.append(db.query(Permission).filter(Permission.id == permission.id_).one()) + role.permissions.append( + db.query(Permission).filter(Permission.id == permission.id_).one() + ) elif not permission.enabled and gp: role.permissions.remove(gp) @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item: Role = db.query(Role).filter(Role.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Role not found", + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Role not found", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="Role deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="Role deletion not implemented", ) except Exception: db.rollback() @@ -97,20 +110,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return role_info(None, db) @router.get("/list", response_model=List[schemas.RoleList]) async def show_list( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return [ { "id": item.id, "name": item.name, - "permissions": [p.name for p in sorted(item.permissions, key=lambda p: p.name)], + "permissions": [ + p.name for p in sorted(item.permissions, key=lambda p: p.name) + ], } for item in db.query(Role).order_by(Role.name).all() ] @@ -118,7 +135,9 @@ async def show_list( @router.get("/{id_}", response_model=schemas.Role) def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): item: Role = db.query(Role).filter(Role.id == id_).first() return role_info(item, db) @@ -138,7 +157,11 @@ def role_info(item: Optional[Role], db): "id": item.id, "name": item.name, "permissions": [ - {"id": p.id, "name": p.name, "enabled": True if p in item.permissions else False,} + { + "id": p.id, + "name": p.name, + "enabled": True if p in item.permissions else False, + } for p in db.query(Permission).order_by(Permission.name).all() ], } diff --git a/barker/barker/routers/auth/user.py b/barker/barker/routers/auth/user.py index 79469f7..cb25148 100644 --- a/barker/barker/routers/auth/user.py +++ b/barker/barker/routers/auth/user.py @@ -1,15 +1,18 @@ import uuid + from typing import List, Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.auth as schemas + +from barker.models.auth import Role, User +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError 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 barker.models.auth import User, Role -import barker.schemas.auth as schemas +from ...schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.User) def save( - data: schemas.UserIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + data: schemas.UserIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item = User(name=data.name, password=data.password, locked_out=data.locked_out) @@ -36,7 +41,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -45,7 +51,8 @@ def save( @router.get("/me", response_model=schemas.User) def show_me( - db: Session = Depends(get_db), user: UserToken = Depends(get_user), + db: Session = Depends(get_db), + user: UserToken = Depends(get_user), ): item = db.query(User).filter(User.id == user.id_).first() return user_info(item, db, user) @@ -53,7 +60,9 @@ def show_me( @router.put("/me", response_model=schemas.User) def update_me( - data: schemas.UserIn, db: Session = Depends(get_db), user: UserToken = Depends(get_user), + data: schemas.UserIn, + db: Session = Depends(get_db), + user: UserToken = Depends(get_user), ): try: item: User = db.query(User).filter(User.id == user.id_).first() @@ -68,7 +77,8 @@ def update_me( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -94,7 +104,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -113,17 +124,21 @@ def add_roles(user: User, roles: List[schemas.RoleItem], db: Session): @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item: User = db.query(User).filter(User.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="User not found", + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="User not found", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="User deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="User deletion not implemented", ) except Exception: db.rollback() @@ -132,14 +147,16 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return user_info(None, db, user) @router.get("/list", response_model=List[schemas.UserList]) async def show_list( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return [ { @@ -153,13 +170,20 @@ async def show_list( @router.get("/active") -async def show_active(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [{"name": item.name} for item in db.query(User).filter(User.locked_out == False).order_by(User.name)] +async def show_active( + db: Session = Depends(get_db), user: UserToken = Depends(get_user) +): + return [ + {"name": item.name} + for item in db.query(User).filter(User.locked_out == False).order_by(User.name) + ] @router.get("/{id_}", response_model=schemas.User) def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): item = db.query(User).filter(User.id == id_).first() return user_info(item, db, user) @@ -170,7 +194,10 @@ def user_info(item: Optional[User], db: Session, user: UserToken): return { "name": "", "lockedOut": False, - "roles": [{"id": r.id, "name": r.name, "enabled": False} for r in db.query(Role).order_by(Role.name).all()], + "roles": [ + {"id": r.id, "name": r.name, "enabled": False} + for r in db.query(Role).order_by(Role.name).all() + ], } else: return { @@ -179,7 +206,11 @@ def user_info(item: Optional[User], db: Session, user: UserToken): "password": "", "lockedOut": item.locked_out, "roles": [ - {"id": r.id, "name": r.name, "enabled": True if r in item.roles else False} + { + "id": r.id, + "name": r.name, + "enabled": True if r in item.roles else False, + } for r in db.query(Role).order_by(Role.name).all() ] if "users" in user.permissions diff --git a/barker/barker/routers/customer.py b/barker/barker/routers/customer.py index 6dd5e79..52ca8ae 100644 --- a/barker/barker/routers/customer.py +++ b/barker/barker/routers/customer.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Customer +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,17 +28,22 @@ def get_db(): @router.post("", response_model=schemas.Customer) def save( - data: schemas.CustomerIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]), + data: schemas.CustomerIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["customers"]), ): try: - item = Customer(company=data.company, name=data.name, phone=data.phone, address=data.address) + item = Customer( + company=data.company, name=data.name, phone=data.phone, address=data.address + ) db.add(item) db.commit() return customer_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -60,7 +68,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -69,13 +78,16 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["customers"]), ): try: item: Customer = db.query(Customer).filter(Customer.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Sale Category not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Sale Category not found", ) db.delete(item) db.commit() @@ -86,19 +98,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["customers"]), ): return customer_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [customer_info(item) for item in db.query(Customer).order_by(Customer.name).all()] + return [ + customer_info(item) for item in db.query(Customer).order_by(Customer.name).all() + ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["customers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["customers"]), ): item: Customer = db.query(Customer).filter(Customer.id == id_).first() return customer_info(item) diff --git a/barker/barker/routers/device.py b/barker/barker/routers/device.py index c83251f..f5f14b1 100644 --- a/barker/barker/routers/device.py +++ b/barker/barker/routers/device.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Device +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Device) def save( - data: schemas.DeviceIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["devices"]), + data: schemas.DeviceIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["devices"]), ): try: item = Device(name=data.name, section_id=data.section.id_) @@ -35,7 +40,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -58,7 +64,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -67,7 +74,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["devices"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["devices"]), ): try: item: Device = db.query(Device).filter(Device.id == id_).first() @@ -77,7 +86,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -86,7 +96,8 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["devices"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["devices"]), ): return device_info(None) @@ -98,7 +109,9 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user) @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["devices"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["devices"]), ): item: Device = db.query(Device).filter(Device.id == id_).first() return device_info(item) diff --git a/barker/barker/routers/guest_book.py b/barker/barker/routers/guest_book.py index 58704c1..5ced1b3 100644 --- a/barker/barker/routers/guest_book.py +++ b/barker/barker/routers/guest_book.py @@ -1,17 +1,21 @@ import uuid + +from datetime import date, datetime, timedelta from typing import Optional -from datetime import date, timedelta, datetime -from fastapi import APIRouter, HTTPException, status, Depends, Security + +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session from ..core.config import settings -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Customer from ..models.voucher import GuestBook +from ..schemas.auth import UserToken + router = APIRouter() @@ -32,9 +36,16 @@ def save( user: UserToken = Security(get_user, scopes=["guest-book"]), ): try: - customer: Customer = db.query(Customer).filter(Customer.phone == data.phone).first() + customer: Customer = ( + db.query(Customer).filter(Customer.phone == data.phone).first() + ) if customer is None: - customer = Customer(company=data.company, name=data.name, phone=data.phone, address=data.address,) + customer = Customer( + company=data.company, + name=data.name, + phone=data.phone, + address=data.address, + ) db.add(customer) else: customer.name = data.name or customer.name @@ -47,7 +58,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -73,7 +85,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -82,7 +95,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["guest-book"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["guest-book"]), ): try: item: GuestBook = db.query(GuestBook).filter(GuestBook.id == id_).first() @@ -92,7 +107,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -101,13 +117,18 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["guest-book"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["guest-book"]), ): return guest_book_info(None) @router.get("/list") -def show_list(q: Optional[str] = None, db: Session = Depends(get_db), user: UserToken = Depends(get_user)): +def show_list( + q: Optional[str] = None, + db: Session = Depends(get_db), + user: UserToken = Depends(get_user), +): if q is None or q == "": q = date.today() else: @@ -115,11 +136,21 @@ def show_list(q: Optional[str] = None, db: Session = Depends(get_db), user: User list_ = ( db.query(GuestBook) .filter( - GuestBook.date >= q + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES) + GuestBook.date + >= q + + timedelta( + minutes=settings.NEW_DAY_OFFSET_MINUTES + - settings.TIMEZONE_OFFSET_MINUTES + ) ) .filter( GuestBook.date - < q + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES, days=1) + < q + + timedelta( + minutes=settings.NEW_DAY_OFFSET_MINUTES + - settings.TIMEZONE_OFFSET_MINUTES, + days=1, + ) ) .order_by(GuestBook.date) .all() @@ -145,7 +176,9 @@ def show_list(q: Optional[str] = None, db: Session = Depends(get_db), user: User @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["guest-book"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["guest-book"]), ): item: GuestBook = db.query(GuestBook).filter(GuestBook.id == id_).first() return guest_book_info(item) diff --git a/barker/barker/routers/login.py b/barker/barker/routers/login.py index 20e2af9..30c5392 100644 --- a/barker/barker/routers/login.py +++ b/barker/barker/routers/login.py @@ -1,29 +1,31 @@ from datetime import timedelta +from barker.core.config import settings from fastapi import ( APIRouter, - Depends, - HTTPException, - status, - Security, Cookie, + Depends, Form, + HTTPException, Response, + Security, + status, ) -from fastapi.security import OAuth2PasswordRequestForm from fastapi.responses import JSONResponse +from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.orm import Session + from ..core.security import ( Token, authenticate_user, + client_allowed, create_access_token, get_current_active_user, - client_allowed, ) -from barker.core.config import settings from ..db.session import SessionLocal from ..schemas.auth import UserToken + router = APIRouter() @@ -54,21 +56,33 @@ async def login_for_access_token( allowed, c_id = client_allowed(user, client_id, otp, db) db.commit() if c_id and c_id != client_id: - response.set_cookie(key="client_id", value=str(c_id), max_age=10 * 365 * 24 * 60 * 60) + response.set_cookie( + key="client_id", value=str(c_id), max_age=10 * 365 * 24 * 60 * 60 + ) if not allowed: not_allowed_response = JSONResponse( status_code=status.HTTP_401_UNAUTHORIZED, headers={"WWW-Authenticate": "Bearer"}, content={"detail": "Client is not registered"}, ) - not_allowed_response.set_cookie(key="client_id", value=str(c_id), max_age=10 * 365 * 24 * 60 * 60) + not_allowed_response.set_cookie( + key="client_id", value=str(c_id), max_age=10 * 365 * 24 * 60 * 60 + ) return not_allowed_response access_token_expires = timedelta(minutes=settings.JWT_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( data={ "sub": user.name, "scopes": ["authenticated"] - + list(set([p.name.replace(" ", "-").lower() for r in user.roles for p in r.permissions])), + + list( + set( + [ + p.name.replace(" ", "-").lower() + for r in user.roles + for p in r.permissions + ] + ) + ), "userId": str(user.id), "lockedOut": user.locked_out, }, @@ -81,7 +95,12 @@ async def login_for_access_token( async def refresh_token(user: UserToken = Security(get_current_active_user)): access_token_expires = timedelta(minutes=settings.JWT_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( - data={"sub": user.name, "scopes": user.permissions, "userId": str(user.id_), "lockedOut": user.locked_out,}, + data={ + "sub": user.name, + "scopes": user.permissions, + "userId": str(user.id_), + "lockedOut": user.locked_out, + }, expires_delta=access_token_expires, ) return {"access_token": access_token, "token_type": "bearer"} diff --git a/barker/barker/routers/menu_category.py b/barker/barker/routers/menu_category.py index 3a9ca9c..f071bcf 100644 --- a/barker/barker/routers/menu_category.py +++ b/barker/barker/routers/menu_category.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal -from ..models.master import Product, MenuCategory +from ..models.master import MenuCategory, Product +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,17 +28,25 @@ def get_db(): @router.post("", response_model=schemas.MenuCategory) def save( - data: schemas.MenuCategoryIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + data: schemas.MenuCategoryIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: - item = MenuCategory(name=data.name, discount_limit=data.discount_limit, is_active=data.is_active, sort_order=0) + item = MenuCategory( + name=data.name, + discount_limit=data.discount_limit, + is_active=data.is_active, + sort_order=0, + ) db.add(item) db.commit() return menu_category_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -50,10 +61,13 @@ def update( user: UserToken = Security(get_user, scopes=["products"]), ): try: - item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first() + item: MenuCategory = ( + db.query(MenuCategory).filter(MenuCategory.id == id_).first() + ) if item.is_fixture: raise HTTPException( - status_code=status.HTTP_423_LOCKED, detail=f"{item.name} is a fixture and cannot be edited or deleted.", + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and cannot be edited or deleted.", ) item.name = data.name item.discount_limit = data.discount_limit @@ -63,7 +77,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -72,21 +87,28 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: - item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first() + item: MenuCategory = ( + db.query(MenuCategory).filter(MenuCategory.id == id_).first() + ) if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Menu Category not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Menu Category not found", ) elif item.is_fixture: raise HTTPException( - status_code=status.HTTP_423_LOCKED, detail=f"{item.name} is a fixture and cannot be edited or deleted.", + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and cannot be edited or deleted.", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="Menu Category deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="Menu Category deletion not implemented", ) except Exception: db.rollback() @@ -95,14 +117,21 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): return menu_category_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [menu_category_info(item) for item in db.query(MenuCategory).order_by(MenuCategory.sort_order).order_by(MenuCategory.name).all()] + return [ + menu_category_info(item) + for item in db.query(MenuCategory) + .order_by(MenuCategory.sort_order) + .order_by(MenuCategory.name) + .all() + ] @router.get("/sale-list") @@ -151,7 +180,9 @@ async def sale_list( @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): item: MenuCategory = db.query(MenuCategory).filter(MenuCategory.id == id_).first() return menu_category_info(item) diff --git a/barker/barker/routers/modifier.py b/barker/barker/routers/modifier.py index 300c63e..dfea779 100644 --- a/barker/barker/routers/modifier.py +++ b/barker/barker/routers/modifier.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Modifier +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Modifier) def save( - data: schemas.ModifierIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + data: schemas.ModifierIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: item = Modifier( @@ -41,7 +46,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -67,7 +73,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -76,7 +83,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() @@ -86,7 +95,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -95,19 +105,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): return modifier_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [modifier_info(item) for item in db.query(Modifier).order_by(Modifier.name).all()] + return [ + modifier_info(item) for item in db.query(Modifier).order_by(Modifier.name).all() + ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() return modifier_info(item) @@ -128,5 +143,8 @@ def modifier_info(item: Optional[Modifier]): "showInBill": item.show_in_bill, "price": item.price, "isActive": item.is_active, - "modifierCategory": {"id": item.modifier_category.id, "name": item.modifier_category.name,}, + "modifierCategory": { + "id": item.modifier_category.id, + "name": item.modifier_category.name, + }, } diff --git a/barker/barker/routers/modifier_category.py b/barker/barker/routers/modifier_category.py index fd9b480..79b4cce 100644 --- a/barker/barker/routers/modifier_category.py +++ b/barker/barker/routers/modifier_category.py @@ -1,16 +1,19 @@ import uuid + from functools import reduce from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal -from ..models.master import ModifierCategory, MenuCategory, Product +from ..models.master import MenuCategory, ModifierCategory, Product +from ..schemas.auth import UserToken + router = APIRouter() @@ -31,7 +34,12 @@ def save( user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: - item = ModifierCategory(name=data.name, minimum=data.minimum, maximum=data.maximum, is_active=data.is_active) + item = ModifierCategory( + name=data.name, + minimum=data.minimum, + maximum=data.maximum, + is_active=data.is_active, + ) db.add(item) add_products(item, data.menu_categories, db) db.commit() @@ -39,7 +47,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -54,7 +63,9 @@ def update( user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: - item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + item: ModifierCategory = ( + db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + ) item.name = data.name item.minimum = data.minimum item.maximum = data.maximum @@ -65,7 +76,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -74,17 +86,22 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: - item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + item: ModifierCategory = ( + db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + ) db.delete(item) db.commit() return modifier_category_info(None, db=db) except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -93,14 +110,20 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): return modifier_category_info(None, db=db) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - list_ = db.query(ModifierCategory).order_by(ModifierCategory.sort_order).order_by(ModifierCategory.name).all() + list_ = ( + db.query(ModifierCategory) + .order_by(ModifierCategory.sort_order) + .order_by(ModifierCategory.name) + .all() + ) menu_categories = ( db.query(MenuCategory) .join(MenuCategory.products) @@ -120,20 +143,30 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user) { "id": mc.id, "name": mc.name, - "enabled": reduce(lambda x, y: x and (y in item.products), mc.products, True), - "products": [{"id": p.id, "name": p.name} for p in mc.products if p in item.products], + "enabled": reduce( + lambda x, y: x and (y in item.products), mc.products, True + ), + "products": [ + {"id": p.id, "name": p.name} + for p in mc.products + if p in item.products + ], } for mc in menu_categories ], } - modifier_category["menuCategories"] = [i for i in modifier_category["menuCategories"] if len(i["products"]) > 0] + modifier_category["menuCategories"] = [ + i for i in modifier_category["menuCategories"] if len(i["products"]) > 0 + ] modifier_categories.append(modifier_category) return modifier_categories @router.get("/for-product/{id_}") def for_product( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user), ): product: Product = db.query(Product).filter(Product.id == id_).first() @@ -145,7 +178,9 @@ def for_product( "maximum": item.maximum, "isActive": item.is_active, "modifiers": [ - {"id": m.id, "name": m.name, "price": m.price} for m in item.modifiers if m.is_active == True + {"id": m.id, "name": m.name, "price": m.price} + for m in item.modifiers + if m.is_active == True ], } for item in product.modifier_categories @@ -155,9 +190,13 @@ def for_product( @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["modifiers"]), ): - item: ModifierCategory = db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + item: ModifierCategory = ( + db.query(ModifierCategory).filter(ModifierCategory.id == id_).first() + ) return modifier_category_info(item, db=db) @@ -180,7 +219,10 @@ def modifier_category_info(item: Optional[ModifierCategory], db: Session): "id": mc.id, "name": mc.name, "enabled": False, - "products": [{"id": p.id, "name": p.name, "enabled": False} for p in mc.products], + "products": [ + {"id": p.id, "name": p.name, "enabled": False} + for p in mc.products + ], } for mc in menu_categories ], @@ -198,7 +240,12 @@ def modifier_category_info(item: Optional[ModifierCategory], db: Session): "name": mc.name, "enabled": False, "products": [ - {"id": p.id, "name": p.name, "enabled": True if p in item.products else False} for p in mc.products + { + "id": p.id, + "name": p.name, + "enabled": True if p in item.products else False, + } + for p in mc.products ], } for mc in menu_categories diff --git a/barker/barker/routers/printer.py b/barker/barker/routers/printer.py index 640e496..eab0a60 100644 --- a/barker/barker/routers/printer.py +++ b/barker/barker/routers/printer.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Printer +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Printer) def save( - data: schemas.PrinterIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["printers"]), + data: schemas.PrinterIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["printers"]), ): try: item = Printer(name=data.name, address=data.address, cut_code=data.cut_code) @@ -35,7 +40,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -59,7 +65,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -68,7 +75,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["printers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["printers"]), ): try: item: Printer = db.query(Printer).filter(Printer.id == id_).first() @@ -78,7 +87,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -87,19 +97,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["printers"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["printers"]), ): return printer_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [printer_info(item) for item in db.query(Printer).order_by(Printer.name).all()] + return [ + printer_info(item) for item in db.query(Printer).order_by(Printer.name).all() + ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["printers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["printers"]), ): item: Printer = db.query(Printer).filter(Printer.id == id_).first() return printer_info(item) diff --git a/barker/barker/routers/product.py b/barker/barker/routers/product.py index 38e4493..030f2c1 100644 --- a/barker/barker/routers/product.py +++ b/barker/barker/routers/product.py @@ -1,15 +1,18 @@ import uuid -from typing import Optional, List -from fastapi import APIRouter, HTTPException, status, Depends, Security +from typing import List, Optional + +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session, joinedload -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Product +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,8 +28,9 @@ def get_db(): @router.post("/list", response_model=List[schemas.Product]) def sort_order( - data: List[schemas.Product], db: Session = Depends(get_db), - user: UserToken = Security(get_user, scopes=["products"]), + data: List[schemas.Product], + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: indexes = {} @@ -42,16 +46,19 @@ def sort_order( return [ product_info(item) for item in db.query(Product) - .order_by(Product.menu_category_id) - .order_by(Product.sort_order) - .order_by(Product.name) - .options(joinedload(Product.menu_category), joinedload(Product.sale_category)) - .all() + .order_by(Product.menu_category_id) + .order_by(Product.sort_order) + .order_by(Product.name) + .options( + joinedload(Product.menu_category), joinedload(Product.sale_category) + ) + .all() ] except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -60,7 +67,9 @@ def sort_order( @router.post("", response_model=schemas.Product) def save( - data: schemas.ProductIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + data: schemas.ProductIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: item = Product( @@ -80,7 +89,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -110,7 +120,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -119,17 +130,21 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: item: Product = db.query(Product).filter(Product.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Product not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Product not found", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="Product deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="Product deletion not implemented", ) except Exception: db.rollback() @@ -138,7 +153,8 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): return product_info(None) @@ -164,12 +180,20 @@ async def show_term( current_user: UserToken = Depends(get_user), ): list_ = [] - for item in db.query(Product).filter(Product.is_active == a, Product.menu_category_id == mc).order_by(Product.sort_order, Product.name).all(): + for item in ( + db.query(Product) + .filter(Product.is_active == a, Product.menu_category_id == mc) + .order_by(Product.sort_order, Product.name) + .all() + ): list_.append( { "id": item.id, "name": item.full_name, - "saleCategory": {"id": item.sale_category_id, "name": item.sale_category.name, }, + "saleCategory": { + "id": item.sale_category_id, + "name": item.sale_category.name, + }, "tax": { "id": item.sale_category.tax_id, "name": item.sale_category.tax.name, @@ -187,7 +211,10 @@ async def show_term( { "id": item.id, "name": "H H " + item.full_name, - "saleCategory": {"id": item.sale_category_id, "name": item.sale_category.name, }, + "saleCategory": { + "id": item.sale_category_id, + "name": item.sale_category.name, + }, "tax": { "id": item.sale_category.tax_id, "name": item.sale_category.tax.name, @@ -205,7 +232,9 @@ async def show_term( @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): item: Product = db.query(Product).filter(Product.id == id_).first() return product_info(item) diff --git a/barker/barker/routers/reports/beer_consumption_report.py b/barker/barker/routers/reports/beer_consumption_report.py index 384bebf..1d8fa72 100644 --- a/barker/barker/routers/reports/beer_consumption_report.py +++ b/barker/barker/routers/reports/beer_consumption_report.py @@ -1,14 +1,15 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy.orm import Session from sqlalchemy.sql.expression import func -from barker.core.config import settings -from ...models import Inventory, Product, Kot, Voucher, VoucherType -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import Inventory, Kot, Product, Voucher, VoucherType +from ...schemas.auth import UserToken + router = APIRouter() @@ -31,10 +32,14 @@ def beer_consumption( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") - day = func.date_trunc("day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES)).label("day") + day = func.date_trunc( + "day", Voucher.date - timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES) + ).label("day") sum_ = func.sum(Inventory.quantity * Product.quantity).label("sum") list_ = ( db.query(day, Product.name, sum_) @@ -45,7 +50,11 @@ def beer_consumption( day >= start_date, day <= finish_date, Voucher.voucher_type.in_( - [VoucherType.REGULAR_BILL.value, VoucherType.NO_CHARGE.value, VoucherType.STAFF.value,] + [ + VoucherType.REGULAR_BILL.value, + VoucherType.NO_CHARGE.value, + VoucherType.STAFF.value, + ] ), ) .group_by(day, Product.name) diff --git a/barker/barker/routers/reports/bill_settlement_report.py b/barker/barker/routers/reports/bill_settlement_report.py index 08c6d50..38cda07 100644 --- a/barker/barker/routers/reports/bill_settlement_report.py +++ b/barker/barker/routers/reports/bill_settlement_report.py @@ -1,13 +1,14 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy.orm import Session -from barker.core.config import settings -from ...models import Voucher, VoucherType, Settlement, Reprint, SettleOption -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import Reprint, Settlement, SettleOption, Voucher, VoucherType +from ...schemas.auth import UserToken + router = APIRouter() @@ -30,7 +31,9 @@ def bill_details( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { @@ -85,8 +88,16 @@ def reprints(s: date, f: date, db: Session): "billId": item.voucher.full_bill_id, "settlement": f"Reprinted by {item.user.name}", "Amount": round( - next(s.amount for s in item.voucher.settlements if s.settled == SettleOption.AMOUNT()) * -1, 2, + next( + s.amount + for s in item.voucher.settlements + if s.settled == SettleOption.AMOUNT() + ) + * -1, + 2, ), } - for item in db.query(Reprint).filter(Reprint.date >= start_date, Reprint.date <= finish_date).all() + for item in db.query(Reprint) + .filter(Reprint.date >= start_date, Reprint.date <= finish_date) + .all() ] diff --git a/barker/barker/routers/reports/cashier_report.py b/barker/barker/routers/reports/cashier_report.py index 9d1ee60..6b4a53f 100644 --- a/barker/barker/routers/reports/cashier_report.py +++ b/barker/barker/routers/reports/cashier_report.py @@ -1,15 +1,17 @@ import uuid -from datetime import datetime, timedelta, date + +from datetime import date, datetime, timedelta from fastapi import APIRouter, Depends, Security from sqlalchemy import distinct from sqlalchemy.orm import Session, joinedload from ...core.config import settings -from ...models import Voucher, Settlement, User -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import Settlement, User, Voucher +from ...schemas.auth import UserToken + router = APIRouter() @@ -32,7 +34,9 @@ def active_cashiers( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") users = ( @@ -40,8 +44,11 @@ def active_cashiers( .filter( User.id.in_( db.query(distinct(Voucher.user_id)).filter( - Voucher.date >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES), - Voucher.date <= finish_date + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES), + Voucher.date + >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES), + Voucher.date + <= finish_date + + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES), ) ) ) @@ -62,15 +69,23 @@ def show_id( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") vouchers = ( db.query(Voucher) - .options(joinedload(Voucher.settlements, innerjoin=True).joinedload(Settlement.settle_option, innerjoin=True)) + .options( + joinedload(Voucher.settlements, innerjoin=True).joinedload( + Settlement.settle_option, innerjoin=True + ) + ) .filter( - Voucher.date >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES), - Voucher.date <= finish_date + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES), + Voucher.date + >= start_date + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES), + Voucher.date + <= finish_date + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES), Voucher.user_id == id_, ) .order_by(Voucher.voucher_type) @@ -112,7 +127,9 @@ def show_blank( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { diff --git a/barker/barker/routers/reports/discount_report.py b/barker/barker/routers/reports/discount_report.py index 8931b3f..c555bbb 100644 --- a/barker/barker/routers/reports/discount_report.py +++ b/barker/barker/routers/reports/discount_report.py @@ -1,14 +1,25 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy import func from sqlalchemy.orm import Session -from barker.core.config import settings -from ...models import Voucher, VoucherType, Settlement, Reprint, SettleOption, Inventory, SaleCategory, Kot, Product -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import ( + Inventory, + Kot, + Product, + Reprint, + SaleCategory, + Settlement, + SettleOption, + Voucher, + VoucherType, +) +from ...schemas.auth import UserToken + router = APIRouter() @@ -31,7 +42,9 @@ def discount_report_view( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { @@ -45,7 +58,9 @@ def discount_report(s: date, f: date, db: Session): start_date = s + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES) finish_date = f + timedelta(days=1, minutes=settings.NEW_DAY_OFFSET_MINUTES) - amount = func.sum(Inventory.quantity * Inventory.effective_price * Inventory.discount).label("Amount") + amount = func.sum( + Inventory.quantity * Inventory.effective_price * Inventory.discount + ).label("Amount") list_ = ( db.query(SaleCategory.name, amount) .join(Voucher.kots) @@ -56,7 +71,9 @@ def discount_report(s: date, f: date, db: Session): Inventory.discount != 0, Voucher.date >= start_date, Voucher.date <= finish_date, - Voucher.voucher_type.in_([VoucherType.REGULAR_BILL.value, VoucherType.KOT.value]), + Voucher.voucher_type.in_( + [VoucherType.REGULAR_BILL.value, VoucherType.KOT.value] + ), ) .group_by(SaleCategory.name) .order_by(SaleCategory.name) diff --git a/barker/barker/routers/reports/product_sale_report.py b/barker/barker/routers/reports/product_sale_report.py index f107457..05f4e62 100644 --- a/barker/barker/routers/reports/product_sale_report.py +++ b/barker/barker/routers/reports/product_sale_report.py @@ -1,16 +1,24 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy import func from sqlalchemy.orm import Session -from barker.core.config import settings -from ...models import Voucher, VoucherType, Product, Inventory, Kot, SaleCategory, \ - MenuCategory -from ...schemas import to_camel -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import ( + Inventory, + Kot, + MenuCategory, + Product, + SaleCategory, + Voucher, + VoucherType, +) +from ...schemas import to_camel +from ...schemas.auth import UserToken + router = APIRouter() @@ -33,7 +41,9 @@ def product_sale_report_view( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { @@ -49,7 +59,11 @@ def product_sale_report(s: date, f: date, db: Session): list_ = ( db.query( - Product.id, Product.full_name, Voucher.voucher_type, Inventory.is_happy_hour, func.sum(Inventory.quantity), + Product.id, + Product.full_name, + Voucher.voucher_type, + Inventory.is_happy_hour, + func.sum(Inventory.quantity), ) .join(Inventory.kot) .join(Kot.voucher) @@ -76,8 +90,11 @@ def product_sale_report(s: date, f: date, db: Session): old[0][type_] = quantity else: info.append( - {"id": id_, "name": "H H " + name if hh else name, "isHappyHour": hh, type_: quantity,} + { + "id": id_, + "name": "H H " + name if hh else name, + "isHappyHour": hh, + type_: quantity, + } ) return info - - diff --git a/barker/barker/routers/reports/sale_report.py b/barker/barker/routers/reports/sale_report.py index 43235b5..4fbb1c0 100644 --- a/barker/barker/routers/reports/sale_report.py +++ b/barker/barker/routers/reports/sale_report.py @@ -1,15 +1,25 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy import func from sqlalchemy.orm import Session -from barker.core.config import settings -from .tax_report import get_tax -from ...models import Voucher, VoucherType, Settlement, SettleOption, Product, Inventory, Kot, SaleCategory -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import ( + Inventory, + Kot, + Product, + SaleCategory, + Settlement, + SettleOption, + Voucher, + VoucherType, +) +from ...schemas.auth import UserToken +from .tax_report import get_tax + router = APIRouter() @@ -32,7 +42,9 @@ def get_sale_analysis( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { diff --git a/barker/barker/routers/reports/tax_report.py b/barker/barker/routers/reports/tax_report.py index 42f1f92..feb8ba1 100644 --- a/barker/barker/routers/reports/tax_report.py +++ b/barker/barker/routers/reports/tax_report.py @@ -1,14 +1,15 @@ -from datetime import datetime, timedelta, date +from datetime import date, datetime, timedelta +from barker.core.config import settings from fastapi import APIRouter, Depends, Security from sqlalchemy import func from sqlalchemy.orm import Session -from barker.core.config import settings -from ...models import Voucher, VoucherType, Inventory, Kot, Tax -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal +from ...models import Inventory, Kot, Tax, Voucher, VoucherType +from ...schemas.auth import UserToken + router = APIRouter() @@ -31,7 +32,9 @@ def get_tax_report( ): start_date = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date() finish_date = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date() - if (date.today() - start_date).days > 5 and "accounts-audit" not in user.permissions: + if ( + date.today() - start_date + ).days > 5 and "accounts-audit" not in user.permissions: raise ValueError("Accounts Audit") return { @@ -65,6 +68,11 @@ def get_tax(s: date, f: date, db: Session): .all() ) return [ - {"name": "{0} - {1:.2%}".format(i[0], i[1]), "taxRate": i[1], "saleAmount": i[2], "amount": i[3],} + { + "name": "{0} - {1:.2%}".format(i[0], i[1]), + "taxRate": i[1], + "saleAmount": i[2], + "amount": i[3], + } for i in amounts ] diff --git a/barker/barker/routers/reprint.py b/barker/barker/routers/reprint.py index a46aabf..41ac8e9 100644 --- a/barker/barker/routers/reprint.py +++ b/barker/barker/routers/reprint.py @@ -1,13 +1,17 @@ import uuid import transaction -from pyramid.view import view_config from barker.models import Reprint +from pyramid.view import view_config @view_config( - request_method="POST", route_name="v1_reprint", renderer="json", permission="Print Bill", trans=True, + request_method="POST", + route_name="v1_reprint", + renderer="json", + permission="Print Bill", + trans=True, ) def save(request): id_ = uuid.UUID(request.matchdict["id"]) diff --git a/barker/barker/routers/role.py b/barker/barker/routers/role.py index 99fe9f2..df0c4c1 100644 --- a/barker/barker/routers/role.py +++ b/barker/barker/routers/role.py @@ -1,15 +1,18 @@ import uuid + from typing import List, Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.auth as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError 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 ..models.auth import Role, Permission -import barker.schemas.auth as schemas +from ..models.auth import Permission, Role +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Role) def save( - data: schemas.RoleIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + data: schemas.RoleIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item = Role(data.name) @@ -36,7 +41,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -59,7 +65,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -71,24 +78,30 @@ def add_permissions(role: Role, permissions: List[schemas.PermissionItem], db): gp = [p for p in role.permissions if p.id == permission.id_] gp = None if len(gp) == 0 else gp[0] if permission.enabled and gp is None: - role.permissions.append(db.query(Permission).filter(Permission.id == permission.id_).one()) + role.permissions.append( + db.query(Permission).filter(Permission.id == permission.id_).one() + ) elif not permission.enabled and gp: role.permissions.remove(gp) @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): try: item: Role = db.query(Role).filter(Role.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Role not found", + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Role not found", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="Role deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="Role deletion not implemented", ) except Exception: db.rollback() @@ -97,20 +110,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return role_info(None, db) @router.get("/list", response_model=List[schemas.RoleList]) async def show_list( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): return [ { "id": item.id, "name": item.name, - "permissions": [p.name for p in sorted(item.permissions, key=lambda p: p.name)], + "permissions": [ + p.name for p in sorted(item.permissions, key=lambda p: p.name) + ], } for item in db.query(Role).order_by(Role.name).all() ] @@ -118,7 +135,9 @@ async def show_list( @router.get("/{id_}", response_model=schemas.Role) def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["users"]), ): item: Role = db.query(Role).filter(Role.id == id_).first() return role_info(item, db) @@ -138,7 +157,11 @@ def role_info(item: Optional[Role], db): "id": item.id, "name": item.name, "permissions": [ - {"id": p.id, "name": p.name, "enabled": True if p in item.permissions else False,} + { + "id": p.id, + "name": p.name, + "enabled": True if p in item.permissions else False, + } for p in db.query(Permission).order_by(Permission.name).all() ], } diff --git a/barker/barker/routers/sale_category.py b/barker/barker/routers/sale_category.py index 28f1c35..6fc5c5c 100644 --- a/barker/barker/routers/sale_category.py +++ b/barker/barker/routers/sale_category.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import SaleCategory +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.SaleCategory) def save( - data: schemas.SaleCategoryIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + data: schemas.SaleCategoryIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: item = SaleCategory(name=data.name, tax_id=data.tax.id_) @@ -35,7 +40,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -50,7 +56,9 @@ def update( user: UserToken = Security(get_user, scopes=["products"]), ): try: - item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first() + item: SaleCategory = ( + db.query(SaleCategory).filter(SaleCategory.id == id_).first() + ) item.name = data.name item.tax_id = data.tax.id_ db.commit() @@ -58,7 +66,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -67,17 +76,23 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): try: - item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first() + item: SaleCategory = ( + db.query(SaleCategory).filter(SaleCategory.id == id_).first() + ) if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Sale Category not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Sale Category not found", ) else: raise HTTPException( - status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="Sale Category deletion not implemented", + status_code=status.HTTP_501_NOT_IMPLEMENTED, + detail="Sale Category deletion not implemented", ) except Exception: db.rollback() @@ -86,24 +101,33 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): return sale_category_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [sale_category_info(item) for item in db.query(SaleCategory).order_by(SaleCategory.name).all()] + return [ + sale_category_info(item) + for item in db.query(SaleCategory).order_by(SaleCategory.name).all() + ] @router.get("/for-discount") def for_discount(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [{"id": item.id, "name": item.name, "discount": 0} for item in db.query(SaleCategory).order_by(SaleCategory.name).all()] + return [ + {"id": item.id, "name": item.name, "discount": 0} + for item in db.query(SaleCategory).order_by(SaleCategory.name).all() + ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["products"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["products"]), ): item: SaleCategory = db.query(SaleCategory).filter(SaleCategory.id == id_).first() return sale_category_info(item) diff --git a/barker/barker/routers/section.py b/barker/barker/routers/section.py index b8f62d3..bd708bc 100644 --- a/barker/barker/routers/section.py +++ b/barker/barker/routers/section.py @@ -1,15 +1,18 @@ import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Section +from ..schemas.auth import UserToken + router = APIRouter() @@ -25,7 +28,9 @@ def get_db(): @router.post("", response_model=schemas.Section) def save( - data: schemas.SectionIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["sections"]), + data: schemas.SectionIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: item = Section(name=data.name) @@ -35,7 +40,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -57,7 +63,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -66,7 +73,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["sections"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["sections"]), ): try: item: Section = db.query(Section).filter(Section.id == id_).first() @@ -76,7 +85,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -85,19 +95,24 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["sections"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["sections"]), ): return section_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - return [section_info(item) for item in db.query(Section).order_by(Section.name).all()] + return [ + section_info(item) for item in db.query(Section).order_by(Section.name).all() + ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["sections"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["sections"]), ): item: Section = db.query(Section).filter(Section.id == id_).first() return section_info(item) diff --git a/barker/barker/routers/section_printer.py b/barker/barker/routers/section_printer.py index f47d719..a6116ca 100644 --- a/barker/barker/routers/section_printer.py +++ b/barker/barker/routers/section_printer.py @@ -1,17 +1,20 @@ import uuid -from typing import Optional, List -from fastapi import APIRouter, HTTPException, status, Depends, Security +from typing import List, Optional + +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import and_ +from sqlalchemy.dialects.postgresql import insert as pg_insert from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from sqlalchemy.dialects.postgresql import insert as pg_insert -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal -from ..models.master import SectionPrinter, MenuCategory +from ..models.master import MenuCategory, SectionPrinter +from ..schemas.auth import UserToken + router = APIRouter() @@ -43,7 +46,9 @@ def save( pg_insert(SectionPrinter.__table__) .values( id=uuid.uuid4(), - menu_category_id=mcs.menu_category.id_ if mcs.menu_category is not None else None, + menu_category_id=mcs.menu_category.id_ + if mcs.menu_category is not None + else None, section_id=id_, printer_id=mcs.printer.id_, copies=mcs.copies, @@ -60,7 +65,9 @@ def save( and_( SectionPrinter.section_id == id_, SectionPrinter.menu_category_id != None, - ~SectionPrinter.menu_category_id.in_([x for x in current if x is not None]), + ~SectionPrinter.menu_category_id.in_( + [x for x in current if x is not None] + ), ) ) ) @@ -70,7 +77,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -79,7 +87,9 @@ def save( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["section-printers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["section-printers"]), ): try: SectionPrinter.__table__.delete(SectionPrinter.section_id == id_) @@ -88,7 +98,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -97,14 +108,17 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["section-printers"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["section-printers"]), ): return report(None, db) @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["section-printers"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["section-printers"]), ): return report(id_, db) @@ -130,17 +144,27 @@ def show_id( def report(section_id: uuid.UUID, db: Session): - menu_categories = db.query(MenuCategory.id, MenuCategory.name).filter(MenuCategory.is_active == True).order_by(MenuCategory.sort_order).all() + menu_categories = ( + db.query(MenuCategory.id, MenuCategory.name) + .filter(MenuCategory.is_active == True) + .order_by(MenuCategory.sort_order) + .all() + ) list_ = [] for item in [(None,)] + menu_categories: mc = ( db.query(SectionPrinter) - .filter(SectionPrinter.section_id == section_id, SectionPrinter.menu_category_id == item[0]) + .filter( + SectionPrinter.section_id == section_id, + SectionPrinter.menu_category_id == item[0], + ) .first() ) list_.append( { - "menuCategory": {} if item[0] is None else {"id": item[0], "name": item[1]}, + "menuCategory": {} + if item[0] is None + else {"id": item[0], "name": item[1]}, "printer": {} if mc is None else {"id": mc.printer_id}, "copies": 0 if mc is None else mc.copies, } diff --git a/barker/barker/routers/setting.py b/barker/barker/routers/setting.py index b54a29d..07f5e95 100644 --- a/barker/barker/routers/setting.py +++ b/barker/barker/routers/setting.py @@ -3,10 +3,11 @@ import uuid from fastapi import APIRouter, Depends, Security 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 ..models.master import DbSetting +from ..schemas.auth import UserToken + router = APIRouter() diff --git a/barker/barker/routers/table.py b/barker/barker/routers/table.py index f60b242..741e0be 100644 --- a/barker/barker/routers/table.py +++ b/barker/barker/routers/table.py @@ -1,16 +1,19 @@ import uuid -from typing import Optional, List -from fastapi import APIRouter, HTTPException, status, Depends, Security +from typing import List, Optional + +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..models import Overview -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal +from ..models import Overview from ..models.master import FoodTable +from ..schemas.auth import UserToken + router = APIRouter() @@ -26,7 +29,8 @@ def get_db(): @router.post("/list", response_model=List[schemas.Table]) def sort_order( - data: List[schemas.Table], db: Session = Depends(get_db), + data: List[schemas.Table], + db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tables"]), ): try: @@ -49,7 +53,8 @@ def sort_order( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -58,17 +63,25 @@ def sort_order( @router.post("", response_model=schemas.Table) def save( - data: schemas.TableIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tables"]), + data: schemas.TableIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["tables"]), ): try: - item = FoodTable(name=data.name, seats=data.seats, section_id=data.section.id_, is_active=data.is_active) + item = FoodTable( + name=data.name, + seats=data.seats, + section_id=data.section.id_, + is_active=data.is_active, + ) db.add(item) db.commit() return food_table_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -93,7 +106,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -102,7 +116,9 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tables"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["tables"]), ): try: item: FoodTable = db.query(FoodTable).filter(FoodTable.id == id_).first() @@ -112,7 +128,8 @@ def delete( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -121,7 +138,8 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tables"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["tables"]), ): return food_table_info(None) @@ -143,7 +161,12 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user) @router.get("/running") def show_running(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): - list_ = db.query(FoodTable).filter(FoodTable.is_active == True).order_by(FoodTable.sort_order).all() + list_ = ( + db.query(FoodTable) + .filter(FoodTable.is_active == True) + .order_by(FoodTable.sort_order) + .all() + ) food_tables = [] for item in list_: @@ -169,7 +192,9 @@ def show_running(db: Session = Depends(get_db), user: UserToken = Depends(get_us @router.get("/from-voucher/{id_}") def show_voucher( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user), ): overview: Overview = db.query(Overview).filter(Overview.voucher_id == id_).first() if overview is not None: @@ -179,7 +204,9 @@ def show_voucher( @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["tables"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["tables"]), ): item: FoodTable = db.query(FoodTable).filter(FoodTable.id == id_).first() return food_table_info(item) diff --git a/barker/barker/routers/tax.py b/barker/barker/routers/tax.py index c4272d2..45bd8c4 100644 --- a/barker/barker/routers/tax.py +++ b/barker/barker/routers/tax.py @@ -1,16 +1,19 @@ import uuid + from decimal import Decimal from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.master as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ..schemas.auth import UserToken -import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Tax +from ..schemas.auth import UserToken + router = APIRouter() @@ -26,7 +29,9 @@ def get_db(): @router.post("", response_model=schemas.Tax) def save( - data: schemas.TaxIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]), + data: schemas.TaxIn, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["taxes"]), ): try: item = Tax(name=data.name, rate=round(data.rate / Decimal(100), 4)) @@ -36,7 +41,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -54,7 +60,8 @@ def update( item: Tax = db.query(Tax).filter(Tax.id == id_).first() if item.is_fixture: raise HTTPException( - status_code=status.HTTP_423_LOCKED, detail=f"{item.name} is a fixture and cannot be edited or deleted.", + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and cannot be edited or deleted.", ) item.name = data.name item.rate = round(data.rate / Decimal(100), 4) @@ -63,7 +70,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -72,17 +80,21 @@ def update( @router.delete("/{id_}") def delete( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["taxes"]), ): try: item: Tax = db.query(Tax).filter(Tax.id == id_).first() if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Tax not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Tax not found", ) elif item.is_fixture: raise HTTPException( - status_code=status.HTTP_423_LOCKED, detail=f"{item.name} is a fixture and cannot be edited or deleted.", + status_code=status.HTTP_423_LOCKED, + detail=f"{item.name} is a fixture and cannot be edited or deleted.", ) else: db.delete(item) @@ -95,7 +107,8 @@ def delete( @router.get("") def show_blank( - db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]), + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["taxes"]), ): return tax_info(None) @@ -103,14 +116,21 @@ def show_blank( @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): return [ - {"id": item.id, "name": item.name, "rate": item.rate, "isFixture": item.is_fixture} + { + "id": item.id, + "name": item.name, + "rate": item.rate, + "isFixture": item.is_fixture, + } for item in db.query(Tax).order_by(Tax.name).all() ] @router.get("/{id_}") def show_id( - id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["taxes"]), + id_: uuid.UUID, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["taxes"]), ): item: Tax = db.query(Tax).filter(Tax.id == id_).first() return tax_info(item) diff --git a/barker/barker/routers/voucher/__init__.py b/barker/barker/routers/voucher/__init__.py index 4c2b3fd..83958f4 100644 --- a/barker/barker/routers/voucher/__init__.py +++ b/barker/barker/routers/voucher/__init__.py @@ -1,22 +1,21 @@ import uuid -from typing import Optional, List +from typing import List, Optional + +from barker.models import ( + GuestBook, + Overview, + Settlement, + SettleOption, + Voucher, + VoucherType, +) +from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema from fastapi import HTTPException from sqlalchemy import func from sqlalchemy.orm import Session from starlette import status -from barker.models import ( - VoucherType, - Settlement, - SettleOption, - Voucher, - Overview, - GuestBook, -) - -from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema - def get_tax(tax, voucher_type): if voucher_type in [VoucherType.STAFF, VoucherType.NO_CHARGE]: @@ -25,7 +24,8 @@ def get_tax(tax, voucher_type): return tax else: raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Unexpected Voucher Type", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Unexpected Voucher Type", ) @@ -56,31 +56,38 @@ def do_update_table(item: Voucher, guest_book: Optional[GuestBook], db: Session) item.status.status = status_ -def check_permissions(item: Optional[Voucher], voucher_type: VoucherType, permissions: List[str]): +def check_permissions( + item: Optional[Voucher], voucher_type: VoucherType, permissions: List[str] +): if voucher_type == VoucherType.KOT and "print-kot" not in permissions: raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, detail="You are not allowed to print a kot", + status_code=status.HTTP_403_FORBIDDEN, + detail="You are not allowed to print a kot", ) if voucher_type != VoucherType.KOT and "print-bill" not in permissions: raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, detail="You are not allowed to print bill", + status_code=status.HTTP_403_FORBIDDEN, + detail="You are not allowed to print bill", ) if item is None: return if item.voucher_type != VoucherType.KOT and "edit-printed-bill" not in permissions: raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, detail="You are not allowed to edit a printed bill", + status_code=status.HTTP_403_FORBIDDEN, + detail="You are not allowed to edit a printed bill", ) if item.voucher_type != VoucherType.KOT and voucher_type == VoucherType.KOT: raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, detail="This Bill is already printed\nCannot add a Kot to it.", + status_code=status.HTTP_403_FORBIDDEN, + detail="This Bill is already printed\nCannot add a Kot to it.", ) if item.voucher_type == VoucherType.VOID: raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, detail=f"This Bill is already void.\nReason: {item.reason}", + status_code=status.HTTP_403_FORBIDDEN, + detail=f"This Bill is already void.\nReason: {item.reason}", ) @@ -101,7 +108,8 @@ def do_update_settlements(voucher: Voucher, others: List[SettleSchema], db: Sess unsettled = sum(x.amount for x in settlements) if len(others) and unsettled != 0: # This should not be allowed raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Payment received is not equal to bill amount", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Payment received is not equal to bill amount", ) if unsettled != 0: settlements.append(SettleSchema(id=SettleOption.UNSETTLED(), amount=unsettled)) @@ -115,6 +123,8 @@ def do_update_settlements(voucher: Voucher, others: List[SettleSchema], db: Sess voucher.settlements.append(s) db.add(s) - for i in (i for i in voucher.settlements if i.settled not in [x.id_ for x in settlements]): + for i in ( + i for i in voucher.settlements if i.settled not in [x.id_ for x in settlements] + ): voucher.settlements.remove(i) db.delete(i) diff --git a/barker/barker/routers/voucher/change.py b/barker/barker/routers/voucher/change.py index 76fe47b..90e4e49 100644 --- a/barker/barker/routers/voucher/change.py +++ b/barker/barker/routers/voucher/change.py @@ -1,22 +1,22 @@ import uuid + from decimal import Decimal from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.voucher as schemas + +from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from .save import do_save -from ...schemas.auth import UserToken -import barker.schemas.voucher as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, SettleOption, Overview, Reprint -from ...routers.voucher import ( - do_update_settlements, - get_guest_book, -) -from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from ...models import Overview, Reprint, SettleOption, Voucher +from ...routers.voucher import do_update_settlements, get_guest_book +from ...schemas.auth import UserToken +from .save import do_save + router = APIRouter() @@ -43,7 +43,12 @@ def change( old: Voucher = db.query(Voucher).filter(Voucher.id == id_).first() amount_changed: bool = old.amount != round( sum( - Decimal((0 if i.is_happy_hour else i.price) * i.quantity * (1 - i.discount) * (1 + i.tax_rate)) + Decimal( + (0 if i.is_happy_hour else i.price) + * i.quantity + * (1 - i.discount) + * (1 + i.tax_rate) + ) for k in data.kots for i in k.inventories ), @@ -60,7 +65,8 @@ def change( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -73,7 +79,12 @@ def reprint_bill(voucher_id: uuid.UUID, user_id: uuid.UUID, db: Session): def void_and_issue_new_bill( - data: schemas.VoucherIn, u: bool, g: Optional[uuid.UUID], old: Voucher, db: Session, user: UserToken + data: schemas.VoucherIn, + u: bool, + g: Optional[uuid.UUID], + old: Voucher, + db: Session, + user: UserToken, ): update_table = u guest_book = get_guest_book(g, db) @@ -81,11 +92,17 @@ def void_and_issue_new_bill( db.flush() old.void = True old.void_reason = f"Bill Discounted / Changed. New Bill ID is {item.full_bill_id}" - do_update_settlements(old, [SettleSchema(id=SettleOption.VOID(), amount=round(old.amount))], db) + do_update_settlements( + old, [SettleSchema(id=SettleOption.VOID(), amount=round(old.amount))], db + ) if update_table: if old.status is None: - item.status = Overview(voucher_id=None, food_table_id=item.food_table_id, status="printed") + item.status = Overview( + voucher_id=None, food_table_id=item.food_table_id, status="printed" + ) db.add(item.status) else: - db.query(Overview).filter(Overview.voucher_id == old.id).update({Overview.voucher_id: item.id}) + db.query(Overview).filter(Overview.voucher_id == old.id).update( + {Overview.voucher_id: item.id} + ) diff --git a/barker/barker/routers/voucher/merge_move.py b/barker/barker/routers/voucher/merge_move.py index eab4e58..0bd35fd 100644 --- a/barker/barker/routers/voucher/merge_move.py +++ b/barker/barker/routers/voucher/merge_move.py @@ -1,22 +1,21 @@ import uuid + from datetime import datetime from typing import List -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.merge_move as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ...schemas.auth import UserToken -import barker.schemas.merge_move as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, Kot, Overview, Settlement -from ...routers.voucher import ( - do_update_settlements, - get_bill_id, - do_update_table, -) +from ...models import Kot, Overview, Settlement, Voucher +from ...routers.voucher import do_update_settlements, do_update_table, get_bill_id +from ...schemas.auth import UserToken + router = APIRouter() @@ -32,16 +31,21 @@ def get_db(): @router.post("/move-kot/merge") def merge_kot( - data: schemas.MergeKot, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["merge-kots"]), + data: schemas.MergeKot, + db: Session = Depends(get_db), + 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}) + 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) db.commit() except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -80,7 +84,8 @@ def move_kot( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -89,18 +94,23 @@ def move_kot( @router.post("/move-table/move") def move_table( - data: schemas.MoveTable, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["move-table"]), + data: schemas.MoveTable, + db: Session = Depends(get_db), + user: UserToken = Security(get_user, scopes=["move-table"]), ): try: db.query(Overview).filter(Overview.voucher_id == data.voucher_id).update( {Overview.food_table_id: data.table_id} ) - db.query(Voucher).filter(Voucher.id == data.voucher_id).update({Voucher.food_table_id: data.table_id}) + db.query(Voucher).filter(Voucher.id == data.voucher_id).update( + {Voucher.food_table_id: data.table_id} + ) db.commit() except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -114,7 +124,9 @@ def merge_table( user: UserToken = Security(get_user, scopes=["merge-tables"]), ): try: - db.query(Kot).filter(Kot.voucher_id == data.voucher_id).update({Kot.voucher_id: data.new_voucher_id}) + db.query(Kot).filter(Kot.voucher_id == data.voucher_id).update( + {Kot.voucher_id: data.new_voucher_id} + ) 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() @@ -123,7 +135,8 @@ def merge_table( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() diff --git a/barker/barker/routers/voucher/receive_payment.py b/barker/barker/routers/voucher/receive_payment.py index c812c21..1a93a60 100644 --- a/barker/barker/routers/voucher/receive_payment.py +++ b/barker/barker/routers/voucher/receive_payment.py @@ -1,15 +1,17 @@ import uuid -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.receive_payment as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from . import do_update_settlements -from ...schemas.auth import UserToken -import barker.schemas.receive_payment as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, VoucherType, SettleOption, Settlement, Overview +from ...models import Overview, Settlement, SettleOption, Voucher, VoucherType +from ...schemas.auth import UserToken +from . import do_update_settlements + router = APIRouter() @@ -34,7 +36,10 @@ def update( try: update_table = u amounts = [ - j for j in data.amounts if j.amount != 0 and j.id_ not in [SettleOption.AMOUNT(), SettleOption.ROUND_OFF()] + j + for j in data.amounts + if j.amount != 0 + and j.id_ not in [SettleOption.AMOUNT(), SettleOption.ROUND_OFF()] ] for i in amounts: i.amount = round(i.amount, 0) @@ -52,7 +57,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() diff --git a/barker/barker/routers/voucher/save.py b/barker/barker/routers/voucher/save.py index b86dbbe..76df740 100644 --- a/barker/barker/routers/voucher/save.py +++ b/barker/barker/routers/voucher/save.py @@ -1,26 +1,37 @@ import uuid + from datetime import datetime from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.voucher as schemas + +from barker.printing import print_bill, print_kot +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ...schemas.auth import UserToken -import barker.schemas.voucher as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, VoucherType, Kot, Product, Inventory, InventoryModifier, GuestBook -from ...routers.voucher import ( - get_tax, - do_update_settlements, - get_bill_id, - do_update_table, - check_permissions, - get_guest_book, +from ...models import ( + GuestBook, + Inventory, + InventoryModifier, + Kot, + Product, + Voucher, + VoucherType, ) -from barker.printing import print_kot, print_bill +from ...routers.voucher import ( + check_permissions, + do_update_settlements, + do_update_table, + get_bill_id, + get_guest_book, + get_tax, +) +from ...schemas.auth import UserToken + router = APIRouter() @@ -57,7 +68,8 @@ def save( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -120,6 +132,7 @@ def do_save( do_update_settlements(item, [], db) if len(item.kots) == 0 or len(item.kots[0].inventories) == 0: raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Please add some products", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Please add some products", ) return item diff --git a/barker/barker/routers/voucher/show.py b/barker/barker/routers/voucher/show.py index ba50689..59e552c 100644 --- a/barker/barker/routers/voucher/show.py +++ b/barker/barker/routers/voucher/show.py @@ -1,14 +1,16 @@ import re import uuid + from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +from fastapi import APIRouter, Depends, HTTPException, Security, status 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 ...models import Voucher, Overview, FoodTable, GuestBook, VoucherType +from ...models import FoodTable, GuestBook, Overview, Voucher, VoucherType +from ...schemas.auth import UserToken + router = APIRouter() @@ -24,7 +26,9 @@ def get_db(): @router.get("/from-id/{id_}") def from_id( - id_: str, db: Session = Depends(get_db), user: UserToken = Security(get_user), + id_: str, + db: Session = Depends(get_db), + user: UserToken = Security(get_user), ): item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first() return voucher_info(item) @@ -32,15 +36,26 @@ def from_id( @router.get("/from-bill/{id_}") def from_bill( - id_: str, db: Session = Depends(get_db), user: UserToken = Security(get_user), + id_: str, + db: Session = Depends(get_db), + user: UserToken = Security(get_user), ): item: Voucher = db.query(Voucher) if re.compile(r"^\d{2,}-\d{4}$").match(id_): - item = item.filter(Voucher.bill_id == int(id_.replace("-", "")), Voucher.voucher_type.in_([1, 3]),) + item = item.filter( + Voucher.bill_id == int(id_.replace("-", "")), + Voucher.voucher_type.in_([1, 3]), + ) elif re.compile(r"^NC-\d+$").match(id_): - item = item.filter(Voucher.bill_id == int(id_.replace("NC-", "")), Voucher.voucher_type == 2,) + item = item.filter( + Voucher.bill_id == int(id_.replace("NC-", "")), + Voucher.voucher_type == 2, + ) elif re.compile(r"^ST-\d+$").match(id_): - item = item.filter(Voucher.bill_id == int(id_.replace("ST-", "")), Voucher.voucher_type == 4,) + item = item.filter( + Voucher.bill_id == int(id_.replace("ST-", "")), + Voucher.voucher_type == 4, + ) item = item.first() if item is None: return {} @@ -56,10 +71,18 @@ def from_bill( user: UserToken = Security(get_user), ): if v is not None: - item = db.query(Overview).filter(Overview.voucher_id == v, Overview.food_table_id == id_,).first() + item = ( + db.query(Overview) + .filter( + Overview.voucher_id == v, + Overview.food_table_id == id_, + ) + .first() + ) if item is None: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Voucher not found", + status_code=status.HTTP_404_NOT_FOUND, + detail="Voucher not found", ) else: return voucher_info(item.voucher) @@ -84,7 +107,9 @@ def voucher_info(item: Voucher): "lastEditDateTip": item.last_edit_date.strftime("%d-%b-%Y %H:%M:%S"), "billId": item.full_bill_id, "table": {"id": item.food_table_id, "name": item.food_table.name}, - "customer": {"id": item.customer_id, "name": item.customer.name} if item.customer is not None else None, + "customer": {"id": item.customer_id, "name": item.customer.name} + if item.customer is not None + else None, "settlements": [], "narration": item.narration, "reason": item.reason, @@ -108,7 +133,10 @@ def voucher_info(item: Voucher): "name": i.product.menu_category.name, "discountLimit": i.product.menu_category.discount_limit, }, - "saleCategory": {"id": i.product.sale_category_id, "name": i.product.sale_category.name,}, + "saleCategory": { + "id": i.product.sale_category_id, + "name": i.product.sale_category.name, + }, }, "quantity": i.quantity, "price": i.price, @@ -117,7 +145,12 @@ def voucher_info(item: Voucher): "tax": {"id": i.tax_id, "name": i.tax.name}, "discount": i.discount, "modifiers": [ - {"id": m.modifier.id, "name": m.modifier.name, "price": m.price,} for m in i.modifiers + { + "id": m.modifier.id, + "name": m.modifier.name, + "price": m.price, + } + for m in i.modifiers ], } for i in k.inventories @@ -134,6 +167,8 @@ def voucher_blank(table: FoodTable, guest: Optional[GuestBook]): "pax": table.seats if guest is None else guest.pax, "table": {"id": table.id, "name": table.name}, "voucherType": VoucherType.KOT.name, - "customer": {"id": guest.customer_id, "name": guest.customer.name} if guest is not None else None, + "customer": {"id": guest.customer_id, "name": guest.customer.name} + if guest is not None + else None, "kots": [], } diff --git a/barker/barker/routers/voucher/split.py b/barker/barker/routers/voucher/split.py index 66d1948..b5cbdce 100644 --- a/barker/barker/routers/voucher/split.py +++ b/barker/barker/routers/voucher/split.py @@ -1,24 +1,35 @@ import uuid -from datetime import datetime -from typing import Optional, List -from fastapi import APIRouter, HTTPException, status, Depends, Security +from datetime import datetime +from typing import List, Optional + +import barker.schemas.split as schemas + +from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ...schemas.auth import UserToken -import barker.schemas.split as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, VoucherType, Kot, Inventory, InventoryModifier, SettleOption, Overview -from ...routers.voucher import ( - do_update_settlements, - get_bill_id, - do_update_table, - check_permissions, +from ...models import ( + Inventory, + InventoryModifier, + Kot, + Overview, + SettleOption, + Voucher, + VoucherType, ) -from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from ...routers.voucher import ( + check_permissions, + do_update_settlements, + do_update_table, + get_bill_id, +) +from ...schemas.auth import UserToken + router = APIRouter() @@ -46,19 +57,41 @@ def split( item: Voucher = db.query(Voucher).filter(Voucher.id == id_).first() item.void = True item.reason = "Bill Split" - do_update_settlements(item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db) + do_update_settlements( + item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db + ) if update_table: db.query(Overview).filter(Overview.voucher_id == item.id).delete() check_permissions(None, item.voucher_type, user.permissions) - one_inventories = [i for k in item.kots for i in k.inventories if i.id in data.inventories] - two_inventories = [i for k in item.kots for i in k.inventories if i.id not in data.inventories] + one_inventories = [ + i for k in item.kots for i in k.inventories if i.id in data.inventories + ] + two_inventories = [ + i for k in item.kots for i in k.inventories if i.id not in data.inventories + ] - one = save(one_inventories, now, item.voucher_type, 0, data.table_id, item.customer_id, user.id_, db,) + one = save( + one_inventories, + now, + item.voucher_type, + 0, + data.table_id, + item.customer_id, + user.id_, + db, + ) if update_table: do_update_table(one, None, db) two = save( - two_inventories, now, item.voucher_type, item.pax, item.food_table_id, item.customer_id, user.id_, db, + two_inventories, + now, + item.voucher_type, + item.pax, + item.food_table_id, + item.customer_id, + user.id_, + db, ) if update_table: do_update_table(two, None, db) @@ -66,7 +99,8 @@ def split( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() @@ -92,19 +126,26 @@ def save( for (product, happy_hour), (inventory, quantity) in product_quantities.items(): if quantity < 0: raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Quantity of a product is negative", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Quantity of a product is negative", ) bill_id = get_bill_id(voucher_type, db) kot_id = db.query(func.coalesce(func.max(Voucher.kot_id), 0) + 1).scalar() - item: Voucher = Voucher(now, pax, bill_id, kot_id, table_id, customer_id, voucher_type, user_id) + item: Voucher = Voucher( + now, pax, bill_id, kot_id, table_id, customer_id, voucher_type, user_id + ) db.add(item) code = db.query(func.coalesce(func.max(Kot.code), 0) + 1).scalar() kot = Kot(item.id, code, item.food_table_id, item.date, item.user_id) item.kots.append(kot) - db.add(kot) # Multiple inventories of the same product give a key error, but combining messes with modifiers, this + db.add( + kot + ) # Multiple inventories of the same product give a key error, but combining messes with modifiers, this # will get important when modifiers have a price. - for index, (old_inventory, q) in enumerate([i for i in product_quantities.values() if i[1] != 0]): + for index, (old_inventory, q) in enumerate( + [i for i in product_quantities.values() if i[1] != 0] + ): inv = Inventory( kot.id, old_inventory.product_id, @@ -126,7 +167,8 @@ def save( if len(kot.inventories) == 0: raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="No inventories selected", + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="No inventories selected", ) db.flush() return item diff --git a/barker/barker/routers/voucher/update.py b/barker/barker/routers/voucher/update.py index e80f352..bd496d5 100644 --- a/barker/barker/routers/voucher/update.py +++ b/barker/barker/routers/voucher/update.py @@ -1,26 +1,29 @@ import uuid + from datetime import datetime from typing import Optional -from fastapi import APIRouter, HTTPException, status, Depends, Security +import barker.schemas.voucher as schemas + +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from ...printing import print_kot, print_bill -from ...schemas.auth import UserToken -import barker.schemas.voucher as schemas from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, VoucherType, Kot, Product, Inventory, InventoryModifier +from ...models import Inventory, InventoryModifier, Kot, Product, Voucher, VoucherType +from ...printing import print_bill, print_kot from ...routers.voucher import ( - get_tax, - do_update_settlements, - get_bill_id, - do_update_table, check_permissions, + do_update_settlements, + do_update_table, + get_bill_id, get_guest_book, + get_tax, ) +from ...schemas.auth import UserToken + router = APIRouter() @@ -75,7 +78,10 @@ def update( for i in k.inventories: i.tax_rate = get_tax(i.tax_rate, voucher_type) i.discount = next( - round(inv.discount, 5) for ko in data.kots for inv in ko.inventories if inv.id_ == i.id + round(inv.discount, 5) + for ko in data.kots + for inv in ko.inventories + if inv.id_ == i.id ) for k in (k for k in data.kots if k.id_ is None and len(k.inventories) > 0): need_to_print_kot = True @@ -114,7 +120,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() diff --git a/barker/barker/routers/voucher/void.py b/barker/barker/routers/voucher/void.py index 61a591c..3c48852 100644 --- a/barker/barker/routers/voucher/void.py +++ b/barker/barker/routers/voucher/void.py @@ -1,15 +1,16 @@ import uuid -from fastapi import APIRouter, HTTPException, status, Depends, Security +from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session -from . import do_update_settlements -from ...schemas.auth import UserToken from ...core.security import get_current_active_user as get_user from ...db.session import SessionLocal -from ...models import Voucher, VoucherType, SettleOption, Overview -from barker.schemas.receive_payment import ReceivePaymentItem as SettleSchema +from ...models import Overview, SettleOption, Voucher, VoucherType +from ...schemas.auth import UserToken +from . import do_update_settlements + router = APIRouter() @@ -38,7 +39,9 @@ def update( item.reason = reason item.voucher_type = VoucherType.VOID - do_update_settlements(item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db) + do_update_settlements( + item, [SettleSchema(id=SettleOption.VOID(), amount=round(item.amount))], db + ) if u: # Update table db.query(Overview).filter(Overview.voucher_id == item.id).delete() @@ -47,7 +50,8 @@ def update( except SQLAlchemyError as e: db.rollback() raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=str(e), ) except Exception: db.rollback() diff --git a/barker/barker/routes.py b/barker/barker/routes.py index f80179f..0d48ab2 100644 --- a/barker/barker/routes.py +++ b/barker/barker/routes.py @@ -10,15 +10,24 @@ def includeme(config): config.add_route("v1_devices_list", "/v1/devices") config.add_route("devices_new", "/devices/new") config.add_view( - "barker.views.home", route_name="devices_new", request_method="GET", permission="Tables", + "barker.views.home", + route_name="devices_new", + request_method="GET", + permission="Tables", ) config.add_route("devices_id", "/devices/{id}") config.add_view( - "barker.views.home", route_name="devices_id", request_method="GET", permission="Tables", + "barker.views.home", + route_name="devices_id", + request_method="GET", + permission="Tables", ) config.add_route("devices_list", "/devices") config.add_view( - "barker.views.home", route_name="devices_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="devices_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_guest_book_new", "/v1/guest-book/new") @@ -26,15 +35,24 @@ def includeme(config): config.add_route("v1_guest_book_list", "/v1/guest-book") config.add_route("guest_book_new", "/guest-book/new") config.add_view( - "barker.views.home", route_name="guest_book_new", request_method="GET", permission="Guest Book", + "barker.views.home", + route_name="guest_book_new", + request_method="GET", + permission="Guest Book", ) config.add_route("guest_book_id", "/guest-book/{id}") config.add_view( - "barker.views.home", route_name="guest_book_id", request_method="GET", permission="Guest Book", + "barker.views.home", + route_name="guest_book_id", + request_method="GET", + permission="Guest Book", ) config.add_route("guest_book_list", "/guest-book") config.add_view( - "barker.views.home", route_name="guest_book_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="guest_book_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_menu_categories_new", "/v1/menu-categories/new") @@ -42,15 +60,24 @@ def includeme(config): config.add_route("v1_menu_categories_list", "/v1/menu-categories") config.add_route("menu_categories_new", "/menu-categories/new") config.add_view( - "barker.views.home", route_name="menu_categories_new", request_method="GET", permission="Products", + "barker.views.home", + route_name="menu_categories_new", + request_method="GET", + permission="Products", ) config.add_route("menu_categories_id", "/menu-categories/{id}") config.add_view( - "barker.views.home", route_name="menu_categories_id", request_method="GET", permission="Products", + "barker.views.home", + route_name="menu_categories_id", + request_method="GET", + permission="Products", ) config.add_route("menu_categories_list", "/menu-categories") config.add_view( - "barker.views.home", route_name="menu_categories_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="menu_categories_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_modifier_categories_new", "/v1/modifier-categories/new") @@ -58,15 +85,24 @@ def includeme(config): config.add_route("v1_modifier_categories_list", "/v1/modifier-categories") config.add_route("modifier_categories_new", "/modifier-categories/new") config.add_view( - "barker.views.home", route_name="modifier_categories_new", request_method="GET", permission="Products", + "barker.views.home", + route_name="modifier_categories_new", + request_method="GET", + permission="Products", ) config.add_route("modifier_categories_id", "/modifier-categories/{id}") config.add_view( - "barker.views.home", route_name="modifier_categories_id", request_method="GET", permission="Products", + "barker.views.home", + route_name="modifier_categories_id", + request_method="GET", + permission="Products", ) config.add_route("modifier_categories_list", "/modifier-categories") config.add_view( - "barker.views.home", route_name="modifier_categories_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="modifier_categories_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_modifiers_new", "/v1/modifiers/new") @@ -74,15 +110,24 @@ def includeme(config): config.add_route("v1_modifiers_list", "/v1/modifiers") config.add_route("modifiers_new", "/modifiers/new") config.add_view( - "barker.views.home", route_name="modifiers_new", request_method="GET", permission="Products", + "barker.views.home", + route_name="modifiers_new", + request_method="GET", + permission="Products", ) config.add_route("modifiers_id", "/modifiers/{id}") config.add_view( - "barker.views.home", route_name="modifiers_id", request_method="GET", permission="Products", + "barker.views.home", + route_name="modifiers_id", + request_method="GET", + permission="Products", ) config.add_route("modifiers_list", "/modifiers") config.add_view( - "barker.views.home", route_name="modifiers_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="modifiers_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_printers_new", "/v1/printers/new") @@ -90,15 +135,24 @@ def includeme(config): config.add_route("v1_printers_list", "/v1/printers") config.add_route("printers_new", "/printers/new") config.add_view( - "barker.views.home", route_name="printers_new", request_method="GET", permission="Printers", + "barker.views.home", + route_name="printers_new", + request_method="GET", + permission="Printers", ) config.add_route("printers_id", "/printers/{id}") config.add_view( - "barker.views.home", route_name="printers_id", request_method="GET", permission="Printers", + "barker.views.home", + route_name="printers_id", + request_method="GET", + permission="Printers", ) config.add_route("printers_list", "/printers") config.add_view( - "barker.views.home", route_name="printers_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="printers_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_products_new", "/v1/products/new") @@ -106,15 +160,24 @@ def includeme(config): config.add_route("v1_products_list", "/v1/products") config.add_route("products_new", "/products/new") config.add_view( - "barker.views.home", route_name="products_new", request_method="GET", permission="Products", + "barker.views.home", + route_name="products_new", + request_method="GET", + permission="Products", ) config.add_route("products_id", "/products/{id}") config.add_view( - "barker.views.home", route_name="products_id", request_method="GET", permission="Products", + "barker.views.home", + route_name="products_id", + request_method="GET", + permission="Products", ) config.add_route("products_list", "/products") config.add_view( - "barker.views.home", route_name="products_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="products_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_roles_new", "/v1/roles/new") @@ -122,15 +185,24 @@ def includeme(config): config.add_route("v1_roles_list", "/v1/roles") config.add_route("roles_new", "/roles/new") config.add_view( - "barker.views.home", route_name="roles_new", request_method="GET", permission="Users", + "barker.views.home", + route_name="roles_new", + request_method="GET", + permission="Users", ) config.add_route("roles_id", "/roles/{id}") config.add_view( - "barker.views.home", route_name="roles_id", request_method="GET", permission="Users", + "barker.views.home", + route_name="roles_id", + request_method="GET", + permission="Users", ) config.add_route("roles_list", "/roles") config.add_view( - "barker.views.home", route_name="roles_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="roles_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_sale_categories_new", "/v1/sale-categories/new") @@ -138,26 +210,41 @@ def includeme(config): config.add_route("v1_sale_categories_list", "/v1/sale-categories") config.add_route("sale_categories_new", "/sale-categories/new") config.add_view( - "barker.views.home", route_name="sale_categories_new", request_method="GET", permission="Products", + "barker.views.home", + route_name="sale_categories_new", + request_method="GET", + permission="Products", ) config.add_route("sale_categories_id", "/sale-categories/{id}") config.add_view( - "barker.views.home", route_name="sale_categories_id", request_method="GET", permission="Products", + "barker.views.home", + route_name="sale_categories_id", + request_method="GET", + permission="Products", ) config.add_route("sale_categories_list", "/sale-categories") config.add_view( - "barker.views.home", route_name="sale_categories_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="sale_categories_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_section_printers", "/v1/section-printers") config.add_route("v1_section_printers_id", "/v1/section-printers/{section_id}") config.add_route("section_printers_id", "/section-printers/{section_id}") config.add_view( - "barker.views.home", route_name="section_printers_id", request_method="GET", permission="Tables", + "barker.views.home", + route_name="section_printers_id", + request_method="GET", + permission="Tables", ) config.add_route("section_printers", "/section-printers") config.add_view( - "barker.views.home", route_name="section_printers", request_method="GET", permission="Tables", + "barker.views.home", + route_name="section_printers", + request_method="GET", + permission="Tables", ) config.add_route("v1_sections_new", "/v1/sections/new") @@ -165,15 +252,24 @@ def includeme(config): config.add_route("v1_sections_list", "/v1/sections") config.add_route("sections_new", "/sections/new") config.add_view( - "barker.views.home", route_name="sections_new", request_method="GET", permission="Tables", + "barker.views.home", + route_name="sections_new", + request_method="GET", + permission="Tables", ) config.add_route("sections_id", "/sections/{id}") config.add_view( - "barker.views.home", route_name="sections_id", request_method="GET", permission="Tables", + "barker.views.home", + route_name="sections_id", + request_method="GET", + permission="Tables", ) config.add_route("sections_list", "/sections") config.add_view( - "barker.views.home", route_name="sections_list", request_method="GET", permission="Tables", + "barker.views.home", + route_name="sections_list", + request_method="GET", + permission="Tables", ) config.add_route("v1_tables_new", "/v1/tables/new") @@ -181,15 +277,24 @@ def includeme(config): config.add_route("v1_tables_list", "/v1/tables") config.add_route("tables_new", "/tables/new") config.add_view( - "barker.views.home", route_name="tables_new", request_method="GET", permission="Tables", + "barker.views.home", + route_name="tables_new", + request_method="GET", + permission="Tables", ) config.add_route("tables_id", "/tables/{id}") config.add_view( - "barker.views.home", route_name="tables_id", request_method="GET", permission="Tables", + "barker.views.home", + route_name="tables_id", + request_method="GET", + permission="Tables", ) config.add_route("tables_list", "/tables") config.add_view( - "barker.views.home", route_name="tables_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="tables_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_taxes_new", "/v1/taxes/new") @@ -197,15 +302,24 @@ def includeme(config): config.add_route("v1_taxes_list", "/v1/taxes") config.add_route("taxes_new", "/taxes/new") config.add_view( - "barker.views.home", route_name="taxes_new", request_method="GET", permission="Taxes", + "barker.views.home", + route_name="taxes_new", + request_method="GET", + permission="Taxes", ) config.add_route("taxes_id", "/taxes/{id}") config.add_view( - "barker.views.home", route_name="taxes_id", request_method="GET", permission="Taxes", + "barker.views.home", + route_name="taxes_id", + request_method="GET", + permission="Taxes", ) config.add_route("taxes_list", "/taxes") config.add_view( - "barker.views.home", route_name="taxes_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="taxes_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_users_new", "/v1/users/new") @@ -213,15 +327,24 @@ def includeme(config): config.add_route("v1_users_list", "/v1/users") config.add_route("users_new", "/users/new") config.add_view( - "barker.views.home", route_name="users_new", request_method="GET", permission="Users", + "barker.views.home", + route_name="users_new", + request_method="GET", + permission="Users", ) config.add_route("users_id", "/users/{id}") config.add_view( - "barker.views.home", route_name="users_id", request_method="GET", permission="Users", + "barker.views.home", + route_name="users_id", + request_method="GET", + permission="Users", ) config.add_route("users_list", "/users") config.add_view( - "barker.views.home", route_name="users_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="users_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_vouchers_new", "/v1/vouchers/new") @@ -229,11 +352,17 @@ def includeme(config): config.add_route("sales", "/sales") config.add_view( - "barker.views.home", route_name="sales", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="sales", + request_method="GET", + permission="Authenticated", ) config.add_route("sales_catch", "/sales/*rest") config.add_view( - "barker.views.home", route_name="sales_catch", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="sales_catch", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_move_table", "/v1/move-table") @@ -243,46 +372,70 @@ def includeme(config): config.add_route("v1_cashier_report_id", "/v1/cashier-report/{id}") config.add_route("cashier_report_id", "/cashier-report/{id}") config.add_view( - "barker.views.home", route_name="cashier_report_id", request_method="GET", permission="Cashier Checkout", + "barker.views.home", + route_name="cashier_report_id", + request_method="GET", + permission="Cashier Checkout", ) config.add_route("v1_cashier_report", "/v1/cashier-report") config.add_route("cashier_report", "/cashier-report") config.add_view( - "barker.views.home", route_name="cashier_report", request_method="GET", permission="Cashier Checkout", + "barker.views.home", + route_name="cashier_report", + request_method="GET", + permission="Cashier Checkout", ) config.add_route("v1_sale_report", "/v1/sale-report") config.add_route("sale_report", "/sale-report") config.add_view( - "barker.views.home", route_name="sale_report", request_method="GET", permission="Sales Analysis", + "barker.views.home", + route_name="sale_report", + request_method="GET", + permission="Sales Analysis", ) config.add_route("v1_tax_report", "/v1/tax-report") config.add_route("tax_report", "/tax-report") config.add_view( - "barker.views.home", route_name="tax_report", request_method="GET", permission="Tax Analysis", + "barker.views.home", + route_name="tax_report", + request_method="GET", + permission="Tax Analysis", ) config.add_route("v1_product_sale_report", "/v1/product-sale-report") config.add_route("product_sale_report", "/product-sale-report") config.add_view( - "barker.views.home", route_name="product_sale_report", request_method="GET", permission="Sales Detail", + "barker.views.home", + route_name="product_sale_report", + request_method="GET", + permission="Sales Detail", ) config.add_route("v1_bill_settlement_report", "/v1/bill-settlement-report") config.add_route("bill_settlement_report", "/bill-settlement-report") config.add_view( - "barker.views.home", route_name="bill_settlement_report", request_method="GET", permission="Bill Details", + "barker.views.home", + route_name="bill_settlement_report", + request_method="GET", + permission="Bill Details", ) config.add_route("v1_beer_consumption_report", "/v1/beer-consumption-report") config.add_route("beer_consumption_report", "/beer-consumption-report") config.add_view( - "barker.views.home", route_name="beer_consumption_report", request_method="GET", permission="Beer Consumption", + "barker.views.home", + route_name="beer_consumption_report", + request_method="GET", + permission="Beer Consumption", ) config.add_route("v1_discount_report", "/v1/discount-report") config.add_route("discount_report", "/discount-report") config.add_view( - "barker.views.home", route_name="discount_report", request_method="GET", permission="Discount Report", + "barker.views.home", + route_name="discount_report", + request_method="GET", + permission="Discount Report", ) # config.add_route("v1_bills_new", "/v1/bills/new") @@ -293,15 +446,24 @@ def includeme(config): config.add_route("v1_customers_list", "/v1/customers") config.add_route("customers_new", "/customers/new") config.add_view( - "barker.views.home", route_name="customers_new", request_method="GET", permission="Customers", + "barker.views.home", + route_name="customers_new", + request_method="GET", + permission="Customers", ) config.add_route("customers_id", "/customers/{id}") config.add_view( - "barker.views.home", route_name="customers_id", request_method="GET", permission="Customers", + "barker.views.home", + route_name="customers_id", + request_method="GET", + permission="Customers", ) config.add_route("customers_list", "/customers") config.add_view( - "barker.views.home", route_name="customers_list", request_method="GET", permission="Authenticated", + "barker.views.home", + route_name="customers_list", + request_method="GET", + permission="Authenticated", ) config.add_route("v1_reprint", "/v1/reprint/{id}") diff --git a/barker/barker/schemas/auth.py b/barker/barker/schemas/auth.py index 2fca63f..c8a024f 100644 --- a/barker/barker/schemas/auth.py +++ b/barker/barker/schemas/auth.py @@ -1,9 +1,10 @@ import uuid -from typing import List, Optional + from datetime import datetime -from pydantic import BaseModel +from typing import List, Optional from barker.schemas import to_camel +from pydantic import BaseModel class ClientIn(BaseModel): diff --git a/barker/barker/schemas/customer.py b/barker/barker/schemas/customer.py index 2dd35b7..2e1534f 100644 --- a/barker/barker/schemas/customer.py +++ b/barker/barker/schemas/customer.py @@ -1,11 +1,11 @@ import uuid -from typing import Optional, List -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.product import ProductLink +from pydantic import BaseModel, Field class CustomerIn(BaseModel): diff --git a/barker/barker/schemas/device.py b/barker/barker/schemas/device.py index 1da7d11..db71773 100644 --- a/barker/barker/schemas/device.py +++ b/barker/barker/schemas/device.py @@ -1,10 +1,10 @@ import uuid -from typing import Optional -from pydantic import BaseModel, Field +from typing import Optional from barker.schemas import to_camel from barker.schemas.section import SectionLink +from pydantic import BaseModel, Field class DeviceIn(BaseModel): diff --git a/barker/barker/schemas/guest_book.py b/barker/barker/schemas/guest_book.py index 4bb74d4..eb7610a 100644 --- a/barker/barker/schemas/guest_book.py +++ b/barker/barker/schemas/guest_book.py @@ -1,9 +1,8 @@ import uuid -from pydantic import BaseModel, Field - from barker.schemas import to_camel from barker.schemas.customer import CustomerIn +from pydantic import BaseModel, Field class GuestBookIn(CustomerIn): diff --git a/barker/barker/schemas/master.py b/barker/barker/schemas/master.py index bcfc26b..3233abb 100644 --- a/barker/barker/schemas/master.py +++ b/barker/barker/schemas/master.py @@ -1,24 +1,36 @@ import uuid -from typing import Optional + from datetime import date, datetime from decimal import Decimal - -from pydantic import BaseModel, Field, validator +from typing import Optional from barker.schemas import to_camel -from barker.schemas.tax import TaxLink, TaxIn, Tax # noqa: F401 -from barker.schemas.sale_category import SaleCategoryLink, SaleCategoryIn, SaleCategory # noqa: F401 -from barker.schemas.customer import CustomerIn, Customer # noqa: F401 -from barker.schemas.guest_book import GuestBookIn, GuestBook # noqa: F401 -from barker.schemas.menu_category import MenuCategoryLink, MenuCategoryIn, MenuCategory # noqa: F401 -from barker.schemas.product import ProductLink, ProductIn, Product # noqa: F401 -from barker.schemas.modifier_category import ModifierCategoryLink, ModifierCategoryIn, ModifierCategory # noqa: F401 -from barker.schemas.modifier import ModifierLink, ModifierIn, Modifier # noqa: F401 -from barker.schemas.printer import PrinterLink, PrinterIn, Printer # noqa: F401 -from barker.schemas.section import SectionLink, SectionIn, Section # noqa: F401 -from barker.schemas.device import DeviceLink, DeviceIn, Device # noqa: F401 +from barker.schemas.customer import Customer, CustomerIn # noqa: F401 +from barker.schemas.device import Device, DeviceIn, DeviceLink # noqa: F401 +from barker.schemas.guest_book import GuestBook, GuestBookIn # noqa: F401 +from barker.schemas.menu_category import ( # noqa: F401 + MenuCategory, + MenuCategoryIn, + MenuCategoryLink, +) +from barker.schemas.modifier import Modifier, ModifierIn, ModifierLink # noqa: F401 +from barker.schemas.modifier_category import ( # noqa: F401 + ModifierCategory, + ModifierCategoryIn, + ModifierCategoryLink, +) +from barker.schemas.printer import Printer, PrinterIn, PrinterLink # noqa: F401 +from barker.schemas.product import Product, ProductIn, ProductLink # noqa: F401 +from barker.schemas.sale_category import ( # noqa: F401 + SaleCategory, + SaleCategoryIn, + SaleCategoryLink, +) +from barker.schemas.section import Section, SectionIn, SectionLink # noqa: F401 from barker.schemas.section_printer import SectionPrinter # noqa: F401 -from barker.schemas.table import TableLink, TableIn, Table # noqa: F401 +from barker.schemas.table import Table, TableIn, TableLink # noqa: F401 +from barker.schemas.tax import Tax, TaxIn, TaxLink # noqa: F401 +from pydantic import BaseModel, Field, validator class AccountBase(BaseModel): diff --git a/barker/barker/schemas/menu_category.py b/barker/barker/schemas/menu_category.py index 14157d3..cf7b937 100644 --- a/barker/barker/schemas/menu_category.py +++ b/barker/barker/schemas/menu_category.py @@ -1,11 +1,11 @@ import uuid -from typing import Optional, List -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.product import ProductLink +from pydantic import BaseModel, Field class MenuCategoryIn(BaseModel): @@ -36,5 +36,3 @@ class MenuCategoryLink(BaseModel): class Config: fields = {"id_": "id"} - - diff --git a/barker/barker/schemas/merge_move.py b/barker/barker/schemas/merge_move.py index a2144aa..3c65bf3 100644 --- a/barker/barker/schemas/merge_move.py +++ b/barker/barker/schemas/merge_move.py @@ -1,8 +1,7 @@ import uuid -from pydantic import BaseModel - from barker.schemas import to_camel +from pydantic import BaseModel class MergeKot(BaseModel): diff --git a/barker/barker/schemas/modifier.py b/barker/barker/schemas/modifier.py index 3e96890..97a02db 100644 --- a/barker/barker/schemas/modifier.py +++ b/barker/barker/schemas/modifier.py @@ -1,11 +1,11 @@ import uuid -from typing import Optional -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import Optional from barker.schemas import to_camel from barker.schemas.modifier_category import ModifierCategoryLink +from pydantic import BaseModel, Field class ModifierIn(BaseModel): diff --git a/barker/barker/schemas/modifier_category.py b/barker/barker/schemas/modifier_category.py index 2ef6830..077cda9 100644 --- a/barker/barker/schemas/modifier_category.py +++ b/barker/barker/schemas/modifier_category.py @@ -1,10 +1,10 @@ import uuid -from typing import Optional, List -from pydantic import BaseModel, Field +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.menu_category import MenuCategoryLink +from pydantic import BaseModel, Field class ModifierCategoryIn(BaseModel): diff --git a/barker/barker/schemas/printer.py b/barker/barker/schemas/printer.py index 775b12b..23d0e9e 100644 --- a/barker/barker/schemas/printer.py +++ b/barker/barker/schemas/printer.py @@ -1,9 +1,9 @@ import uuid + from typing import Optional -from pydantic import BaseModel, Field - from barker.schemas import to_camel +from pydantic import BaseModel, Field class PrinterIn(BaseModel): diff --git a/barker/barker/schemas/product.py b/barker/barker/schemas/product.py index dae2919..aab383e 100644 --- a/barker/barker/schemas/product.py +++ b/barker/barker/schemas/product.py @@ -1,10 +1,11 @@ import uuid -from typing import Optional, List + from decimal import Decimal -from pydantic import BaseModel, Field +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.sale_category import SaleCategoryLink +from pydantic import BaseModel, Field class ProductLink(BaseModel): @@ -16,7 +17,7 @@ class ProductLink(BaseModel): fields = {"id_": "id"} -class MenuCategoryLink(BaseModel): # Hack to prevent circular error +class MenuCategoryLink(BaseModel): # Hack to prevent circular error id_: uuid.UUID = Field(...) products: Optional[List[ProductLink]] @@ -29,7 +30,7 @@ class ProductIn(BaseModel): units: str menu_category: MenuCategoryLink = Field(...) sale_category: SaleCategoryLink = Field(...) - price: Decimal # = Field(ge=0, multiple_of=0.01, default=0) + price: Decimal # = Field(ge=0, multiple_of=0.01, default=0) has_happy_hour: bool is_not_available: bool quantity: Decimal = Field(ge=0, multiple_of=0.01, default=0) diff --git a/barker/barker/schemas/receive_payment.py b/barker/barker/schemas/receive_payment.py index e4d1ca0..97317c4 100644 --- a/barker/barker/schemas/receive_payment.py +++ b/barker/barker/schemas/receive_payment.py @@ -1,8 +1,7 @@ import uuid -from typing import Optional, List -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.customer import CustomerLink @@ -10,6 +9,7 @@ from barker.schemas.modifier import ModifierLink from barker.schemas.product import ProductLink from barker.schemas.table import TableLink from barker.schemas.tax import TaxLink +from pydantic import BaseModel, Field class ReceivePaymentItem(BaseModel): diff --git a/barker/barker/schemas/sale_category.py b/barker/barker/schemas/sale_category.py index 8e9d7fe..117798d 100644 --- a/barker/barker/schemas/sale_category.py +++ b/barker/barker/schemas/sale_category.py @@ -1,8 +1,8 @@ import uuid -from pydantic import BaseModel, Field from barker.schemas import to_camel from barker.schemas.tax import TaxLink +from pydantic import BaseModel, Field class SaleCategoryIn(BaseModel): @@ -29,5 +29,3 @@ class SaleCategoryLink(BaseModel): class Config: fields = {"id_": "id"} - - diff --git a/barker/barker/schemas/section.py b/barker/barker/schemas/section.py index e1a445d..2bd1bf3 100644 --- a/barker/barker/schemas/section.py +++ b/barker/barker/schemas/section.py @@ -1,9 +1,9 @@ import uuid + from typing import Optional -from pydantic import BaseModel, Field - from barker.schemas import to_camel +from pydantic import BaseModel, Field class SectionIn(BaseModel): diff --git a/barker/barker/schemas/section_printer.py b/barker/barker/schemas/section_printer.py index b52fd5b..cc4d49b 100644 --- a/barker/barker/schemas/section_printer.py +++ b/barker/barker/schemas/section_printer.py @@ -1,9 +1,9 @@ import uuid + from typing import Optional -from pydantic import BaseModel, Field - from barker.schemas import to_camel +from pydantic import BaseModel, Field class MenuCategoryLink(BaseModel): diff --git a/barker/barker/schemas/split.py b/barker/barker/schemas/split.py index 752d9f4..ab38df3 100644 --- a/barker/barker/schemas/split.py +++ b/barker/barker/schemas/split.py @@ -1,9 +1,9 @@ import uuid + from typing import List -from pydantic import BaseModel - from barker.schemas import to_camel +from pydantic import BaseModel class Split(BaseModel): diff --git a/barker/barker/schemas/table.py b/barker/barker/schemas/table.py index e0f1150..ed55f1b 100644 --- a/barker/barker/schemas/table.py +++ b/barker/barker/schemas/table.py @@ -1,10 +1,10 @@ import uuid -from typing import Optional -from pydantic import BaseModel, Field +from typing import Optional from barker.schemas import to_camel from barker.schemas.section import SectionLink +from pydantic import BaseModel, Field class TableIn(BaseModel): diff --git a/barker/barker/schemas/tax.py b/barker/barker/schemas/tax.py index 6490cde..f0c41a3 100644 --- a/barker/barker/schemas/tax.py +++ b/barker/barker/schemas/tax.py @@ -1,10 +1,10 @@ import uuid -from typing import Optional -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import Optional from barker.schemas import to_camel +from pydantic import BaseModel, Field class TaxIn(BaseModel): @@ -33,5 +33,3 @@ class TaxLink(BaseModel): class Config: fields = {"id_": "id"} - - diff --git a/barker/barker/schemas/voucher.py b/barker/barker/schemas/voucher.py index d95e398..3caefae 100644 --- a/barker/barker/schemas/voucher.py +++ b/barker/barker/schemas/voucher.py @@ -1,8 +1,7 @@ import uuid -from typing import Optional, List -from decimal import Decimal -from pydantic import BaseModel, Field +from decimal import Decimal +from typing import List, Optional from barker.schemas import to_camel from barker.schemas.customer import CustomerLink @@ -10,6 +9,7 @@ from barker.schemas.modifier import ModifierLink from barker.schemas.product import ProductLink from barker.schemas.table import TableLink from barker.schemas.tax import TaxLink +from pydantic import BaseModel, Field class Inventory(BaseModel): diff --git a/barker/barker/scripts/fixtures.py b/barker/barker/scripts/fixtures.py index c7ec417..ab09160 100644 --- a/barker/barker/scripts/fixtures.py +++ b/barker/barker/scripts/fixtures.py @@ -2,33 +2,25 @@ import os import sys import uuid -import transaction -from pyramid.paster import get_appsettings, setup_logging -from pyramid.scripts.common import parse_vars - from barker.models import ( Customer, DbSetting, + ModifierCategory, Permission, + Role, + Section, + SettleOption, User, get_engine, get_session_factory, get_tm_session, - SettleOption, - Role, - Section, - ModifierCategory, ) def usage(argv): cmd = os.path.basename(argv[0]) - print("usage: %s [var=value]\n" '(example: "%s development.ini")' % (cmd, cmd)) + print( + "usage: %s [var=value]\n" + '(example: "%s development.ini")' % (cmd, cmd) + ) sys.exit(1) - - -def main(argv=sys.argv): - with transaction.manager: - - - diff --git a/barker/barker/scripts/initializedb.py b/barker/barker/scripts/initializedb.py index b03a0de..47c02cc 100644 --- a/barker/barker/scripts/initializedb.py +++ b/barker/barker/scripts/initializedb.py @@ -1,20 +1,6 @@ import os import sys -from pyramid.paster import ( - get_appsettings, - setup_logging, -) - -from pyramid.scripts.common import parse_vars - -from barker.models.meta import Base -from barker.models import ( - get_engine, - get_session_factory, - get_tm_session, -) - from barker.models import ( Client, Customer, @@ -35,23 +21,32 @@ from barker.models import ( Product, Reprint, Role, - role_permissions, SaleCategory, Section, SectionPrinter, - SettleOption, Settlement, + SettleOption, Tax, User, - user_roles, Voucher, VoucherType, + get_engine, + get_session_factory, + get_tm_session, + role_permissions, + user_roles, ) +from barker.models.meta import Base +from pyramid.paster import get_appsettings, setup_logging +from pyramid.scripts.common import parse_vars def usage(argv): cmd = os.path.basename(argv[0]) - print("usage: %s [var=value]\n" '(example: "%s development.ini")' % (cmd, cmd)) + print( + "usage: %s [var=value]\n" + '(example: "%s development.ini")' % (cmd, cmd) + ) sys.exit(1) diff --git a/barker/barker/subscribers.py b/barker/barker/subscribers.py index 28b98a6..36638e4 100644 --- a/barker/barker/subscribers.py +++ b/barker/barker/subscribers.py @@ -1,10 +1,17 @@ -from pyramid.events import subscriber, NewRequest -from pyramid.httpexceptions import HTTPServiceUnavailable from barker.models.master import DbSetting +from pyramid.events import NewRequest, subscriber +from pyramid.httpexceptions import HTTPServiceUnavailable @subscriber(NewRequest) def maintenance_mode(event): - maintenance = event.request.dbsession.query(DbSetting).filter(DbSetting.name == "Maintenance").first() - if maintenance is not None and maintenance.data != event.request.authenticated_userid: + maintenance = ( + event.request.dbsession.query(DbSetting) + .filter(DbSetting.name == "Maintenance") + .first() + ) + if ( + maintenance is not None + and maintenance.data != event.request.authenticated_userid + ): raise HTTPServiceUnavailable diff --git a/barker/barker/worker.py b/barker/barker/worker.py index 82285a1..c650506 100644 --- a/barker/barker/worker.py +++ b/barker/barker/worker.py @@ -1,11 +1,13 @@ import re import socket import sys + from celery import Celery from celery.utils.log import get_task_logger + # Create the celery app and get the logger -celery_app = Celery('tasks', broker='pyamqp://guest@localhost//') +celery_app = Celery("tasks", broker="pyamqp://guest@localhost//") logger = get_task_logger(__name__) @@ -25,4 +27,5 @@ def sent_to_printer(data: str, address: str, cut_code: str): # finally: # s.close() -# celery --app=barker.worker.celery_app worker -c 2 --loglevel=INFO \ No newline at end of file + +# celery --app=barker.worker.celery_app worker -c 2 --loglevel=INFO diff --git a/bookie/src/app/app-routing.module.ts b/bookie/src/app/app-routing.module.ts index ef705d8..cb67191 100644 --- a/bookie/src/app/app-routing.module.ts +++ b/bookie/src/app/app-routing.module.ts @@ -1,107 +1,127 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import {LoginComponent} from './auth/login/login.component'; -import {LogoutComponent} from './auth/logout/logout.component'; -import {HomeComponent} from './home/home.component'; + +import { LoginComponent } from './auth/login/login.component'; +import { LogoutComponent } from './auth/logout/logout.component'; +import { HomeComponent } from './home/home.component'; const routes: Routes = [ { path: 'beer-consumption-report', - loadChildren: () => import('./beer-consumption-report/beer-consumption-report.module').then(mod => mod.BeerConsumptionReportModule) + loadChildren: () => + import('./beer-consumption-report/beer-consumption-report.module').then( + (mod) => mod.BeerConsumptionReportModule, + ), }, { path: 'bill-settlement-report', - loadChildren: () => import('./bill-settlement-report/bill-settlement-report.module').then(mod => mod.BillSettlementReportModule) + loadChildren: () => + import('./bill-settlement-report/bill-settlement-report.module').then( + (mod) => mod.BillSettlementReportModule, + ), }, { path: 'cashier-report', - loadChildren: () => import('./cashier-report/cashier-report.module').then(mod => mod.CashierReportModule) + loadChildren: () => + import('./cashier-report/cashier-report.module').then((mod) => mod.CashierReportModule), }, { path: 'devices', - loadChildren: () => import('./devices/devices.module').then(mod => mod.DevicesModule) + loadChildren: () => import('./devices/devices.module').then((mod) => mod.DevicesModule), }, { path: 'discount-report', - loadChildren: () => import('./discount-report/discount-report.module').then(mod => mod.DiscountReportModule) + loadChildren: () => + import('./discount-report/discount-report.module').then((mod) => mod.DiscountReportModule), }, { path: 'guest-book', - loadChildren: () => import('./guest-book/guest-book.module').then(mod => mod.GuestBookModule) + loadChildren: () => import('./guest-book/guest-book.module').then((mod) => mod.GuestBookModule), }, { path: 'modifiers', - loadChildren: () => import('./modifiers/modifiers.module').then(mod => mod.ModifiersModule) + loadChildren: () => import('./modifiers/modifiers.module').then((mod) => mod.ModifiersModule), }, { path: 'modifier-categories', - loadChildren: () => import('./modifier-categories/modifier-categories.module').then(mod => mod.ModifierCategoriesModule) + loadChildren: () => + import('./modifier-categories/modifier-categories.module').then( + (mod) => mod.ModifierCategoriesModule, + ), }, { path: 'printers', - loadChildren: () => import('./printers/printers.module').then(mod => mod.PrintersModule) + loadChildren: () => import('./printers/printers.module').then((mod) => mod.PrintersModule), }, { path: 'products', - loadChildren: () => import('./product/products.module').then(mod => mod.ProductsModule) + loadChildren: () => import('./product/products.module').then((mod) => mod.ProductsModule), }, { path: 'product-sale-report', - loadChildren: () => import('./product-sale-report/product-sale-report.module').then(mod => mod.ProductSaleReportModule) + loadChildren: () => + import('./product-sale-report/product-sale-report.module').then( + (mod) => mod.ProductSaleReportModule, + ), }, { path: 'menu-categories', - loadChildren: () => import('./menu-category/menu-categories.module').then(mod => mod.MenuCategoriesModule) + loadChildren: () => + import('./menu-category/menu-categories.module').then((mod) => mod.MenuCategoriesModule), }, { path: 'roles', - loadChildren: () => import('./roles/roles.module').then(mod => mod.RolesModule) + loadChildren: () => import('./roles/roles.module').then((mod) => mod.RolesModule), }, { path: 'sales', - loadChildren: () => import('./sales/sales.module').then(mod => mod.SalesModule) + loadChildren: () => import('./sales/sales.module').then((mod) => mod.SalesModule), }, { path: 'sale-report', - loadChildren: () => import('./sale-report/sale-report.module').then(mod => mod.SaleReportModule) + loadChildren: () => + import('./sale-report/sale-report.module').then((mod) => mod.SaleReportModule), }, { path: 'sale-categories', - loadChildren: () => import('./sale-category/sale-categories.module').then(mod => mod.SaleCategoriesModule) + loadChildren: () => + import('./sale-category/sale-categories.module').then((mod) => mod.SaleCategoriesModule), }, { path: 'sections', - loadChildren: () => import('./sections/sections.module').then(mod => mod.SectionsModule) + loadChildren: () => import('./sections/sections.module').then((mod) => mod.SectionsModule), }, { path: 'section-printers', - loadChildren: () => import('./section-printers/section-printers.module').then(mod => mod.SectionPrintersModule) + loadChildren: () => + import('./section-printers/section-printers.module').then((mod) => mod.SectionPrintersModule), }, { path: 'tables', - loadChildren: () => import('./tables/tables.module').then(mod => mod.TableModule) + loadChildren: () => import('./tables/tables.module').then((mod) => mod.TableModule), }, { path: 'taxes', - loadChildren: () => import('./taxes/taxes.module').then(mod => mod.TaxesModule) + loadChildren: () => import('./taxes/taxes.module').then((mod) => mod.TaxesModule), }, { path: 'tax-report', - loadChildren: () => import('./tax-report/tax-report.module').then(mod => mod.TaxReportModule) + loadChildren: () => import('./tax-report/tax-report.module').then((mod) => mod.TaxReportModule), }, { path: 'users', - loadChildren: () => import('./users/users.module').then(mod => mod.UsersModule) + loadChildren: () => import('./users/users.module').then((mod) => mod.UsersModule), }, - {path: 'login', component: LoginComponent}, - {path: 'logout', component: LogoutComponent}, - {path: '', component: HomeComponent}, + { path: 'login', component: LoginComponent }, + { path: 'logout', component: LogoutComponent }, + { path: '', component: HomeComponent }, ]; @NgModule({ - imports: [RouterModule.forRoot(routes, - { - onSameUrlNavigation: 'reload', - })], - exports: [RouterModule] + imports: [ + RouterModule.forRoot(routes, { + onSameUrlNavigation: 'reload', + }), + ], + exports: [RouterModule], }) -export class AppRoutingModule { } +export class AppRoutingModule {} diff --git a/bookie/src/app/app.component.ts b/bookie/src/app/app.component.ts index e4b5a1e..9d2cb84 100644 --- a/bookie/src/app/app.component.ts +++ b/bookie/src/app/app.component.ts @@ -3,7 +3,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] + styleUrls: ['./app.component.css'], }) export class AppComponent { title = 'bookie'; diff --git a/bookie/src/app/app.module.ts b/bookie/src/app/app.module.ts index 5ccd61c..0682ebb 100644 --- a/bookie/src/app/app.module.ts +++ b/bookie/src/app/app.module.ts @@ -1,12 +1,10 @@ -import { BrowserModule } from '@angular/platform-browser'; -import { LOCALE_ID, NgModule } from '@angular/core'; +import { LayoutModule } from '@angular/cdk/layout'; import { registerLocaleData } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import enIN from '@angular/common/locales/en-IN'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { LOCALE_ID, NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatDialogModule } from '@angular/material/dialog'; @@ -17,27 +15,23 @@ import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatMenuModule } from '@angular/material/menu'; import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { LayoutModule } from '@angular/cdk/layout'; -import { LogoutComponent } from './auth/logout/logout.component'; -import { LoginComponent } from './auth/login/login.component'; -import { HomeComponent } from './home/home.component'; -import { CoreModule } from './core/core.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { SharedModule } from './shared/shared.module'; -import { FlexLayoutModule } from '@angular/flex-layout'; import { MatToolbarModule } from '@angular/material/toolbar'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { LoginComponent } from './auth/login/login.component'; +import { LogoutComponent } from './auth/logout/logout.component'; +import { CoreModule } from './core/core.module'; +import { HomeComponent } from './home/home.component'; import { NavBarComponent } from './nav-bar/nav-bar.component'; +import { SharedModule } from './shared/shared.module'; registerLocaleData(enIN); @NgModule({ - declarations: [ - AppComponent, - LoginComponent, - LogoutComponent, - HomeComponent, - NavBarComponent - ], + declarations: [AppComponent, LoginComponent, LogoutComponent, HomeComponent, NavBarComponent], imports: [ BrowserModule, AppRoutingModule, @@ -58,11 +52,9 @@ registerLocaleData(enIN); LayoutModule, ReactiveFormsModule, CoreModule, - SharedModule + SharedModule, ], - providers: [ - {provide: LOCALE_ID, useValue: 'en-IN'}, - ], - bootstrap: [AppComponent] + providers: [{ provide: LOCALE_ID, useValue: 'en-IN' }], + bootstrap: [AppComponent], }) -export class AppModule { } +export class AppModule {} diff --git a/bookie/src/app/auth/auth-guard.service.ts b/bookie/src/app/auth/auth-guard.service.ts index ddc84fb..7df8c60 100644 --- a/bookie/src/app/auth/auth-guard.service.ts +++ b/bookie/src/app/auth/auth-guard.service.ts @@ -1,26 +1,27 @@ import { Injectable } from '@angular/core'; import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { AuthService } from './auth.service'; import { ToasterService } from '../core/toaster.service'; -@Injectable({providedIn: 'root'}) +import { AuthService } from './auth.service'; + +@Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate { constructor( private router: Router, private authService: AuthService, - private toaster: ToasterService - ) { - } + private toaster: ToasterService, + ) {} canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - const user = this.authService.user; - const permission = (route.data['permission'] === undefined) ? route.data['permission'] : route.data['permission'] - .replace(/ /g, '-') - .toLowerCase(); + const { user } = this.authService; + const permission = + route.data.permission === undefined + ? route.data.permission + : route.data.permission.replace(/ /g, '-').toLowerCase(); if (!user) { // not logged in so redirect to login page with the return url - this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}}); + this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } }); return false; } if (permission !== undefined && user.perms.indexOf(permission) === -1) { @@ -29,6 +30,5 @@ export class AuthGuard implements CanActivate { } // logged in so return true return true; - } } diff --git a/bookie/src/app/auth/auth.service.ts b/bookie/src/app/auth/auth.service.ts index 2f06431..341ec12 100644 --- a/bookie/src/app/auth/auth.service.ts +++ b/bookie/src/app/auth/auth.service.ts @@ -1,16 +1,16 @@ -import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { User } from '../core/user'; import { environment } from '../../environments/environment'; +import { User } from '../core/user'; const loginUrl = '/token'; const refreshUrl = '/refresh'; const JWT_USER = 'JWT_USER'; -@Injectable({providedIn: 'root'}) +@Injectable({ providedIn: 'root' }) export class AuthService { private currentUserSubject: BehaviorSubject; public currentUser: Observable; @@ -20,16 +20,37 @@ export class AuthService { this.currentUser = this.currentUserSubject.asObservable(); } + static parseJwt(token): User { + const base64Url = token.split('.')[1]; + const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + const jsonPayload = decodeURIComponent( + atob(base64) + .split('') + .map((c) => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`) + .join(''), + ); + + const decoded = JSON.parse(jsonPayload); + return new User({ + id: decoded.userId, + name: decoded.sub, + lockedOut: decoded.lockedOut, + perms: decoded.scopes, + access_token: token, + exp: decoded.exp, + ver: decoded.ver, + }); + } + checkStorage(): User { const existingToken: User = JSON.parse(localStorage.getItem(JWT_USER)); if (existingToken === null || Date.now() > existingToken.exp * 1000) { localStorage.removeItem(JWT_USER); this.currentUserSubject = new BehaviorSubject(null); return null; - } else { - this.currentUserSubject = new BehaviorSubject(existingToken); - return existingToken; } + this.currentUserSubject = new BehaviorSubject(existingToken); + return existingToken; } public get user(): User { @@ -57,37 +78,22 @@ export class AuthService { formData.append('password', password); formData.append('otp', otp); formData.append('grant_type', 'password'); - return this.http.post(loginUrl, formData) - .pipe(map(u => u.access_token)) - .pipe(map(u => this.parseJwt(u))) - .pipe(map(user => { - // store user details and jwt token in local storage to keep user logged in between page refreshes - localStorage.setItem(JWT_USER, JSON.stringify(user)); - this.currentUserSubject.next(user); - return user; - })); - } - - parseJwt(token): User { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }).join('')); - - const decoded = JSON.parse(jsonPayload); - return new User({ - id: decoded.userId, - name: decoded.sub, - lockedOut: decoded.lockedOut, - perms: decoded.scopes, - access_token: token, - exp: decoded.exp - }); + return this.http + .post(loginUrl, formData) + .pipe(map((u) => u.access_token)) + .pipe(map((u) => AuthService.parseJwt(u))) + .pipe( + map((user) => { + // store user details and jwt token in local storage to keep user logged in between page refreshes + localStorage.setItem(JWT_USER, JSON.stringify(user)); + this.currentUserSubject.next(user); + return user; + }), + ); } needsRefreshing(): boolean { - return Date.now() > (this.user.exp - (environment.ACCESS_TOKEN_REFRESH_MINUTES * 60)) * 1000; + return Date.now() > (this.user.exp - environment.ACCESS_TOKEN_REFRESH_MINUTES * 60) * 1000; } logout() { @@ -97,14 +103,17 @@ export class AuthService { } refreshToken() { - return this.http.post(refreshUrl, {}) - .pipe(map(u => u.access_token)) - .pipe(map(u => this.parseJwt(u))) - .pipe(map(user => { - // store user details and jwt token in local storage to keep user logged in between page refreshes - localStorage.setItem(JWT_USER, JSON.stringify(user)); - this.currentUserSubject.next(user); - return user; - })); + return this.http + .post(refreshUrl, {}) + .pipe(map((u) => u.access_token)) + .pipe(map((u) => AuthService.parseJwt(u))) + .pipe( + map((user) => { + // store user details and jwt token in local storage to keep user logged in between page refreshes + localStorage.setItem(JWT_USER, JSON.stringify(user)); + this.currentUserSubject.next(user); + return user; + }), + ); } } diff --git a/bookie/src/app/auth/login/login.component.html b/bookie/src/app/auth/login/login.component.html index 706f5f2..1a2e4d0 100644 --- a/bookie/src/app/auth/login/login.component.html +++ b/bookie/src/app/auth/login/login.component.html @@ -7,29 +7,48 @@
Username - +
Password - - {{hide ? 'visibility' : 'visibility_off'}} + + {{ + hide ? 'visibility' : 'visibility_off' + }}
-

Client ID: {{clientId}}

-
+

Client ID: {{ clientId }}

+
Otp - +
-
+
Client Name - +
diff --git a/bookie/src/app/auth/login/login.component.ts b/bookie/src/app/auth/login/login.component.ts index 8e7664e..06ed34c 100644 --- a/bookie/src/app/auth/login/login.component.ts +++ b/bookie/src/app/auth/login/login.component.ts @@ -1,14 +1,15 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { AuthService } from '../auth.service'; -import { ActivatedRoute, Router } from '@angular/router'; -import { ToasterService } from '../../core/toaster.service'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { ToasterService } from '../../core/toaster.service'; import { CookieService } from '../../shared/cookie.service'; +import { AuthService } from '../auth.service'; @Component({ selector: 'app-login', templateUrl: './login.component.html', - styleUrls: ['./login.component.css'] + styleUrls: ['./login.component.css'], }) export class LoginComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -18,12 +19,13 @@ export class LoginComponent implements OnInit, AfterViewInit { clientId: string; private returnUrl: string; - constructor(private route: ActivatedRoute, - private auth: AuthService, - private router: Router, - private toaster: ToasterService, - private cs: CookieService, - private fb: FormBuilder + constructor( + private route: ActivatedRoute, + private auth: AuthService, + private router: Router, + private toaster: ToasterService, + private cs: CookieService, + private fb: FormBuilder, ) { this.hide = true; this.showOtp = false; @@ -34,12 +36,12 @@ export class LoginComponent implements OnInit, AfterViewInit { this.form = this.fb.group({ username: '', password: '', - otp: '' + otp: '', }); } ngOnInit() { - this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + this.returnUrl = this.route.snapshot.queryParams.returnUrl || '/'; } ngAfterViewInit() { @@ -50,22 +52,23 @@ export class LoginComponent implements OnInit, AfterViewInit { login(): void { const formModel = this.form.value; - const username = formModel.username; - const password = formModel.password; - const otp = formModel.otp; - this.auth.login(username, password, otp) + const { username } = formModel; + const { password } = formModel; + const { otp } = formModel; + this.auth + .login(username, password, otp) // .pipe(first()) .subscribe( - data => { + () => { this.router.navigate([this.returnUrl]); }, (error) => { - if (error.status === 401 && 'Client is not registered' === error.error.detail) { + if (error.status === 401 && error.error.detail === 'Client is not registered') { this.showOtp = true; this.clientId = this.cs.getCookie('client_id'); } this.toaster.show('Danger', error.error.details); - } - ) + }, + ); } } diff --git a/bookie/src/app/auth/logout/logout.component.ts b/bookie/src/app/auth/logout/logout.component.ts index b3e36ae..fc2fb68 100644 --- a/bookie/src/app/auth/logout/logout.component.ts +++ b/bookie/src/app/auth/logout/logout.component.ts @@ -1,19 +1,15 @@ import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; + import { AuthService } from '../auth.service'; -import { ToasterService } from '../../core/toaster.service'; @Component({ selector: 'app-logout', - template: '' + template: '', }) export class LogoutComponent implements OnInit { - - constructor(private auth: AuthService) { - } + constructor(private auth: AuthService) {} ngOnInit() { this.auth.logout(); } - } 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 index e578596..d16faeb 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { BeerConsumptionReportItem } from './beer-consumption-report'; +import { BeerConsumptionReportItem } from './beer-consumption-report-item'; export class BeerConsumptionReportDataSource extends DataSource { - constructor(public data: BeerConsumptionReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class BeerConsumptionReportDataSource extends DataSource { beforeEach(() => { TestBed.configureTestingModule({ - providers: [BeerConsumptionReportResolver] + providers: [BeerConsumptionReportResolver], }); }); - it('should be created', inject([BeerConsumptionReportResolver], (service: BeerConsumptionReportResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [BeerConsumptionReportResolver], + (service: BeerConsumptionReportResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts index e5566ae..34e6c40 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {BeerConsumptionReport} from './beer-consumption-report'; -import {BeerConsumptionReportService} from './beer-consumption-report.service'; +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'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class BeerConsumptionReportResolver implements Resolve { + constructor(private ser: BeerConsumptionReportService) {} - constructor(private ser: BeerConsumptionReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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-consumption-report/beer-consumption-report-routing.module.spec.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report-routing.module.spec.ts index cc42b81..c9a8476 100644 --- 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 @@ -1,4 +1,4 @@ -import {BeerConsumptionReportRoutingModule} from './beer-consumption-report-routing.module'; +import { BeerConsumptionReportRoutingModule } from './beer-consumption-report-routing.module'; describe('BeerConsumptionReportRoutingModule', () => { let pbeerConsumptionReportRoutingModule: BeerConsumptionReportRoutingModule; 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 index 6ce655a..74fbee8 100644 --- 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 @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { BeerConsumptionReportResolver } from './beer-consumption-report-resolver.service'; + 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 = [ @@ -11,27 +13,18 @@ const beerConsumptionReportRoutes: Routes = [ component: BeerConsumptionReportComponent, canActivate: [AuthGuard], data: { - permission: 'Beer Consumption Report' + permission: 'Beer Consumption Report', }, resolve: { - info: BeerConsumptionReportResolver + info: BeerConsumptionReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(beerConsumptionReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - BeerConsumptionReportResolver - ] + imports: [CommonModule, RouterModule.forChild(beerConsumptionReportRoutes)], + exports: [RouterModule], + providers: [BeerConsumptionReportResolver], }) -export class BeerConsumptionReportRoutingModule { -} +export class BeerConsumptionReportRoutingModule {} diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html b/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html index c0029d5..131e731 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report.component.html @@ -7,17 +7,34 @@
-
+
- + - + @@ -25,33 +42,32 @@
- Time - {{row.date}} + {{ row.date }} - - {{col}} - {{row[col]}} + + {{ col }} + {{ row[col] }} - - - - - + + + + + - - - - - + + + + + - - + + 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 index 72cbd10..1d2e7f7 100644 --- 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 @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {BeerConsumptionReportComponent} from './beer-consumption-report.component'; +import { BeerConsumptionReportComponent } from './beer-consumption-report.component'; describe('BeerConsumptionReportComponent', () => { let component: BeerConsumptionReportComponent; @@ -8,9 +8,8 @@ describe('BeerConsumptionReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [BeerConsumptionReportComponent] - }) - .compileComponents(); + declarations: [BeerConsumptionReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts index 948160e..8ddc0c0 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { BeerConsumptionReportDataSource } from './beer-consumption-report-datasource'; -import { BeerConsumptionReport } from './beer-consumption-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { BeerConsumptionReport } from './beer-consumption-report'; +import { BeerConsumptionReportDataSource } from './beer-consumption-report-datasource'; + @Component({ selector: 'app-beer-consumption-report', templateUrl: './beer-consumption-report.component.html', - styleUrls: ['./beer-consumption-report.component.css'] + styleUrls: ['./beer-consumption-report.component.css'], }) export class BeerConsumptionReportComponent implements OnInit { dataSource: BeerConsumptionReportDataSource; @@ -19,28 +21,25 @@ export class BeerConsumptionReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns: string[] = ['date']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: BeerConsumptionReport }) => { - 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.route.data.subscribe((data: { info: BeerConsumptionReport }) => { + 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); + }); } show() { @@ -48,15 +47,15 @@ export class BeerConsumptionReportComponent implements OnInit { this.router.navigate(['beer-consumption-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -65,18 +64,23 @@ export class BeerConsumptionReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } exportCsv() { - const headers = this.info.headers.reduce((a, c) => { - a[c] = c; - return a - }, { - Date: 'date' + const headers = this.info.headers.reduce( + (a, c) => { + a[c] = c; + return a; + }, + { + Date: 'date', + }, + ); + const csvData = new Blob([this.toCsv.toCsv(headers, this.info.data)], { + type: 'text/csv;charset=utf-8;', }); - const csvData = new Blob([this.toCsv.toCsv(headers, this.info.data)], {type: 'text/csv;charset=utf-8;'}); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'beer-consumption-report.csv'); 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 index 75de692..1135827 100644 --- 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 @@ -1,4 +1,4 @@ -import {BeerConsumptionReportModule} from './beer-consumption-report.module'; +import { BeerConsumptionReportModule } from './beer-consumption-report.module'; describe('BeerConsumptionReportModule', () => { let pbeerConsumptionReportModule: BeerConsumptionReportModule; diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts index a6ba5d9..aa549e4 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { BeerConsumptionReportRoutingModule } from './beer-consumption-report-routing.module'; import { BeerConsumptionReportComponent } from './beer-consumption-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - BeerConsumptionReportRoutingModule - ], - declarations: [ - BeerConsumptionReportComponent + BeerConsumptionReportRoutingModule, ], + declarations: [BeerConsumptionReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class BeerConsumptionReportModule { -} +export class BeerConsumptionReportModule {} 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 index eec1047..c727e58 100644 --- 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 @@ -1,15 +1,18 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {BeerConsumptionReportService} from './beer-consumption-report.service'; +import { BeerConsumptionReportService } from './beer-consumption-report.service'; describe('BeerConsumptionReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [BeerConsumptionReportService] + providers: [BeerConsumptionReportService], }); }); - it('should be created', inject([BeerConsumptionReportService], (service: BeerConsumptionReportService) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [BeerConsumptionReportService], + (service: BeerConsumptionReportService) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts index b289845..34b360b 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { BeerConsumptionReport } from './beer-consumption-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { BeerConsumptionReport } from './beer-consumption-report'; const url = '/api/beer-consumption-report'; const serviceName = 'BeerConsumptionReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class BeerConsumptionReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/beer-consumption-report/beer-consumption-report.ts b/bookie/src/app/beer-consumption-report/beer-consumption-report.ts index 967ecbe..2045890 100644 --- a/bookie/src/app/beer-consumption-report/beer-consumption-report.ts +++ b/bookie/src/app/beer-consumption-report/beer-consumption-report.ts @@ -1,8 +1,4 @@ -export class BeerConsumptionReportItem { - date: string; - name: string; - quantity: number; -} +import { BeerConsumptionReportItem } from './beer-consumption-report-item'; export class BeerConsumptionReport { startDate: string; diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report-datasource.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report-datasource.ts index 3467e1b..9e8a5b2 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report-datasource.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { BillSettlementReportItem } from './bill-settlement-report'; +import { BillSettlementReportItem } from './bill-settlement-report-item'; export class BillSettlementReportDataSource extends DataSource { - constructor(public data: BillSettlementReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class BillSettlementReportDataSource extends DataSource { beforeEach(() => { TestBed.configureTestingModule({ - providers: [BillSettlementReportResolver] + providers: [BillSettlementReportResolver], }); }); - it('should be created', inject([BillSettlementReportResolver], (service: BillSettlementReportResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [BillSettlementReportResolver], + (service: BillSettlementReportResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report-resolver.service.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report-resolver.service.ts index 9d903f6..46008df 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report-resolver.service.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {BillSettlementReport} from './bill-settlement-report'; -import {BillSettlementReportService} from './bill-settlement-report.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { BillSettlementReport } from './bill-settlement-report'; +import { BillSettlementReportService } from './bill-settlement-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class BillSettlementReportResolver implements Resolve { + constructor(private ser: BillSettlementReportService) {} - constructor(private ser: BillSettlementReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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/bill-settlement-report/bill-settlement-report-routing.module.spec.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.spec.ts index a3ef437..04a8d82 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.spec.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {BillSettlementReportRoutingModule} from './bill-settlement-report-routing.module'; +import { BillSettlementReportRoutingModule } from './bill-settlement-report-routing.module'; describe('BillSettlementReportRoutingModule', () => { let pbillSettlementReportRoutingModule: BillSettlementReportRoutingModule; diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.ts index cd8be85..fbe6eeb 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report-routing.module.ts @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { BillSettlementReportResolver } from './bill-settlement-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; + +import { BillSettlementReportResolver } from './bill-settlement-report-resolver.service'; import { BillSettlementReportComponent } from './bill-settlement-report.component'; const billSettlementReportRoutes: Routes = [ @@ -11,27 +13,18 @@ const billSettlementReportRoutes: Routes = [ component: BillSettlementReportComponent, canActivate: [AuthGuard], data: { - permission: 'Bill Settlement Report' + permission: 'Bill Settlement Report', }, resolve: { - info: BillSettlementReportResolver + info: BillSettlementReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(billSettlementReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - BillSettlementReportResolver - ] + imports: [CommonModule, RouterModule.forChild(billSettlementReportRoutes)], + exports: [RouterModule], + providers: [BillSettlementReportResolver], }) -export class BillSettlementReportRoutingModule { -} +export class BillSettlementReportRoutingModule {} diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.html b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.html index c4510e8..027bf97 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.html +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.html @@ -7,17 +7,34 @@
-
+
- + - + @@ -25,33 +42,32 @@
- Time - {{row.date}} + {{ row.date }} Bill ID - {{row.billId}} + {{ row.billId }} Amount - {{row.amount | number:'1.2-2'}} + {{ row.amount | number: '1.2-2' }} Settlement - {{row.settlement}} + {{ row.settlement }} - + diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.spec.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.spec.ts index 45a1cb0..95afcd3 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.spec.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {BillSettlementReportComponent} from './bill-settlement-report.component'; +import { BillSettlementReportComponent } from './bill-settlement-report.component'; describe('BillSettlementReportComponent', () => { let component: BillSettlementReportComponent; @@ -8,9 +8,8 @@ describe('BillSettlementReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [BillSettlementReportComponent] - }) - .compileComponents(); + declarations: [BillSettlementReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.ts index 12513e8..262fb71 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.component.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { BillSettlementReportDataSource } from './bill-settlement-report-datasource'; -import { BillSettlementReport } from './bill-settlement-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { BillSettlementReport } from './bill-settlement-report'; +import { BillSettlementReportDataSource } from './bill-settlement-report-datasource'; + @Component({ selector: 'app-bill-settlement-report', templateUrl: './bill-settlement-report.component.html', - styleUrls: ['./bill-settlement-report.component.css'] + styleUrls: ['./bill-settlement-report.component.css'], }) export class BillSettlementReportComponent implements OnInit { dataSource: BillSettlementReportDataSource; @@ -19,27 +21,24 @@ export class BillSettlementReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['date', 'billId', 'amount', 'settlement']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: BillSettlementReport }) => { - this.info = data.info; - this.form.setValue({ - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new BillSettlementReportDataSource(this.info.amounts); + this.route.data.subscribe((data: { info: BillSettlementReport }) => { + this.info = data.info; + this.form.setValue({ + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new BillSettlementReportDataSource(this.info.amounts); + }); } show() { @@ -47,15 +46,15 @@ export class BillSettlementReportComponent implements OnInit { this.router.navigate(['bill-settlement-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -64,7 +63,7 @@ export class BillSettlementReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } @@ -73,9 +72,11 @@ export class BillSettlementReportComponent implements OnInit { Date: 'date', BillID: 'billId', Amount: 'amount', - Settlement: 'settlement' + Settlement: 'settlement', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'bill-settlement-report.csv'); diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.module.spec.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.module.spec.ts index f874097..30ad474 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.module.spec.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.module.spec.ts @@ -1,4 +1,4 @@ -import {BillSettlementReportModule} from './bill-settlement-report.module'; +import { BillSettlementReportModule } from './bill-settlement-report.module'; describe('BillSettlementReportModule', () => { let pbillSettlementReportModule: BillSettlementReportModule; diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.module.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.module.ts index 6c5e54d..480aabd 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.module.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { BillSettlementReportRoutingModule } from './bill-settlement-report-routing.module'; import { BillSettlementReportComponent } from './bill-settlement-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - BillSettlementReportRoutingModule - ], - declarations: [ - BillSettlementReportComponent + BillSettlementReportRoutingModule, ], + declarations: [BillSettlementReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class BillSettlementReportModule { -} +export class BillSettlementReportModule {} diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.service.spec.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.service.spec.ts index 501c867..3515dfd 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.service.spec.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.service.spec.ts @@ -1,15 +1,18 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {BillSettlementReportService} from './bill-settlement-report.service'; +import { BillSettlementReportService } from './bill-settlement-report.service'; describe('BillSettlementReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [BillSettlementReportService] + providers: [BillSettlementReportService], }); }); - it('should be created', inject([BillSettlementReportService], (service: BillSettlementReportService) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [BillSettlementReportService], + (service: BillSettlementReportService) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.service.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.service.ts index 0f65648..5a5484e 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.service.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { BillSettlementReport } from './bill-settlement-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { BillSettlementReport } from './bill-settlement-report'; const url = '/api/bill-settlement-report'; const serviceName = 'BillSettlementReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class BillSettlementReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/bill-settlement-report/bill-settlement-report.ts b/bookie/src/app/bill-settlement-report/bill-settlement-report.ts index 4435a5a..68fe42f 100644 --- a/bookie/src/app/bill-settlement-report/bill-settlement-report.ts +++ b/bookie/src/app/bill-settlement-report/bill-settlement-report.ts @@ -1,9 +1,4 @@ -export class BillSettlementReportItem { - date: string; - billId: string; - amount: number; - settlement: string; -} +import { BillSettlementReportItem } from './bill-settlement-report-item'; export class BillSettlementReport { startDate: string; diff --git a/bookie/src/app/cashier-report/active-cashiers-resolver.service.spec.ts b/bookie/src/app/cashier-report/active-cashiers-resolver.service.spec.ts index 12b5d1d..f34e996 100644 --- a/bookie/src/app/cashier-report/active-cashiers-resolver.service.spec.ts +++ b/bookie/src/app/cashier-report/active-cashiers-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ActiveCashiersResolver} from './active-cashiers-resolver.service'; +import { ActiveCashiersResolver } from './active-cashiers-resolver.service'; describe('ActiveCashiersResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ActiveCashiersResolver] + providers: [ActiveCashiersResolver], }); }); diff --git a/bookie/src/app/cashier-report/active-cashiers-resolver.service.ts b/bookie/src/app/cashier-report/active-cashiers-resolver.service.ts index b9fc15f..b5824ae 100644 --- a/bookie/src/app/cashier-report/active-cashiers-resolver.service.ts +++ b/bookie/src/app/cashier-report/active-cashiers-resolver.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; -import { CashierReportService } from './cashier-report.service'; + import { User } from '../core/user'; +import { CashierReportService } from './cashier-report.service'; + @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ActiveCashiersResolver implements Resolve { + constructor(private ser: CashierReportService) {} - constructor(private ser: CashierReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const startDate = route.queryParamMap.get('startDate') || null; const finishDate = route.queryParamMap.get('finishDate') || null; return this.ser.activeCashiers(startDate, finishDate); diff --git a/bookie/src/app/cashier-report/cashier-report-datasource.ts b/bookie/src/app/cashier-report/cashier-report-datasource.ts index 7a14f63..f87c5c8 100644 --- a/bookie/src/app/cashier-report/cashier-report-datasource.ts +++ b/bookie/src/app/cashier-report/cashier-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { CashierReportDisplayItem } from './cashier-report'; +import { CashierReportDisplayItem } from './cashier-report-display-item'; export class CashierReportDataSource extends DataSource { - constructor(public data: CashierReportDisplayItem[]) { super(); } @@ -13,6 +12,5 @@ export class CashierReportDataSource extends DataSource { beforeEach(() => { TestBed.configureTestingModule({ - providers: [CashierReportResolver] + providers: [CashierReportResolver], }); }); diff --git a/bookie/src/app/cashier-report/cashier-report-resolver.service.ts b/bookie/src/app/cashier-report/cashier-report-resolver.service.ts index 7f0fa92..d66294c 100644 --- a/bookie/src/app/cashier-report/cashier-report-resolver.service.ts +++ b/bookie/src/app/cashier-report/cashier-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {CashierReport} from './cashier-report'; -import {CashierReportService} from './cashier-report.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { CashierReport } from './cashier-report'; +import { CashierReportService } from './cashier-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class CashierReportResolver implements Resolve { + constructor(private ser: CashierReportService) {} - constructor(private ser: CashierReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); const startDate = route.queryParamMap.get('startDate') || null; const finishDate = route.queryParamMap.get('finishDate') || null; diff --git a/bookie/src/app/cashier-report/cashier-report-routing.module.spec.ts b/bookie/src/app/cashier-report/cashier-report-routing.module.spec.ts index 274afe6..a3e052b 100644 --- a/bookie/src/app/cashier-report/cashier-report-routing.module.spec.ts +++ b/bookie/src/app/cashier-report/cashier-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {CashierReportRoutingModule} from './cashier-report-routing.module'; +import { CashierReportRoutingModule } from './cashier-report-routing.module'; describe('CashierReportRoutingModule', () => { let cashierReportRoutingModule: CashierReportRoutingModule; diff --git a/bookie/src/app/cashier-report/cashier-report-routing.module.ts b/bookie/src/app/cashier-report/cashier-report-routing.module.ts index bfea511..827287f 100644 --- a/bookie/src/app/cashier-report/cashier-report-routing.module.ts +++ b/bookie/src/app/cashier-report/cashier-report-routing.module.ts @@ -1,10 +1,12 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { CashierReportResolver } from './cashier-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; -import { CashierReportComponent } from './cashier-report.component'; + import { ActiveCashiersResolver } from './active-cashiers-resolver.service'; +import { CashierReportResolver } from './cashier-report-resolver.service'; +import { CashierReportComponent } from './cashier-report.component'; const cashierReportRoutes: Routes = [ { @@ -12,41 +14,32 @@ const cashierReportRoutes: Routes = [ component: CashierReportComponent, canActivate: [AuthGuard], data: { - permission: 'Cashier Report' + permission: 'Cashier Report', }, resolve: { info: CashierReportResolver, - cashiers: ActiveCashiersResolver + cashiers: ActiveCashiersResolver, }, - runGuardsAndResolvers: 'always' + runGuardsAndResolvers: 'always', }, { path: ':id', component: CashierReportComponent, canActivate: [AuthGuard], data: { - permission: 'Cashier Report' + permission: 'Cashier Report', }, resolve: { info: CashierReportResolver, - cashiers: ActiveCashiersResolver + cashiers: ActiveCashiersResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(cashierReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - CashierReportResolver - ] + imports: [CommonModule, RouterModule.forChild(cashierReportRoutes)], + exports: [RouterModule], + providers: [CashierReportResolver], }) -export class CashierReportRoutingModule { -} +export class CashierReportRoutingModule {} diff --git a/bookie/src/app/cashier-report/cashier-report.component.html b/bookie/src/app/cashier-report/cashier-report.component.html index 026a2f0..ed60a5b 100644 --- a/bookie/src/app/cashier-report/cashier-report.component.html +++ b/bookie/src/app/cashier-report/cashier-report.component.html @@ -7,50 +7,71 @@
-
+
- + - +
-
- - Cashier - - -- Cashier -- - - {{ ac.name }} - - - +
+ + Cashier + + -- Cashier -- + + {{ ac.name }} + + +
- Name - {{row.name}} + {{ row.name }} Amount - {{row.amount | currency:'INR'}} + {{ row.amount | currency: 'INR' }} - + diff --git a/bookie/src/app/cashier-report/cashier-report.component.spec.ts b/bookie/src/app/cashier-report/cashier-report.component.spec.ts index e7ea8da..f413626 100644 --- a/bookie/src/app/cashier-report/cashier-report.component.spec.ts +++ b/bookie/src/app/cashier-report/cashier-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {CashierReportComponent} from './cashier-report.component'; +import { CashierReportComponent } from './cashier-report.component'; describe('CashierReportComponent', () => { let component: CashierReportComponent; @@ -8,9 +8,8 @@ describe('CashierReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [CashierReportComponent] - }) - .compileComponents(); + declarations: [CashierReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/cashier-report/cashier-report.component.ts b/bookie/src/app/cashier-report/cashier-report.component.ts index 624af93..2d58841 100644 --- a/bookie/src/app/cashier-report/cashier-report.component.ts +++ b/bookie/src/app/cashier-report/cashier-report.component.ts @@ -2,15 +2,17 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { CashierReportDataSource } from './cashier-report-datasource'; -import { CashierReport } from './cashier-report'; -import { ToCsvService } from '../shared/to-csv.service'; + import { User } from '../core/user'; +import { ToCsvService } from '../shared/to-csv.service'; + +import { CashierReport } from './cashier-report'; +import { CashierReportDataSource } from './cashier-report-datasource'; @Component({ selector: 'app-cashier-report', templateUrl: './cashier-report.component.html', - styleUrls: ['./cashier-report.component.css'] + styleUrls: ['./cashier-report.component.css'], }) export class CashierReportComponent implements OnInit { dataSource: CashierReportDataSource; @@ -21,42 +23,39 @@ export class CashierReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'amount']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { cashiers: User[], info: CashierReport }) => { - this.activeCashiers = data.cashiers; - this.info = data.info; - this.form.setValue({ - cashier: this.info.user.id, - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new CashierReportDataSource(this.info.amounts); + this.route.data.subscribe((data: { cashiers: User[]; info: CashierReport }) => { + this.activeCashiers = data.cashiers; + this.info = data.info; + this.form.setValue({ + cashier: this.info.user.id, + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new CashierReportDataSource(this.info.amounts); + }); } show() { const info = this.getInfo(); const url = ['cashier-report']; - if (!!info.user.id) { + if (info.user.id) { url.push(info.user.id); } this.router.navigate(url, { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } @@ -64,7 +63,7 @@ export class CashierReportComponent implements OnInit { this.form = this.fb.group({ startDate: '', finishDate: '', - cashier: '' + cashier: '', }); } @@ -72,18 +71,20 @@ export class CashierReportComponent implements OnInit { const formModel = this.form.value; return { - user: new User({id: formModel.cashier}), + user: new User({ id: formModel.cashier }), startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } exportCsv() { const headers = { Name: 'name', - Amount: 'amount' + Amount: 'amount', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'cashier-report.csv'); diff --git a/bookie/src/app/cashier-report/cashier-report.module.spec.ts b/bookie/src/app/cashier-report/cashier-report.module.spec.ts index 4a53088..622a8c6 100644 --- a/bookie/src/app/cashier-report/cashier-report.module.spec.ts +++ b/bookie/src/app/cashier-report/cashier-report.module.spec.ts @@ -1,4 +1,4 @@ -import {CashierReportModule} from './cashier-report.module'; +import { CashierReportModule } from './cashier-report.module'; describe('CashierReportModule', () => { let cashierReportModule: CashierReportModule; diff --git a/bookie/src/app/cashier-report/cashier-report.module.ts b/bookie/src/app/cashier-report/cashier-report.module.ts index 96aad87..d99b414 100644 --- a/bookie/src/app/cashier-report/cashier-report.module.ts +++ b/bookie/src/app/cashier-report/cashier-report.module.ts @@ -1,27 +1,34 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatSelectModule } from '@angular/material/select'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { CashierReportRoutingModule } from './cashier-report-routing.module'; import { CashierReportComponent } from './cashier-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; -import { MatSelectModule } from '@angular/material/select'; export const MY_FORMATS = { parse: { @@ -57,15 +64,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - CashierReportRoutingModule - ], - declarations: [ - CashierReportComponent + CashierReportRoutingModule, ], + declarations: [CashierReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class CashierReportModule { -} +export class CashierReportModule {} diff --git a/bookie/src/app/cashier-report/cashier-report.service.spec.ts b/bookie/src/app/cashier-report/cashier-report.service.spec.ts index 357f297..2037e78 100644 --- a/bookie/src/app/cashier-report/cashier-report.service.spec.ts +++ b/bookie/src/app/cashier-report/cashier-report.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {CashierReportService} from './cashier-report.service'; +import { CashierReportService } from './cashier-report.service'; describe('CashierReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [CashierReportService] + providers: [CashierReportService], }); }); diff --git a/bookie/src/app/cashier-report/cashier-report.service.ts b/bookie/src/app/cashier-report/cashier-report.service.ts index 7ca5f47..ff1da7f 100644 --- a/bookie/src/app/cashier-report/cashier-report.service.ts +++ b/bookie/src/app/cashier-report/cashier-report.service.ts @@ -1,54 +1,49 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { CashierReport } from './cashier-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; import { User } from '../core/user'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { CashierReport } from './cashier-report'; const url = '/api/cashier-report'; const serviceName = 'CashierReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class CashierReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} list(id: string, startDate: string, finishDate): Observable { - const listUrl = (id === null) ? url : `${url}/${id}`; - const options = {params: new HttpParams()}; + const listUrl = id === null ? url : `${url}/${id}`; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(listUrl, options) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(listUrl, options) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } activeCashiers(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(`${url}/active`, options) + return >this.http + .get(`${url}/active`, options) - .pipe( - catchError(this.log.handleError(serviceName, 'activeCashiers')) - ); + .pipe(catchError(this.log.handleError(serviceName, 'activeCashiers'))); } - } diff --git a/bookie/src/app/cashier-report/cashier-report.ts b/bookie/src/app/cashier-report/cashier-report.ts index cab3c12..0e7f813 100644 --- a/bookie/src/app/cashier-report/cashier-report.ts +++ b/bookie/src/app/cashier-report/cashier-report.ts @@ -1,16 +1,7 @@ import { User } from '../core/user'; -export class CashierReportPrintItem { - date: string; - billId: string; - customer: string; - amount: number; -} - -export class CashierReportDisplayItem { - name: string; - amount: number; -} +import { CashierReportDisplayItem } from './cashier-report-display-item'; +import { CashierReportPrintItem } from './cashier-report-print-item'; export class CashierReport { startDate: string; diff --git a/bookie/src/app/core/core.module.ts b/bookie/src/app/core/core.module.ts index a98df4b..d8d5729 100644 --- a/bookie/src/app/core/core.module.ts +++ b/bookie/src/app/core/core.module.ts @@ -1,11 +1,12 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { HTTP_INTERCEPTORS } from '@angular/common/http'; +import { NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { MatToolbarModule } from '@angular/material/toolbar'; import { RouterModule } from '@angular/router'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; + import { ErrorInterceptor } from './http-auth-interceptor'; import { JwtInterceptor } from './jwt.interceptor'; @@ -16,14 +17,12 @@ import { JwtInterceptor } from './jwt.interceptor'; MatIconModule, MatMenuModule, MatToolbarModule, - RouterModule - ], - declarations: [ + RouterModule, ], + declarations: [], providers: [ - {provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true}, - {provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}, - ] + { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true }, + { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true }, + ], }) -export class CoreModule { -} +export class CoreModule {} diff --git a/bookie/src/app/core/device.ts b/bookie/src/app/core/device.ts index f23f1aa..c11b196 100644 --- a/bookie/src/app/core/device.ts +++ b/bookie/src/app/core/device.ts @@ -1,4 +1,4 @@ -import {Section} from './section'; +import { Section } from './section'; export class Device { id: string; diff --git a/bookie/src/app/core/error-logger.service.ts b/bookie/src/app/core/error-logger.service.ts index 1bba940..5cf63a6 100644 --- a/bookie/src/app/core/error-logger.service.ts +++ b/bookie/src/app/core/error-logger.service.ts @@ -1,12 +1,14 @@ -import {Injectable} from '@angular/core'; -import {Observable} from 'rxjs/internal/Observable'; -import {throwError} from 'rxjs'; +import { Injectable } from '@angular/core'; +import { throwError } from 'rxjs'; +import { Observable } from 'rxjs/internal/Observable'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ErrorLoggerService { - constructor() { + public static log(serviceName = 'error-logger', message: string) { + // eslint-disable-next-line no-console + console.log(`${serviceName}Service: ${message}`); } /** @@ -15,22 +17,11 @@ export class ErrorLoggerService { * @param operation - name of the operation that failed * @param result - optional value to return as the observable result */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this public handleError(serviceName = 'error-logger', operation = 'operation', result?: T) { return (error: any): Observable => { - - // TODO: send the error to remote logging infrastructure - console.error(error); // log to console instead - - // TODO: better job of transforming error for user consumption - this.log(serviceName, `${operation} failed: ${error.message}`); - - // // Let the app keep running by returning an empty result. - // return of(result as T); + ErrorLoggerService.log(serviceName, `${operation} failed: ${error}`); return throwError(error); }; } - - public log(serviceName = 'error-logger', message: string) { - console.log(serviceName + 'Service: ' + message); - } } diff --git a/bookie/src/app/core/jwt.interceptor.ts b/bookie/src/app/core/jwt.interceptor.ts index 4c4bfef..4076b8d 100644 --- a/bookie/src/app/core/jwt.interceptor.ts +++ b/bookie/src/app/core/jwt.interceptor.ts @@ -1,35 +1,35 @@ -import {Injectable} from '@angular/core'; -import {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor} from '@angular/common/http'; -import {Observable} from 'rxjs'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; -import {AuthService} from '../auth/auth.service'; +import { AuthService } from '../auth/auth.service'; @Injectable() export class JwtInterceptor implements HttpInterceptor { private isRefreshing = false; - constructor(private authService: AuthService) { - } + constructor(private authService: AuthService) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { // add authorization header with jwt token if available // We use this line to debug token refreshing - // console.log("intercepting:\nisRefreshing: ", this.isRefreshing, "\n user: ", this.authService.user,"\n needsRefreshing: ", this.authService.needsRefreshing()); if (!this.isRefreshing && this.authService.user && this.authService.needsRefreshing()) { this.isRefreshing = true; - this.authService.refreshToken().subscribe( x=> this.isRefreshing = false); + this.authService.refreshToken().subscribe(() => { + this.isRefreshing = false; + }); } const currentUser = this.authService.user; if (currentUser?.access_token) { + // eslint-disable-next-line no-param-reassign request = request.clone({ setHeaders: { - Authorization: `Bearer ${currentUser.access_token}` - } + Authorization: `Bearer ${currentUser.access_token}`, + }, }); } - return next.handle(request); } } diff --git a/bookie/src/app/core/menu-category.ts b/bookie/src/app/core/menu-category.ts index 40c4de8..f11149d 100644 --- a/bookie/src/app/core/menu-category.ts +++ b/bookie/src/app/core/menu-category.ts @@ -1,4 +1,5 @@ -import {Product} from './product'; +// eslint-disable-next-line import/no-cycle +import { Product } from './product'; export class MenuCategory { id: string; diff --git a/bookie/src/app/core/modifier-category.ts b/bookie/src/app/core/modifier-category.ts index 009ffad..0d6a06d 100644 --- a/bookie/src/app/core/modifier-category.ts +++ b/bookie/src/app/core/modifier-category.ts @@ -1,5 +1,6 @@ -import {MenuCategory} from './menu-category'; -import {Modifier} from './modifier'; +import { MenuCategory } from './menu-category'; +// eslint-disable-next-line import/no-cycle +import { Modifier } from './modifier'; export class ModifierCategory { id: string; diff --git a/bookie/src/app/core/modifier.ts b/bookie/src/app/core/modifier.ts index 2f1e44a..1e0334a 100644 --- a/bookie/src/app/core/modifier.ts +++ b/bookie/src/app/core/modifier.ts @@ -1,4 +1,5 @@ -import {ModifierCategory} from './modifier-category'; +// eslint-disable-next-line import/no-cycle +import { ModifierCategory } from './modifier-category'; export class Modifier { id: string; diff --git a/bookie/src/app/core/product.ts b/bookie/src/app/core/product.ts index 3057df1..bb3e54a 100644 --- a/bookie/src/app/core/product.ts +++ b/bookie/src/app/core/product.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-cycle import { MenuCategory } from './menu-category'; import { SaleCategory } from './sale-category'; import { Tax } from './tax'; diff --git a/bookie/src/app/core/sale-category.ts b/bookie/src/app/core/sale-category.ts index e6635fb..a0be996 100644 --- a/bookie/src/app/core/sale-category.ts +++ b/bookie/src/app/core/sale-category.ts @@ -1,4 +1,4 @@ -import {Tax} from './tax'; +import { Tax } from './tax'; export class SaleCategory { id: string; diff --git a/bookie/src/app/core/table.ts b/bookie/src/app/core/table.ts index 191a6da..4f1caa0 100644 --- a/bookie/src/app/core/table.ts +++ b/bookie/src/app/core/table.ts @@ -1,4 +1,4 @@ -import {Section} from './section'; +import { Section } from './section'; export class Table { id: string; diff --git a/bookie/src/app/core/toaster.service.ts b/bookie/src/app/core/toaster.service.ts index 28a21a6..dc62a7f 100644 --- a/bookie/src/app/core/toaster.service.ts +++ b/bookie/src/app/core/toaster.service.ts @@ -1,13 +1,11 @@ -import {Injectable} from '@angular/core'; +import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ToasterService { - - constructor(private snackBar: MatSnackBar) { - } + constructor(private snackBar: MatSnackBar) {} show(type: string, msg: string) { this.snackBar.open(msg, type, { diff --git a/bookie/src/app/core/user-group.ts b/bookie/src/app/core/user-group.ts new file mode 100644 index 0000000..ce7f90a --- /dev/null +++ b/bookie/src/app/core/user-group.ts @@ -0,0 +1,5 @@ +export class UserGroup { + id: string; + name: string; + enabled: boolean; +} diff --git a/bookie/src/app/core/user.ts b/bookie/src/app/core/user.ts index c9bc46f..bae77d8 100644 --- a/bookie/src/app/core/user.ts +++ b/bookie/src/app/core/user.ts @@ -1,3 +1,5 @@ +import { UserGroup } from './user-group'; + export class User { id: string; name: string; @@ -13,9 +15,3 @@ export class User { Object.assign(this, init); } } - -export class UserGroup { - id: string; - name: string; - enabled: boolean; -} diff --git a/bookie/src/app/devices/device-detail/device-detail.component.html b/bookie/src/app/devices/device-detail/device-detail.component.html index 437e7a8..080c3fe 100644 --- a/bookie/src/app/devices/device-detail/device-detail.component.html +++ b/bookie/src/app/devices/device-detail/device-detail.component.html @@ -5,29 +5,47 @@
-
+
Name - +
-
+
Section {{ s.name }} - - - + + +
- +
diff --git a/bookie/src/app/devices/device-detail/device-detail.component.spec.ts b/bookie/src/app/devices/device-detail/device-detail.component.spec.ts index e3b80aa..05f066b 100644 --- a/bookie/src/app/devices/device-detail/device-detail.component.spec.ts +++ b/bookie/src/app/devices/device-detail/device-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {DeviceDetailComponent} from './device-detail.component'; +import { DeviceDetailComponent } from './device-detail.component'; describe('DeviceDetailComponent', () => { let component: DeviceDetailComponent; @@ -8,9 +8,8 @@ describe('DeviceDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [DeviceDetailComponent] - }) - .compileComponents(); + declarations: [DeviceDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/devices/device-detail/device-detail.component.ts b/bookie/src/app/devices/device-detail/device-detail.component.ts index 5ff44d5..1173db3 100644 --- a/bookie/src/app/devices/device-detail/device-detail.component.ts +++ b/bookie/src/app/devices/device-detail/device-detail.component.ts @@ -1,18 +1,18 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatDialog} from '@angular/material/dialog'; -import { DeviceService } from '../device.service'; import { Device } from '../../core/device'; +import { Section } from '../../core/section'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; -import { Section } from '../../core/section'; +import { DeviceService } from '../device.service'; @Component({ selector: 'app-device-detail', templateUrl: './device-detail.component.html', - styleUrls: ['./device-detail.component.css'] + styleUrls: ['./device-detail.component.css'], }) export class DeviceDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -26,7 +26,7 @@ export class DeviceDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: DeviceService + private ser: DeviceService, ) { this.createForm(); } @@ -34,23 +34,22 @@ export class DeviceDetailComponent implements OnInit, AfterViewInit { createForm() { this.form = this.fb.group({ name: '', - section: '' + section: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Device, sections: Section[] }) => { - this.showItem(data.item); - this.sections = data.sections; - }); + this.route.data.subscribe((data: { item: Device; sections: Section[] }) => { + this.showItem(data.item); + this.sections = data.sections; + }); } showItem(item: Device) { this.item = item; this.form.setValue({ name: this.item.name || '', - section: this.item.section.id ? this.item.section.id : '' + section: this.item.section.id ? this.item.section.id : '', }); } @@ -61,35 +60,33 @@ export class DeviceDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/devices'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/devices'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/devices'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/devices'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Device?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Device?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/devices/device-list-resolver.service.spec.ts b/bookie/src/app/devices/device-list-resolver.service.spec.ts index f788c55..0880b05 100644 --- a/bookie/src/app/devices/device-list-resolver.service.spec.ts +++ b/bookie/src/app/devices/device-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {DeviceListResolver} from './device-list-resolver.service'; +import { DeviceListResolver } from './device-list-resolver.service'; describe('DeviceListResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [DeviceListResolver] + providers: [DeviceListResolver], }); }); diff --git a/bookie/src/app/devices/device-list-resolver.service.ts b/bookie/src/app/devices/device-list-resolver.service.ts index 528f8c8..7d24320 100644 --- a/bookie/src/app/devices/device-list-resolver.service.ts +++ b/bookie/src/app/devices/device-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Device} from '../core/device'; -import {Observable} from 'rxjs/internal/Observable'; -import {DeviceService} from './device.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Device } from '../core/device'; + +import { DeviceService } from './device.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class DeviceListResolver implements Resolve { + constructor(private ser: DeviceService) {} - constructor(private ser: DeviceService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/devices/device-list/device-list-datasource.ts b/bookie/src/app/devices/device-list/device-list-datasource.ts index d80a9fa..19aec8b 100644 --- a/bookie/src/app/devices/device-list/device-list-datasource.ts +++ b/bookie/src/app/devices/device-list/device-list-datasource.ts @@ -1,9 +1,9 @@ -import { DataSource} from '@angular/cdk/collections'; -import { Observable, of as observableOf} from 'rxjs'; -import { Device} from '../../core/device'; +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; + +import { Device } from '../../core/device'; export class DeviceListDataSource extends DataSource { - constructor(public data: Device[]) { super(); } @@ -12,6 +12,5 @@ export class DeviceListDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/devices/device-list/device-list.component.html b/bookie/src/app/devices/device-list/device-list.component.html index 1e7afd1..e02ae9e 100644 --- a/bookie/src/app/devices/device-list/device-list.component.html +++ b/bookie/src/app/devices/device-list/device-list.component.html @@ -8,21 +8,22 @@ - Name - {{row.name}} + {{ row.name }} Section - {{row.section.name}} + {{ row.section.name }} - + diff --git a/bookie/src/app/devices/device-list/device-list.component.spec.ts b/bookie/src/app/devices/device-list/device-list.component.spec.ts index 3c9c0f6..5bef016 100644 --- a/bookie/src/app/devices/device-list/device-list.component.spec.ts +++ b/bookie/src/app/devices/device-list/device-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {DeviceListComponent} from './device-list.component'; +import { DeviceListComponent } from './device-list.component'; describe('DeviceListComponent', () => { let component: DeviceListComponent; @@ -8,9 +8,8 @@ describe('DeviceListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [DeviceListComponent] - }) - .compileComponents(); + declarations: [DeviceListComponent], + }).compileComponents(); fixture = TestBed.createComponent(DeviceListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/devices/device-list/device-list.component.ts b/bookie/src/app/devices/device-list/device-list.component.ts index d5660f6..c37bc5c 100644 --- a/bookie/src/app/devices/device-list/device-list.component.ts +++ b/bookie/src/app/devices/device-list/device-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { DeviceListDataSource } from './device-list-datasource'; -import { Device } from '../../core/device'; import { ActivatedRoute } from '@angular/router'; +import { Device } from '../../core/device'; + +import { DeviceListDataSource } from './device-list-datasource'; + @Component({ selector: 'app-device-list', templateUrl: './device-list.component.html', - styleUrls: ['./device-list.component.css'] + styleUrls: ['./device-list.component.css'], }) export class DeviceListComponent implements OnInit { dataSource: DeviceListDataSource; @@ -14,14 +16,12 @@ export class DeviceListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: Device[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: Device[] }) => { + this.list = data.list; + }); this.dataSource = new DeviceListDataSource(this.list); } } diff --git a/bookie/src/app/devices/device-resolver.service.spec.ts b/bookie/src/app/devices/device-resolver.service.spec.ts index 7bc8cfd..6bcb9b6 100644 --- a/bookie/src/app/devices/device-resolver.service.spec.ts +++ b/bookie/src/app/devices/device-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {DeviceResolver} from './device-resolver.service'; +import { DeviceResolver } from './device-resolver.service'; describe('DeviceResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [DeviceResolver] + providers: [DeviceResolver], }); }); diff --git a/bookie/src/app/devices/device-resolver.service.ts b/bookie/src/app/devices/device-resolver.service.ts index 2b59bb2..a487175 100644 --- a/bookie/src/app/devices/device-resolver.service.ts +++ b/bookie/src/app/devices/device-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {DeviceService} from './device.service'; -import {Device} from '../core/device'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Device } from '../core/device'; + +import { DeviceService } from './device.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class DeviceResolver implements Resolve { + constructor(private ser: DeviceService) {} - constructor(private ser: DeviceService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/devices/device.service.spec.ts b/bookie/src/app/devices/device.service.spec.ts index 131266a..ad875e4 100644 --- a/bookie/src/app/devices/device.service.spec.ts +++ b/bookie/src/app/devices/device.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {DeviceService} from './device.service'; +import { DeviceService } from './device.service'; describe('DeviceService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [DeviceService] + providers: [DeviceService], }); }); diff --git a/bookie/src/app/devices/device.service.ts b/bookie/src/app/devices/device.service.ts index 66b74cf..c3de72a 100644 --- a/bookie/src/app/devices/device.service.ts +++ b/bookie/src/app/devices/device.service.ts @@ -1,65 +1,69 @@ -import {Injectable} from '@angular/core'; -import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; -import {ErrorLoggerService} from '../core/error-logger.service'; -import {catchError} from 'rxjs/operators'; -import {Observable} from 'rxjs/internal/Observable'; -import {Device} from '../core/device'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { Device } from '../core/device'; +import { ErrorLoggerService } from '../core/error-logger.service'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/v1/devices'; const serviceName = 'DeviceService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class DeviceService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? `${url}/new` : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + const options = { params: new HttpParams().set('l', '') }; + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(device: Device): Observable { - return >this.http.post(`${url}/new`, device, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(`${url}/new`, device, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(device: Device): Observable { - return >this.http.put(`${url}/${device.id}`, device, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${device.id}`, device, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(device: Device): Observable { if (!device.id) { return this.save(device); - } else { - return this.update(device); } + return this.update(device); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/devices/devices-routing.module.spec.ts b/bookie/src/app/devices/devices-routing.module.spec.ts index c211f21..9668d36 100644 --- a/bookie/src/app/devices/devices-routing.module.spec.ts +++ b/bookie/src/app/devices/devices-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {DevicesRoutingModule} from './devices-routing.module'; +import { DevicesRoutingModule } from './devices-routing.module'; describe('DevicesRoutingModule', () => { let devicesRoutingModule: DevicesRoutingModule; diff --git a/bookie/src/app/devices/devices-routing.module.ts b/bookie/src/app/devices/devices-routing.module.ts index 3a5ea25..4c8ccb9 100644 --- a/bookie/src/app/devices/devices-routing.module.ts +++ b/bookie/src/app/devices/devices-routing.module.ts @@ -1,12 +1,14 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {DeviceListResolver} from './device-list-resolver.service'; -import {DeviceResolver} from './device-resolver.service'; -import {DeviceListComponent} from './device-list/device-list.component'; -import {DeviceDetailComponent} from './device-detail/device-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; -import {SectionListResolver} from '../sections/section-list-resolver.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; +import { SectionListResolver } from '../sections/section-list-resolver.service'; + +import { DeviceDetailComponent } from './device-detail/device-detail.component'; +import { DeviceListResolver } from './device-list-resolver.service'; +import { DeviceListComponent } from './device-list/device-list.component'; +import { DeviceResolver } from './device-resolver.service'; const devicesRoutes: Routes = [ { @@ -14,51 +16,41 @@ const devicesRoutes: Routes = [ component: DeviceListComponent, canActivate: [AuthGuard], data: { - permission: 'Devices' + permission: 'Devices', }, resolve: { - list: DeviceListResolver - } + list: DeviceListResolver, + }, }, { path: 'new', component: DeviceDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Devices' + permission: 'Devices', }, resolve: { item: DeviceResolver, - sections: SectionListResolver - } + sections: SectionListResolver, + }, }, { path: ':id', component: DeviceDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Devices' + permission: 'Devices', }, resolve: { item: DeviceResolver, - sections: SectionListResolver - } - } + sections: SectionListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(devicesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - DeviceListResolver, - DeviceResolver - ] + imports: [CommonModule, RouterModule.forChild(devicesRoutes)], + exports: [RouterModule], + providers: [DeviceListResolver, DeviceResolver], }) -export class DevicesRoutingModule { -} +export class DevicesRoutingModule {} diff --git a/bookie/src/app/devices/devices.module.spec.ts b/bookie/src/app/devices/devices.module.spec.ts index a0286a7..fd52f38 100644 --- a/bookie/src/app/devices/devices.module.spec.ts +++ b/bookie/src/app/devices/devices.module.spec.ts @@ -1,4 +1,4 @@ -import {DevicesModule} from './devices.module'; +import { DevicesModule } from './devices.module'; describe('DevicesModule', () => { let devicesModule: DevicesModule; diff --git a/bookie/src/app/devices/devices.module.ts b/bookie/src/app/devices/devices.module.ts index 0092b45..9583a3d 100644 --- a/bookie/src/app/devices/devices.module.ts +++ b/bookie/src/app/devices/devices.module.ts @@ -1,20 +1,20 @@ -import { NgModule } from '@angular/core'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; - -import { DeviceListComponent } from './device-list/device-list.component'; -import { DeviceDetailComponent } from './device-detail/device-detail.component'; -import { DevicesRoutingModule } from './devices-routing.module'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; +import { MatOptionModule } from '@angular/material/core'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; -import { MatOptionModule } from '@angular/material/core'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { CdkTableModule } from '@angular/cdk/table'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FlexLayoutModule } from '@angular/flex-layout'; + +import { DeviceDetailComponent } from './device-detail/device-detail.component'; +import { DeviceListComponent } from './device-list/device-list.component'; +import { DevicesRoutingModule } from './devices-routing.module'; @NgModule({ imports: [ @@ -30,12 +30,8 @@ import { FlexLayoutModule } from '@angular/flex-layout'; MatSelectModule, MatTableModule, ReactiveFormsModule, - DevicesRoutingModule + DevicesRoutingModule, ], - declarations: [ - DeviceListComponent, - DeviceDetailComponent - ] + declarations: [DeviceListComponent, DeviceDetailComponent], }) -export class DevicesModule { -} +export class DevicesModule {} diff --git a/bookie/src/app/discount-report/discount-report-datasource.ts b/bookie/src/app/discount-report/discount-report-datasource.ts index 7cfc51a..b23b46c 100644 --- a/bookie/src/app/discount-report/discount-report-datasource.ts +++ b/bookie/src/app/discount-report/discount-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { DiscountReportItem } from './discount-report'; +import { DiscountReportItem } from './discount-report-item'; export class DiscountReportDataSource extends DataSource { - constructor(public data: DiscountReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class DiscountReportDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/discount-report/discount-report-item.ts b/bookie/src/app/discount-report/discount-report-item.ts new file mode 100644 index 0000000..4d03c72 --- /dev/null +++ b/bookie/src/app/discount-report/discount-report-item.ts @@ -0,0 +1,4 @@ +export class DiscountReportItem { + name: string; + amount: number; +} diff --git a/bookie/src/app/discount-report/discount-report-resolver.service.spec.ts b/bookie/src/app/discount-report/discount-report-resolver.service.spec.ts index ed04e61..4b6e25d 100644 --- a/bookie/src/app/discount-report/discount-report-resolver.service.spec.ts +++ b/bookie/src/app/discount-report/discount-report-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {DiscountReportResolver} from './discount-report-resolver.service'; +import { DiscountReportResolver } from './discount-report-resolver.service'; describe('DiscountReportResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [DiscountReportResolver] + providers: [DiscountReportResolver], }); }); diff --git a/bookie/src/app/discount-report/discount-report-resolver.service.ts b/bookie/src/app/discount-report/discount-report-resolver.service.ts index 3fd3f17..6478423 100644 --- a/bookie/src/app/discount-report/discount-report-resolver.service.ts +++ b/bookie/src/app/discount-report/discount-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {DiscountReport} from './discount-report'; -import {DiscountReportService} from './discount-report.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { DiscountReport } from './discount-report'; +import { DiscountReportService } from './discount-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class DiscountReportResolver implements Resolve { + constructor(private ser: DiscountReportService) {} - constructor(private ser: DiscountReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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/discount-report/discount-report-routing.module.spec.ts b/bookie/src/app/discount-report/discount-report-routing.module.spec.ts index dd1808f..dc77e2f 100644 --- a/bookie/src/app/discount-report/discount-report-routing.module.spec.ts +++ b/bookie/src/app/discount-report/discount-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {DiscountReportRoutingModule} from './discount-report-routing.module'; +import { DiscountReportRoutingModule } from './discount-report-routing.module'; describe('DiscountReportRoutingModule', () => { let discountReportRoutingModule: DiscountReportRoutingModule; diff --git a/bookie/src/app/discount-report/discount-report-routing.module.ts b/bookie/src/app/discount-report/discount-report-routing.module.ts index 4b2a488..beba62c 100644 --- a/bookie/src/app/discount-report/discount-report-routing.module.ts +++ b/bookie/src/app/discount-report/discount-report-routing.module.ts @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { DiscountReportResolver } from './discount-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; + +import { DiscountReportResolver } from './discount-report-resolver.service'; import { DiscountReportComponent } from './discount-report.component'; const discountReportRoutes: Routes = [ @@ -11,27 +13,18 @@ const discountReportRoutes: Routes = [ component: DiscountReportComponent, canActivate: [AuthGuard], data: { - permission: 'Discount Report' + permission: 'Discount Report', }, resolve: { - info: DiscountReportResolver + info: DiscountReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(discountReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - DiscountReportResolver - ] + imports: [CommonModule, RouterModule.forChild(discountReportRoutes)], + exports: [RouterModule], + providers: [DiscountReportResolver], }) -export class DiscountReportRoutingModule { -} +export class DiscountReportRoutingModule {} diff --git a/bookie/src/app/discount-report/discount-report.component.html b/bookie/src/app/discount-report/discount-report.component.html index 4fb56a3..569610d 100644 --- a/bookie/src/app/discount-report/discount-report.component.html +++ b/bookie/src/app/discount-report/discount-report.component.html @@ -7,17 +7,34 @@
-
+
- + - + @@ -25,20 +42,19 @@
- Name - {{row.name}} + {{ row.name }} Amount - {{row.amount | currency:'INR'}} + {{ row.amount | currency: 'INR' }} - + diff --git a/bookie/src/app/discount-report/discount-report.component.spec.ts b/bookie/src/app/discount-report/discount-report.component.spec.ts index 74573d7..33d74f5 100644 --- a/bookie/src/app/discount-report/discount-report.component.spec.ts +++ b/bookie/src/app/discount-report/discount-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {DiscountReportComponent} from './discount-report.component'; +import { DiscountReportComponent } from './discount-report.component'; describe('DiscountReportComponent', () => { let component: DiscountReportComponent; @@ -8,9 +8,8 @@ describe('DiscountReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [DiscountReportComponent] - }) - .compileComponents(); + declarations: [DiscountReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/discount-report/discount-report.component.ts b/bookie/src/app/discount-report/discount-report.component.ts index 950fd14..25a2728 100644 --- a/bookie/src/app/discount-report/discount-report.component.ts +++ b/bookie/src/app/discount-report/discount-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { DiscountReportDataSource } from './discount-report-datasource'; -import { DiscountReport } from './discount-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { DiscountReport } from './discount-report'; +import { DiscountReportDataSource } from './discount-report-datasource'; + @Component({ selector: 'app-discount-report', templateUrl: './discount-report.component.html', - styleUrls: ['./discount-report.component.css'] + styleUrls: ['./discount-report.component.css'], }) export class DiscountReportComponent implements OnInit { dataSource: DiscountReportDataSource; @@ -19,27 +21,24 @@ export class DiscountReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'amount']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: DiscountReport }) => { - this.info = data.info; - this.form.setValue({ - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new DiscountReportDataSource(this.info.amounts); + this.route.data.subscribe((data: { info: DiscountReport }) => { + this.info = data.info; + this.form.setValue({ + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new DiscountReportDataSource(this.info.amounts); + }); } show() { @@ -47,15 +46,15 @@ export class DiscountReportComponent implements OnInit { this.router.navigate(['discount-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -64,16 +63,18 @@ export class DiscountReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } exportCsv() { const headers = { Name: 'name', - Amount: 'amount' + Amount: 'amount', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'discount-report.csv'); diff --git a/bookie/src/app/discount-report/discount-report.module.spec.ts b/bookie/src/app/discount-report/discount-report.module.spec.ts index f0a828e..2d669b1 100644 --- a/bookie/src/app/discount-report/discount-report.module.spec.ts +++ b/bookie/src/app/discount-report/discount-report.module.spec.ts @@ -1,4 +1,4 @@ -import {DiscountReportModule} from './discount-report.module'; +import { DiscountReportModule } from './discount-report.module'; describe('DiscountReportModule', () => { let discountReportModule: DiscountReportModule; diff --git a/bookie/src/app/discount-report/discount-report.module.ts b/bookie/src/app/discount-report/discount-report.module.ts index baeca1b..65fdb78 100644 --- a/bookie/src/app/discount-report/discount-report.module.ts +++ b/bookie/src/app/discount-report/discount-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { DiscountReportRoutingModule } from './discount-report-routing.module'; import { DiscountReportComponent } from './discount-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - DiscountReportRoutingModule - ], - declarations: [ - DiscountReportComponent + DiscountReportRoutingModule, ], + declarations: [DiscountReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class DiscountReportModule { -} +export class DiscountReportModule {} diff --git a/bookie/src/app/discount-report/discount-report.service.spec.ts b/bookie/src/app/discount-report/discount-report.service.spec.ts index 667e395..a07b1fb 100644 --- a/bookie/src/app/discount-report/discount-report.service.spec.ts +++ b/bookie/src/app/discount-report/discount-report.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {DiscountReportService} from './discount-report.service'; +import { DiscountReportService } from './discount-report.service'; describe('DiscountReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [DiscountReportService] + providers: [DiscountReportService], }); }); diff --git a/bookie/src/app/discount-report/discount-report.service.ts b/bookie/src/app/discount-report/discount-report.service.ts index ca5c182..5826484 100644 --- a/bookie/src/app/discount-report/discount-report.service.ts +++ b/bookie/src/app/discount-report/discount-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { DiscountReport } from './discount-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { DiscountReport } from './discount-report'; const url = '/api/discount-report'; const serviceName = 'DiscountReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class DiscountReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/discount-report/discount-report.ts b/bookie/src/app/discount-report/discount-report.ts index dec3a53..f41baf4 100644 --- a/bookie/src/app/discount-report/discount-report.ts +++ b/bookie/src/app/discount-report/discount-report.ts @@ -1,7 +1,4 @@ -export class DiscountReportItem { - name: string; - amount: number; -} +import { DiscountReportItem } from './discount-report-item'; export class DiscountReport { startDate: string; diff --git a/bookie/src/app/guest-book/guest-book-detail-resolver.service.ts b/bookie/src/app/guest-book/guest-book-detail-resolver.service.ts index 8bb8c4c..9346c76 100644 --- a/bookie/src/app/guest-book/guest-book-detail-resolver.service.ts +++ b/bookie/src/app/guest-book/guest-book-detail-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {GuestBookService} from './guest-book.service'; -import {GuestBook} from './guest-book'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { GuestBook } from './guest-book'; +import { GuestBookService } from './guest-book.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class GuestBookDetailResolver implements Resolve { + constructor(private ser: GuestBookService) {} - constructor(private ser: GuestBookService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.html b/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.html index 1e1fb70..e1d6b0c 100644 --- a/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.html +++ b/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.html @@ -5,39 +5,64 @@
-
+
Name - + Name is required
-
+
Phone - +
-
+
Pax - +
-
+
Company - +
-
+
Address diff --git a/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.ts b/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.ts index 6a51fa1..3c206d4 100644 --- a/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.ts +++ b/bookie/src/app/guest-book/guest-book-detail/guest-book-detail.component.ts @@ -1,14 +1,15 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { GuestBookService } from '../guest-book.service'; +import { ActivatedRoute, Router } from '@angular/router'; + import { ToasterService } from '../../core/toaster.service'; import { GuestBook } from '../guest-book'; -import { ActivatedRoute, Router } from '@angular/router'; +import { GuestBookService } from '../guest-book.service'; @Component({ selector: 'app-guest-book-detail', templateUrl: './guest-book-detail.component.html', - styleUrls: ['./guest-book-detail.component.css'] + styleUrls: ['./guest-book-detail.component.css'], }) export class GuestBookDetailComponent implements OnInit, AfterViewInit { @ViewChild('name', { static: true }) nameElement: ElementRef; @@ -20,7 +21,7 @@ export class GuestBookDetailComponent implements OnInit, AfterViewInit { private route: ActivatedRoute, private router: Router, private toaster: ToasterService, - private ser: GuestBookService + private ser: GuestBookService, ) { this.createForm(); } @@ -31,15 +32,14 @@ export class GuestBookDetailComponent implements OnInit, AfterViewInit { name: [null, Validators.required], phone: [null, Validators.required], pax: ['0', Validators.required], - address: null + address: null, }); } ngOnInit() { - this.route.data - .subscribe((data: { item: GuestBook }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: GuestBook }) => { + this.showItem(data.item); + }); } ngAfterViewInit() { @@ -50,26 +50,25 @@ export class GuestBookDetailComponent implements OnInit, AfterViewInit { showItem(item: GuestBook) { this.item = item; - this.form.setValue({ - company: item.company, - name: item.name, - phone: item.phone, - pax: '' + item.pax, - address: item.address + this.form.setValue({ + company: item.company, + name: item.name, + phone: item.phone, + pax: `${item.pax}`, + address: item.address, }); } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/guest-book'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/guest-book'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } getItem(): GuestBook { diff --git a/bookie/src/app/guest-book/guest-book-list-resolver.service.ts b/bookie/src/app/guest-book/guest-book-list-resolver.service.ts index 9699130..0cf7682 100644 --- a/bookie/src/app/guest-book/guest-book-list-resolver.service.ts +++ b/bookie/src/app/guest-book/guest-book-list-resolver.service.ts @@ -1,18 +1,17 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; -import { GuestBookList } from './guest-book'; + +import { GuestBookList } from './guest-book-list'; import { GuestBookService } from './guest-book.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class GuestBookListResolver implements Resolve { + constructor(private ser: GuestBookService) {} - constructor(private ser: GuestBookService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(null); } } diff --git a/bookie/src/app/guest-book/guest-book-list.ts b/bookie/src/app/guest-book/guest-book-list.ts new file mode 100644 index 0000000..1b056aa --- /dev/null +++ b/bookie/src/app/guest-book/guest-book-list.ts @@ -0,0 +1,6 @@ +import { GuestBook } from './guest-book'; + +export class GuestBookList { + date: string; + list: GuestBook[]; +} diff --git a/bookie/src/app/guest-book/guest-book-list/guest-book-list-datasource.ts b/bookie/src/app/guest-book/guest-book-list/guest-book-list-datasource.ts index 6cd81a8..aa32a12 100644 --- a/bookie/src/app/guest-book/guest-book-list/guest-book-list-datasource.ts +++ b/bookie/src/app/guest-book/guest-book-list/guest-book-list-datasource.ts @@ -1,11 +1,10 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable } from 'rxjs'; + import { GuestBook } from '../guest-book'; export class GuestBookListDataSource extends DataSource { - - constructor(private readonly dataObs: Observable - ) { + constructor(private readonly dataObs: Observable) { super(); } @@ -17,6 +16,5 @@ export class GuestBookListDataSource extends DataSource { * Called when the table is being destroyed. Use this function, to clean up * any open connections or free any held resources that were set up during connect. */ - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/guest-book/guest-book-list/guest-book-list.component.html b/bookie/src/app/guest-book/guest-book-list/guest-book-list.component.html index 08f74ee..f23ea57 100644 --- a/bookie/src/app/guest-book/guest-book-list/guest-book-list.component.html +++ b/bookie/src/app/guest-book/guest-book-list/guest-book-list.component.html @@ -8,52 +8,63 @@ -
- - - - - -
+
+ + + + + +
S. No - {{row.serial}} + {{ row.serial }} Name - {{row.name}} + {{ row.name }} Phone - {{row.phone}} + {{ row.phone }} Pax - {{row.pax}} + {{ row.pax }} Time - {{row.date | localTime}} + {{ row.date | localTime }} Action - - + +
diff --git a/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.spec.ts b/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.spec.ts index fe09d89..5d74681 100644 --- a/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.spec.ts +++ b/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {MenuCategoryDetailComponent} from './menu-category-detail.component'; +import { MenuCategoryDetailComponent } from './menu-category-detail.component'; describe('MenuCategoryDetailComponent', () => { let component: MenuCategoryDetailComponent; @@ -8,9 +8,8 @@ describe('MenuCategoryDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [MenuCategoryDetailComponent] - }) - .compileComponents(); + declarations: [MenuCategoryDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.ts b/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.ts index ccf7a0f..864b566 100644 --- a/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.ts +++ b/bookie/src/app/menu-category/menu-category-detail/menu-category-detail.component.ts @@ -1,17 +1,17 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; -import { MenuCategoryService } from '../menu-category.service'; import { MenuCategory } from '../../core/menu-category'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { MenuCategoryService } from '../menu-category.service'; @Component({ selector: 'app-menu-category-detail', templateUrl: './menu-category-detail.component.html', - styleUrls: ['./menu-category-detail.component.css'] + styleUrls: ['./menu-category-detail.component.css'], }) export class MenuCategoryDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -24,7 +24,7 @@ export class MenuCategoryDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: MenuCategoryService + private ser: MenuCategoryService, ) { this.createForm(); } @@ -33,15 +33,14 @@ export class MenuCategoryDetailComponent implements OnInit, AfterViewInit { this.form = this.fb.group({ name: '', discountLimit: '', - isActive: '' + isActive: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: MenuCategory }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: MenuCategory }) => { + this.showItem(data.item); + }); } showItem(item: MenuCategory) { @@ -49,7 +48,7 @@ export class MenuCategoryDetailComponent implements OnInit, AfterViewInit { this.form.setValue({ name: this.item.name, discountLimit: this.item.discountLimit, - isActive: this.item.isActive + isActive: this.item.isActive, }); } @@ -60,35 +59,33 @@ export class MenuCategoryDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/menu-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/menu-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/menu-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/menu-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Menu Category?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Menu Category?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/menu-category/menu-category-list-resolver.service.spec.ts b/bookie/src/app/menu-category/menu-category-list-resolver.service.spec.ts index 3afa2c4..c0b6bb7 100644 --- a/bookie/src/app/menu-category/menu-category-list-resolver.service.spec.ts +++ b/bookie/src/app/menu-category/menu-category-list-resolver.service.spec.ts @@ -1,14 +1,17 @@ -import {inject, TestBed} from '@angular/core/testing'; -import {MenuCategoryListResolver} from './menu-category-list-resolver.service'; +import { inject, TestBed } from '@angular/core/testing'; +import { MenuCategoryListResolver } from './menu-category-list-resolver.service'; describe('MenuCategoryListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [MenuCategoryListResolver] + providers: [MenuCategoryListResolver], }); }); - it('should be created', inject([MenuCategoryListResolver], (service: MenuCategoryListResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [MenuCategoryListResolver], + (service: MenuCategoryListResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/menu-category/menu-category-list-resolver.service.ts b/bookie/src/app/menu-category/menu-category-list-resolver.service.ts index c0387d4..57a8cfb 100644 --- a/bookie/src/app/menu-category/menu-category-list-resolver.service.ts +++ b/bookie/src/app/menu-category/menu-category-list-resolver.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { MenuCategory } from '../core/menu-category'; +import { Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; + +import { MenuCategory } from '../core/menu-category'; + import { MenuCategoryService } from './menu-category.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class MenuCategoryListResolver implements Resolve { + constructor(private ser: MenuCategoryService) {} - constructor(private ser: MenuCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/menu-category/menu-category-list/menu-category-list-datasource.ts b/bookie/src/app/menu-category/menu-category-list/menu-category-list-datasource.ts index 0b38053..733781d 100644 --- a/bookie/src/app/menu-category/menu-category-list/menu-category-list-datasource.ts +++ b/bookie/src/app/menu-category/menu-category-list/menu-category-list-datasource.ts @@ -1,15 +1,18 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable } from 'rxjs'; -import { MenuCategory } from '../../core/menu-category'; import { tap } from 'rxjs/operators'; +import { MenuCategory } from '../../core/menu-category'; + export class MenuCategoryListDatasource extends DataSource { private data: MenuCategory[]; constructor(private readonly dataObs: Observable) { super(); this.dataObs = dataObs.pipe( - tap(x => this.data = x) + tap((x) => { + this.data = x; + }), ); } @@ -17,6 +20,5 @@ export class MenuCategoryListDatasource extends DataSource { return this.dataObs; } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.html b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.html index 0b5f832..ccc0ae1 100644 --- a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.html +++ b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.html @@ -1,43 +1,53 @@ Menu Categories - + add_box Add - - + Name - {{row.name}} + {{ row.name }} Discount Limit - {{row.discountLimit | percent:'1.2-2'}} + {{ row.discountLimit | percent: '1.2-2' }} Active? - {{row.isActive}} + {{ row.isActive }} Fixture? - {{row.isFixture}} + {{ row.isFixture }} - + diff --git a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.spec.ts b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.spec.ts index 475399d..9b04010 100644 --- a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.spec.ts +++ b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {MenuCategoryListComponent} from './menu-category-list.component'; +import { MenuCategoryListComponent } from './menu-category-list.component'; describe('MenuCategoryListComponent', () => { let component: MenuCategoryListComponent; @@ -8,9 +8,8 @@ describe('MenuCategoryListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [MenuCategoryListComponent] - }) - .compileComponents(); + declarations: [MenuCategoryListComponent], + }).compileComponents(); fixture = TestBed.createComponent(MenuCategoryListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.ts b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.ts index 99f21f4..8f01054 100644 --- a/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.ts +++ b/bookie/src/app/menu-category/menu-category-list/menu-category-list.component.ts @@ -1,17 +1,19 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { MenuCategoryListDatasource } from './menu-category-list-datasource'; -import { MenuCategory } from '../../core/menu-category'; -import { ActivatedRoute, Router } from '@angular/router'; import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { MatTable } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { BehaviorSubject } from 'rxjs'; + +import { MenuCategory } from '../../core/menu-category'; import { ToasterService } from '../../core/toaster.service'; import { MenuCategoryService } from '../menu-category.service'; -import { BehaviorSubject } from 'rxjs'; + +import { MenuCategoryListDatasource } from './menu-category-list-datasource'; @Component({ selector: 'app-menu-category-list', templateUrl: './menu-category-list.component.html', - styleUrls: ['./menu-category-list.component.css'] + styleUrls: ['./menu-category-list.component.css'], }) export class MenuCategoryListComponent implements OnInit { @ViewChild('table', { static: true }) table: MatTable; @@ -25,7 +27,7 @@ export class MenuCategoryListComponent implements OnInit { private route: ActivatedRoute, private router: Router, private toaster: ToasterService, - private ser: MenuCategoryService + private ser: MenuCategoryService, ) { this.data = new BehaviorSubject([]); this.data.subscribe((data: MenuCategory[]) => { @@ -34,24 +36,24 @@ export class MenuCategoryListComponent implements OnInit { } ngOnInit() { - this.route.data - .subscribe((data: { list: MenuCategory[] }) => { - data.list.forEach(x => x.discountLimit = x.discountLimit / 100); - this.data.next(data.list); + this.route.data.subscribe((data: { list: MenuCategory[] }) => { + data.list.forEach((x) => { + x.discountLimit /= 100; }); + this.data.next(data.list); + }); this.dataSource = new MenuCategoryListDatasource(this.data); } updateSortOrder() { - this.ser.updateSortOrder(this.list) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.updateSortOrder(this.list).subscribe( + () => { + this.toaster.show('Success', ''); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } dropTable(event: CdkDragDrop) { diff --git a/bookie/src/app/menu-category/menu-category-resolver.service.spec.ts b/bookie/src/app/menu-category/menu-category-resolver.service.spec.ts index 87d60c4..660b368 100644 --- a/bookie/src/app/menu-category/menu-category-resolver.service.spec.ts +++ b/bookie/src/app/menu-category/menu-category-resolver.service.spec.ts @@ -4,7 +4,7 @@ import { MenuCategoryResolver } from './menu-category-resolver.service'; describe('MenuCategoriesResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [MenuCategoryResolver] + providers: [MenuCategoryResolver], }); }); diff --git a/bookie/src/app/menu-category/menu-category-resolver.service.ts b/bookie/src/app/menu-category/menu-category-resolver.service.ts index 599b8b2..5de4276 100644 --- a/bookie/src/app/menu-category/menu-category-resolver.service.ts +++ b/bookie/src/app/menu-category/menu-category-resolver.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { MenuCategoryService } from './menu-category.service'; -import { MenuCategory } from '../core/menu-category'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; +import { MenuCategory } from '../core/menu-category'; + +import { MenuCategoryService } from './menu-category.service'; + @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class MenuCategoryResolver implements Resolve { + constructor(private ser: MenuCategoryService) {} - constructor(private ser: MenuCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/menu-category/menu-category.service.spec.ts b/bookie/src/app/menu-category/menu-category.service.spec.ts index 2f9dfd6..bf543d6 100644 --- a/bookie/src/app/menu-category/menu-category.service.spec.ts +++ b/bookie/src/app/menu-category/menu-category.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {MenuCategoryService} from './menu-category.service'; +import { MenuCategoryService } from './menu-category.service'; describe('MenuCategoryService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [MenuCategoryService] + providers: [MenuCategoryService], }); }); diff --git a/bookie/src/app/menu-category/menu-category.service.ts b/bookie/src/app/menu-category/menu-category.service.ts index b2b3262..06d5bb0 100644 --- a/bookie/src/app/menu-category/menu-category.service.ts +++ b/bookie/src/app/menu-category/menu-category.service.ts @@ -1,71 +1,76 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { MenuCategory } from '../core/menu-category'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/menu-categories'; const serviceName = 'MenuCategoryService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class MenuCategoryService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(menuCategory: MenuCategory): Observable { - return >this.http.post(url, menuCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, menuCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(menuCategory: MenuCategory): Observable { - return >this.http.put(`${url}/${menuCategory.id}`, menuCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${menuCategory.id}`, menuCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } updateSortOrder(list: MenuCategory[]): Observable { - return >this.http.post(url, list, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'updateSortOrder')) - ); + return >( + this.http + .post(url, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) + ); } saveOrUpdate(menuCategory: MenuCategory): Observable { if (!menuCategory.id) { return this.save(menuCategory); - } else { - return this.update(menuCategory); } + return this.update(menuCategory); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/modifier-categories/modifier-categories-routing.module.ts b/bookie/src/app/modifier-categories/modifier-categories-routing.module.ts index 96913c6..5c9fd2c 100644 --- a/bookie/src/app/modifier-categories/modifier-categories-routing.module.ts +++ b/bookie/src/app/modifier-categories/modifier-categories-routing.module.ts @@ -1,61 +1,53 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { ModifierCategoryListResolver } from './modifier-category-list-resolver.service'; -import { ModifierCategoryResolver } from './modifier-category-resolver.service'; -import { ModifierCategoryListComponent } from './modifier-category-list/modifier-category-list.component'; -import { ModifierCategoryDetailComponent } from './modifier-category-detail/modifier-category-detail.component'; + import { AuthGuard } from '../auth/auth-guard.service'; +import { ModifierCategoryDetailComponent } from './modifier-category-detail/modifier-category-detail.component'; +import { ModifierCategoryListResolver } from './modifier-category-list-resolver.service'; +import { ModifierCategoryListComponent } from './modifier-category-list/modifier-category-list.component'; +import { ModifierCategoryResolver } from './modifier-category-resolver.service'; + const modifierCategoriesRoutes: Routes = [ { path: '', component: ModifierCategoryListComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { - list: ModifierCategoryListResolver - } + list: ModifierCategoryListResolver, + }, }, { path: 'new', component: ModifierCategoryDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { item: ModifierCategoryResolver, - } + }, }, { path: ':id', component: ModifierCategoryDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { - item: ModifierCategoryResolver - } - } + item: ModifierCategoryResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(modifierCategoriesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - ModifierCategoryListResolver, - ModifierCategoryResolver - ] + imports: [CommonModule, RouterModule.forChild(modifierCategoriesRoutes)], + exports: [RouterModule], + providers: [ModifierCategoryListResolver, ModifierCategoryResolver], }) -export class ModifierCategoriesRoutingModule { -} +export class ModifierCategoriesRoutingModule {} diff --git a/bookie/src/app/modifier-categories/modifier-categories.module.ts b/bookie/src/app/modifier-categories/modifier-categories.module.ts index d20126a..595906e 100644 --- a/bookie/src/app/modifier-categories/modifier-categories.module.ts +++ b/bookie/src/app/modifier-categories/modifier-categories.module.ts @@ -1,10 +1,9 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {ModifierCategoryListComponent} from './modifier-category-list/modifier-category-list.component'; -import {ModifierCategoryDetailComponent} from './modifier-category-detail/modifier-category-detail.component'; -import {ModifierCategoriesRoutingModule} from './modifier-categories-routing.module'; -import {CdkTreeModule} from '@angular/cdk/tree'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CdkTreeModule } from '@angular/cdk/tree'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -14,10 +13,12 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTreeModule } from '@angular/material/tree'; -import { CdkTableModule } from '@angular/cdk/table'; -import {ReactiveFormsModule} from '@angular/forms'; -import {SharedModule} from '../shared/shared.module'; -import {FlexLayoutModule} from '@angular/flex-layout'; + +import { SharedModule } from '../shared/shared.module'; + +import { ModifierCategoriesRoutingModule } from './modifier-categories-routing.module'; +import { ModifierCategoryDetailComponent } from './modifier-category-detail/modifier-category-detail.component'; +import { ModifierCategoryListComponent } from './modifier-category-list/modifier-category-list.component'; @NgModule({ imports: [ @@ -36,12 +37,8 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatTreeModule, ReactiveFormsModule, SharedModule, - ModifierCategoriesRoutingModule + ModifierCategoriesRoutingModule, ], - declarations: [ - ModifierCategoryListComponent, - ModifierCategoryDetailComponent - ] + declarations: [ModifierCategoryListComponent, ModifierCategoryDetailComponent], }) -export class ModifierCategoriesModule { -} +export class ModifierCategoriesModule {} diff --git a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.html b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.html index d33c6c1..293e740 100644 --- a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.html +++ b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.html @@ -5,26 +5,41 @@
-
+
Name - +
-
+
Minimum - + Maximum - +
-
+
Is Active?
@@ -34,24 +49,29 @@
  • - {{node.name}} + {{ node.name }}
  • - - {{node.name}} + (change)="toggleMenuCategorySelection(node)" + >{{ node.name }}
      diff --git a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.spec.ts b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.spec.ts index 4a1267d..2455b3b 100644 --- a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.spec.ts +++ b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {ModifierCategoryDetailComponent} from './modifier-category-detail.component'; +import { ModifierCategoryDetailComponent } from './modifier-category-detail.component'; describe('ModifierCategoryDetailComponent', () => { let component: ModifierCategoryDetailComponent; @@ -8,9 +8,8 @@ describe('ModifierCategoryDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ModifierCategoryDetailComponent] - }) - .compileComponents(); + declarations: [ModifierCategoryDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts index 075ace3..8db321b 100644 --- a/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts +++ b/bookie/src/app/modifier-categories/modifier-category-detail/modifier-category-detail.component.ts @@ -1,26 +1,27 @@ -import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; -import {ModifierCategoryService} from '../modifier-category.service'; -import {ModifierCategory} from '../../core/modifier-category'; -import {ToasterService} from '../../core/toaster.service'; -import {ConfirmDialogComponent} from '../../shared/confirm-dialog/confirm-dialog.component'; -import {MatDialog} from '@angular/material/dialog'; -import {FormBuilder, FormGroup} from '@angular/forms'; -import {MenuCategory} from '../../core/menu-category'; -import {NestedTreeControl} from '@angular/cdk/tree'; +import { NestedTreeControl } from '@angular/cdk/tree'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { MatTreeNestedDataSource } from '@angular/material/tree'; -import {Product} from '../../core/product'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { MenuCategory } from '../../core/menu-category'; +import { ModifierCategory } from '../../core/modifier-category'; +import { Product } from '../../core/product'; +import { ToasterService } from '../../core/toaster.service'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { ModifierCategoryService } from '../modifier-category.service'; @Component({ selector: 'app-role-detail', templateUrl: './modifier-category-detail.component.html', - styleUrls: ['./modifier-category-detail.component.css'] + styleUrls: ['./modifier-category-detail.component.css'], }) export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { - @ViewChild('nameElement', {static: true}) nameElement: ElementRef; + @ViewChild('nameElement', { static: true }) nameElement: ElementRef; form: FormGroup; item: ModifierCategory; - treeControl = new NestedTreeControl(node => node.products); + treeControl = new NestedTreeControl((node) => node.products); dataSource = new MatTreeNestedDataSource(); products: Map; productsOfMenuCategory: Map; @@ -31,7 +32,7 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { private fb: FormBuilder, private toaster: ToasterService, private dialog: MatDialog, - private ser: ModifierCategoryService + private ser: ModifierCategoryService, ) { this.createForm(); this.dataSource.data = []; @@ -42,15 +43,14 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { name: '', minimum: '', maximum: '', - isActive: '' + isActive: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: ModifierCategory }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: ModifierCategory }) => { + this.showItem(data.item); + }); } showItem(item: ModifierCategory) { @@ -58,9 +58,9 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { this.dataSource.data = item.menuCategories; this.form.patchValue({ name: this.item.name || '', - minimum: '' + this.item.minimum, - maximum: '' + this.item.maximum, - isActive: this.item.isActive + minimum: `${this.item.minimum}`, + maximum: `${this.item.maximum}`, + isActive: this.item.isActive, }); this.products = new Map(); this.productsOfMenuCategory = new Map(); @@ -82,40 +82,39 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { }, 0); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars,class-methods-use-this isExpanded(mc: MenuCategory) { return true; } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/modifier-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/modifier-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/modifier-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/modifier-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Modifier Category?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Modifier Category?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { @@ -141,13 +140,16 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { } isMenuCategorySelected(node: MenuCategory) { - return this.productsOfMenuCategory.get(node.id).reduce((acc, current) => acc && current.enabled, true); + return this.productsOfMenuCategory + .get(node.id) + .reduce((acc, current) => acc && current.enabled, true); } isMenuCategoryPartiallySelected(node: MenuCategory) { const total = this.productsOfMenuCategory.get(node.id).length; const ticked = this.productsOfMenuCategory.get(node.id).reduce((acc, current) => { if (current.enabled) { + // eslint-disable-next-line no-param-reassign acc += 1; } return acc; @@ -156,12 +158,14 @@ export class ModifierCategoryDetailComponent implements OnInit, AfterViewInit { } toggleProductSelection(node: Product) { - return this.products.get(node.id).enabled = !this.products.get(node.id).enabled; + this.products.get(node.id).enabled = !this.products.get(node.id).enabled; } toggleMenuCategorySelection(node: MenuCategory) { const sel = !this.isMenuCategorySelected(node); - this.productsOfMenuCategory.get(node.id).forEach((p) => {p.enabled = sel; }); + this.productsOfMenuCategory.get(node.id).forEach((p) => { + p.enabled = sel; + }); return sel; } } diff --git a/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.spec.ts b/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.spec.ts index 68c8c79..e258c08 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.spec.ts +++ b/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.spec.ts @@ -1,15 +1,18 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierCategoryListResolver} from './modifier-category-list-resolver.service'; +import { ModifierCategoryListResolver } from './modifier-category-list-resolver.service'; describe('ModifierCategoryListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierCategoryListResolver] + providers: [ModifierCategoryListResolver], }); }); - it('should be created', inject([ModifierCategoryListResolver], (service: ModifierCategoryListResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [ModifierCategoryListResolver], + (service: ModifierCategoryListResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.ts b/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.ts index 393aaa5..9b61bc1 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.ts +++ b/bookie/src/app/modifier-categories/modifier-category-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {ModifierCategory} from '../core/modifier-category'; -import {Observable} from 'rxjs/internal/Observable'; -import {ModifierCategoryService} from './modifier-category.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { ModifierCategory } from '../core/modifier-category'; + +import { ModifierCategoryService } from './modifier-category.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModifierCategoryListResolver implements Resolve { + constructor(private ser: ModifierCategoryService) {} - constructor(private ser: ModifierCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list-datasource.ts b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list-datasource.ts index 7d225f3..91b73e4 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list-datasource.ts +++ b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list-datasource.ts @@ -1,9 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; + import { ModifierCategory } from '../../core/modifier-category'; export class ModifierCategoryListDatasource extends DataSource { - constructor(public data: ModifierCategory[]) { super(); } @@ -12,6 +12,5 @@ export class ModifierCategoryListDatasource extends DataSource return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.html b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.html index 34b95bc..cb1be9b 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.html +++ b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.html @@ -8,23 +8,24 @@ - Name - {{row.name}} + {{ row.name }} Minimum - {{row.minimum}} + {{ row.minimum }} Maximum - {{row.maximum}} + {{ row.maximum }} @@ -32,9 +33,9 @@ Is Active - {{ row.isActive ? "visibility" : "visibility_off" }} + {{ row.isActive ? 'visibility' : 'visibility_off' }} - {{ row.isActive ? "Active" : "Not Active" }} + {{ row.isActive ? 'Active' : 'Not Active' }} @@ -43,9 +44,10 @@ Products
        -
      • {{mc.name}} +
      • + {{ mc.name }}
          -
        • {{p.name}}
        • +
        • {{ p.name }}
      @@ -53,7 +55,7 @@ - +
      diff --git a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.spec.ts b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.spec.ts index c21bedb..5868852 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.spec.ts +++ b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {ModifierCategoryListComponent} from './modifier-category-list.component'; +import { ModifierCategoryListComponent } from './modifier-category-list.component'; describe('ModifierCategoryListComponent', () => { let component: ModifierCategoryListComponent; @@ -8,9 +8,8 @@ describe('ModifierCategoryListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [ModifierCategoryListComponent] - }) - .compileComponents(); + declarations: [ModifierCategoryListComponent], + }).compileComponents(); fixture = TestBed.createComponent(ModifierCategoryListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.ts b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.ts index 86ea8e5..95fd42a 100644 --- a/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.ts +++ b/bookie/src/app/modifier-categories/modifier-category-list/modifier-category-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { ModifierCategoryListDatasource } from './modifier-category-list-datasource'; -import { ModifierCategory } from '../../core/modifier-category'; import { ActivatedRoute } from '@angular/router'; +import { ModifierCategory } from '../../core/modifier-category'; + +import { ModifierCategoryListDatasource } from './modifier-category-list-datasource'; + @Component({ selector: 'app-modifier-category-list', templateUrl: './modifier-category-list.component.html', - styleUrls: ['./modifier-category-list.component.css'] + styleUrls: ['./modifier-category-list.component.css'], }) export class ModifierCategoryListComponent implements OnInit { dataSource: ModifierCategoryListDatasource; @@ -14,14 +16,12 @@ export class ModifierCategoryListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'minimum', 'maximum', 'products', 'isActive']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: ModifierCategory[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: ModifierCategory[] }) => { + this.list = data.list; + }); this.dataSource = new ModifierCategoryListDatasource(this.list); } } diff --git a/bookie/src/app/modifier-categories/modifier-category-resolver.service.spec.ts b/bookie/src/app/modifier-categories/modifier-category-resolver.service.spec.ts index d90f74b..f7dd896 100644 --- a/bookie/src/app/modifier-categories/modifier-category-resolver.service.spec.ts +++ b/bookie/src/app/modifier-categories/modifier-category-resolver.service.spec.ts @@ -1,15 +1,18 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierCategoryResolver} from './modifier-category-resolver.service'; +import { ModifierCategoryResolver } from './modifier-category-resolver.service'; describe('ModifierCategoryResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierCategoryResolver] + providers: [ModifierCategoryResolver], }); }); - it('should be created', inject([ModifierCategoryResolver], (service: ModifierCategoryResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [ModifierCategoryResolver], + (service: ModifierCategoryResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/modifier-categories/modifier-category-resolver.service.ts b/bookie/src/app/modifier-categories/modifier-category-resolver.service.ts index b2d95c1..66bb194 100644 --- a/bookie/src/app/modifier-categories/modifier-category-resolver.service.ts +++ b/bookie/src/app/modifier-categories/modifier-category-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {ModifierCategory} from '../core/modifier-category'; -import {Observable} from 'rxjs/internal/Observable'; -import {ModifierCategoryService} from './modifier-category.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { ModifierCategory } from '../core/modifier-category'; + +import { ModifierCategoryService } from './modifier-category.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModifierCategoryResolver implements Resolve { + constructor(private ser: ModifierCategoryService) {} - constructor(private ser: ModifierCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/modifier-categories/modifier-category.service.spec.ts b/bookie/src/app/modifier-categories/modifier-category.service.spec.ts index ef02eeb..116349c 100644 --- a/bookie/src/app/modifier-categories/modifier-category.service.spec.ts +++ b/bookie/src/app/modifier-categories/modifier-category.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierCategoryService} from './modifier-category.service'; +import { ModifierCategoryService } from './modifier-category.service'; describe('ModifierCategoryService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierCategoryService] + providers: [ModifierCategoryService], }); }); diff --git a/bookie/src/app/modifier-categories/modifier-category.service.ts b/bookie/src/app/modifier-categories/modifier-category.service.ts index eae2a65..9c839ff 100644 --- a/bookie/src/app/modifier-categories/modifier-category.service.ts +++ b/bookie/src/app/modifier-categories/modifier-category.service.ts @@ -1,72 +1,76 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { ModifierCategory } from '../core/modifier-category'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/modifier-categories'; const serviceName = 'ModifierCategoryService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModifierCategoryService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } listForProduct(id: string): Observable { - return >this.http.get(`${url}/for-product/${id}`) - .pipe( - catchError(this.log.handleError(serviceName, 'listIsActiveOfProduct')) - ); + return >( + this.http + .get(`${url}/for-product/${id}`) + .pipe(catchError(this.log.handleError(serviceName, 'listIsActiveOfProduct'))) + ); } - save(modifierCategory: ModifierCategory): Observable { - return >this.http.post(url, modifierCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, modifierCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(modifierCategory: ModifierCategory): Observable { - return >this.http.put(`${url}/${modifierCategory.id}`, modifierCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${modifierCategory.id}`, modifierCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(modifierCategory: ModifierCategory): Observable { if (!modifierCategory.id) { return this.save(modifierCategory); - } else { - return this.update(modifierCategory); } + return this.update(modifierCategory); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.html b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.html index 72eb111..d469494 100644 --- a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.html +++ b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.html @@ -5,26 +5,46 @@ -
      +
      Name - +
      -
      +
      Show In Bill?
      -
      +
      Price - +
      -
      +
      Category @@ -34,15 +54,22 @@
      -
      +
      Is Active?
      - +
      diff --git a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.spec.ts b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.spec.ts index d6417cc..3d77151 100644 --- a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.spec.ts +++ b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {ModifierDetailComponent} from './modifier-detail.component'; +import { ModifierDetailComponent } from './modifier-detail.component'; describe('ModifierDetailComponent', () => { let component: ModifierDetailComponent; @@ -8,9 +8,8 @@ describe('ModifierDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ModifierDetailComponent] - }) - .compileComponents(); + declarations: [ModifierDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts index b099eda..772f43d 100644 --- a/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts +++ b/bookie/src/app/modifiers/modifier-detail/modifier-detail.component.ts @@ -1,17 +1,18 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { ToasterService } from '../../core/toaster.service'; -import { ActivatedRoute, Router } from '@angular/router'; -import { ModifierService } from '../modifier.service'; -import { Modifier } from '../../core/modifier'; -import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; -import { MatDialog } from '@angular/material/dialog'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { Modifier } from '../../core/modifier'; import { ModifierCategory } from '../../core/modifier-category'; +import { ToasterService } from '../../core/toaster.service'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { ModifierService } from '../modifier.service'; @Component({ selector: 'app-modifier-detail', templateUrl: './modifier-detail.component.html', - styleUrls: ['./modifier-detail.component.css'] + styleUrls: ['./modifier-detail.component.css'], }) export class ModifierDetailComponent implements OnInit, AfterViewInit { @ViewChild('name', { static: true }) nameElement: ElementRef; @@ -25,7 +26,7 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: ModifierService + private ser: ModifierService, ) { this.createForm(); } @@ -36,16 +37,17 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { showInBill: '', price: '', modifierCategory: '', - isActive: '' + isActive: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Modifier, modifierCategories: ModifierCategory[] }) => { + this.route.data.subscribe( + (data: { item: Modifier; modifierCategories: ModifierCategory[] }) => { this.modifierCategories = data.modifierCategories; this.showItem(data.item); - }); + }, + ); } showItem(item: Modifier) { @@ -55,7 +57,7 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { showInBill: this.item.showInBill, price: this.item.price || '', isActive: this.item.isActive, - modifierCategory: this.item.modifierCategory.id ? this.item.modifierCategory.id : '' + modifierCategory: this.item.modifierCategory.id ? this.item.modifierCategory.id : '', }); } @@ -66,35 +68,33 @@ export class ModifierDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/modifiers'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/modifiers'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/modifiers'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/modifiers'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Modifier?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Modifier?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/modifiers/modifier-list-resolver.service.spec.ts b/bookie/src/app/modifiers/modifier-list-resolver.service.spec.ts index f0c6ea8..881c9de 100644 --- a/bookie/src/app/modifiers/modifier-list-resolver.service.spec.ts +++ b/bookie/src/app/modifiers/modifier-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierListResolver} from './modifier-list-resolver.service'; +import { ModifierListResolver } from './modifier-list-resolver.service'; describe('ModifierListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierListResolver] + providers: [ModifierListResolver], }); }); diff --git a/bookie/src/app/modifiers/modifier-list-resolver.service.ts b/bookie/src/app/modifiers/modifier-list-resolver.service.ts index 5e5485e..dd7d559 100644 --- a/bookie/src/app/modifiers/modifier-list-resolver.service.ts +++ b/bookie/src/app/modifiers/modifier-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Modifier} from '../core/modifier'; -import {Observable} from 'rxjs/internal/Observable'; -import {ModifierService} from './modifier.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Modifier } from '../core/modifier'; + +import { ModifierService } from './modifier.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModifierListResolver implements Resolve { + constructor(private ser: ModifierService) {} - constructor(private ser: ModifierService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts b/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts index f6ab215..d5a47cf 100644 --- a/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts +++ b/bookie/src/app/modifiers/modifier-list/modifier-list-datasource.ts @@ -1,48 +1,50 @@ import { DataSource } from '@angular/cdk/collections'; -import { map, tap } from 'rxjs/operators'; import { merge, Observable } from 'rxjs'; -import { Modifier } from '../../core/modifier'; +import { map, tap } from 'rxjs/operators'; +import { Modifier } from '../../core/modifier'; export class ModifierListDataSource extends DataSource { public data: Modifier[]; public viewData: Modifier[]; private filterValue: string; - constructor(private readonly filter: Observable, private readonly dataObs: Observable) { + constructor( + private readonly filter: Observable, + private readonly dataObs: Observable, + ) { super(); this.data = []; this.viewData = []; this.filter = filter.pipe( - tap(x => this.filterValue = x) + tap((x) => { + this.filterValue = x; + }), ); this.dataObs = dataObs.pipe( - tap(x => this.data = x) + tap((x) => { + this.data = x; + }), ); } connect(): Observable { - const dataMutations = [ - this.dataObs, - this.filter - ]; + const dataMutations = [this.dataObs, this.filter]; return merge(...dataMutations).pipe( - map((x: any) => { + map(() => { this.viewData = this.getFilteredData([...this.data]); return this.viewData; - }) + }), ); } - disconnect() { - } + disconnect() {} private getFilteredData(data: Modifier[]): Modifier[] { - const filter = (this.filterValue === undefined) ? '' : this.filterValue; - return data.filter(x => { - return x.modifierCategory.id === filter || filter === ''; - } - ); + const filter = this.filterValue === undefined ? '' : this.filterValue; + return data.filter((x) => { + return x.modifierCategory.id === filter || filter === ''; + }); } } diff --git a/bookie/src/app/modifiers/modifier-list/modifier-list.component.html b/bookie/src/app/modifiers/modifier-list/modifier-list.component.html index dee814b..ff95aed 100644 --- a/bookie/src/app/modifiers/modifier-list/modifier-list.component.html +++ b/bookie/src/app/modifiers/modifier-list/modifier-list.component.html @@ -8,25 +8,35 @@
      -
      - - Modifier Category - - -- All Categories -- - - {{ mc.name }} - - - -
      +
      + + Modifier Category + + -- All Categories -- + + {{ mc.name }} + + + +
      - Name - {{row.name}} + {{ row.name }} @@ -36,9 +46,9 @@
      - {{ row.showInBill ? "visibility" : "visibility_off" }} + {{ row.showInBill ? 'visibility' : 'visibility_off' }} - {{ row.showInBill ? "Show" : "Hide" }} + {{ row.showInBill ? 'Show' : 'Hide' }}
      @@ -47,28 +57,28 @@ Price - {{row.price | currency:'INR'}} + {{ row.price | currency: 'INR' }} Category - {{row.modifierCategory.name}} + {{ row.modifierCategory.name }} Is Active - - {{ row.isActive ? "visibility" : "visibility_off" }} - - {{ row.isActive ? "Active" : "Not Active" }} + + {{ row.isActive ? 'visibility' : 'visibility_off' }} + + {{ row.isActive ? 'Active' : 'Not Active' }} - - + +
      diff --git a/bookie/src/app/modifiers/modifier-list/modifier-list.component.spec.ts b/bookie/src/app/modifiers/modifier-list/modifier-list.component.spec.ts index bd1585e..cea6910 100644 --- a/bookie/src/app/modifiers/modifier-list/modifier-list.component.spec.ts +++ b/bookie/src/app/modifiers/modifier-list/modifier-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {ModifierListComponent} from './modifier-list.component'; +import { ModifierListComponent } from './modifier-list.component'; describe('ModifierListComponent', () => { let component: ModifierListComponent; @@ -8,9 +8,8 @@ describe('ModifierListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [ModifierListComponent] - }) - .compileComponents(); + declarations: [ModifierListComponent], + }).compileComponents(); fixture = TestBed.createComponent(ModifierListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/modifiers/modifier-list/modifier-list.component.ts b/bookie/src/app/modifiers/modifier-list/modifier-list.component.ts index 2eec228..732b086 100644 --- a/bookie/src/app/modifiers/modifier-list/modifier-list.component.ts +++ b/bookie/src/app/modifiers/modifier-list/modifier-list.component.ts @@ -1,16 +1,18 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { ModifierListDataSource } from './modifier-list-datasource'; import { MatTable } from '@angular/material/table'; -import { Modifier } from '../../core/modifier'; +import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; -import {ModifierCategory} from '../../core/modifier-category'; + +import { Modifier } from '../../core/modifier'; +import { ModifierCategory } from '../../core/modifier-category'; + +import { ModifierListDataSource } from './modifier-list-datasource'; @Component({ selector: 'app-modifier-list', templateUrl: './modifier-list.component.html', - styleUrls: ['./modifier-list.component.css'] + styleUrls: ['./modifier-list.component.css'], }) export class ModifierListComponent implements OnInit { @ViewChild('table', { static: true }) table: MatTable; @@ -23,13 +25,9 @@ export class ModifierListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns: string[] = ['name', 'showInBill', 'price', 'isActive', 'modifierCategory']; - constructor( - private route: ActivatedRoute, - private fb: FormBuilder, - private router: Router - ) { + constructor(private route: ActivatedRoute, private fb: FormBuilder, private router: Router) { this.form = this.fb.group({ - modifierCategory: '' + modifierCategory: '', }); this.filter = new BehaviorSubject(''); this.data = new BehaviorSubject([]); @@ -43,11 +41,12 @@ export class ModifierListComponent implements OnInit { } ngOnInit() { - this.route.data - .subscribe((data: { list: Modifier[], modifierCategories: ModifierCategory[] }) => { + this.route.data.subscribe( + (data: { list: Modifier[]; modifierCategories: ModifierCategory[] }) => { this.data.next(data.list); this.modifierCategories = data.modifierCategories; - }); + }, + ); this.dataSource = new ModifierListDataSource(this.filter, this.data); } } diff --git a/bookie/src/app/modifiers/modifier-resolver.service.spec.ts b/bookie/src/app/modifiers/modifier-resolver.service.spec.ts index b65e093..78f27fa 100644 --- a/bookie/src/app/modifiers/modifier-resolver.service.spec.ts +++ b/bookie/src/app/modifiers/modifier-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierResolver} from './modifier-resolver.service'; +import { ModifierResolver } from './modifier-resolver.service'; describe('ModifierResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierResolver] + providers: [ModifierResolver], }); }); diff --git a/bookie/src/app/modifiers/modifier-resolver.service.ts b/bookie/src/app/modifiers/modifier-resolver.service.ts index 3f79f99..5e85ab1 100644 --- a/bookie/src/app/modifiers/modifier-resolver.service.ts +++ b/bookie/src/app/modifiers/modifier-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {ModifierService} from './modifier.service'; -import {Modifier} from '../core/modifier'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Modifier } from '../core/modifier'; + +import { ModifierService } from './modifier.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModifierResolver implements Resolve { + constructor(private ser: ModifierService) {} - constructor(private ser: ModifierService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/modifiers/modifier.service.spec.ts b/bookie/src/app/modifiers/modifier.service.spec.ts index 5b81462..a8e0a55 100644 --- a/bookie/src/app/modifiers/modifier.service.spec.ts +++ b/bookie/src/app/modifiers/modifier.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ModifierService} from './modifier.service'; +import { ModifierService } from './modifier.service'; describe('ModifierService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ModifierService] + providers: [ModifierService], }); }); diff --git a/bookie/src/app/modifiers/modifier.service.ts b/bookie/src/app/modifiers/modifier.service.ts index 2f2ccc1..c3e5acc 100644 --- a/bookie/src/app/modifiers/modifier.service.ts +++ b/bookie/src/app/modifiers/modifier.service.ts @@ -1,64 +1,67 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Modifier } from '../core/modifier'; + import { ErrorLoggerService } from '../core/error-logger.service'; +import { Modifier } from '../core/modifier'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/modifiers'; const serviceName = 'ModifierService'; -@Injectable({providedIn: 'root'}) +@Injectable({ providedIn: 'root' }) export class ModifierService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'getList')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'getList'))) + ); } save(modifier: Modifier): Observable { - return >this.http.post(url, modifier, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, modifier, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(modifier: Modifier): Observable { - return >this.http.put(`${url}/${modifier.id}`, modifier, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${modifier.id}`, modifier, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(modifier: Modifier): Observable { if (!modifier.id) { return this.save(modifier); - } else { - return this.update(modifier); } + return this.update(modifier); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/modifiers/modifiers-routing.module.spec.ts b/bookie/src/app/modifiers/modifiers-routing.module.spec.ts index c5c53a4..5811810 100644 --- a/bookie/src/app/modifiers/modifiers-routing.module.spec.ts +++ b/bookie/src/app/modifiers/modifiers-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {ModifiersRoutingModule} from './modifiers-routing.module'; +import { ModifiersRoutingModule } from './modifiers-routing.module'; describe('ModifiersRoutingModule', () => { let modifiersRoutingModule: ModifiersRoutingModule; diff --git a/bookie/src/app/modifiers/modifiers-routing.module.ts b/bookie/src/app/modifiers/modifiers-routing.module.ts index 4bd0bde..bd64ee3 100644 --- a/bookie/src/app/modifiers/modifiers-routing.module.ts +++ b/bookie/src/app/modifiers/modifiers-routing.module.ts @@ -1,67 +1,57 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { ModifierListResolver } from './modifier-list-resolver.service'; -import { ModifierResolver } from './modifier-resolver.service'; -import { ModifierDetailComponent } from './modifier-detail/modifier-detail.component'; -import { ModifierListComponent } from './modifier-list/modifier-list.component'; - import { AuthGuard } from '../auth/auth-guard.service'; import { ModifierCategoryListResolver } from '../modifier-categories/modifier-category-list-resolver.service'; +import { ModifierDetailComponent } from './modifier-detail/modifier-detail.component'; +import { ModifierListResolver } from './modifier-list-resolver.service'; +import { ModifierListComponent } from './modifier-list/modifier-list.component'; +import { ModifierResolver } from './modifier-resolver.service'; + const modifiersRoutes: Routes = [ { path: '', component: ModifierListComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { list: ModifierListResolver, - modifierCategories: ModifierCategoryListResolver - } + modifierCategories: ModifierCategoryListResolver, + }, }, { path: 'new', component: ModifierDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { item: ModifierResolver, - modifierCategories: ModifierCategoryListResolver - } + modifierCategories: ModifierCategoryListResolver, + }, }, { path: ':id', component: ModifierDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Modifiers' + permission: 'Modifiers', }, resolve: { item: ModifierResolver, - modifierCategories: ModifierCategoryListResolver - } - } + modifierCategories: ModifierCategoryListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(modifiersRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - ModifierListResolver, - ModifierResolver - ] + imports: [CommonModule, RouterModule.forChild(modifiersRoutes)], + exports: [RouterModule], + providers: [ModifierListResolver, ModifierResolver], }) -export class ModifiersRoutingModule { -} +export class ModifiersRoutingModule {} diff --git a/bookie/src/app/modifiers/modifiers.module.spec.ts b/bookie/src/app/modifiers/modifiers.module.spec.ts index b37d873..8356385 100644 --- a/bookie/src/app/modifiers/modifiers.module.spec.ts +++ b/bookie/src/app/modifiers/modifiers.module.spec.ts @@ -1,4 +1,4 @@ -import {ModifiersModule} from './modifiers.module'; +import { ModifiersModule } from './modifiers.module'; describe('ModifiersModule', () => { let modifiersModule: ModifiersModule; diff --git a/bookie/src/app/modifiers/modifiers.module.ts b/bookie/src/app/modifiers/modifiers.module.ts index ac7855b..c82220c 100644 --- a/bookie/src/app/modifiers/modifiers.module.ts +++ b/bookie/src/app/modifiers/modifiers.module.ts @@ -1,9 +1,7 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; - -import { ModifierListComponent } from './modifier-list/modifier-list.component'; -import { ModifierDetailComponent } from './modifier-detail/modifier-detail.component'; -import { ModifiersRoutingModule } from './modifiers-routing.module'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -13,8 +11,10 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FlexLayoutModule } from '@angular/flex-layout'; + +import { ModifierDetailComponent } from './modifier-detail/modifier-detail.component'; +import { ModifierListComponent } from './modifier-list/modifier-list.component'; +import { ModifiersRoutingModule } from './modifiers-routing.module'; @NgModule({ imports: [ @@ -30,12 +30,8 @@ import { FlexLayoutModule } from '@angular/flex-layout'; MatSelectModule, MatCheckboxModule, ReactiveFormsModule, - ModifiersRoutingModule + ModifiersRoutingModule, ], - declarations: [ - ModifierListComponent, - ModifierDetailComponent - ] + declarations: [ModifierListComponent, ModifierDetailComponent], }) -export class ModifiersModule { -} +export class ModifiersModule {} diff --git a/bookie/src/app/nav-bar/nav-bar.component.html b/bookie/src/app/nav-bar/nav-bar.component.html index 54a6374..3437c8c 100644 --- a/bookie/src/app/nav-bar/nav-bar.component.html +++ b/bookie/src/app/nav-bar/nav-bar.component.html @@ -5,11 +5,15 @@ - diff --git a/bookie/src/app/nav-bar/nav-bar.component.spec.ts b/bookie/src/app/nav-bar/nav-bar.component.spec.ts index 0d21a39..7590a63 100644 --- a/bookie/src/app/nav-bar/nav-bar.component.spec.ts +++ b/bookie/src/app/nav-bar/nav-bar.component.spec.ts @@ -8,9 +8,8 @@ describe('NavBarComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ NavBarComponent ] - }) - .compileComponents(); + declarations: [NavBarComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/nav-bar/nav-bar.component.ts b/bookie/src/app/nav-bar/nav-bar.component.ts index 7ca8f1c..3bd3daa 100644 --- a/bookie/src/app/nav-bar/nav-bar.component.ts +++ b/bookie/src/app/nav-bar/nav-bar.component.ts @@ -1,20 +1,18 @@ import { Component } from '@angular/core'; import { Router } from '@angular/router'; + import { AuthService } from '../auth/auth.service'; @Component({ selector: 'app-nav-bar', templateUrl: './nav-bar.component.html', - styleUrls: ['./nav-bar.component.css'] + styleUrls: ['./nav-bar.component.css'], }) export class NavBarComponent { + constructor(private router: Router, public auth: AuthService) {} - constructor(private router: Router, public auth: AuthService) { + logout() { + this.auth.logout(); + this.router.navigate(['/']); } - - logout() { - this.auth.logout(); - this.router.navigate(['/']); - } - } diff --git a/bookie/src/app/printers/printer-detail/printer-detail.component.html b/bookie/src/app/printers/printer-detail/printer-detail.component.html index 9801759..cfd2b25 100644 --- a/bookie/src/app/printers/printer-detail/printer-detail.component.html +++ b/bookie/src/app/printers/printer-detail/printer-detail.component.html @@ -5,29 +5,41 @@
      -
      +
      Name - +
      -
      +
      Address - + Cut Code - +
      - +
      diff --git a/bookie/src/app/printers/printer-detail/printer-detail.component.spec.ts b/bookie/src/app/printers/printer-detail/printer-detail.component.spec.ts index 91307ad..1442812 100644 --- a/bookie/src/app/printers/printer-detail/printer-detail.component.spec.ts +++ b/bookie/src/app/printers/printer-detail/printer-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {PrinterDetailComponent} from './printer-detail.component'; +import { PrinterDetailComponent } from './printer-detail.component'; describe('PrinterDetailComponent', () => { let component: PrinterDetailComponent; @@ -8,9 +8,8 @@ describe('PrinterDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [PrinterDetailComponent] - }) - .compileComponents(); + declarations: [PrinterDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/printers/printer-detail/printer-detail.component.ts b/bookie/src/app/printers/printer-detail/printer-detail.component.ts index 79f8e0e..f7ccfc1 100644 --- a/bookie/src/app/printers/printer-detail/printer-detail.component.ts +++ b/bookie/src/app/printers/printer-detail/printer-detail.component.ts @@ -1,17 +1,17 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; -import { PrinterService } from '../printer.service'; import { Printer } from '../../core/printer'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { PrinterService } from '../printer.service'; @Component({ selector: 'app-printer-detail', templateUrl: './printer-detail.component.html', - styleUrls: ['./printer-detail.component.css'] + styleUrls: ['./printer-detail.component.css'], }) export class PrinterDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -24,7 +24,7 @@ export class PrinterDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: PrinterService + private ser: PrinterService, ) { this.createForm(); } @@ -33,15 +33,14 @@ export class PrinterDetailComponent implements OnInit, AfterViewInit { this.form = this.fb.group({ name: '', address: '', - cutCode: '' + cutCode: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Printer }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: Printer }) => { + this.showItem(data.item); + }); } showItem(item: Printer) { @@ -49,7 +48,7 @@ export class PrinterDetailComponent implements OnInit, AfterViewInit { this.form.setValue({ name: this.item.name || '', address: this.item.address || '', - cutCode: this.item.cutCode || '' + cutCode: this.item.cutCode || '', }); } @@ -60,35 +59,33 @@ export class PrinterDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/printers'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/printers'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/printers'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/printers'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Printer?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Printer?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/printers/printer-list-resolver.service.spec.ts b/bookie/src/app/printers/printer-list-resolver.service.spec.ts index d238160..c7a0993 100644 --- a/bookie/src/app/printers/printer-list-resolver.service.spec.ts +++ b/bookie/src/app/printers/printer-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {PrinterListResolver} from './printer-list-resolver.service'; +import { PrinterListResolver } from './printer-list-resolver.service'; describe('PrinterListResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [PrinterListResolver] + providers: [PrinterListResolver], }); }); diff --git a/bookie/src/app/printers/printer-list-resolver.service.ts b/bookie/src/app/printers/printer-list-resolver.service.ts index 3bd4cc2..80e5d0c 100644 --- a/bookie/src/app/printers/printer-list-resolver.service.ts +++ b/bookie/src/app/printers/printer-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Printer} from '../core/printer'; -import {Observable} from 'rxjs/internal/Observable'; -import {PrinterService} from './printer.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Printer } from '../core/printer'; + +import { PrinterService } from './printer.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class PrinterListResolver implements Resolve { + constructor(private ser: PrinterService) {} - constructor(private ser: PrinterService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/printers/printer-list/printer-list-datasource.ts b/bookie/src/app/printers/printer-list/printer-list-datasource.ts index 15152d8..9d464a8 100644 --- a/bookie/src/app/printers/printer-list/printer-list-datasource.ts +++ b/bookie/src/app/printers/printer-list/printer-list-datasource.ts @@ -1,9 +1,9 @@ -import {DataSource} from '@angular/cdk/collections'; -import {Observable, of as observableOf} from 'rxjs'; -import {Printer} from '../../core/printer'; +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; + +import { Printer } from '../../core/printer'; export class PrinterListDataSource extends DataSource { - constructor(public data: Printer[]) { super(); } @@ -12,6 +12,5 @@ export class PrinterListDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/printers/printer-list/printer-list.component.html b/bookie/src/app/printers/printer-list/printer-list.component.html index e0fa2a0..2ac2920 100644 --- a/bookie/src/app/printers/printer-list/printer-list.component.html +++ b/bookie/src/app/printers/printer-list/printer-list.component.html @@ -8,28 +8,28 @@ - Name - {{row.name}} + {{ row.name }} Address - {{row.address}} + {{ row.address }} Cut Code - {{row.cutCode}} + {{ row.cutCode }} - - + diff --git a/bookie/src/app/printers/printer-list/printer-list.component.spec.ts b/bookie/src/app/printers/printer-list/printer-list.component.spec.ts index 530a9f8..df07ce5 100644 --- a/bookie/src/app/printers/printer-list/printer-list.component.spec.ts +++ b/bookie/src/app/printers/printer-list/printer-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {PrinterListComponent} from './printer-list.component'; +import { PrinterListComponent } from './printer-list.component'; describe('PrinterListComponent', () => { let component: PrinterListComponent; @@ -8,9 +8,8 @@ describe('PrinterListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [PrinterListComponent] - }) - .compileComponents(); + declarations: [PrinterListComponent], + }).compileComponents(); fixture = TestBed.createComponent(PrinterListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/printers/printer-list/printer-list.component.ts b/bookie/src/app/printers/printer-list/printer-list.component.ts index 3552e65..fd0027e 100644 --- a/bookie/src/app/printers/printer-list/printer-list.component.ts +++ b/bookie/src/app/printers/printer-list/printer-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { PrinterListDataSource } from './printer-list-datasource'; -import { Printer } from '../../core/printer'; import { ActivatedRoute } from '@angular/router'; +import { Printer } from '../../core/printer'; + +import { PrinterListDataSource } from './printer-list-datasource'; + @Component({ selector: 'app-printer-list', templateUrl: './printer-list.component.html', - styleUrls: ['./printer-list.component.css'] + styleUrls: ['./printer-list.component.css'], }) export class PrinterListComponent implements OnInit { dataSource: PrinterListDataSource; @@ -14,14 +16,12 @@ export class PrinterListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'address', 'cutCode']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: Printer[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: Printer[] }) => { + this.list = data.list; + }); this.dataSource = new PrinterListDataSource(this.list); } } diff --git a/bookie/src/app/printers/printer-resolver.service.spec.ts b/bookie/src/app/printers/printer-resolver.service.spec.ts index 09422c9..73b0731 100644 --- a/bookie/src/app/printers/printer-resolver.service.spec.ts +++ b/bookie/src/app/printers/printer-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {PrinterResolver} from './printer-resolver.service'; +import { PrinterResolver } from './printer-resolver.service'; describe('PrinterResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [PrinterResolver] + providers: [PrinterResolver], }); }); diff --git a/bookie/src/app/printers/printer-resolver.service.ts b/bookie/src/app/printers/printer-resolver.service.ts index cc2e2c8..e2505e0 100644 --- a/bookie/src/app/printers/printer-resolver.service.ts +++ b/bookie/src/app/printers/printer-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {PrinterService} from './printer.service'; -import {Printer} from '../core/printer'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Printer } from '../core/printer'; + +import { PrinterService } from './printer.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class PrinterResolver implements Resolve { + constructor(private ser: PrinterService) {} - constructor(private ser: PrinterService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/printers/printer.service.spec.ts b/bookie/src/app/printers/printer.service.spec.ts index 4c46518..3c076f3 100644 --- a/bookie/src/app/printers/printer.service.spec.ts +++ b/bookie/src/app/printers/printer.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {PrinterService} from './printer.service'; +import { PrinterService } from './printer.service'; describe('PrinterService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [PrinterService] + providers: [PrinterService], }); }); diff --git a/bookie/src/app/printers/printer.service.ts b/bookie/src/app/printers/printer.service.ts index 1f4014b..bc31d9d 100644 --- a/bookie/src/app/printers/printer.service.ts +++ b/bookie/src/app/printers/printer.service.ts @@ -1,64 +1,68 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { Printer } from '../core/printer'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/printers'; const serviceName = 'PrinterService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class PrinterService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(printer: Printer): Observable { - return >this.http.post(url, printer, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, printer, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(printer: Printer): Observable { - return >this.http.put(`${url}/${printer.id}`, printer, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${printer.id}`, printer, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(printer: Printer): Observable { if (!printer.id) { return this.save(printer); - } else { - return this.update(printer); } + return this.update(printer); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/printers/printers-routing.module.spec.ts b/bookie/src/app/printers/printers-routing.module.spec.ts index 5bd52e8..55fab1a 100644 --- a/bookie/src/app/printers/printers-routing.module.spec.ts +++ b/bookie/src/app/printers/printers-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {PrintersRoutingModule} from './printers-routing.module'; +import { PrintersRoutingModule } from './printers-routing.module'; describe('PrintersRoutingModule', () => { let printersRoutingModule: PrintersRoutingModule; diff --git a/bookie/src/app/printers/printers-routing.module.ts b/bookie/src/app/printers/printers-routing.module.ts index 31c2a77..4728d49 100644 --- a/bookie/src/app/printers/printers-routing.module.ts +++ b/bookie/src/app/printers/printers-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {PrinterListResolver} from './printer-list-resolver.service'; -import {PrinterResolver} from './printer-resolver.service'; -import {PrinterListComponent} from './printer-list/printer-list.component'; -import {PrinterDetailComponent} from './printer-detail/printer-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { PrinterDetailComponent } from './printer-detail/printer-detail.component'; +import { PrinterListResolver } from './printer-list-resolver.service'; +import { PrinterListComponent } from './printer-list/printer-list.component'; +import { PrinterResolver } from './printer-resolver.service'; const printersRoutes: Routes = [ { @@ -13,49 +15,39 @@ const printersRoutes: Routes = [ component: PrinterListComponent, canActivate: [AuthGuard], data: { - permission: 'Printers' + permission: 'Printers', }, resolve: { - list: PrinterListResolver - } + list: PrinterListResolver, + }, }, { path: 'new', component: PrinterDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Printers' + permission: 'Printers', }, resolve: { - item: PrinterResolver - } + item: PrinterResolver, + }, }, { path: ':id', component: PrinterDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Printers' + permission: 'Printers', }, resolve: { - item: PrinterResolver - } - } + item: PrinterResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(printersRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - PrinterListResolver, - PrinterResolver - ] + imports: [CommonModule, RouterModule.forChild(printersRoutes)], + exports: [RouterModule], + providers: [PrinterListResolver, PrinterResolver], }) -export class PrintersRoutingModule { -} +export class PrintersRoutingModule {} diff --git a/bookie/src/app/printers/printers.module.spec.ts b/bookie/src/app/printers/printers.module.spec.ts index 5520f68..958327b 100644 --- a/bookie/src/app/printers/printers.module.spec.ts +++ b/bookie/src/app/printers/printers.module.spec.ts @@ -1,4 +1,4 @@ -import {PrintersModule} from './printers.module'; +import { PrintersModule } from './printers.module'; describe('PrintersModule', () => { let printersModule: PrintersModule; diff --git a/bookie/src/app/printers/printers.module.ts b/bookie/src/app/printers/printers.module.ts index aa08d92..2f71d51 100644 --- a/bookie/src/app/printers/printers.module.ts +++ b/bookie/src/app/printers/printers.module.ts @@ -1,18 +1,18 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {PrinterListComponent} from './printer-list/printer-list.component'; -import {PrinterDetailComponent} from './printer-detail/printer-detail.component'; -import {PrintersRoutingModule} from './printers-routing.module'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; -import {CdkTableModule} from '@angular/cdk/table'; -import {ReactiveFormsModule} from '@angular/forms'; -import {FlexLayoutModule} from '@angular/flex-layout'; + +import { PrinterDetailComponent } from './printer-detail/printer-detail.component'; +import { PrinterListComponent } from './printer-list/printer-list.component'; +import { PrintersRoutingModule } from './printers-routing.module'; @NgModule({ imports: [ @@ -26,12 +26,8 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatProgressSpinnerModule, MatTableModule, ReactiveFormsModule, - PrintersRoutingModule + PrintersRoutingModule, ], - declarations: [ - PrinterListComponent, - PrinterDetailComponent - ] + declarations: [PrinterListComponent, PrinterDetailComponent], }) -export class PrintersModule { -} +export class PrintersModule {} diff --git a/bookie/src/app/product-sale-report/product-sale-report-datasource.ts b/bookie/src/app/product-sale-report/product-sale-report-datasource.ts index 0333094..09c93ca 100644 --- a/bookie/src/app/product-sale-report/product-sale-report-datasource.ts +++ b/bookie/src/app/product-sale-report/product-sale-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { ProductSaleReportItem } from './product-sale-report'; +import { ProductSaleReportItem } from './product-sale-report-item'; export class ProductSaleReportDataSource extends DataSource { - constructor(public data: ProductSaleReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class ProductSaleReportDataSource extends DataSource { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ProductSaleReportResolver] + providers: [ProductSaleReportResolver], }); }); - it('should be created', inject([ProductSaleReportResolver], (service: ProductSaleReportResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [ProductSaleReportResolver], + (service: ProductSaleReportResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/product-sale-report/product-sale-report-resolver.service.ts b/bookie/src/app/product-sale-report/product-sale-report-resolver.service.ts index c7cbac2..fd57cd9 100644 --- a/bookie/src/app/product-sale-report/product-sale-report-resolver.service.ts +++ b/bookie/src/app/product-sale-report/product-sale-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {ProductSaleReport} from './product-sale-report'; -import {ProductSaleReportService} from './product-sale-report.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { ProductSaleReport } from './product-sale-report'; +import { ProductSaleReportService } from './product-sale-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ProductSaleReportResolver implements Resolve { + constructor(private ser: ProductSaleReportService) {} - constructor(private ser: ProductSaleReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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/product-sale-report/product-sale-report-routing.module.spec.ts b/bookie/src/app/product-sale-report/product-sale-report-routing.module.spec.ts index 452df50..e66118f 100644 --- a/bookie/src/app/product-sale-report/product-sale-report-routing.module.spec.ts +++ b/bookie/src/app/product-sale-report/product-sale-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {ProductSaleReportRoutingModule} from './product-sale-report-routing.module'; +import { ProductSaleReportRoutingModule } from './product-sale-report-routing.module'; describe('ProductSaleReportRoutingModule', () => { let productSaleReportRoutingModule: ProductSaleReportRoutingModule; diff --git a/bookie/src/app/product-sale-report/product-sale-report-routing.module.ts b/bookie/src/app/product-sale-report/product-sale-report-routing.module.ts index f2b9e9e..8cf5f68 100644 --- a/bookie/src/app/product-sale-report/product-sale-report-routing.module.ts +++ b/bookie/src/app/product-sale-report/product-sale-report-routing.module.ts @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { ProductSaleReportResolver } from './product-sale-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; + +import { ProductSaleReportResolver } from './product-sale-report-resolver.service'; import { ProductSaleReportComponent } from './product-sale-report.component'; const productSaleReportRoutes: Routes = [ @@ -11,27 +13,18 @@ const productSaleReportRoutes: Routes = [ component: ProductSaleReportComponent, canActivate: [AuthGuard], data: { - permission: 'Product Sale Report' + permission: 'Product Sale Report', }, resolve: { - info: ProductSaleReportResolver + info: ProductSaleReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(productSaleReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - ProductSaleReportResolver - ] + imports: [CommonModule, RouterModule.forChild(productSaleReportRoutes)], + exports: [RouterModule], + providers: [ProductSaleReportResolver], }) -export class ProductSaleReportRoutingModule { -} +export class ProductSaleReportRoutingModule {} diff --git a/bookie/src/app/product-sale-report/product-sale-report.component.html b/bookie/src/app/product-sale-report/product-sale-report.component.html index 74e6f4f..b1dcd8a 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.component.html +++ b/bookie/src/app/product-sale-report/product-sale-report.component.html @@ -7,17 +7,34 @@
      -
      +
      - + - + @@ -25,45 +42,48 @@
      - Name - {{row.name}} + {{ row.name }} Unbilled - {{row.kot | number:'1.2-2'}} + {{ row.kot | number: '1.2-2' }} Sale - {{row.regularBill | number:'1.2-2'}} + {{ + row.regularBill | number: '1.2-2' + }} No Charge - {{row.noCharge | number:'1.2-2'}} + {{ + row.noCharge | number: '1.2-2' + }} Staff - {{row.staff | number:'1.2-2'}} + {{ row.staff | number: '1.2-2' }} Void - {{row.void | number:'1.2-2'}} + {{ row.void | number: '1.2-2' }} - + diff --git a/bookie/src/app/product-sale-report/product-sale-report.component.spec.ts b/bookie/src/app/product-sale-report/product-sale-report.component.spec.ts index 04c2fc0..7b9e3de 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.component.spec.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {ProductSaleReportComponent} from './product-sale-report.component'; +import { ProductSaleReportComponent } from './product-sale-report.component'; describe('ProductSaleReportComponent', () => { let component: ProductSaleReportComponent; @@ -8,9 +8,8 @@ describe('ProductSaleReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ProductSaleReportComponent] - }) - .compileComponents(); + declarations: [ProductSaleReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/product-sale-report/product-sale-report.component.ts b/bookie/src/app/product-sale-report/product-sale-report.component.ts index 4586737..8fc1090 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.component.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { ProductSaleReportDataSource } from './product-sale-report-datasource'; -import { ProductSaleReport } from './product-sale-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { ProductSaleReport } from './product-sale-report'; +import { ProductSaleReportDataSource } from './product-sale-report-datasource'; + @Component({ selector: 'app-product-sale-report', templateUrl: './product-sale-report.component.html', - styleUrls: ['./product-sale-report.component.css'] + styleUrls: ['./product-sale-report.component.css'], }) export class ProductSaleReportComponent implements OnInit { dataSource: ProductSaleReportDataSource; @@ -19,27 +21,24 @@ export class ProductSaleReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'unbilled', 'sale', 'noCharge', 'staff', 'void']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: ProductSaleReport }) => { - this.info = data.info; - this.form.setValue({ - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new ProductSaleReportDataSource(this.info.amounts); + this.route.data.subscribe((data: { info: ProductSaleReport }) => { + this.info = data.info; + this.form.setValue({ + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new ProductSaleReportDataSource(this.info.amounts); + }); } show() { @@ -47,15 +46,15 @@ export class ProductSaleReportComponent implements OnInit { this.router.navigate(['product-sale-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -64,7 +63,7 @@ export class ProductSaleReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } @@ -75,9 +74,11 @@ export class ProductSaleReportComponent implements OnInit { Sold: 'regularBill', 'No Charge': 'noCharge', Staff: 'staff', - Void: 'void' + Void: 'void', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'product-sale-report.csv'); diff --git a/bookie/src/app/product-sale-report/product-sale-report.module.spec.ts b/bookie/src/app/product-sale-report/product-sale-report.module.spec.ts index 6106551..c7d7043 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.module.spec.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.module.spec.ts @@ -1,4 +1,4 @@ -import {ProductSaleReportModule} from './product-sale-report.module'; +import { ProductSaleReportModule } from './product-sale-report.module'; describe('ProductSaleReportModule', () => { let productSaleReportModule: ProductSaleReportModule; diff --git a/bookie/src/app/product-sale-report/product-sale-report.module.ts b/bookie/src/app/product-sale-report/product-sale-report.module.ts index c317089..37c4f92 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.module.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { ProductSaleReportRoutingModule } from './product-sale-report-routing.module'; import { ProductSaleReportComponent } from './product-sale-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - ProductSaleReportRoutingModule - ], - declarations: [ - ProductSaleReportComponent + ProductSaleReportRoutingModule, ], + declarations: [ProductSaleReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class ProductSaleReportModule { -} +export class ProductSaleReportModule {} diff --git a/bookie/src/app/product-sale-report/product-sale-report.service.spec.ts b/bookie/src/app/product-sale-report/product-sale-report.service.spec.ts index d54dcb6..5a041bd 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.service.spec.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.service.spec.ts @@ -1,15 +1,18 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ProductSaleReportService} from './product-sale-report.service'; +import { ProductSaleReportService } from './product-sale-report.service'; describe('ProductSaleReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ProductSaleReportService] + providers: [ProductSaleReportService], }); }); - it('should be created', inject([ProductSaleReportService], (service: ProductSaleReportService) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [ProductSaleReportService], + (service: ProductSaleReportService) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/product-sale-report/product-sale-report.service.ts b/bookie/src/app/product-sale-report/product-sale-report.service.ts index 817d43e..cfacad2 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.service.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { ProductSaleReport } from './product-sale-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { ProductSaleReport } from './product-sale-report'; const url = '/api/product-sale-report'; const serviceName = 'ProductSaleReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ProductSaleReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/product-sale-report/product-sale-report.ts b/bookie/src/app/product-sale-report/product-sale-report.ts index a4ae423..317448c 100644 --- a/bookie/src/app/product-sale-report/product-sale-report.ts +++ b/bookie/src/app/product-sale-report/product-sale-report.ts @@ -1,11 +1,4 @@ -export class ProductSaleReportItem { - name: string; - kot: number; - regularBill: number; - noCharge: number; - staf: number; - void: number; -} +import { ProductSaleReportItem } from './product-sale-report-item'; export class ProductSaleReport { startDate: string; diff --git a/bookie/src/app/product/product-detail/product-detail.component.html b/bookie/src/app/product/product-detail/product-detail.component.html index 06b2f97..3986d27 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.html +++ b/bookie/src/app/product/product-detail/product-detail.component.html @@ -5,43 +5,68 @@
      -
      +
      Code - +
      -
      +
      Name - + Units - +
      -
      +
      Price - + Quantity - +
      -
      +
      Has Happy Hour? Is Not Available? Is Active?
      -
      +
      Menu Category @@ -63,7 +88,9 @@ - +
      diff --git a/bookie/src/app/product/product-detail/product-detail.component.spec.ts b/bookie/src/app/product/product-detail/product-detail.component.spec.ts index 83e97a9..4162793 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.spec.ts +++ b/bookie/src/app/product/product-detail/product-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {ProductDetailComponent} from './product-detail.component'; +import { ProductDetailComponent } from './product-detail.component'; describe('ProductDetailComponent', () => { let component: ProductDetailComponent; @@ -8,9 +8,8 @@ describe('ProductDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ProductDetailComponent] - }) - .compileComponents(); + declarations: [ProductDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/product/product-detail/product-detail.component.ts b/bookie/src/app/product/product-detail/product-detail.component.ts index 5c52564..4538ce8 100644 --- a/bookie/src/app/product/product-detail/product-detail.component.ts +++ b/bookie/src/app/product/product-detail/product-detail.component.ts @@ -1,18 +1,19 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { ToasterService } from '../../core/toaster.service'; -import { ActivatedRoute, Router } from '@angular/router'; -import { ProductService } from '../product.service'; -import { Product } from '../../core/product'; -import { MenuCategory } from '../../core/menu-category'; -import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; -import { MatDialog } from '@angular/material/dialog'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { MenuCategory } from '../../core/menu-category'; +import { Product } from '../../core/product'; import { SaleCategory } from '../../core/sale-category'; +import { ToasterService } from '../../core/toaster.service'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { ProductService } from '../product.service'; @Component({ selector: 'app-product-detail', templateUrl: './product-detail.component.html', - styleUrls: ['./product-detail.component.css'] + styleUrls: ['./product-detail.component.css'], }) export class ProductDetailComponent implements OnInit, AfterViewInit { @ViewChild('name', { static: true }) nameElement: ElementRef; @@ -27,14 +28,14 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: ProductService + private ser: ProductService, ) { this.createForm(); } createForm() { this.form = this.fb.group({ - code: {value: '', disabled: true}, + code: { value: '', disabled: true }, name: '', units: '', menuCategory: '', @@ -43,17 +44,18 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { hasHappyHour: '', isNotAvailable: '', quantity: '', - isActive: '' + isActive: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Product, menuCategories: MenuCategory[], saleCategories: SaleCategory[] }) => { + this.route.data.subscribe( + (data: { item: Product; menuCategories: MenuCategory[]; saleCategories: SaleCategory[] }) => { this.menuCategories = data.menuCategories; this.saleCategories = data.saleCategories; this.showItem(data.item); - }); + }, + ); } showItem(item: Product) { @@ -68,7 +70,7 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { hasHappyHour: this.item.hasHappyHour, isNotAvailable: this.item.isNotAvailable, quantity: this.item.quantity || '', - isActive: this.item.isActive + isActive: this.item.isActive, }); } @@ -79,35 +81,33 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/products'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/products'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/products'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/products'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Product?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Product?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/product/product-list-resolver.service.spec.ts b/bookie/src/app/product/product-list-resolver.service.spec.ts index e9e1da9..4c2e796 100644 --- a/bookie/src/app/product/product-list-resolver.service.spec.ts +++ b/bookie/src/app/product/product-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ProductListResolver} from './product-list-resolver.service'; +import { ProductListResolver } from './product-list-resolver.service'; describe('ProductListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ProductListResolver] + providers: [ProductListResolver], }); }); diff --git a/bookie/src/app/product/product-list-resolver.service.ts b/bookie/src/app/product/product-list-resolver.service.ts index 0e1a710..05707af 100644 --- a/bookie/src/app/product/product-list-resolver.service.ts +++ b/bookie/src/app/product/product-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Product} from '../core/product'; -import {Observable} from 'rxjs/internal/Observable'; -import {ProductService} from './product.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Product } from '../core/product'; + +import { ProductService } from './product.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ProductListResolver implements Resolve { + constructor(private ser: ProductService) {} - constructor(private ser: ProductService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/product/product-list/product-list-datasource.ts b/bookie/src/app/product/product-list/product-list-datasource.ts index 5d5c479..3c0dc3a 100644 --- a/bookie/src/app/product/product-list/product-list-datasource.ts +++ b/bookie/src/app/product/product-list/product-list-datasource.ts @@ -1,52 +1,53 @@ import { DataSource } from '@angular/cdk/collections'; -import { map, tap } from 'rxjs/operators'; import { merge, Observable } from 'rxjs'; -import { Product } from '../../core/product'; +import { map, tap } from 'rxjs/operators'; +import { Product } from '../../core/product'; export class ProductListDataSource extends DataSource { public data: Product[]; public viewData: Product[]; private filterValue: string; - constructor(private readonly filter: Observable, private readonly dataObs: Observable) { + constructor( + private readonly filter: Observable, + private readonly dataObs: Observable, + ) { super(); this.data = []; this.viewData = []; this.filter = filter.pipe( - tap(x => this.filterValue = x) + tap((x) => { + this.filterValue = x; + }), ); this.dataObs = dataObs.pipe( - tap(x => this.data = x) + tap((x) => { + this.data = x; + }), ); } connect(): Observable { - const dataMutations = [ - this.dataObs, - this.filter - ]; + const dataMutations = [this.dataObs, this.filter]; return merge(...dataMutations).pipe( - map((x: any) => { + map(() => { this.viewData = this.getFilteredData([...this.data]); return this.viewData; - }) + }), ); } - disconnect() { - } + disconnect() {} private getFilteredData(data: Product[]): Product[] { - const filter = (this.filterValue === undefined) ? '' : this.filterValue; + const filter = this.filterValue === undefined ? '' : this.filterValue; if (filter === '') { return data; - } else { - return data.filter(x => { - return x.menuCategory.id === filter; - } - ); } + return data.filter((x) => { + return x.menuCategory.id === filter; + }); } } diff --git a/bookie/src/app/product/product-list/product-list.component.html b/bookie/src/app/product/product-list/product-list.component.html index e50fd92..8f05218 100644 --- a/bookie/src/app/product/product-list/product-list.component.html +++ b/bookie/src/app/product/product-list/product-list.component.html @@ -14,43 +14,60 @@ -
      - - Product Type - - -- All Products -- - - {{ mc.name }} - - - -
      +
      + + Product Type + + -- All Products -- + + {{ mc.name }} + + + +
      - - + Name - {{row.name}} ({{row.units}}) + {{ row.name }} ({{ row.units }}) Price - {{row.price | currency:'INR'}} + {{ row.price | currency: 'INR' }} Menu Category - {{row.menuCategory.name}} + {{ row.menuCategory.name }} Sale Category - {{row.saleCategory.name}} + {{ row.saleCategory.name }} @@ -60,34 +77,38 @@
      - {{ row.hasHappyHour ? "sentiment_satisfied_alt" : "sentiment_dissatisfied" }} + {{ row.hasHappyHour ? 'sentiment_satisfied_alt' : 'sentiment_dissatisfied' }} - {{ row.hasHappyHour ? "Happy Hour" : "Regular" }} + {{ row.hasHappyHour ? 'Happy Hour' : 'Regular' }}
      - {{ row.isNotAvailable ? "pause" : "play_arrow" }} + {{ row.isNotAvailable ? 'pause' : 'play_arrow' }} - {{ row.isNotAvailable ? "Not Available" : "Available" }} + {{ row.isNotAvailable ? 'Not Available' : 'Available' }}
      - {{ row.isActive ? "visibility" : "visibility_off" }} + {{ row.isActive ? 'visibility' : 'visibility_off' }} - {{ row.isActive ? "Active" : "Deactivated" }} + {{ row.isActive ? 'Active' : 'Deactivated' }}
      - + Quantity - {{row.quantity | currency:'INR'}} + {{ row.quantity | currency: 'INR' }} - - + +
      diff --git a/bookie/src/app/product/product-list/product-list.component.spec.ts b/bookie/src/app/product/product-list/product-list.component.spec.ts index 06504af..f4e4cda 100644 --- a/bookie/src/app/product/product-list/product-list.component.spec.ts +++ b/bookie/src/app/product/product-list/product-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {ProductListComponent} from './product-list.component'; +import { ProductListComponent } from './product-list.component'; describe('ProductListComponent', () => { let component: ProductListComponent; @@ -8,9 +8,8 @@ describe('ProductListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [ProductListComponent] - }) - .compileComponents(); + declarations: [ProductListComponent], + }).compileComponents(); fixture = TestBed.createComponent(ProductListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/product/product-list/product-list.component.ts b/bookie/src/app/product/product-list/product-list.component.ts index 3d4bb9a..524e713 100644 --- a/bookie/src/app/product/product-list/product-list.component.ts +++ b/bookie/src/app/product/product-list/product-list.component.ts @@ -1,19 +1,21 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { FormBuilder, FormGroup } from '@angular/forms'; import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; -import { ProductListDataSource } from './product-list-datasource'; -import { Product } from '../../core/product'; -import { ToCsvService } from '../../shared/to-csv.service'; -import { ToasterService } from '../../core/toaster.service'; -import { ProductService } from '../product.service'; -import { MenuCategory } from '../../core/menu-category'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; +import { MenuCategory } from '../../core/menu-category'; +import { Product } from '../../core/product'; +import { ToasterService } from '../../core/toaster.service'; +import { ToCsvService } from '../../shared/to-csv.service'; +import { ProductService } from '../product.service'; + +import { ProductListDataSource } from './product-list-datasource'; + @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', - styleUrls: ['./product-list.component.css'] + styleUrls: ['./product-list.component.css'], }) export class ProductListComponent implements OnInit { dataSource: ProductListDataSource; @@ -23,17 +25,24 @@ export class ProductListComponent implements OnInit { data: BehaviorSubject; menuCategories: MenuCategory[]; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ - displayedColumns: string[] = ['name', 'price', 'menuCategory', 'saleCategory', 'info', 'quantity']; + displayedColumns: string[] = [ + 'name', + 'price', + 'menuCategory', + 'saleCategory', + 'info', + 'quantity', + ]; constructor( private route: ActivatedRoute, private fb: FormBuilder, private toaster: ToasterService, private toCsv: ToCsvService, - private ser: ProductService + private ser: ProductService, ) { this.form = this.fb.group({ - menuCategory: '' + menuCategory: '', }); this.filter = new BehaviorSubject(''); this.data = new BehaviorSubject([]); @@ -48,10 +57,9 @@ export class ProductListComponent implements OnInit { ngOnInit() { this.dataSource = new ProductListDataSource(this.filter, this.data); - this.route.data - .subscribe((data: { list: Product[], menuCategories: MenuCategory[] }) => { - this.loadData(data.list, data.menuCategories); - }); + this.route.data.subscribe((data: { list: Product[]; menuCategories: MenuCategory[] }) => { + this.loadData(data.list, data.menuCategories); + }); } loadData(list: Product[], menuCategories: MenuCategory[]) { @@ -60,16 +68,15 @@ export class ProductListComponent implements OnInit { } updateSortOrder() { - this.ser.updateSortOrder(this.dataSource.viewData) - .subscribe( - (result: Product[]) => { - this.toaster.show('Success', ''); - this.loadData(result, this.menuCategories); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.updateSortOrder(this.dataSource.viewData).subscribe( + (result: Product[]) => { + this.toaster.show('Success', ''); + this.loadData(result, this.menuCategories); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } dropTable(event: CdkDragDrop) { @@ -78,17 +85,19 @@ export class ProductListComponent implements OnInit { this.data.next(this.list); } - exportCsv() { + exportCsv() { const headers = { Code: 'code', Name: 'name', Units: 'units', Price: 'price', MenuCategory: 'menuCategory', - SaleCategory: 'saleCategory' + SaleCategory: 'saleCategory', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.viewData)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.viewData)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'products.csv'); diff --git a/bookie/src/app/product/product-resolver.service.spec.ts b/bookie/src/app/product/product-resolver.service.spec.ts index 6b63a8a..0bceccf 100644 --- a/bookie/src/app/product/product-resolver.service.spec.ts +++ b/bookie/src/app/product/product-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ProductResolver} from './product-resolver.service'; +import { ProductResolver } from './product-resolver.service'; describe('ProductResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ProductResolver] + providers: [ProductResolver], }); }); diff --git a/bookie/src/app/product/product-resolver.service.ts b/bookie/src/app/product/product-resolver.service.ts index 349e005..4c74b9f 100644 --- a/bookie/src/app/product/product-resolver.service.ts +++ b/bookie/src/app/product/product-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {ProductService} from './product.service'; -import {Product} from '../core/product'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Product } from '../core/product'; + +import { ProductService } from './product.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ProductResolver implements Resolve { + constructor(private ser: ProductService) {} - constructor(private ser: ProductService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/product/product.service.spec.ts b/bookie/src/app/product/product.service.spec.ts index 9a94723..95b8e95 100644 --- a/bookie/src/app/product/product.service.spec.ts +++ b/bookie/src/app/product/product.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {ProductService} from './product.service'; +import { ProductService } from './product.service'; describe('ProductService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ProductService] + providers: [ProductService], }); }); diff --git a/bookie/src/app/product/product.service.ts b/bookie/src/app/product/product.service.ts index cef5e54..fff7fbc 100644 --- a/bookie/src/app/product/product.service.ts +++ b/bookie/src/app/product/product.service.ts @@ -1,87 +1,93 @@ +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { Product } from '../core/product'; + import { ErrorLoggerService } from '../core/error-logger.service'; +import { Product } from '../core/product'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/products'; const serviceName = 'ProductService'; -@Injectable({providedIn: 'root'}) +@Injectable({ providedIn: 'root' }) export class ProductService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? `${url}` : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } listIsActiveOfCategory(id: string): Observable { - const options = {params: new HttpParams().set('mc', id).set('a', 'true')}; - return >this.http.get(`${url}/query`, options) - .pipe( - catchError(this.log.handleError(serviceName, 'listIsActiveOfCategory')) - ); + const options = { params: new HttpParams().set('mc', id).set('a', 'true') }; + return >( + this.http + .get(`${url}/query`, options) + .pipe(catchError(this.log.handleError(serviceName, 'listIsActiveOfCategory'))) + ); } save(product: Product): Observable { - return >this.http.post(`${url}`, product, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(`${url}`, product, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(product: Product): Observable { - return >this.http.put(`${url}/${product.id}`, product, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${product.id}`, product, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } updateSortOrder(list: Product[]): Observable { - return >this.http.post(`${url}/list`, list, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'updateSortOrder')) - ); + return >( + this.http + .post(`${url}/list`, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) + ); } saveOrUpdate(product: Product): Observable { if (!product.id) { return this.save(product); - } else { - return this.update(product); } + return this.update(product); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } balance(id: string, date: string): Observable { - const options = {params: new HttpParams().set('d', date)}; - return >this.http.get(`${url}/balance`, options) - .pipe( - catchError(this.log.handleError(serviceName, 'balance')) - ); + const options = { params: new HttpParams().set('d', date) }; + return >( + this.http + .get(`${url}/balance`, options) + .pipe(catchError(this.log.handleError(serviceName, 'balance'))) + ); } } diff --git a/bookie/src/app/product/products-routing.module.spec.ts b/bookie/src/app/product/products-routing.module.spec.ts index 712ce45..c4fc0eb 100644 --- a/bookie/src/app/product/products-routing.module.spec.ts +++ b/bookie/src/app/product/products-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {ProductsRoutingModule} from './products-routing.module'; +import { ProductsRoutingModule } from './products-routing.module'; describe('ProductsRoutingModule', () => { let productsRoutingModule: ProductsRoutingModule; diff --git a/bookie/src/app/product/products-routing.module.ts b/bookie/src/app/product/products-routing.module.ts index e668361..8d267de 100644 --- a/bookie/src/app/product/products-routing.module.ts +++ b/bookie/src/app/product/products-routing.module.ts @@ -1,70 +1,60 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { ProductListResolver } from './product-list-resolver.service'; -import { ProductResolver } from './product-resolver.service'; -import { ProductDetailComponent } from './product-detail/product-detail.component'; -import { ProductListComponent } from './product-list/product-list.component'; - import { AuthGuard } from '../auth/auth-guard.service'; import { MenuCategoryListResolver } from '../menu-category/menu-category-list-resolver.service'; import { SaleCategoryListResolver } from '../sale-category/sale-category-list-resolver.service'; +import { ProductDetailComponent } from './product-detail/product-detail.component'; +import { ProductListResolver } from './product-list-resolver.service'; +import { ProductListComponent } from './product-list/product-list.component'; +import { ProductResolver } from './product-resolver.service'; + const productsRoutes: Routes = [ { path: '', component: ProductListComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { list: ProductListResolver, - menuCategories: MenuCategoryListResolver - } + menuCategories: MenuCategoryListResolver, + }, }, { path: 'new', component: ProductDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { item: ProductResolver, menuCategories: MenuCategoryListResolver, - saleCategories: SaleCategoryListResolver - } + saleCategories: SaleCategoryListResolver, + }, }, { path: ':id', component: ProductDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { item: ProductResolver, menuCategories: MenuCategoryListResolver, - saleCategories: SaleCategoryListResolver - } - } + saleCategories: SaleCategoryListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(productsRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - ProductListResolver, - ProductResolver - ] + imports: [CommonModule, RouterModule.forChild(productsRoutes)], + exports: [RouterModule], + providers: [ProductListResolver, ProductResolver], }) -export class ProductsRoutingModule { -} +export class ProductsRoutingModule {} diff --git a/bookie/src/app/product/products.module.spec.ts b/bookie/src/app/product/products.module.spec.ts index 4532102..76732f5 100644 --- a/bookie/src/app/product/products.module.spec.ts +++ b/bookie/src/app/product/products.module.spec.ts @@ -1,4 +1,4 @@ -import {ProductsModule} from './products.module'; +import { ProductsModule } from './products.module'; describe('ProductsModule', () => { let productsModule: ProductsModule; diff --git a/bookie/src/app/product/products.module.ts b/bookie/src/app/product/products.module.ts index 8fef0d8..e9a2a8f 100644 --- a/bookie/src/app/product/products.module.ts +++ b/bookie/src/app/product/products.module.ts @@ -1,9 +1,9 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {ProductListComponent} from './product-list/product-list.component'; -import {ProductDetailComponent} from './product-detail/product-detail.component'; -import {ProductsRoutingModule} from './products-routing.module'; +import { DragDropModule } from '@angular/cdk/drag-drop'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -13,10 +13,10 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { CdkTableModule } from '@angular/cdk/table'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FlexLayoutModule } from '@angular/flex-layout'; -import { DragDropModule } from '@angular/cdk/drag-drop'; + +import { ProductDetailComponent } from './product-detail/product-detail.component'; +import { ProductListComponent } from './product-list/product-list.component'; +import { ProductsRoutingModule } from './products-routing.module'; @NgModule({ imports: [ @@ -34,12 +34,8 @@ import { DragDropModule } from '@angular/cdk/drag-drop'; MatSelectModule, MatCheckboxModule, ReactiveFormsModule, - ProductsRoutingModule + ProductsRoutingModule, ], - declarations: [ - ProductListComponent, - ProductDetailComponent - ] + declarations: [ProductListComponent, ProductDetailComponent], }) -export class ProductsModule { -} +export class ProductsModule {} diff --git a/bookie/src/app/roles/permission.ts b/bookie/src/app/roles/permission.ts new file mode 100644 index 0000000..bdbcb73 --- /dev/null +++ b/bookie/src/app/roles/permission.ts @@ -0,0 +1,5 @@ +export class Permission { + id: string; + name: string; + enabled: boolean; +} diff --git a/bookie/src/app/roles/role-detail/role-detail.component.html b/bookie/src/app/roles/role-detail/role-detail.component.html index 690a677..1aafd3a 100644 --- a/bookie/src/app/roles/role-detail/role-detail.component.html +++ b/bookie/src/app/roles/role-detail/role-detail.component.html @@ -5,19 +5,31 @@
      -
      +
      Name - +
      -
      - {{p.name}} +
      + {{ p.name }}
      diff --git a/bookie/src/app/roles/role-detail/role-detail.component.spec.ts b/bookie/src/app/roles/role-detail/role-detail.component.spec.ts index 9c216c1..e9f233d 100644 --- a/bookie/src/app/roles/role-detail/role-detail.component.spec.ts +++ b/bookie/src/app/roles/role-detail/role-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {RoleDetailComponent} from './role-detail.component'; +import { RoleDetailComponent } from './role-detail.component'; describe('RoleDetailComponent', () => { let component: RoleDetailComponent; @@ -8,9 +8,8 @@ describe('RoleDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [RoleDetailComponent] - }) - .compileComponents(); + declarations: [RoleDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/roles/role-detail/role-detail.component.ts b/bookie/src/app/roles/role-detail/role-detail.component.ts index 162ea79..c46a5d3 100644 --- a/bookie/src/app/roles/role-detail/role-detail.component.ts +++ b/bookie/src/app/roles/role-detail/role-detail.component.ts @@ -1,16 +1,17 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; -import { RoleService } from '../role.service'; -import { Role } from '../role'; + import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; -import { MatDialog } from '@angular/material/dialog'; -import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; +import { Role } from '../role'; +import { RoleService } from '../role.service'; @Component({ selector: 'app-role-detail', templateUrl: './role-detail.component.html', - styleUrls: ['./role-detail.component.css'] + styleUrls: ['./role-detail.component.css'], }) export class RoleDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -23,7 +24,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { private fb: FormBuilder, private toaster: ToasterService, private dialog: MatDialog, - private ser: RoleService + private ser: RoleService, ) { this.createForm(); } @@ -31,23 +32,25 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { createForm() { this.form = this.fb.group({ name: '', - permissions: this.fb.array([]) + permissions: this.fb.array([]), }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Role }) => { - this.item = data.item; - this.form.get('name').setValue(this.item.name); - this.form.setControl('permissions', this.fb.array( - this.item.permissions.map( - x => this.fb.group({ - permission: x.enabled - }) - ) - )); - }); + this.route.data.subscribe((data: { item: Role }) => { + this.item = data.item; + this.form.get('name').setValue(this.item.name); + this.form.setControl( + 'permissions', + this.fb.array( + this.item.permissions.map((x) => + this.fb.group({ + permission: x.enabled, + }), + ), + ), + ); + }); } ngAfterViewInit() { @@ -57,35 +60,33 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/roles'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/roles'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/roles'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/roles'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Role?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Role?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/roles/role-list-resolver.service.spec.ts b/bookie/src/app/roles/role-list-resolver.service.spec.ts index 50794e6..cb3edaa 100644 --- a/bookie/src/app/roles/role-list-resolver.service.spec.ts +++ b/bookie/src/app/roles/role-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {RoleListResolver} from './role-list-resolver.service'; +import { RoleListResolver } from './role-list-resolver.service'; describe('RoleListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [RoleListResolver] + providers: [RoleListResolver], }); }); diff --git a/bookie/src/app/roles/role-list-resolver.service.ts b/bookie/src/app/roles/role-list-resolver.service.ts index 88e98f9..141aa07 100644 --- a/bookie/src/app/roles/role-list-resolver.service.ts +++ b/bookie/src/app/roles/role-list-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Role} from './role'; -import {Observable} from 'rxjs/internal/Observable'; -import {RoleService} from './role.service'; +import { Injectable } from '@angular/core'; +import { Resolve, Router } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Role } from './role'; +import { RoleService } from './role.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class RoleListResolver implements Resolve { + constructor(private ser: RoleService, private router: Router) {} - constructor(private ser: RoleService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/roles/role-list/role-list-datasource.ts b/bookie/src/app/roles/role-list/role-list-datasource.ts index 8b95577..fc15f3b 100644 --- a/bookie/src/app/roles/role-list/role-list-datasource.ts +++ b/bookie/src/app/roles/role-list/role-list-datasource.ts @@ -1,9 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; + import { Role } from '../role'; export class RoleListDataSource extends DataSource { - constructor(public data: Role[]) { super(); } @@ -12,6 +12,5 @@ export class RoleListDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/roles/role-list/role-list.component.html b/bookie/src/app/roles/role-list/role-list.component.html index 2e4363e..cd883f6 100644 --- a/bookie/src/app/roles/role-list/role-list.component.html +++ b/bookie/src/app/roles/role-list/role-list.component.html @@ -8,11 +8,12 @@ - Name - {{row.name}} + {{ row.name }} @@ -20,13 +21,13 @@ Permissions
        -
      • {{permission}}
      • +
      • {{ permission }}
      - +
      diff --git a/bookie/src/app/roles/role-list/role-list.component.spec.ts b/bookie/src/app/roles/role-list/role-list.component.spec.ts index 4de7c52..eeccee9 100644 --- a/bookie/src/app/roles/role-list/role-list.component.spec.ts +++ b/bookie/src/app/roles/role-list/role-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {RoleListComponent} from './role-list.component'; +import { RoleListComponent } from './role-list.component'; describe('RoleListComponent', () => { let component: RoleListComponent; @@ -8,9 +8,8 @@ describe('RoleListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [RoleListComponent] - }) - .compileComponents(); + declarations: [RoleListComponent], + }).compileComponents(); fixture = TestBed.createComponent(RoleListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/roles/role-list/role-list.component.ts b/bookie/src/app/roles/role-list/role-list.component.ts index 4a503fd..e368281 100644 --- a/bookie/src/app/roles/role-list/role-list.component.ts +++ b/bookie/src/app/roles/role-list/role-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { RoleListDataSource } from './role-list-datasource'; -import { Role } from '../role'; import { ActivatedRoute } from '@angular/router'; +import { Role } from '../role'; + +import { RoleListDataSource } from './role-list-datasource'; + @Component({ selector: 'app-role-list', templateUrl: './role-list.component.html', - styleUrls: ['./role-list.component.css'] + styleUrls: ['./role-list.component.css'], }) export class RoleListComponent implements OnInit { dataSource: RoleListDataSource; @@ -14,14 +16,12 @@ export class RoleListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'permissions']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: Role[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: Role[] }) => { + this.list = data.list; + }); this.dataSource = new RoleListDataSource(this.list); } } diff --git a/bookie/src/app/roles/role-resolver.service.spec.ts b/bookie/src/app/roles/role-resolver.service.spec.ts index 02f06ff..9206b24 100644 --- a/bookie/src/app/roles/role-resolver.service.spec.ts +++ b/bookie/src/app/roles/role-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {RoleResolver} from './role-resolver.service'; +import { RoleResolver } from './role-resolver.service'; describe('RoleResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [RoleResolver] + providers: [RoleResolver], }); }); diff --git a/bookie/src/app/roles/role-resolver.service.ts b/bookie/src/app/roles/role-resolver.service.ts index c996cad..cac01dc 100644 --- a/bookie/src/app/roles/role-resolver.service.ts +++ b/bookie/src/app/roles/role-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Role} from './role'; -import {Observable} from 'rxjs/internal/Observable'; -import {RoleService} from './role.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Role } from './role'; +import { RoleService } from './role.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class RoleResolver implements Resolve { + constructor(private ser: RoleService) {} - constructor(private ser: RoleService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/roles/role.service.spec.ts b/bookie/src/app/roles/role.service.spec.ts index 8bfe235..f317e6a 100644 --- a/bookie/src/app/roles/role.service.spec.ts +++ b/bookie/src/app/roles/role.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {RoleService} from './role.service'; +import { RoleService } from './role.service'; describe('RoleService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [RoleService] + providers: [RoleService], }); }); diff --git a/bookie/src/app/roles/role.service.ts b/bookie/src/app/roles/role.service.ts index b5b1232..aec91e9 100644 --- a/bookie/src/app/roles/role.service.ts +++ b/bookie/src/app/roles/role.service.ts @@ -1,64 +1,69 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; + import { Role } from './role'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/roles'; const serviceName = 'RoleService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class RoleService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? `${url}` : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(role: Role): Observable { - return >this.http.post(`${url}`, role, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(`${url}`, role, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(role: Role): Observable { - return >this.http.put(`${url}/${role.id}`, role, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${role.id}`, role, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(role: Role): Observable { if (!role.id) { return this.save(role); - } else { - return this.update(role); } + return this.update(role); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/roles/role.ts b/bookie/src/app/roles/role.ts index 5e4908b..9f5033e 100644 --- a/bookie/src/app/roles/role.ts +++ b/bookie/src/app/roles/role.ts @@ -1,11 +1,7 @@ +import { Permission } from './permission'; + export class Role { id: string; name: string; permissions: Permission[]; } - -export class Permission { - id: string; - name: string; - enabled: boolean; -} diff --git a/bookie/src/app/roles/roles-routing.module.ts b/bookie/src/app/roles/roles-routing.module.ts index 0164c95..9b0e5d9 100644 --- a/bookie/src/app/roles/roles-routing.module.ts +++ b/bookie/src/app/roles/roles-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {RoleListResolver} from './role-list-resolver.service'; -import {RoleResolver} from './role-resolver.service'; -import {RoleListComponent} from './role-list/role-list.component'; -import {RoleDetailComponent} from './role-detail/role-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { RoleDetailComponent } from './role-detail/role-detail.component'; +import { RoleListResolver } from './role-list-resolver.service'; +import { RoleListComponent } from './role-list/role-list.component'; +import { RoleResolver } from './role-resolver.service'; const rolesRoutes: Routes = [ { @@ -13,49 +15,39 @@ const rolesRoutes: Routes = [ component: RoleListComponent, canActivate: [AuthGuard], data: { - permission: 'Users' + permission: 'Users', }, resolve: { - list: RoleListResolver - } + list: RoleListResolver, + }, }, { path: 'new', component: RoleDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Users' + permission: 'Users', }, resolve: { item: RoleResolver, - } + }, }, { path: ':id', component: RoleDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Users' + permission: 'Users', }, resolve: { - item: RoleResolver - } - } + item: RoleResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(rolesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - RoleListResolver, - RoleResolver - ] + imports: [CommonModule, RouterModule.forChild(rolesRoutes)], + exports: [RouterModule], + providers: [RoleListResolver, RoleResolver], }) -export class RolesRoutingModule { -} +export class RolesRoutingModule {} diff --git a/bookie/src/app/roles/roles.module.ts b/bookie/src/app/roles/roles.module.ts index 492a832..edc6da7 100644 --- a/bookie/src/app/roles/roles.module.ts +++ b/bookie/src/app/roles/roles.module.ts @@ -1,9 +1,8 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {RoleListComponent} from './role-list/role-list.component'; -import {RoleDetailComponent} from './role-detail/role-detail.component'; -import {RolesRoutingModule} from './roles-routing.module'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -12,10 +11,12 @@ import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; -import {CdkTableModule} from '@angular/cdk/table'; -import {ReactiveFormsModule} from '@angular/forms'; -import {SharedModule} from '../shared/shared.module'; -import {FlexLayoutModule} from '@angular/flex-layout'; + +import { SharedModule } from '../shared/shared.module'; + +import { RoleDetailComponent } from './role-detail/role-detail.component'; +import { RoleListComponent } from './role-list/role-list.component'; +import { RolesRoutingModule } from './roles-routing.module'; @NgModule({ imports: [ @@ -32,12 +33,8 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatTableModule, ReactiveFormsModule, SharedModule, - RolesRoutingModule + RolesRoutingModule, ], - declarations: [ - RoleListComponent, - RoleDetailComponent - ] + declarations: [RoleListComponent, RoleDetailComponent], }) -export class RolesModule { -} +export class RolesModule {} diff --git a/bookie/src/app/sale-category/sale-categories-routing.module.spec.ts b/bookie/src/app/sale-category/sale-categories-routing.module.spec.ts index 7dcf3a6..3bbd27e 100644 --- a/bookie/src/app/sale-category/sale-categories-routing.module.spec.ts +++ b/bookie/src/app/sale-category/sale-categories-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {SaleCategoriesRoutingModule} from './sale-categories-routing.module'; +import { SaleCategoriesRoutingModule } from './sale-categories-routing.module'; describe('SaleCategoriesRoutingModule', () => { let saleCategoriesRoutingModule: SaleCategoriesRoutingModule; diff --git a/bookie/src/app/sale-category/sale-categories-routing.module.ts b/bookie/src/app/sale-category/sale-categories-routing.module.ts index 775d4f0..dc6cbc0 100644 --- a/bookie/src/app/sale-category/sale-categories-routing.module.ts +++ b/bookie/src/app/sale-category/sale-categories-routing.module.ts @@ -1,64 +1,56 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { SaleCategoryListResolver } from './sale-category-list-resolver.service'; -import { SaleCategoryResolver } from './sale-category-resolver.service'; -import { SaleCategoryListComponent } from './sale-category-list/sale-category-list.component'; -import { SaleCategoryDetailComponent } from './sale-category-detail/sale-category-detail.component'; + import { AuthGuard } from '../auth/auth-guard.service'; import { TaxListResolver } from '../taxes/tax-list-resolver.service'; +import { SaleCategoryDetailComponent } from './sale-category-detail/sale-category-detail.component'; +import { SaleCategoryListResolver } from './sale-category-list-resolver.service'; +import { SaleCategoryListComponent } from './sale-category-list/sale-category-list.component'; +import { SaleCategoryResolver } from './sale-category-resolver.service'; + const saleCategoriesRoutes: Routes = [ { path: '', component: SaleCategoryListComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { - list: SaleCategoryListResolver - } + list: SaleCategoryListResolver, + }, }, { path: 'new', component: SaleCategoryDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { item: SaleCategoryResolver, - taxes: TaxListResolver - } + taxes: TaxListResolver, + }, }, { path: ':id', component: SaleCategoryDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Products' + permission: 'Products', }, resolve: { item: SaleCategoryResolver, - taxes: TaxListResolver - } - } + taxes: TaxListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(saleCategoriesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - SaleCategoryListResolver, - SaleCategoryResolver - ] + imports: [CommonModule, RouterModule.forChild(saleCategoriesRoutes)], + exports: [RouterModule], + providers: [SaleCategoryListResolver, SaleCategoryResolver], }) -export class SaleCategoriesRoutingModule { -} +export class SaleCategoriesRoutingModule {} diff --git a/bookie/src/app/sale-category/sale-categories.module.spec.ts b/bookie/src/app/sale-category/sale-categories.module.spec.ts index ba7c469..348d96b 100644 --- a/bookie/src/app/sale-category/sale-categories.module.spec.ts +++ b/bookie/src/app/sale-category/sale-categories.module.spec.ts @@ -1,4 +1,4 @@ -import {SaleCategoriesModule} from './sale-categories.module'; +import { SaleCategoriesModule } from './sale-categories.module'; describe('SaleCategoriesModule', () => { let saleCategoriesModule: SaleCategoriesModule; diff --git a/bookie/src/app/sale-category/sale-categories.module.ts b/bookie/src/app/sale-category/sale-categories.module.ts index d3fbcce..d96a5d6 100644 --- a/bookie/src/app/sale-category/sale-categories.module.ts +++ b/bookie/src/app/sale-category/sale-categories.module.ts @@ -1,20 +1,20 @@ -import { NgModule} from '@angular/core'; import { CommonModule } from '@angular/common'; - -import { SaleCategoryListComponent } from './sale-category-list/sale-category-list.component'; -import { SaleCategoryDetailComponent } from './sale-category-detail/sale-category-detail.component'; -import { SaleCategoriesRoutingModule } from './sale-categories-routing.module'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatOptionModule } from '@angular/material/core'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; -import { MatOptionModule } from '@angular/material/core'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { FlexLayoutModule } from '@angular/flex-layout'; -import { ReactiveFormsModule } from '@angular/forms'; + +import { SaleCategoriesRoutingModule } from './sale-categories-routing.module'; +import { SaleCategoryDetailComponent } from './sale-category-detail/sale-category-detail.component'; +import { SaleCategoryListComponent } from './sale-category-list/sale-category-list.component'; @NgModule({ imports: [ @@ -30,12 +30,8 @@ import { ReactiveFormsModule } from '@angular/forms'; MatSelectModule, MatTableModule, ReactiveFormsModule, - SaleCategoriesRoutingModule + SaleCategoriesRoutingModule, ], - declarations: [ - SaleCategoryListComponent, - SaleCategoryDetailComponent - ] + declarations: [SaleCategoryListComponent, SaleCategoryDetailComponent], }) -export class SaleCategoriesModule { -} +export class SaleCategoriesModule {} diff --git a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.html b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.html index 3cb32fc..9bf4c32 100644 --- a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.html +++ b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.html @@ -5,29 +5,41 @@
      -
      +
      Name - +
      -
      +
      Tax {{ t.name }} - - - + + +
      - +
      diff --git a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.spec.ts b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.spec.ts index c9b6537..2adfca0 100644 --- a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.spec.ts +++ b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {SaleCategoryDetailComponent} from './sale-category-detail.component'; +import { SaleCategoryDetailComponent } from './sale-category-detail.component'; describe('SaleCategoryDetailComponent', () => { let component: SaleCategoryDetailComponent; @@ -8,9 +8,8 @@ describe('SaleCategoryDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [SaleCategoryDetailComponent] - }) - .compileComponents(); + declarations: [SaleCategoryDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts index 417d2c5..d557bf8 100644 --- a/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts +++ b/bookie/src/app/sale-category/sale-category-detail/sale-category-detail.component.ts @@ -1,18 +1,18 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; -import { SaleCategoryService } from '../sale-category.service'; import { SaleCategory } from '../../core/sale-category'; +import { Tax } from '../../core/tax'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; -import { Tax } from '../../core/tax'; +import { SaleCategoryService } from '../sale-category.service'; @Component({ selector: 'app-sale-category-detail', templateUrl: './sale-category-detail.component.html', - styleUrls: ['./sale-category-detail.component.css'] + styleUrls: ['./sale-category-detail.component.css'], }) export class SaleCategoryDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -26,7 +26,7 @@ export class SaleCategoryDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: SaleCategoryService + private ser: SaleCategoryService, ) { this.createForm(); } @@ -34,23 +34,22 @@ export class SaleCategoryDetailComponent implements OnInit, AfterViewInit { createForm() { this.form = this.fb.group({ name: '', - tax: '' + tax: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: SaleCategory, taxes: Tax[] }) => { - this.showItem(data.item); - this.taxes = data.taxes; - }); + this.route.data.subscribe((data: { item: SaleCategory; taxes: Tax[] }) => { + this.showItem(data.item); + this.taxes = data.taxes; + }); } showItem(item: SaleCategory) { this.item = item; this.form.setValue({ name: this.item.name, - tax: this.item.tax.id ? this.item.tax.id : '' + tax: this.item.tax.id ? this.item.tax.id : '', }); } @@ -61,35 +60,33 @@ export class SaleCategoryDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/sale-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/sale-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/sale-categories'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/sale-categories'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Sale Category?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Sale Category?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/sale-category/sale-category-list-resolver.service.spec.ts b/bookie/src/app/sale-category/sale-category-list-resolver.service.spec.ts index 0a45b1a..f5b1603 100644 --- a/bookie/src/app/sale-category/sale-category-list-resolver.service.spec.ts +++ b/bookie/src/app/sale-category/sale-category-list-resolver.service.spec.ts @@ -1,14 +1,17 @@ -import {inject, TestBed} from '@angular/core/testing'; -import {SaleCategoryListResolver} from './sale-category-list-resolver.service'; +import { inject, TestBed } from '@angular/core/testing'; +import { SaleCategoryListResolver } from './sale-category-list-resolver.service'; describe('SaleCategoryListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SaleCategoryListResolver] + providers: [SaleCategoryListResolver], }); }); - it('should be created', inject([SaleCategoryListResolver], (service: SaleCategoryListResolver) => { - expect(service).toBeTruthy(); - })); + it('should be created', inject( + [SaleCategoryListResolver], + (service: SaleCategoryListResolver) => { + expect(service).toBeTruthy(); + }, + )); }); diff --git a/bookie/src/app/sale-category/sale-category-list-resolver.service.ts b/bookie/src/app/sale-category/sale-category-list-resolver.service.ts index 84fcc03..790fa5d 100644 --- a/bookie/src/app/sale-category/sale-category-list-resolver.service.ts +++ b/bookie/src/app/sale-category/sale-category-list-resolver.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { SaleCategory } from '../core/sale-category'; +import { Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; + +import { SaleCategory } from '../core/sale-category'; + import { SaleCategoryService } from './sale-category.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SaleCategoryListResolver implements Resolve { + constructor(private ser: SaleCategoryService) {} - constructor(private ser: SaleCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/sale-category/sale-category-list/sale-category-list-datasource.ts b/bookie/src/app/sale-category/sale-category-list/sale-category-list-datasource.ts index ac9a8be..5eeb0ef 100644 --- a/bookie/src/app/sale-category/sale-category-list/sale-category-list-datasource.ts +++ b/bookie/src/app/sale-category/sale-category-list/sale-category-list-datasource.ts @@ -1,15 +1,18 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable } from 'rxjs'; -import { SaleCategory } from '../../core/sale-category'; import { tap } from 'rxjs/operators'; +import { SaleCategory } from '../../core/sale-category'; + export class SaleCategoryListDatasource extends DataSource { private data: SaleCategory[]; constructor(private readonly dataObs: Observable) { super(); this.dataObs = dataObs.pipe( - tap(x => this.data = x) + tap((x) => { + this.data = x; + }), ); } @@ -17,6 +20,5 @@ export class SaleCategoryListDatasource extends DataSource { return this.dataObs; } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.html b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.html index cd878b9..e5bd716 100644 --- a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.html +++ b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.html @@ -8,21 +8,24 @@ - Name - {{row.name}} + {{ row.name }} Tax - {{row.tax.rate | percent:'1.2-2'}} {{row.tax.name}} + {{ row.tax.rate | percent: '1.2-2' }} {{ row.tax.name }} - + diff --git a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.spec.ts b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.spec.ts index 6e2f9af..da6b682 100644 --- a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.spec.ts +++ b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {SaleCategoryListComponent} from './sale-category-list.component'; +import { SaleCategoryListComponent } from './sale-category-list.component'; describe('SaleCategoryListComponent', () => { let component: SaleCategoryListComponent; @@ -8,9 +8,8 @@ describe('SaleCategoryListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [SaleCategoryListComponent] - }) - .compileComponents(); + declarations: [SaleCategoryListComponent], + }).compileComponents(); fixture = TestBed.createComponent(SaleCategoryListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.ts b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.ts index e7c0e09..e0432ad 100644 --- a/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.ts +++ b/bookie/src/app/sale-category/sale-category-list/sale-category-list.component.ts @@ -1,16 +1,18 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { SaleCategoryListDatasource } from './sale-category-list-datasource'; -import { SaleCategory } from '../../core/sale-category'; -import { ActivatedRoute, Router } from '@angular/router'; import { MatTable } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { BehaviorSubject } from 'rxjs'; + +import { SaleCategory } from '../../core/sale-category'; import { ToasterService } from '../../core/toaster.service'; import { SaleCategoryService } from '../sale-category.service'; -import { BehaviorSubject } from 'rxjs'; + +import { SaleCategoryListDatasource } from './sale-category-list-datasource'; @Component({ selector: 'app-sale-category-list', templateUrl: './sale-category-list.component.html', - styleUrls: ['./sale-category-list.component.css'] + styleUrls: ['./sale-category-list.component.css'], }) export class SaleCategoryListComponent implements OnInit { @ViewChild('table', { static: true }) table: MatTable; @@ -24,7 +26,7 @@ export class SaleCategoryListComponent implements OnInit { private route: ActivatedRoute, private router: Router, private toaster: ToasterService, - private ser: SaleCategoryService + private ser: SaleCategoryService, ) { this.data = new BehaviorSubject([]); this.data.subscribe((data: SaleCategory[]) => { @@ -33,10 +35,9 @@ export class SaleCategoryListComponent implements OnInit { } ngOnInit() { - this.route.data - .subscribe((data: { list: SaleCategory[] }) => { - this.data.next(data.list); - }); + this.route.data.subscribe((data: { list: SaleCategory[] }) => { + this.data.next(data.list); + }); this.dataSource = new SaleCategoryListDatasource(this.data); } } diff --git a/bookie/src/app/sale-category/sale-category-resolver.service.spec.ts b/bookie/src/app/sale-category/sale-category-resolver.service.spec.ts index 446e4d1..ac34b0f 100644 --- a/bookie/src/app/sale-category/sale-category-resolver.service.spec.ts +++ b/bookie/src/app/sale-category/sale-category-resolver.service.spec.ts @@ -4,7 +4,7 @@ import { SaleCategoryResolver } from './sale-category-resolver.service'; describe('SaleCategoryResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SaleCategoryResolver] + providers: [SaleCategoryResolver], }); }); diff --git a/bookie/src/app/sale-category/sale-category-resolver.service.ts b/bookie/src/app/sale-category/sale-category-resolver.service.ts index 4a94539..e7b3dcf 100644 --- a/bookie/src/app/sale-category/sale-category-resolver.service.ts +++ b/bookie/src/app/sale-category/sale-category-resolver.service.ts @@ -1,18 +1,18 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; -import { SaleCategoryService } from './sale-category.service'; -import { SaleCategory } from '../core/sale-category'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; +import { SaleCategory } from '../core/sale-category'; + +import { SaleCategoryService } from './sale-category.service'; + @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SaleCategoryResolver implements Resolve { + constructor(private ser: SaleCategoryService) {} - constructor(private ser: SaleCategoryService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/sale-category/sale-category.service.spec.ts b/bookie/src/app/sale-category/sale-category.service.spec.ts index 43611b1..ac9ddf4 100644 --- a/bookie/src/app/sale-category/sale-category.service.spec.ts +++ b/bookie/src/app/sale-category/sale-category.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SaleCategoryService} from './sale-category.service'; +import { SaleCategoryService } from './sale-category.service'; describe('SaleCategoryService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SaleCategoryService] + providers: [SaleCategoryService], }); }); diff --git a/bookie/src/app/sale-category/sale-category.service.ts b/bookie/src/app/sale-category/sale-category.service.ts index 760b00a..e71d2de 100644 --- a/bookie/src/app/sale-category/sale-category.service.ts +++ b/bookie/src/app/sale-category/sale-category.service.ts @@ -1,71 +1,76 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { SaleCategory } from '../core/sale-category'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/sale-categories'; const serviceName = 'SaleCategoryService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SaleCategoryService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } - listForDiscount(): Observable<{name: string, discount: number}[]> { - return >this.http.get<{name: string, discount: number}[]>(`${url}/for-discount`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + listForDiscount(): Observable<{ name: string; discount: number }[]> { + return >( + this.http + .get<{ name: string; discount: number }[]>(`${url}/for-discount`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(saleCategory: SaleCategory): Observable { - return >this.http.post(url, saleCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, saleCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(saleCategory: SaleCategory): Observable { - return >this.http.put(`${url}/${saleCategory.id}`, saleCategory, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${saleCategory.id}`, saleCategory, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(saleCategory: SaleCategory): Observable { if (!saleCategory.id) { return this.save(saleCategory); - } else { - return this.update(saleCategory); } + return this.update(saleCategory); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/sale-report/sale-report-datasource.ts b/bookie/src/app/sale-report/sale-report-datasource.ts index a3ef150..25c8dcb 100644 --- a/bookie/src/app/sale-report/sale-report-datasource.ts +++ b/bookie/src/app/sale-report/sale-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { SaleReportItem } from './sale-report'; +import { SaleReportItem } from './sale-report-item'; export class SaleReportDatasource extends DataSource { - constructor(public data: SaleReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class SaleReportDatasource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/sale-report/sale-report-item.ts b/bookie/src/app/sale-report/sale-report-item.ts new file mode 100644 index 0000000..b058b5d --- /dev/null +++ b/bookie/src/app/sale-report/sale-report-item.ts @@ -0,0 +1,4 @@ +export class SaleReportItem { + name: string; + amount: number; +} diff --git a/bookie/src/app/sale-report/sale-report-resolver.service.spec.ts b/bookie/src/app/sale-report/sale-report-resolver.service.spec.ts index 530486d..fe33db4 100644 --- a/bookie/src/app/sale-report/sale-report-resolver.service.spec.ts +++ b/bookie/src/app/sale-report/sale-report-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SaleReportResolver} from './sale-report-resolver.service'; +import { SaleReportResolver } from './sale-report-resolver.service'; describe('SaleReportResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SaleReportResolver] + providers: [SaleReportResolver], }); }); diff --git a/bookie/src/app/sale-report/sale-report-resolver.service.ts b/bookie/src/app/sale-report/sale-report-resolver.service.ts index 3d67340..3974c0f 100644 --- a/bookie/src/app/sale-report/sale-report-resolver.service.ts +++ b/bookie/src/app/sale-report/sale-report-resolver.service.ts @@ -1,18 +1,17 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; + import { SaleReport } from './sale-report'; import { SaleReportService } from './sale-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SaleReportResolver implements Resolve { + constructor(private ser: SaleReportService) {} - constructor(private ser: SaleReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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/sale-report/sale-report-routing.module.spec.ts b/bookie/src/app/sale-report/sale-report-routing.module.spec.ts index 8cdbe28..d2e7492 100644 --- a/bookie/src/app/sale-report/sale-report-routing.module.spec.ts +++ b/bookie/src/app/sale-report/sale-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {SaleReportRoutingModule} from './sale-report-routing.module'; +import { SaleReportRoutingModule } from './sale-report-routing.module'; describe('SaleReportRoutingModule', () => { let saleReportRoutingModule: SaleReportRoutingModule; diff --git a/bookie/src/app/sale-report/sale-report-routing.module.ts b/bookie/src/app/sale-report/sale-report-routing.module.ts index 6256c62..a58a1db 100644 --- a/bookie/src/app/sale-report/sale-report-routing.module.ts +++ b/bookie/src/app/sale-report/sale-report-routing.module.ts @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { SaleReportResolver } from './sale-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; + +import { SaleReportResolver } from './sale-report-resolver.service'; import { SaleReportComponent } from './sale-report.component'; const saleReportRoutes: Routes = [ @@ -11,27 +13,18 @@ const saleReportRoutes: Routes = [ component: SaleReportComponent, canActivate: [AuthGuard], data: { - permission: 'Sale Report' + permission: 'Sale Report', }, resolve: { - info: SaleReportResolver + info: SaleReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(saleReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - SaleReportResolver - ] + imports: [CommonModule, RouterModule.forChild(saleReportRoutes)], + exports: [RouterModule], + providers: [SaleReportResolver], }) -export class SaleReportRoutingModule { -} +export class SaleReportRoutingModule {} diff --git a/bookie/src/app/sale-report/sale-report.component.html b/bookie/src/app/sale-report/sale-report.component.html index 30e9a5c..b720f15 100644 --- a/bookie/src/app/sale-report/sale-report.component.html +++ b/bookie/src/app/sale-report/sale-report.component.html @@ -7,17 +7,34 @@
      -
      +
      - + - + @@ -25,20 +42,19 @@
      - Name - {{row.name}} + {{ row.name }} Amount - {{row.amount | currency:'INR'}} + {{ row.amount | currency: 'INR' }} - + diff --git a/bookie/src/app/sale-report/sale-report.component.spec.ts b/bookie/src/app/sale-report/sale-report.component.spec.ts index c1c9bf8..3a75d67 100644 --- a/bookie/src/app/sale-report/sale-report.component.spec.ts +++ b/bookie/src/app/sale-report/sale-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {SaleReportComponent} from './sale-report.component'; +import { SaleReportComponent } from './sale-report.component'; describe('SaleReportComponent', () => { let component: SaleReportComponent; @@ -8,9 +8,8 @@ describe('SaleReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [SaleReportComponent] - }) - .compileComponents(); + declarations: [SaleReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/sale-report/sale-report.component.ts b/bookie/src/app/sale-report/sale-report.component.ts index 5651571..25310a4 100644 --- a/bookie/src/app/sale-report/sale-report.component.ts +++ b/bookie/src/app/sale-report/sale-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { SaleReportDatasource } from './sale-report-datasource'; -import { SaleReport } from './sale-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { SaleReport } from './sale-report'; +import { SaleReportDatasource } from './sale-report-datasource'; + @Component({ selector: 'app-sale-report', templateUrl: './sale-report.component.html', - styleUrls: ['./sale-report.component.css'] + styleUrls: ['./sale-report.component.css'], }) export class SaleReportComponent implements OnInit { dataSource: SaleReportDatasource; @@ -19,27 +21,24 @@ export class SaleReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'amount']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: SaleReport }) => { - this.info = data.info; - this.form.setValue({ - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new SaleReportDatasource(this.info.amounts); + this.route.data.subscribe((data: { info: SaleReport }) => { + this.info = data.info; + this.form.setValue({ + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new SaleReportDatasource(this.info.amounts); + }); } show() { @@ -47,15 +46,15 @@ export class SaleReportComponent implements OnInit { this.router.navigate(['sale-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -64,16 +63,18 @@ export class SaleReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } exportCsv() { const headers = { Name: 'name', - Amount: 'amount' + Amount: 'amount', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'sale-report.csv'); diff --git a/bookie/src/app/sale-report/sale-report.module.spec.ts b/bookie/src/app/sale-report/sale-report.module.spec.ts index 3ea4053..45e32f4 100644 --- a/bookie/src/app/sale-report/sale-report.module.spec.ts +++ b/bookie/src/app/sale-report/sale-report.module.spec.ts @@ -1,4 +1,4 @@ -import {SaleReportModule} from './sale-report.module'; +import { SaleReportModule } from './sale-report.module'; describe('SaleReportModule', () => { let saleReportModule: SaleReportModule; diff --git a/bookie/src/app/sale-report/sale-report.module.ts b/bookie/src/app/sale-report/sale-report.module.ts index caf7413..f035354 100644 --- a/bookie/src/app/sale-report/sale-report.module.ts +++ b/bookie/src/app/sale-report/sale-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { SaleReportRoutingModule } from './sale-report-routing.module'; import { SaleReportComponent } from './sale-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - SaleReportRoutingModule - ], - declarations: [ - SaleReportComponent + SaleReportRoutingModule, ], + declarations: [SaleReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class SaleReportModule { -} +export class SaleReportModule {} diff --git a/bookie/src/app/sale-report/sale-report.service.spec.ts b/bookie/src/app/sale-report/sale-report.service.spec.ts index 6d4255b..b8e15ce 100644 --- a/bookie/src/app/sale-report/sale-report.service.spec.ts +++ b/bookie/src/app/sale-report/sale-report.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SaleReportService} from './sale-report.service'; +import { SaleReportService } from './sale-report.service'; describe('SaleReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SaleReportService] + providers: [SaleReportService], }); }); diff --git a/bookie/src/app/sale-report/sale-report.service.ts b/bookie/src/app/sale-report/sale-report.service.ts index aded4cf..affc89a 100644 --- a/bookie/src/app/sale-report/sale-report.service.ts +++ b/bookie/src/app/sale-report/sale-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { SaleReport } from './sale-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { SaleReport } from './sale-report'; const url = '/api/sale-report'; const serviceName = 'SaleReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SaleReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/sale-report/sale-report.ts b/bookie/src/app/sale-report/sale-report.ts index 7fd2850..a8b5fdc 100644 --- a/bookie/src/app/sale-report/sale-report.ts +++ b/bookie/src/app/sale-report/sale-report.ts @@ -1,7 +1,4 @@ -export class SaleReportItem { - name: string; - amount: number; -} +import { SaleReportItem } from './sale-report-item'; export class SaleReport { startDate: string; diff --git a/bookie/src/app/sales/bill-type/bill-type.component.css b/bookie/src/app/sales/bill-type/bill-type.component.css index ae1afd4..fdc5fad 100644 --- a/bookie/src/app/sales/bill-type/bill-type.component.css +++ b/bookie/src/app/sales/bill-type/bill-type.component.css @@ -8,4 +8,3 @@ .selected { background-color: green; } - diff --git a/bookie/src/app/sales/bill-type/bill-type.component.html b/bookie/src/app/sales/bill-type/bill-type.component.html index 78cbdcd..ce8db28 100644 --- a/bookie/src/app/sales/bill-type/bill-type.component.html +++ b/bookie/src/app/sales/bill-type/bill-type.component.html @@ -1,14 +1,29 @@
      - +

      Regular

      - +

      Staff

      - +

      No Charge

      diff --git a/bookie/src/app/sales/bill-type/bill-type.component.spec.ts b/bookie/src/app/sales/bill-type/bill-type.component.spec.ts index 9601258..d15d9d2 100644 --- a/bookie/src/app/sales/bill-type/bill-type.component.spec.ts +++ b/bookie/src/app/sales/bill-type/bill-type.component.spec.ts @@ -8,9 +8,8 @@ describe('BillTypeComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ BillTypeComponent ] - }) - .compileComponents(); + declarations: [BillTypeComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/sales/bill-type/bill-type.component.ts b/bookie/src/app/sales/bill-type/bill-type.component.ts index 770129a..4eb3c0a 100644 --- a/bookie/src/app/sales/bill-type/bill-type.component.ts +++ b/bookie/src/app/sales/bill-type/bill-type.component.ts @@ -1,19 +1,17 @@ import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; -import { PrintType } from '../bills/bill'; + +import { PrintType } from '../bills/print-type'; @Component({ selector: 'app-bill-type', templateUrl: './bill-type.component.html', - styleUrls: ['./bill-type.component.css'] + styleUrls: ['./bill-type.component.css'], }) export class BillTypeComponent { selected: string; - constructor( - public dialogRef: MatDialogRef, - - ) { + constructor(public dialogRef: MatDialogRef) { this.selected = null; } @@ -25,4 +23,3 @@ export class BillTypeComponent { this.dialogRef.close(PrintType[this.selected]); } } - diff --git a/bookie/src/app/sales/bill.service.ts b/bookie/src/app/sales/bill.service.ts index fe54550..f3340e5 100644 --- a/bookie/src/app/sales/bill.service.ts +++ b/bookie/src/app/sales/bill.service.ts @@ -1,17 +1,22 @@ +import { SelectionModel } from '@angular/cdk/collections'; import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import * as math from 'mathjs'; import { BehaviorSubject } from 'rxjs'; import { Observable } from 'rxjs/internal/Observable'; -import * as math from 'mathjs'; -import { Product } from '../core/product'; -import { ModifiersComponent } from './modifiers/modifiers.component'; -import { ModifierCategoryService } from '../modifier-categories/modifier-category.service'; + import { ModifierCategory } from '../core/modifier-category'; -import { Bill, Inventory, Kot, PrintType } from './bills/bill'; -import { VoucherService } from './bills/voucher.service'; -import { ToasterService } from '../core/toaster.service'; +import { Product } from '../core/product'; import { Table } from '../core/table'; -import { SelectionModel } from '@angular/cdk/collections'; +import { ToasterService } from '../core/toaster.service'; +import { ModifierCategoryService } from '../modifier-categories/modifier-category.service'; + +import { Bill } from './bills/bill'; +import { Inventory } from './bills/inventory'; +import { Kot } from './bills/kot'; +import { PrintType } from './bills/print-type'; +import { VoucherService } from './bills/voucher.service'; +import { ModifiersComponent } from './modifiers/modifiers.component'; @Injectable() export class BillService { @@ -28,7 +33,7 @@ export class BillService { private dialog: MatDialog, private toaster: ToasterService, private ser: VoucherService, - private modifierCategoryService: ModifierCategoryService + private modifierCategoryService: ModifierCategoryService, ) { this.data = []; this.dataObs = new BehaviorSubject(this.data); @@ -40,47 +45,51 @@ export class BillService { loadData(bill: Bill): void { this.bill = bill; - const view = this.bill.kots.map(k => { - return [{ - id: k.id, - isKot: true, - oldKot: true, - info: `Kot: ${k.code} / ${k.date} (${k.user.name}) ` - }, ...k.inventories.map(i => { - return { - id: i.id, - kotId: k.id, - isKot: false, - product: i.product, - productId: i.product.id, - isHappyHour: i.isHappyHour, - isPrinted: true, - info: `${i.product.name} @ ${i.price} - ${math.round(i.discount * 100, 2)}%`, - price: i.price, - quantity: i.quantity, - discount: i.discount, - taxRate: i.taxRate, - tax: i.tax, - modifiers: i.modifiers - }; - })]; + const view = this.bill.kots.map((k) => { + return [ + { + id: k.id, + isKot: true, + oldKot: true, + info: `Kot: ${k.code} / ${k.date} (${k.user.name}) `, + }, + ...k.inventories.map((i) => { + return { + id: i.id, + kotId: k.id, + isKot: false, + product: i.product, + productId: i.product.id, + isHappyHour: i.isHappyHour, + isPrinted: true, + info: `${i.product.name} @ ${i.price} - ${math.round(i.discount * 100, 2)}%`, + price: i.price, + quantity: i.quantity, + discount: i.discount, + taxRate: i.taxRate, + tax: i.tax, + modifiers: i.modifiers, + }; + }), + ]; }); - this.data = view.reduce((a, c) => a.concat(c) , []); - this.data.push({isKot: true, newKot: true, info: '== New Kot =='}); + this.data = view.reduce((a, c) => a.concat(c), []); + this.data.push({ isKot: true, newKot: true, info: '== New Kot ==' }); this.dataObs.next(this.data); this.updateAmounts(); - } + addProduct(product: Product): void { const old = this.data.find( - x => !x.isKot && !x.id && x.productId === product.id && x.isHappyHour === product.hasHappyHour + (x) => + !x.isKot && !x.id && x.productId === product.id && x.isHappyHour === product.hasHappyHour, ); if (old !== undefined) { old.quantity += 1; } else { const item = { isKot: false, - product: product, + product, productId: product.id, isHappyHour: product.hasHappyHour, info: `${product.name} @ ${product.price} - ${0}%`, @@ -89,13 +98,15 @@ export class BillService { discount: 0, taxRate: product.tax.rate, tax: product.tax, - modifiers: [] + modifiers: [], }; this.data.push(item); - this.modifierCategoryService.listForProduct(product.id).subscribe(result => { - if (result.reduce((a: any, c: ModifierCategory) => { - return a + c.minimum; - }, 0)) { + this.modifierCategoryService.listForProduct(product.id).subscribe((result) => { + if ( + result.reduce((a: any, c: ModifierCategory) => { + return a + c.minimum; + }, 0) + ) { this.showModifier(item); } }); @@ -108,15 +119,15 @@ export class BillService { // [routerLink]="['/sales', 'modifiers', item.id]" const dialogRef = this.dialog.open(ModifiersComponent, { position: { - top: '10vh' + top: '10vh', }, data: { list: this.modifierCategoryService.listForProduct(item.productId), - selected: item.modifiers - } + selected: item.modifiers, + }, }); - dialogRef.afterClosed().subscribe(result => { + dialogRef.afterClosed().subscribe((result) => { if (result !== undefined) { item.modifiers = result; } @@ -155,10 +166,10 @@ export class BillService { this.showModifier(item); } - discount(discounts: {id: string, name: string, discount: number}[]): void { - this.data.forEach(x => { + discount(discounts: { id: string; name: string; discount: number }[]): void { + this.data.forEach((x) => { if (!x.isKot) { - x.discount = discounts.find(d => d.id === x.product.saleCategory.id).discount / 100; + x.discount = discounts.find((d) => d.id === x.product.saleCategory.id).discount / 100; x.info = `${x.product.name} @ ${x.price} - ${math.round(x.discount * 100, 2)}%`; } }); @@ -168,16 +179,21 @@ export class BillService { private getKot(): Kot { return new Kot({ - inventories: this.data.filter(x => !x.isKot && !x.isPrinted).map(y => new Inventory({ - product: y.product, - quantity: y.quantity, - price: y.price, - isHappyHour: y.isHappyHour, - discount: y.discount, - modifiers: y.modifiers, - taxRate: y.taxRate, - tax: y.tax - })) + inventories: this.data + .filter((x) => !x.isKot && !x.isPrinted) + .map( + (y) => + new Inventory({ + product: y.product, + quantity: y.quantity, + price: y.price, + isHappyHour: y.isHappyHour, + discount: y.discount, + modifiers: y.modifiers, + taxRate: y.taxRate, + tax: y.tax, + }), + ), }); } @@ -193,9 +209,9 @@ export class BillService { printBill(guest_book_id: string, printType: PrintType): Observable { const item = JSON.parse(JSON.stringify(this.bill)); - item.kots.forEach(k => { - k.inventories.forEach(i => { - i.discount = this.data.find(x => !x.isKot && x.id === i.id).discount; + item.kots.forEach((k) => { + k.inventories.forEach((i) => { + i.discount = this.data.find((x) => !x.isKot && x.id === i.id).discount; }); }); item.kots.push(this.getKot()); @@ -206,7 +222,10 @@ export class BillService { return this.bill.voucherType; } - receivePayment(amounts: { id: number; name: string; amount: number }[], name: string): Observable { + receivePayment( + amounts: { id: number; name: string; amount: number }[], + name: string, + ): Observable { return this.ser.receivePayment(this.bill.id, amounts, name, true); } @@ -232,33 +251,60 @@ export class BillService { updateAmounts() { this.netAmount.next( - math.round(this.data.filter(x => !x.isKot).reduce( - (ca: number, c: any) => ca + ((c.isHappyHour ? 0 : c.price) * c.quantity) - , 0)) + math.round( + this.data + .filter((x) => !x.isKot) + .reduce((ca: number, c: any) => ca + (c.isHappyHour ? 0 : c.price) * c.quantity, 0), + ), ); this.discountAmount.next( - math.round(this.data.filter(x => !x.isKot).reduce( - (ca: number, c: Inventory) => ca + ((c.isHappyHour ? 0 : c.price) * c.quantity * c.discount) - , 0)) + math.round( + this.data + .filter((x) => !x.isKot) + .reduce( + (ca: number, c: Inventory) => + ca + (c.isHappyHour ? 0 : c.price) * c.quantity * c.discount, + 0, + ), + ), ); this.taxAmount.next( - math.round(this.data.filter(x => !x.isKot).reduce( - (ca: number, c: Inventory) => ca + ((c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * c.taxRate) - , 0)) + math.round( + this.data + .filter((x) => !x.isKot) + .reduce( + (ca: number, c: Inventory) => + ca + (c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * c.taxRate, + 0, + ), + ), ); this.amount.next( - math.round(this.data.filter(x => !x.isKot).reduce( - (ca: number, c: Inventory) => ca + ((c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * (1 + c.taxRate)) - , 0)) + math.round( + this.data + .filter((x) => !x.isKot) + .reduce( + (ca: number, c: Inventory) => + ca + (c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * (1 + c.taxRate), + 0, + ), + ), ); } amountVal(): number { - return math.round(this.bill.kots.reduce( - (ka: number, k: Kot) => ka + k.inventories.reduce( - (ca: number, c: Inventory) => ca + ((c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * (1 + c.taxRate)) - , 0) - , 0)); + return math.round( + this.bill.kots.reduce( + (ka: number, k: Kot) => + ka + + k.inventories.reduce( + (ca: number, c: Inventory) => + ca + (c.isHappyHour ? 0 : c.price) * c.quantity * (1 - c.discount) * (1 + c.taxRate), + 0, + ), + 0, + ), + ); } splitBill(table: Table): Observable { diff --git a/bookie/src/app/sales/bills/bill-resolver.service.ts b/bookie/src/app/sales/bills/bill-resolver.service.ts index 6546160..dca6995 100644 --- a/bookie/src/app/sales/bills/bill-resolver.service.ts +++ b/bookie/src/app/sales/bills/bill-resolver.service.ts @@ -1,18 +1,17 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; -import { VoucherService } from './voucher.service'; + import { Bill } from './bill'; +import { VoucherService } from './voucher.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class BillResolver implements Resolve { + constructor(private ser: VoucherService) {} - constructor(private ser: VoucherService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const tableId = route.queryParamMap.get('table'); const guestId = route.queryParamMap.get('guest'); const voucherId = route.queryParamMap.get('voucher'); diff --git a/bookie/src/app/sales/bills/bill.ts b/bookie/src/app/sales/bills/bill.ts index d693f08..ce73557 100644 --- a/bookie/src/app/sales/bills/bill.ts +++ b/bookie/src/app/sales/bills/bill.ts @@ -1,44 +1,14 @@ -import {User} from '../../core/user'; -import {Table} from '../../core/table'; -import {GuestBook} from '../../guest-book/guest-book'; -import {Product} from '../../core/product'; -import {Tax} from '../../core/tax'; -import {Modifier} from '../../core/modifier'; +import { Table } from '../../core/table'; +import { User } from '../../core/user'; +import { GuestBook } from '../../guest-book/guest-book'; -export class Inventory { - id: string; - product: Product; - quantity: number; - price: number; - isHappyHour: boolean; - taxRate: number; - tax: Tax; - discount: number; - modifiers: Modifier[]; - sortOrder: number; - - public constructor(init?: Partial) { - Object.assign(this, init); - } -} - -export class Kot { - id: string; - code: number; - date: string; - user: User; - inventories: Inventory[]; - - public constructor(init?: Partial) { - Object.assign(this, init); - } -} +import { Kot } from './kot'; export class Bill { id: string; date: string; pax: number; - customer?: {id: string, name: string}; + customer?: { id: string; name: string }; user: User; creationDate: string; lastEditDate: string; @@ -57,11 +27,3 @@ export class Bill { Object.assign(this, init); } } - -export enum PrintType { - Kot = 'KOT', - Bill = 'REGULAR_BILL', - NoCharge = 'NO_CHARGE', - Staff = 'STAFF' -} - diff --git a/bookie/src/app/sales/bills/bills-datasource.ts b/bookie/src/app/sales/bills/bills-datasource.ts index de39739..96e1c42 100644 --- a/bookie/src/app/sales/bills/bills-datasource.ts +++ b/bookie/src/app/sales/bills/bills-datasource.ts @@ -2,9 +2,7 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable } from 'rxjs'; export class BillsDataSource extends DataSource { - - constructor(private data: Observable - ) { + constructor(private data: Observable) { super(); } @@ -16,6 +14,5 @@ export class BillsDataSource extends DataSource { * Called when the table is being destroyed. Use this function, to clean up * any open connections or free any held resources that were set up during connect. */ - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/sales/bills/bills.component.css b/bookie/src/app/sales/bills/bills.component.css index e143ad9..90bcba2 100644 --- a/bookie/src/app/sales/bills/bills.component.css +++ b/bookie/src/app/sales/bills/bills.component.css @@ -13,8 +13,8 @@ table { width: 100%; } -.mat-column-select{ - flex: 0 0 50px; +.mat-column-select { + flex: 0 0 50px; } .grey900 { diff --git a/bookie/src/app/sales/bills/bills.component.html b/bookie/src/app/sales/bills/bills.component.html index 1eac467..79051d4 100644 --- a/bookie/src/app/sales/bills/bills.component.html +++ b/bookie/src/app/sales/bills/bills.component.html @@ -3,44 +3,68 @@ Bill - +
      - Bill / KOT number + Bill / KOT number - {{ bs.bill.billId }} / - K-{{ bs.bill.kotId }} + {{ bs.bill.billId }} / K-{{ bs.bill.kotId }} - Time / Start Time / Last Edit Time + Time / Start Time / Last Edit Time - {{ bs.bill.date }} / {{ bs.bill.creationDate}} / {{ bs.bill.lastEditDate }} + {{ bs.bill.date }} / {{ + bs.bill.creationDate + }} / {{ + bs.bill.lastEditDate + }} - Table / Pax / Customer + Table / Pax / Customer - {{ bs.bill.table.name }} - / {{ bs.bill.pax }} / {{ bs.bill.customer?.name }} + {{ bs.bill.table.name }} / {{ bs.bill.pax }} / + {{ bs.bill.customer?.name }} - + - + @@ -48,10 +72,10 @@ - {{row.info}} + {{ row.info }}
        -
      • {{m.name}}
      • +
      • {{ m.name }}
      @@ -59,19 +83,44 @@ Quantity - - - - - - + diff --git a/bookie/src/app/section-printers/section-printer.component.spec.ts b/bookie/src/app/section-printers/section-printer.component.spec.ts index d335dda..3886a13 100644 --- a/bookie/src/app/section-printers/section-printer.component.spec.ts +++ b/bookie/src/app/section-printers/section-printer.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {SectionPrinterComponent} from './section-printer.component'; +import { SectionPrinterComponent } from './section-printer.component'; describe('SectionPrinterComponent', () => { let component: SectionPrinterComponent; @@ -8,9 +8,8 @@ describe('SectionPrinterComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [SectionPrinterComponent] - }) - .compileComponents(); + declarations: [SectionPrinterComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/section-printers/section-printer.component.ts b/bookie/src/app/section-printers/section-printer.component.ts index a44f925..88ea8e9 100644 --- a/bookie/src/app/section-printers/section-printer.component.ts +++ b/bookie/src/app/section-printers/section-printer.component.ts @@ -1,24 +1,26 @@ import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { MatDialog } from '@angular/material/dialog'; import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; + +import { Printer } from '../core/printer'; +import { Section } from '../core/section'; import { SectionPrinter } from '../core/section-printer'; import { ToasterService } from '../core/toaster.service'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; -import { Section } from '../core/section'; -import { Printer } from '../core/printer'; -import { SectionPrinterService } from './section-printer.service'; + import { SectionPrinterDataSource } from './section-printer-datasource'; +import { SectionPrinterService } from './section-printer.service'; @Component({ selector: 'app-section-printer', templateUrl: './section-printer.component.html', - styleUrls: ['./section-printer.component.css'] + styleUrls: ['./section-printer.component.css'], }) export class SectionPrinterComponent implements OnInit { - @ViewChild('section', {static: true}) sectionElement: ElementRef; + @ViewChild('section', { static: true }) sectionElement: ElementRef; form: FormGroup; dataSource: SectionPrinterDataSource; public listObservable = new BehaviorSubject([]); @@ -34,74 +36,80 @@ export class SectionPrinterComponent implements OnInit { private fb: FormBuilder, private toaster: ToasterService, private dialog: MatDialog, - private ser: SectionPrinterService + private ser: SectionPrinterService, ) { this.createForm(); - route.params.pipe(map(p => p.id)).subscribe(x => this.sectionId = x); + route.params.pipe(map((p) => p.id)).subscribe((x) => { + this.sectionId = x; + }); } createForm() { this.form = this.fb.group({ section: '', - menuCategories: this.fb.array([]) + menuCategories: this.fb.array([]), }); } ngOnInit() { - this.route.data - .subscribe((data: { list: SectionPrinter[], sections: Section[], printers: Printer[] }) => { + this.route.data.subscribe( + (data: { list: SectionPrinter[]; sections: Section[]; printers: Printer[] }) => { this.sections = data.sections; this.printers = data.printers; this.showItem(data.list); this.dataSource = new SectionPrinterDataSource(this.listObservable); this.listObservable.next(this.list); - }); + }, + ); } showItem(list: SectionPrinter[]) { this.list = list; this.form.get('section').setValue(this.sectionId); - this.form.setControl('menuCategories', this.fb.array( - this.list.map( - x => this.fb.group({ - menuCategory: (x.menuCategory?.name || 'Default'), - printer: x.printer?.id, - copies: '' + x.copies - }) - ) - )); + this.form.setControl( + 'menuCategories', + this.fb.array( + this.list.map((x) => + this.fb.group({ + menuCategory: x.menuCategory?.name || 'Default', + printer: x.printer?.id, + copies: `${x.copies}`, + }), + ), + ), + ); } - save() { - this.ser.save(this.sectionId, this.getItem()) - .subscribe( - (result: SectionPrinter[]) => { - this.toaster.show('Success', ''); - this.showItem(result); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.save(this.sectionId, this.getItem()).subscribe( + (result: SectionPrinter[]) => { + this.toaster.show('Success', ''); + this.showItem(result); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.sectionId) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.sectionId).subscribe( + () => { + this.toaster.show('Success', ''); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete all printers for this section?', content: 'Are you sure? This cannot be undone.'} + data: { + title: 'Delete all printers for this section?', + content: 'Are you sure? This cannot be undone.', + }, }); dialogRef.afterClosed().subscribe((result: boolean) => { @@ -117,7 +125,7 @@ export class SectionPrinterComponent implements OnInit { const array = this.form.get('menuCategories') as FormArray; this.list.forEach((item, index) => { const cont = array.controls[index].value; - item.printer = {id: cont.printer}; + item.printer = { id: cont.printer }; item.copies = +cont.copies; }); return this.list; diff --git a/bookie/src/app/section-printers/section-printer.service.spec.ts b/bookie/src/app/section-printers/section-printer.service.spec.ts index 9d364ee..162dbe2 100644 --- a/bookie/src/app/section-printers/section-printer.service.spec.ts +++ b/bookie/src/app/section-printers/section-printer.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SectionPrinterService} from './section-printer.service'; +import { SectionPrinterService } from './section-printer.service'; describe('SectionPrinterService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SectionPrinterService] + providers: [SectionPrinterService], }); }); diff --git a/bookie/src/app/section-printers/section-printer.service.ts b/bookie/src/app/section-printers/section-printer.service.ts index 34d771e..43c34ed 100644 --- a/bookie/src/app/section-printers/section-printer.service.ts +++ b/bookie/src/app/section-printers/section-printer.service.ts @@ -1,29 +1,30 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { SectionPrinter } from '../core/section-printer'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/section-printers'; const serviceName = 'SectionPrinterService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SectionPrinterService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? `${url}` : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } // item(id: string, menuCategoryId: string): Observable { @@ -35,16 +36,18 @@ export class SectionPrinterService { // } save(sectionId: string, list: SectionPrinter[]): Observable { - return >this.http.post(`${url}/${sectionId}`, list, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(`${url}/${sectionId}`, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/section-printers/section-printers-routing.module.ts b/bookie/src/app/section-printers/section-printers-routing.module.ts index be6e2a9..97f9594 100644 --- a/bookie/src/app/section-printers/section-printers-routing.module.ts +++ b/bookie/src/app/section-printers/section-printers-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {SectionPrinterResolver} from './section-printer-resolver.service'; -import {SectionPrinterComponent} from './section-printer.component'; -import {AuthGuard} from '../auth/auth-guard.service'; -import {SectionListResolver} from '../sections/section-list-resolver.service'; -import {PrinterListResolver} from '../printers/printer-list-resolver.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; +import { PrinterListResolver } from '../printers/printer-list-resolver.service'; +import { SectionListResolver } from '../sections/section-list-resolver.service'; + +import { SectionPrinterResolver } from './section-printer-resolver.service'; +import { SectionPrinterComponent } from './section-printer.component'; const sectionPrinterRoutes: Routes = [ { @@ -13,41 +15,32 @@ const sectionPrinterRoutes: Routes = [ component: SectionPrinterComponent, canActivate: [AuthGuard], data: { - permission: 'Section Printers' + permission: 'Section Printers', }, resolve: { list: SectionPrinterResolver, sections: SectionListResolver, - printers: PrinterListResolver - } + printers: PrinterListResolver, + }, }, { path: ':id', component: SectionPrinterComponent, canActivate: [AuthGuard], data: { - permission: 'Section Printers' + permission: 'Section Printers', }, resolve: { list: SectionPrinterResolver, sections: SectionListResolver, - printers: PrinterListResolver - } - } + printers: PrinterListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(sectionPrinterRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - SectionPrinterResolver - ] + imports: [CommonModule, RouterModule.forChild(sectionPrinterRoutes)], + exports: [RouterModule], + providers: [SectionPrinterResolver], }) -export class SectionPrintersRoutingModule { -} +export class SectionPrintersRoutingModule {} diff --git a/bookie/src/app/section-printers/section-printers.module.ts b/bookie/src/app/section-printers/section-printers.module.ts index fb9e92b..339fdeb 100644 --- a/bookie/src/app/section-printers/section-printers.module.ts +++ b/bookie/src/app/section-printers/section-printers.module.ts @@ -1,8 +1,8 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import { SectionPrinterComponent } from './section-printer.component'; -import { SectionPrintersRoutingModule } from './section-printers-routing.module'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -12,10 +12,11 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { CdkTableModule } from '@angular/cdk/table'; -import { ReactiveFormsModule } from '@angular/forms'; + import { SharedModule } from '../shared/shared.module'; -import { FlexLayoutModule } from '@angular/flex-layout'; + +import { SectionPrinterComponent } from './section-printer.component'; +import { SectionPrintersRoutingModule } from './section-printers-routing.module'; @NgModule({ imports: [ @@ -33,11 +34,8 @@ import { FlexLayoutModule } from '@angular/flex-layout'; MatTableModule, ReactiveFormsModule, SharedModule, - SectionPrintersRoutingModule + SectionPrintersRoutingModule, ], - declarations: [ - SectionPrinterComponent - ] + declarations: [SectionPrinterComponent], }) -export class SectionPrintersModule { -} +export class SectionPrintersModule {} diff --git a/bookie/src/app/sections/section-detail/section-detail.component.html b/bookie/src/app/sections/section-detail/section-detail.component.html index 40d9983..b8aa223 100644 --- a/bookie/src/app/sections/section-detail/section-detail.component.html +++ b/bookie/src/app/sections/section-detail/section-detail.component.html @@ -5,18 +5,31 @@
      -
      +
      Name - +
      - +
      diff --git a/bookie/src/app/sections/section-detail/section-detail.component.spec.ts b/bookie/src/app/sections/section-detail/section-detail.component.spec.ts index adf6720..488d8bf 100644 --- a/bookie/src/app/sections/section-detail/section-detail.component.spec.ts +++ b/bookie/src/app/sections/section-detail/section-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {SectionDetailComponent} from './section-detail.component'; +import { SectionDetailComponent } from './section-detail.component'; describe('SectionDetailComponent', () => { let component: SectionDetailComponent; @@ -8,9 +8,8 @@ describe('SectionDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [SectionDetailComponent] - }) - .compileComponents(); + declarations: [SectionDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/sections/section-detail/section-detail.component.ts b/bookie/src/app/sections/section-detail/section-detail.component.ts index 42c5d6c..5b0482e 100644 --- a/bookie/src/app/sections/section-detail/section-detail.component.ts +++ b/bookie/src/app/sections/section-detail/section-detail.component.ts @@ -1,17 +1,17 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatDialog} from '@angular/material/dialog'; -import { SectionService } from '../section.service'; import { Section } from '../../core/section'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { SectionService } from '../section.service'; @Component({ selector: 'app-section-detail', templateUrl: './section-detail.component.html', - styleUrls: ['./section-detail.component.css'] + styleUrls: ['./section-detail.component.css'], }) export class SectionDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -24,28 +24,27 @@ export class SectionDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: SectionService + private ser: SectionService, ) { this.createForm(); } createForm() { this.form = this.fb.group({ - name: '' + name: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Section }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: Section }) => { + this.showItem(data.item); + }); } showItem(item: Section) { this.item = item; this.form.setValue({ - name: this.item.name || '' + name: this.item.name || '', }); } @@ -56,35 +55,33 @@ export class SectionDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/sections'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/sections'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/sections'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/sections'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Section?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Section?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/sections/section-list-resolver.service.spec.ts b/bookie/src/app/sections/section-list-resolver.service.spec.ts index 22ebf29..cfd5b8a 100644 --- a/bookie/src/app/sections/section-list-resolver.service.spec.ts +++ b/bookie/src/app/sections/section-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SectionListResolver} from './section-list-resolver.service'; +import { SectionListResolver } from './section-list-resolver.service'; describe('SectionListResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SectionListResolver] + providers: [SectionListResolver], }); }); diff --git a/bookie/src/app/sections/section-list-resolver.service.ts b/bookie/src/app/sections/section-list-resolver.service.ts index a287b9d..0ee1538 100644 --- a/bookie/src/app/sections/section-list-resolver.service.ts +++ b/bookie/src/app/sections/section-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Section} from '../core/section'; -import {Observable} from 'rxjs/internal/Observable'; -import {SectionService} from './section.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Section } from '../core/section'; + +import { SectionService } from './section.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SectionListResolver implements Resolve { + constructor(private ser: SectionService) {} - constructor(private ser: SectionService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/sections/section-list/section-list-datasource.ts b/bookie/src/app/sections/section-list/section-list-datasource.ts index 2366e2e..a00306d 100644 --- a/bookie/src/app/sections/section-list/section-list-datasource.ts +++ b/bookie/src/app/sections/section-list/section-list-datasource.ts @@ -1,9 +1,9 @@ -import { DataSource} from '@angular/cdk/collections'; -import { Observable, of as observableOf} from 'rxjs'; -import { Section} from '../../core/section'; +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; + +import { Section } from '../../core/section'; export class SectionListDataSource extends DataSource
      { - constructor(public data: Section[]) { super(); } @@ -12,6 +12,5 @@ export class SectionListDataSource extends DataSource
      { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/sections/section-list/section-list.component.html b/bookie/src/app/sections/section-list/section-list.component.html index b22529b..8fb28b5 100644 --- a/bookie/src/app/sections/section-list/section-list.component.html +++ b/bookie/src/app/sections/section-list/section-list.component.html @@ -8,15 +8,16 @@ - Name - {{row.name}} - + {{ row.name }} + - + diff --git a/bookie/src/app/sections/section-list/section-list.component.spec.ts b/bookie/src/app/sections/section-list/section-list.component.spec.ts index 7fbcbc4..644ee90 100644 --- a/bookie/src/app/sections/section-list/section-list.component.spec.ts +++ b/bookie/src/app/sections/section-list/section-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {SectionListComponent} from './section-list.component'; +import { SectionListComponent } from './section-list.component'; describe('SectionListComponent', () => { let component: SectionListComponent; @@ -8,9 +8,8 @@ describe('SectionListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [SectionListComponent] - }) - .compileComponents(); + declarations: [SectionListComponent], + }).compileComponents(); fixture = TestBed.createComponent(SectionListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/sections/section-list/section-list.component.ts b/bookie/src/app/sections/section-list/section-list.component.ts index 15108ab..acbf939 100644 --- a/bookie/src/app/sections/section-list/section-list.component.ts +++ b/bookie/src/app/sections/section-list/section-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { SectionListDataSource } from './section-list-datasource'; -import { Section } from '../../core/section'; import { ActivatedRoute } from '@angular/router'; +import { Section } from '../../core/section'; + +import { SectionListDataSource } from './section-list-datasource'; + @Component({ selector: 'app-section-list', templateUrl: './section-list.component.html', - styleUrls: ['./section-list.component.css'] + styleUrls: ['./section-list.component.css'], }) export class SectionListComponent implements OnInit { dataSource: SectionListDataSource; @@ -14,14 +16,12 @@ export class SectionListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: Section[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: Section[] }) => { + this.list = data.list; + }); this.dataSource = new SectionListDataSource(this.list); } } diff --git a/bookie/src/app/sections/section-resolver.service.spec.ts b/bookie/src/app/sections/section-resolver.service.spec.ts index e2d64ef..1c60239 100644 --- a/bookie/src/app/sections/section-resolver.service.spec.ts +++ b/bookie/src/app/sections/section-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SectionResolver} from './section-resolver.service'; +import { SectionResolver } from './section-resolver.service'; describe('SectionResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SectionResolver] + providers: [SectionResolver], }); }); diff --git a/bookie/src/app/sections/section-resolver.service.ts b/bookie/src/app/sections/section-resolver.service.ts index 7279303..43fbd8b 100644 --- a/bookie/src/app/sections/section-resolver.service.ts +++ b/bookie/src/app/sections/section-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {SectionService} from './section.service'; -import {Section} from '../core/section'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Section } from '../core/section'; + +import { SectionService } from './section.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SectionResolver implements Resolve
      { + constructor(private ser: SectionService) {} - constructor(private ser: SectionService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable
      { + resolve(route: ActivatedRouteSnapshot): Observable
      { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/sections/section.service.spec.ts b/bookie/src/app/sections/section.service.spec.ts index 05615cf..44c477c 100644 --- a/bookie/src/app/sections/section.service.spec.ts +++ b/bookie/src/app/sections/section.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {SectionService} from './section.service'; +import { SectionService } from './section.service'; describe('SectionService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [SectionService] + providers: [SectionService], }); }); diff --git a/bookie/src/app/sections/section.service.ts b/bookie/src/app/sections/section.service.ts index 4c77093..65f3309 100644 --- a/bookie/src/app/sections/section.service.ts +++ b/bookie/src/app/sections/section.service.ts @@ -1,64 +1,68 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { Section } from '../core/section'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/sections'; const serviceName = 'SectionService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SectionService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable
      { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get
      (getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get
      (getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(section: Section): Observable
      { - return >this.http.post
      (url, section, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post
      (url, section, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(section: Section): Observable
      { - return >this.http.put
      (`${url}/${section.id}`, section, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put
      (`${url}/${section.id}`, section, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(section: Section): Observable
      { if (!section.id) { return this.save(section); - } else { - return this.update(section); } + return this.update(section); } delete(id: string): Observable
      { - return >this.http.delete
      (`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete
      (`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/sections/sections-routing.module.spec.ts b/bookie/src/app/sections/sections-routing.module.spec.ts index f9fdd63..05a450e 100644 --- a/bookie/src/app/sections/sections-routing.module.spec.ts +++ b/bookie/src/app/sections/sections-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {SectionsRoutingModule} from './sections-routing.module'; +import { SectionsRoutingModule } from './sections-routing.module'; describe('SectionsRoutingModule', () => { let sectionsRoutingModule: SectionsRoutingModule; diff --git a/bookie/src/app/sections/sections-routing.module.ts b/bookie/src/app/sections/sections-routing.module.ts index 5c69265..3bc09f0 100644 --- a/bookie/src/app/sections/sections-routing.module.ts +++ b/bookie/src/app/sections/sections-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {SectionListResolver} from './section-list-resolver.service'; -import {SectionResolver} from './section-resolver.service'; -import {SectionListComponent} from './section-list/section-list.component'; -import {SectionDetailComponent} from './section-detail/section-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { SectionDetailComponent } from './section-detail/section-detail.component'; +import { SectionListResolver } from './section-list-resolver.service'; +import { SectionListComponent } from './section-list/section-list.component'; +import { SectionResolver } from './section-resolver.service'; const sectionsRoutes: Routes = [ { @@ -13,49 +15,39 @@ const sectionsRoutes: Routes = [ component: SectionListComponent, canActivate: [AuthGuard], data: { - permission: 'Sections' + permission: 'Sections', }, resolve: { - list: SectionListResolver - } + list: SectionListResolver, + }, }, { path: 'new', component: SectionDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Sections' + permission: 'Sections', }, resolve: { - item: SectionResolver - } + item: SectionResolver, + }, }, { path: ':id', component: SectionDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Sections' + permission: 'Sections', }, resolve: { - item: SectionResolver - } - } + item: SectionResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(sectionsRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - SectionListResolver, - SectionResolver - ] + imports: [CommonModule, RouterModule.forChild(sectionsRoutes)], + exports: [RouterModule], + providers: [SectionListResolver, SectionResolver], }) -export class SectionsRoutingModule { -} +export class SectionsRoutingModule {} diff --git a/bookie/src/app/sections/sections.module.spec.ts b/bookie/src/app/sections/sections.module.spec.ts index 62697cf..831006a 100644 --- a/bookie/src/app/sections/sections.module.spec.ts +++ b/bookie/src/app/sections/sections.module.spec.ts @@ -1,4 +1,4 @@ -import {SectionsModule} from './sections.module'; +import { SectionsModule } from './sections.module'; describe('SectionsModule', () => { let sectionsModule: SectionsModule; diff --git a/bookie/src/app/sections/sections.module.ts b/bookie/src/app/sections/sections.module.ts index 975acdf..1921b9a 100644 --- a/bookie/src/app/sections/sections.module.ts +++ b/bookie/src/app/sections/sections.module.ts @@ -1,18 +1,18 @@ -import { NgModule } from '@angular/core'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; - -import { SectionListComponent } from './section-list/section-list.component'; -import { SectionDetailComponent } from './section-detail/section-detail.component'; -import { SectionsRoutingModule } from './sections-routing.module'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; -import { CdkTableModule } from '@angular/cdk/table'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FlexLayoutModule } from '@angular/flex-layout'; + +import { SectionDetailComponent } from './section-detail/section-detail.component'; +import { SectionListComponent } from './section-list/section-list.component'; +import { SectionsRoutingModule } from './sections-routing.module'; @NgModule({ imports: [ @@ -26,12 +26,8 @@ import { FlexLayoutModule } from '@angular/flex-layout'; MatProgressSpinnerModule, MatTableModule, ReactiveFormsModule, - SectionsRoutingModule + SectionsRoutingModule, ], - declarations: [ - SectionListComponent, - SectionDetailComponent - ] + declarations: [SectionListComponent, SectionDetailComponent], }) -export class SectionsModule { -} +export class SectionsModule {} diff --git a/bookie/src/app/shared/accounting.pipe.ts b/bookie/src/app/shared/accounting.pipe.ts index 19b8212..03b7385 100644 --- a/bookie/src/app/shared/accounting.pipe.ts +++ b/bookie/src/app/shared/accounting.pipe.ts @@ -1,20 +1,14 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'accounting' + name: 'accounting', }) export class AccountingPipe implements PipeTransform { - - constructor() { - - } - transform(value: string): string { if (value === null) { return ''; } - const amount = +(value.replace(new RegExp('(₹ )|(,)', 'g'), '')); - return value.replace('-', '') + ((amount < 0) ? '\u00A0Cr' : '\u00A0Dr'); + const amount = +value.replace(new RegExp('(₹[s]*)|(,)', 'g'), ''); + return value.replace('-', '') + (amount < 0 ? '\u00A0Cr' : '\u00A0Dr'); } - } diff --git a/bookie/src/app/shared/clear.pipe.ts b/bookie/src/app/shared/clear.pipe.ts index e6a9c43..0d8ef17 100644 --- a/bookie/src/app/shared/clear.pipe.ts +++ b/bookie/src/app/shared/clear.pipe.ts @@ -1,12 +1,10 @@ -import {Pipe, PipeTransform} from '@angular/core'; +import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'clear' + name: 'clear', }) export class ClearPipe implements PipeTransform { - - transform(value: any, args?: any): any { + transform(value: any): any { return value === '₹ 0.00' || value === '0.00' ? '' : value; } - } diff --git a/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.html b/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.html index 1942c33..258eb0f 100644 --- a/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.html +++ b/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.html @@ -1,6 +1,6 @@ -

      {{data.title}}

      +

      {{ data.title }}

      - {{data.content}} + {{ data.content }}
      diff --git a/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.ts b/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.ts index 0d7ca32..437ec3a 100644 --- a/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.ts +++ b/bookie/src/app/shared/confirm-dialog/confirm-dialog.component.ts @@ -1,16 +1,14 @@ -import {Component, Inject} from '@angular/core'; +import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @Component({ selector: 'app-confirm-dialog', templateUrl: './confirm-dialog.component.html', - styleUrls: ['./confirm-dialog.component.css'] + styleUrls: ['./confirm-dialog.component.css'], }) export class ConfirmDialogComponent { - constructor( public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: any) { - } - + @Inject(MAT_DIALOG_DATA) public data: any, + ) {} } diff --git a/bookie/src/app/shared/cookie.service.ts b/bookie/src/app/shared/cookie.service.ts index ea308d7..44fb306 100644 --- a/bookie/src/app/shared/cookie.service.ts +++ b/bookie/src/app/shared/cookie.service.ts @@ -1,13 +1,10 @@ -import {Injectable} from '@angular/core'; +import { Injectable } from '@angular/core'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class CookieService { - - constructor() { - } - + // eslint-disable-next-line class-methods-use-this public getCookie(name: string) { const ca: Array = document.cookie.split(';'); const caLen: number = ca.length; @@ -27,10 +24,11 @@ export class CookieService { this.setCookie(name, '', -1); } + // eslint-disable-next-line class-methods-use-this public setCookie(name: string, value: string, expireDays: number, path: string = '') { const d: Date = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); - const expires: string = 'expires=' + d.toUTCString(); - document.cookie = name + '=' + value + '; ' + expires + (path.length > 0 ? '; path=' + path : ''); + const expires = `expires=${d.toUTCString()}`; + document.cookie = `${name}=${value}; ${expires}${path.length > 0 ? `; path=${path}` : ''}`; } } diff --git a/bookie/src/app/shared/image-dialog/image-dialog.component.html b/bookie/src/app/shared/image-dialog/image-dialog.component.html index 1343473..283a3d9 100644 --- a/bookie/src/app/shared/image-dialog/image-dialog.component.html +++ b/bookie/src/app/shared/image-dialog/image-dialog.component.html @@ -1 +1 @@ - + diff --git a/bookie/src/app/shared/image-dialog/image-dialog.component.ts b/bookie/src/app/shared/image-dialog/image-dialog.component.ts index 22ab1e5..69efa1d 100644 --- a/bookie/src/app/shared/image-dialog/image-dialog.component.ts +++ b/bookie/src/app/shared/image-dialog/image-dialog.component.ts @@ -1,20 +1,18 @@ -import {Component, Inject} from '@angular/core'; +import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @Component({ selector: 'app-image-dialog', templateUrl: './image-dialog.component.html', - styleUrls: ['./image-dialog.component.css'] + styleUrls: ['./image-dialog.component.css'], }) export class ImageDialogComponent { - constructor( public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: any) { - } + @Inject(MAT_DIALOG_DATA) public data: any, + ) {} close(): void { this.dialogRef.close(); } - } diff --git a/bookie/src/app/shared/local-time.pipe.ts b/bookie/src/app/shared/local-time.pipe.ts index acd61a2..39a8994 100644 --- a/bookie/src/app/shared/local-time.pipe.ts +++ b/bookie/src/app/shared/local-time.pipe.ts @@ -1,16 +1,16 @@ -import {Pipe, PipeTransform} from '@angular/core'; +import { Pipe, PipeTransform } from '@angular/core'; import * as moment from 'moment'; @Pipe({ - name: 'localTime' + name: 'localTime', }) export class LocalTimePipe implements PipeTransform { - transform(value: string): string { if (value === undefined) { return ''; } - return moment(value, 'DD-MMM-YYYY HH:mm').subtract(new Date().getTimezoneOffset(), 'minutes').format('DD-MMM-YYYY HH:mm'); + return moment(value, 'DD-MMM-YYYY HH:mm') + .subtract(new Date().getTimezoneOffset(), 'minutes') + .format('DD-MMM-YYYY HH:mm'); } - } diff --git a/bookie/src/app/shared/shared.module.ts b/bookie/src/app/shared/shared.module.ts index 1e581b5..bb59339 100644 --- a/bookie/src/app/shared/shared.module.ts +++ b/bookie/src/app/shared/shared.module.ts @@ -1,31 +1,23 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; +import { NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; -import { LocalTimePipe } from './local-time.pipe'; -import { ClearPipe } from './clear.pipe'; + import { AccountingPipe } from './accounting.pipe'; +import { ClearPipe } from './clear.pipe'; +import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; import { ImageDialogComponent } from './image-dialog/image-dialog.component'; +import { LocalTimePipe } from './local-time.pipe'; @NgModule({ - imports: [ - CommonModule, - MatButtonModule, - MatDialogModule - ], + imports: [CommonModule, MatButtonModule, MatDialogModule], declarations: [ ConfirmDialogComponent, ImageDialogComponent, AccountingPipe, ClearPipe, - LocalTimePipe + LocalTimePipe, ], - exports: [ - AccountingPipe, - ClearPipe, - LocalTimePipe - ] + exports: [AccountingPipe, ClearPipe, LocalTimePipe], }) -export class SharedModule { -} +export class SharedModule {} diff --git a/bookie/src/app/shared/to-csv.service.ts b/bookie/src/app/shared/to-csv.service.ts index 2ef1a00..5d080fd 100644 --- a/bookie/src/app/shared/to-csv.service.ts +++ b/bookie/src/app/shared/to-csv.service.ts @@ -1,17 +1,16 @@ -import {Injectable} from '@angular/core'; +import { Injectable } from '@angular/core'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ToCsvService { - - constructor() { - } - + // eslint-disable-next-line class-methods-use-this toCsv(headers: any, data: any[]): string { const header = Object.keys(headers); - const replacer = (key, value) => value === null ? '' : value; - const csv = data.map(row => header.map(fieldName => JSON.stringify(row[headers[fieldName]], replacer)).join(',')); + const replacer = (key, value) => (value === null ? '' : value); + const csv = data.map((row) => + header.map((fieldName) => JSON.stringify(row[headers[fieldName]], replacer)).join(','), + ); csv.unshift(header.join(',')); return csv.join('\r\n'); } diff --git a/bookie/src/app/shared/tokenizer.service.ts b/bookie/src/app/shared/tokenizer.service.ts deleted file mode 100644 index 8396bc8..0000000 --- a/bookie/src/app/shared/tokenizer.service.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {Injectable} from '@angular/core'; - -const re = /((('[^']+'|"[^"]+"|[^\s]+)\s*:\s*('[^']+'|"[^"]+"|[^\s]+))|('[^']+'|"[^"]+"|[^\s]+))/g; - -@Injectable({ - providedIn: 'root' -}) -export class TokenizerService { - - constructor() { - } - - getMatches(input: string): string[] { - input = input ? input : ''; - return input.match(re); - } - - getPairs(input: string[]): any[] { - input = input ? input : []; - return input.reduce((accumulator, item) => { - let key, - value; - if (item.indexOf(':') === -1) { - key = ''; - value = item; - } else { - key = item.substr(0, item.indexOf(':')).trim(); - value = item.substr(item.indexOf(':') + 1, item.length).trim(); - } - if (key.indexOf('\'') !== -1 || key.indexOf('"') !== -1) { - key = key.substring(1, key.length - 1).trim(); - } - if (value.indexOf('\'') !== -1 || value.indexOf('"') !== -1) { - value = value.substring(1, value.length - 1).trim(); - } - if (value !== '') { - accumulator.push({Key: key, Value: value}); - } - return accumulator; - }, []); - } - - isSort(key: string, value: string, sorter?: any): boolean { - const isSort = (key === '' && value.length > 1 && '+-'.indexOf(value.charAt(0)) !== -1); - return sorter !== null ? (isSort && value.substr(1) in sorter) : isSort; - } - getFilters(input: string[]) { - // input. - } -} diff --git a/bookie/src/app/tables/table-detail/table-detail.component.html b/bookie/src/app/tables/table-detail/table-detail.component.html index 1a15b9f..fddf33d 100644 --- a/bookie/src/app/tables/table-detail/table-detail.component.html +++ b/bookie/src/app/tables/table-detail/table-detail.component.html @@ -5,40 +5,68 @@
      -
      +
      Name - +
      -
      +
      Seats - +
      -
      +
      Section {{ s.name }} - - - + + +
      -
      +
      Is Active?
      - +
      diff --git a/bookie/src/app/tables/table-detail/table-detail.component.spec.ts b/bookie/src/app/tables/table-detail/table-detail.component.spec.ts index a14e933..2897402 100644 --- a/bookie/src/app/tables/table-detail/table-detail.component.spec.ts +++ b/bookie/src/app/tables/table-detail/table-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {TableDetailComponent} from './tables-detail.component'; +import { TableDetailComponent } from './tables-detail.component'; describe('TableDetailComponent', () => { let component: TableDetailComponent; @@ -8,9 +8,8 @@ describe('TableDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [TableDetailComponent] - }) - .compileComponents(); + declarations: [TableDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/tables/table-detail/table-detail.component.ts b/bookie/src/app/tables/table-detail/table-detail.component.ts index 9496a27..4bb5206 100644 --- a/bookie/src/app/tables/table-detail/table-detail.component.ts +++ b/bookie/src/app/tables/table-detail/table-detail.component.ts @@ -1,18 +1,18 @@ -import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; - -import {TableService} from '../table.service'; -import {Table} from '../../core/table'; -import {ActivatedRoute, Router} from '@angular/router'; -import {ToasterService} from '../../core/toaster.service'; -import {FormBuilder, FormGroup} from '@angular/forms'; -import {ConfirmDialogComponent} from '../../shared/confirm-dialog/confirm-dialog.component'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; -import {Section} from '../../core/section'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { Section } from '../../core/section'; +import { Table } from '../../core/table'; +import { ToasterService } from '../../core/toaster.service'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { TableService } from '../table.service'; @Component({ selector: 'app-table-detail', templateUrl: './table-detail.component.html', - styleUrls: ['./table-detail.component.css'] + styleUrls: ['./table-detail.component.css'], }) export class TableDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -26,7 +26,7 @@ export class TableDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: TableService + private ser: TableService, ) { this.createForm(); } @@ -36,16 +36,15 @@ export class TableDetailComponent implements OnInit, AfterViewInit { name: '', seats: '', section: '', - isActive: '' + isActive: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Table, sections: Section[] }) => { - this.showItem(data.item); - this.sections = data.sections; - }); + this.route.data.subscribe((data: { item: Table; sections: Section[] }) => { + this.showItem(data.item); + this.sections = data.sections; + }); } showItem(item: Table) { @@ -54,7 +53,7 @@ export class TableDetailComponent implements OnInit, AfterViewInit { name: this.item.name, seats: this.item.seats, section: this.item.section.id ? this.item.section.id : '', - isActive: this.item.isActive + isActive: this.item.isActive, }); } @@ -65,35 +64,33 @@ export class TableDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/tables'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/tables'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/tables'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/tables'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Account?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Account?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/tables/table-list-resolver.service.spec.ts b/bookie/src/app/tables/table-list-resolver.service.spec.ts index c2858ad..bbc4619 100644 --- a/bookie/src/app/tables/table-list-resolver.service.spec.ts +++ b/bookie/src/app/tables/table-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TableListResolver} from './table-list-resolver.service'; +import { TableListResolver } from './table-list-resolver.service'; describe('TableListResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TableListResolver] + providers: [TableListResolver], }); }); diff --git a/bookie/src/app/tables/table-list-resolver.service.ts b/bookie/src/app/tables/table-list-resolver.service.ts index 9a4905f..3cb7314 100644 --- a/bookie/src/app/tables/table-list-resolver.service.ts +++ b/bookie/src/app/tables/table-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Table} from '../core/table'; -import {Observable} from 'rxjs/internal/Observable'; -import {TableService} from './table.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Table } from '../core/table'; + +import { TableService } from './table.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TableListResolver implements Resolve { + constructor(private ser: TableService) {} - constructor(private ser: TableService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/tables/table-list/table-list-datasource.ts b/bookie/src/app/tables/table-list/table-list-datasource.ts index 0056169..099057a 100644 --- a/bookie/src/app/tables/table-list/table-list-datasource.ts +++ b/bookie/src/app/tables/table-list/table-list-datasource.ts @@ -1,6 +1,7 @@ import { DataSource } from '@angular/cdk/collections'; -import { tap } from 'rxjs/operators'; import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + import { Table } from '../../core/table'; export class TableListDataSource extends DataSource
      { @@ -9,7 +10,9 @@ export class TableListDataSource extends DataSource
      { constructor(private readonly dataObs: Observable) { super(); this.dataObs = dataObs.pipe( - tap(x => this.data = x) + tap((x) => { + this.data = x; + }), ); } @@ -17,6 +20,5 @@ export class TableListDataSource extends DataSource
      { return this.dataObs; } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/tables/table-list/table-list.component.html b/bookie/src/app/tables/table-list/table-list.component.html index 8b27e7a..67b0813 100644 --- a/bookie/src/app/tables/table-list/table-list.component.html +++ b/bookie/src/app/tables/table-list/table-list.component.html @@ -1,43 +1,53 @@ Tables - + add_box Add - - + Name - {{row.name}} + {{ row.name }} Seats - {{row.seats}} + {{ row.seats }} Section - {{row.section.name}} + {{ row.section.name }} Is Active? - {{row.isActive}} + {{ row.isActive }} - + diff --git a/bookie/src/app/tables/table-list/table-list.component.spec.ts b/bookie/src/app/tables/table-list/table-list.component.spec.ts index 8ae0953..629ec9c 100644 --- a/bookie/src/app/tables/table-list/table-list.component.spec.ts +++ b/bookie/src/app/tables/table-list/table-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {TableListComponent} from './table-list.component'; +import { TableListComponent } from './table-list.component'; describe('TableListComponent', () => { let component: TableListComponent; @@ -8,9 +8,8 @@ describe('TableListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [TableListComponent] - }) - .compileComponents(); + declarations: [TableListComponent], + }).compileComponents(); fixture = TestBed.createComponent(TableListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/tables/table-list/table-list.component.ts b/bookie/src/app/tables/table-list/table-list.component.ts index 732800e..4e48dbf 100644 --- a/bookie/src/app/tables/table-list/table-list.component.ts +++ b/bookie/src/app/tables/table-list/table-list.component.ts @@ -1,18 +1,20 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { TableListDataSource } from './table-list-datasource'; -import { Table } from '../../core/table'; -import { ActivatedRoute, Router } from '@angular/router'; -import { MatTable } from '@angular/material/table'; -import { MenuCategory } from '../../core/menu-category'; -import { BehaviorSubject } from 'rxjs'; import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTable } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { BehaviorSubject } from 'rxjs'; + +import { MenuCategory } from '../../core/menu-category'; +import { Table } from '../../core/table'; import { ToasterService } from '../../core/toaster.service'; import { TableService } from '../table.service'; +import { TableListDataSource } from './table-list-datasource'; + @Component({ selector: 'app-table-list', templateUrl: './table-list.component.html', - styleUrls: ['./table-list.component.css'] + styleUrls: ['./table-list.component.css'], }) export class TableListComponent implements OnInit { @ViewChild('table', { static: true }) table: MatTable; @@ -26,7 +28,7 @@ export class TableListComponent implements OnInit { private route: ActivatedRoute, private router: Router, private toaster: ToasterService, - private ser: TableService + private ser: TableService, ) { this.data = new BehaviorSubject([]); this.data.subscribe((data: Table[]) => { @@ -35,23 +37,21 @@ export class TableListComponent implements OnInit { } ngOnInit() { - this.route.data - .subscribe((data: { list: Table[] }) => { - this.data.next(data.list); - }); + this.route.data.subscribe((data: { list: Table[] }) => { + this.data.next(data.list); + }); this.dataSource = new TableListDataSource(this.data); } updateSortOrder() { - this.ser.updateSortOrder(this.list) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.updateSortOrder(this.list).subscribe( + () => { + this.toaster.show('Success', ''); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } dropTable(event: CdkDragDrop) { diff --git a/bookie/src/app/tables/table-resolver.service.spec.ts b/bookie/src/app/tables/table-resolver.service.spec.ts index ff5445f..0c1152b 100644 --- a/bookie/src/app/tables/table-resolver.service.spec.ts +++ b/bookie/src/app/tables/table-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TableResolver} from './table-resolver.service'; +import { TableResolver } from './table-resolver.service'; describe('TableResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TableResolver] + providers: [TableResolver], }); }); diff --git a/bookie/src/app/tables/table-resolver.service.ts b/bookie/src/app/tables/table-resolver.service.ts index 3627425..4dad981 100644 --- a/bookie/src/app/tables/table-resolver.service.ts +++ b/bookie/src/app/tables/table-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {TableService} from './table.service'; -import {Table} from '../core/table'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Table } from '../core/table'; + +import { TableService } from './table.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TableResolver implements Resolve
      { + constructor(private ser: TableService) {} - constructor(private ser: TableService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable
      { + resolve(route: ActivatedRouteSnapshot): Observable
      { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/tables/table.service.spec.ts b/bookie/src/app/tables/table.service.spec.ts index 46b596c..530a6eb 100644 --- a/bookie/src/app/tables/table.service.spec.ts +++ b/bookie/src/app/tables/table.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TableService} from './table.service'; +import { TableService } from './table.service'; describe('TableService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TableService] + providers: [TableService], }); }); diff --git a/bookie/src/app/tables/table.service.ts b/bookie/src/app/tables/table.service.ts index 1f09fdc..98d3d49 100644 --- a/bookie/src/app/tables/table.service.ts +++ b/bookie/src/app/tables/table.service.ts @@ -1,78 +1,84 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { Table } from '../core/table'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/tables'; const serviceName = 'TableService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TableService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable
      { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get
      (getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http + .get
      (getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } running(): Observable { - return >this.http.get(`${url}/running`) - .pipe( - catchError(this.log.handleError(serviceName, 'running')) - ); + return >( + this.http + .get(`${url}/running`) + .pipe(catchError(this.log.handleError(serviceName, 'running'))) + ); } save(tables: Table): Observable
      { - return >this.http.post
      (url, tables, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post
      (url, tables, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(tables: Table): Observable
      { - return >this.http.put
      (`${url}/${tables.id}`, tables, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put
      (`${url}/${tables.id}`, tables, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } updateSortOrder(list: Table[]): Observable { - return >this.http.post(`${url}/list`, list, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'updateSortOrder')) - ); + return >( + this.http + .post(`${url}/list`, list, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'updateSortOrder'))) + ); } saveOrUpdate(tables: Table): Observable
      { if (!tables.id) { return this.save(tables); - } else { - return this.update(tables); } + return this.update(tables); } delete(id: string): Observable
      { - return >this.http.delete
      (`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete
      (`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/tables/tables-routing.module.spec.ts b/bookie/src/app/tables/tables-routing.module.spec.ts index be00969..fee1691 100644 --- a/bookie/src/app/tables/tables-routing.module.spec.ts +++ b/bookie/src/app/tables/tables-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {TableRoutingModule} from './tables-routing.module'; +import { TableRoutingModule } from './tables-routing.module'; describe('TableRoutingModule', () => { let tablesRoutingModule: TableRoutingModule; diff --git a/bookie/src/app/tables/tables-routing.module.ts b/bookie/src/app/tables/tables-routing.module.ts index 99095fb..ea657f8 100644 --- a/bookie/src/app/tables/tables-routing.module.ts +++ b/bookie/src/app/tables/tables-routing.module.ts @@ -1,64 +1,56 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { TableListResolver } from './table-list-resolver.service'; -import { TableResolver } from './table-resolver.service'; -import { TableListComponent } from './table-list/table-list.component'; -import { TableDetailComponent } from './table-detail/table-detail.component'; + import { AuthGuard } from '../auth/auth-guard.service'; import { SectionListResolver } from '../sections/section-list-resolver.service'; +import { TableDetailComponent } from './table-detail/table-detail.component'; +import { TableListResolver } from './table-list-resolver.service'; +import { TableListComponent } from './table-list/table-list.component'; +import { TableResolver } from './table-resolver.service'; + const tablesRoutes: Routes = [ { path: '', component: TableListComponent, canActivate: [AuthGuard], data: { - permission: 'Tables' + permission: 'Tables', }, resolve: { - list: TableListResolver - } + list: TableListResolver, + }, }, { path: 'new', component: TableDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Tables' + permission: 'Tables', }, resolve: { item: TableResolver, - sections: SectionListResolver - } + sections: SectionListResolver, + }, }, { path: ':id', component: TableDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Tables' + permission: 'Tables', }, resolve: { item: TableResolver, - sections: SectionListResolver - } - } + sections: SectionListResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(tablesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - TableListResolver, - TableResolver - ] + imports: [CommonModule, RouterModule.forChild(tablesRoutes)], + exports: [RouterModule], + providers: [TableListResolver, TableResolver], }) -export class TableRoutingModule { -} +export class TableRoutingModule {} diff --git a/bookie/src/app/tables/tables.module.spec.ts b/bookie/src/app/tables/tables.module.spec.ts index 93e27a9..cba1d1e 100644 --- a/bookie/src/app/tables/tables.module.spec.ts +++ b/bookie/src/app/tables/tables.module.spec.ts @@ -1,4 +1,4 @@ -import {TableModule} from './tables.module'; +import { TableModule } from './tables.module'; describe('TableModule', () => { let tablesModule: TableModule; diff --git a/bookie/src/app/tables/tables.module.ts b/bookie/src/app/tables/tables.module.ts index 143b036..badd19f 100644 --- a/bookie/src/app/tables/tables.module.ts +++ b/bookie/src/app/tables/tables.module.ts @@ -1,20 +1,21 @@ -import { NgModule } from '@angular/core'; +import { DragDropModule } from '@angular/cdk/drag-drop'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatOptionModule } from '@angular/material/core'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; -import { MatOptionModule } from '@angular/material/core'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; -import { CdkTableModule } from '@angular/cdk/table'; -import { DragDropModule } from '@angular/cdk/drag-drop'; -import { FlexLayoutModule } from '@angular/flex-layout'; -import { TableListComponent } from './table-list/table-list.component'; + import { TableDetailComponent } from './table-detail/table-detail.component'; +import { TableListComponent } from './table-list/table-list.component'; import { TableRoutingModule } from './tables-routing.module'; @NgModule({ @@ -33,12 +34,8 @@ import { TableRoutingModule } from './tables-routing.module'; MatSelectModule, MatTableModule, ReactiveFormsModule, - TableRoutingModule + TableRoutingModule, ], - declarations: [ - TableListComponent, - TableDetailComponent - ] + declarations: [TableListComponent, TableDetailComponent], }) -export class TableModule { -} +export class TableModule {} diff --git a/bookie/src/app/tax-report/tax-report-datasource.ts b/bookie/src/app/tax-report/tax-report-datasource.ts index fd93238..1baae2a 100644 --- a/bookie/src/app/tax-report/tax-report-datasource.ts +++ b/bookie/src/app/tax-report/tax-report-datasource.ts @@ -1,10 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; -import { TaxReportItem } from './tax-report'; +import { TaxReportItem } from './tax-report-item'; export class TaxReportDatasource extends DataSource { - constructor(public data: TaxReportItem[]) { super(); } @@ -13,6 +12,5 @@ export class TaxReportDatasource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/tax-report/tax-report-item.ts b/bookie/src/app/tax-report/tax-report-item.ts new file mode 100644 index 0000000..c090543 --- /dev/null +++ b/bookie/src/app/tax-report/tax-report-item.ts @@ -0,0 +1,6 @@ +export class TaxReportItem { + name: string; + taxRate: number; + saleAmount: number; + amount: number; +} diff --git a/bookie/src/app/tax-report/tax-report-resolver.service.spec.ts b/bookie/src/app/tax-report/tax-report-resolver.service.spec.ts index 1602d57..6d5b8b0 100644 --- a/bookie/src/app/tax-report/tax-report-resolver.service.spec.ts +++ b/bookie/src/app/tax-report/tax-report-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TaxReportResolver} from './tax-report-resolver.service'; +import { TaxReportResolver } from './tax-report-resolver.service'; describe('TaxReportResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TaxReportResolver] + providers: [TaxReportResolver], }); }); diff --git a/bookie/src/app/tax-report/tax-report-resolver.service.ts b/bookie/src/app/tax-report/tax-report-resolver.service.ts index f0a7071..24c5a57 100644 --- a/bookie/src/app/tax-report/tax-report-resolver.service.ts +++ b/bookie/src/app/tax-report/tax-report-resolver.service.ts @@ -1,18 +1,17 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router'; -import {Observable} from 'rxjs/internal/Observable'; -import {TaxReport} from './tax-report'; -import {TaxReportService} from './tax-report.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { TaxReport } from './tax-report'; +import { TaxReportService } from './tax-report.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TaxReportResolver implements Resolve { + constructor(private ser: TaxReportService) {} - constructor(private ser: TaxReportService) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 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/tax-report/tax-report-routing.module.spec.ts b/bookie/src/app/tax-report/tax-report-routing.module.spec.ts index b8b81b3..cb7c574 100644 --- a/bookie/src/app/tax-report/tax-report-routing.module.spec.ts +++ b/bookie/src/app/tax-report/tax-report-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {TaxReportRoutingModule} from './tax-report-routing.module'; +import { TaxReportRoutingModule } from './tax-report-routing.module'; describe('TaxReportRoutingModule', () => { let taxReportRoutingModule: TaxReportRoutingModule; diff --git a/bookie/src/app/tax-report/tax-report-routing.module.ts b/bookie/src/app/tax-report/tax-report-routing.module.ts index c57cb2f..ef17f31 100644 --- a/bookie/src/app/tax-report/tax-report-routing.module.ts +++ b/bookie/src/app/tax-report/tax-report-routing.module.ts @@ -1,8 +1,10 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { TaxReportResolver } from './tax-report-resolver.service'; + import { AuthGuard } from '../auth/auth-guard.service'; + +import { TaxReportResolver } from './tax-report-resolver.service'; import { TaxReportComponent } from './tax-report.component'; const taxReportRoutes: Routes = [ @@ -11,27 +13,18 @@ const taxReportRoutes: Routes = [ component: TaxReportComponent, canActivate: [AuthGuard], data: { - permission: 'Tax Report' + permission: 'Tax Report', }, resolve: { - info: TaxReportResolver + info: TaxReportResolver, }, - runGuardsAndResolvers: 'always' - } + runGuardsAndResolvers: 'always', + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(taxReportRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - TaxReportResolver - ] + imports: [CommonModule, RouterModule.forChild(taxReportRoutes)], + exports: [RouterModule], + providers: [TaxReportResolver], }) -export class TaxReportRoutingModule { -} +export class TaxReportRoutingModule {} diff --git a/bookie/src/app/tax-report/tax-report.component.html b/bookie/src/app/tax-report/tax-report.component.html index 2de5275..365edb6 100644 --- a/bookie/src/app/tax-report/tax-report.component.html +++ b/bookie/src/app/tax-report/tax-report.component.html @@ -7,17 +7,34 @@
      -
      +
      - + - + @@ -25,33 +42,36 @@
      - Name - {{row.name}} + {{ row.name }} Rate - {{row.taxRate | percent:'1.2-2'}} + {{ + row.taxRate | percent: '1.2-2' + }} Sale - {{row.saleAmount | currency:'INR'}} + {{ + row.saleAmount | currency: 'INR' + }} Tax - {{row.amount | currency:'INR'}} + {{ row.amount | currency: 'INR' }} - + diff --git a/bookie/src/app/tax-report/tax-report.component.spec.ts b/bookie/src/app/tax-report/tax-report.component.spec.ts index e4aa281..0ac9d78 100644 --- a/bookie/src/app/tax-report/tax-report.component.spec.ts +++ b/bookie/src/app/tax-report/tax-report.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {TaxReportComponent} from './tax-report.component'; +import { TaxReportComponent } from './tax-report.component'; describe('TaxReportComponent', () => { let component: TaxReportComponent; @@ -8,9 +8,8 @@ describe('TaxReportComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [TaxReportComponent] - }) - .compileComponents(); + declarations: [TaxReportComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/tax-report/tax-report.component.ts b/bookie/src/app/tax-report/tax-report.component.ts index 72a81d5..c96be48 100644 --- a/bookie/src/app/tax-report/tax-report.component.ts +++ b/bookie/src/app/tax-report/tax-report.component.ts @@ -2,14 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; -import { TaxReportDatasource } from './tax-report-datasource'; -import { TaxReport } from './tax-report'; + import { ToCsvService } from '../shared/to-csv.service'; +import { TaxReport } from './tax-report'; +import { TaxReportDatasource } from './tax-report-datasource'; + @Component({ selector: 'app-tax-report', templateUrl: './tax-report.component.html', - styleUrls: ['./tax-report.component.css'] + styleUrls: ['./tax-report.component.css'], }) export class TaxReportComponent implements OnInit { dataSource: TaxReportDatasource; @@ -19,27 +21,24 @@ export class TaxReportComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'taxRate', 'saleAmount', 'taxAmount']; - constructor( private route: ActivatedRoute, private router: Router, private fb: FormBuilder, - private toCsv: ToCsvService + private toCsv: ToCsvService, ) { this.createForm(); - } ngOnInit() { - this.route.data - .subscribe((data: { info: TaxReport }) => { - this.info = data.info; - this.form.setValue({ - startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), - finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate() - }); - this.dataSource = new TaxReportDatasource(this.info.amounts); + this.route.data.subscribe((data: { info: TaxReport }) => { + this.info = data.info; + this.form.setValue({ + startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), + finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), }); + this.dataSource = new TaxReportDatasource(this.info.amounts); + }); } show() { @@ -47,15 +46,15 @@ export class TaxReportComponent implements OnInit { this.router.navigate(['tax-report'], { queryParams: { startDate: info.startDate, - finishDate: info.finishDate - } + finishDate: info.finishDate, + }, }); } createForm() { this.form = this.fb.group({ startDate: '', - finishDate: '' + finishDate: '', }); } @@ -64,16 +63,18 @@ export class TaxReportComponent implements OnInit { return { startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), - finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY') + finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), }; } exportCsv() { const headers = { Name: 'name', - Amount: 'amount' + Amount: 'amount', }; - const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], {type: 'text/csv;charset=utf-8;'}); + const csvData = new Blob([this.toCsv.toCsv(headers, this.dataSource.data)], { + type: 'text/csv;charset=utf-8;', + }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(csvData); link.setAttribute('download', 'tax-report.csv'); diff --git a/bookie/src/app/tax-report/tax-report.module.spec.ts b/bookie/src/app/tax-report/tax-report.module.spec.ts index 4833aa8..75d402c 100644 --- a/bookie/src/app/tax-report/tax-report.module.spec.ts +++ b/bookie/src/app/tax-report/tax-report.module.spec.ts @@ -1,4 +1,4 @@ -import {TaxReportModule} from './tax-report.module'; +import { TaxReportModule } from './tax-report.module'; describe('TaxReportModule', () => { let taxReportModule: TaxReportModule; diff --git a/bookie/src/app/tax-report/tax-report.module.ts b/bookie/src/app/tax-report/tax-report.module.ts index ea493be..6ed8f5a 100644 --- a/bookie/src/app/tax-report/tax-report.module.ts +++ b/bookie/src/app/tax-report/tax-report.module.ts @@ -1,22 +1,29 @@ -import { NgModule } from '@angular/core'; +import { A11yModule } from '@angular/cdk/a11y'; +import { CdkTableModule } from '@angular/cdk/table'; import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule, +} from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTableModule } from '@angular/material/table'; -import { SharedModule} from '../shared/shared.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CdkTableModule } from '@angular/cdk/table'; + +import { SharedModule } from '../shared/shared.module'; + import { TaxReportRoutingModule } from './tax-report-routing.module'; import { TaxReportComponent } from './tax-report.component'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { A11yModule } from '@angular/cdk/a11y'; -import { FlexLayoutModule } from '@angular/flex-layout'; export const MY_FORMATS = { parse: { @@ -47,15 +54,12 @@ export const MY_FORMATS = { MatTableModule, ReactiveFormsModule, SharedModule, - TaxReportRoutingModule - ], - declarations: [ - TaxReportComponent + TaxReportRoutingModule, ], + declarations: [TaxReportComponent], providers: [ - {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]}, - {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS}, - ] + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS }, + ], }) -export class TaxReportModule { -} +export class TaxReportModule {} diff --git a/bookie/src/app/tax-report/tax-report.service.spec.ts b/bookie/src/app/tax-report/tax-report.service.spec.ts index 2fc87ae..1286531 100644 --- a/bookie/src/app/tax-report/tax-report.service.spec.ts +++ b/bookie/src/app/tax-report/tax-report.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TaxReportService} from './tax-report.service'; +import { TaxReportService } from './tax-report.service'; describe('TaxReportService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TaxReportService] + providers: [TaxReportService], }); }); diff --git a/bookie/src/app/tax-report/tax-report.service.ts b/bookie/src/app/tax-report/tax-report.service.ts index f4d9d8a..5e5ea7e 100644 --- a/bookie/src/app/tax-report/tax-report.service.ts +++ b/bookie/src/app/tax-report/tax-report.service.ts @@ -1,36 +1,33 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { TaxReport } from './tax-report'; +import { catchError } from 'rxjs/operators'; + import { ErrorLoggerService } from '../core/error-logger.service'; -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; +import { TaxReport } from './tax-report'; const url = '/api/tax-report'; const serviceName = 'TaxReportService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TaxReportService { - - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(startDate: string, finishDate): Observable { - const options = {params: new HttpParams()}; + const options = { params: new HttpParams() }; if (startDate !== null) { options.params = options.params.set('s', startDate); } if (finishDate !== null) { options.params = options.params.set('f', finishDate); } - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'get')) - ); + return >( + this.http + .get(url, options) + .pipe(catchError(this.log.handleError(serviceName, 'get'))) + ); } } diff --git a/bookie/src/app/tax-report/tax-report.ts b/bookie/src/app/tax-report/tax-report.ts index 5636716..cbbc92b 100644 --- a/bookie/src/app/tax-report/tax-report.ts +++ b/bookie/src/app/tax-report/tax-report.ts @@ -1,9 +1,4 @@ -export class TaxReportItem { - name: string; - taxRate: number; - saleAmount: number; - amount: number; -} +import { TaxReportItem } from './tax-report-item'; export class TaxReport { startDate: string; diff --git a/bookie/src/app/taxes/tax-detail/tax-detail.component.html b/bookie/src/app/taxes/tax-detail/tax-detail.component.html index 80db79a..25c408e 100644 --- a/bookie/src/app/taxes/tax-detail/tax-detail.component.html +++ b/bookie/src/app/taxes/tax-detail/tax-detail.component.html @@ -5,26 +5,58 @@
      -
      +
      Name - +
      -
      +
      Rate - + %
      - - + +
      diff --git a/bookie/src/app/taxes/tax-detail/tax-detail.component.spec.ts b/bookie/src/app/taxes/tax-detail/tax-detail.component.spec.ts index 6336e92..8ff524f 100644 --- a/bookie/src/app/taxes/tax-detail/tax-detail.component.spec.ts +++ b/bookie/src/app/taxes/tax-detail/tax-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {TaxDetailComponent} from './tax-detail.component'; +import { TaxDetailComponent } from './tax-detail.component'; describe('TaxDetailComponent', () => { let component: TaxDetailComponent; @@ -8,9 +8,8 @@ describe('TaxDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [TaxDetailComponent] - }) - .compileComponents(); + declarations: [TaxDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/taxes/tax-detail/tax-detail.component.ts b/bookie/src/app/taxes/tax-detail/tax-detail.component.ts index df000b0..8f651c5 100644 --- a/bookie/src/app/taxes/tax-detail/tax-detail.component.ts +++ b/bookie/src/app/taxes/tax-detail/tax-detail.component.ts @@ -1,17 +1,17 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatDialog} from '@angular/material/dialog'; -import { TaxService } from '../tax.service'; import { Tax } from '../../core/tax'; import { ToasterService } from '../../core/toaster.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { TaxService } from '../tax.service'; @Component({ selector: 'app-tax-detail', templateUrl: './tax-detail.component.html', - styleUrls: ['./tax-detail.component.css'] + styleUrls: ['./tax-detail.component.css'], }) export class TaxDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -24,7 +24,7 @@ export class TaxDetailComponent implements OnInit, AfterViewInit { private dialog: MatDialog, private fb: FormBuilder, private toaster: ToasterService, - private ser: TaxService + private ser: TaxService, ) { this.createForm(); } @@ -32,22 +32,21 @@ export class TaxDetailComponent implements OnInit, AfterViewInit { createForm() { this.form = this.fb.group({ name: '', - rate: '' + rate: '', }); } ngOnInit() { - this.route.data - .subscribe((data: { item: Tax }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: Tax }) => { + this.showItem(data.item); + }); } showItem(item: Tax) { this.item = item; this.form.setValue({ name: this.item.name || '', - rate: this.item.rate || '' + rate: this.item.rate || '', }); } @@ -58,35 +57,33 @@ export class TaxDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/taxes'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/taxes'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/taxes'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/taxes'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Tax?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete Tax?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/taxes/tax-list-resolver.service.spec.ts b/bookie/src/app/taxes/tax-list-resolver.service.spec.ts index 398c27a..89e2993 100644 --- a/bookie/src/app/taxes/tax-list-resolver.service.spec.ts +++ b/bookie/src/app/taxes/tax-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TaxListResolver} from './tax-list-resolver.service'; +import { TaxListResolver } from './tax-list-resolver.service'; describe('TaxListResolverService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TaxListResolver] + providers: [TaxListResolver], }); }); diff --git a/bookie/src/app/taxes/tax-list-resolver.service.ts b/bookie/src/app/taxes/tax-list-resolver.service.ts index b8c1102..4e7e413 100644 --- a/bookie/src/app/taxes/tax-list-resolver.service.ts +++ b/bookie/src/app/taxes/tax-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Tax} from '../core/tax'; -import {Observable} from 'rxjs/internal/Observable'; -import {TaxService} from './tax.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Tax } from '../core/tax'; + +import { TaxService } from './tax.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TaxListResolver implements Resolve { + constructor(private ser: TaxService) {} - constructor(private ser: TaxService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/taxes/tax-list/tax-list-datasource.ts b/bookie/src/app/taxes/tax-list/tax-list-datasource.ts index 0295158..54c8662 100644 --- a/bookie/src/app/taxes/tax-list/tax-list-datasource.ts +++ b/bookie/src/app/taxes/tax-list/tax-list-datasource.ts @@ -1,9 +1,9 @@ -import { DataSource} from '@angular/cdk/collections'; -import { Observable, of as observableOf} from 'rxjs'; -import { Tax} from '../../core/tax'; +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; + +import { Tax } from '../../core/tax'; export class TaxListDataSource extends DataSource { - constructor(public data: Tax[]) { super(); } @@ -12,6 +12,5 @@ export class TaxListDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/taxes/tax-list/tax-list.component.html b/bookie/src/app/taxes/tax-list/tax-list.component.html index 5702fba..2729716 100644 --- a/bookie/src/app/taxes/tax-list/tax-list.component.html +++ b/bookie/src/app/taxes/tax-list/tax-list.component.html @@ -8,27 +8,28 @@ - Name - {{row.name}} - + {{ row.name }} + Rate - {{row.rate | percent:'1.2-2'}} + {{ row.rate | percent: '1.2-2' }} Is Fixture? - {{row.isFixture}} + {{ row.isFixture }} - + diff --git a/bookie/src/app/taxes/tax-list/tax-list.component.spec.ts b/bookie/src/app/taxes/tax-list/tax-list.component.spec.ts index 6ddf10d..6970b03 100644 --- a/bookie/src/app/taxes/tax-list/tax-list.component.spec.ts +++ b/bookie/src/app/taxes/tax-list/tax-list.component.spec.ts @@ -1,6 +1,6 @@ -import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import {TaxListComponent} from './tax-list.component'; +import { TaxListComponent } from './tax-list.component'; describe('TaxListComponent', () => { let component: TaxListComponent; @@ -8,9 +8,8 @@ describe('TaxListComponent', () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [TaxListComponent] - }) - .compileComponents(); + declarations: [TaxListComponent], + }).compileComponents(); fixture = TestBed.createComponent(TaxListComponent); component = fixture.componentInstance; diff --git a/bookie/src/app/taxes/tax-list/tax-list.component.ts b/bookie/src/app/taxes/tax-list/tax-list.component.ts index befdd64..4b2c279 100644 --- a/bookie/src/app/taxes/tax-list/tax-list.component.ts +++ b/bookie/src/app/taxes/tax-list/tax-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { TaxListDataSource } from './tax-list-datasource'; -import { Tax } from '../../core/tax'; import { ActivatedRoute } from '@angular/router'; +import { Tax } from '../../core/tax'; + +import { TaxListDataSource } from './tax-list-datasource'; + @Component({ selector: 'app-tax-list', templateUrl: './tax-list.component.html', - styleUrls: ['./tax-list.component.css'] + styleUrls: ['./tax-list.component.css'], }) export class TaxListComponent implements OnInit { dataSource: TaxListDataSource; @@ -14,14 +16,12 @@ export class TaxListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'rate', 'isFixture']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: Tax[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: Tax[] }) => { + this.list = data.list; + }); this.dataSource = new TaxListDataSource(this.list); } } diff --git a/bookie/src/app/taxes/tax-resolver.service.spec.ts b/bookie/src/app/taxes/tax-resolver.service.spec.ts index e0023ec..417e52a 100644 --- a/bookie/src/app/taxes/tax-resolver.service.spec.ts +++ b/bookie/src/app/taxes/tax-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TaxResolver} from './tax-resolver.service'; +import { TaxResolver } from './tax-resolver.service'; describe('TaxResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TaxResolver] + providers: [TaxResolver], }); }); diff --git a/bookie/src/app/taxes/tax-resolver.service.ts b/bookie/src/app/taxes/tax-resolver.service.ts index 475fbd6..ad0db3f 100644 --- a/bookie/src/app/taxes/tax-resolver.service.ts +++ b/bookie/src/app/taxes/tax-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {TaxService} from './tax.service'; -import {Tax} from '../core/tax'; -import {Observable} from 'rxjs/internal/Observable'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { Tax } from '../core/tax'; + +import { TaxService } from './tax.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TaxResolver implements Resolve { + constructor(private ser: TaxService) {} - constructor(private ser: TaxService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/taxes/tax.service.spec.ts b/bookie/src/app/taxes/tax.service.spec.ts index 43b2b61..4cdf1ac 100644 --- a/bookie/src/app/taxes/tax.service.spec.ts +++ b/bookie/src/app/taxes/tax.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {TaxService} from './tax.service'; +import { TaxService } from './tax.service'; describe('TaxService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [TaxService] + providers: [TaxService], }); }); diff --git a/bookie/src/app/taxes/tax.service.ts b/bookie/src/app/taxes/tax.service.ts index dcd9548..da47d41 100644 --- a/bookie/src/app/taxes/tax.service.ts +++ b/bookie/src/app/taxes/tax.service.ts @@ -1,64 +1,66 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { Tax } from '../core/tax'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/taxes'; const serviceName = 'TaxService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class TaxService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? url : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? url : `${url}/${id}`; + return >( + this.http.get(getUrl).pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(tax: Tax): Observable { - return >this.http.post(url, tax, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(url, tax, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(tax: Tax): Observable { - return >this.http.put(`${url}/${tax.id}`, tax, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${tax.id}`, tax, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(tax: Tax): Observable { if (!tax.id) { return this.save(tax); - } else { - return this.update(tax); } + return this.update(tax); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/taxes/taxes-routing.module.spec.ts b/bookie/src/app/taxes/taxes-routing.module.spec.ts index 6d21f59..f2cff44 100644 --- a/bookie/src/app/taxes/taxes-routing.module.spec.ts +++ b/bookie/src/app/taxes/taxes-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {TaxesRoutingModule} from './taxes-routing.module'; +import { TaxesRoutingModule } from './taxes-routing.module'; describe('TaxesRoutingModule', () => { let taxesRoutingModule: TaxesRoutingModule; diff --git a/bookie/src/app/taxes/taxes-routing.module.ts b/bookie/src/app/taxes/taxes-routing.module.ts index e9f7d28..3838753 100644 --- a/bookie/src/app/taxes/taxes-routing.module.ts +++ b/bookie/src/app/taxes/taxes-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {TaxListResolver} from './tax-list-resolver.service'; -import {TaxResolver} from './tax-resolver.service'; -import {TaxListComponent} from './tax-list/tax-list.component'; -import {TaxDetailComponent} from './tax-detail/tax-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { TaxDetailComponent } from './tax-detail/tax-detail.component'; +import { TaxListResolver } from './tax-list-resolver.service'; +import { TaxListComponent } from './tax-list/tax-list.component'; +import { TaxResolver } from './tax-resolver.service'; const taxesRoutes: Routes = [ { @@ -13,49 +15,39 @@ const taxesRoutes: Routes = [ component: TaxListComponent, canActivate: [AuthGuard], data: { - permission: 'Taxes' + permission: 'Taxes', }, resolve: { - list: TaxListResolver - } + list: TaxListResolver, + }, }, { path: 'new', component: TaxDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Taxes' + permission: 'Taxes', }, resolve: { - item: TaxResolver - } + item: TaxResolver, + }, }, { path: ':id', component: TaxDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Taxes' + permission: 'Taxes', }, resolve: { - item: TaxResolver - } - } + item: TaxResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(taxesRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - TaxListResolver, - TaxResolver - ] + imports: [CommonModule, RouterModule.forChild(taxesRoutes)], + exports: [RouterModule], + providers: [TaxListResolver, TaxResolver], }) -export class TaxesRoutingModule { -} +export class TaxesRoutingModule {} diff --git a/bookie/src/app/taxes/taxes.module.spec.ts b/bookie/src/app/taxes/taxes.module.spec.ts index a92c057..ec79a32 100644 --- a/bookie/src/app/taxes/taxes.module.spec.ts +++ b/bookie/src/app/taxes/taxes.module.spec.ts @@ -1,4 +1,4 @@ -import {TaxesModule} from './taxes.module'; +import { TaxesModule } from './taxes.module'; describe('TaxesModule', () => { let taxesModule: TaxesModule; diff --git a/bookie/src/app/taxes/taxes.module.ts b/bookie/src/app/taxes/taxes.module.ts index 7098514..7c12ab3 100644 --- a/bookie/src/app/taxes/taxes.module.ts +++ b/bookie/src/app/taxes/taxes.module.ts @@ -1,18 +1,18 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {TaxListComponent} from './tax-list/tax-list.component'; -import {TaxDetailComponent} from './tax-detail/tax-detail.component'; -import {TaxesRoutingModule} from './taxes-routing.module'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; -import {CdkTableModule} from '@angular/cdk/table'; -import {ReactiveFormsModule} from '@angular/forms'; -import {FlexLayoutModule} from '@angular/flex-layout'; + +import { TaxDetailComponent } from './tax-detail/tax-detail.component'; +import { TaxListComponent } from './tax-list/tax-list.component'; +import { TaxesRoutingModule } from './taxes-routing.module'; @NgModule({ imports: [ @@ -26,12 +26,8 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatProgressSpinnerModule, MatTableModule, ReactiveFormsModule, - TaxesRoutingModule + TaxesRoutingModule, ], - declarations: [ - TaxListComponent, - TaxDetailComponent - ] + declarations: [TaxListComponent, TaxDetailComponent], }) -export class TaxesModule { -} +export class TaxesModule {} diff --git a/bookie/src/app/users/user-detail/user-detail.component.html b/bookie/src/app/users/user-detail/user-detail.component.html index 2baf013..ff27869 100644 --- a/bookie/src/app/users/user-detail/user-detail.component.html +++ b/bookie/src/app/users/user-detail/user-detail.component.html @@ -5,31 +5,60 @@
      -
      +
      Name - +
      -
      +
      Password - - {{hide ? 'visibility' : 'visibility_off'}} - + + {{ + hide ? 'visibility' : 'visibility_off' + }} +
      -
      +
      Is Locked Out?
      -
      - {{r.name}} +
      + {{ r.name }}
      diff --git a/bookie/src/app/users/user-detail/user-detail.component.spec.ts b/bookie/src/app/users/user-detail/user-detail.component.spec.ts index 4fb876e..edfa2f5 100644 --- a/bookie/src/app/users/user-detail/user-detail.component.spec.ts +++ b/bookie/src/app/users/user-detail/user-detail.component.spec.ts @@ -1,6 +1,6 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import {UserDetailComponent} from './user-detail.component'; +import { UserDetailComponent } from './user-detail.component'; describe('UserDetailComponent', () => { let component: UserDetailComponent; @@ -8,9 +8,8 @@ describe('UserDetailComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [UserDetailComponent] - }) - .compileComponents(); + declarations: [UserDetailComponent], + }).compileComponents(); })); beforeEach(() => { diff --git a/bookie/src/app/users/user-detail/user-detail.component.ts b/bookie/src/app/users/user-detail/user-detail.component.ts index ddb5365..875812b 100644 --- a/bookie/src/app/users/user-detail/user-detail.component.ts +++ b/bookie/src/app/users/user-detail/user-detail.component.ts @@ -1,17 +1,17 @@ -import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; - -import {UserService} from '../user.service'; -import {User} from '../../core/user'; -import {ToasterService} from '../../core/toaster.service'; -import {ConfirmDialogComponent} from '../../shared/confirm-dialog/confirm-dialog.component'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; -import {FormArray, FormBuilder, FormGroup} from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { ToasterService } from '../../core/toaster.service'; +import { User } from '../../core/user'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; +import { UserService } from '../user.service'; @Component({ selector: 'app-user-detail', templateUrl: './user-detail.component.html', - styleUrls: ['./user-detail.component.css'] + styleUrls: ['./user-detail.component.css'], }) export class UserDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; @@ -25,7 +25,7 @@ export class UserDetailComponent implements OnInit, AfterViewInit { private fb: FormBuilder, private toaster: ToasterService, private dialog: MatDialog, - private ser: UserService + private ser: UserService, ) { this.hide = true; this.createForm(); @@ -36,15 +36,14 @@ export class UserDetailComponent implements OnInit, AfterViewInit { name: '', password: '', lockedOut: '', - roles: this.fb.array([]) + roles: this.fb.array([]), }); } ngOnInit() { - this.route.data - .subscribe((data: { item: User }) => { - this.showItem(data.item); - }); + this.route.data.subscribe((data: { item: User }) => { + this.showItem(data.item); + }); } showItem(item: User) { @@ -52,16 +51,18 @@ export class UserDetailComponent implements OnInit, AfterViewInit { this.form.get('name').setValue(item.name); this.form.get('password').setValue(''); this.form.get('lockedOut').setValue(item.lockedOut); - this.form.setControl('roles', this.fb.array( - item.roles.map( - x => this.fb.group({ - role: x.enabled - }) - ) - )); + this.form.setControl( + 'roles', + this.fb.array( + item.roles.map((x) => + this.fb.group({ + role: x.enabled, + }), + ), + ), + ); } - ngAfterViewInit() { setTimeout(() => { this.nameElement.nativeElement.focus(); @@ -69,35 +70,33 @@ export class UserDetailComponent implements OnInit, AfterViewInit { } save() { - this.ser.saveOrUpdate(this.getItem()) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/users'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.saveOrUpdate(this.getItem()).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/users'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } delete() { - this.ser.delete(this.item.id) - .subscribe( - (result) => { - this.toaster.show('Success', ''); - this.router.navigateByUrl('/users'); - }, - (error) => { - this.toaster.show('Danger', error.error); - } - ); + this.ser.delete(this.item.id).subscribe( + () => { + this.toaster.show('Success', ''); + this.router.navigateByUrl('/users'); + }, + (error) => { + this.toaster.show('Danger', error.error); + }, + ); } confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete User?', content: 'Are you sure? This cannot be undone.'} + data: { title: 'Delete User?', content: 'Are you sure? This cannot be undone.' }, }); dialogRef.afterClosed().subscribe((result: boolean) => { diff --git a/bookie/src/app/users/user-list-resolver.service.spec.ts b/bookie/src/app/users/user-list-resolver.service.spec.ts index ddbdc9d..c380204 100644 --- a/bookie/src/app/users/user-list-resolver.service.spec.ts +++ b/bookie/src/app/users/user-list-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {UserListResolver} from './user-list-resolver.service'; +import { UserListResolver } from './user-list-resolver.service'; describe('UserListResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [UserListResolver] + providers: [UserListResolver], }); }); diff --git a/bookie/src/app/users/user-list-resolver.service.ts b/bookie/src/app/users/user-list-resolver.service.ts index 64b0f55..5980e3e 100644 --- a/bookie/src/app/users/user-list-resolver.service.ts +++ b/bookie/src/app/users/user-list-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {User} from '../core/user'; -import {Observable} from 'rxjs/internal/Observable'; -import {UserService} from './user.service'; +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { User } from '../core/user'; + +import { UserService } from './user.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class UserListResolver implements Resolve { + constructor(private ser: UserService) {} - constructor(private ser: UserService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(): Observable { return this.ser.list(); } } diff --git a/bookie/src/app/users/user-list/user-list-datasource.ts b/bookie/src/app/users/user-list/user-list-datasource.ts index ff5a495..3246724 100644 --- a/bookie/src/app/users/user-list/user-list-datasource.ts +++ b/bookie/src/app/users/user-list/user-list-datasource.ts @@ -1,9 +1,9 @@ import { DataSource } from '@angular/cdk/collections'; import { Observable, of as observableOf } from 'rxjs'; + import { User } from '../../core/user'; export class UserListDataSource extends DataSource { - constructor(public data: User[]) { super(); } @@ -12,6 +12,5 @@ export class UserListDataSource extends DataSource { return observableOf(this.data); } - disconnect() { - } + disconnect() {} } diff --git a/bookie/src/app/users/user-list/user-list.component.html b/bookie/src/app/users/user-list/user-list.component.html index d2a9d9a..4dc791d 100644 --- a/bookie/src/app/users/user-list/user-list.component.html +++ b/bookie/src/app/users/user-list/user-list.component.html @@ -8,17 +8,18 @@ - Name - {{row.name}} + {{ row.name }} Is Locked Out? - {{row.lockedOut}} + {{ row.lockedOut }} @@ -26,13 +27,13 @@ Roles
        -
      • {{role}}
      • +
      • {{ role }}
      - +
      diff --git a/bookie/src/app/users/user-list/user-list.component.ts b/bookie/src/app/users/user-list/user-list.component.ts index 90855b9..1b52745 100644 --- a/bookie/src/app/users/user-list/user-list.component.ts +++ b/bookie/src/app/users/user-list/user-list.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; -import { UserListDataSource } from './user-list-datasource'; -import { User } from '../../core/user'; import { ActivatedRoute } from '@angular/router'; +import { User } from '../../core/user'; + +import { UserListDataSource } from './user-list-datasource'; + @Component({ selector: 'app-user-list', templateUrl: './user-list.component.html', - styleUrls: ['./user-list.component.css'] + styleUrls: ['./user-list.component.css'], }) export class UserListComponent implements OnInit { dataSource: UserListDataSource; @@ -14,14 +16,12 @@ export class UserListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'lockedOut', 'roles']; - constructor(private route: ActivatedRoute) { - } + constructor(private route: ActivatedRoute) {} ngOnInit() { - this.route.data - .subscribe((data: { list: User[] }) => { - this.list = data.list; - }); + this.route.data.subscribe((data: { list: User[] }) => { + this.list = data.list; + }); this.dataSource = new UserListDataSource(this.list); } } diff --git a/bookie/src/app/users/user-resolver.service.spec.ts b/bookie/src/app/users/user-resolver.service.spec.ts index d37f38e..7f1b0cb 100644 --- a/bookie/src/app/users/user-resolver.service.spec.ts +++ b/bookie/src/app/users/user-resolver.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {UserResolver} from './user-resolver.service'; +import { UserResolver } from './user-resolver.service'; describe('UserResolver', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [UserResolver] + providers: [UserResolver], }); }); diff --git a/bookie/src/app/users/user-resolver.service.ts b/bookie/src/app/users/user-resolver.service.ts index 98fa1c8..b16d9e8 100644 --- a/bookie/src/app/users/user-resolver.service.ts +++ b/bookie/src/app/users/user-resolver.service.ts @@ -1,18 +1,18 @@ -import {Injectable} from '@angular/core'; -import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {User} from '../core/user'; -import {Observable} from 'rxjs/internal/Observable'; -import {UserService} from './user.service'; +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; +import { Observable } from 'rxjs/internal/Observable'; + +import { User } from '../core/user'; + +import { UserService } from './user.service'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class UserResolver implements Resolve { + constructor(private ser: UserService) {} - constructor(private ser: UserService, private router: Router) { - } - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/bookie/src/app/users/user.service.spec.ts b/bookie/src/app/users/user.service.spec.ts index 1727f7f..a93c015 100644 --- a/bookie/src/app/users/user.service.spec.ts +++ b/bookie/src/app/users/user.service.spec.ts @@ -1,11 +1,11 @@ -import {inject, TestBed} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; -import {UserService} from './user.service'; +import { UserService } from './user.service'; describe('UserService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [UserService] + providers: [UserService], }); }); diff --git a/bookie/src/app/users/user.service.ts b/bookie/src/app/users/user.service.ts index 9c7e8cc..0988756 100644 --- a/bookie/src/app/users/user.service.ts +++ b/bookie/src/app/users/user.service.ts @@ -1,71 +1,76 @@ -import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { ErrorLoggerService } from '../core/error-logger.service'; -import { catchError } from 'rxjs/operators'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; +import { catchError } from 'rxjs/operators'; + +import { ErrorLoggerService } from '../core/error-logger.service'; import { User } from '../core/user'; const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/users'; const serviceName = 'UserService'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class UserService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } + constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); + const getUrl: string = id === null ? `${url}` : `${url}/${id}`; + return >( + this.http + .get(getUrl) + .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) + ); } list(): Observable { - return >this.http.get(`${url}/list`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/list`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } listOfNames(): Observable { - return >this.http.get(`${url}/active`) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); + return >( + this.http + .get(`${url}/active`) + .pipe(catchError(this.log.handleError(serviceName, 'list'))) + ); } save(user: User): Observable { - return >this.http.post(`${url}`, user, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); + return >( + this.http + .post(`${url}`, user, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'save'))) + ); } update(user: User): Observable { - return >this.http.put(`${url}/${user.id}`, user, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); + return >( + this.http + .put(`${url}/${user.id}`, user, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'update'))) + ); } saveOrUpdate(user: User): Observable { if (!user.id) { return this.save(user); - } else { - return this.update(user); } + return this.update(user); } delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); + return >( + this.http + .delete(`${url}/${id}`, httpOptions) + .pipe(catchError(this.log.handleError(serviceName, 'delete'))) + ); } } diff --git a/bookie/src/app/users/users-routing.module.spec.ts b/bookie/src/app/users/users-routing.module.spec.ts index 16641c0..87274e1 100644 --- a/bookie/src/app/users/users-routing.module.spec.ts +++ b/bookie/src/app/users/users-routing.module.spec.ts @@ -1,4 +1,4 @@ -import {UsersRoutingModule} from './users-routing.module'; +import { UsersRoutingModule } from './users-routing.module'; describe('UsersRoutingModule', () => { let userRoutingModule: UsersRoutingModule; diff --git a/bookie/src/app/users/users-routing.module.ts b/bookie/src/app/users/users-routing.module.ts index 4ba760b..d2b8f55 100644 --- a/bookie/src/app/users/users-routing.module.ts +++ b/bookie/src/app/users/users-routing.module.ts @@ -1,11 +1,13 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule, Routes} from '@angular/router'; -import {UserListResolver} from './user-list-resolver.service'; -import {UserResolver} from './user-resolver.service'; -import {UserListComponent} from './user-list/user-list.component'; -import {UserDetailComponent} from './user-detail/user-detail.component'; -import {AuthGuard} from '../auth/auth-guard.service'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AuthGuard } from '../auth/auth-guard.service'; + +import { UserDetailComponent } from './user-detail/user-detail.component'; +import { UserListResolver } from './user-list-resolver.service'; +import { UserListComponent } from './user-list/user-list.component'; +import { UserResolver } from './user-resolver.service'; const usersRoutes: Routes = [ { @@ -13,46 +15,36 @@ const usersRoutes: Routes = [ component: UserListComponent, canActivate: [AuthGuard], data: { - permission: 'Users' + permission: 'Users', }, resolve: { - list: UserListResolver - } + list: UserListResolver, + }, }, { path: 'new', component: UserDetailComponent, canActivate: [AuthGuard], data: { - permission: 'Users' + permission: 'Users', }, resolve: { item: UserResolver, - } + }, }, { path: ':id', component: UserDetailComponent, canActivate: [AuthGuard], resolve: { - item: UserResolver - } - } + item: UserResolver, + }, + }, ]; @NgModule({ - imports: [ - CommonModule, - RouterModule.forChild(usersRoutes) - - ], - exports: [ - RouterModule - ], - providers: [ - UserListResolver, - UserResolver - ] + imports: [CommonModule, RouterModule.forChild(usersRoutes)], + exports: [RouterModule], + providers: [UserListResolver, UserResolver], }) -export class UsersRoutingModule { -} +export class UsersRoutingModule {} diff --git a/bookie/src/app/users/users.module.spec.ts b/bookie/src/app/users/users.module.spec.ts index b0809d7..f6a5b71 100644 --- a/bookie/src/app/users/users.module.spec.ts +++ b/bookie/src/app/users/users.module.spec.ts @@ -1,4 +1,4 @@ -import {UsersModule} from './users.module'; +import { UsersModule } from './users.module'; describe('UsersModule', () => { let userModule: UsersModule; diff --git a/bookie/src/app/users/users.module.ts b/bookie/src/app/users/users.module.ts index f9fddfc..4f2bdf4 100644 --- a/bookie/src/app/users/users.module.ts +++ b/bookie/src/app/users/users.module.ts @@ -1,9 +1,8 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; - -import {UserListComponent} from './user-list/user-list.component'; -import {UserDetailComponent} from './user-detail/user-detail.component'; -import {UsersRoutingModule} from './users-routing.module'; +import { CdkTableModule } from '@angular/cdk/table'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -12,10 +11,12 @@ import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; -import {CdkTableModule} from '@angular/cdk/table'; -import {ReactiveFormsModule} from '@angular/forms'; -import {SharedModule} from '../shared/shared.module'; -import {FlexLayoutModule} from '@angular/flex-layout'; + +import { SharedModule } from '../shared/shared.module'; + +import { UserDetailComponent } from './user-detail/user-detail.component'; +import { UserListComponent } from './user-list/user-list.component'; +import { UsersRoutingModule } from './users-routing.module'; @NgModule({ imports: [ @@ -32,12 +33,8 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatTableModule, ReactiveFormsModule, SharedModule, - UsersRoutingModule + UsersRoutingModule, ], - declarations: [ - UserListComponent, - UserDetailComponent - ] + declarations: [UserListComponent, UserDetailComponent], }) -export class UsersModule { -} +export class UsersModule {} diff --git a/bookie/src/environments/environment.prod.ts b/bookie/src/environments/environment.prod.ts index 8860a3d..0dc912d 100644 --- a/bookie/src/environments/environment.prod.ts +++ b/bookie/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ export const environment = { production: true, - ACCESS_TOKEN_REFRESH_MINUTES: 10 // refresh token 10 minutes before expiry + ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry }; diff --git a/bookie/src/environments/environment.ts b/bookie/src/environments/environment.ts index 0798195..2498792 100644 --- a/bookie/src/environments/environment.ts +++ b/bookie/src/environments/environment.ts @@ -4,7 +4,7 @@ export const environment = { production: false, - ACCESS_TOKEN_REFRESH_MINUTES: 10 // refresh token 10 minutes before expiry + ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry }; /* diff --git a/bookie/src/index.html b/bookie/src/index.html index 56ff27e..03c247e 100644 --- a/bookie/src/index.html +++ b/bookie/src/index.html @@ -1,16 +1,16 @@ - + - - - Bookie - + + + Bookie + - - - - - - - - + + + + + + + + diff --git a/bookie/src/main.ts b/bookie/src/main.ts index e76caee..d9a2e7e 100644 --- a/bookie/src/main.ts +++ b/bookie/src/main.ts @@ -1,4 +1,3 @@ - import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; @@ -9,5 +8,6 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err) => console.error(err)); diff --git a/bookie/src/polyfills.ts b/bookie/src/polyfills.ts index aa665d6..2f258e5 100644 --- a/bookie/src/polyfills.ts +++ b/bookie/src/polyfills.ts @@ -55,8 +55,7 @@ /*************************************************************************************************** * Zone JS is required by default for Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - +import 'zone.js/dist/zone'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS diff --git a/bookie/src/styles.css b/bookie/src/styles.css index 7e7239a..3b9cecf 100644 --- a/bookie/src/styles.css +++ b/bookie/src/styles.css @@ -1,4 +1,10 @@ /* You can add global styles to this file, and also import other style files */ -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } +html, +body { + height: 100%; +} +body { + margin: 0; + font-family: Roboto, 'Helvetica Neue', sans-serif; +} diff --git a/bookie/src/test.ts b/bookie/src/test.ts index 1631789..e94b4bd 100644 --- a/bookie/src/test.ts +++ b/bookie/src/test.ts @@ -4,16 +4,13 @@ import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, - platformBrowserDynamicTesting + platformBrowserDynamicTesting, } from '@angular/platform-browser-dynamic/testing'; declare const require: any; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules.