Employee Attendance Done!!

TODO: Only need to reload Attendance and Employee Attendance on Save
This commit is contained in:
tanshu 2020-05-14 22:13:34 +05:30
parent bd05e6bb17
commit cda157f05c
7 changed files with 118 additions and 30 deletions

View File

@ -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"]),
):

View File

@ -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,

View File

@ -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_,
)

View File

@ -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()

View File

@ -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

View File

@ -58,9 +58,9 @@
{{row.prints}}
<mat-icon *ngIf="!form.controls.attendances.controls[i].pristine">new_releases</mat-icon>
<mat-chip-list class="no-bg">
<mat-chip *ngIf="row.hours.length" class="no-bg" [selected]="row.worked !== 'Error'"
[color]="row.worked === true ? 'primary' : 'warn'">
{{row.hours}}
<mat-chip *ngIf="row.hoursWorked.length" class="no-bg" [selected]="true"
[color]="row.fullDay === true ? 'primary' : 'warn'">
{{row.hoursWorked}}
</mat-chip>
</mat-chip-list>
</mat-cell>

View File

@ -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<EmployeeAttendanceItem>) {
Object.assign(this, init);