We have moved from dd-MMM-yyyy to ISO Date.
This commit is contained in:
1 parent
6cf42d3641
commit
0a9675f270
45 files changed
+141
-613
No files matched your search
@@ -4,31 +4,31 @@ from typing import Any
|
||||
|
||||
def get_date(session: dict[str, Any]) -> str:
|
||||
if "date" not in session:
|
||||
session["date"] = date.today().strftime("%d-%b-%Y")
|
||||
session["date"] = date.today().isoformat()
|
||||
return session["date"] # type: ignore[no-any-return]
|
||||
|
||||
|
||||
def set_date(date_: str | date, session: dict[str, Any]) -> None:
|
||||
session["date"] = date_ if isinstance(date_, str) else date_.strftime("%d-%b-%Y")
|
||||
session["date"] = date_ if isinstance(date_, str) else date_.isoformat()
|
||||
|
||||
|
||||
def get_start_date(session: dict[str, Any]) -> str:
|
||||
if "start" not in session:
|
||||
session["start"] = get_first_day(date.today()).strftime("%d-%b-%Y")
|
||||
session["start"] = get_first_day(date.today()).isoformat()
|
||||
return session["start"] # type: ignore[no-any-return]
|
||||
|
||||
|
||||
def get_finish_date(session: dict[str, Any]) -> str:
|
||||
if "finish" not in session:
|
||||
session["finish"] = get_last_day(date.today()).strftime("%d-%b-%Y")
|
||||
session["finish"] = get_last_day(date.today()).isoformat()
|
||||
return session["finish"] # type: ignore[no-any-return]
|
||||
|
||||
|
||||
def set_period(start: str | date | None, finish: str | date | None, session: dict[str, Any]) -> None:
|
||||
if start is not None:
|
||||
session["start"] = start if isinstance(start, str) else start.strftime("%d-%b-%Y")
|
||||
session["start"] = start if isinstance(start, str) else start.isoformat()
|
||||
if finish is not None:
|
||||
session["finish"] = finish if isinstance(finish, str) else finish.strftime("%d-%b-%Y")
|
||||
session["finish"] = finish if isinstance(finish, str) else finish.isoformat()
|
||||
|
||||
|
||||
def get_first_day(dt: date, d_years: int = 0, d_months: int = 0) -> date:
|
||||
|
||||
@@ -12,11 +12,11 @@ from ..models.stock_keeping_unit import StockKeepingUnit
|
||||
|
||||
|
||||
def query_date(d: str | None = None) -> date:
|
||||
return date.today() if d is None else datetime.strptime(d, "%d-%b-%Y").date()
|
||||
return date.today() if d is None else date.fromisoformat(d)
|
||||
|
||||
|
||||
def optional_query_date(d: str | None = None) -> date | None:
|
||||
return None if d is None else datetime.strptime(d, "%d-%b-%Y").date()
|
||||
return None if d is None else date.fromisoformat(d)
|
||||
|
||||
|
||||
def effective_date(d: str | None = None) -> date:
|
||||
@@ -26,7 +26,7 @@ def effective_date(d: str | None = None) -> date:
|
||||
+ timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES - settings.NEW_DAY_OFFSET_MINUTES)
|
||||
).date()
|
||||
if d is None
|
||||
else datetime.strptime(d, "%d-%b-%Y").date()
|
||||
else date.fromisoformat(d)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -44,9 +44,8 @@ def save(
|
||||
else:
|
||||
customer.name = data.name or customer.name
|
||||
customer.address = data.address or customer.address
|
||||
td = timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||
booking_date = None if data.booking_date is None else data.booking_date - td
|
||||
arrival_date = None if data.arrival_date is None else data.arrival_date - td
|
||||
booking_date = data.booking_date.astimezone(UTC).replace(tzinfo=None) if data.booking_date else None
|
||||
arrival_date = data.arrival_date.astimezone(UTC).replace(tzinfo=None) if data.arrival_date else None
|
||||
item = GuestBook(
|
||||
pax=data.pax,
|
||||
customer=customer,
|
||||
@@ -72,11 +71,8 @@ def update_route(
|
||||
item.customer.phone = data.phone
|
||||
item.customer.address = data.address
|
||||
item.pax = data.pax
|
||||
td = timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||
booking_date = None if data.booking_date is None else data.booking_date - td
|
||||
arrival_date = None if data.arrival_date is None else data.arrival_date - td
|
||||
item.booking_date = booking_date
|
||||
item.arrival_date = arrival_date
|
||||
item.booking_date = data.booking_date.astimezone(UTC).replace(tzinfo=None) if data.booking_date else None
|
||||
item.arrival_date = data.arrival_date.astimezone(UTC).replace(tzinfo=None) if data.arrival_date else None
|
||||
item.last_edit_date = datetime.now()
|
||||
item.notes = data.notes
|
||||
item.type_ = data.type_
|
||||
@@ -105,11 +101,12 @@ def show_blank(
|
||||
def show_list(
|
||||
user: Annotated[UserToken, Security(get_user)],
|
||||
db: SessionDep,
|
||||
q: str | None = None,
|
||||
q: date | None = None,
|
||||
) -> schemas.GuestBookList:
|
||||
d = date.today() if q is None or q == "" else datetime.strptime(q, "%d-%b-%Y")
|
||||
s = d + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES)
|
||||
f = d + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES, days=1)
|
||||
d = date.today() if q is None else q
|
||||
dt = datetime.combine(d, datetime.min.time())
|
||||
s = dt + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES)
|
||||
f = dt + timedelta(minutes=settings.NEW_DAY_OFFSET_MINUTES - settings.TIMEZONE_OFFSET_MINUTES, days=1)
|
||||
list_ = (
|
||||
select(GuestBook)
|
||||
.where(
|
||||
@@ -170,25 +167,22 @@ def show_id(
|
||||
|
||||
|
||||
def guest_book_info(item: GuestBook) -> schemas.GuestBook:
|
||||
td = timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||
booking_date = None if item.booking_date is None else item.booking_date + td
|
||||
arrival_date = None if item.arrival_date is None else item.arrival_date + td
|
||||
return schemas.GuestBook(
|
||||
id_=item.id,
|
||||
name=item.customer.name,
|
||||
phone=item.customer.phone,
|
||||
pax=item.pax,
|
||||
address=item.customer.address,
|
||||
booking_date=booking_date,
|
||||
arrival_date=arrival_date,
|
||||
last_edit_date=item.last_edit_date + td,
|
||||
booking_date=item.booking_date,
|
||||
arrival_date=item.arrival_date,
|
||||
last_edit_date=item.last_edit_date,
|
||||
notes=item.notes,
|
||||
type_=GuestBookType(item.type_.name),
|
||||
)
|
||||
|
||||
|
||||
def blank_guest_book_info(type_: GuestBookType) -> schemas.GuestBookIn:
|
||||
now = datetime.now(UTC).replace(tzinfo=None) + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||
now = datetime.now()
|
||||
booking_date = None if type_ != GuestBookType.booking else now
|
||||
arrival_date = None if type_ != GuestBookType.walk_in else now
|
||||
return schemas.GuestBookIn(
|
||||
|
||||
@@ -9,7 +9,7 @@ def report_start_date(s: str | None = None) -> date:
|
||||
return (
|
||||
(datetime.now(UTC).replace(tzinfo=None) + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).date()
|
||||
if s is None
|
||||
else datetime.strptime(s, "%d-%b-%Y").date()
|
||||
else datetime.fromisoformat(s).date()
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ def report_finish_date(f: str | None = None) -> date:
|
||||
return (
|
||||
(datetime.now(UTC).replace(tzinfo=None) + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).date()
|
||||
if f is None
|
||||
else datetime.strptime(f, "%d-%b-%Y").date()
|
||||
else datetime.fromisoformat(f).date()
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import uuid
|
||||
|
||||
from datetime import timedelta
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Security
|
||||
from sqlalchemy import select, update
|
||||
|
||||
from ..core.config import settings
|
||||
from ..core.security import get_current_active_user as get_user
|
||||
from ..db.session import SessionDep
|
||||
from ..models.food_table import FoodTable
|
||||
@@ -119,7 +117,7 @@ def show_running(user: Annotated[UserToken, Security(get_user)], db: SessionDep)
|
||||
ft.status = item.status.status
|
||||
ft.voucher_id = item.status.voucher_id
|
||||
ft.pax = item.status.voucher.pax
|
||||
ft.date_ = item.status.voucher.date + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
||||
ft.date_ = item.status.voucher.date
|
||||
ft.amount = int(round(item.status.voucher.amount, 0))
|
||||
if item.status.guest is not None:
|
||||
ft.guest = item.status.guest.customer.name
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
@@ -6,9 +6,6 @@ from pydantic import (
|
||||
BaseModel,
|
||||
ConfigDict,
|
||||
Field,
|
||||
SerializationInfo,
|
||||
field_serializer,
|
||||
field_validator,
|
||||
model_serializer,
|
||||
)
|
||||
|
||||
@@ -19,17 +16,6 @@ from .sale_category import SaleCategoryLink
|
||||
class BeerConsumptionReportItem(BaseModel):
|
||||
date_: date
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
# dynamic fields (e.g., regular, nc, kot)
|
||||
dynamic_amounts: Annotated[dict[str, Daf], Field(default_factory=dict)]
|
||||
|
||||
@@ -65,25 +51,3 @@ class BeerConsumptionReport(BaseModel):
|
||||
headers: list[str]
|
||||
data: list[BeerConsumptionReportItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date, datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
|
||||
@@ -12,42 +12,9 @@ class BillSettlementItem(BaseModel):
|
||||
amount: Daf
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | datetime) -> datetime:
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
|
||||
class BillSettlement(BaseModel):
|
||||
start_date: date
|
||||
finish_date: date
|
||||
amounts: list[BillSettlementItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date, datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
from .user import UserLink
|
||||
@@ -33,13 +33,6 @@ class InfoItem(BaseModel):
|
||||
amount: Daf
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("date", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | datetime) -> datetime:
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
|
||||
class CashierReport(BaseModel):
|
||||
start_date: date
|
||||
@@ -50,25 +43,3 @@ class CashierReport(BaseModel):
|
||||
amounts: list[NameAmount]
|
||||
info: dict[str, list[InfoItem]]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -3,7 +3,7 @@ import uuid
|
||||
from datetime import datetime
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from . import to_camel
|
||||
from .section import SectionLink
|
||||
@@ -23,14 +23,6 @@ class Device(DeviceIn):
|
||||
last_date: datetime | None = None
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_serializer("creation_date")
|
||||
def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("last_date")
|
||||
def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
|
||||
class DeviceLink(BaseModel):
|
||||
id_: uuid.UUID
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
|
||||
@@ -16,25 +16,3 @@ class DiscountReport(BaseModel):
|
||||
finish_date: date
|
||||
amounts: list[DiscountReportItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: date | str) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: date | str) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -9,7 +9,6 @@ from pydantic import (
|
||||
Field,
|
||||
SerializationInfo,
|
||||
field_serializer,
|
||||
field_validator,
|
||||
model_validator,
|
||||
)
|
||||
|
||||
@@ -29,32 +28,6 @@ class GuestBookIn(BaseModel):
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("booking_date", mode="before")
|
||||
@classmethod
|
||||
def parse_booking_date(cls, value: str | datetime | None) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("booking_date")
|
||||
def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@field_validator("arrival_date", mode="before")
|
||||
@classmethod
|
||||
def parse_arrival_date(cls, value: str | datetime | None) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("arrival_date")
|
||||
def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@model_validator(mode="after")
|
||||
def nulls(self) -> GuestBookIn:
|
||||
if self.arrival_date is None and self.booking_date is None:
|
||||
@@ -68,17 +41,6 @@ class GuestBook(GuestBookIn):
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("last_edit_date", mode="before")
|
||||
@classmethod
|
||||
def parse_last_edit_date(cls, value: str | datetime) -> datetime:
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("last_edit_date")
|
||||
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
|
||||
class GuestBookListItem(BaseModel):
|
||||
id_: uuid.UUID
|
||||
@@ -98,39 +60,6 @@ class GuestBookListItem(BaseModel):
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("booking_date", mode="before")
|
||||
@classmethod
|
||||
def parse_booking_date(cls, value: str | datetime | None) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("booking_date")
|
||||
def serialize_booking_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@field_validator("arrival_date", mode="before")
|
||||
@classmethod
|
||||
def parse_arrival_date(cls, value: str | datetime | None) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("arrival_date")
|
||||
def serialize_arrival_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
|
||||
@field_validator("last_edit_date", mode="before")
|
||||
@classmethod
|
||||
def parse_last_edit_date(cls, value: str | datetime) -> datetime:
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("last_edit_date")
|
||||
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
@@ -140,14 +69,3 @@ class GuestBookList(BaseModel):
|
||||
date_: date
|
||||
list: list[GuestBookListItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,8 +1,8 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
|
||||
@@ -27,25 +27,3 @@ class MeReport(BaseModel):
|
||||
finish_date: date
|
||||
amounts: list[MeItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,9 +1,9 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from . import to_camel
|
||||
from .sale_category import SaleCategoryLink
|
||||
@@ -27,32 +27,6 @@ class Product(ProductIn):
|
||||
valid_till: date | None = None
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("valid_from", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_from(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_from")
|
||||
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("valid_till", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_till(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_till")
|
||||
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
|
||||
class ProductBlank(BaseModel):
|
||||
name: str
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
@@ -8,9 +8,6 @@ from pydantic import (
|
||||
BaseModel,
|
||||
ConfigDict,
|
||||
Field,
|
||||
SerializationInfo,
|
||||
field_serializer,
|
||||
field_validator,
|
||||
model_serializer,
|
||||
)
|
||||
|
||||
@@ -56,25 +53,3 @@ class ProductSaleReport(BaseModel):
|
||||
amounts: list[ProductSaleReportItem]
|
||||
user: UserLink
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import to_camel
|
||||
|
||||
@@ -11,25 +11,3 @@ class ProductUpdatesReport(BaseModel):
|
||||
report: list[str]
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -2,7 +2,7 @@ import uuid
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import to_camel
|
||||
from .section import SectionLink
|
||||
@@ -26,18 +26,3 @@ class RunningTable(BaseModel):
|
||||
bold: bool | None = None
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | datetime | None) -> datetime | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y %H:%M")
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
if value is None:
|
||||
return None
|
||||
return value.strftime("%d-%b-%Y %H:%M")
|
||||
@@ -1,8 +1,8 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
from .user import UserLink
|
||||
@@ -21,25 +21,3 @@ class SaleReport(BaseModel):
|
||||
amounts: list[SaleReportItem]
|
||||
user: UserLink
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,10 +1,10 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from . import Daf, to_camel
|
||||
from .menu_category import MenuCategoryLink
|
||||
@@ -27,29 +27,3 @@ class StockKeepingUnit(BaseModel):
|
||||
valid_from: date | None = None
|
||||
valid_till: date | None = None
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("valid_from", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_from(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_from")
|
||||
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("valid_till", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_till(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_till")
|
||||
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
@@ -1,6 +1,6 @@
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
|
||||
@@ -18,25 +18,3 @@ class TaxReport(BaseModel):
|
||||
finish_date: date
|
||||
amounts: list[TaxReportItem]
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("start_date", mode="before")
|
||||
@classmethod
|
||||
def parse_start_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("start_date")
|
||||
def serialize_start_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("finish_date", mode="before")
|
||||
@classmethod
|
||||
def parse_finish_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("finish_date")
|
||||
def serialize_finish_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -1,10 +1,10 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from . import Daf, to_camel
|
||||
from .menu_category import MenuCategoryLink
|
||||
@@ -23,32 +23,6 @@ class Product(BaseModel):
|
||||
valid_till: date | None = None
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("valid_from", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_from(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_from")
|
||||
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("valid_till", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_till(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_till")
|
||||
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
|
||||
class StockKeepingUnit(BaseModel):
|
||||
id_: uuid.UUID
|
||||
@@ -68,32 +42,6 @@ class StockKeepingUnit(BaseModel):
|
||||
valid_till: date | None = None
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("valid_from", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_from(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_from")
|
||||
def serialize_valid_from(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
@field_validator("valid_till", mode="before")
|
||||
@classmethod
|
||||
def parse_valid_till(cls, value: str | date | None) -> date | None:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("valid_till")
|
||||
def serialize_valid_till(self, value: date | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y")
|
||||
|
||||
|
||||
class TemporalProduct(BaseModel):
|
||||
products: list[Product]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import uuid
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import date
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer, field_validator
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import Daf, to_camel
|
||||
|
||||
@@ -20,14 +20,3 @@ class UpdateProductPrices(BaseModel):
|
||||
menu_category_id: uuid.UUID | None = None
|
||||
items: list[UpdateProductPricesItem]
|
||||
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_validator("date_", mode="before")
|
||||
@classmethod
|
||||
def parse_date(cls, value: str | date) -> date:
|
||||
if isinstance(value, date):
|
||||
return value
|
||||
return datetime.strptime(value, "%d-%b-%Y").date()
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: date, _info: SerializationInfo) -> str:
|
||||
return value.strftime("%d-%b-%Y")
|
||||
@@ -2,7 +2,7 @@ import uuid
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, SerializationInfo, field_serializer
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from . import to_camel
|
||||
from .role import RoleItem
|
||||
@@ -41,7 +41,3 @@ class UserList(BaseModel):
|
||||
last_date: datetime | None = None
|
||||
|
||||
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
|
||||
|
||||
@field_serializer("last_date")
|
||||
def serialize_last_date(self, value: datetime | None, _info: SerializationInfo) -> str | None:
|
||||
return None if value is None else value.strftime("%d-%b-%Y %H:%M")
|
||||
@@ -126,13 +126,10 @@ class VoucherBlank(BaseModel):
|
||||
class VoucherOut(BaseModel):
|
||||
id_: uuid.UUID
|
||||
date_: datetime
|
||||
date_tip: datetime
|
||||
pax: int
|
||||
user: UserLink
|
||||
creation_date: datetime
|
||||
creation_date_tip: datetime
|
||||
last_edit_date: datetime
|
||||
last_edit_date_tip: datetime
|
||||
kot_id: int
|
||||
bill_id: str
|
||||
table: TableLink
|
||||
@@ -147,27 +144,3 @@ class VoucherOut(BaseModel):
|
||||
alias_generator=to_camel,
|
||||
populate_by_name=True,
|
||||
)
|
||||
|
||||
@field_serializer("date_")
|
||||
def serialize_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||
|
||||
@field_serializer("date_tip")
|
||||
def serialize_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||
|
||||
@field_serializer("creation_date")
|
||||
def serialize_creation_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||
|
||||
@field_serializer("creation_date_tip")
|
||||
def serialize_creation_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||
|
||||
@field_serializer("last_edit_date")
|
||||
def serialize_last_edit_date(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%H:%M")
|
||||
|
||||
@field_serializer("last_edit_date_tip")
|
||||
def serialize_last_edit_date_tip(self, value: datetime, _info: SerializationInfo) -> str:
|
||||
return (value + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)).strftime("%d-%b-%Y %H:%M:%S")
|
||||
@@ -26,6 +26,7 @@ import { MatTableModule } from '@angular/material/table';
|
||||
import { MatToolbarModule } from '@angular/material/toolbar';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { provideRouter, withComponentInputBinding, withRouterConfig } from '@angular/router';
|
||||
import { Settings } from 'luxon';
|
||||
|
||||
import { dateFormat } from './app.environment';
|
||||
import { routes } from './app.routes';
|
||||
@@ -37,6 +38,8 @@ import { httpErrorInterceptor } from './core/http-error.interceptor';
|
||||
import { jwtInterceptor } from './core/jwt.interceptor';
|
||||
import { refreshInterceptor } from './core/refresh.interceptor';
|
||||
|
||||
Settings.defaultLocale = 'en-US';
|
||||
|
||||
export const appConfig: ApplicationConfig = {
|
||||
providers: [
|
||||
importProvidersFrom(
|
||||
@@ -76,6 +79,7 @@ export const appConfig: ApplicationConfig = {
|
||||
withComponentInputBinding(),
|
||||
),
|
||||
{ provide: ErrorHandler, useClass: GlobalErrorHandler },
|
||||
{ provide: MAT_DATE_LOCALE, useValue: 'en-US' },
|
||||
{ provide: DateAdapter, useClass: LuxonDateAdapter, deps: [MAT_DATE_LOCALE] },
|
||||
{ provide: MAT_DATE_FORMATS, useValue: dateFormat },
|
||||
{ provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue: { duration: 3000 } },
|
||||
|
||||
@@ -7,10 +7,12 @@ export const environment = {
|
||||
export const dateFormat = {
|
||||
parse: {
|
||||
dateInput: 'dd-MMM-yyyy',
|
||||
dateTimeInput: 'dd-MMM-yyyy HH:mm',
|
||||
timeInput: 'hh:mm a',
|
||||
},
|
||||
display: {
|
||||
dateInput: 'dd-MMM-yyyy',
|
||||
dateTimeInput: 'dd-MMM-yyyy HH:mm',
|
||||
timeInput: 'hh:mm a',
|
||||
timeOptionLabel: 'hh:mm a',
|
||||
monthYearLabel: 'MMM yyyy',
|
||||
|
||||
@@ -81,8 +81,8 @@ export class BeerSaleReportComponent {
|
||||
computation: (info): BeerSaleReportFormData => {
|
||||
if (info) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(info.startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(info.finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(info.startDate),
|
||||
finishDate: DateTime.fromISO(info.finishDate),
|
||||
saleCategory: info.saleCategory?.id ?? '',
|
||||
regular: info.regular,
|
||||
happy: info.happy,
|
||||
@@ -131,8 +131,8 @@ export class BeerSaleReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new BeerSaleReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
saleCategory: this.saleCategories().find((sc) => sc.id === formModel.saleCategory),
|
||||
regular: formModel.regular,
|
||||
happy: formModel.happy,
|
||||
|
||||
@@ -56,8 +56,8 @@ export class BillSettlementReportComponent {
|
||||
computation: (infoVal): BillSettlementReportFormData => {
|
||||
if (infoVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -86,8 +86,8 @@ export class BillSettlementReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new BillSettlementReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -67,8 +67,8 @@ export class CashierReportComponent {
|
||||
if (infoVal) {
|
||||
return {
|
||||
cashier: this.info().cashier.id ?? '',
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -115,8 +115,8 @@ export class CashierReportComponent {
|
||||
return new CashierReport({
|
||||
cashier: new User({ id: formModel.cashier ?? undefined }),
|
||||
cashiers: this.info().cashiers,
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -56,8 +56,8 @@ export class DiscountReportComponent {
|
||||
computation: (infoVal): DiscountReportFormData => {
|
||||
if (infoVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -86,8 +86,8 @@ export class DiscountReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new DiscountReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -73,8 +73,8 @@ export class GuestBookDetailComponent {
|
||||
pax: itemVal.pax,
|
||||
address: itemVal.address ?? '',
|
||||
notes: itemVal.notes ?? '',
|
||||
date: dt ? DateTime.fromJSDate(new Date(dt)) : DateTime.now(),
|
||||
time: dt ? DateTime.fromJSDate(new Date(dt)) : DateTime.now(),
|
||||
date: dt ? DateTime.fromISO(dt).minus({ minutes: new Date().getTimezoneOffset() }) : DateTime.now(),
|
||||
time: dt ? DateTime.fromISO(dt).minus({ minutes: new Date().getTimezoneOffset() }) : DateTime.now(),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -172,16 +172,25 @@ export class GuestBookDetailComponent {
|
||||
item.pax = formModel.pax ?? 0;
|
||||
item.address = formModel.address;
|
||||
item.notes = formModel.notes;
|
||||
const timeStr = formModel.time ? formModel.time.toFormat('HH:mm') : '00:00';
|
||||
const time = formModel.time ?? DateTime.now();
|
||||
const dt = formModel.date.set({ hour: time.hour, minute: time.minute, second: 0, millisecond: 0 });
|
||||
item.type = item.type || this.t() || 'walk_in';
|
||||
|
||||
if (item.type === 'booking') {
|
||||
item.bookingDate = formModel.date.toFormat('dd-MMM-yyyy') + ' ' + timeStr;
|
||||
item.bookingDate = dt.toISO() ?? '';
|
||||
} else {
|
||||
const existingDate = item.arrivalDate
|
||||
? (item.arrivalDate as string).substring(0, 12)
|
||||
: formModel.date.toFormat('dd-MMM-yyyy ');
|
||||
item.arrivalDate = existingDate + timeStr;
|
||||
if (item.arrivalDate) {
|
||||
// preserve existing arrival date but update time
|
||||
const arrival = DateTime.fromISO(item.arrivalDate as string).set({
|
||||
hour: time.hour,
|
||||
minute: time.minute,
|
||||
second: 0,
|
||||
millisecond: 0,
|
||||
});
|
||||
item.arrivalDate = arrival.toISO() ?? '';
|
||||
} else {
|
||||
item.arrivalDate = dt.toISO() ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
|
||||
@@ -45,7 +45,7 @@ export class GuestBookListComponent {
|
||||
date = input(DateTime.now(), {
|
||||
transform: (v: string | null | undefined): DateTime => {
|
||||
if (v) {
|
||||
const parsed = DateTime.fromFormat(v, 'dd-MMM-yyyy');
|
||||
const parsed = DateTime.fromISO(v);
|
||||
if (parsed.isValid) return parsed;
|
||||
}
|
||||
return DateTime.now();
|
||||
@@ -63,7 +63,7 @@ export class GuestBookListComponent {
|
||||
|
||||
displayedColumns = ['sno', 'name', 'phone', 'pax', 'date', 'action'];
|
||||
|
||||
dateSignal = computed(() => this.formModel().date.toFormat('dd-MMM-yyyy'));
|
||||
dateSignal = computed(() => this.formModel().date.toISODate() ?? '');
|
||||
listResource = this.ser.list(this.dateSignal);
|
||||
|
||||
dataSource = computed(() => this.listResource.value()?.list ?? []);
|
||||
|
||||
@@ -64,8 +64,8 @@ export class MenuEngineeringReportComponent {
|
||||
computation: (infoVal): MenuEngineeringReportFormData => {
|
||||
if (infoVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
filter: '',
|
||||
};
|
||||
}
|
||||
@@ -143,8 +143,8 @@ export class MenuEngineeringReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new MenuEngineeringReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ export class ProductSaleReportComponent {
|
||||
computation: (sectionsVal): ProductSaleReportFormData => {
|
||||
if (sectionsVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
section: this.info().sectionId || null,
|
||||
};
|
||||
}
|
||||
@@ -102,8 +102,8 @@ export class ProductSaleReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
const data = new ProductSaleReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
if (formModel.section) {
|
||||
data.sectionId = formModel.section;
|
||||
|
||||
@@ -52,8 +52,8 @@ export class ProductUpdatesReportComponent {
|
||||
computation: (infoVal): ProductUpdatesReportFormData => {
|
||||
if (infoVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -82,8 +82,8 @@ export class ProductUpdatesReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new ProductUpdatesReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -67,8 +67,8 @@ export class SaleReportComponent {
|
||||
computation: (sectionsVal): SaleReportFormData => {
|
||||
if (sectionsVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
section: this.info().sectionId || null,
|
||||
};
|
||||
}
|
||||
@@ -102,8 +102,8 @@ export class SaleReportComponent {
|
||||
getInfo(): SaleReport {
|
||||
const formModel = this.formModel();
|
||||
const data = new SaleReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
if (formModel.section) {
|
||||
data.sectionId = formModel.section;
|
||||
|
||||
@@ -8,13 +8,10 @@ import { VoucherType } from './voucher-type';
|
||||
export class Bill {
|
||||
id: string | undefined;
|
||||
date: string;
|
||||
dateTip: string;
|
||||
pax: number;
|
||||
user: User;
|
||||
creationDate: string;
|
||||
creationDateTip: string;
|
||||
lastEditDate: string;
|
||||
lastEditDateTip: string;
|
||||
kotId: string;
|
||||
billId: string;
|
||||
table: Table;
|
||||
@@ -27,13 +24,10 @@ export class Bill {
|
||||
public constructor(init?: Partial<Bill>) {
|
||||
this.id = undefined;
|
||||
this.date = '';
|
||||
this.dateTip = '';
|
||||
this.pax = 0;
|
||||
this.user = new User();
|
||||
this.creationDate = '';
|
||||
this.creationDateTip = '';
|
||||
this.lastEditDate = '';
|
||||
this.lastEditDateTip = '';
|
||||
this.billId = '';
|
||||
this.kotId = '';
|
||||
this.table = new Table();
|
||||
|
||||
@@ -20,10 +20,12 @@
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="time-details">
|
||||
<mat-header-cell *matHeaderCellDef class="deep-purple-100 bold right-align"
|
||||
><span [matTooltip]="bs.bill().dateTip">{{ bs.bill().date }}</span
|
||||
> / <span [matTooltip]="bs.bill().creationDateTip">{{ bs.bill().creationDate }}</span
|
||||
> / <span [matTooltip]="bs.bill().lastEditDateTip">{{
|
||||
bs.bill().lastEditDate
|
||||
><span [matTooltip]="bs.bill().date | localTime: 'datetime'">{{ bs.bill().date | localTime: 'time' }}</span
|
||||
> / <span [matTooltip]="bs.bill().creationDate | localTime: 'datetime'">{{
|
||||
bs.bill().creationDate | localTime: 'time'
|
||||
}}</span
|
||||
> / <span [matTooltip]="bs.bill().lastEditDate | localTime: 'datetime'">{{
|
||||
bs.bill().lastEditDate | localTime: 'time'
|
||||
}}</span></mat-header-cell
|
||||
>
|
||||
</ng-container>
|
||||
|
||||
@@ -16,6 +16,7 @@ import { Customer } from '../../core/customer';
|
||||
import { Table } from '../../core/table';
|
||||
import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component';
|
||||
import { ErrorStateComponent } from '../../shared/error-state/error-state.component';
|
||||
import { LocalTimePipe } from '../../shared/local-time.pipe';
|
||||
import { MathService } from '../../shared/math.service';
|
||||
import { SkeletonLoaderComponent } from '../../shared/skeleton-loader/skeleton-loader.component';
|
||||
import { TableService } from '../../tables/table.service';
|
||||
@@ -36,6 +37,7 @@ import { VoucherService } from './voucher.service';
|
||||
templateUrl: './bills.component.html',
|
||||
styleUrls: ['./bills.component.sass'],
|
||||
imports: [
|
||||
LocalTimePipe,
|
||||
CommonModule,
|
||||
CurrencyPipe,
|
||||
MatButtonModule,
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<span>{{ table.guest }}</span>
|
||||
<span>{{ table.pax ?? '-' }} / {{ table.seats }} / {{ table.section?.name }}</span>
|
||||
@if (table.date) {
|
||||
<span>{{ table.date }}</span>
|
||||
<span>{{ table.date | localTime: 'time' }}</span>
|
||||
}
|
||||
@if (table.amount) {
|
||||
<span>{{ table.amount | currency: 'INR' }}</span>
|
||||
|
||||
@@ -10,6 +10,7 @@ import { map } from 'rxjs/operators';
|
||||
import { Table } from '../../core/table';
|
||||
import { RegimeService } from '../../regimes/regime.service';
|
||||
import { ErrorStateComponent } from '../../shared/error-state/error-state.component';
|
||||
import { LocalTimePipe } from '../../shared/local-time.pipe';
|
||||
import { SkeletonLoaderComponent } from '../../shared/skeleton-loader/skeleton-loader.component';
|
||||
import { TableService } from '../../tables/table.service';
|
||||
import { BillNumberComponent } from '../bill-number/bill-number.component';
|
||||
@@ -18,7 +19,7 @@ import { BillNumberComponent } from '../bill-number/bill-number.component';
|
||||
selector: 'app-running-tables',
|
||||
templateUrl: './running-tables.component.html',
|
||||
styleUrls: ['./running-tables.component.sass'],
|
||||
imports: [CurrencyPipe, MatRippleModule, MatCardModule, ErrorStateComponent, SkeletonLoaderComponent],
|
||||
imports: [LocalTimePipe, CurrencyPipe, MatRippleModule, MatCardModule, ErrorStateComponent, SkeletonLoaderComponent],
|
||||
})
|
||||
export class RunningTablesComponent {
|
||||
private tableService = inject(TableService);
|
||||
|
||||
@@ -68,8 +68,8 @@ export class SettingsComponent {
|
||||
|
||||
runMaintenance() {
|
||||
const formModel = this.formModel();
|
||||
const startDate = DateTime.fromJSDate(formModel.startDate).toFormat('dd-MMM-yyyy');
|
||||
const finishDate = DateTime.fromJSDate(formModel.finishDate).toFormat('dd-MMM-yyyy');
|
||||
const startDate = DateTime.fromJSDate(formModel.startDate).toISODate() ?? '';
|
||||
const finishDate = DateTime.fromJSDate(formModel.finishDate).toISODate() ?? '';
|
||||
|
||||
if (!this.beerFile || !this.saleFile) {
|
||||
this.snackBar.open('Please choose both files first!', 'Danger');
|
||||
|
||||
@@ -6,15 +6,21 @@ import { DateTime } from 'luxon';
|
||||
standalone: true,
|
||||
})
|
||||
export class LocalTimePipe implements PipeTransform {
|
||||
transform(value: string): string {
|
||||
if (value === undefined || value === null) {
|
||||
transform(value: string | undefined | null, format: 'datetime' | 'time' | 'date' = 'datetime'): string {
|
||||
if (!value) {
|
||||
return '';
|
||||
}
|
||||
if (value.length === 5) {
|
||||
return DateTime.fromFormat(value, 'HH:mm').minus({ minutes: new Date().getTimezoneOffset() }).toFormat('HH:mm');
|
||||
const dt =
|
||||
value.length === 5
|
||||
? DateTime.fromFormat(value, 'HH:mm').minus({ minutes: new Date().getTimezoneOffset() })
|
||||
: DateTime.fromISO(value).minus({ minutes: new Date().getTimezoneOffset() });
|
||||
|
||||
if (format === 'time') {
|
||||
return dt.toFormat('HH:mm');
|
||||
}
|
||||
return DateTime.fromFormat(value, 'dd-MMM-yyyy HH:mm')
|
||||
.minus({ minutes: new Date().getTimezoneOffset() })
|
||||
.toFormat('dd-MMM-yyyy HH:mm');
|
||||
if (format === 'date') {
|
||||
return dt.toFormat('dd-MMM-yyyy', { locale: 'en-US' });
|
||||
}
|
||||
return dt.toFormat('dd-MMM-yyyy HH:mm', { locale: 'en-US' });
|
||||
}
|
||||
}
|
||||
@@ -55,8 +55,8 @@ export class TaxReportComponent {
|
||||
computation: (infoVal): TaxReportFormData => {
|
||||
if (infoVal) {
|
||||
return {
|
||||
startDate: DateTime.fromFormat(this.info().startDate, 'dd-MMM-yyyy'),
|
||||
finishDate: DateTime.fromFormat(this.info().finishDate, 'dd-MMM-yyyy'),
|
||||
startDate: DateTime.fromISO(this.info().startDate),
|
||||
finishDate: DateTime.fromISO(this.info().finishDate),
|
||||
};
|
||||
}
|
||||
return {
|
||||
@@ -85,8 +85,8 @@ export class TaxReportComponent {
|
||||
const formModel = this.formModel();
|
||||
|
||||
return new TaxReport({
|
||||
startDate: formModel.startDate.toFormat('dd-MMM-yyyy'),
|
||||
finishDate: formModel.finishDate.toFormat('dd-MMM-yyyy'),
|
||||
startDate: formModel.startDate.toISODate() ?? '',
|
||||
finishDate: formModel.finishDate.toISODate() ?? '',
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -152,11 +152,11 @@ export class TemporalProductDetailComponent {
|
||||
skuForm = form(this.skuFormModel);
|
||||
|
||||
private parseDateOrNull(d: string | null | undefined): DateTime | null {
|
||||
return !d ? null : DateTime.fromFormat(d, 'dd-MMM-yyyy');
|
||||
return !d ? null : DateTime.fromISO(d);
|
||||
}
|
||||
|
||||
private formatDateOrNull(d: DateTime | null | undefined): string | null {
|
||||
return !d ? null : d.toFormat('dd-MMM-yyyy');
|
||||
return !d ? null : (d.toISODate() ?? '');
|
||||
}
|
||||
|
||||
constructor() {
|
||||
|
||||
@@ -64,7 +64,7 @@ export class UpdateProductPricesComponent {
|
||||
source: () => this.info(),
|
||||
computation: (info): UpdateProductPricesFormData => {
|
||||
return {
|
||||
date: info.date ? DateTime.fromFormat(info.date, 'dd-MMM-yyyy') : DateTime.now(),
|
||||
date: info.date ? DateTime.fromISO(info.date) : DateTime.now(),
|
||||
menuCategory: info.menuCategoryId !== undefined ? info.menuCategoryId : '',
|
||||
prices: info.items.map((x) => ({ newPrice: x.newPrice })),
|
||||
};
|
||||
@@ -99,7 +99,7 @@ export class UpdateProductPricesComponent {
|
||||
});
|
||||
|
||||
return {
|
||||
date: formModel.date.toFormat('dd-MMM-yyyy'),
|
||||
date: formModel.date.toISODate() ?? '',
|
||||
menuCategoryId: formModel.menuCategory,
|
||||
items: [...info.items],
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user