56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
import asyncio
|
|
import locale
|
|
import uuid
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from arq import ArqRedis, create_pool
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from ..core.arq import settings as redis_settings
|
|
from ..core.config import settings
|
|
from ..models.device import Device
|
|
from ..models.printer import Printer
|
|
from ..models.section_printer import SectionPrinter
|
|
|
|
|
|
def print_product_sale_report(report, device_id: uuid.UUID, db: Session):
|
|
locale.setlocale(locale.LC_MONETARY, "en_IN")
|
|
data = design_product_sale_report(report)
|
|
section_id = db.execute(select(Device.section_id).where(Device.id == device_id)).scalar_one()
|
|
printer = db.execute(
|
|
select(Printer)
|
|
.join(SectionPrinter.printer)
|
|
.where(SectionPrinter.section_id == section_id)
|
|
.where(SectionPrinter.sale_category_id == None) # noqa: E711
|
|
).scalar_one()
|
|
|
|
loop = asyncio.new_event_loop()
|
|
redis: ArqRedis = loop.run_until_complete(create_pool(redis_settings))
|
|
loop.run_until_complete(
|
|
redis.enqueue_job(
|
|
"sent_to_printer", data, printer.address, printer.cut_code, _queue_name=f"barker:print:{printer.name}"
|
|
)
|
|
)
|
|
loop.close()
|
|
|
|
|
|
def design_product_sale_report(report):
|
|
now = datetime.now() + timedelta(minutes=settings.TIMEZONE_OFFSET_MINUTES)
|
|
s = f"{report['userName']} @ {now:%d-%b-%Y %H:%M}".center(42)
|
|
s += "\n\r" + "-" * 42
|
|
s += "\n\r" f"{report['startDate']} To {report['finishDate']}".center(42)
|
|
s += "\n\r" + "-" * 42
|
|
s += "\n\rUnbilled Sale NC Staff Void"
|
|
for item in report["amounts"]:
|
|
s += f"\n\r{item['name']: ^42.42}" f"\n\r" + (f"{item['kot']: >7.2f} " if "kot" in item else " ") + (
|
|
f"{item['regularBill']: >7.2f} " if "regularBill" in item else " "
|
|
) + (f"{item['noCharge']: >7.2f} " if "noCharge" in item else " ") + (
|
|
f"{item['staff']: >7.2f} " if "staff" in item else " "
|
|
) + (
|
|
f"{item['void']: >7.2f}" if "void" in item else " "
|
|
)
|
|
s += "\n\r" + "=" * 42
|
|
return s
|