JhHardwareWRS_BackPoint/app/services/misc_work.py
2026-06-24 15:19:14 +08:00

73 lines
2.4 KiB
Python

from sqlalchemy.orm import Session
from app.models import Product
MISC_WORK_PRODUCT_NAME = "处理杂活"
MISC_WORK_PROCESS_NAME = "杂活"
MISC_WORK_STAMPING_METHOD = "处理杂活"
MISC_WORK_PROJECT_NO = "MISC"
MISC_WORK_MATERIAL_CODE = "MISC-WORK"
MISC_WORK_MATERIAL_NAME = "处理杂活"
def is_misc_stamping_method(value: str | None) -> bool:
return str(value or "").strip() == MISC_WORK_STAMPING_METHOD
def is_misc_product(product) -> bool:
return bool(product) and (
is_misc_stamping_method(getattr(product, "stamping_method", None))
or (
getattr(product, "product_name", None) == MISC_WORK_PRODUCT_NAME
and getattr(product, "process_name", None) == MISC_WORK_PROCESS_NAME
)
)
def is_misc_item(item) -> bool:
return bool(item) and (
is_misc_stamping_method(getattr(item, "stamping_method", None))
or (
getattr(item, "product_name", None) == MISC_WORK_PRODUCT_NAME
and getattr(item, "process_name", None) == MISC_WORK_PROCESS_NAME
)
)
def ensure_misc_work_product(db: Session, attendance_point_name: str) -> Product:
product = db.get(
Product,
{
"attendance_point_name": attendance_point_name,
"project_no": MISC_WORK_PROJECT_NO,
"product_name": MISC_WORK_PRODUCT_NAME,
"device_no": "",
"process_name": MISC_WORK_PROCESS_NAME,
},
)
if product is None:
product = Product(
attendance_point_name=attendance_point_name,
project_no=MISC_WORK_PROJECT_NO,
product_name=MISC_WORK_PRODUCT_NAME,
device_no="",
process_name=MISC_WORK_PROCESS_NAME,
)
db.add(product)
product.profile_no = product.profile_no or "MISC"
product.material_code = product.material_code or MISC_WORK_MATERIAL_CODE
product.material_name = product.material_name or MISC_WORK_MATERIAL_NAME
product.supplier = product.supplier or "系统内置"
product.stamping_method = MISC_WORK_STAMPING_METHOD
product.operator_count = 1
product.process_unit_price_yuan = 0
product.standard_beat = 0
product.standard_workload = 0
return product
def ensure_misc_work_products(db: Session, attendance_point_names: list[str]) -> None:
for name in attendance_point_names:
ensure_misc_work_product(db, name)