FrmOrderChange.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using com.hnshituo.pur.vo;
  11. using Core.Mes.Client.Comm.Control;
  12. using Core.Mes.Client.Comm.Tool;
  13. using CoreFS.CA06;
  14. using Infragistics.Win.UltraWinGrid;
  15. using Pur.Entity;
  16. using Pur.PublicTools;
  17. namespace Pur.order
  18. {
  19. public partial class FrmOrderChange : FrmPmsBase
  20. {
  21. Hashtable _Hashtable=new Hashtable();
  22. Hashtable _OrderRow = new Hashtable();
  23. Hashtable _ClauseRow = new Hashtable();
  24. ArrayList listDeleteRow = new ArrayList();
  25. public String strTips = "0";
  26. String strOrderId = "";
  27. public FrmOrderChange()
  28. {
  29. InitializeComponent();
  30. }
  31. public FrmOrderChange(OpeBase Ob,String orderId)
  32. {
  33. InitializeComponent();
  34. this.ob = Ob;
  35. this.strOrderId = orderId;
  36. }
  37. private void FrmOrderChange_Load(object sender, EventArgs e)
  38. {
  39. this.Text = "合同【" + strOrderId + "】变更申请";
  40. PublicPur.InitCellEdit(new UltraGrid[] { ultraGrid1 }, new string[] { "Qty", "PriceWithTax", "TaxRateName", "EndDate", "remark" });
  41. PublicPur.InitCellEdit(new UltraGrid[] { ultraGrid2 }, new string[] { "ClauseDesc" });
  42. PublicPur.InitCellEdit(new UltraGrid[] { ultraGrid3 }, new string[] { });
  43. _Hashtable.Add("1","含税价格调整");
  44. _Hashtable.Add("2","税率调整");
  45. _Hashtable.Add("3","数量调整");
  46. _Hashtable.Add("4","交期调整");
  47. _Hashtable.Add("5","合同条款内容调整");
  48. _Hashtable.Add("6","备注修改");
  49. _Hashtable.Add("9", "合同行删除");
  50. getOrderDetail(strOrderId);
  51. }
  52. #region toolbar工具栏
  53. /// <summary>
  54. /// toolbar
  55. /// </summary>
  56. /// <param name="sender"></param>
  57. /// <param name="e"></param>
  58. private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
  59. {
  60. switch (e.Tool.Key)
  61. {
  62. case "doQuery": //查询、清空
  63. getOrderDetail(strOrderId);
  64. break;
  65. case "doSure": // 确认---生成新合同
  66. doSure();
  67. break;
  68. case "doDelete": //删除合同行--非合同行不允许删除
  69. doDelete();
  70. break;
  71. case "doCreateDetail": // ButtonTool
  72. doCreateDetail();
  73. break;
  74. case "doExit": // ButtonTool
  75. this.Close();
  76. break;
  77. }
  78. }
  79. /// <summary>
  80. /// 生成变更明细
  81. /// </summary>
  82. private void doCreateDetail()
  83. {
  84. createChangeD();
  85. }
  86. /// <summary>
  87. /// 删除合同行
  88. /// </summary>
  89. private void doDelete()
  90. {
  91. if (ultraTabControl1.SelectedTab!= ultraTabControl1.Tabs[0])
  92. {
  93. MessageUtil.ShowTips("只允许作废合同行,合同条款不允许作废");
  94. return;
  95. }
  96. if (ultraGrid1.ActiveRow == null)
  97. {
  98. MessageUtil.ShowTips("请选择待删除的合同行");
  99. return;
  100. }
  101. String strOrderLineSqe = ultraGrid1.ActiveRow.GetCellValue("OrderLineSqe").ToString().Trim();
  102. listDeleteRow.Add(strOrderLineSqe);
  103. ultraGrid1.ActiveRow.Delete(true);
  104. }
  105. /// <summary>
  106. /// 查询
  107. /// </summary>
  108. /// <param name="strOrderId"></param>
  109. private void getOrderDetail(string strOrderId)
  110. {
  111. txt_record.Clear();
  112. dataSet1.Clear();
  113. dataSet2.Clear();
  114. dataSet3.Clear();
  115. if (listDeleteRow != null)
  116. {
  117. listDeleteRow.Clear();
  118. }
  119. if (_OrderRow != null)
  120. {
  121. _OrderRow.Clear();
  122. }
  123. if (_ClauseRow != null)
  124. {
  125. _ClauseRow.Clear();
  126. }
  127. OrderC odC = new OrderC();
  128. if (!String.IsNullOrEmpty(strOrderId))
  129. {
  130. odC.OrderId = strOrderId;
  131. odC.Validflag = "1";
  132. DataTable dt = this.execute<DataTable>("com.hnshituo.pur.order.service.OrderCService", "doQueryOrderC", new object[] { odC, 0, 0 });
  133. List<OrderC> listOc = this.execute<List<OrderC>>("com.hnshituo.pur.order.service.OrderCService", "doQueryOrderC", new object[] { odC, 0, 0 });
  134. GridHelper.CopyDataToDatatable(dt, dataTable2, true);
  135. GridHelper.RefreshAndAutoSize(ultraGrid1);
  136. foreach (OrderC odC1 in listOc)
  137. {
  138. _OrderRow.Add(odC1.OrderLineSqe, odC1);
  139. }
  140. }
  141. if (!String.IsNullOrEmpty(strOrderId))
  142. {
  143. OrderCClause clause = new OrderCClause();
  144. clause.OrderId = strOrderId;
  145. DataTable dt = this.execute<DataTable>("com.hnshituo.pur.order.service.OrderCClauseService", "find_Clause", new object[] { clause });
  146. List<OrderCClause> listCs = this.execute<List<OrderCClause>>("com.hnshituo.pur.order.service.OrderCClauseService", "find_Clause", new object[] { clause });
  147. GridHelper.CopyDataToDatatable(dt, dataTable3, true);
  148. GridHelper.RefreshAndAutoSize(ultraGrid2);
  149. foreach (OrderCClause clause1 in listCs)
  150. {
  151. _ClauseRow.Add(clause1.Id, clause1);
  152. }
  153. }
  154. }
  155. /// <summary>
  156. /// 确定变更
  157. /// </summary>
  158. private void doSure()
  159. {
  160. //ultraGrid1.UpdateData();
  161. //ultraGrid2.UpdateData();
  162. ultraGrid3.Refresh();
  163. //ArrayList listOc = new ArrayList();
  164. //ArrayList listCC = new ArrayList();
  165. ArrayList listCg = new ArrayList();
  166. //判断有没有修改
  167. if (dataTable4.Rows.Count <= 0 )
  168. {
  169. MessageUtil.ShowTips("未发现任务变更下项目,或请重新点击【生成变更项目】按钮生成变更项目");
  170. return;
  171. }
  172. //foreach (UltraGridRow row in ultraGrid1.Rows)
  173. //{
  174. // OrderC orderC = new OrderC();
  175. // String strOrderLineSqe = row.GetCellValue("OrderLineSqe").ToString().Trim();
  176. // double newQty = 0;
  177. // Double.TryParse(row.GetCellValue("Qty").ToString().Trim(), out newQty);
  178. // double newPrice = 0;
  179. // Double.TryParse(row.GetCellValue("PriceWithTax").ToString().Trim(), out newPrice);
  180. // String newRateName = row.GetCellValue("TaxRateName").ToString().Trim();
  181. // orderC.OrderLineSqe = strOrderLineSqe;
  182. // orderC.Qty = newQty;
  183. // orderC.PriceWithTax = newPrice;
  184. // orderC.TaxRateName = newRateName;
  185. // if (String.IsNullOrEmpty(strOrderLineSqe))
  186. // {
  187. // MessageUtil.ShowTips("合同行号为空");
  188. // return;
  189. // }
  190. // if (newPrice < 0)
  191. // {
  192. // MessageUtil.ShowTips("合同行号:" + strOrderLineSqe + " 的含税价格不能小于0");
  193. // return;
  194. // }
  195. // if (newQty <= 0)
  196. // {
  197. // MessageUtil.ShowTips("采购数量不能小于0");
  198. // return;
  199. // }
  200. // if (String.IsNullOrEmpty(newRateName))
  201. // {
  202. // MessageUtil.ShowTips("税率不能为空");
  203. // return;
  204. // }
  205. // listOc.Add(orderC);
  206. //}
  207. //foreach (UltraGridRow row in ultraGrid2.Rows)
  208. //{
  209. // String strID = row.GetCellValue("ID").ToString().Trim();
  210. // OrderCClause clauseC = new OrderCClause();
  211. // String newClauseDesc = row.GetCellValue("ClauseDesc").ToString().Trim();
  212. // if (String.IsNullOrEmpty(strID))
  213. // {
  214. // MessageUtil.ShowTips("合同条款行号为空");
  215. // return;
  216. // }
  217. // clauseC.Id = strID;
  218. // clauseC.ClauseDesc = newClauseDesc;
  219. // listCC.Add(clauseC);
  220. //}
  221. OrderChangeM om=new OrderChangeM();
  222. om.ChangeRecord = txt_record.Text.Trim();
  223. if (String.IsNullOrEmpty(om.ChangeRecord))
  224. {
  225. MessageUtil.ShowTips("变更说明不能为空");
  226. return;
  227. }
  228. if (om.ChangeRecord.Length > 2999)
  229. {
  230. MessageUtil.ShowTips("变更说明超出字数限制");
  231. return;
  232. }
  233. om.CreateName = UserInfo.GetUserName();
  234. om.CreateUserid = UserInfo.GetUserID();
  235. om.CreateTime = DateTime.Now;
  236. om.OrderId = strOrderId;
  237. foreach (UltraGridRow row in ultraGrid3.Rows)
  238. {
  239. OrderChangeD changeD = new OrderChangeD();
  240. changeD.ChangeCode = row.GetCellValue("changeCode").ToString().Trim();
  241. changeD.ChangeType=row.GetCellValue("changeType").ToString().Trim();
  242. changeD.ChangeCodeName=row.GetCellValue("changeCodeName").ToString().Trim();
  243. changeD.ChangeTypeName=row.GetCellValue("changeTypeName").ToString().Trim();
  244. changeD.OrderLineSqe=row.GetCellValue("OrderLineSqe").ToString().Trim();
  245. changeD.OrderId=row.GetCellValue("OrderId").ToString().Trim();
  246. changeD.NewValue=row.GetCellValue("newValue").ToString().Trim();
  247. changeD.OldValue=row.GetCellValue("oldValue").ToString().Trim();
  248. changeD.CreateName = UserInfo.GetUserName();
  249. changeD.CreateTime = DateTime.Now;
  250. changeD.CreateUserid = UserInfo.GetUserID();
  251. listCg.Add(changeD);
  252. }
  253. if (listCg.Count <= 0)
  254. {
  255. MessageUtil.ShowTips("未发现任务变更下项目,或请重新点击【生成变更项目】按钮生成变更项目");
  256. return;
  257. }
  258. String strdetail = ((OrderChangeD)listCg[0]).ChangeTypeName;
  259. if (MessageUtil.ShowYesNoAndQuestion("确定对合同【" + strOrderId + "】进行变更申请,共变更包括" + strdetail + "在内的" + listCg.Count + "项") != DialogResult.Yes)
  260. {
  261. return;
  262. }
  263. CoreResult crt = this.execute<CoreResult>("com.hnshituo.pur.order.service.OrderMService", "changeOrder", new object[] {listCg,om });
  264. if (crt.Resultcode != 0)
  265. {
  266. MessageUtil.ShowTips("操作失败:" + crt.Resultmsg);
  267. strTips = "0";
  268. }
  269. else
  270. {
  271. MessageUtil.ShowTips("操作成功,请确认提报" );
  272. strTips = "1";
  273. }
  274. }
  275. #endregion
  276. #region 界面事件
  277. #endregion
  278. #region 公共函数
  279. private void createChangeD()
  280. {
  281. try
  282. {
  283. this.Cursor = Cursors.WaitCursor;
  284. ultraGrid1.UpdateData();
  285. ultraGrid2.UpdateData();
  286. dataSet3.Clear();
  287. foreach (String strOrderLineSqe1 in listDeleteRow)
  288. {
  289. OrderC odC = (OrderC)_OrderRow[strOrderLineSqe1];
  290. if (odC == null)
  291. {
  292. MessageUtil.ShowTips("未发现合同行:" + strOrderLineSqe1 + "信息记录");
  293. return;
  294. }
  295. DataRow dr = dataTable4.NewRow();
  296. dr["changeCode"] = "delete";
  297. dr["changeCodeName"] = "删除合同行:" + strOrderLineSqe1 + ",涉及物料:" + odC.ItemName;
  298. dr["changeType"] = "9";
  299. dr["changeTypeName"] = _Hashtable["9"];
  300. dr["OrderLineSqe"] = strOrderLineSqe1;
  301. dr["OrderId"] = odC.OrderId;
  302. dr["createName"] = UserInfo.GetUserName();
  303. dr["createTime"] = DateTime.Now;
  304. dataTable4.Rows.InsertAt(dr, 0);
  305. }
  306. foreach (UltraGridRow row in ultraGrid1.Rows)
  307. {
  308. String strOrderLineSqe = row.GetCellValue("OrderLineSqe").ToString().Trim();
  309. String strItemName = row.GetCellValue("itemName").ToString().Trim();
  310. OrderC odC = (OrderC)_OrderRow[strOrderLineSqe];
  311. //处理数量
  312. double newQty = 0;
  313. Double.TryParse(row.GetCellValue("Qty").ToString().Trim(), out newQty);
  314. if (Math.Round((double)odC.Qty, 3) != Math.Round(newQty, 3))
  315. {
  316. double noticedQty = odC.CreatedNoticeQty == null ? 0 : (double)odC.CreatedNoticeQty;
  317. double oldQty = odC.Qty == null ? 0 : (double)odC.Qty;
  318. noticedQty = Math.Round(noticedQty, 3);
  319. newQty = Math.Round(newQty, 3);
  320. oldQty = Math.Round(oldQty, 3);
  321. if (newQty <noticedQty)
  322. {
  323. MessageUtil.ShowTips( "物料:"+strItemName+"已经通知发货:" + noticedQty+",导致最大只能减少到:" + noticedQty );
  324. row.Cells["Qty"].Value = odC.Qty;
  325. row.Activate();
  326. return;
  327. }
  328. //新增
  329. DataRow dr = dataTable4.NewRow();
  330. dr["changeCode"] = "Qty";
  331. dr["changeCodeName"] = "物料:" + strItemName + " 合同数量变更";
  332. dr["changeType"] = "3";
  333. dr["changeTypeName"] = _Hashtable["3"];
  334. dr["OrderLineSqe"] = strOrderLineSqe;
  335. dr["OrderId"] = odC.OrderId;
  336. dr["newValue"] = newQty;
  337. dr["oldValue"] = odC.Qty;
  338. dr["createName"] = UserInfo.GetUserName();
  339. dr["createTime"] = DateTime.Now;
  340. dataTable4.Rows.InsertAt(dr, 0);
  341. }
  342. //处理价格
  343. double newPrice = 0;
  344. Double.TryParse(row.GetCellValue("PriceWithTax").ToString().Trim(), out newPrice);
  345. if (Math.Round((double)odC.PriceWithTax, 2) != Math.Round(newPrice, 2))
  346. {
  347. DataRow dr = dataTable4.NewRow();
  348. dr["changeCode"] = "PriceWithTax";
  349. dr["changeCodeName"] = "物料:" + strItemName + " 含税单价变更";
  350. dr["changeType"] = "1";
  351. dr["changeTypeName"] = _Hashtable["1"];
  352. dr["OrderLineSqe"] = strOrderLineSqe;
  353. dr["OrderId"] = odC.OrderId;
  354. dr["newValue"] = newPrice;
  355. dr["oldValue"] = odC.PriceWithTax;
  356. dr["createName"] = UserInfo.GetUserName();
  357. dr["createTime"] = DateTime.Now;
  358. dataTable4.Rows.InsertAt(dr, 0);
  359. }
  360. //处理税率
  361. String newRateName = row.GetCellValue("TaxRateName").ToString().Trim();
  362. if (newRateName != odC.TaxRateName)
  363. {
  364. if (!publicPms.IsPercentage(newRateName))
  365. {
  366. MessageUtil.ShowTips("请输入有效税率");
  367. return;
  368. }
  369. DataRow dr = dataTable4.NewRow();
  370. dr["changeCode"] = "TaxRateName";
  371. dr["changeCodeName"] = "物料:" + strItemName + " 税率变更";
  372. dr["changeType"] = "2";
  373. dr["changeTypeName"] = _Hashtable["2"];
  374. dr["OrderLineSqe"] = strOrderLineSqe;
  375. dr["OrderId"] = odC.OrderId;
  376. dr["newValue"] = newRateName;
  377. dr["oldValue"] = odC.TaxRateName;
  378. dr["createName"] = UserInfo.GetUserName();
  379. dr["createTime"] = DateTime.Now;
  380. dataTable4.Rows.InsertAt(dr, 0);
  381. }
  382. //处理税备注
  383. String newRemark = row.GetCellValue("remark").ToString().Trim();
  384. odC.Remark=odC.Remark==null?"":odC.Remark.Trim();
  385. if (newRemark != odC.Remark)
  386. {
  387. DataRow dr = dataTable4.NewRow();
  388. dr["changeCode"] = "remark";
  389. dr["changeCodeName"] = "物料:" + strItemName + " 合同行备注修改";
  390. dr["changeType"] = "6";
  391. dr["changeTypeName"] = _Hashtable["6"];
  392. dr["OrderLineSqe"] = strOrderLineSqe;
  393. dr["OrderId"] = odC.OrderId;
  394. dr["newValue"] = newRemark;
  395. dr["oldValue"] = odC.Remark;
  396. dr["createName"] = UserInfo.GetUserName();
  397. dr["createTime"] = DateTime.Now;
  398. dataTable4.Rows.InsertAt(dr, 0);
  399. }
  400. //交期处理
  401. if (String.IsNullOrEmpty(row.GetCellValue("EndDate") == null ? "" : row.GetCellValue("EndDate").ToString()))
  402. {
  403. MessageUtil.ShowTips("物料:" + strItemName + "要求的交期不能为空!");
  404. return;
  405. }
  406. DateTime time1 = DateTime.Parse(Convert.ToDateTime(row.GetCellValue("EndDate")).ToString("yyyy/MM/dd"));
  407. DateTime time2 = DateTime.Parse(((DateTime)odC.EndDate).ToString("yyyy/MM/dd"));
  408. TimeSpan ts = time1.Subtract(time2);
  409. if (ts.TotalDays >= 1 || ts.TotalDays <= -1)
  410. {
  411. DataRow dr = dataTable4.NewRow();
  412. dr["changeCode"] = "EndDate";
  413. dr["changeCodeName"] = "物料:" + strItemName + " 交期变更";
  414. dr["changeType"] = "4";
  415. dr["changeTypeName"] = _Hashtable["4"];
  416. dr["OrderLineSqe"] = strOrderLineSqe;
  417. dr["OrderId"] = odC.OrderId;
  418. dr["newValue"] = time1.ToString("yyyy/MM/dd");
  419. dr["oldValue"] = time2.ToString("yyyy/MM/dd");
  420. dr["createName"] = UserInfo.GetUserName();
  421. dr["createTime"] = DateTime.Now;
  422. dataTable4.Rows.InsertAt(dr, 0);
  423. }
  424. }
  425. foreach (UltraGridRow uge in ultraGrid2.Rows)
  426. {
  427. String strID = uge.GetCellValue("ID").ToString().Trim();
  428. String strClauseName = uge.GetCellValue("ClauseName").ToString().Trim();
  429. OrderCClause odC = (OrderCClause)_ClauseRow[strID];
  430. String newClauseDesc = uge.GetCellValue("ClauseDesc").ToString().Trim();
  431. odC.ClauseDesc = odC.ClauseDesc == null ? "" : odC.ClauseDesc.Trim();
  432. if (newClauseDesc != odC.ClauseDesc)
  433. {
  434. DataRow dr = dataTable4.NewRow();
  435. dr["changeCode"] = "ClauseDesc";
  436. dr["changeCodeName"] = "条款:" + strClauseName + " 内容变更";
  437. dr["changeType"] = "5";
  438. dr["changeTypeName"] = _Hashtable["5"];
  439. dr["OrderLineSqe"] = strID;
  440. dr["OrderId"] = odC.OrderId;
  441. dr["newValue"] = newClauseDesc;
  442. dr["oldValue"] = odC.ClauseDesc;
  443. dr["createName"] = UserInfo.GetUserName();
  444. dr["createTime"] = DateTime.Now;
  445. dataTable4.Rows.InsertAt(dr, 0);
  446. }
  447. }
  448. if (dataTable4.Rows.Count <= 0)
  449. {
  450. MessageUtil.ShowTips("未检测任何变更");
  451. }
  452. }
  453. catch (Exception ex)
  454. {
  455. MessageUtil.ShowTips("生成失败:" + ex);
  456. dataSet3.Clear();
  457. }
  458. finally
  459. {
  460. ultraGrid3.Refresh();
  461. GridHelper.RefreshAndAutoSize(ultraGrid3);
  462. this.Cursor = Cursors.Default;
  463. }
  464. }
  465. #endregion
  466. }
  467. }