锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

486 lines
19 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.Linq;
  6. using System.Linq;
  7. using System.Drawing;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using DevExpress.XtraEditors;
  11. using DevExpress.XtraGrid.Views.BandedGrid;
  12. using DevExpress.XtraGrid.Columns;
  13. using DevExpress.XtraGrid;
  14. using System.IO;
  15. using System.Threading;
  16. using ICSSoft.Base.Language.Tool;
  17. using ICSSoft.Base.Config.AppConfig;
  18. using ICSSoft.Base.UserControl.MessageControl;
  19. using ICSSoft.Base.Config.DBHelper;
  20. using ICSSoft.Base.Report.Filter;
  21. using ICSSoft.Base.UserControl.FormControl;
  22. using ICSSoft.Base.Report.GridReport;
  23. using ICSSoft.Base.ReferForm.AppReferForm;
  24. using ICSSoft.Frame.Data.BLL;
  25. using ICSSoft.Frame.Data.Entity;
  26. using ICSSoft.Base.Lable.PrintTool;
  27. using System.Drawing.Printing;
  28. namespace ICSSoft.Frame.APP
  29. {
  30. public partial class FormICSITEMBox : DevExpress.XtraEditors.XtraForm
  31. {
  32. private string sqltxt = "";
  33. private string sqlconn = "";
  34. String guid = AppConfig.GetGuid();
  35. private DataTable dataSource = null;
  36. private DataTable data = null;
  37. private string MoId = "";
  38. private string MoCode = "";
  39. private decimal Qty = 0.00m;
  40. private string boxNo = "";
  41. private static PrintDocument fPrintDocument = new PrintDocument();
  42. #region 构造函数
  43. public FormICSITEMBox()
  44. {
  45. InitializeComponent();
  46. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  47. this.WindowState = FormWindowState.Maximized;
  48. }
  49. public FormICSITEMBox(string moID, string moCode, decimal qty)
  50. {
  51. InitializeComponent();
  52. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  53. this.WindowState = FormWindowState.Maximized;
  54. MoId = moID;
  55. MoCode = moCode;
  56. Qty = qty;
  57. }
  58. #endregion
  59. #region 操作权限
  60. public DataTable RightOfExute()
  61. {
  62. DataTable rData = new DataTable();
  63. rData.Columns.Add("BtnName");
  64. rData.Columns.Add("ActionName");
  65. //查看权限(必须有)
  66. DataRow seeRow = rData.NewRow();
  67. seeRow["BtnName"] = "see";
  68. seeRow["ActionName"] = "查看";
  69. rData.Rows.Add(seeRow);
  70. List<Control> ControlList = new List<Control>();
  71. ControlList.Add(btnCreate);
  72. ControlList.Add(simpleButton4);
  73. ControlList.Add(btnModify);
  74. ControlList.Add(btnDel);
  75. foreach (Control ctr in ControlList)
  76. {
  77. if (ctr.GetType() == typeof(SimpleButton))
  78. {
  79. DataRow dr = rData.NewRow();
  80. dr["BtnName"] = ctr.Name;
  81. dr["ActionName"] = ctr.Text;
  82. rData.Rows.Add(dr);
  83. }
  84. }
  85. rData.AcceptChanges();
  86. return rData;
  87. }
  88. public DataTable RightOfData()// 数据权限
  89. {
  90. DataTable rData = new DataTable();
  91. rData.Columns.Add("BodyName");
  92. rData.Columns.Add("ControlName");
  93. rData.Columns.Add("ControlCaption");
  94. rData.AcceptChanges();
  95. return rData;
  96. }
  97. #endregion
  98. #region 退出
  99. private void btnClose_Click(object sender, EventArgs e)
  100. {
  101. AppConfig.CloseFormShow(this.Text);
  102. this.Close();
  103. }
  104. private void btnExit_Click(object sender, EventArgs e)
  105. {
  106. AppConfig.CloseFormShow(this.Text);
  107. this.Close();
  108. }
  109. #endregion
  110. #region 移动窗体
  111. private const int WM_NCHITTEST = 0x84;
  112. private const int HTCLIENT = 0x1;
  113. private const int HTCAPTION = 0x2;
  114. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  115. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  116. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  117. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  118. //重写窗体,使窗体可以不通过自带标题栏实现移动
  119. protected override void WndProc(ref Message m)
  120. {
  121. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  122. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  123. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  124. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  125. switch (m.Msg)
  126. {
  127. case WM_NCHITTEST:
  128. base.WndProc(ref m);
  129. if ((int)m.Result == HTCLIENT)
  130. m.Result = (IntPtr)HTCAPTION;
  131. return;
  132. }
  133. //拦截双击标题栏、移动窗体的系统消息
  134. if (m.Msg != 0xA3)
  135. {
  136. base.WndProc(ref m);
  137. }
  138. }
  139. #endregion
  140. #region 列表
  141. private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
  142. {
  143. if (e.Info.IsRowIndicator && e.RowHandle >= 0)
  144. e.Info.DisplayText = (e.RowHandle + 1).ToString();
  145. }
  146. #endregion
  147. //加载
  148. private void FormICSITEMBox_Load(object sender, EventArgs e)
  149. {
  150. }
  151. private void print(string packno)
  152. {
  153. if (string.IsNullOrEmpty(packno)) return;
  154. List<string> printlist = GetLocalPrinters();
  155. string print = "";
  156. if (printlist == null || printlist.Count == 0)
  157. { ICSBaseSimpleCode.AppshowMessageBox("系统中不存在打印机,请检查!"); return; }
  158. foreach (string str in printlist)
  159. { if (str.Contains("GP-1124T")) { print = str; } }
  160. if (print == null || print == "")
  161. { ICSBaseSimpleCode.AppshowMessageBox("默认打印机不存在,请检查!"); return; }
  162. List<PrintPara> parasList = new List<PrintPara>();
  163. PrintPara para = new PrintPara();
  164. para.PrintKey = "PackNo";
  165. para.PrintValues = new object[] { packno };
  166. parasList.Add(para);
  167. string ID = "f9ce8ba9-4356-457c-8bda-479cbdf02552";
  168. ICSSoft.Base.Lable.PrintTool.PrintReport prpt = new ICSSoft.Base.Lable.PrintTool.PrintReport(ID, print, true, false, "ICSBarCode", 1, "", "本地打印", parasList);
  169. Thread.Sleep(1000);
  170. }
  171. #region 获取系统中打印机名称
  172. //获取本机默认打印机名称
  173. public static String DefaultPrinter()
  174. {
  175. return fPrintDocument.PrinterSettings.PrinterName;
  176. }
  177. public static List<String> GetLocalPrinters()
  178. {
  179. List<String> fPrinters = new List<String>();
  180. fPrinters.Add(DefaultPrinter()); //默认打印机始终出现在列表的第一项
  181. foreach (String fPrinterName in PrinterSettings.InstalledPrinters)
  182. {
  183. if (!fPrinters.Contains(fPrinterName))
  184. {
  185. fPrinters.Add(fPrinterName);
  186. }
  187. }
  188. return fPrinters;
  189. }
  190. #endregion
  191. private void txtLOTNO_KeyPress(object sender, KeyPressEventArgs e)
  192. {
  193. try
  194. {
  195. if (e.KeyChar == 13)
  196. {
  197. if (string.IsNullOrWhiteSpace(txtLOTNO.Text.Trim()))
  198. {
  199. ICSBaseSimpleCode.AppshowMessageBox("成品条码不能为空");
  200. return;
  201. }
  202. if (txtLOTNO.Text.Trim().ToUpper().Equals("END"))
  203. {
  204. #region 结束字符自动拼箱、打印处理
  205. btnCreate_Click(null, null);
  206. grdDetail.DataSource = null;
  207. print(boxNo);
  208. #endregion
  209. }
  210. else
  211. {
  212. string sql = @"SELECT
  213. a.LotNO,
  214. d.CUSCODE,
  215. d.CUSORDERNO,
  216. d.CUSITEMCODE,
  217. a.INVCode,
  218. e.INVNAME,
  219. e.INVUOM,
  220. e.INVSTD,
  221. a.LotQty
  222. FROM
  223. ICSWareHouseLotInfo a
  224. LEFT JOIN ICSITEMLot b ON a.LotNO=b.LotNO AND a.WorkPoint=b.WorkPoint
  225. LEFT JOIN ICSINVReceiptDetail c ON b.TransNO=c.ReceiptNO AND b.TransLine=c.ReceiptLine AND b.WorkPoint=c.WorkPoint
  226. LEFT JOIN ICSMO d ON c.MOCODE=d.MOCODE AND c.MOSEQ=d.MOSEQ AND c.WorkPoint=d.WorkPoint
  227. LEFT JOIN ICSINVENTORY e ON a.INVCode=e.INVCODE AND a.WorkPoint=e.WorkPoint
  228. WHERE a.LotQty<>0 AND a.LotNO='{0}' AND a.WorkPoint='{1}'";
  229. sql = string.Format(sql, txtLOTNO.Text.Trim(), AppConfig.WorkPointCode);
  230. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  231. if (dt == null || dt.Rows.Count <= 0)
  232. {
  233. ICSBaseSimpleCode.AppshowMessageBox("该产品批号未入库!");
  234. return;
  235. }
  236. if (dataSource == null)
  237. {
  238. dataSource = dt;
  239. }
  240. else
  241. {
  242. foreach (DataRow dr in dt.Rows)
  243. {
  244. DataRow[] drs = dataSource.Select("LotNO='" + dr["LotNO"] + "'");
  245. if (drs.Count() > 0)
  246. {
  247. ICSBaseSimpleCode.AppshowMessageBox("该产品批号已存在!");
  248. break;
  249. }
  250. if (dataSource.Rows.Count > 0 && !dataSource.Rows[0]["CUSCODE"].ToString().Equals(dr["CUSCODE"].ToString()))
  251. {
  252. ICSBaseSimpleCode.AppshowMessageBox("不同的客户不能拼箱!");
  253. break;
  254. }
  255. dataSource.ImportRow(dr);
  256. }
  257. }
  258. grdDetail.DataSource = dataSource;
  259. grvDetail.BestFitColumns();
  260. }
  261. txtLOTNO.Text = "";
  262. }
  263. }
  264. catch (Exception ex)
  265. {
  266. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  267. }
  268. }
  269. private void btnCreate_Click(object sender, EventArgs e)
  270. {
  271. try
  272. {
  273. SimpleButton btntemp = (SimpleButton)sender;
  274. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  275. {
  276. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  277. return;
  278. }
  279. if (dataSource == null || dataSource.Rows.Count <= 0)
  280. {
  281. ICSBaseSimpleCode.AppshowMessageBox("请扫描产品条码后再做拼箱操作!");
  282. return;
  283. }
  284. //if (data == null)
  285. //{
  286. data = new DataTable();
  287. data.Columns.Add("LotNO");
  288. data.Columns.Add("CUSORDERNO");
  289. data.Columns.Add("CUSITEMCODE");
  290. data.Columns.Add("INVSTD");
  291. data.Columns.Add("LotQty");
  292. //}
  293. boxNo = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss.fff").ToString("yyyyMMddHHmmssfff");
  294. List<FormICSITEMBoxUIModel> itemBoxList = new List<FormICSITEMBoxUIModel>();
  295. FormICSITEMBoxUIModel itemBox=null;
  296. DataRow lastRow=null;
  297. DataView dv = dataSource.DefaultView;
  298. dv.Sort = "CUSORDERNO,CUSITEMCODE";
  299. dataSource = dv.ToTable();
  300. foreach (DataRow dr in dataSource.Rows)
  301. {
  302. ICSITEMBoxDetail detail = new ICSITEMBoxDetail();
  303. detail.ID = "";
  304. detail.LOTNO = dr["LotNO"].ToString();
  305. detail.QTY =Convert.ToDecimal(dr["LotQty"].ToString());
  306. bool isNew = false; //是否是新行
  307. if (lastRow != null && lastRow["INVStd"].ToString().Equals(dr["INVStd"].ToString()))
  308. {
  309. int index = data.Rows.Count;
  310. data.Rows[index - 1]["LotQty"] = Convert.ToDecimal(data.Rows[index - 1]["LotQty"]) + Convert.ToDecimal(dr["LotQty"]);
  311. //data.Rows[index - 1]["LotNO"] = data.Rows[index - 1]["CUSORDERNO"].ToString() + data.Rows[index - 1]["CUSITEMCODE"].ToString() + Convert.ToInt32(data.Rows[index - 1]["LotQty"].ToString());
  312. }
  313. else
  314. {
  315. data.ImportRow(dr);
  316. int index = data.Rows.Count;
  317. //data.Rows[index - 1]["LotNO"] = data.Rows[index - 1]["CUSORDERNO"].ToString() + data.Rows[index - 1]["CUSITEMCODE"].ToString() + Convert.ToInt32(data.Rows[index - 1]["LotQty"].ToString());
  318. itemBox = new FormICSITEMBoxUIModel();
  319. isNew = true;
  320. }
  321. lastRow = dr;
  322. int count = data.Rows.Count;
  323. detail.NO = data.Rows[count - 1]["LotNO"].ToString();
  324. itemBox.ITEMBoxDetail.Add(detail);
  325. itemBox.ID = "";
  326. itemBox.BoxNO = boxNo;
  327. //itemBox.NO = data.Rows[count - 1]["LotNO"].ToString();
  328. //itemBox.CUSORDERNO = data.Rows[count - 1]["CUSORDERNO"].ToString();
  329. //itemBox.CUSITEMCODE = data.Rows[count - 1]["CUSITEMCODE"].ToString();
  330. itemBox.INVStd = data.Rows[count - 1]["INVStd"].ToString();
  331. itemBox.QTY = Convert.ToDecimal(data.Rows[count - 1]["LotQty"].ToString());
  332. if (isNew)
  333. itemBoxList.Add(itemBox);
  334. else
  335. {
  336. itemBoxList.RemoveAt(itemBoxList.Count - 1);
  337. itemBoxList.Add(itemBox);
  338. }
  339. }
  340. ICSITEMBoxBLL.Add(itemBoxList, AppConfig.AppConnectString);
  341. gridControlGroup.DataSource = data;
  342. gridViewGroup.BestFitColumns();
  343. }
  344. catch (Exception ex)
  345. {
  346. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  347. }
  348. }
  349. private void btnModify_Click(object sender, EventArgs e)
  350. {
  351. try
  352. {
  353. SimpleButton btntemp = (SimpleButton)sender;
  354. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  355. {
  356. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  357. return;
  358. }
  359. int index = grvDetail.FocusedRowHandle;
  360. if (index < 0)
  361. return;
  362. dataSource.Rows.RemoveAt(index);
  363. grdDetail.DataSource = dataSource;
  364. grvDetail.BestFitColumns();
  365. }
  366. catch (Exception ex)
  367. {
  368. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  369. }
  370. }
  371. private void btnDel_Click(object sender, EventArgs e)
  372. {
  373. try
  374. {
  375. SimpleButton btntemp = (SimpleButton)sender;
  376. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  377. {
  378. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  379. return;
  380. }
  381. dataSource = null;
  382. data = null;
  383. grdDetail.DataSource = null;
  384. gridControlGroup.DataSource = null;
  385. boxNo = "";
  386. }
  387. catch (Exception ex)
  388. {
  389. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  390. }
  391. }
  392. #region 打印
  393. private void simpleButton4_Click(object sender, EventArgs e)
  394. {
  395. try
  396. {
  397. SimpleButton btntemp = (SimpleButton)sender;
  398. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  399. {
  400. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  401. return;
  402. }
  403. if (string .IsNullOrWhiteSpace(boxNo))
  404. {
  405. ICSBaseSimpleCode.AppshowMessageBox("拼箱后才能打印!");
  406. return;
  407. }
  408. List<PrintPara> parasList = new List<PrintPara>();
  409. PrintPara para = new PrintPara();
  410. para.PrintKey = "LOTNO";
  411. para.PrintValues = new object[] { boxNo };
  412. parasList.Add(para);
  413. if (parasList.Count == 0)
  414. {
  415. ICSBaseSimpleCode.AppshowMessageBox("请选择数据!");
  416. return;
  417. }
  418. FormPrintDialog f = new FormPrintDialog("013", this.Text, parasList, false, null);
  419. f.ShowDialog();
  420. ////更新打印信息
  421. //ICSRdrecord2LOTBLL.updatePrint(InfoList, AppConfig.AppConnectString);
  422. }
  423. catch (Exception ex)
  424. {
  425. MessageBox.Show(ex.ToString());
  426. }
  427. }
  428. #endregion
  429. }
  430. }