王 垚
2021-02-16 211bb749ab809dab4276c66a5d23bb5ea053ba8f
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using System;
using System.ComponentModel;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
 
namespace Demo.BillView.PRD
{
    [Description("提料下推送货通知单")]
    [Kingdee.BOS.Util.HotUpdate]
    public class Pro_TlPush : AbstractBillPlugIn
    {
        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            try
            {
                string a;
                if ((a = e.BarItemKey.ToUpperInvariant()) != null)
                {
                    if (a == "TBPUSH")
                    {
                        // 获取父单据体
                        Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                                                                                        //DynamicObjectCollection entityRows = entity.DynamicProperty.GetValue(this.Model.DataObject) as DynamicObjectCollection;//获取父单据体行集合
                        DynamicObjectCollection entityRows = this.Model.GetEntityDataObject(entity);//获取父单据体行集合
                                                                                                    // 1和2均可
                                                                                                    // 取当前页面子单据体
                                                                                                    //Entity subEntity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                                                                                                    //DynamicObjectCollection rows = this.Model.GetEntityDataObject(subEntity);//获得子单据体行集合
                                                                                                    //构建 model 主表
                        JObject model = new JObject();
                        model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = "SLD01_SYS" }); //单据类型
                        model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
                        model.Add("FStockOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); // 收料组织 
                        model.Add("FPurOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); //采购组织
                        model.Add("FSupplierId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSupplierID") as DynamicObject)?["Number"].ToString() ?? "" }); //供应商
                        model.Add("FOwnerTypeIdHead", "BD_OwnerOrg");//  货主类型
                        model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主 
 
 
                        //model.Add("FPurchaserId", new JObject() { ["Fnumber"] = "" }); //采购员
                        //model.Add("FReceiverId", new JObject() { ["Fnumber"] = "" }); //收料员
                        //model.Add("FSupplyAddress", ""); //供货方地址
                        //model.Add("FConfirmerId", new JObject() { ["FUserID"] = "" }); // 确认人
                        //model.Add("FConfirmDate", "1900-01-01"); //确认日期 
                        //model.Add("FSupplyId", new JObject() { ["Fnumber"] = "" }); // 供货方 
                        //model.Add("FChargeId", new JObject() { ["Fnumber"] = "" }); // 收款方 
                        //model.Add("FSettleId", new JObject() { ["Fnumber"] = "" }); // 结算方 
                        //model.Add("FIsInsideBill", "false"); // 外部单据
                        //model.Add("FScanBox", "false"); // 序列号上传
 
