We have moved from dd-MMM-yyyy to ISO Date.

This commit is contained in:
tanshu committed 2026-09-02 03:38:49 +00:00
1 parent 6cf42d3641
commit 0a9675f270
45 files changed
+141 -613

No files matched your search

+6 -6
View File
@@ -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:
+3 -3
View File
@@ -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)
)
+13 -19
View File
@@ -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(
+2 -2
View File
@@ -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 -3
View File
@@ -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 -30
View File
@@ -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")
+1 -9
View File
@@ -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
+2 -24
View File
@@ -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")
-82
View File
@@ -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")
+2 -28
View File
@@ -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 -26
View File
@@ -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")
+1 -16
View File
@@ -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")
+2 -24
View File
@@ -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")
+2 -28
View File
@@ -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")
+2 -24
View File
@@ -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")
+2 -54
View File
@@ -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]
+2 -13
View File
@@ -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")
+1 -5
View File
@@ -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")
-27
View File
@@ -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")
+4
View File
@@ -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 } },
+2
View File
@@ -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;
-6
View File
@@ -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
>&nbsp;/&nbsp;<span [matTooltip]="bs.bill().creationDateTip">{{ bs.bill().creationDate }}</span
>&nbsp;/&nbsp;<span [matTooltip]="bs.bill().lastEditDateTip">{{
bs.bill().lastEditDate
><span [matTooltip]="bs.bill().date | localTime: 'datetime'">{{ bs.bill().date | localTime: 'time' }}</span
>&nbsp;/&nbsp;<span [matTooltip]="bs.bill().creationDate | localTime: 'datetime'">{{
bs.bill().creationDate | localTime: 'time'
}}</span
>&nbsp;/&nbsp;<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');
+13 -7
View File
@@ -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() ?? '',
});
}
@@ -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],
};