|
|
@@ -22,14 +22,35 @@ PREFIX = "UATRCT-"
|
|
|
|
|
|
|
|
|
def load_po_lines(cursor: Any) -> dict[int, list[dict[str, Any]]]:
|
|
|
+ """Load PO lines plus the supplier / UM / domain the receipt must inherit.
|
|
|
+
|
|
|
+ Domain / Supp / UM must be resolved here, not left NULL: the S5 purchase-receipt
|
|
|
+ MDP transform joins ItemMaster / SuppMaster / PurOrdDetail on (Domain, ...), and a
|
|
|
+ NULL domain makes every dimension lookup miss, so the page shows blank supplier /
|
|
|
+ item name / spec / PO number. Domain is taken from the supplier master of the PO's
|
|
|
+ own supplier — a purchase receipt belongs to the ERP domain its supplier is
|
|
|
+ defined in — falling back to the PO line, then the PO header.
|
|
|
+ """
|
|
|
tenant_ids = ",".join(str(x) for x in TENANTS)
|
|
|
cursor.execute(
|
|
|
f"""
|
|
|
- SELECT tenant_id,PurOrd,Line,ItemNum,QtyOrded,Potype,Domain,Site
|
|
|
- FROM PurOrdDetail
|
|
|
- WHERE tenant_id IN ({tenant_ids})
|
|
|
- AND IFNULL(PurOrd,'')<>'' AND IFNULL(ItemNum,'')<>'' AND IFNULL(QtyOrded,0)>0
|
|
|
- ORDER BY tenant_id,PurOrd,Line
|
|
|
+ SELECT d.tenant_id,d.PurOrd,d.Line,d.ItemNum,d.QtyOrded,d.Potype,d.Site,d.UM,
|
|
|
+ (SELECT m.Supp FROM PurOrdMaster m
|
|
|
+ WHERE m.tenant_id=d.tenant_id AND m.PurOrd=d.PurOrd LIMIT 1) AS Supp,
|
|
|
+ COALESCE(
|
|
|
+ (SELECT s.Domain FROM SuppMaster s
|
|
|
+ WHERE s.tenant_id=d.tenant_id
|
|
|
+ AND s.Supp=(SELECT m2.Supp FROM PurOrdMaster m2
|
|
|
+ WHERE m2.tenant_id=d.tenant_id AND m2.PurOrd=d.PurOrd LIMIT 1)
|
|
|
+ LIMIT 1),
|
|
|
+ d.Domain,
|
|
|
+ (SELECT m3.Domain FROM PurOrdMaster m3
|
|
|
+ WHERE m3.tenant_id=d.tenant_id AND m3.PurOrd=d.PurOrd LIMIT 1)
|
|
|
+ ) AS Domain
|
|
|
+ FROM PurOrdDetail d
|
|
|
+ WHERE d.tenant_id IN ({tenant_ids})
|
|
|
+ AND IFNULL(d.PurOrd,'')<>'' AND IFNULL(d.ItemNum,'')<>'' AND IFNULL(d.QtyOrded,0)>0
|
|
|
+ ORDER BY d.tenant_id,d.PurOrd,d.Line
|
|
|
"""
|
|
|
)
|
|
|
rows: dict[int, list[dict[str, Any]]] = defaultdict(list)
|
|
|
@@ -74,17 +95,18 @@ def apply() -> dict[str, Any]:
|
|
|
cursor.execute(
|
|
|
"""
|
|
|
INSERT INTO PurOrdRctMaster
|
|
|
- (RecID,Domain,RctType,Receiver,RctDate,OrdNbr,PerformDate,Site,BusinessID,
|
|
|
+ (RecID,Domain,Supp,RctType,Receiver,RctDate,OrdNbr,PerformDate,Site,BusinessID,
|
|
|
CreateUser,UpdateUser,CreateTime,UpdateTime,IsActive,IsConfirm,Print,
|
|
|
IsChanged,TaxIn,IsExport,IsPlan,IsBackwash,Remark,tenant_id)
|
|
|
VALUES
|
|
|
- (%s,%s,'RCT',%s,%s,%s,%s,%s,%s,
|
|
|
+ (%s,%s,%s,'rc',%s,%s,%s,%s,%s,%s,
|
|
|
'UAT_GENERATOR','UAT_GENERATOR',NOW(),NOW(),1,1,0,
|
|
|
0,0,0,0,0,'UAT_GENERATOR:采购收货业务事实',%s)
|
|
|
""",
|
|
|
(
|
|
|
master_id,
|
|
|
first["Domain"],
|
|
|
+ first["Supp"],
|
|
|
receiver,
|
|
|
receipt_date,
|
|
|
po_no,
|
|
|
@@ -104,14 +126,14 @@ def apply() -> dict[str, Any]:
|
|
|
cursor.execute(
|
|
|
"""
|
|
|
INSERT INTO PurOrdRctDetail
|
|
|
- (RecID,Domain,RctType,Receiver,Line,ItemNum,Dimension1,Dimension2,
|
|
|
+ (RecID,Domain,Supp,RctType,Receiver,Line,ItemNum,UM,Dimension1,Dimension2,
|
|
|
OrdNbr,OrdLine,RctDate,POCost,QtyOrded,RctQty,QtyReceived,Site,
|
|
|
Location,Potype,BusinessID,CreateUser,UpdateUser,CreateTime,UpdateTime,
|
|
|
IsActive,IsConfirm,IsChanged,TaxIn,UMConversion,IsClosed,IsRounding,
|
|
|
BlanketLine,ProjectLine,RctLine,QtyReturn,PurOrdRctRecID,QcQty,QC,
|
|
|
Remark,tenant_id)
|
|
|
VALUES
|
|
|
- (%s,%s,'RCT',%s,%s,%s,'','',%s,%s,%s,1,%s,%s,%s,%s,
|
|
|
+ (%s,%s,%s,'rc',%s,%s,%s,%s,'','',%s,%s,%s,1,%s,%s,%s,%s,
|
|
|
'UAT',%s,%s,'UAT_GENERATOR','UAT_GENERATOR',NOW(),NOW(),
|
|
|
1,1,0,0,1,0,0,0,0,%s,0,%s,%s,'PASS',
|
|
|
'UAT_GENERATOR:采购收货明细',%s)
|
|
|
@@ -119,9 +141,11 @@ def apply() -> dict[str, Any]:
|
|
|
(
|
|
|
detail_id,
|
|
|
line["Domain"],
|
|
|
+ line["Supp"],
|
|
|
receiver,
|
|
|
line_index,
|
|
|
line["ItemNum"],
|
|
|
+ line["UM"],
|
|
|
po_no,
|
|
|
int(line["Line"] or line_index),
|
|
|
receipt_date,
|