FrmSystemSet.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Collections;
  10. namespace LYFZ.Software.MainBusiness.InitialSet
  11. {
  12. public partial class FrmSystemSet : LYFZ.Software.UI.InitialSet.FrmSystemSet
  13. {
  14. LYFZ.BLL.BLL_ErpOrder orbll = new BLL.BLL_ErpOrder();
  15. LYFZ.BLL.BLL_ErpProduct ptbll = new BLL.BLL_ErpProduct();
  16. LYFZ.BLL.BLL_ErpSystemCategory scbll = new BLL.BLL_ErpSystemCategory();
  17. LYFZ.BLL.BLL_ErpWageCommissionSet wcsbll = new BLL.BLL_ErpWageCommissionSet();
  18. public FrmSystemSet()
  19. {
  20. this.FormClosed += FrmSystemSet_FormClosed;
  21. this.Shown += FrmSystemSet_Shown;
  22. this.txtName.MouseDoubleClick += txtName_MouseDoubleClick;
  23. }
  24. /// <summary>
  25. /// 是否有修改类别
  26. /// </summary>
  27. bool isUpdate = false;
  28. private string _TypeName;
  29. /// <summary>
  30. /// 传入的当前一级类别码
  31. /// </summary>
  32. public string TypeName
  33. {
  34. get { return _TypeName; }
  35. set { _TypeName = value; }
  36. }
  37. private string _Version;
  38. /// <summary>
  39. /// 旧属性设置 已用 IsLoadAllCategory 代替
  40. /// </summary>
  41. public string Version
  42. {
  43. set
  44. {
  45. if (string.IsNullOrEmpty(value))
  46. {
  47. isLoadAllCategory = true;
  48. }
  49. else
  50. {
  51. isLoadAllCategory = false;
  52. }
  53. _Version = value;
  54. }
  55. }
  56. bool isLoadAllCategory = true;
  57. /// <summary>
  58. /// 是否加载所有类别码
  59. /// </summary>
  60. public bool IsLoadAllCategory
  61. {
  62. get { return isLoadAllCategory; }
  63. set { isLoadAllCategory = value; }
  64. }
  65. /// <summary>
  66. /// 关闭事件
  67. /// </summary>
  68. /// <param name="sender"></param>
  69. /// <param name="e"></param>
  70. void FrmSystemSet_FormClosed(object sender, FormClosedEventArgs e)
  71. {
  72. if (isUpdate == true)
  73. { this.DialogResult = DialogResult.OK; }
  74. }
  75. /// <summary>
  76. /// 窗体加载事件
  77. /// </summary>
  78. /// <param name="sender"></param>
  79. /// <param name="e"></param>
  80. protected override void FrmSystemSet_Load(object sender, EventArgs e)
  81. {
  82. BindCategoryTree();
  83. }
  84. DataTable SystemCategoryDataTable = null;
  85. /// <summary>
  86. /// 绑定类别树
  87. /// </summary>
  88. void BindCategoryTree()
  89. {
  90. if (SystemCategoryDataTable != null)
  91. {
  92. SystemCategoryDataTable.Rows.Clear();
  93. SystemCategoryDataTable.Dispose();
  94. SystemCategoryDataTable = null;
  95. }
  96. LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, BackgroundWorker backgroundWorker)
  97. {
  98. SystemCategoryDataTable = scbll.GetList("1=1", "Sc_ClassParentID,id,sc_className").Tables[0];
  99. });
  100. this.trvSystemSet.Nodes.Clear();
  101. if (IsLoadAllCategory)
  102. {
  103. //显示所有
  104. TreeNode node = new TreeNode();
  105. node.Text = "系统类别";
  106. this.trvSystemSet.Nodes.Add(node);
  107. foreach (DataRow row in SystemCategoryDataTable.Rows)
  108. {
  109. if (row["Sc_ClassParentID"].ToString() == "0")
  110. {
  111. TreeNode subNode = new TreeNode();
  112. subNode.Text = row["Sc_ClassName"].ToString().Trim();
  113. subNode.Tag = row;
  114. subNode.ImageKey = subNode.Text.Trim();
  115. this.trvSystemSet.Nodes.Add(subNode);
  116. BindCategorySubTreeNode(subNode, Convert.ToInt32(row["id"]));
  117. }
  118. }
  119. node.Expand();
  120. }
  121. else
  122. {
  123. if (!string.IsNullOrEmpty(TypeName))
  124. {
  125. foreach (DataRow row in SystemCategoryDataTable.Rows)
  126. {
  127. if (row["Sc_ClassCode"].ToString().Trim().ToLower() == TypeName.Trim().ToLower())
  128. {
  129. TreeNode subNode = new TreeNode();
  130. subNode.Text = row["Sc_ClassName"].ToString().Trim();
  131. subNode.Tag = row;
  132. subNode.ImageKey = subNode.Text.Trim();
  133. this.trvSystemSet.Nodes.Add(subNode);
  134. BindCategorySubTreeNode(subNode, Convert.ToInt32(row["id"]));
  135. subNode.Expand();
  136. break;
  137. }
  138. }
  139. }
  140. else
  141. {
  142. MessageBoxCustom.Show("父类别码参数不能为空");
  143. }
  144. }
  145. }
  146. /// <summary>
  147. /// 绑定子节点
  148. /// </summary>
  149. /// <param name="cNode"></param>
  150. /// <param name="pid"></param>
  151. void BindCategorySubTreeNode(TreeNode cNode, int pid)
  152. {
  153. foreach (DataRow row in SystemCategoryDataTable.Rows)
  154. {
  155. if (row["Sc_ClassParentID"].ToString().Trim().ToLower() == pid.ToString())
  156. {
  157. TreeNode subNode = new TreeNode();
  158. subNode.Text = row["Sc_ClassName"].ToString().Trim();
  159. subNode.Tag = row;
  160. subNode.ImageKey = cNode.ImageKey;
  161. cNode.Nodes.Add(subNode);
  162. BindCategorySubTreeNode(subNode, Convert.ToInt32(row["id"]));
  163. }
  164. }
  165. }
  166. /// <summary>
  167. /// 窗体加载事件
  168. /// </summary>
  169. /// <param name="sender"></param>
  170. /// <param name="e"></param>
  171. void FrmSystemSet_Shown(object sender, EventArgs e)
  172. {
  173. if (string.IsNullOrEmpty(TypeName))
  174. {
  175. this.btnAdd.Enabled = LYFZ.BLL.BLL_ErpUser.GetRights(LYFZ.BLL.BLL_ErpUser.CurrentUserRights.SystemCompetence, CustomAttributes.OperatingAuthority.Add);
  176. this.btnDelete.Enabled = LYFZ.BLL.BLL_ErpUser.GetRights(LYFZ.BLL.BLL_ErpUser.CurrentUserRights.SystemCompetence, CustomAttributes.OperatingAuthority.Delete);
  177. }
  178. }
  179. /// <summary>
  180. /// 点击树节点
  181. /// </summary>
  182. /// <param name="sender"></param>
  183. /// <param name="e"></param>
  184. protected override void trvSystemSet_AfterSelect(object sender, TreeViewEventArgs e)
  185. {
  186. try
  187. {
  188. if (this.trvSystemSet.SelectedNode.Text == "系统类别")
  189. { this.txtSc_ClassCode.Text = scbll.GetNewClassCode(0); }
  190. else
  191. {
  192. if (this.trvSystemSet.SelectedNode.Tag != null)
  193. {
  194. DataRow cRow = (DataRow)this.trvSystemSet.SelectedNode.Tag;
  195. //增加
  196. this.txtSc_ClassCode.Text = scbll.GetNewClassCode(Convert.ToInt32(cRow["id"].ToString()));
  197. //修改
  198. this.txtSc_ClassCode2.Text = cRow["Sc_ClassCode"].ToString();
  199. this.txtSc_ClassName2.Text = cRow["Sc_ClassName"].ToString();
  200. this.txtSc_ClassRemark2.Text = cRow["Sc_ClassRemark"].ToString();
  201. this.txtName.Text = this.trvSystemSet.SelectedNode.Text.ToString();
  202. this.txtSc_ClassName2.ReadOnly = Convert.ToBoolean(cRow["Sc_IsReadOnly"]);
  203. this.cb_EditDisabled.Checked = Convert.ToBoolean(cRow["Sc_IsDisable"]);
  204. if (LYFZ.Software.MainBusiness.CommonLogical.SuccessfulLogin.LoginUserModel.User_Account.ToLower().Trim() == "admin")
  205. {
  206. this.toolTipSystemCode.SetToolTip(this.txtName, this.txtName.Text.Trim() + ":" + this.txtSc_ClassCode2.Text.Trim());
  207. }
  208. }
  209. else
  210. {
  211. MessageBoxCustom.Show("获取父类别码失败");
  212. }
  213. }
  214. TreeNode fistParentNode = this.trvSystemSet.SelectedNode;
  215. int whileIndex = 10;
  216. while (whileIndex > 0)
  217. {
  218. if (fistParentNode.Parent == null)
  219. {
  220. break;
  221. }
  222. else
  223. {
  224. fistParentNode = fistParentNode.Parent;
  225. }
  226. whileIndex--;
  227. }
  228. if (fistParentNode != null && fistParentNode.Text == "客户来源")
  229. {
  230. cb_EditDisabled.Visible = true;
  231. cb_AddDisabled.Visible = true;
  232. }
  233. else
  234. {
  235. cb_EditDisabled.Visible = false;
  236. cb_AddDisabled.Visible = false;
  237. }
  238. }
  239. catch (Exception ex)
  240. { MessageBoxCustom.Show(ex.Message); }
  241. }
  242. /// <summary>
  243. /// 增加
  244. /// </summary>
  245. /// <param name="sender"></param>
  246. /// <param name="e"></param>
  247. protected override void btnAdd_Click(object sender, EventArgs e)
  248. {
  249. try
  250. {
  251. bool _IsReadOnly = false;
  252. int cID = 0;
  253. if (this.trvSystemSet.SelectedNode.Tag != null)
  254. {
  255. DataRow cRow = (DataRow)this.trvSystemSet.SelectedNode.Tag;
  256. cID = Convert.ToInt32(cRow["id"].ToString());
  257. _IsReadOnly = Convert.ToBoolean(cRow["Sc_IsReadOnly"].ToString());
  258. }
  259. else
  260. {
  261. cID = 0;
  262. }
  263. if (this.txtSc_ClassName.Text.Trim().Length > 50)
  264. { MessageBoxCustom.Show("类别名称最长不能超过50字!"); return; }
  265. LYFZ.Model.Model_ErpSystemCategory model = null;
  266. if (this.tab.SelectedIndex == 0)
  267. {
  268. //增加
  269. model = new Model.Model_ErpSystemCategory();
  270. #region 以下节点不能添加
  271. switch (this.txtSc_ClassCode2.Text.Trim())
  272. {
  273. case "BEBBBCADFEBEJBGD":
  274. case "BEBACCAFFHEAJICDF":
  275. case "BEBACCAFEGECFBJFD": MessageBoxCustom.Show("此类别不能再增加!"); return;
  276. }
  277. if (!string.IsNullOrEmpty(TypeName))
  278. {
  279. if (TypeName.Trim() == "AAAAAAB")
  280. {
  281. DataTable dt = orbll.GetView_Custom("tb_ErpPackages", StrWhere: "Pak_PackagesClass = '" + this.txtSc_ClassCode2.Text.Trim() + "'", ShowColumnName: "ID").Tables[0];
  282. if (dt.Rows.Count > 0)
  283. { MessageBoxCustom.Show("此类别已设置了套系名称,不能再添加子类别!"); return; }
  284. }
  285. }
  286. #endregion
  287. if (string.IsNullOrEmpty(this.txtSc_ClassCode.Text))
  288. { MessageBoxCustom.Show("请选择树类别,增加系统类别!"); return; }
  289. if (string.IsNullOrEmpty(this.txtSc_ClassName.Text))
  290. { MessageBoxCustom.Show("类别名称不能为空!"); return; }
  291. #region 获取树的深度不能
  292. if (IsLoadAllCategory)
  293. {
  294. if (this.trvSystemSet.SelectedNode.Level.ToString() == "3")
  295. { MessageBoxCustom.Show("此类别不能再增加!"); return; }
  296. }
  297. else
  298. {
  299. if (this.trvSystemSet.SelectedNode.Level.ToString() == "2")
  300. { MessageBoxCustom.Show("此类别不能再增加!"); return; }
  301. }
  302. #endregion
  303. model.Sc_ClassCode = this.txtSc_ClassCode.Text;
  304. model.Sc_ClassName = this.txtSc_ClassName.Text;
  305. if (this.trvSystemSet.SelectedNode.Text == "系统类别")
  306. { model.Sc_ClassParentID = 0; }
  307. else
  308. { model.Sc_ClassParentID = cID; }
  309. model.Sc_ClassRemark = this.txtSc_ClassRemark.Text;
  310. model.Sc_IsDisable = cb_AddDisabled.Checked;
  311. model.Sc_IsReadOnly = false;
  312. model.Sc_IsDelete = false;
  313. model.Sc_URL = "";
  314. model.Sc_IsEnabledURL = false;
  315. if (scbll.Add(model) == true)
  316. {
  317. this.isUpdate = true;
  318. this.txtSc_ClassCode.Text = "";
  319. this.txtSc_ClassName.Text = "";
  320. this.txtSc_ClassCode2.Text = "";
  321. this.txtSc_ClassName2.Text = "";
  322. this.txtSc_ClassRemark.Text = "";
  323. this.txtName.Text = "";
  324. this.trvSystemSet.Nodes.Clear();
  325. this.FrmSystemSet_Load(sender, e);
  326. SetSelectAndExpand(cID);
  327. MessageBoxCustom.Show("保存成功!");
  328. }
  329. else
  330. { MessageBoxCustom.Show("保存失败"); }
  331. }
  332. else
  333. {
  334. //修改
  335. try
  336. {
  337. if (string.IsNullOrEmpty(this.txtSc_ClassCode2.Text))
  338. { MessageBoxCustom.Show("请选择树类别,修改系统类别!"); return; }
  339. if (string.IsNullOrEmpty(this.txtSc_ClassName2.Text))
  340. { MessageBoxCustom.Show("类别名称不能为空!"); return; }
  341. if (_IsReadOnly)
  342. { MessageBoxCustom.Show("此类别不能修改,请选择类别!"); return; }
  343. model = scbll.GetModel(cID);
  344. model.Sc_ClassName = this.txtSc_ClassName2.Text;
  345. model.Sc_ClassRemark = this.txtSc_ClassRemark2.Text;
  346. model.Sc_UpdateDatetime = SDateTime.Now;
  347. model.Sc_IsDisable = this.cb_EditDisabled.Checked;
  348. if (scbll.Update(model))
  349. {
  350. this.isUpdate = true;
  351. this.txtSc_ClassCode.Text = "";
  352. this.txtSc_ClassName.Text = "";
  353. this.txtSc_ClassCode2.Text = "";
  354. this.txtSc_ClassName2.Text = "";
  355. this.txtSc_ClassRemark2.Text = "";
  356. this.txtName.Text = "";
  357. this.trvSystemSet.Nodes.Clear();
  358. this.FrmSystemSet_Load(sender, e);
  359. SetSelectAndExpand(cID);
  360. MessageBoxCustom.Show("修改成功!");
  361. }
  362. else { MessageBoxCustom.Show("保存失败"); }
  363. }
  364. catch
  365. { MessageBoxCustom.Show("请选择你要修改的类别"); }
  366. }
  367. }
  368. catch (Exception ex)
  369. { MessageBoxCustom.Show(ex.Message); }
  370. }
  371. void SetSelectAndExpand(int cid)
  372. {
  373. SetSelectAndExpand(cid, this.trvSystemSet.Nodes);
  374. }
  375. void SetSelectAndExpand(int cid, TreeNodeCollection Nodes)
  376. {
  377. foreach (TreeNode node in Nodes)
  378. {
  379. if (node.Tag != null)
  380. {
  381. DataRow cRow = (DataRow)node.Tag;
  382. if (cid.ToString() == cRow["id"].ToString())
  383. {
  384. node.Expand();
  385. this.trvSystemSet.SelectedNode = node;
  386. break;
  387. }
  388. else if (node.Nodes.Count > 0)
  389. {
  390. SetSelectAndExpand(cid, node.Nodes);
  391. }
  392. }
  393. }
  394. }
  395. /// <summary>
  396. /// 检查指定类别是否已使用,如果已使用返回 true 不可以删除 ,如果没有使用 返回 false 可以删除
  397. /// </summary>
  398. /// <param name="classCode"></param>
  399. /// <returns></returns>
  400. bool DeleteCheckremove(string checkType, string classCode, out string checkMsg)
  401. {
  402. bool ret = false;
  403. checkMsg = "";
  404. switch (checkType)
  405. {
  406. case "商品类别":
  407. ret = ptbll.Exists("Prod_Class", classCode);
  408. checkMsg = "此类别已经在商品表中使,不能删除!请删除商品后在删除此类别";
  409. break;
  410. case "提成点方案":
  411. case "工作内容":
  412. ret = wcsbll.Exists("Wcs_TypeCode", classCode);
  413. checkMsg = "此提成类别已在“提成方案设置”中已经使用,不能删除。";
  414. break;
  415. default:
  416. ret = false;
  417. checkMsg = "不做任何检查";
  418. break;
  419. }
  420. return ret;
  421. }
  422. /// <summary>
  423. /// 删除
  424. /// </summary>
  425. /// <param name="sender"></param>
  426. /// <param name="e"></param>
  427. protected override void btnDelete_Click(object sender, EventArgs e)
  428. {
  429. try
  430. {
  431. bool Sc_IsDelete = false;
  432. int cID = 0;
  433. string Sc_ClassCode = "";
  434. int pid = 0;
  435. string checkType = "商品类别";
  436. if (this.trvSystemSet.SelectedNode != null)
  437. {
  438. checkType = this.trvSystemSet.SelectedNode.ImageKey.Trim();
  439. if (this.trvSystemSet.SelectedNode.Tag != null)
  440. {
  441. DataRow sRow = (DataRow)this.trvSystemSet.SelectedNode.Tag;
  442. Sc_ClassCode = sRow["Sc_ClassCode"].ToString();
  443. cID = Convert.ToInt32(sRow["id"].ToString());
  444. Sc_IsDelete = Convert.ToBoolean(sRow["Sc_IsDelete"].ToString());
  445. }
  446. if (this.trvSystemSet.SelectedNode.Parent != null && this.trvSystemSet.SelectedNode.Parent.Tag != null)
  447. {
  448. DataRow cRow = (DataRow)this.trvSystemSet.SelectedNode.Parent.Tag;
  449. pid = Convert.ToInt32(cRow["id"].ToString());
  450. }
  451. }
  452. if (string.IsNullOrEmpty(this.trvSystemSet.SelectedNode.Text))
  453. { MessageBoxCustom.Show("请选择你要删除的类别!"); return; }
  454. if (this.trvSystemSet.SelectedNode.Text == "系统类别")
  455. { MessageBoxCustom.Show("此类别不能删除,请选择节点!"); return; };
  456. if (Sc_IsDelete)
  457. { MessageBoxCustom.Show("此类别不能删除,请选择节点!"); return; }
  458. //判断商品
  459. if (!string.IsNullOrEmpty(Sc_ClassCode))
  460. {
  461. DataTable dt_d = scbll.GetList("Sc_ClassCode='" + Sc_ClassCode + "'").Tables[0];
  462. if (dt_d.Rows.Count > 0)
  463. {
  464. DataTable dt_s = scbll.GetList("Sc_ClassParentID='" + dt_d.Rows[0]["ID"] + "'").Tables[0];
  465. if (dt_s.Rows.Count > 0)
  466. {
  467. MessageBoxCustom.Show("为了保证数据完整和有效性,如果您确定要删除“" + this.trvSystemSet.SelectedNode.Text + "”类别,请先删除其下的子类别后再来删除此类别!");
  468. return;
  469. }
  470. }
  471. }
  472. string checkMsg = "";
  473. if (DeleteCheckremove(checkType, Sc_ClassCode, out checkMsg))
  474. {
  475. MessageBoxCustom.Show(checkMsg);
  476. return;
  477. }
  478. if (MessageBoxCustom.Show("你确定要删除吗?", "删除提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
  479. {
  480. if (scbll.Delete(cID) == true)
  481. {
  482. // 写入操作日志
  483. string logsContent = "删除系统设置名称:" + this.txtSc_ClassName2.Text.Trim() + ";编号:" + Sc_ClassCode;
  484. LYFZ.BLL.BLL_ErpSystemLogs.WriteSystemLog(LYFZ.EnumPublic.SystemLogsType.删除系统设置, logsContent, LYFZ.BLL.BLL_ErpUser.UsersModel.User_EmployeeID, LYFZ.BLL.BLL_ErpUser.UsersModel.User_Name);
  485. isUpdate = true;
  486. this.txtSc_ClassCode.Text = "";
  487. this.txtSc_ClassName.Text = "";
  488. this.txtSc_ClassCode2.Text = "";
  489. this.txtSc_ClassName2.Text = "";
  490. this.txtSc_ClassRemark2.Text = "";
  491. this.txtName.Text = "";
  492. this.trvSystemSet.Nodes.Clear();
  493. this.FrmSystemSet_Load(sender, e);
  494. SetSelectAndExpand(pid);
  495. // MessageBoxCustom.Show("删除成功!");
  496. }
  497. else
  498. { MessageBoxCustom.Show("删除失败!"); }
  499. }
  500. }
  501. catch
  502. { MessageBoxCustom.Show("请选择你要删除的节点"); }
  503. }
  504. /// <summary>
  505. /// 选项目选择事件
  506. /// </summary>
  507. /// <param name="sender"></param>
  508. /// <param name="e"></param>
  509. protected override void tab_SelectedIndexChanged(object sender, EventArgs e)
  510. {
  511. if (!string.IsNullOrEmpty(TypeName))
  512. {
  513. if (this.tab.SelectedIndex == 0)
  514. {
  515. this.btnAdd.Text = " 增加";
  516. this.btnAdd.Enabled = LYFZ.BLL.BLL_ErpUser.GetRights(LYFZ.BLL.BLL_ErpUser.CurrentUserRights.SystemCompetence, CustomAttributes.OperatingAuthority.Add);
  517. }
  518. else if (this.tab.SelectedIndex == 1)
  519. {
  520. this.btnAdd.Text = " 修改";
  521. this.btnAdd.Enabled = LYFZ.BLL.BLL_ErpUser.GetRights(LYFZ.BLL.BLL_ErpUser.CurrentUserRights.SystemCompetence, CustomAttributes.OperatingAuthority.Update);
  522. }
  523. }
  524. }
  525. void txtName_MouseDoubleClick(object sender, MouseEventArgs e)
  526. {
  527. Clipboard.SetDataObject(this.txtSc_ClassCode2.Text.Trim());
  528. //if (LYFZ.Software.MainBusiness.CommonLogical.SuccessfulLogin.LoginUserModel.User_Account.ToLower().Trim() == "admin")
  529. //{
  530. // this.txtSystemCode.Text = this.txtSc_ClassCode2.Text.Trim();
  531. // this.txtSystemCode.Visible = true;
  532. //}
  533. }
  534. }
  535. }