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)