王 垚
2022-09-05 226dd2b152c0fb06b3f8108ac7740216a8a453c6
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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
using Kingdee.BOS.Orm.DataEntity;
using System.ComponentModel;
using System;
using System.Collections.Generic;
using System.Linq;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using System.Data;
using System.Diagnostics;
using Demo.Model.Model;
using Demo.Model.Model.PODemandPlan;
using ZD.Share.Common;
using Newtonsoft.Json.Linq;
using ZD.Cloud.WebApi;
using Kingdee.BOS.Core;
using Kingdee.BOS.KDThread;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.CommonFilter;
 
namespace Demo.BillView.PRD
{
    [Description("采购订单 列表插件")]
    [HotUpdate]
 
    public class Pur_OrderList : AbstractListPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            //生成提料计划单
            if (e.BarItemKey.ToUpper().Equals("BTNPUSH"))
            {
                btnPush();
            }
 
        }
        /// <summary>
        /// 生成送货单
        /// </summary>
        /// <returns></returns>
        public void btnPush()
        {
            try
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
                if (selectRows.Count == 0)
                {
                    this.View.ShowMessage("请选择需要生成提料计划单的单据!", MessageBoxType.Notice);
                    return;
                }
                List<string> fidList = selectRows.GetEntryPrimaryKeyValues().ToList();
                string fids = string.Join(",", fidList);
                string sql = string.Format(@"/*dialect*/  
select t1.FDOCUMENTSTATUS,FCLOSESTATUS,FCANCELSTATUS,FMRPCloseStatus,FMRPFreezeStatus,FMRPTerminateStatus,t4.FSTOCKINQTY,t4.FReceiveQty,t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,T9.FNUMBER as FMATERIALNUMBER,(t4.FREMAINRECEIVEQTY-t2.FPODemandPlanCount)FQTY
,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FCloseStatus,FMRPCLOSESTATUS,FPURCHASEDEPTID,t7.FNUMBER as FPURCHASEDEPTNUMBER
,t1.FCREATORID,t8.FName ,t1.FDate,tD.FDeliveryDate,t2.FNOTE, t2.FSTOCKINQTY,t2.FReceiveQty,(t4.FReceiveQty - t4.FSTOCKINQTY) as  FReceiveNotInQty,t2.FXQD,T2.FQTY AS FPURCHASEQTY,FJOINQTY,
isnull((select top 1 FLEADTIME +  FLEADTTIME2  from T_PRD_TLPlanConfig a 
 join T_PRD_TLPlanConfigEntry b on a.FID =b.FID
 where a.FORGID = t1.FPurchaseOrgId and b.FSUPPLIERID = t1.FSUPPLIERID), 0)FFIXLEADTIME
from t_PUR_POOrder t1 
join t_PUR_POOrderEntry t2 on t1.FID = t2.FID
join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID
join  T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID
join  T_PUR_POORDERENTRY_D tD on t2.FENTRYID = tD.FENTRYID
join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID
join T_SEC_user t8 on t1.FCREATORID = t8.FuserId
LEFT join T_BD_DEPARTMENT T7 ON t1.FPURCHASEDEPTID = T7.FDEPTID
join T_BD_MATERIAL T9 ON t2.FMATERIALID = T9.FMATERIALID
where t2.FentryId in ({0})
", fids);
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                List<string> errList = new List<string>();
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["FDOCUMENTSTATUS"].ToString() == "C" && dr["FCLOSESTATUS"].ToString() == "A" && dr["FCANCELSTATUS"].ToString() == "A" && dr["FMRPCloseStatus"].ToString() == "A" && dr["FMRPFreezeStatus"].ToString() == "A" && dr["FMRPTerminateStatus"].ToString() == "A")
                    {
 
                    }
                    else
                    {
                        this.View.ShowMessage("请选择已审核,未关闭,未作废数据!");
                        return;
                    }
 
                    if (Convert.ToDecimal(dr["FPURCHASEQTY"]) <= Convert.ToDecimal(dr["FReceiveQty"]))
                    {
                        this.View.ShowMessage($"单据号:{dr["FBILLNO"].ToString()},物料:{dr["FMATERIALNUMBER"].ToString()},采购数量:{Convert.ToDecimal(dr["FPURCHASEQTY"])},收料单数量:{Convert.ToDecimal(dr["FReceiveQty"])};没有数量可以生成提料计划单,请检查!", MessageBoxType.Notice);
                        return;
                    }
                    if (errList.Contains(dr["FStockOrgId"].ToString() + dr["FSUPPLIERID"].ToString() + dr["FDate"].ToString()))
                        continue;
                    else
                        errList.Add(dr["FStockOrgId"].ToString() + dr["FSUPPLIERID"].ToString() + dr["FDate"].ToString());
                }
                if (errList.Count > 1)
                {
                    this.View.ShowMessage("选中的数据存在供应商+采购日期不一致数据,请检查!", MessageBoxType.Notice);
                    return;
                }
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                string PurchseFNUMBER = dt.Rows[0]["fnumber"].ToString(); //供应商
                string FWorkshopNumber = dt.Rows[0]["FPURCHASEDEPTNUMBER"].ToString(); //采购部门
                string FCreatorID = dt.Rows[0]["FCREATORID"].ToString();
                string FORGNumber = dt.Rows[0]["FORGNumber"].ToString();
                JObject model = new JObject();
                model.Add("FHDate", dt.Rows[0]["FDate"].ToString());
                model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
                model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER });
                model.Add("FHMaker", new JObject() { ["FUserID"] = Context.UserId });
                model.Add("FHUpDater ", new JObject() { ["FUserID"] = Context.UserId }); //修改人
                model.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = FORGNumber });//组织
                JArray Fentity = new JArray();
                foreach (var _item in PurchaseInventory)
                {
                    JObject FentityModel = new JObject();
                    FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FMATERIALNUMBER });//物料
                    FentityModel.Add("FHQty", _item.FPURCHASEQTY- _item.FReceiveQty);//数量 = 
                    FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织
                    FentityModel.Add("FHPOOrderInterID", _item.FID);// 采购订单内码:FHPOOrderInterID
                    FentityModel.Add("FHPOOrderEntryID", _item.FENTRYID); //采购订单子内码:FHPOOrderEntryID
                    FentityModel.Add("FHPOOrderBillNo", _item.FBillNo); //采购订单号:FHPOOrderBillNo
                    FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //单位
 
                    FentityModel.Add("FSalOrderNo", _item.FXQD); //需求单号
                    FentityModel.Add("FCgddCreaterId", new JObject() { ["FUserID"] = _item.FCREATORID }); //采购员
                    FentityModel.Add("FCgDate", _item.FDate); //采购订单单据日期
                    FentityModel.Add("FCgDeliveryDate", _item.FDeliveryDate); //采购订单交货日期
                    FentityModel.Add("F_QIMB_NOTE", _item.F_QIMB_NOTE); //采购订单摘要
                    FentityModel.Add("FNOTE", _item.FNOTE); //采购订单表体备注
                    FentityModel.Add("FDAYPLANBILLNO", _item.FBillNo); //日计划工单号
                    FentityModel.Add("FPURCHASEDEPTID", new JObject() { ["Fnumber"] = FWorkshopNumber }); //采购部门
                    FentityModel.Add("FCgddQty", _item.FPURCHASEQTY); //采购订单数量
                    FentityModel.Add("FCGDDJOINQTY", _item.FJOINQTY); //采购订单关联数量
 
                    Fentity.Add(FentityModel);
                }
                model.Add("FEntity", Fentity);
                JObject jsonRoot = new JObject()
                {
                    ["Creator"] = "",
                    ["NeedUpDateFields"] = new JArray(),
                    ["NeedReturnFields"] = new JArray(),
                    ["IsDeleteEntry"] = "false",
                    ["SubSystemId"] = "",
                    ["IsVerifyBaseDataField"] = "false",
                    ["Model"] = model
                };
                CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString());
                //LogService.Write("result"+ result);
                JObject saveObj = JObject.Parse(result);
                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                if (saveIsSuc == "TRUE")
                {
                    string pageId = Guid.NewGuid().ToString();
                    BillShowParameter showParameter = new BillShowParameter();
                    showParameter.FormId = "paez_PODemandPlan";
                    showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
                    showParameter.PageId = pageId;
                    showParameter.Status = OperationStatus.EDIT;
                    // 传入需要修改的销售订单内码,演示代码直接固定写死为100001
                    showParameter.PKey = saveObj["Result"]["Id"].ToString();
                    this.View.ShowForm(showParameter);
                }
                else
                {
                    this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    return;
                }
            }
            catch (Exception ex)
            {
                this.View.ShowMessage(ex.Message.ToString());
            }
        }
 
        public void OpenPurOrder()
        {
            //获取选择记录
            ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
            if (selectRows.Count == 0)
            {
                this.View.ShowMessage("请选择数据!", MessageBoxType.Notice);
                return;
            }
            List<string> fidList = selectRows.GetEntryPrimaryKeyValues().ToList();
            string fentryids = string.Join(",", fidList);
            string sql = string.Format("/*dialect*/ select distinct FHPOORDERENTRYID from Cg_PODemandPlanBillSub where FentryId in ({0})", fentryids);
            DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
            string purfentryids = string.Empty;
            foreach (DataRow dr in dt.Rows)
            {
                purfentryids += dr["FHPOORDERENTRYID"] + ",";
            }
            purfentryids = purfentryids.Substring(0, purfentryids.Length - 1);
            // 采购订单        
            string billNo = Convert.ToString(this.Model.GetValue("FBillNo"));
            string fldName = "t3.FEntryID";
            IRegularFilterParameter filterParameter = new ListRegularFilterParameter();
            filterParameter.Filter = string.Format(" {0} IN ({1}) ", fldName, purfentryids);
            filterParameter.SelectEntitys = new List<string>() { "FPOOrderEntry" };
            var listTrackParameter = new ListTrackBillShowParameter();
            listTrackParameter.FormId = "PUR_PurchaseOrder";
            listTrackParameter.PageId = Guid.NewGuid().ToString();
            listTrackParameter.IsShowFilter = false;
            listTrackParameter.ListFilterParameter = filterParameter;
            this.View.ShowForm(listTrackParameter);
        }
    }
}