init: 博特维采购订单系统 v1.0 源码
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""端到端冒烟:制单 → 提交 → 主管审核 → 经理批准 → 导出 PDF。"""
|
||||
import http.cookiejar
|
||||
import os
|
||||
import re
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
BASE = "http://127.0.0.1:8080"
|
||||
OUT = r"D:\2026-09-09-task-18\tools\out"
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
|
||||
|
||||
def new_session():
|
||||
cj = http.cookiejar.CookieJar()
|
||||
return urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
|
||||
|
||||
|
||||
def post(op, path, data):
|
||||
body = urllib.parse.urlencode(data).encode()
|
||||
req = urllib.request.Request(BASE + path, data=body)
|
||||
r = op.open(req, timeout=30)
|
||||
return r.geturl(), r.read().decode("utf-8", "replace")
|
||||
|
||||
|
||||
def get(op, path):
|
||||
r = op.open(BASE + path, timeout=30)
|
||||
return r.geturl(), r.read()
|
||||
|
||||
|
||||
def login(user, pwd):
|
||||
op = new_session()
|
||||
url, html = post(op, "/login", {"username": user, "password": pwd})
|
||||
assert "/login" not in url, "%s 登录失败" % user
|
||||
print(" login %s ok" % user)
|
||||
return op
|
||||
|
||||
|
||||
def make_order(op, doc_type, supplier_id, n_items):
|
||||
url, _ = post(op, "/orders/new", {"doc_type": doc_type, "supplier_id": supplier_id})
|
||||
m = re.search(r"/orders/(\d+)", url)
|
||||
oid = int(m.group(1))
|
||||
form = [
|
||||
("order_date", "2026-09-09"), ("tax_rate", "13%"),
|
||||
("supplier_name", "苏州精锐五金制品有限公司"),
|
||||
("supplier_contact", "周经理"), ("supplier_phone", "13800000001"),
|
||||
("payment_terms", "月结30天"), ("supplier_tax_no", "91320500MA1XXXXXXX"),
|
||||
("supplier_bank_account", "4562 1088 0012 3456"),
|
||||
("supplier_bank_name", "中国银行苏州工业园区支行"),
|
||||
("our_company", "苏州博特维智能科技有限公司"),
|
||||
("our_contact", "胡乃琛"), ("our_phone", "13913172516"),
|
||||
("our_tax_no", "91320594MA1YYYYYYY"),
|
||||
("delivery_place", "苏州市工业园区星汉街5号腾飞新苏工业坊B幢5楼05-06单元 胡乃琛 13913172516"),
|
||||
("note", "本单为系统测试单,含 & <特殊> 字符校验"),
|
||||
]
|
||||
for i in range(n_items):
|
||||
form += [
|
||||
("item_code", "M-10%02d" % (i + 1)),
|
||||
("item_spec", "测试物料 规格 A&B <%d>" % (i + 1)),
|
||||
("item_unit", "件"), ("item_qty", "12.5"), ("item_price", "38.5"),
|
||||
("item_date", "2026-09-20"), ("item_remark", "行%d" % (i + 1)),
|
||||
]
|
||||
post(op, "/orders/%d" % oid, form)
|
||||
return oid
|
||||
|
||||
|
||||
def run(tag, doc_type, n_items):
|
||||
print("[%s] doc=%s items=%d" % (tag, doc_type, n_items))
|
||||
maker = login("maker", "123456")
|
||||
oid = make_order(maker, doc_type, 1, n_items)
|
||||
print(" 制单 ok, id=%d" % oid)
|
||||
post(maker, "/orders/%d/submit" % oid, {"comment": "请审核"})
|
||||
|
||||
rv = login("reviewer", "123456")
|
||||
post(rv, "/orders/%d/review" % oid, {"comment": "同意"})
|
||||
|
||||
ap = login("approver", "123456")
|
||||
post(ap, "/orders/%d/approve" % oid, {"comment": "批准"})
|
||||
print(" 审核流程 ok")
|
||||
|
||||
_, data = get(ap, "/orders/%d/pdf" % oid)
|
||||
path = os.path.join(OUT, "%s.pdf" % tag)
|
||||
with open(path, "wb") as f:
|
||||
f.write(data)
|
||||
print(" PDF -> %s (%d bytes)" % (path, len(data)))
|
||||
|
||||
# 草稿水印版
|
||||
oid2 = make_order(maker, doc_type, 1, 2)
|
||||
_, data2 = get(maker, "/orders/%d/pdf" % oid2)
|
||||
p2 = os.path.join(OUT, "%s_draft.pdf" % tag)
|
||||
with open(p2, "wb") as f:
|
||||
f.write(data2)
|
||||
print(" 草稿 PDF -> %s (%d bytes)" % (p2, len(data2)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run("purchase", "purchase", 3)
|
||||
run("outsourcing_30rows", "outsourcing", 30)
|
||||
print("ALL DONE")
|
||||
Reference in New Issue
Block a user