王 垚
2021-12-10 742d7030e86066437d8005007337821302bd7e61
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
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.List.PlugIn;
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_DayPlanList : AbstractListPlugIn
    {
        //点击按钮触发
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            //关闭
            if (e.BarItemKey.Equals("BTNCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
 
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
 
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID in ({FID})";
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    this.View.ShowMessage("操作成功");
                }
            }
            //反关闭
            else if (e.BarItemKey.Equals("BTNCANCELCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
 
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
 
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    //验证 关闭订单 
                    //验证所选订单是否存在相同数据 生产订单号+生产订单明细行号
                    string errmsg = "";
                    string fbillno = "";
                    string yzSql = string.Format(@"/*dialect*/
SELECT FBILLNO FROM SC_WORKBILLSORTBILLMAIN WHERE FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) IN (
SELECT FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) FROM  SC_WORKBILLSORTBILLMAIN 
WHERE FID IN ({0})  
GROUP BY 
FSCORDERNO,FSRCBILLENTRYSEQ
HAVING COUNT(*)>1
)", FID);
                    DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "所选订单中存在相同生产订单和明细行号数据,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    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 = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "\n" + "所选订单中存在生产订单和明细行号关闭后数据重复,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID})";
                    if (fbillno.Length > 0) { 
                        fbillno = fbillno.Substring(0, fbillno.Length - 1);
                        sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID}) AND FBILLNO NOT IN ({fbillno})";
                    }
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    if (errmsg != "")
                    {
                        this.View.ShowMessage("部分单据操作成功\n" + errmsg);
                        return;
                    }
                    this.View.ShowMessage("操作成功");
                }
            }
        }
    }
}