王 垚
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
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.BillView.PRD
{
    [Description("[生产领料单] 表单插件"), HotUpdate]
    public class Prd_Pickmtrl : AbstractBillPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)  
        {
            base.BarItemClick(e);
            try
            {
                if (e.BarItemKey.ToUpper() == "TBDAYPLANMENU")
                {
                    string pageId = Guid.NewGuid().ToString();
                    ListShowParameter showParameter = new ListShowParameter();
                    showParameter.FormId = "Paez_Sc_WorkBillAutoSortBill";
                    showParameter.PageId = pageId;
                    showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID;
                    showParameter.IsLookUp = true;
                    this.View.ShowForm(showParameter);
 
                    this.View.ShowForm(showParameter, delegate (FormResult result)
                    {
                        object returnData = result.ReturnData;
                        if (returnData is ListSelectedRowCollection)
                        {
                            ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
                            if (listSelectedRowCollection != null)
                            {
                                DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow;
 
                                this.View.Model.SetValue("FMATERIALID", datarow.DynamicObject["FHMaterID_Id"].ToString());
                                this.View.Model.SetValue("FPROORDERNO", datarow.DynamicObject["FSCOrderNo"].ToString());
                                this.View.Model.SetValue("FQty", datarow.DynamicObject["FHOrderNeedQty"].ToString());
                                this.View.Model.SetValue("FDayPlanFID", datarow.DynamicObject["FID"].ToString());
                                this.View.Model.SetValue("FDayPlanFentryID", datarow.DynamicObject["t1_FENTRYID"].ToString());
                                this.View.Model.SetValue("FSourceBillNo", datarow.DynamicObject["FBillNo"].ToString());
                                this.View.Model.SetValue("FSourceBillType", datarow.DynamicObject["FBillTypeID"].ToString());
                            }
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
 
        public override void EntryBarItemClick(BarItemClickEventArgs e)
        {
            base.EntryBarItemClick(e);
            if (e.BarItemKey.ToUpper() == "TBROWCLOSE")
            {
                int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows();        //单据体数据    
                Array.Sort(selectedIndexsR);
                DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据   
                DynamicObject selectedRow;
                StringBuilder result = new StringBuilder();
                List<string> sqlList = new List<string>();
                foreach (var item in selectedIndexsR)
                {
                    selectedRow = selectedRowsDy[item];
                    string sql = string.Format(@"
/*dialect*/
select isnull(c.FRealQty,0)FRealQty from Sc_WorkBillSortBillSub a
left join T_PRD_MORPTENTRY b on a.FEntryID = b.FDAYPLANFID
left join T_PRD_INSTOCKENTRY c on b.FENTRYID = c.FSrcEntryId
where a.FEntryID in ({0})", selectedRow["Id"]);
                    decimal FRealQty = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
                    if (FRealQty == 0)
                    {
                        result.Append($"分录行:{selectedRow["Seq"]},日计划明细未下推生成生产入库单\r\n");
                        continue;
                    }
                    sql = string.Format(@"
/*dialect*/
select count(*)res from Sc_WorkBillSortBillSub a 
left join Sc_DayPlanPPBomBillMain b on a.FEntryID = b.FDayPlanFID
left join Sc_DayPlanPPBomBillSub c on b.FID = c.FID
where a.FEntryID in ({0})
and FISSUETYPE in (1, 2)
and FDwyl * {1} < FPickedQty", selectedRow["Id"], FRealQty);
                    decimal Count = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0);
                    if (Count > 0)
                    {
                        result.Append($"分录行:{selectedRow["Seq"]},下游领料单的已领料数小于入库的标准用量\r\n");
                        continue;
                    }
                    sql = string.Format(@"
/*dialect*/
update Sc_WorkBillSortBillSub set 
FInStockCount = {0},
FNotInStockCount = FHQty - {0},
FHEntryCloseDate = getdate(),
FHCloseTypeSub = 1
where FEntryID={1}", FRealQty, selectedRow["Id"]);
                    sqlList.Add(sql);
                }
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                this.View.Refresh();
                if (string.IsNullOrEmpty(result.ToString()))
                    this.View.ShowMessage("操作成功");
                else
                    this.View.ShowErrMessage(result.ToString());
                
            }
            else if (e.BarItemKey.ToUpper() == "TBROWCANCELCLOSE")
            {
                int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows();        //单据体数据    
                Array.Sort(selectedIndexsR);
                DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据   
                DynamicObject selectedRow;
                List<string> sqlList = new List<string>();
                foreach (var item in selectedIndexsR)
                {
                    selectedRow = selectedRowsDy[item];
                    string sql = string.Format(@"
/*dialect*/
update Sc_WorkBillSortBillSub set 
FInStockCount = 0,
FNotInStockCount =0,
FHEntryCloseDate = null,
FHCloseTypeSub = 0
where FEntryID={0}", selectedRow["Id"]);
                    sqlList.Add(sql);
                }
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                this.View.Refresh();
                this.View.ShowMessage("操作成功");
            }
 
        }
    }
}