frmWmsInReceipt.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. using ComponentFactory.Krypton.Toolkit;
  2. using NXWMS.Client.Code.Extends;
  3. using NXWMS.Client.Model.AppModels.Condition;
  4. using NXWMS.Client.Model.AppModels.Condition.Base;
  5. using NXWMS.Client.Model.AppModels.Condition.Common;
  6. using NXWMS.Client.Model.AppModels.Condition.Instock;
  7. using NXWMS.Client.Model.AppModels.Result;
  8. using NXWMS.Client.Model.AppModels.Result.Base;
  9. using NXWMS.Client.Model.AppModels.Result.Common;
  10. using NXWMS.Client.Model.AppModels.Result.Instock;
  11. using NXWMS.Client.Model.CoreModels;
  12. using NXWMS.Commons;
  13. using NXWMS.Forms.Instock.frmInstockChild;
  14. using NXWMS.Services;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.ComponentModel;
  18. using System.Data;
  19. using System.Drawing;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Text.RegularExpressions;
  23. using System.Web.UI.WebControls;
  24. using System.Windows.Forms;
  25. namespace NXWMS.Forms.Instock
  26. {
  27. /// <summary>
  28. /// 收货单窗体
  29. /// </summary>
  30. public partial class frmWmsInReceipt : KryptonForm
  31. {
  32. /// <summary>
  33. /// 窗体构造函数
  34. /// </summary>
  35. public frmWmsInReceipt()
  36. {
  37. InitializeComponent();
  38. // 获取窗体的全类名
  39. _CrrentClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
  40. }
  41. #region 全局变量
  42. /// <summary>
  43. /// 客户端字段排序列表(收货单主表)
  44. /// </summary>
  45. private List<ClientFieldOrderResult> _clientFieldOrderList;
  46. /// <summary>
  47. /// 客户端字段排序列表(收货单单明细表)
  48. /// </summary>
  49. private List<ClientFieldOrderResult> _clientFieldOrderDtlList;
  50. /// <summary>
  51. /// 当前窗体类名
  52. /// </summary>
  53. private string _CrrentClassName;
  54. /// <summary>
  55. /// 收货单主键ID,用于记录主表选中行的主键信息。
  56. /// 目前由于 加载控件不能传递具有参数的函数,所以临时使用全局变量。
  57. /// ToDo:后续修改优化加载控件的实现方式,支持传递具有参数的函数。
  58. /// 孙亚龙 舍弃于2020年9月7日
  59. /// </summary>
  60. //string ReceiptId = string.Empty;
  61. /// <summary>
  62. /// 用于控制明细表数据的加载时机。
  63. /// 由于主表DataGridView数据加载时,会默认触发选中项更改事件。这时候加载明细表数据会发生异常。
  64. /// 使用全局变量,控制明细表的数据的加载时机,只能在主表数据全部初始化完成后,并且选中了一行主表数据的时候。
  65. /// </summary>
  66. bool isControlReceiptDtlShow = false;
  67. /// <summary>
  68. /// 定义委托
  69. /// 用于执行刷新页面数据的函数
  70. /// </summary>
  71. public delegate void dlgRefreshFrmHost();
  72. /// <summary>
  73. /// 定义委托变量
  74. /// 用于绑定刷新页面数据的函数
  75. /// </summary>
  76. public static dlgRefreshFrmHost RefreshFrmHost;
  77. #endregion
  78. #region 初始化数据
  79. /// <summary>
  80. /// 窗体加载事件
  81. /// </summary>
  82. /// <param name="sender"></param>
  83. /// <param name="e"></param>
  84. private void frmWmsInReceipt_Load(object sender, EventArgs e)
  85. {
  86. #region 获取主、明细表的显示列信息
  87. //获取收货单主表数据源配置
  88. var result = ConfigServices.configService.GetDataViewOrderList(new ClientFieldOrderCondition { SourceCode = $"{_CrrentClassName}" });
  89. if (result.Status == OperateStatus.Success)
  90. {
  91. _clientFieldOrderList = result.Data;
  92. }
  93. //获取收货单明细表表数据源配置
  94. var resultDtl = ConfigServices.configService.GetDataViewOrderList(new ClientFieldOrderCondition { SourceCode = $"{_CrrentClassName}_Dtl" });
  95. if (resultDtl.Status == OperateStatus.Success)
  96. {
  97. _clientFieldOrderDtlList = resultDtl.Data;
  98. }
  99. #endregion
  100. InitComboBoxItemData();
  101. kdtp_startCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  102. kdtp_endCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  103. kdtp_startCreateTime.Checked = false;
  104. kdtp_endCreateTime.Checked = false;
  105. kdtp_startProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  106. kdtp_endProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  107. kdtp_startProcudtTime.Checked = false;
  108. kdtp_endProcudtTime.Checked = false;
  109. kdtp_startExpTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  110. kdtp_endExptTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  111. kdtp_startExpTime.Checked = false;
  112. kdtp_endExptTime.Checked = false;
  113. RefreshFrmHost = new dlgRefreshFrmHost(RefreshReceiptSearchData);
  114. }
  115. /// <summary>
  116. /// 初始化下拉列表数据
  117. /// </summary>
  118. private void InitComboBoxItemData()
  119. {
  120. /*
  121. ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。1:WMS人工创建;2:到货通知单导入;3:手持端创建;4:接口导入;5:Excel导入。
  122. */
  123. List<BasDictionaryResult> results = new List<BasDictionaryResult>();
  124. #region 单据类型
  125. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "ReceiptTypeDesc");
  126. if (results.Count > 0)
  127. {
  128. kcmb_receiptType.Items.Clear();
  129. kcmb_receiptType.Items.Add(new ListItem
  130. {
  131. Value = "",
  132. Text = "请选择",
  133. });
  134. foreach (var item in results)
  135. {
  136. kcmb_receiptType.Items.Add(new ListItem
  137. {
  138. Value = item.DICTIONARY_ITEM_CODE,
  139. Text = item.DICTIONARY_ITEM_NAME,
  140. });
  141. }
  142. kcmb_receiptType.SelectedIndex = 0;
  143. }
  144. else
  145. {
  146. KryptonMessageBox.Show("未找到收货单类型的字典项数据!");
  147. }
  148. #endregion
  149. #region 单据状态
  150. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "ReceiptOrderStatusDesc");
  151. if (results.Count > 0)
  152. {
  153. kcmb_receiptStatus.Items.Clear();
  154. kcmb_receiptStatus.Items.Add(new ListItem
  155. {
  156. Value = "",
  157. Text = "请选择",
  158. });
  159. foreach (var item in results)
  160. {
  161. kcmb_receiptStatus.Items.Add(new ListItem
  162. {
  163. Value = item.DICTIONARY_ITEM_CODE,
  164. Text = item.DICTIONARY_ITEM_NAME,
  165. });
  166. }
  167. kcmb_receiptStatus.SelectedIndex = 0;
  168. }
  169. else
  170. {
  171. KryptonMessageBox.Show("未找到收货单状态的字典项数据!");
  172. }
  173. #endregion
  174. #region 供应商信息
  175. var result = BaseServices.supplierService.GetList(new SupplierSearchCondition
  176. {
  177. IsUsed = true,
  178. PageIndex = 1,
  179. PageSize = 10000
  180. });
  181. if (result.Status == OperateStatus.Success)
  182. {
  183. kcmb_supplierMsg.Items.Clear();
  184. kcmb_supplierMsg.Items.Add(new ListItem
  185. {
  186. Value = "",
  187. Text = "请选择",
  188. });
  189. foreach (SupplierResult item in result.Data.RowData.ToList())
  190. {
  191. kcmb_supplierMsg.Items.Add(new ListItem
  192. {
  193. Value = item.SUPPLIER_CODE,
  194. Text = item.SUPPLIER_NAME,
  195. });
  196. }
  197. kcmb_supplierMsg.SelectedIndex = 0;
  198. }
  199. else
  200. {
  201. kcmb_supplierMsg.Items.Clear();
  202. KryptonMessageBox.Show(result.Message);
  203. }
  204. #endregion
  205. }
  206. #endregion
  207. #region 查询收货单数据
  208. /// <summary>
  209. /// 查询收货单数据
  210. /// </summary>
  211. /// <param name="sender"></param>
  212. /// <param name="e"></param>
  213. private void kbtnSearch_Click(object sender, EventArgs e)
  214. {
  215. var loadfrm = new frmLoading();
  216. loadfrm.Show();
  217. var message = loadfrm.EventCalExec(LoadWmsInReceiptData);
  218. }
  219. /// <summary>
  220. /// 刷新到货通知单的查询数据
  221. /// </summary>
  222. private void RefreshReceiptSearchData()
  223. {
  224. var loadfrm = new frmLoading();
  225. loadfrm.Show();
  226. var message = loadfrm.EventCalExec(LoadWmsInReceiptData);
  227. if (!string.IsNullOrWhiteSpace(message))
  228. {
  229. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  230. }
  231. }
  232. /// <summary>
  233. /// 调用服务端接口,请求收货单主表数据
  234. /// </summary>
  235. /// <returns></returns>
  236. private string LoadWmsInReceiptData()
  237. {
  238. var result = WmsInstockService.wmsInReceiptService.GetWmsInReceiptListForPage(new WmsInReceiptSearchMd
  239. {
  240. ReceiptNoMsg = ktb_receiptNo.Text,
  241. ArrivalNoMsg = ktb_arrivalNo.Text,
  242. ReceipterMsg = ktb_receipterMsg.Text,
  243. MaterielMsg = ktb_materialMsg.Text,
  244. BatchNoMsg = ktb_batchNoMsg.Text,
  245. ReceiptType = ((ListItem)kcmb_receiptType.SelectedItem).Value,
  246. ReceiptStatus = ((ListItem)kcmb_receiptStatus.SelectedItem).Value,
  247. SupplierMsg = ((ListItem)kcmb_supplierMsg.SelectedItem).Value,
  248. StartCreateTime = kdtp_startCreateTime.Checked ? kdtp_startCreateTime.Value.ToString() : null,
  249. EndCreateTime = kdtp_endCreateTime.Checked ? kdtp_endCreateTime.Value.ToString() : null,
  250. StartProductTime = kdtp_startProcudtTime.Checked ? kdtp_startProcudtTime.Value.ToString() : null,
  251. EndProductTime = kdtp_endProcudtTime.Checked ? kdtp_endProcudtTime.Value.ToString() : null,
  252. StartExpTime = kdtp_startExpTime.Checked ? kdtp_startExpTime.Value.ToString() : null,
  253. EndExpTime = kdtp_endExptTime.Checked ? kdtp_endExptTime.Value.ToString() : null,
  254. PageNum = pageToolbar1.PageIndex,
  255. EveryPageQty = pageToolbar1.PageSize
  256. });
  257. if (result.Status == OperateStatus.Success)
  258. {
  259. kdgv_WmsInReceipt.Columns.Clear();
  260. kdgv_WmsInReceiptDtl.DataSource = null;
  261. //ReceiptId = string.Empty;
  262. isControlReceiptDtlShow = false;
  263. kdgv_WmsInReceipt.DataSource = result.Data;
  264. kdgv_WmsInReceipt.BuildDataGridView(_clientFieldOrderList.GetFieldOrderDic());
  265. kdgv_WmsInReceipt.ClearSelection();
  266. isControlReceiptDtlShow = true;
  267. SetStatusCellBackColor(kdgv_WmsInReceipt, "RECEIPT_STATUS_NAME");
  268. #region 分页赋值
  269. pageToolbar1.DataCount = result.DataCount;
  270. #endregion
  271. ktb_receiptNo.Focus();
  272. return string.Empty;
  273. }
  274. else
  275. {
  276. ktb_receiptNo.Focus();
  277. return result.Message;
  278. }
  279. }
  280. #endregion
  281. #region 查询收货单明细表数据
  282. /// <summary>
  283. /// 收货单主表选中行事件
  284. /// </summary>
  285. /// <param name="sender"></param>
  286. /// <param name="e"></param>
  287. private void kdgv_WmsInReceipt_SelectionChanged(object sender, EventArgs e)
  288. {
  289. if (kdgv_WmsInReceipt.SelectedRows.Count > 0 && isControlReceiptDtlShow)
  290. {
  291. //ReceiptId = kdgv_WmsInReceipt.SelectedRows[0].Cells[1].Value.ToString();
  292. int mainTableId = Convert.ToInt32(kdgv_WmsInReceipt.SelectedRows[0].Cells[1].Value);
  293. var loadfrm = new frmLoading();
  294. loadfrm.Show();
  295. var message = loadfrm.EventCalExecExt1(LoadWmsInReceiptDtlData, mainTableId);
  296. if (!string.IsNullOrWhiteSpace(message))
  297. {
  298. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  299. }
  300. }
  301. }
  302. /// <summary>
  303. /// 调用服务端接口,请求到货通知单明细表数据
  304. /// </summary>
  305. /// <returns></returns>
  306. private string LoadWmsInReceiptDtlData(int mainTableId)
  307. {
  308. //if (string.IsNullOrEmpty(ReceiptId))
  309. //{
  310. // return "请选择记录!";
  311. //}
  312. var result = WmsInstockService.wmsInReceiptService.GetWmsInReceiptDtlListForId(new WmsInReceiptResult { RECEIPT_ID = Convert.ToInt32(mainTableId), REMARKS1 = "查询已删除明细数据" });
  313. if (result.Status == OperateStatus.Success)
  314. {
  315. kdgv_WmsInReceiptDtl.Columns.Clear();
  316. kdgv_WmsInReceiptDtl.DataSource = result.Data.WmsInReceiptDtlList;
  317. kdgv_WmsInReceiptDtl.BuildDataGridView(_clientFieldOrderDtlList.GetFieldOrderDic(), true, false);
  318. kdgv_WmsInReceiptDtl.ClearSelection();
  319. SetStatusCellBackColor(kdgv_WmsInReceiptDtl, "RECEIPT_DTL_STATUS_NAME");
  320. return string.Empty;
  321. }
  322. else
  323. {
  324. return result.Message;
  325. }
  326. }
  327. #endregion
  328. #region 收货单增、删、改、强制完成、收货组盘、重置条件操作
  329. /// <summary>
  330. /// 新增收货单
  331. /// </summary>
  332. /// <param name="sender"></param>
  333. /// <param name="e"></param>
  334. private void kbtnAdd_Click(object sender, EventArgs e)
  335. {
  336. frmChildAddWmsInReceipt frm = new frmChildAddWmsInReceipt();
  337. frm.ShowDialog();
  338. }
  339. /// <summary>
  340. /// 编辑收货单
  341. /// </summary>
  342. /// <param name="sender"></param>
  343. /// <param name="e"></param>
  344. private void kbtnEdit_Click(object sender, EventArgs e)
  345. {
  346. int rowsSelectedNum = 0;
  347. string receiptId = string.Empty;
  348. int rowSelectIndex = 0;
  349. foreach (DataGridViewRow item in kdgv_WmsInReceipt.Rows)
  350. {
  351. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  352. object obj = checkCell.EditedFormattedValue;
  353. if (Convert.ToBoolean(obj))
  354. {
  355. rowsSelectedNum++;
  356. receiptId = item.Cells[1].Value.ToString();
  357. rowSelectIndex = item.Index;
  358. }
  359. }
  360. if (rowsSelectedNum > 0)
  361. {
  362. if (rowsSelectedNum == 1)
  363. {
  364. int receiptStatus = Convert.ToInt32(kdgv_WmsInReceipt.Rows[rowSelectIndex].Cells["RECEIPT_STATUS"].Value);
  365. string arrivalNo = kdgv_WmsInReceipt.Rows[rowSelectIndex].Cells["ARRIVAL_NO"].Value == null ? null : kdgv_WmsInReceipt.Rows[rowSelectIndex].Cells["ARRIVAL_NO"].Value.ToString();
  366. if (receiptStatus == (int)ReceiptStatus.初始创建)
  367. {
  368. frmChildEditWmsInReceipt frm = new frmChildEditWmsInReceipt();
  369. frm.ReceiptId = receiptId;
  370. frm.ArrivalNo = arrivalNo;
  371. frm.ShowDialog();
  372. }
  373. else if (receiptStatus < (int)ReceiptStatus.收货完成)
  374. {
  375. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单不处于【初始创建】状态,无法再次进行编辑!");
  376. }
  377. else if (receiptStatus == (int)ReceiptStatus.强制完成)
  378. {
  379. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单已被【强制完成】,无法再次进行编辑!");
  380. }
  381. else if (receiptStatus == (int)ReceiptStatus.已删除)
  382. {
  383. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单【已被删除】,无法再次进行编辑!");
  384. }
  385. else if (receiptStatus == (int)ReceiptStatus.收货完成)
  386. {
  387. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单【已完成】,无法再次进行编辑!");
  388. }
  389. else
  390. {
  391. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单状态【{receiptStatus}】是未知的,无法进行编辑!");
  392. }
  393. }
  394. else
  395. {
  396. KryptonMessageBox.Show("不能对勾选的多行数据进行编辑,请重新勾选一行数据!");
  397. }
  398. }
  399. else
  400. {
  401. KryptonMessageBox.Show("请勾选要编辑的数据行!");
  402. }
  403. }
  404. /// <summary>
  405. /// 删除收货单
  406. /// </summary>
  407. /// <param name="sender"></param>
  408. /// <param name="e"></param>
  409. private void kbtnRemove_Click(object sender, EventArgs e)
  410. {
  411. int rowsSelected = 0;
  412. string receiptId = string.Empty;
  413. Dictionary<int, int> dic_IndexAndArrivalStatus = new Dictionary<int, int>();
  414. foreach (DataGridViewRow item in kdgv_WmsInReceipt.Rows)
  415. {
  416. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  417. object obj = checkCell.EditedFormattedValue;
  418. if (Convert.ToBoolean(obj))
  419. {
  420. rowsSelected++;
  421. receiptId += item.Cells[1].Value.ToString() + ",";
  422. int receiptStatus = Convert.ToInt32(item.Cells["RECEIPT_STATUS"].Value);
  423. dic_IndexAndArrivalStatus.Add(item.Index, receiptStatus);
  424. }
  425. }
  426. if (rowsSelected > 0)
  427. {
  428. DialogResult dr = KryptonMessageBox.Show("确定要删除所勾选的收货单数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  429. if (dr == DialogResult.OK)
  430. {
  431. foreach (var item in dic_IndexAndArrivalStatus)
  432. {
  433. if (item.Value == (int)ArrivalStatus.初始创建)
  434. {
  435. }
  436. else if (item.Value < (int)ArrivalStatus.已完成)
  437. {
  438. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行不处于【初始创建】状态的收货单,执行删除操作!");
  439. return;
  440. }
  441. else if (item.Value == (int)ArrivalStatus.强制完成)
  442. {
  443. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【强制完成】状态的收货单,执行删除操作!");
  444. return;
  445. }
  446. else if (item.Value == (int)ArrivalStatus.已删除)
  447. {
  448. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【已删除】状态的收货单,执行删除操作!");
  449. return;
  450. }
  451. else if (item.Value == (int)ArrivalStatus.已完成)
  452. {
  453. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【已完成】状态的收货单,执行删除操作!");
  454. return;
  455. }
  456. else
  457. {
  458. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于未知状态【{item.Value}】的收货单,执行删除操作!");
  459. return;
  460. }
  461. }
  462. receiptId = receiptId.Substring(0, receiptId.Length - 1);
  463. var result = WmsInstockService.wmsInReceiptService.DeleteWmsInReceiptData(new WmsInReceiptResult { RECEIPT_NO = receiptId, UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
  464. if (result.Status == OperateStatus.Success)
  465. {
  466. KryptonMessageBox.Show(result.Message);
  467. RefreshReceiptSearchData();
  468. }
  469. else
  470. {
  471. KryptonMessageBox.Show(result.Message);
  472. }
  473. }
  474. }
  475. else
  476. {
  477. KryptonMessageBox.Show("请勾选要删除的收货单数据行!");
  478. }
  479. }
  480. /// <summary>
  481. /// 收货组盘
  482. /// </summary>
  483. /// <param name="sender"></param>
  484. /// <param name="e"></param>
  485. private void kbtn_ReceiptTray_Click(object sender, EventArgs e)
  486. {
  487. int rowsSelectedNum = 0;
  488. string receiptId = string.Empty;
  489. string receiptNo = string.Empty;
  490. int rowSelectIndex = 0;
  491. foreach (DataGridViewRow item in kdgv_WmsInReceipt.Rows)
  492. {
  493. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  494. object obj = checkCell.EditedFormattedValue;
  495. if (Convert.ToBoolean(obj))
  496. {
  497. rowsSelectedNum++;
  498. receiptId = item.Cells[1].Value.ToString();
  499. receiptNo = item.Cells["RECEIPT_NO"].Value.ToString();
  500. rowSelectIndex = item.Index;
  501. }
  502. }
  503. if (rowsSelectedNum > 0)
  504. {
  505. if (rowsSelectedNum == 1)
  506. {
  507. int receiptStatus = Convert.ToInt32(kdgv_WmsInReceipt.Rows[rowSelectIndex].Cells["RECEIPT_STATUS"].Value);
  508. if (receiptStatus < (int)ReceiptStatus.收货完成)
  509. {
  510. frmChildReceiptTray frm = new frmChildReceiptTray();
  511. frm.ReceiptId = receiptId;
  512. frm.ReceiptNo = receiptNo;
  513. frm.ShowDialog();
  514. }
  515. else if (receiptStatus == (int)ReceiptStatus.强制完成)
  516. {
  517. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单已被【强制完成】,无法再次进行收货组盘!");
  518. }
  519. else if (receiptStatus == (int)ReceiptStatus.已删除)
  520. {
  521. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单【已被删除】,无法再次进行收货组盘!");
  522. }
  523. else if (receiptStatus == (int)ReceiptStatus.收货完成)
  524. {
  525. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单【已完成】,无法再次进行收货组盘!");
  526. }
  527. else
  528. {
  529. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的收货单状态【{receiptStatus}】是未知的,无法进行收货组盘!");
  530. }
  531. }
  532. else
  533. {
  534. KryptonMessageBox.Show("不能对勾选的多行数据进行收货组盘,请重新勾选一行数据!");
  535. }
  536. }
  537. else
  538. {
  539. KryptonMessageBox.Show("请勾选要收货组盘的数据行!");
  540. }
  541. }
  542. /// <summary>
  543. /// 强制完成收货单
  544. /// </summary>
  545. /// <param name="sender"></param>
  546. /// <param name="e"></param>
  547. private void kbtn_ForceFinish_Click(object sender, EventArgs e)
  548. {
  549. }
  550. #endregion
  551. #region 导入、导出、打印收货单数据
  552. /// <summary>
  553. /// 重置收货单查询条件
  554. /// </summary>
  555. /// <param name="sender"></param>
  556. /// <param name="e"></param>
  557. private void kbtnReset_Click(object sender, EventArgs e)
  558. {
  559. ktb_receiptNo.Text = "";
  560. ktb_arrivalNo.Text = "";
  561. ktb_materialMsg.Text = "";
  562. ktb_batchNoMsg.Text = "";
  563. ktb_receipterMsg.Text = "";
  564. kcmb_receiptType.SelectedIndex = 0;
  565. kcmb_receiptStatus.SelectedIndex = 0;
  566. kcmb_supplierMsg.SelectedIndex = 0;
  567. kdtp_startCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  568. kdtp_startCreateTime.Checked = false;
  569. kdtp_endCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  570. kdtp_endCreateTime.Checked = false;
  571. kdtp_startProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  572. kdtp_startProcudtTime.Checked = false;
  573. kdtp_endProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  574. kdtp_endProcudtTime.Checked = false;
  575. kdtp_startExpTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  576. kdtp_startExpTime.Checked = false;
  577. kdtp_endExptTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  578. kdtp_endExptTime.Checked = false;
  579. }
  580. /// <summary>
  581. /// 导出收货单数据
  582. /// </summary>
  583. /// <param name="sender"></param>
  584. /// <param name="e"></param>
  585. private void kbtnExport_Click(object sender, EventArgs e)
  586. {
  587. List<string> receiptIdList = new List<string>();
  588. foreach (DataGridViewRow item in kdgv_WmsInReceipt.Rows)
  589. {
  590. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  591. object obj = checkCell.EditedFormattedValue;
  592. if (Convert.ToBoolean(obj))
  593. {
  594. receiptIdList.Add(item.Cells[1].Value.ToString());
  595. }
  596. }
  597. if (receiptIdList.Count > 0)
  598. {
  599. List<WmsInReceiptResult> wmsInReceiptList = new List<WmsInReceiptResult>();
  600. foreach (string item in receiptIdList)
  601. {
  602. var result = WmsInstockService.wmsInReceiptService.GetWmsInReceiptDtlListForId(new WmsInReceiptResult { RECEIPT_ID = Convert.ToInt32(item) });
  603. if (result.Status == OperateStatus.Success)
  604. {
  605. wmsInReceiptList.Add(result.Data);
  606. }
  607. }
  608. NxExcelHelper.ExportToExcel(GetWmsReceiptExportExcelData(wmsInReceiptList), "收货单数据");
  609. }
  610. else
  611. {
  612. KryptonMessageBox.Show("请勾选要导出的数据行!");
  613. }
  614. }
  615. private DataTable GetWmsReceiptExportExcelData(List<WmsInReceiptResult> wmsInReceiptList)
  616. {
  617. DataTable dt = new DataTable();
  618. #region 准备导出列名
  619. DataColumn dc = new DataColumn("收货单号");
  620. dt.Columns.Add(dc);
  621. dc = new DataColumn("到货通知单号");
  622. dt.Columns.Add(dc);
  623. dc = new DataColumn("单据类型");
  624. dt.Columns.Add(dc);
  625. dc = new DataColumn("收货人");
  626. dt.Columns.Add(dc);
  627. dc = new DataColumn("收货时间");
  628. dt.Columns.Add(dc);
  629. dc = new DataColumn("物料类型编码");
  630. dt.Columns.Add(dc);
  631. dc = new DataColumn("物料类型名称");
  632. dt.Columns.Add(dc);
  633. dc = new DataColumn("物料编码");
  634. dt.Columns.Add(dc);
  635. dc = new DataColumn("物料名称");
  636. dt.Columns.Add(dc);
  637. dc = new DataColumn("物料条码");
  638. dt.Columns.Add(dc);
  639. dc = new DataColumn("规格");
  640. dt.Columns.Add(dc);
  641. dc = new DataColumn("单位");
  642. dt.Columns.Add(dc);
  643. dc = new DataColumn("批次号");
  644. dt.Columns.Add(dc);
  645. dc = new DataColumn("到货数量");
  646. dt.Columns.Add(dc);
  647. dc = new DataColumn("收货单明细数量");
  648. dt.Columns.Add(dc);
  649. dc = new DataColumn("收货组盘数量");
  650. dt.Columns.Add(dc);
  651. dc = new DataColumn("上架数量");
  652. dt.Columns.Add(dc);
  653. dc = new DataColumn("拒收数量");
  654. dt.Columns.Add(dc);
  655. dc = new DataColumn("拒收原因");
  656. dt.Columns.Add(dc);
  657. dc = new DataColumn("供应商编码");
  658. dt.Columns.Add(dc);
  659. dc = new DataColumn("供应商名称");
  660. dt.Columns.Add(dc);
  661. dc = new DataColumn("生产日期");
  662. dt.Columns.Add(dc);
  663. dc = new DataColumn("失效日期");
  664. dt.Columns.Add(dc);
  665. dc = new DataColumn("明细状态");
  666. dt.Columns.Add(dc);
  667. dc = new DataColumn("质检状态");
  668. dt.Columns.Add(dc);
  669. dc = new DataColumn("物品状态");
  670. dt.Columns.Add(dc);
  671. #endregion
  672. foreach (WmsInReceiptResult receiptMd in wmsInReceiptList)
  673. {
  674. foreach (WmsInReceiptDtlResult receiptDtlMd in receiptMd.WmsInReceiptDtlList)
  675. {
  676. DataRow dr = dt.NewRow();
  677. dr["收货单号"] = receiptMd.RECEIPT_NO;
  678. dr["到货通知单号"] = receiptMd.ARRIVAL_NO;
  679. dr["单据类型"] = receiptMd.RECEIPT_TYPE_NAME;
  680. dr["收货人"] = receiptMd.RECEIPTER;
  681. dr["收货时间"] = receiptMd.RECEIPT_TIME;
  682. dr["物料类型编码"] = receiptDtlMd.MATERIEL_TYPE_CODE;
  683. dr["物料类型名称"] = receiptDtlMd.MATERIEL_TYPE_NAME;
  684. dr["物料编码"] = receiptDtlMd.MATERIEL_CODE;
  685. dr["物料名称"] = receiptDtlMd.MATERIEL_NAME;
  686. dr["物料条码"] = receiptDtlMd.MATERIEL_BARCODE;
  687. dr["规格"] = receiptDtlMd.MATERIEL_SPEC;
  688. dr["单位"] = receiptDtlMd.UNIT_CODE;
  689. dr["批次号"] = receiptDtlMd.BATCH_NO;
  690. dr["到货数量"] = receiptDtlMd.ARRIVAL_QTY;
  691. dr["收货单明细数量"] = receiptDtlMd.RECEIPT_DTL_QTY;
  692. dr["收货组盘数量"] = receiptDtlMd.RECEIPT_TRAY_QTY;
  693. dr["上架数量"] = receiptDtlMd.PUTAWAY_QTY;
  694. dr["拒收数量"] = receiptDtlMd.REJECT_QTY;
  695. dr["拒收原因"] = receiptDtlMd.REJECT_REASON;
  696. dr["供应商编码"] = receiptDtlMd.SUPPLIER_CODE;
  697. dr["供应商名称"] = receiptDtlMd.SUPPLIER_NAME;
  698. dr["生产日期"] = receiptDtlMd.PRODUCT_DATE;
  699. dr["失效日期"] = receiptDtlMd.EXP_DATE;
  700. dr["明细状态"] = receiptDtlMd.RECEIPT_DTL_STATUS_NAME;
  701. dr["质检状态"] = receiptDtlMd.INSPECTION_RESULT_NAME;
  702. dr["物品状态"] = receiptDtlMd.ITEM_STATUS_NAME;
  703. dt.Rows.Add(dr);
  704. }
  705. }
  706. return dt;
  707. }
  708. /// <summary>
  709. /// Excel导入收货单数据
  710. /// </summary>
  711. /// <param name="sender"></param>
  712. /// <param name="e"></param>
  713. private void kbtnImport_Click(object sender, EventArgs e)
  714. {
  715. }
  716. /// <summary>
  717. /// 打印收货单
  718. /// </summary>
  719. /// <param name="sender"></param>
  720. /// <param name="e"></param>
  721. private void kbtnPrint_Click(object sender, EventArgs e)
  722. {
  723. int rowsSelectedNum = 0;
  724. string receiptId = string.Empty;
  725. int rowSelectIndex = 0;
  726. foreach (DataGridViewRow item in kdgv_WmsInReceipt.Rows)
  727. {
  728. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  729. object obj = checkCell.EditedFormattedValue;
  730. if (Convert.ToBoolean(obj))
  731. {
  732. rowsSelectedNum++;
  733. receiptId = item.Cells[1].Value.ToString();
  734. rowSelectIndex = item.Index;
  735. }
  736. }
  737. if (rowsSelectedNum > 0)
  738. {
  739. if (rowsSelectedNum == 1)
  740. {
  741. int receiptStatus = Convert.ToInt32(kdgv_WmsInReceipt.Rows[rowSelectIndex].Cells["RECEIPT_STATUS"].Value);
  742. if (receiptStatus > (int)ReceiptStatus.收货完成)
  743. {
  744. KryptonMessageBox.Show($"收货单的状态,无法进行标签打印操作!");
  745. }
  746. else
  747. {
  748. frmChildPrintMaterialLabelCode frm = new frmChildPrintMaterialLabelCode();
  749. frm.ReceiptId = receiptId;
  750. frm.ShowDialog();
  751. }
  752. }
  753. else
  754. {
  755. KryptonMessageBox.Show("不能对勾选的多行收货单进行标签打印,请重新勾选一行收货单数据!");
  756. }
  757. }
  758. else
  759. {
  760. KryptonMessageBox.Show("请勾选要进行打印的收货单数据行!");
  761. }
  762. }
  763. #endregion
  764. #region DatatGridView 事件
  765. /// <summary>
  766. /// 设置DatatGridView的第一列复选框的背景色
  767. /// </summary>
  768. /// <param name="sender"></param>
  769. /// <param name="e"></param>
  770. private void kdgv_WmsInReceipt_CellContentClick(object sender, DataGridViewCellEventArgs e)
  771. {
  772. if (e.ColumnIndex == 0)
  773. {
  774. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)kdgv_WmsInReceipt.CurrentCell;
  775. if (Convert.ToBoolean(checkCell.EditedFormattedValue))
  776. {
  777. kdgv_WmsInReceipt.CurrentCell.Style.BackColor = Color.FromArgb(51, 153, 255);
  778. }
  779. else
  780. {
  781. kdgv_WmsInReceipt.CurrentCell.Style.BackColor = Color.Transparent;
  782. }
  783. }
  784. }
  785. /// <summary>
  786. /// 设置状态列的背景色
  787. /// </summary>
  788. /// <param name="dataGridView">dataGridView控件</param>
  789. /// <param name="columnName">状态列的列名称</param>
  790. private void SetStatusCellBackColor(KryptonDataGridView dataGridView, string columnName)
  791. {
  792. foreach (DataGridViewRow item in dataGridView.Rows)
  793. {
  794. string arrivalDtlStatus = item.Cells[columnName].Value.ToString();
  795. switch (Enum.Parse(typeof(ReceiptStatus), arrivalDtlStatus))
  796. {
  797. case ReceiptStatus.初始创建:
  798. //item.Cells[columnName].Style.ForeColor = Color.White;
  799. item.Cells[columnName].Style.BackColor = Color.FromArgb(214, 228, 243);
  800. break;
  801. case ReceiptStatus.收货审核:
  802. //item.Cells[columnName].Style.ForeColor = Color.White;
  803. item.Cells[columnName].Style.BackColor = Color.LightYellow;
  804. break;
  805. case ReceiptStatus.收货中:
  806. //item.Cells[columnName].Style.ForeColor = Color.White;
  807. item.Cells[columnName].Style.BackColor = Color.LightGreen;
  808. break;
  809. case ReceiptStatus.收货完成:
  810. //item.Cells[columnName].Style.ForeColor = Color.White;
  811. item.Cells[columnName].Style.BackColor = Color.LightGray;
  812. break;
  813. case ReceiptStatus.强制完成:
  814. //item.Cells[columnName].Style.ForeColor = Color.White;
  815. item.Cells[columnName].Style.BackColor = Color.DarkGray;
  816. break;
  817. case ReceiptStatus.已删除:
  818. //item.Cells[columnName].Style.ForeColor = Color.White;
  819. item.Cells[columnName].Style.BackColor = Color.FromArgb(255, 69, 0);
  820. break;
  821. default:
  822. break;
  823. }
  824. }
  825. }
  826. private void kdgv_WmsInReceipt_DataError(object sender, DataGridViewDataErrorEventArgs e)
  827. {
  828. }
  829. private void kdgv_WmsInReceiptDtl_DataError(object sender, DataGridViewDataErrorEventArgs e)
  830. {
  831. }
  832. #endregion
  833. #region 鼠标右键单击事件
  834. /// <summary>
  835. /// 刷新明细表数据
  836. /// </summary>
  837. /// <param name="sender"></param>
  838. /// <param name="e"></param>
  839. private void 刷新ToolStripMenuItem1_Click(object sender, EventArgs e)
  840. {
  841. if (kdgv_WmsInReceiptDtl.Rows.Count > 0)
  842. {
  843. if (kdgv_WmsInReceipt.SelectedRows.Count > 0 && isControlReceiptDtlShow)
  844. {
  845. //ReceiptId = kdgv_WmsInReceipt.SelectedRows[0].Cells[1].Value.ToString();
  846. int mainTableId = Convert.ToInt32(kdgv_WmsInReceipt.SelectedRows[0].Cells[1].Value);
  847. var loadfrm = new frmLoading();
  848. loadfrm.Show();
  849. var message = loadfrm.EventCalExecExt1(LoadWmsInReceiptDtlData, mainTableId);
  850. if (!string.IsNullOrWhiteSpace(message))
  851. {
  852. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  853. }
  854. }
  855. }
  856. }
  857. /// <summary>
  858. /// 刷新主表数据
  859. /// </summary>
  860. /// <param name="sender"></param>
  861. /// <param name="e"></param>
  862. private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e)
  863. {
  864. if (kdgv_WmsInReceipt.Rows.Count > 0)
  865. {
  866. RefreshReceiptSearchData();
  867. }
  868. }
  869. #endregion
  870. private void pageToolbar1_OnPageChange(int PageIndex, int PageSzie)
  871. {
  872. this.kbtnSearch_Click(null, null);
  873. }
  874. private void button1_Click(object sender, EventArgs e)
  875. {
  876. FrmBarCode.ShowBarCode("22223");
  877. }
  878. }
  879. }