diff --git a/brewman/routers/attendance.py b/brewman/routers/attendance.py index 45276127..7a3efbfc 100644 --- a/brewman/routers/attendance.py +++ b/brewman/routers/attendance.py @@ -26,14 +26,14 @@ def get_db() -> Session: db.close() -@router.get("") +@router.get("", response_model=schemas.Attendance) def attendance_blank( request: Request, user: UserToken = Security(get_user, scopes=["attendance"]) ): return {"date": get_date(request.session), "body": []} -@router.get("/{date_}") +@router.get("/{date_}", response_model=schemas.Attendance) def attendance_date( date_: str, request: Request, @@ -90,10 +90,10 @@ def attendance_date_report(date_: date, db: Session): return body -@router.post("/{date_}") +@router.post("/{date_}", response_model=schemas.Attendance) def save( date_: str, - data: schemas.AttendanceIn, + data: schemas.Attendance, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["attendance"]), ): diff --git a/brewman/routers/employee.py b/brewman/routers/employee.py index 69e73851..a255050e 100644 --- a/brewman/routers/employee.py +++ b/brewman/routers/employee.py @@ -151,7 +151,7 @@ async def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get ] -@router.get("/query",) # "Authenticated" +@router.get("/query") async def show_term( q: str, c: int = None, @@ -159,7 +159,7 @@ async def show_term( current_user: UserToken = Depends(get_user), ): list_ = [] - for index, item in enumerate(AccountBase.list(10, q, dbsession=db)): + for index, item in enumerate(AccountBase.query(q=q, type_=10, db=db)): list_.append( { "id": item.id, diff --git a/brewman/routers/employee_attendance.py b/brewman/routers/employee_attendance.py index 238cb763..b179d107 100644 --- a/brewman/routers/employee_attendance.py +++ b/brewman/routers/employee_attendance.py @@ -28,7 +28,7 @@ def get_db() -> Session: db.close() -@router.get("") +@router.get("", response_model=schemas.EmployeeAttendance) def show_blank( request: Request, user: UserToken = Security(get_user, scopes=["attendance"]), @@ -41,9 +41,9 @@ def show_blank( } -@router.get("/{id_}") +@router.get("/{id_}", response_model=schemas.EmployeeAttendance) def employee_attendance_report( - id_: int, + id_: uuid.UUID, request: Request, s: str = None, f: str = None, @@ -90,23 +90,23 @@ def employee_attendance(employee: Employee, start_date: date, finish_date: date, .first() ) att = 0 if att is None else att.attendance_type - prints, hours, worked = get_prints(employee.id, item, db) + prints, hours_worked, full_day = get_prints(employee.id, item, db) list_.append( - { - "date": item.strftime("%d-%b-%Y"), - "attendanceType": {"id": att}, - "prints": prints, - "hours": hours, - "worked": worked, - } + schemas.EmployeeAttendanceItem( + date=item.strftime("%d-%b-%Y"), + attendanceType={"id": att}, + prints=prints, + hoursWorked=hours_worked, + fullDay=full_day + ) ) return list_ -@router.post("/{id_}") +@router.post("/{id_}", response_model=schemas.EmployeeAttendance) def save_employee_attendance( id_: uuid.UUID, - data: schemas.EmployeeAttendanceIn, + data: schemas.EmployeeAttendance, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["attendance"]), ): @@ -115,14 +115,14 @@ def save_employee_attendance( employee: Employee = db.query(Employee).filter(Employee.id == id_).first() for item in data.body: if start_date is None: - start_date = item.date - finish_date = item.date + start_date = item.date_ + finish_date = item.date_ attendance_type = item.attendance_type.id_ if attendance_type != 0: attendance = Attendance( employee_id=employee.id, - date=item.date, + date=item.date_, attendance_type=attendance_type, user_id=user.id_, ) diff --git a/brewman/schemas/reports.py b/brewman/schemas/reports.py index d94ca01f..a34322e8 100644 --- a/brewman/schemas/reports.py +++ b/brewman/schemas/reports.py @@ -21,6 +21,8 @@ class LedgerItem(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() class Config: @@ -42,10 +44,14 @@ class Ledger(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -73,6 +79,8 @@ class BalanceSheet(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -110,10 +118,14 @@ class CashFlow(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -139,6 +151,8 @@ class ClosingStock(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -156,6 +170,8 @@ class DaybookItem(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() class Config: @@ -176,10 +192,14 @@ class Daybook(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -207,10 +227,14 @@ class NetTransactions(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -231,6 +255,8 @@ class ProductLedgerItem(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() class Config: @@ -252,10 +278,14 @@ class ProductLedger(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -285,10 +315,14 @@ class ProfitLoss(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @@ -305,6 +339,8 @@ class PurchaseEntriesItem(BaseModel): @validator("date_", pre=True) def parse_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() class Config: @@ -324,10 +360,14 @@ class PurchaseEntries(BaseModel): @validator("start_date", pre=True) def parse_start_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("finish_date", pre=True) def parse_finish_date(cls, value): + if isinstance(value, date): + return value return datetime.strptime(value, "%d-%b-%Y").date() diff --git a/brewman/schemas/voucher.py b/brewman/schemas/voucher.py index 77e63ebf..18d6bc4c 100644 --- a/brewman/schemas/voucher.py +++ b/brewman/schemas/voucher.py @@ -5,6 +5,7 @@ from typing import List, Optional from pydantic import BaseModel, validator from brewman.schemas import to_camel +from brewman.schemas.master import AccountLink class Voucher(BaseModel): @@ -95,18 +96,65 @@ class AttendanceItem(BaseModel): class Config: alias_generator = to_camel -class AttendanceIn(BaseModel): + +class Attendance(BaseModel): + date_: Optional[date] body: List[AttendanceItem] + @validator("date_", pre=True) + def parse_date(cls, value): + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + class Config: + anystr_strip_whitespace = True + alias_generator = to_camel + json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")} + class EmployeeAttendanceItem(BaseModel): - date: date + date_: date attendance_type: AttendanceType + prints: str + hours_worked: str + full_day: Optional[bool] + + @validator("date_", pre=True) + def parse_date(cls, value): + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + class Config: + anystr_strip_whitespace = True + alias_generator = to_camel + json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")} -class EmployeeAttendanceIn(BaseModel): +class EmployeeAttendance(BaseModel): + start_date: Optional[date] + finish_date: Optional[date] + employee: Optional[AccountLink] body: List[EmployeeAttendanceItem] + @validator("start_date", pre=True) + def parse_start_date(cls, value): + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + @validator("finish_date", pre=True) + def parse_finish_date(cls, value): + if isinstance(value, date): + return value + return datetime.strptime(value, "%d-%b-%Y").date() + + class Config: + anystr_strip_whitespace = True + alias_generator = to_camel + json_encoders = {date: lambda v: v.strftime("%d-%b-%Y")} + class Fingerprint(BaseModel): id: uuid.UUID diff --git a/overlord/src/app/employee-attendance/employee-attendance.component.html b/overlord/src/app/employee-attendance/employee-attendance.component.html index 782ff5c4..efe240ba 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.component.html +++ b/overlord/src/app/employee-attendance/employee-attendance.component.html @@ -58,9 +58,9 @@ {{row.prints}} new_releases - - {{row.hours}} + + {{row.hoursWorked}} diff --git a/overlord/src/app/employee-attendance/employee-attendance.ts b/overlord/src/app/employee-attendance/employee-attendance.ts index ea1e5ba1..da400256 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.ts @@ -16,8 +16,8 @@ export class EmployeeAttendanceItem { date: string; attendanceType: AttendanceType; prints: string; - hours: string; - worked: string; + hoursWorked: string; + fullDay?: boolean; public constructor(init?: Partial) { Object.assign(this, init);