                        //子表 数据模型
                        JArray Fentity = new JArray();
                        foreach (var item in entityRows)
                        {
                            JObject FentityModel = new JObject();
                            FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = (item["FHMaterID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 物料编码   
                            FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 单位   
                            FentityModel.Add("FPreDeliveryDate", this.Model.GetValue("FHDate").ToString()); //  预计到货日期   
                            FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 计价单位   
                            FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); //  库存单位   
                            FentityModel.Add("FActReceiveQty", item["FHQty"].ToString()); // 供应商送货数量   
                            FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//  货主类型
                            FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主 
                            FentityModel.Add("FSrcId", item["FHPOOrderInterID"].ToString());//  源单内码
                            FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//  源单类型
                            FentityModel.Add("FSrcBillNo", item["FHPOOrderBillNo"].ToString());//  源单单号
                            FentityModel.Add("FSRCENTRYID", item["FHPOOrderEntryID"].ToString());//  源单分录内码
                            FentityModel.Add("FORDERBILLNO", item["FHPOOrderBillNo"].ToString());//  源单单号
                            FentityModel.Add("FPOORDERENTRYID", item["FHPOOrderEntryID"].ToString());//  源单分录内码
                            FentityModel.Add("FTLId", this.View.Model.DataObject["Id"].ToString());//  提料源单内码
                            FentityModel.Add("FTLentryId", item["Id"].ToString());//  提料源单分录内码
                            FentityModel.Add("FTLOrderNo", this.Model.GetValue("FBillNo").ToString());//  提料源单分录内码
 
                            JArray Fentity2 = new JArray();
                            JObject FentityModel2 = new JObject();
                            FentityModel2.Add("FDetailEntity_Link_FRULEID", "a8c6b6e5-a8c0-4fc1-8592-6b76c2136cf9");
                            FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
                            FentityModel2.Add("FDetailEntity_Link_FSBillId", item["FHPOOrderInterID"].ToString());
                            FentityModel2.Add("FDetailEntity_Link_FSId", item["FHPOOrderEntryID"].ToString());
                            Fentity2.Add(FentityModel2);
                            FentityModel.Add("FDetailEntity_Link", Fentity2);
                            //单据转换关联关系
                            //FentityModel.Add("FAuxPropId", new JObject() { }); // 物料编码   
                            //FentityModel.Add("FConfirmDeliQty", 0); // 物料编码   
                            //FentityModel.Add("FConfirmDeliDate", "1900-01-01"); // 物料编码   
                            //FentityModel.Add("FConfirmInfo", ""); // 物料编码   
                            //FentityModel.Add("FDescription", ""); // 物料编码   
                            //FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = "" }); // 物料编码   
                            //FentityModel.Add("FLot", new JObject() { ["Fnumber"] = "" }); // 物料编码   
                            //FentityModel.Add("FSupplierLot", ""); // 物料编码   
                            //FentityModel.Add("FPrice", 0); // 物料编码   
                            //FentityModel.Add("FTaxPrice", 0); // 物料编码   
                            //FentityModel.Add("FDiscountRate", 0); // 物料编码   
                            //FentityModel.Add("FEntryTaxRate", 0); // 物料编码   
                            //FentityModel.Add("FStockBaseQty", 0); // 物料编码   
                            //FentityModel.Add("FStockQty", 0); // 物料编码   
                            //FentityModel.Add("FTaxCombination", new JObject() { ["Fnumber"] = "" }); // 物料编码   
                            //FentityModel.Add("FPriceBaseQty", 0); // 物料编码   
                            //FentityModel.Add("FStockInMaxQty", 0); // 物料编码   
                            //FentityModel.Add("FBaseStockInMaxQty", 0); // 物料编码   
                            //FentityModel.Add("FCheckInComing", "false"); // 物料编码   
                            //FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = "" }); // 物料编码   
                            //FentityModel.Add("FStockLocId", new JObject() { }); // 物料编码   
                            //FentityModel.Add("FStockStatusId", new JObject() { ["Fnumber"] = "" }); // 物料编码   
                            //FentityModel.Add("FProduceDate", "1900-01-01"); // 物料编码   
                            //FentityModel.Add("FExpiryDate", "1900-01-01"); // 物料编码 
 
                            Fentity.Add(FentityModel);
                        }
                        model.Add("FDetailEntity", Fentity); //明细信息
 
                        JObject _FentityModel = new JObject();
                        _FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); //  结算组织  
                        _FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" }); //  结算币别
                        _FentityModel.Add("FPricePoint", 0); //  定价时点
                        //FPricePoint  
                        model.Add("FinanceEntity ", _FentityModel);//财务信息
 
                        //model.Add("FinanceEntity ", new JObject() {
                        //"FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" },
                        //"FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" }
                        //});
 
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
                            ["NeedUpDateFields"] = new JArray(),
                            ["NeedReturnFields"] = new JArray(),
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                            // ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                            ["Model"] = model
                        };
 
                        var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc == "TRUE")
                        {
                            // 打开单据维护界面:以打开销售订单100001为例
                            // using Kingdee.BOS.Core.Bill;
                            string pageId = Guid.NewGuid().ToString();
                            BillShowParameter showParameter = new BillShowParameter();
                            showParameter.FormId = "SCP_ReceiveBill";
                            showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
                            showParameter.PageId = pageId;
                            showParameter.Status = OperationStatus.EDIT;
                            // 传入需要修改的销售订单内码,演示代码直接固定写死为100001
                            showParameter.PKey = saveObj["Result"]["Id"].ToString();
                            this.View.ShowForm(showParameter);
                        }
                        else
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            this.View.ShowErrMessage(jsonRoot.ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}