frmChildEditWmsQaInspection.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. using ComponentFactory.Krypton.Toolkit;
  2. using NXWMS.Client.FrmCustom;
  3. using NXWMS.Client.Model.AppModels.Condition.Common;
  4. using NXWMS.Client.Model.AppModels.Result.Common;
  5. using NXWMS.Client.Model.AppModels.Result.Inspection;
  6. using NXWMS.Client.Model.AppModels.Result.Instock;
  7. using NXWMS.Client.Model.CoreModels;
  8. using NXWMS.Commons;
  9. using NXWMS.Services;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.ComponentModel;
  13. using System.Data;
  14. using System.Drawing;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Text.RegularExpressions;
  18. using System.Web.UI.WebControls;
  19. using System.Windows.Forms;
  20. using static NXWMS.Client.FrmCustom.CustomEventMsg;
  21. namespace NXWMS.Forms.Inspection.frmInspectionChild
  22. {
  23. /// <summary>
  24. /// 编辑质检单窗体类
  25. /// </summary>
  26. public partial class frmChildEditWmsQaInspection : KryptonForm
  27. {
  28. /// <summary>
  29. /// 窗体构造函数
  30. /// </summary>
  31. public frmChildEditWmsQaInspection()
  32. {
  33. InitializeComponent();
  34. }
  35. #region 全局变量
  36. /// <summary>
  37. /// 质检单主键ID
  38. /// </summary>
  39. public string InspectionId { get; set; }
  40. /// <summary>
  41. /// 数据库中的质检单所有数据(包括主、明细表)。
  42. /// 未进行编辑过。
  43. /// </summary>
  44. private WmsQaInspectionResult InspectionDataNotEdit = new WmsQaInspectionResult();
  45. List<WmsInArrivalDtlResult> lstReceiptDtl = new List<WmsInArrivalDtlResult>();
  46. #endregion
  47. #region 初始化数据
  48. /// <summary>
  49. /// 窗体加载函数
  50. /// </summary>
  51. /// <param name="sender"></param>
  52. /// <param name="e"></param>
  53. private void frmChildEditWmsQaInspection_Load(object sender, EventArgs e)
  54. {
  55. InitComboBoxItemData();
  56. InitDataGridViewColumn();
  57. kdtp_InspectionTime.Checked = false;
  58. LoadWmsQaInspectionDtlData();
  59. }
  60. /// <summary>
  61. /// 初始化下拉列表数据
  62. /// </summary>
  63. private void InitComboBoxItemData()
  64. {
  65. /*
  66. ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
  67. */
  68. List<BasDictionaryResult> results = new List<BasDictionaryResult>();
  69. #region 质检单类型
  70. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "InspectionTypeDesc");
  71. if (results.Count > 0)
  72. {
  73. kcmb_InspectionType.Items.Clear();
  74. foreach (var item in results)
  75. {
  76. kcmb_InspectionType.Items.Add(new ListItem
  77. {
  78. Value = item.DICTIONARY_ITEM_CODE,
  79. Text = item.DICTIONARY_ITEM_NAME,
  80. });
  81. }
  82. kcmb_InspectionType.SelectedIndex = 0;
  83. }
  84. else
  85. {
  86. KryptonMessageBox.Show("未找到质检单类型的字典项数据!");
  87. }
  88. #endregion
  89. #region 质检方式
  90. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "InspectionWayDesc");
  91. if (results.Count > 0)
  92. {
  93. kcmb_InspectionWay.Items.Clear();
  94. foreach (var item in results)
  95. {
  96. kcmb_InspectionWay.Items.Add(new ListItem
  97. {
  98. Value = item.DICTIONARY_ITEM_CODE,
  99. Text = item.DICTIONARY_ITEM_NAME,
  100. });
  101. }
  102. kcmb_InspectionWay.SelectedIndex = 0;
  103. }
  104. else
  105. {
  106. KryptonMessageBox.Show("未找到质检方式的字典项数据!");
  107. }
  108. #endregion
  109. }
  110. /// <summary>
  111. /// 初始化DataGridView列信息
  112. /// </summary>
  113. private void InitDataGridViewColumn()
  114. {
  115. DataGridViewColumn column1 = new KryptonDataGridViewTextBoxColumn();
  116. column1.HeaderText = "序号";
  117. column1.Width = 50;
  118. column1.ReadOnly = true;
  119. //column1.
  120. kdgv_InspectionDtlData.Columns.Add(column1);
  121. DataTable dt = CreateTable();
  122. DataGridViewColumn column = new DataGridViewDataWindowColumn();
  123. (column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单号,物料编码,物料名称,物料条码,批次号";
  124. (column as DataGridViewDataWindowColumn).SDisplayMember = "到货通知单号";
  125. (column as DataGridViewDataWindowColumn).SKeyWords = "到货通知单号";
  126. (column as DataGridViewDataWindowColumn).DataSource = dt;
  127. column.Width = 150;
  128. column.HeaderText = "到货通知单号";
  129. kdgv_InspectionDtlData.Columns.Add(column);
  130. column = new DataGridViewDataWindowColumn();
  131. (column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单号,物料编码,物料名称,物料条码,批次号";
  132. (column as DataGridViewDataWindowColumn).SDisplayMember = "物料编码";
  133. (column as DataGridViewDataWindowColumn).SKeyWords = "物料编码";
  134. (column as DataGridViewDataWindowColumn).DataSource = dt;
  135. column.HeaderText = "物料编码";
  136. column.Width = 200;
  137. kdgv_InspectionDtlData.Columns.Add(column);
  138. column = new DataGridViewDataWindowColumn();
  139. (column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单号,物料编码,物料名称,物料条码,批次号";
  140. (column as DataGridViewDataWindowColumn).SDisplayMember = "物料名称";
  141. (column as DataGridViewDataWindowColumn).SKeyWords = "物料名称";
  142. (column as DataGridViewDataWindowColumn).DataSource = dt;
  143. column.HeaderText = "物料名称";
  144. column.Width = 200;
  145. kdgv_InspectionDtlData.Columns.Add(column);
  146. column = new DataGridViewDataWindowColumn();
  147. (column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单号,物料编码,物料名称,物料条码,批次号";
  148. (column as DataGridViewDataWindowColumn).SDisplayMember = "物料条码";
  149. (column as DataGridViewDataWindowColumn).SKeyWords = "物料条码";
  150. (column as DataGridViewDataWindowColumn).DataSource = dt;
  151. column.HeaderText = "物料条码";
  152. column.Width = 150;
  153. kdgv_InspectionDtlData.Columns.Add(column);
  154. DataGridViewComboBoxColumn cmb_Unit = new DataGridViewComboBoxColumn();
  155. cmb_Unit.HeaderText = "质检结果";
  156. cmb_Unit.Width = 90;
  157. //目前写死下拉列表的数据项,后续改为后台获取
  158. cmb_Unit.Items.AddRange(new ListItem[]
  159. {
  160. new ListItem{ Value = "Wait",Text = "待检"},
  161. new ListItem{ Value = "OK",Text = "合格"},
  162. new ListItem{ Value = "NG",Text = "不合格"}
  163. });
  164. cmb_Unit.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
  165. kdgv_InspectionDtlData.Columns.Add(cmb_Unit);
  166. column1 = new KryptonDataGridViewTextBoxColumn();
  167. column1.HeaderText = "批次号";
  168. column1.Width = 120;
  169. kdgv_InspectionDtlData.Columns.Add(column1);
  170. column1 = new KryptonDataGridViewTextBoxColumn();
  171. column1.HeaderText = "单位";
  172. column1.Width = 70;
  173. kdgv_InspectionDtlData.Columns.Add(column1);
  174. column1 = new KryptonDataGridViewTextBoxColumn();
  175. column1.HeaderText = "供应商";
  176. column1.Width = 120;
  177. kdgv_InspectionDtlData.Columns.Add(column1);
  178. column1 = new KryptonDataGridViewTextBoxColumn();
  179. column1.HeaderText = "包装";
  180. column1.Width = 80;
  181. kdgv_InspectionDtlData.Columns.Add(column1);
  182. KryptonDataGridViewDateTimePickerColumn column_ProductTime = new KryptonDataGridViewDateTimePickerColumn();
  183. column_ProductTime.HeaderText = "生产日期";
  184. column_ProductTime.Width = 160;
  185. column_ProductTime.Format = DateTimePickerFormat.Custom;
  186. column_ProductTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
  187. kdgv_InspectionDtlData.Columns.Add(column_ProductTime);
  188. KryptonDataGridViewDateTimePickerColumn column_ExpTime = new KryptonDataGridViewDateTimePickerColumn();
  189. column_ExpTime.HeaderText = "失效日期";
  190. column_ExpTime.Width = 160;
  191. column_ExpTime.Format = DateTimePickerFormat.Custom;
  192. column_ExpTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
  193. kdgv_InspectionDtlData.Columns.Add(column_ExpTime);
  194. column1 = new KryptonDataGridViewTextBoxColumn();
  195. column1.HeaderText = "到货通知单明细ID";
  196. column1.Width = 30;
  197. column1.Visible = false;
  198. kdgv_InspectionDtlData.Columns.Add(column1);
  199. }
  200. /// <summary>
  201. /// 创建数据源表格
  202. /// </summary>
  203. /// <returns></returns>
  204. private DataTable CreateTable()
  205. {
  206. DataTable dt = new DataTable();
  207. DataColumn dc = new DataColumn("到货通知单号");
  208. dt.Columns.Add(dc);
  209. dc = new DataColumn("物料编码");
  210. dt.Columns.Add(dc);
  211. dc = new DataColumn("物料名称");
  212. dt.Columns.Add(dc);
  213. dc = new DataColumn("物料条码");
  214. dt.Columns.Add(dc);
  215. dc = new DataColumn("批次号");
  216. dt.Columns.Add(dc);
  217. dc = new DataColumn("到货通知单明细ID");
  218. dt.Columns.Add(dc);
  219. //var result = WmsInstockService.wmsInReceiptService.GetAllWaitForQaReceiptDtlData();
  220. var result = WmsInstockService.wmsInArrivalService.GetAllWaitForQaArrivalDtlData();
  221. if (result.Status == OperateStatus.Success)
  222. {
  223. foreach (WmsInArrivalDtlResult item in result.Data)
  224. {
  225. DataRow dr = dt.NewRow();
  226. dr["到货通知单号"] = item.ARRIVAL_NO;
  227. dr["物料编码"] = item.MATERIEL_CODE;
  228. dr["物料名称"] = item.MATERIEL_NAME;
  229. dr["物料条码"] = item.MATERIEL_BARCODE;
  230. dr["批次号"] = item.BATCH_NO;
  231. dr["到货通知单明细ID"] = item.ARRIVAL_DTL_ID;
  232. dt.Rows.Add(dr);
  233. }
  234. lstReceiptDtl = result.Data;
  235. }
  236. return dt;
  237. }
  238. /// <summary>
  239. /// 调用服务端接口,请求质检单明细表数据
  240. /// </summary>
  241. /// <returns></returns>
  242. private string LoadWmsQaInspectionDtlData()
  243. {
  244. var result = WmsInspectionService.wmsQaInspectionService.GetWmsQaInspectionDtlListForId(new WmsQaInspectionResult { INSPECTION_ID = Convert.ToInt32(this.InspectionId) });
  245. if (result.Status == OperateStatus.Success)
  246. {
  247. ktb_InspectionNo.Text = result.Data.INSPECTION_NO;
  248. ktb_InspectionNo.Enabled = false;
  249. ktb_InspectionUser.Text = result.Data.INSPECTION_USER;
  250. ktb_InspectionUser.Enabled = false;
  251. kcmb_InspectionType.Text = result.Data.INSPECTION_TYPE_NAME;
  252. kcmb_InspectionType.Enabled = false;
  253. kcmb_InspectionWay.Text = result.Data.INSPECTION_WAY_NAME;
  254. kcmb_InspectionWay.Enabled = false;
  255. ktb_Describe.Text = result.Data.DESCRIBE;
  256. if (result.Data.INSPECTION_TIME != new DateTime())
  257. {
  258. kdtp_InspectionTime.Value = result.Data.INSPECTION_TIME;
  259. }
  260. InspectionDataNotEdit = result.Data;
  261. kdgv_InspectionDtlData.Rows.Clear();
  262. foreach (WmsQaInspectionDtlResult item in result.Data.WmsQaInspectionDtlList)
  263. {
  264. int index = kdgv_InspectionDtlData.Rows.Add();
  265. kdgv_InspectionDtlData.Rows[index].Cells[0].Value = index + 1;
  266. kdgv_InspectionDtlData.Rows[index].Cells[1].Value = item.BILL_NO;
  267. kdgv_InspectionDtlData.Rows[index].Cells[2].Value = item.MATERIEL_CODE;
  268. kdgv_InspectionDtlData.Rows[index].Cells[3].Value = item.MATERIEL_NAME;
  269. kdgv_InspectionDtlData.Rows[index].Cells[4].Value = item.MATERIEL_BARCODE;
  270. ListItem inspectionResultLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_InspectionDtlData.Rows[index].Cells[5], item.INSPECTION_RESULT);
  271. kdgv_InspectionDtlData.Rows[index].Cells[5].Value = inspectionResultLstItm;
  272. kdgv_InspectionDtlData.Rows[index].Cells[6].Value = item.BATCH_NO;
  273. kdgv_InspectionDtlData.Rows[index].Cells[7].Value = item.UNIT_CODE;
  274. kdgv_InspectionDtlData.Rows[index].Cells[8].Value = item.SUPPLIER_NAME;
  275. kdgv_InspectionDtlData.Rows[index].Cells[9].Value = item.PACKAGE_CODE;
  276. kdgv_InspectionDtlData.Rows[index].Cells[10].Value = item.PRODUCT_DATE;
  277. kdgv_InspectionDtlData.Rows[index].Cells[11].Value = item.EXP_DATE;
  278. kdgv_InspectionDtlData.Rows[index].Cells[12].Value = item.BILL_DTL_ID;
  279. }
  280. return string.Empty;
  281. }
  282. else
  283. {
  284. return result.Message;
  285. }
  286. }
  287. #endregion
  288. #region 按钮事件
  289. /// <summary>
  290. /// 确认按钮事件
  291. /// 提交编辑完成的质检单数据
  292. /// </summary>
  293. /// <param name="sender"></param>
  294. /// <param name="e"></param>
  295. private void btnConfirm_Click(object sender, EventArgs e)
  296. {
  297. WmsQaInspectionResult mdInspection = new WmsQaInspectionResult();
  298. mdInspection.INSPECTION_ID = InspectionDataNotEdit.INSPECTION_ID;
  299. mdInspection.INSPECTION_NO = InspectionDataNotEdit.INSPECTION_NO;
  300. mdInspection.INSPECTION_TYPE = Convert.ToInt32(((ListItem)kcmb_InspectionType.SelectedItem).Value);
  301. mdInspection.INSPECTION_USER = ktb_InspectionUser.Text;
  302. mdInspection.INSPECTION_WAY = Convert.ToInt32(((ListItem)kcmb_InspectionType.SelectedItem).Value);
  303. if (kdtp_InspectionTime.Checked)
  304. {
  305. mdInspection.INSPECTION_TIME = kdtp_InspectionTime.Value;
  306. }
  307. else
  308. {
  309. mdInspection.INSPECTION_TIME = new DateTime();
  310. }
  311. mdInspection.INSPECTION_STATUS = InspectionDataNotEdit.INSPECTION_STATUS;
  312. mdInspection.DESCRIBE = ktb_Describe.Text.Trim();
  313. mdInspection.CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
  314. mdInspection.UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
  315. List<WmsQaInspectionDtlResult> mdInspectionDtlList = new List<WmsQaInspectionDtlResult>();
  316. if (kdgv_InspectionDtlData.Rows.Count > 0 && !kdgv_InspectionDtlData.Rows[0].IsNewRow)
  317. {
  318. foreach (DataGridViewRow dvr in kdgv_InspectionDtlData.Rows)
  319. {
  320. if (!dvr.IsNewRow)
  321. {
  322. #region 校验每一行数据的完整性
  323. string RowCheckMsg = string.Empty;
  324. if (!CheckDataGridViewRowFormat(dvr, ref RowCheckMsg))
  325. {
  326. KryptonMessageBox.Show(RowCheckMsg);
  327. return;
  328. }
  329. #endregion
  330. string receiptNo = dvr.Cells[1].Value.ToString();
  331. string materielCode = dvr.Cells[2].Value.ToString();
  332. string materielName = dvr.Cells[3].Value.ToString();
  333. string materielBarcode = dvr.Cells[4].Value == null ? null : dvr.Cells[4].Value.ToString();
  334. string inspectionResult = GetComboBoxItem((DataGridViewComboBoxCell)dvr.Cells[5]).Value;
  335. string batchNo = dvr.Cells[6].Value == null ? null : dvr.Cells[6].Value.ToString();
  336. string unitCode = dvr.Cells[7].Value == null ? null : dvr.Cells[7].Value.ToString();
  337. string supplierCode = dvr.Cells[8].Value == null ? null : dvr.Cells[8].Value.ToString();
  338. string packageCode = dvr.Cells[9].Value == null ? null : dvr.Cells[9].Value.ToString();
  339. DateTime productTime = Convert.ToDateTime(dvr.Cells[10].Value);
  340. DateTime expTime = Convert.ToDateTime(dvr.Cells[11].Value);
  341. int billDtlId = dvr.Cells[12].Value == null ? 0 : Convert.ToInt32(dvr.Cells[12].Value);
  342. WmsInArrivalDtlResult mdResult = lstReceiptDtl.Find(x => x.ARRIVAL_DTL_ID == billDtlId);
  343. WmsQaInspectionDtlResult mdQaResult = InspectionDataNotEdit.WmsQaInspectionDtlList.Find(y => y.BILL_DTL_ID == billDtlId);
  344. mdInspectionDtlList.Add(new WmsQaInspectionDtlResult
  345. {
  346. BILL_NO = mdResult.ARRIVAL_NO,
  347. BILL_DTL_ID = billDtlId,
  348. MATERIEL_CODE = materielCode,
  349. MATERIEL_NAME = materielName,
  350. MATERIEL_BARCODE = materielBarcode,
  351. BATCH_NO = batchNo,
  352. UNIT_CODE = unitCode,
  353. SUPPLIER_CODE = mdResult.SUPPLIER_CODE,
  354. SUPPLIER_NAME = mdResult.SUPPLIER_NAME,
  355. PACKAGE_CODE = packageCode,
  356. PRODUCT_DATE = productTime,
  357. EXP_DATE = expTime,
  358. INSPECTION_RESULT = inspectionResult,
  359. ITEM_STATUS = mdResult.ITEM_STATUS,
  360. INSPECTION_DTL_STATUS = mdQaResult.INSPECTION_DTL_STATUS,
  361. CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
  362. UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
  363. DESCRIBE = null
  364. });
  365. }
  366. }
  367. #region 校验明细行 不能存在相同批次、物料条码的数据行
  368. var strList = mdInspectionDtlList.GroupBy(x => new { x.MATERIEL_CODE, x.BATCH_NO }).Select(x => new { Key = x.Count(), MATERIEL_CODE = x.Key.MATERIEL_CODE, BATCH_NO = x.Key.BATCH_NO }).ToList();
  369. foreach (var item in strList)
  370. {
  371. if (item.Key > 1)
  372. {
  373. KryptonMessageBox.Show($"相同的物料:【{item.MATERIEL_CODE}】,批次号:【{item.BATCH_NO}】只能添加一行数据,请修正输入数据行!");
  374. return;
  375. }
  376. }
  377. #endregion
  378. List<WmsQaInspectionDtlResult> finalInspectionDtlList = new List<WmsQaInspectionDtlResult>();
  379. foreach (WmsQaInspectionDtlResult itemOld in InspectionDataNotEdit.WmsQaInspectionDtlList)
  380. {
  381. WmsQaInspectionDtlResult arrDtlNew = mdInspectionDtlList.Find(x => x.BILL_DTL_ID == itemOld.BILL_DTL_ID);
  382. if (arrDtlNew != null)
  383. {
  384. arrDtlNew.INSPECTION_DTL_STATUS = itemOld.INSPECTION_DTL_STATUS;
  385. arrDtlNew.REMARKS1 = "更新";
  386. finalInspectionDtlList.Add(arrDtlNew);
  387. }
  388. else
  389. {
  390. itemOld.INSPECTION_DTL_STATUS = (int)InspectionStatus.已删除;
  391. itemOld.REMARKS1 = "删除";
  392. finalInspectionDtlList.Add(itemOld);
  393. }
  394. }
  395. foreach (WmsQaInspectionDtlResult itemNew in mdInspectionDtlList)
  396. {
  397. WmsQaInspectionDtlResult qaDtlOld= InspectionDataNotEdit.WmsQaInspectionDtlList.Find(x => x.BILL_DTL_ID == itemNew.BILL_DTL_ID);
  398. if (qaDtlOld == null)
  399. {
  400. itemNew.REMARKS1 = "添加";
  401. finalInspectionDtlList.Add(itemNew);
  402. }
  403. }
  404. mdInspection.WmsQaInspectionDtlList = finalInspectionDtlList;
  405. var result = WmsInspectionService.wmsQaInspectionService.EditWmsQaInspectionData(mdInspection);
  406. if (result.Status == OperateStatus.Success)
  407. {
  408. KryptonMessageBox.Show(result.Message);
  409. frmWmsQaInspection.RefreshFrmHost();
  410. this.Close();
  411. }
  412. else
  413. {
  414. KryptonMessageBox.Show(result.Message);
  415. }
  416. }
  417. else
  418. {
  419. DialogResult dr = KryptonMessageBox.Show("由于明细为空,确定要删除质检单所有数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  420. if (dr == DialogResult.OK)
  421. {
  422. var result = WmsInspectionService.wmsQaInspectionService.DeleteWmsQaInspectionData(new WmsQaInspectionResult { INSPECTION_NO = InspectionDataNotEdit.INSPECTION_ID.ToString(), UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
  423. if (result.Status == OperateStatus.Success)
  424. {
  425. KryptonMessageBox.Show(result.Message);
  426. frmWmsQaInspection.RefreshFrmHost();
  427. this.Close();
  428. }
  429. else
  430. {
  431. KryptonMessageBox.Show(result.Message);
  432. }
  433. }
  434. }
  435. }
  436. /// <summary>
  437. /// 校验DataGridView输入行数据的正确性
  438. /// </summary>
  439. /// <param name="dvr">DataGridView输入行</param>
  440. /// <param name="OutMssg">校验结果信息</param>
  441. /// <returns></returns>
  442. private bool CheckDataGridViewRowFormat(DataGridViewRow dvr, ref string OutMssg)
  443. {
  444. if (dvr.Cells[1].Value == null)
  445. {
  446. OutMssg = $"第【{dvr.Index + 1}】行未输入物料编码!";
  447. return false;
  448. }
  449. if (dvr.Cells[2].Value == null)
  450. {
  451. OutMssg = $"第【{dvr.Index + 1}】行未输入物料编码!";
  452. return false;
  453. }
  454. if (dvr.Cells[3].Value == null)
  455. {
  456. OutMssg = $"第【{dvr.Index + 1}】行未输入物料名称!";
  457. return false;
  458. }
  459. if (dvr.Cells[5].Value == null)
  460. {
  461. OutMssg = $"第【{dvr.Index + 1}】行未选择质检结果!";
  462. return false;
  463. }
  464. if (dvr.Cells[7].Value == null)
  465. {
  466. OutMssg = $"第【{dvr.Index + 1}】行未选择单位信息!";
  467. return false;
  468. }
  469. if (dvr.Cells[8].Value == null)
  470. {
  471. OutMssg = $"第【{dvr.Index + 1}】行未选择供应商信息!";
  472. return false;
  473. }
  474. if (dvr.Cells[10].Value == null)
  475. {
  476. OutMssg = $"第【{dvr.Index + 1}】行未输入生产日期!";
  477. return false;
  478. }
  479. if (dvr.Cells[11].Value == null)
  480. {
  481. OutMssg = $"第【{dvr.Index + 1}】行未输入失效日期!";
  482. return false;
  483. }
  484. if (DateTime.Compare(Convert.ToDateTime(dvr.Cells[10].Value), Convert.ToDateTime(dvr.Cells[11].Value)) >= 0)
  485. {
  486. OutMssg = $"第【{dvr.Index + 1}】行未输入的生产日期大于失效日期,不符合实际情况,请重新输入!";
  487. return false;
  488. }
  489. OutMssg = "校验成功!";
  490. return true;
  491. }
  492. /// <summary>
  493. /// 取消按钮事件
  494. /// 退出编辑页面
  495. /// </summary>
  496. /// <param name="sender"></param>
  497. /// <param name="e"></param>
  498. private void btnCancel_Click(object sender, EventArgs e)
  499. {
  500. this.Close();
  501. }
  502. private ListItem GetComboBoxItem(DataGridViewComboBoxCell dataGridViewComboBoxCell)
  503. {
  504. foreach (var item in dataGridViewComboBoxCell.Items)
  505. {
  506. if (dataGridViewComboBoxCell.Value == null)
  507. {
  508. return (ListItem)item;
  509. }
  510. if (((ListItem)item).Text == dataGridViewComboBoxCell.Value.ToString())
  511. {
  512. return (ListItem)item;
  513. }
  514. }
  515. return new ListItem();
  516. }
  517. private ListItem GetComboBoxItem(DataGridViewComboBoxCell dataGridViewComboBoxCell, string value)
  518. {
  519. foreach (var item in dataGridViewComboBoxCell.Items)
  520. {
  521. if (((ListItem)item).Value == value)
  522. {
  523. return (ListItem)item;
  524. }
  525. }
  526. return new ListItem();
  527. }
  528. #endregion
  529. #region DataGridView相关事件
  530. /// <summary>
  531. /// 编辑单元格控件时触发的事件
  532. /// </summary>
  533. /// <param name="sender"></param>
  534. /// <param name="e"></param>
  535. private void kdgv_InspectionDtlData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
  536. {
  537. if (e.Control is DataGridViewOfComoBoxCustom)
  538. {
  539. (e.Control as DataGridViewOfComoBoxCustom).AfterSelector -= new AfterSelectorEventHandler(SalePageAddOrEditForm_AfterSelector);
  540. (e.Control as DataGridViewOfComoBoxCustom).AfterSelector += new AfterSelectorEventHandler(SalePageAddOrEditForm_AfterSelector);
  541. }
  542. }
  543. /// <summary>
  544. /// 针对ComboBox下拉列表的DataGridView数据列单元格。
  545. /// 由于DataGridView的ComboBox列的Item至使用的是KeyValue形式的ListItem,
  546. /// 并且单元格刚开始进入编辑的时候,value值为null。如果后续不选择下拉列表的值,就切换编辑的单元格,就会触发DataError事件,警告数据格式错误。
  547. /// 所以单元格刚开始进入编辑的时候。需要设定一个默认值。默认值的类型为ListItem。一般设定为下拉列表值集合的第一个值。
  548. /// </summary>
  549. /// <param name="sender"></param>
  550. /// <param name="e"></param>
  551. private void kdgv_InspectionDtlData_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
  552. {
  553. int rowIndex = e.RowIndex;
  554. int columnIndex = e.ColumnIndex;
  555. if (kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex] is DataGridViewComboBoxCell)
  556. {
  557. if (kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex].Value == null)
  558. {
  559. DataGridViewComboBoxCell dataGridViewComboBoxCell = (DataGridViewComboBoxCell)kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex];
  560. ListItem tstlst = (ListItem)dataGridViewComboBoxCell.Items[0];
  561. kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex].Value = tstlst;
  562. }
  563. }
  564. }
  565. /// <summary>
  566. /// 针对ComboBox下拉列表的DataGridView数据列单元格。
  567. /// 由于DataGridView的ComboBox列的Item至使用的是KeyValue形式的ListItem,
  568. /// 所以单元格结束编辑的时候。需要给单元格设定一个类型为ListItem的值。
  569. /// </summary>
  570. /// <param name="sender"></param>
  571. /// <param name="e"></param>
  572. private void kdgv_InspectionDtlData_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  573. {
  574. int rowIndex = e.RowIndex;
  575. int columnIndex = e.ColumnIndex;
  576. if (kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex] is DataGridViewComboBoxCell)
  577. {
  578. ListItem tstlst = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex]);
  579. kdgv_InspectionDtlData.Rows[rowIndex].Cells[columnIndex].Value = tstlst;
  580. }
  581. }
  582. /// <summary>
  583. /// 悬浮datagridview数据窗体,行选择后事件
  584. /// </summary>
  585. /// <param name="sender"></param>
  586. /// <param name="e"></param>
  587. void SalePageAddOrEditForm_AfterSelector(object sender, AfterSelectorEventArgs e)
  588. {
  589. try
  590. {
  591. DataGridViewRow row = e.Value as DataGridViewRow;
  592. DataRowView dataRow = row.DataBoundItem as DataRowView;
  593. int receiptDtlId = Convert.ToInt32(dataRow["到货通知单明细ID"].ToString().Trim());
  594. WmsInArrivalDtlResult receiptDtlResult = lstReceiptDtl.Find(x => x.ARRIVAL_DTL_ID == receiptDtlId);
  595. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[1].Value = dataRow["到货通知单号"].ToString().Trim();
  596. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[2].Value = dataRow["物料编码"].ToString().Trim();
  597. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[3].Value = dataRow["物料名称"].ToString().Trim();
  598. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[4].Value = dataRow["物料条码"].ToString().Trim();
  599. ListItem inspectionResultLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[5], receiptDtlResult.INSPECTION_RESULT);
  600. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[6].Value = receiptDtlResult.BATCH_NO;
  601. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[7].Value = receiptDtlResult.UNIT_CODE;
  602. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[8].Value = receiptDtlResult.SUPPLIER_NAME;
  603. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[9].Value = receiptDtlResult.PACKAGE_CODE;
  604. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[10].Value = receiptDtlResult.PRODUCT_DATE;
  605. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[11].Value = receiptDtlResult.EXP_DATE;
  606. kdgv_InspectionDtlData.Rows[e.RowIndex].Cells[12].Value = receiptDtlResult.ARRIVAL_DTL_ID;
  607. kdgv_InspectionDtlData.CurrentCell = this.kdgv_InspectionDtlData[e.ColumnIndex, e.RowIndex + 1];
  608. }
  609. catch (Exception ex)
  610. {
  611. MessageBox.Show(ex.Message);
  612. }
  613. }
  614. private void kdgv_InspectionDtlData_DataError(object sender, DataGridViewDataErrorEventArgs e)
  615. {
  616. }
  617. private void kdgv_InspectionDtlData_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
  618. {
  619. int index = kdgv_InspectionDtlData.Rows.Count;
  620. kdgv_InspectionDtlData.Rows[index - 1].Cells[0].Value = index;
  621. }
  622. #endregion
  623. #region 鼠标右键单击事件
  624. /// <summary>
  625. /// 删除选中行事件
  626. /// </summary>
  627. /// <param name="sender"></param>
  628. /// <param name="e"></param>
  629. private void 删除选中行ToolStripMenuItem_Click(object sender, EventArgs e)
  630. {
  631. kdgv_InspectionDtlData.Rows.Remove(kdgv_InspectionDtlData.CurrentCell.OwningRow);
  632. foreach (DataGridViewRow item in kdgv_InspectionDtlData.Rows)
  633. {
  634. int index = item.Index;
  635. kdgv_InspectionDtlData.Rows[index].Cells[0].Value = index + 1;
  636. }
  637. }
  638. /// <summary>
  639. /// 删除全部行事件
  640. /// </summary>
  641. /// <param name="sender"></param>
  642. /// <param name="e"></param>
  643. private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e)
  644. {
  645. kdgv_InspectionDtlData.Rows.Clear();
  646. }
  647. /// <summary>
  648. /// 重新加载正在编辑的质检单明细数据
  649. /// </summary>
  650. /// <param name="sender"></param>
  651. /// <param name="e"></param>
  652. private void 重新加载ToolStripMenuItem_Click(object sender, EventArgs e)
  653. {
  654. var loadfrm = new frmLoading();
  655. loadfrm.Show();
  656. var message = loadfrm.EventCalExec(LoadWmsQaInspectionDtlData);
  657. if (!string.IsNullOrWhiteSpace(message))
  658. {
  659. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  660. }
  661. }
  662. #endregion
  663. }
  664. }