王 垚
2021-11-12 0ce538e3c3dc01153ce1bfc2d75276881206c222
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
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.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo.BillView.PRD
{
    [Description("[日计划工单] 表单插件"), HotUpdate]
    public class Pro_DayPlan : AbstractBillPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            try
            {
                //主表关闭
                if (e.BarItemKey.ToUpper() == "BTNCLOSE")
                {
                    var FID = this.View.Model.GetPKValue();
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID = {FID}";
                    DBServiceHelper.Execute(Context, sql);
                    this.View.Refresh();
                    this.View.ShowMessage("操作成功");
                }
                //反关闭
                if (e.BarItemKey.ToUpper() == "BTNCANCELCLOSE")
                {
                    var FID = this.View.Model.GetPKValue();
                    string yzSql = string.Format(@"/*dialect*/
SELECT A.FBILLNO FROM SC_WORKBILLSORTBILLMAIN A 
JOIN (SELECT * FROM SC_WORKBILLSORTBILLMAIN WHERE FDOCUMENTSTATUS <>'E') B ON A.FSCORDERNO=B.FSCORDERNO AND A.FSRCBILLENTRYSEQ=B.FSRCBILLENTRYSEQ
WHERE  A.FID IN ({0})
", FID);
                    DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        this.View.ShowErrMessage("反关闭后会存在生产订单和明细行号数据重复");
                        return;
                    }
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID = {FID}";
                    DBServiceHelper.Execute(Context, sql);
                    this.View.Refresh();
                    this.View.ShowMessage("操作成功");
                }
            }
            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);
                }
                var fid = this.View.Model.GetPKValue();
                sqlList.Add($"update Sc_WorkBillSortBillMain set FCloseCount = (select sum(FNotInStockCount) from Sc_WorkBillSortBillSub where FID ={fid}) where FID ={fid}");
                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);
                }
                var fid = this.View.Model.GetPKValue();
                sqlList.Add($"update Sc_WorkBillSortBillMain set FCloseCount = (select sum(FNotInStockCount) from Sc_WorkBillSortBillSub where FID ={fid}) where FID ={fid}");
                DBServiceHelper.ExecuteBatch(Context, sqlList);
                this.View.Refresh();
                this.View.ShowMessage("操作成功");
            }
 
        }
    }
}