1
Jianw
9 天以前 70f29da38121b9a467841253e3268feb5df02902
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
--[[
   编码: 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