--[[
|
编码: AMS-105-12
|
名称:
|
作者:
|
日期:2025-05-23
|
|
函数: AfterSubmit
|
功能: 提交后处理,审核入库单并合并物料明细
|
|
更改记录:
|
2025-05-25 添加合并物料明细功能
|
--]]
|
|
json = require("json")
|
mobox = require("OILua_JavelinExt")
|
m3 = require("oi_base_mobox")
|
wms_base = require ("wms_base")
|
|
function AfterSubmit(strLuaDEID)
|
local nRet, strRetInfo
|
local data_json, obj_attrs
|
nRet, data_json = m3.GetSysDataJson(strLuaDEID)
|
if (nRet ~= 0) then
|
lua.Error(strLuaDEID, debug.getinfo(1), data_json)
|
end
|
|
local nCount = #data_json
|
if (nCount == 0) then
|
return
|
end
|
|
lua.Debug(strLuaDEID, debug.getinfo(1), "data_json", data_json)
|
|
local obj_attrs
|
local state
|
local err = {}
|
local strCondition, strSetAttr
|
|
for n = 1, #data_json do
|
obj_attrs = m3.KeyValueAttrsToObjAttr(data_json[n].attrs)
|
lua.Debug(strLuaDEID, debug.getinfo(1), "obj_attrs --> ", obj_attrs)
|
state = obj_attrs.S_STATE
|
|
if (state == '编辑') then
|
-- 1. 先查询明细并合并物料
|
local detailCondition = "S_IO_NO = '"..obj_attrs.S_NO.."'"
|
nRet, strRetInfo = m3.QueryDataObject(strLuaDEID, "ERP_Inbound_Detail", detailCondition)
|
if (nRet ~= 0) then
|
lua.Error(strLuaDEID, debug.getinfo(1), "查询明细失败: "..strRetInfo)
|
end
|
lua.Debug(strLuaDEID, debug.getinfo(1), "strRetInfo --> ", strRetInfo)
|
|
local mergedItems = {}
|
|
-- 合并相同物料的数量
|
for _, item in ipairs(strRetInfo) do
|
local inbound_attrs = m3.KeyValueAttrsToObjAttr(item.attrs)
|
local itemCode = inbound_attrs.S_ITEM_CODE
|
local item_name = inbound_attrs.S_ITEM_NAME
|
lua.Debug(strLuaDEID, debug.getinfo(1), "inbound_attrs --> ", inbound_attrs)
|
|
if mergedItems[itemCode] then
|
mergedItems[itemCode].F_QTY = (mergedItems[itemCode].F_QTY or 0) + (inbound_attrs.F_QTY or 0)
|
else
|
mergedItems[itemCode] = {
|
S_ITEM_CODE = itemCode,
|
F_QTY = inbound_attrs.F_QTY or 0,
|
S_ITEM_NAME = item_name,
|
|
}
|
end
|
end
|
lua.Debug(strLuaDEID, debug.getinfo(1), "mergedItems --> ", mergedItems)
|
local nRetCreate
|
local inbound_order = m3.AllocObject(strLuaDEID, "Inbound_Order")
|
inbound_order.wh_code = obj_attrs.S_WH_CODE
|
inbound_order.area_code = obj_attrs.S_AREA_CODE
|
inbound_order.no = obj_attrs.S_NO
|
inbound_order.state = "审核"
|
inbound_order.bs_no = obj_attrs.S_BS_NO
|
inbound_order.op_type = obj_attrs.S_OP_TYPE
|
|
nRetCreate, inbound_order = m3.CreateDataObj(strLuaDEID, inbound_order)
|
if nRetCreate ~= 0 then
|
lua.Stop(strLuaDEID, "创建 Inbound_Order 失败:" .. inbound_order)
|
return
|
end
|
|
|
-- 3. 创建Inbound_Detail记录(合并后的)
|
for itemCode, mergedItem in pairs(mergedItems) do
|
local nRet, strRetInfo
|
local inbound_detail = m3.AllocObject(strLuaDEID, "Inbound_Detail")
|
inbound_detail.io_no = obj_attrs.S_NO
|
inbound_detail.item_code = mergedItem.S_ITEM_CODE
|
inbound_detail.item_name = mergedItem.S_ITEM_NAME
|
inbound_detail.qty = mergedItem.F_QTY
|
|
nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, inbound_detail)
|
if nRet ~= 0 then
|
lua.Stop(strLuaDEID, "创建 Inbound_Detail 失败:" .. strRetInfo)
|
return
|
end
|
|
end
|
|
-- 4. 更新原单据状态
|
strCondition = "S_NO = '"..obj_attrs.S_NO.."'"
|
strSetAttr = "S_STATE = '审核'"
|
nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, "ERP_Inbound_Order", strCondition, strSetAttr)
|
if (nRet ~= 0) then
|
lua.Error(strLuaDEID, debug.getinfo(1), "更新数据失败: "..strRetInfo)
|
end
|
else
|
table.insert(err, obj_attrs.S_NO)
|
end
|
end
|
|
if (#err > 0) then
|
local err_msg = "单据状态不为编辑,不能审核!" .. table.concat(err, ",")
|
mobox.setInfo(strLuaDEID, err_msg)
|
end
|
|
local action = {
|
{
|
action_type = "refresh",
|
value = ""
|
}
|
}
|
nRet, strRetInfo = mobox.setAction(strLuaDEID, lua.table2str(action))
|
if (nRet ~= 0) then
|
lua.Error(strLuaDEID, debug.getinfo(1), "setAction错误: "..strRetInfo)
|
end
|
end
|