frmChildEditWmsOutInvoice.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  1. using ComponentFactory.Krypton.Toolkit;
  2. using NXWMS.Client.Model.AppModels.Condition.Balance;
  3. using NXWMS.Client.Model.AppModels.Condition.Common;
  4. using NXWMS.Client.Model.AppModels.Result.Balance;
  5. using NXWMS.Client.Model.AppModels.Result.Common;
  6. using NXWMS.Client.Model.AppModels.Result.OutStock;
  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. namespace NXWMS.Forms.OutStock.frmOutstockChild
  21. {
  22. /// <summary>
  23. /// 编辑发货单窗体
  24. /// </summary>
  25. public partial class frmChildEditWmsOutInvoice : KryptonForm
  26. {
  27. /// <summary>
  28. /// 窗体构造函数
  29. /// </summary>
  30. public frmChildEditWmsOutInvoice()
  31. {
  32. InitializeComponent();
  33. InitmaterielBalanceDataControl();
  34. }
  35. #region 全局变量
  36. /// <summary>
  37. /// 库存物料数据的浮动DataGridView数据表
  38. /// </summary>
  39. private KryptonDataGridView kdgv_materielBalanceData = new KryptonDataGridView();
  40. /// <summary>
  41. /// 发货单主键ID
  42. /// </summary>
  43. public string InvoiceId { get; set; }
  44. /// <summary>
  45. /// 数据库中的发货单所有数据(包括主、明细表)。
  46. /// 未进行编辑过。
  47. /// </summary>
  48. private WmsOutInvoiceResult InvoiceDataNotEdit = new WmsOutInvoiceResult();
  49. #endregion
  50. #region 初始化数据
  51. /// <summary>
  52. /// 窗体加载函数
  53. /// </summary>
  54. /// <param name="sender"></param>
  55. /// <param name="e"></param>
  56. private void frmChildEditWmsOutInvoice_Load(object sender, EventArgs e)
  57. {
  58. InitComboBoxItemData();
  59. kdtp_InvoiceEndTime.Checked = false;
  60. LoadWmsOutInvoiceDtlData();
  61. }
  62. /// <summary>
  63. /// 初始化下拉列表数据
  64. /// </summary>
  65. private void InitComboBoxItemData()
  66. {
  67. /*
  68. ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
  69. */
  70. List<BasDictionaryResult> results = new List<BasDictionaryResult>();
  71. #region 单据类型
  72. results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "InvoiceTypeDesc");
  73. if (results.Count > 0)
  74. {
  75. kcmb_InvoiceType.Items.Clear();
  76. foreach (var item in results)
  77. {
  78. kcmb_InvoiceType.Items.Add(new ListItem
  79. {
  80. Value = item.DICTIONARY_ITEM_CODE,
  81. Text = item.DICTIONARY_ITEM_NAME,
  82. });
  83. }
  84. kcmb_InvoiceType.SelectedIndex = 0;
  85. }
  86. else
  87. {
  88. KryptonMessageBox.Show("未找到发货单类型的字典项数据!");
  89. }
  90. #endregion
  91. }
  92. /// <summary>
  93. /// 调用服务端接口,请求发货单明细表数据
  94. /// </summary>
  95. /// <returns></returns>
  96. private string LoadWmsOutInvoiceDtlData()
  97. {
  98. var result = WmsInvoiceService.wmsOutInvoiceService.GetWmsOutInvoiceDtlListForId(new WmsOutInvoiceResult { INVOICE_ID = Convert.ToInt32(this.InvoiceId) });
  99. if (result.Status == OperateStatus.Success)
  100. {
  101. kcmb_InvoiceType.Text = result.Data.INVOICE_TYPE_NAME;
  102. kcmb_InvoiceType.Enabled = false;
  103. knud_InvoicePriority.Value = result.Data.INVOICE_PRIORITY;
  104. //knud_InvoicePriority.Enabled = false;
  105. ktb_Describe.Text = result.Data.DESCRIBE;
  106. if (result.Data.INVOICE_END_TIME != new DateTime())
  107. {
  108. kdtp_InvoiceEndTime.Value = result.Data.INVOICE_END_TIME;
  109. }
  110. InvoiceDataNotEdit = result.Data;
  111. kdgv_InvoiceDtlData.Rows.Clear();
  112. foreach (WmsOutInvoiceDtlResult item in result.Data.WmsOutInvoiceDtlList)
  113. {
  114. int index = kdgv_InvoiceDtlData.Rows.Add();
  115. kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
  116. kdgv_InvoiceDtlData.Rows[index].Cells[1].Value = item.MATERIEL_CODE;
  117. kdgv_InvoiceDtlData.Rows[index].Cells[2].Value = item.MATERIEL_NAME;
  118. kdgv_InvoiceDtlData.Rows[index].Cells[3].Value = item.MATERIEL_BARCODE;
  119. kdgv_InvoiceDtlData.Rows[index].Cells[4].Value = item.MATERIEL_SPEC;
  120. kdgv_InvoiceDtlData.Rows[index].Cells[5].Value = item.BATCH_NO;
  121. kdgv_InvoiceDtlData.Rows[index].Cells[6].Value = item.INVOICE_DEMAND_QTY;
  122. kdgv_InvoiceDtlData.Rows[index].Cells[7].Value = item.UNIT_CODE;
  123. kdgv_InvoiceDtlData.Rows[index].Cells[8].Value = item.PACKAGE_CODE;
  124. }
  125. return string.Empty;
  126. }
  127. else
  128. {
  129. return result.Message;
  130. }
  131. }
  132. #region 初始化浮动DataGridView控件和数据
  133. /// <summary>
  134. /// 初始化库存物料数据的浮动DataGridView数据表
  135. /// </summary>
  136. private void InitmaterielBalanceDataControl()
  137. {
  138. this.Controls.Add(kdgv_materielBalanceData);
  139. kdgv_materielBalanceData.Visible = false;
  140. kdgv_materielBalanceData.AllowUserToAddRows = false;
  141. kdgv_materielBalanceData.AllowUserToDeleteRows = false;
  142. kdgv_materielBalanceData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
  143. kdgv_materielBalanceData.MultiSelect = false;
  144. kdgv_materielBalanceData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  145. kdgv_materielBalanceData.ScrollBars = System.Windows.Forms.ScrollBars.None;
  146. kdgv_materielBalanceData.BorderStyle = System.Windows.Forms.BorderStyle.None;
  147. kdgv_materielBalanceData.BackgroundColor = this.BackColor;
  148. kdgv_materielBalanceData.BringToFront();
  149. kdgv_materielBalanceData.ReadOnly = true;
  150. kdgv_materielBalanceData.CellDoubleClick += kdgv_materielBalanceData_CellDoubleClick;
  151. }
  152. private void kdgv_materielBalanceData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
  153. {
  154. int rowIndex = e.RowIndex;
  155. if (rowIndex >= 0)
  156. {
  157. string idX = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["序号"].Value.ToString();
  158. string materielCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料编码"].Value.ToString();
  159. string materielName = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料名称"].Value.ToString();
  160. string materielBarCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料条码"].Value.ToString();
  161. string materielSpec = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料规格"].Value.ToString();
  162. string batchNo = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["批次号"].Value.ToString();
  163. string balanceQty = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["库存数量"].Value.ToString();
  164. string unitCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["单位"].Value.ToString();
  165. string packageCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["包装"].Value.ToString();
  166. if (kdgv_InvoiceDtlData.Rows.Count > 0)
  167. {
  168. foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
  169. {
  170. string tmpBatchNo = item.Cells[5].Value == null ? "" : item.Cells[5].Value.ToString();
  171. string tmpMateriel = item.Cells[1].Value == null ? "" : item.Cells[1].Value.ToString();
  172. if (batchNo == tmpBatchNo && materielCode == tmpMateriel && !item.IsNewRow)
  173. {
  174. KryptonMessageBox.Show($"物料条码:【{tmpMateriel}】,批次号:【{tmpBatchNo}】 已经被添加到发货单明细,不允许重复添加。");
  175. return;
  176. }
  177. }
  178. }
  179. int index = kdgv_InvoiceDtlData.Rows.Add();
  180. kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
  181. kdgv_InvoiceDtlData.Rows[index].Cells[1].Value = materielCode;
  182. kdgv_InvoiceDtlData.Rows[index].Cells[2].Value = materielName;
  183. kdgv_InvoiceDtlData.Rows[index].Cells[3].Value = materielBarCode;
  184. kdgv_InvoiceDtlData.Rows[index].Cells[4].Value = materielSpec;
  185. kdgv_InvoiceDtlData.Rows[index].Cells[5].Value = batchNo;
  186. WmsOutInvoiceDtlResult invoiceDtlMd = InvoiceDataNotEdit.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == materielCode && x.BATCH_NO == batchNo);
  187. if (invoiceDtlMd != null)
  188. {
  189. kdgv_InvoiceDtlData.Rows[index].Cells[6].Value = balanceQty;
  190. }
  191. kdgv_InvoiceDtlData.Rows[index].Cells[7].Value = unitCode;
  192. kdgv_InvoiceDtlData.Rows[index].Cells[8].Value = packageCode;
  193. this.kdgv_materielBalanceData.Visible = false;
  194. this.kdgv_materielBalanceData.DataSource = null;
  195. this.ktb_BatchNoMsg.Text = "";
  196. this.ktb_MaterielMsg.Text = "";
  197. }
  198. }
  199. private void Delay(int milliseconds)
  200. {
  201. var timer = new System.Timers.Timer(milliseconds) { AutoReset = false };
  202. timer.Elapsed += delegate {
  203. Invoke(new Action(() => {
  204. DataGridViewCellEventArgs evta = new DataGridViewCellEventArgs(1, 0);
  205. kdgv_materielBalanceData_CellDoubleClick(this.kdgv_materielBalanceData, evta);
  206. timer.Dispose();
  207. }));
  208. };
  209. timer.Start();
  210. }
  211. /// <summary>
  212. /// 物料信息输入内容变化事件
  213. /// </summary>
  214. /// <param name="sender"></param>
  215. /// <param name="e"></param>
  216. private void ktb_MaterielMsg_TextChanged(object sender, EventArgs e)
  217. {
  218. if (!string.IsNullOrEmpty(this.ktb_MaterielMsg.Text))
  219. {
  220. Point pot = this.ktb_MaterielMsg.Location;
  221. pot.X = pot.X + 2;
  222. pot.Y = pot.Y + this.ktb_MaterielMsg.Height * 2 + 2;
  223. DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd
  224. {
  225. MaterielMsg = this.ktb_MaterielMsg.Text
  226. //BatchNoMsg = this.ktb_BatchNoMsg.Text
  227. });
  228. if (dt.Rows.Count == 1 && this.ktb_MaterielMsg.Text == dt.Rows[0]["物料编码"].ToString())
  229. {
  230. this.kdgv_materielBalanceData.Location = pot;
  231. this.kdgv_materielBalanceData.DataSource = dt;
  232. int cWidth = 0;
  233. for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
  234. {
  235. cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
  236. }
  237. this.kdgv_materielBalanceData.Width = cWidth + 40;
  238. this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
  239. this.kdgv_materielBalanceData.Visible = true;
  240. this.kdgv_materielBalanceData.Invalidate();
  241. this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
  242. Delay(300);
  243. }
  244. else
  245. {
  246. this.kdgv_materielBalanceData.Location = pot;
  247. this.kdgv_materielBalanceData.DataSource = dt;
  248. int cWidth = 0;
  249. for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
  250. {
  251. cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
  252. }
  253. this.kdgv_materielBalanceData.Width = cWidth + 40;
  254. this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
  255. this.kdgv_materielBalanceData.Visible = true;
  256. this.kdgv_materielBalanceData.Invalidate();
  257. }
  258. }
  259. else
  260. {
  261. this.kdgv_materielBalanceData.Visible = false;
  262. this.kdgv_materielBalanceData.DataSource = null;
  263. }
  264. }
  265. /// <summary>
  266. /// 批次号输入内容变化事件
  267. /// </summary>
  268. /// <param name="sender"></param>
  269. /// <param name="e"></param>
  270. private void ktb_BatchNoMsg_TextChanged(object sender, EventArgs e)
  271. {
  272. if (!string.IsNullOrEmpty(this.ktb_BatchNoMsg.Text))
  273. {
  274. Point pot = this.ktb_BatchNoMsg.Location;
  275. pot.X = pot.X + 2;
  276. pot.Y = pot.Y + this.ktb_BatchNoMsg.Height * 2 + 2;
  277. DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd
  278. {
  279. //MaterielMsg = this.ktb_MaterielMsg.Text,
  280. BatchNoMsg = this.ktb_BatchNoMsg.Text
  281. });
  282. if (dt.Rows.Count == 1 && this.ktb_BatchNoMsg.Text == dt.Rows[0]["物料编码"].ToString())
  283. {
  284. this.kdgv_materielBalanceData.Location = pot;
  285. this.kdgv_materielBalanceData.DataSource = dt;
  286. int cWidth = 0;
  287. for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
  288. {
  289. cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
  290. }
  291. this.kdgv_materielBalanceData.Width = cWidth + 40;
  292. this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
  293. this.kdgv_materielBalanceData.Visible = true;
  294. this.kdgv_materielBalanceData.Invalidate();
  295. this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
  296. Delay(300);
  297. }
  298. else
  299. {
  300. this.kdgv_materielBalanceData.Location = pot;
  301. this.kdgv_materielBalanceData.DataSource = dt;
  302. int cWidth = 0;
  303. for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
  304. {
  305. cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
  306. }
  307. this.kdgv_materielBalanceData.Width = cWidth + 40;
  308. this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
  309. this.kdgv_materielBalanceData.Visible = true;
  310. this.kdgv_materielBalanceData.Invalidate();
  311. }
  312. }
  313. else
  314. {
  315. this.kdgv_materielBalanceData.Visible = false;
  316. this.kdgv_materielBalanceData.DataSource = null;
  317. }
  318. }
  319. private DataTable CreateTable(WmsStkBalanceDtlSearchMd SearchMd)
  320. {
  321. DataTable dt = new DataTable();
  322. DataColumn dc = new DataColumn("序号");
  323. dt.Columns.Add(dc);
  324. dc = new DataColumn("物料编码");
  325. dt.Columns.Add(dc);
  326. dc = new DataColumn("物料名称");
  327. dt.Columns.Add(dc);
  328. dc = new DataColumn("物料规格");
  329. dt.Columns.Add(dc);
  330. dc = new DataColumn("物料条码");
  331. dt.Columns.Add(dc);
  332. dc = new DataColumn("批次号");
  333. dt.Columns.Add(dc);
  334. dc = new DataColumn("库存数量");
  335. dt.Columns.Add(dc);
  336. dc = new DataColumn("单位");
  337. dt.Columns.Add(dc);
  338. dc = new DataColumn("包装");
  339. dt.Columns.Add(dc);
  340. var result = WmsInvoiceService.wmsOutInvoiceService.GetBalanceForInvoice(new WmsStkBalanceDtlSearchMd
  341. {
  342. MaterielMsg = ktb_MaterielMsg.Text,
  343. BatchNoMsg = ktb_BatchNoMsg.Text
  344. });
  345. if (result.Status == OperateStatus.Success)
  346. {
  347. if (result.Data.Count > 0)
  348. {
  349. int index = 0;
  350. foreach (WmsStkBalanceDtlResult item in result.Data)
  351. {
  352. index++;
  353. DataRow dr = dt.NewRow();
  354. dr["序号"] = index;
  355. dr["物料编码"] = item.MATERIEL_CODE;
  356. dr["物料名称"] = item.MATERIEL_NAME;
  357. dr["物料规格"] = item.MATERIEL_SPEC;
  358. dr["物料条码"] = item.MATERIEL_BARCODE;
  359. dr["批次号"] = item.BATCH_NO;
  360. dr["库存数量"] = item.QTY;
  361. dr["单位"] = item.UNIT_CODE;
  362. dr["包装"] = item.PACKAGE_CODE;
  363. dt.Rows.Add(dr);
  364. }
  365. }
  366. }
  367. return dt;
  368. }
  369. #endregion
  370. #endregion
  371. #region 按钮事件
  372. private void btnConfirm_Click(object sender, EventArgs e)
  373. {
  374. WmsOutInvoiceResult mdInvoice = new WmsOutInvoiceResult();
  375. mdInvoice.INVOICE_ID = InvoiceDataNotEdit.INVOICE_ID;
  376. mdInvoice.INVOICE_NO = InvoiceDataNotEdit.INVOICE_NO;
  377. mdInvoice.INVOICE_TYPE = ((ListItem)kcmb_InvoiceType.SelectedItem).Value;
  378. mdInvoice.INVOICE_TYPE_NAME = kcmb_InvoiceType.Text;
  379. if (kdtp_InvoiceEndTime.Checked)
  380. {
  381. mdInvoice.INVOICE_END_TIME = kdtp_InvoiceEndTime.Value;
  382. }
  383. else
  384. {
  385. mdInvoice.INVOICE_END_TIME = new DateTime();
  386. }
  387. mdInvoice.INVOICE_STATUS = InvoiceDataNotEdit.INVOICE_STATUS;
  388. mdInvoice.INVOICE_PRIORITY = Convert.ToInt32(knud_InvoicePriority.Value);
  389. mdInvoice.DESCRIBE = ktb_Describe.Text.Trim();
  390. mdInvoice.CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
  391. mdInvoice.UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
  392. List<WmsOutInvoiceDtlResult> mdInvoiceDtlList = new List<WmsOutInvoiceDtlResult>();
  393. if (kdgv_InvoiceDtlData.Rows.Count > 0 && !kdgv_InvoiceDtlData.Rows[0].IsNewRow)
  394. {
  395. foreach (DataGridViewRow dvr in kdgv_InvoiceDtlData.Rows)
  396. {
  397. if (!dvr.IsNewRow)
  398. {
  399. #region 校验每一行数据的完整性
  400. string RowCheckMsg = string.Empty;
  401. if (!CheckDataGridViewRowFormat(dvr, ref RowCheckMsg))
  402. {
  403. KryptonMessageBox.Show(RowCheckMsg);
  404. return;
  405. }
  406. #endregion
  407. string materielCode = dvr.Cells[1].Value.ToString();
  408. string materielName = dvr.Cells[2].Value.ToString();
  409. string materielBarcode = dvr.Cells[3].Value == null ? null : dvr.Cells[3].Value.ToString();
  410. string materielSpec = dvr.Cells[4].Value == null ? null : dvr.Cells[4].Value.ToString();
  411. string batchNo = dvr.Cells[5].Value == null ? null : dvr.Cells[5].Value.ToString();
  412. decimal invoiceQty = Convert.ToDecimal(dvr.Cells[6].Value.ToString());
  413. string unitCode = dvr.Cells[7].Value == null ? null : dvr.Cells[7].Value.ToString();
  414. string packageCode = dvr.Cells[8].Value == null ? null : dvr.Cells[8].Value.ToString();
  415. WmsOutInvoiceDtlResult invoiceDtlMd = InvoiceDataNotEdit.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == materielCode && x.BATCH_NO == batchNo);
  416. mdInvoiceDtlList.Add(new WmsOutInvoiceDtlResult
  417. {
  418. INVOICE_DTL_ID = invoiceDtlMd == null ? 0 : invoiceDtlMd.INVOICE_DTL_ID,
  419. MATERIEL_CODE = materielCode,
  420. MATERIEL_NAME = materielName,
  421. MATERIEL_BARCODE = materielBarcode,
  422. BATCH_NO = batchNo,
  423. INVOICE_DEMAND_QTY = invoiceQty,
  424. UNIT_CODE = unitCode,
  425. PACKAGE_CODE = packageCode,
  426. CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
  427. UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
  428. DESCRIBE = null
  429. });
  430. }
  431. }
  432. #region 校验明细行 不能存在相同批次、物料条码的数据行
  433. var strList = mdInvoiceDtlList.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();
  434. foreach (var item in strList)
  435. {
  436. if (item.Key > 1)
  437. {
  438. KryptonMessageBox.Show($"相同的物料:【{item.MATERIEL_CODE}】,批次号:【{item.BATCH_NO}】只能添加一行数据,请修正输入数据行!");
  439. return;
  440. }
  441. }
  442. #endregion
  443. List<WmsOutInvoiceDtlResult> finalInvoiceDtlList = new List<WmsOutInvoiceDtlResult>();
  444. foreach (WmsOutInvoiceDtlResult itemOld in InvoiceDataNotEdit.WmsOutInvoiceDtlList)
  445. {
  446. WmsOutInvoiceDtlResult arrDtlNew = mdInvoiceDtlList.Find(x => x.MATERIEL_CODE == itemOld.MATERIEL_CODE && x.BATCH_NO == itemOld.BATCH_NO);
  447. if (arrDtlNew != null)
  448. {
  449. arrDtlNew.INVOICE_DTL_STATUS = itemOld.INVOICE_DTL_STATUS;
  450. arrDtlNew.REMARKS1 = "更新";
  451. finalInvoiceDtlList.Add(arrDtlNew);
  452. }
  453. else
  454. {
  455. itemOld.INVOICE_DTL_STATUS = (int)InvoiceStatus.已删除;
  456. itemOld.REMARKS1 = "删除";
  457. finalInvoiceDtlList.Add(itemOld);
  458. }
  459. }
  460. foreach (WmsOutInvoiceDtlResult itemNew in mdInvoiceDtlList)
  461. {
  462. if (itemNew.INVOICE_DTL_ID == 0)
  463. {
  464. itemNew.REMARKS1 = "添加";
  465. finalInvoiceDtlList.Add(itemNew);
  466. }
  467. }
  468. mdInvoice.WmsOutInvoiceDtlList = finalInvoiceDtlList;
  469. var result = WmsInvoiceService.wmsOutInvoiceService.EditWmsOutInvoiceData(mdInvoice);
  470. if (result.Status == OperateStatus.Success)
  471. {
  472. KryptonMessageBox.Show(result.Message);
  473. frmWmsOutInvoice.RefreshFrmHost();
  474. this.Close();
  475. }
  476. else
  477. {
  478. KryptonMessageBox.Show(result.Message);
  479. }
  480. }
  481. else
  482. {
  483. DialogResult dr = KryptonMessageBox.Show("由于明细为空,确定要删除发货单所有数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
  484. if (dr == DialogResult.OK)
  485. {
  486. var result = WmsInvoiceService.wmsOutInvoiceService.DeleteWmsOutInvoiceData(new WmsOutInvoiceResult { INVOICE_NO = InvoiceDataNotEdit.INVOICE_ID.ToString(), UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
  487. if (result.Status == OperateStatus.Success)
  488. {
  489. KryptonMessageBox.Show(result.Message);
  490. frmWmsOutInvoice.RefreshFrmHost();
  491. this.Close();
  492. }
  493. else
  494. {
  495. KryptonMessageBox.Show(result.Message);
  496. }
  497. }
  498. }
  499. }
  500. /// <summary>
  501. /// 校验DataGridView输入行数据的正确性
  502. /// </summary>
  503. /// <param name="dvr">DataGridView输入行</param>
  504. /// <param name="OutMssg">校验结果信息</param>
  505. /// <returns></returns>
  506. private bool CheckDataGridViewRowFormat(DataGridViewRow dvr, ref string OutMssg)
  507. {
  508. if (dvr.Cells[6].Value == null)
  509. {
  510. OutMssg = $"第【{dvr.Index + 1}】行未输入发货数量!";
  511. return false;
  512. }
  513. else
  514. {
  515. if (!Regex.IsMatch(dvr.Cells[6].Value.ToString(), @"([1-9]\d*(\.\d*[1-9])?)"))
  516. {
  517. OutMssg = $"第【{dvr.Index + 1}】行输入的发货数量不是合法的数字类型,请检查!";
  518. return false;
  519. }
  520. }
  521. OutMssg = "校验成功!";
  522. return true;
  523. }
  524. private void btnCancel_Click(object sender, EventArgs e)
  525. {
  526. this.Close();
  527. }
  528. #endregion
  529. #region DataGridView相关事件
  530. #endregion
  531. #region 鼠标右键单击事件
  532. private void 删除选中行ToolStripMenuItem_Click(object sender, EventArgs e)
  533. {
  534. if (!kdgv_InvoiceDtlData.CurrentRow.IsNewRow)
  535. {
  536. kdgv_InvoiceDtlData.Rows.Remove(kdgv_InvoiceDtlData.CurrentCell.OwningRow);
  537. //foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
  538. //{
  539. // int index = item.Index;
  540. // kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
  541. //}
  542. }
  543. }
  544. private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e)
  545. {
  546. kdgv_InvoiceDtlData.Rows.Clear();
  547. }
  548. private void 重新加载ToolStripMenuItem_Click(object sender, EventArgs e)
  549. {
  550. var loadfrm = new frmLoading();
  551. loadfrm.Show();
  552. var message = loadfrm.EventCalExec(LoadWmsOutInvoiceDtlData);
  553. if (!string.IsNullOrWhiteSpace(message))
  554. {
  555. KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  556. }
  557. }
  558. #endregion
  559. }
  560. }