frmWmsInRetreat.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  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 frmWmsInRetreat : KryptonForm
  31. {
  32. /// <summary>
  33. /// 窗体构造函数
  34. /// </summary>
  35. public frmWmsInRetreat()
  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 RetreatId = string.Empty;
  61. /// <summary>
  62. /// 用于控制明细表数据的加载时机。
  63. /// 由于主表DataGridView数据加载时,会默认触发选中项更改事件。这时候加载明细表数据会发生异常。
  64. /// 使用全局变量,控制明细表的数据的加载时机,只能在主表数据全部初始化完成后,并且选中了一行主表数据的时候。
  65. /// </summary>
  66. bool isControlRetreatDtlShow = 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 frmWmsInRetreat_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(RefreshRetreatSearchData);
  114. }
  115. /// <summary>
  116. /// 初始化下拉列表数据
  117. /// </summary>
  118. private void InitComboBoxItemData()
  119. {
  120. /*
  121. ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
  122. */
  123. List<BasDictionaryResult> results = new List<BasDictionaryResult>();
  124. #region 单据类型
  125. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "RetreatTypeDesc");
  126. if (results.Count > 0)
  127. {
  128. kcmb_retreatType.Items.Clear();
  129. kcmb_retreatType.Items.Add(new ListItem
  130. {
  131. Value = "",
  132. Text = "请选择",
  133. });
  134. foreach (var item in results)
  135. {
  136. kcmb_retreatType.Items.Add(new ListItem
  137. {
  138. Value = item.DICTIONARY_ITEM_CODE,
  139. Text = item.DICTIONARY_ITEM_NAME,
  140. });
  141. }
  142. kcmb_retreatType.SelectedIndex = 0;
  143. }
  144. else
  145. {
  146. KryptonMessageBox.Show("未找到退料单类型的字典项数据!");
  147. }
  148. #endregion
  149. #region 单据状态
  150. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "RetreatOrderStatusDesc");
  151. if (results.Count > 0)
  152. {
  153. kcmb_retreatStatus.Items.Clear();
  154. kcmb_retreatStatus.Items.Add(new ListItem
  155. {
  156. Value = "",
  157. Text = "请选择",
  158. });
  159. foreach (var item in results)
  160. {
  161. kcmb_retreatStatus.Items.Add(new ListItem
  162. {
  163. Value = item.DICTIONARY_ITEM_CODE,
  164. Text = item.DICTIONARY_ITEM_NAME,
  165. });
  166. }
  167. kcmb_retreatStatus.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(LoadWmsInRetreatData);
  218. }
  219. /// <summary>
  220. /// 刷新退料单的查询数据
  221. /// </summary>
  222. private void RefreshRetreatSearchData()
  223. {
  224. var loadfrm = new frmLoading();
  225. loadfrm.Show();
  226. var message = loadfrm.EventCalExec(LoadWmsInRetreatData);
  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 LoadWmsInRetreatData()
  237. {
  238. var result = WmsInstockService.wmsInRetreatService.GetWmsInRetreatListForPage(new WmsInRetreatSearchMd
  239. {
  240. RetreatNoMsg = ktb_retreatNo.Text,
  241. SourceNoMsg = ktb_sourceNo.Text,
  242. RetreaterMsg = ktb_retreaterMsg.Text,
  243. MaterielMsg = ktb_materialMsg.Text,
  244. BatchNoMsg = ktb_batchNoMsg.Text,
  245. RetreatType = ((ListItem)kcmb_retreatType.SelectedItem).Value,
  246. RetreatStatus = ((ListItem)kcmb_retreatStatus.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_WmsInRetreat.Columns.Clear();
  260. kdgv_WmsInRetreatDtl.DataSource = null;
  261. //RetreatId = string.Empty;
  262. isControlRetreatDtlShow = false;
  263. kdgv_WmsInRetreat.DataSource = result.Data;
  264. kdgv_WmsInRetreat.BuildDataGridView(_clientFieldOrderList.GetFieldOrderDic());
  265. kdgv_WmsInRetreat.ClearSelection();
  266. isControlRetreatDtlShow = true;
  267. SetStatusCellBackColor(kdgv_WmsInRetreat, "RETREAT_STATUS_NAME");
  268. this.pageToolbar1.DataCount = result.DataCount;
  269. ktb_retreatNo.Focus();
  270. return string.Empty;
  271. }
  272. else
  273. {
  274. ktb_retreatNo.Focus();
  275. return result.Message;
  276. }
  277. }
  278. #endregion
  279. #region 查询退料单明细表数据
  280. /// <summary>
  281. /// 退料单主表选中行事件
  282. /// </summary>
  283. /// <param name="sender"></param>
  284. /// <param name="e"></param>
  285. private void kdgv_WmsInRetreat_SelectionChanged(object sender, EventArgs e)
  286. {
  287. if (kdgv_WmsInRetreat.SelectedRows.Count > 0 && isControlRetreatDtlShow)
  288. {
  289. //RetreatId = kdgv_WmsInRetreat.SelectedRows[0].Cells[1].Value.ToString();
  290. int mainTableId = Convert.ToInt32(kdgv_WmsInRetreat.SelectedRows[0].Cells[1].Value);
  291. var loadfrm = new frmLoading();
  292. loadfrm.Show();
  293. var message = loadfrm.EventCalExecExt1(LoadWmsInRetreatDtlData, mainTableId);
  294. if (!string.IsNullOrWhiteSpace(message))
  295. {
  296. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  297. }
  298. }
  299. }
  300. /// <summary>
  301. /// 调用服务端接口,请求到货通知单明细表数据
  302. /// </summary>
  303. /// <returns></returns>
  304. private string LoadWmsInRetreatDtlData(int mainTableId)
  305. {
  306. //if (string.IsNullOrEmpty(RetreatId))
  307. //{
  308. // return "请选择记录!";
  309. //}
  310. var result = WmsInstockService.wmsInRetreatService.GetWmsInRetreatDtlListForId(new WmsInRetreatResult { RETREAT_ID = Convert.ToInt32(mainTableId), REMARKS1 = "查询已删除明细数据" });
  311. if (result.Status == OperateStatus.Success)
  312. {
  313. kdgv_WmsInRetreatDtl.Columns.Clear();
  314. kdgv_WmsInRetreatDtl.DataSource = result.Data.WmsInRetreatDtlList;
  315. kdgv_WmsInRetreatDtl.BuildDataGridView(_clientFieldOrderDtlList.GetFieldOrderDic(), true, false);
  316. kdgv_WmsInRetreatDtl.ClearSelection();
  317. SetStatusCellBackColor(kdgv_WmsInRetreatDtl, "RETREAT_DTL_STATUS_NAME");
  318. return string.Empty;
  319. }
  320. else
  321. {
  322. return result.Message;
  323. }
  324. }
  325. #endregion
  326. #region 退料单增、删、改、强制完成、退料组盘、重置条件操作
  327. /// <summary>
  328. /// 新增退料单
  329. /// </summary>
  330. /// <param name="sender"></param>
  331. /// <param name="e"></param>
  332. private void kbtnAdd_Click(object sender, EventArgs e)
  333. {
  334. frmChildAddWmsInRetreat frm = new frmChildAddWmsInRetreat();
  335. frm.ShowDialog();
  336. }
  337. /// <summary>
  338. /// 编辑退料单
  339. /// </summary>
  340. /// <param name="sender"></param>
  341. /// <param name="e"></param>
  342. private void kbtnEdit_Click(object sender, EventArgs e)
  343. {
  344. int rowsSelectedNum = 0;
  345. string retreatId = string.Empty;
  346. int rowSelectIndex = 0;
  347. foreach (DataGridViewRow item in kdgv_WmsInRetreat.Rows)
  348. {
  349. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  350. object obj = checkCell.EditedFormattedValue;
  351. if (Convert.ToBoolean(obj))
  352. {
  353. rowsSelectedNum++;
  354. retreatId = item.Cells[1].Value.ToString();
  355. rowSelectIndex = item.Index;
  356. }
  357. }
  358. if (rowsSelectedNum > 0)
  359. {
  360. if (rowsSelectedNum == 1)
  361. {
  362. int retreatStatus = Convert.ToInt32(kdgv_WmsInRetreat.Rows[rowSelectIndex].Cells["RETREAT_STATUS"].Value);
  363. if (retreatStatus == (int)RetreatStatus.初始创建)
  364. {
  365. frmChildEditWmsInRetreat frm = new frmChildEditWmsInRetreat();
  366. frm.RetreatId = retreatId;
  367. frm.ShowDialog();
  368. }
  369. else if (retreatStatus < (int)RetreatStatus.退料完成)
  370. {
  371. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单不处于【初始创建】状态,无法再次进行编辑!");
  372. }
  373. else if (retreatStatus == (int)RetreatStatus.强制完成)
  374. {
  375. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单已被【强制完成】,无法再次进行编辑!");
  376. }
  377. else if (retreatStatus == (int)RetreatStatus.已删除)
  378. {
  379. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单【已被删除】,无法再次进行编辑!");
  380. }
  381. else if (retreatStatus == (int)RetreatStatus.退料完成)
  382. {
  383. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单【已完成】,无法再次进行编辑!");
  384. }
  385. else
  386. {
  387. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单状态【{retreatStatus}】是未知的,无法进行编辑!");
  388. }
  389. }
  390. else
  391. {
  392. KryptonMessageBox.Show("不能对勾选的多行数据进行编辑,请重新勾选一行数据!");
  393. }
  394. }
  395. else
  396. {
  397. KryptonMessageBox.Show("请勾选要编辑的数据行!");
  398. }
  399. }
  400. /// <summary>
  401. /// 删除退料单
  402. /// </summary>
  403. /// <param name="sender"></param>
  404. /// <param name="e"></param>
  405. private void kbtnRemove_Click(object sender, EventArgs e)
  406. {
  407. int rowsSelected = 0;
  408. string retreatId = string.Empty;
  409. Dictionary<int, int> dic_IndexAndArrivalStatus = new Dictionary<int, int>();
  410. foreach (DataGridViewRow item in kdgv_WmsInRetreat.Rows)
  411. {
  412. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  413. object obj = checkCell.EditedFormattedValue;
  414. if (Convert.ToBoolean(obj))
  415. {
  416. rowsSelected++;
  417. retreatId += item.Cells[1].Value.ToString() + ",";
  418. int retreatStatus = Convert.ToInt32(item.Cells["RETREAT_STATUS"].Value);
  419. dic_IndexAndArrivalStatus.Add(item.Index, retreatStatus);
  420. }
  421. }
  422. if (rowsSelected > 0)
  423. {
  424. DialogResult dr = KryptonMessageBox.Show("确定要删除所勾选的退料单数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  425. if (dr == DialogResult.OK)
  426. {
  427. foreach (var item in dic_IndexAndArrivalStatus)
  428. {
  429. if (item.Value == (int)ArrivalStatus.初始创建)
  430. {
  431. }
  432. else if (item.Value < (int)ArrivalStatus.已完成)
  433. {
  434. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行不处于【初始创建】状态的退料单,执行删除操作!");
  435. return;
  436. }
  437. else if (item.Value == (int)ArrivalStatus.强制完成)
  438. {
  439. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【强制完成】状态的退料单,执行删除操作!");
  440. return;
  441. }
  442. else if (item.Value == (int)ArrivalStatus.已删除)
  443. {
  444. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【已删除】状态的退料单,执行删除操作!");
  445. return;
  446. }
  447. else if (item.Value == (int)ArrivalStatus.已完成)
  448. {
  449. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于【已完成】状态的退料单,执行删除操作!");
  450. return;
  451. }
  452. else
  453. {
  454. KryptonMessageBox.Show($"不能对第【{item.Key + 1}】行处于未知状态【{item.Value}】的退料单,执行删除操作!");
  455. return;
  456. }
  457. }
  458. retreatId = retreatId.Substring(0, retreatId.Length - 1);
  459. var result = WmsInstockService.wmsInRetreatService.DeleteWmsInRetreatData(new WmsInRetreatResult { RETREAT_NO = retreatId, UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
  460. if (result.Status == OperateStatus.Success)
  461. {
  462. KryptonMessageBox.Show(result.Message);
  463. RefreshRetreatSearchData();
  464. }
  465. else
  466. {
  467. KryptonMessageBox.Show(result.Message);
  468. }
  469. }
  470. }
  471. else
  472. {
  473. KryptonMessageBox.Show("请勾选要删除的退料单数据行!");
  474. }
  475. }
  476. /// <summary>
  477. /// 退料组盘
  478. /// </summary>
  479. /// <param name="sender"></param>
  480. /// <param name="e"></param>
  481. private void kbtn_RetreatTray_Click(object sender, EventArgs e)
  482. {
  483. int rowsSelectedNum = 0;
  484. string retreatId = string.Empty;
  485. string retreatNo = string.Empty;
  486. int rowSelectIndex = 0;
  487. foreach (DataGridViewRow item in kdgv_WmsInRetreat.Rows)
  488. {
  489. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  490. object obj = checkCell.EditedFormattedValue;
  491. if (Convert.ToBoolean(obj))
  492. {
  493. rowsSelectedNum++;
  494. retreatId = item.Cells[1].Value.ToString();
  495. retreatNo = item.Cells["RETREAT_NO"].Value.ToString();
  496. rowSelectIndex = item.Index;
  497. }
  498. }
  499. if (rowsSelectedNum > 0)
  500. {
  501. if (rowsSelectedNum == 1)
  502. {
  503. int retreatStatus = Convert.ToInt32(kdgv_WmsInRetreat.Rows[rowSelectIndex].Cells["RETREAT_STATUS"].Value);
  504. if (retreatStatus < (int)RetreatStatus.退料完成)
  505. {
  506. frmChildRetreatTray frm = new frmChildRetreatTray();
  507. frm.RetreatId = retreatId;
  508. frm.RetreatNo = retreatNo;
  509. frm.ShowDialog();
  510. }
  511. else if (retreatStatus == (int)RetreatStatus.强制完成)
  512. {
  513. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单已被【强制完成】,无法再次进行退料组盘!");
  514. }
  515. else if (retreatStatus == (int)RetreatStatus.已删除)
  516. {
  517. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单【已被删除】,无法再次进行退料组盘!");
  518. }
  519. else if (retreatStatus == (int)RetreatStatus.退料完成)
  520. {
  521. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单【已完成】,无法再次进行退料组盘!");
  522. }
  523. else
  524. {
  525. KryptonMessageBox.Show($"第【{rowSelectIndex + 1}】行的退料单状态【{retreatStatus}】是未知的,无法进行退料组盘!");
  526. }
  527. }
  528. else
  529. {
  530. KryptonMessageBox.Show("不能对勾选的多行数据进行退料组盘,请重新勾选一行数据!");
  531. }
  532. }
  533. else
  534. {
  535. KryptonMessageBox.Show("请勾选要退料组盘的数据行!");
  536. }
  537. }
  538. private void kbtn_ForceFinish_Click(object sender, EventArgs e)
  539. {
  540. }
  541. #endregion
  542. #region 导入、导出、打印退料单数据
  543. /// <summary>
  544. /// 重置退料单查询条件
  545. /// </summary>
  546. /// <param name="sender"></param>
  547. /// <param name="e"></param>
  548. private void kbtnReset_Click(object sender, EventArgs e)
  549. {
  550. ktb_retreatNo.Text = "";
  551. ktb_sourceNo.Text = "";
  552. ktb_materialMsg.Text = "";
  553. ktb_batchNoMsg.Text = "";
  554. ktb_retreaterMsg.Text = "";
  555. kcmb_retreatType.SelectedIndex = 0;
  556. kcmb_retreatStatus.SelectedIndex = 0;
  557. kcmb_supplierMsg.SelectedIndex = 0;
  558. kdtp_startCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  559. kdtp_startCreateTime.Checked = false;
  560. kdtp_endCreateTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  561. kdtp_endCreateTime.Checked = false;
  562. kdtp_startProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  563. kdtp_startProcudtTime.Checked = false;
  564. kdtp_endProcudtTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  565. kdtp_endProcudtTime.Checked = false;
  566. kdtp_startExpTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
  567. kdtp_startExpTime.Checked = false;
  568. kdtp_endExptTime.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
  569. kdtp_endExptTime.Checked = false;
  570. }
  571. /// <summary>
  572. /// 导出退料单数据
  573. /// </summary>
  574. /// <param name="sender"></param>
  575. /// <param name="e"></param>
  576. private void kbtnExport_Click(object sender, EventArgs e)
  577. {
  578. List<string> retreatIdList = new List<string>();
  579. foreach (DataGridViewRow item in kdgv_WmsInRetreat.Rows)
  580. {
  581. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)item.Cells[0];
  582. object obj = checkCell.EditedFormattedValue;
  583. if (Convert.ToBoolean(obj))
  584. {
  585. retreatIdList.Add(item.Cells[1].Value.ToString());
  586. }
  587. }
  588. if (retreatIdList.Count > 0)
  589. {
  590. List<WmsInRetreatResult> wmsInRetreatList = new List<WmsInRetreatResult>();
  591. foreach (string item in retreatIdList)
  592. {
  593. var result = WmsInstockService.wmsInRetreatService.GetWmsInRetreatDtlListForId(new WmsInRetreatResult { RETREAT_ID = Convert.ToInt32(item) });
  594. if (result.Status == OperateStatus.Success)
  595. {
  596. wmsInRetreatList.Add(result.Data);
  597. }
  598. }
  599. NxExcelHelper.ExportToExcel(GetWmsRetreatExportExcelData(wmsInRetreatList), "退料单数据");
  600. }
  601. else
  602. {
  603. KryptonMessageBox.Show("请勾选要导出的数据行!");
  604. }
  605. }
  606. private DataTable GetWmsRetreatExportExcelData(List<WmsInRetreatResult> wmsInRetreatList)
  607. {
  608. DataTable dt = new DataTable();
  609. #region 准备导出列名
  610. DataColumn dc = new DataColumn("退料单号");
  611. dt.Columns.Add(dc);
  612. dc = new DataColumn("来源单号");
  613. dt.Columns.Add(dc);
  614. dc = new DataColumn("单据类型");
  615. dt.Columns.Add(dc);
  616. dc = new DataColumn("退料退料人");
  617. dt.Columns.Add(dc);
  618. dc = new DataColumn("退料时间");
  619. dt.Columns.Add(dc);
  620. dc = new DataColumn("物料类型编码");
  621. dt.Columns.Add(dc);
  622. dc = new DataColumn("物料类型名称");
  623. dt.Columns.Add(dc);
  624. dc = new DataColumn("物料编码");
  625. dt.Columns.Add(dc);
  626. dc = new DataColumn("物料名称");
  627. dt.Columns.Add(dc);
  628. dc = new DataColumn("物料条码");
  629. dt.Columns.Add(dc);
  630. dc = new DataColumn("规格");
  631. dt.Columns.Add(dc);
  632. dc = new DataColumn("单位");
  633. dt.Columns.Add(dc);
  634. dc = new DataColumn("批次号");
  635. dt.Columns.Add(dc);
  636. dc = new DataColumn("到货数量");
  637. dt.Columns.Add(dc);
  638. dc = new DataColumn("退料单明细数量");
  639. dt.Columns.Add(dc);
  640. dc = new DataColumn("退料组盘数量");
  641. dt.Columns.Add(dc);
  642. dc = new DataColumn("上架数量");
  643. dt.Columns.Add(dc);
  644. dc = new DataColumn("供应商编码");
  645. dt.Columns.Add(dc);
  646. dc = new DataColumn("供应商名称");
  647. dt.Columns.Add(dc);
  648. dc = new DataColumn("生产日期");
  649. dt.Columns.Add(dc);
  650. dc = new DataColumn("失效日期");
  651. dt.Columns.Add(dc);
  652. dc = new DataColumn("明细状态");
  653. dt.Columns.Add(dc);
  654. dc = new DataColumn("质检状态");
  655. dt.Columns.Add(dc);
  656. dc = new DataColumn("物品状态");
  657. dt.Columns.Add(dc);
  658. #endregion
  659. foreach (WmsInRetreatResult retreatMd in wmsInRetreatList)
  660. {
  661. foreach (WmsInRetreatDtlResult retreatDtlMd in retreatMd.WmsInRetreatDtlList)
  662. {
  663. DataRow dr = dt.NewRow();
  664. dr["退料单号"] = retreatMd.RETREAT_NO;
  665. dr["来源单号"] = retreatMd.SOUCE_NO;
  666. dr["单据类型"] = retreatMd.RETREAT_TYPE_NAME;
  667. dr["退料退料人"] = retreatMd.RETREATER;
  668. dr["退料时间"] = retreatMd.RETREAT_TIME;
  669. dr["物料类型编码"] = retreatDtlMd.MATERIEL_TYPE_CODE;
  670. dr["物料类型名称"] = retreatDtlMd.MATERIEL_TYPE_NAME;
  671. dr["物料编码"] = retreatDtlMd.MATERIEL_CODE;
  672. dr["物料名称"] = retreatDtlMd.MATERIEL_NAME;
  673. dr["物料条码"] = retreatDtlMd.MATERIEL_BARCODE;
  674. dr["规格"] = retreatDtlMd.MATERIEL_SPEC;
  675. dr["单位"] = retreatDtlMd.UNIT_CODE;
  676. dr["批次号"] = retreatDtlMd.BATCH_NO;
  677. dr["退料单明细数量"] = retreatDtlMd.RETREAT_QTY;
  678. dr["退料组盘数量"] = retreatDtlMd.RETREAT_TRAY_QTY;
  679. dr["上架数量"] = retreatDtlMd.PUTAWAY_QTY;
  680. dr["供应商编码"] = retreatDtlMd.SUPPLIER_CODE;
  681. dr["供应商名称"] = retreatDtlMd.SUPPLIER_NAME;
  682. dr["生产日期"] = retreatDtlMd.PRODUCT_DATE;
  683. dr["失效日期"] = retreatDtlMd.EXP_DATE;
  684. dr["明细状态"] = retreatDtlMd.RETREAT_DTL_STATUS_NAME;
  685. dr["质检状态"] = retreatDtlMd.INSPECTION_RESULT_NAME;
  686. dr["物品状态"] = retreatDtlMd.ITEM_STATUS_NAME;
  687. dt.Rows.Add(dr);
  688. }
  689. }
  690. return dt;
  691. }
  692. private void kbtnImport_Click(object sender, EventArgs e)
  693. {
  694. }
  695. private void kbtnPrint_Click(object sender, EventArgs e)
  696. {
  697. }
  698. #endregion
  699. #region DatatGridView 事件
  700. /// <summary>
  701. /// 设置DatatGridView的第一列复选框的背景色
  702. /// </summary>
  703. /// <param name="sender"></param>
  704. /// <param name="e"></param>
  705. private void kdgv_WmsInRetreat_CellContentClick(object sender, DataGridViewCellEventArgs e)
  706. {
  707. if (e.ColumnIndex == 0)
  708. {
  709. DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)kdgv_WmsInRetreat.CurrentCell;
  710. if (Convert.ToBoolean(checkCell.EditedFormattedValue))
  711. {
  712. kdgv_WmsInRetreat.CurrentCell.Style.BackColor = Color.FromArgb(51, 153, 255);
  713. }
  714. else
  715. {
  716. kdgv_WmsInRetreat.CurrentCell.Style.BackColor = Color.Transparent;
  717. }
  718. }
  719. }
  720. /// <summary>
  721. /// 设置状态列的背景色
  722. /// </summary>
  723. /// <param name="dataGridView">dataGridView控件</param>
  724. /// <param name="columnName">状态列的列名称</param>
  725. private void SetStatusCellBackColor(KryptonDataGridView dataGridView, string columnName)
  726. {
  727. foreach (DataGridViewRow item in dataGridView.Rows)
  728. {
  729. string arrivalDtlStatus = item.Cells[columnName].Value.ToString();
  730. switch (Enum.Parse(typeof(RetreatStatus), arrivalDtlStatus))
  731. {
  732. case RetreatStatus.初始创建:
  733. //item.Cells[columnName].Style.ForeColor = Color.White;
  734. item.Cells[columnName].Style.BackColor = Color.FromArgb(214, 228, 243);
  735. break;
  736. case RetreatStatus.退料审核:
  737. //item.Cells[columnName].Style.ForeColor = Color.White;
  738. item.Cells[columnName].Style.BackColor = Color.LightYellow;
  739. break;
  740. case RetreatStatus.退料收货中:
  741. //item.Cells[columnName].Style.ForeColor = Color.White;
  742. item.Cells[columnName].Style.BackColor = Color.LightGreen;
  743. break;
  744. case RetreatStatus.退料完成:
  745. //item.Cells[columnName].Style.ForeColor = Color.White;
  746. item.Cells[columnName].Style.BackColor = Color.LightGray;
  747. break;
  748. case RetreatStatus.强制完成:
  749. //item.Cells[columnName].Style.ForeColor = Color.White;
  750. item.Cells[columnName].Style.BackColor = Color.DarkGray;
  751. break;
  752. case RetreatStatus.已删除:
  753. //item.Cells[columnName].Style.ForeColor = Color.White;
  754. item.Cells[columnName].Style.BackColor = Color.FromArgb(255, 69, 0);
  755. break;
  756. default:
  757. break;
  758. }
  759. }
  760. }
  761. private void kdgv_WmsInRetreat_DataError(object sender, DataGridViewDataErrorEventArgs e)
  762. {
  763. }
  764. private void kdgv_WmsInRetreatDtl_DataError(object sender, DataGridViewDataErrorEventArgs e)
  765. {
  766. }
  767. #endregion
  768. #region 鼠标右键单击事件
  769. /// <summary>
  770. /// 刷新明细表数据
  771. /// </summary>
  772. /// <param name="sender"></param>
  773. /// <param name="e"></param>
  774. private void 刷新ToolStripMenuItem1_Click(object sender, EventArgs e)
  775. {
  776. if (kdgv_WmsInRetreatDtl.Rows.Count > 0)
  777. {
  778. if (kdgv_WmsInRetreat.SelectedRows.Count > 0 && isControlRetreatDtlShow)
  779. {
  780. //RetreatId = kdgv_WmsInRetreat.SelectedRows[0].Cells[1].Value.ToString();
  781. int mainTableId = Convert.ToInt32(kdgv_WmsInRetreat.SelectedRows[0].Cells[1].Value);
  782. var loadfrm = new frmLoading();
  783. loadfrm.Show();
  784. var message = loadfrm.EventCalExecExt1(LoadWmsInRetreatDtlData, mainTableId);
  785. if (!string.IsNullOrWhiteSpace(message))
  786. {
  787. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  788. }
  789. }
  790. }
  791. }
  792. /// <summary>
  793. /// 刷新主表数据
  794. /// </summary>
  795. /// <param name="sender"></param>
  796. /// <param name="e"></param>
  797. private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e)
  798. {
  799. if (kdgv_WmsInRetreat.Rows.Count > 0)
  800. {
  801. RefreshRetreatSearchData();
  802. }
  803. }
  804. #endregion
  805. private void pageToolbar1_OnPageChange(int PageIndex, int PageSzie)
  806. {
  807. this.kbtnSearch_Click(null, null);
  808. }
  809. }
  810. }