AutoRpa/rpa_contract/contract_draft.py

107 lines
4.3 KiB
Python

# 合同起草入参。页面流按这份草稿填客商、金额、日期和货品行。
from __future__ import annotations
import json
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any
from contract_flow_steps import ContractGoodsLine
# 一次起草要填的字段。班次从合单来,命令行从 JSON 来。
@dataclass(frozen=True)
class ContractDraft:
supplier_name: str
order_date: str
source_type: str
template_type: str = "FORMAT"
template_name: str = ""
customer_code: str = ""
customer_name: str = ""
contract_category: str = ""
settlement_type: str = ""
contract_background: str = ""
contract_nature: str = ""
amount_currency: str = ""
amount_type: str = ""
amount: str = ""
contract_title: str = ""
contract_end_date: str = ""
contract_sign_date: str = ""
contract_start_date: str = ""
is_major_contract: str = ""
is_prepayment: str = ""
belong_year: str = ""
payment_method: str = ""
payment_days: str = ""
contract_status: str = ""
contains_blood_products: str = ""
submit_mode: str = "submit"
goods_lines: list[ContractGoodsLine] = field(default_factory=list)
platform_pdf_paths: list[str] = field(default_factory=list)
merged_pdf_path: str | None = None
contract_document_path: str = ""
order_no_list: list[str] = field(default_factory=list)
lookup_only: bool = False
# 从 JSON 文件读起草草稿。
def load_contract_draft(path: str | Path) -> ContractDraft:
data = json.loads(Path(path).read_text(encoding="utf-8"))
return contract_draft_from_dict(data)
# 把 JSON 字典收成起草草稿。缺的字段留空,页面步骤有值才填。
def contract_draft_from_dict(data: dict[str, Any]) -> ContractDraft:
goods_lines = [
ContractGoodsLine(
operation_code=str(item.get("operationCode", "")),
goods_code=str(item.get("goodsCode", "")),
goods_name=str(item.get("goodsName", "")),
approval_no=str(item.get("approvalNo", "")),
spec=str(item.get("spec", "")),
unit=str(item.get("unit", "")),
quantity=float(item.get("quantity", 0) or 0),
mdm_code=str(item.get("mdmCode", "")),
unit_price=str(item.get("unitPrice", "")),
)
for item in data.get("goodsLines", [])
]
return ContractDraft(
supplier_name=str(data.get("supplierName", "")),
order_date=str(data.get("orderDate", "")),
source_type=str(data.get("sourceType", "")),
template_type=str(data.get("templateType", "FORMAT")),
template_name=str(data.get("templateName", "")),
customer_code=str(data.get("customerCode", "")),
customer_name=str(data.get("customerName", "")),
contract_category=str(data.get("contractCategory", "")),
settlement_type=str(data.get("settlementType", "")),
contract_background=str(data.get("contractBackground", "")),
contract_nature=str(data.get("contractNature", "")),
amount_currency=str(data.get("amountCurrency", "")),
amount_type=str(data.get("amountType", "")),
amount=str(data.get("amount", "")),
contract_title=str(data.get("contractTitle") or data.get("docSubject") or ""),
contract_end_date=str(data.get("contractEndDate", "")),
contract_sign_date=str(data.get("contractSignDate", "")),
contract_start_date=str(data.get("contractStartDate", "")),
is_major_contract=str(data.get("isMajorContract", "")),
is_prepayment=str(data.get("isPrepayment", "")),
belong_year=str(data.get("belongYear", "")),
payment_method=str(data.get("paymentMethod", "")),
payment_days=str(data.get("paymentDays", "")),
contract_status=str(data.get("contractStatus", "")),
contains_blood_products=str(data.get("containsBloodProducts", "")),
submit_mode=str(data.get("submitMode", "submit")),
goods_lines=goods_lines,
platform_pdf_paths=[str(path) for path in data.get("platformPdfPaths", [])],
merged_pdf_path=data.get("mergedPdfPath"),
contract_document_path=str(
data.get("contractDocumentPath") or data.get("contractBodyPath") or ""
),
order_no_list=[str(x) for x in data.get("orderNoList", [])],
)