Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecd3e45632 | ||
|
|
48ec2df10d | ||
|
|
bc61eeacd3 | ||
|
|
a051071a1b |
@@ -1 +1 @@
|
||||
__version__ = "11.1.7"
|
||||
__version__ = "11.1.9"
|
||||
|
||||
@@ -8,7 +8,7 @@ from io import StringIO
|
||||
import brewman.schemas.fingerprint as schemas
|
||||
|
||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
|
||||
from sqlalchemy import bindparam, select
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.dialects.postgresql import insert as pg_insert
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from sqlalchemy.orm import Session
|
||||
@@ -36,22 +36,13 @@ def upload_prints(
|
||||
for id_, code in db.execute(select(Employee.id, Employee.code)).all():
|
||||
employees[code] = id_
|
||||
file_data = read_file(fingerprints)
|
||||
prints = [d for d in fp(file_data, employees) if start <= d.date_.date() <= finish]
|
||||
prints = [d.model_dump() for d in fp(file_data, employees) if start <= d.date_.date() <= finish]
|
||||
for p in prints:
|
||||
p["id"] = p.pop("id_")
|
||||
paged_data = [prints[i : i + 100] for i in range(0, len(prints), 100)]
|
||||
for i, page in enumerate(paged_data):
|
||||
print(f"Processing page {i} of {len(paged_data)}")
|
||||
db.execute(
|
||||
pg_insert(Fingerprint)
|
||||
.values(
|
||||
{
|
||||
"id": bindparam("id"),
|
||||
"employee_id": bindparam("employee_id"),
|
||||
"date": bindparam("date"),
|
||||
}
|
||||
)
|
||||
.on_conflict_do_nothing(),
|
||||
[p.dict() for p in page],
|
||||
)
|
||||
db.execute(pg_insert(Fingerprint).on_conflict_do_nothing(), page)
|
||||
db.commit()
|
||||
except SQLAlchemyError as e:
|
||||
raise HTTPException(
|
||||
|
||||
@@ -20,11 +20,11 @@ class Fingerprint(BaseModel):
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: date | str) -> date:
|
||||
if isinstance(value, date):
|
||||
def parse_date(cls, value: datetime | str) -> datetime:
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: date, info: FieldSerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "brewman"
|
||||
version = "11.1.7"
|
||||
version = "11.1.9"
|
||||
description = "Accounting plus inventory management for a restaurant."
|
||||
authors = ["tanshu <git@tanshu.com>"]
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "overlord",
|
||||
"version": "11.1.7",
|
||||
"version": "11.1.9",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
|
||||
@@ -2,5 +2,5 @@ export const environment = {
|
||||
production: true,
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry
|
||||
version: '11.1.7',
|
||||
version: '11.1.9',
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@ export const environment = {
|
||||
production: false,
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
ACCESS_TOKEN_REFRESH_MINUTES: 10, // refresh token 10 minutes before expiry
|
||||
version: '11.1.7',
|
||||
version: '11.1.9',
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user