73 lines
2.4 KiB
Python
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)
|