IDB0130MF.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "ITSLangTransF.h"
  8. #include "ITS_OPLibF.h"
  9. #pragma hdrstop
  10. #include "IDB0130MF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxCalc"
  15. #pragma link "cxCheckBox"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxFilter"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGrid"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxStyles"
  35. #pragma link "cxTextEdit"
  36. #pragma link "dxSkinBlack"
  37. #pragma link "dxSkinBlue"
  38. #pragma link "dxSkinsCore"
  39. #pragma link "dxSkinscxPCPainter"
  40. #pragma link "dxSkinMcSkin"
  41. #pragma resource "*.dfm"
  42. TIDB0130M *IDB0130M = NULL;
  43. //---------------------------------------------------------------------------
  44. __fastcall TIDB0130M::TIDB0130M(TComponent* Owner)
  45. : TForm(Owner)
  46. {
  47. LangTrans->Translate(this, ITSDb_GetConnection());
  48. ITSSkin_Load(this);
  49. CMM_LoadForm(g_sFormsDir, this);
  50. FTitle = Caption;//"운영자그룹 메뉴관리";
  51. FDbUpdate = false;
  52. }
  53. //---------------------------------------------------------------------------
  54. void __fastcall TIDB0130M::CommClose()
  55. {
  56. try
  57. {
  58. CMM_SaveForm(g_sFormsDir, this);
  59. }
  60. catch(...)
  61. {
  62. }
  63. }
  64. //---------------------------------------------------------------------------
  65. void __fastcall TIDB0130M::FormShow(TObject *Sender)
  66. {
  67. Refresh();
  68. FormInit();
  69. TmrShow->Enabled = true;
  70. }
  71. //---------------------------------------------------------------------------
  72. void __fastcall TIDB0130M::FormInit()
  73. {
  74. m_pGDC = TvList->DataController;
  75. TvList->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<현재 등록된 운영자그룹 메뉴 정보가 없습니다>";
  76. InitColumnProperties();
  77. }
  78. //---------------------------------------------------------------------------
  79. void __fastcall TIDB0130M::InitColumnProperties()
  80. {
  81. FInitCombo1 = "";
  82. FInitCombo2 = "";
  83. try
  84. {
  85. try
  86. {
  87. //메뉴권한
  88. TcxComboBoxProperties *pcxColumn12 = (TcxComboBoxProperties *)Column12->Properties;
  89. pcxColumn12->Items->Clear();
  90. FInitCombo1 = lblY->Caption;//"[Y] 권한있음";
  91. pcxColumn12->Items->Add(lblY->Caption);//"[Y] 권한있음");
  92. pcxColumn12->Items->Add(lblN->Caption);//"[N] 권한없음");
  93. }
  94. catch(EDatabaseError &E)
  95. {
  96. throw Exception(String(E.ClassName()) + E.Message);
  97. }
  98. catch(Exception &exception)
  99. {
  100. throw Exception(String(exception.ClassName()) + exception.Message);
  101. }
  102. catch(...)
  103. {
  104. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 DB 오류가 발생하였습니다.");
  105. }
  106. }
  107. __finally
  108. {
  109. }
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TIDB0130M::TmrShowTimer(TObject *Sender)
  113. {
  114. TmrShow->Enabled = false;
  115. BtnSearchClick((TObject*)BtnSearch);
  116. }
  117. //---------------------------------------------------------------------------
  118. void __fastcall TIDB0130M::BtnSearchClick(TObject *Sender)
  119. {
  120. Application->ProcessMessages();
  121. TSqlCursor sqlCrs((TControl*)BtnSearch);
  122. RefreshData();
  123. CxList->SetFocus();
  124. }
  125. //---------------------------------------------------------------------------
  126. void __fastcall TIDB0130M::RefreshData()
  127. {
  128. SelListData();
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TIDB0130M::SelListData()
  132. {
  133. FUpdate = false;
  134. CMM_ClearGridTableView(TvList);
  135. String sQry;
  136. TADOQuery *pADO = NULL;
  137. try
  138. {
  139. TvList->BeginUpdate();
  140. try
  141. {
  142. pADO = new TADOQuery(NULL);
  143. pADO->Close();
  144. pADO->Connection = ITSDb_GetConnection();
  145. #if 0
  146. sQry = "SELECT X.GROP_ID, X.GROP_NM, X.OPERSYST_MENU_ID, X.ATHR_YN, \r\n"
  147. " Y.GROP_MENU_NAME, Y.MENU_NAME \r\n"
  148. " FROM (SELECT A.GROP_ID, B.GROP_NM, A.OPERSYST_MENU_ID, A.ATHR_YN \r\n"
  149. " FROM TB_USER_GROP_MENU_ATHR A, \r\n"
  150. " TB_USER_GROP_INFR B \r\n"
  151. " WHERE A.GROP_ID = B.GROP_ID \r\n"
  152. " AND B.DEL_YN = 'N' ) X, \r\n"
  153. " (SELECT B.GROP_MENU_NAME, A.OPERSYST_MENU_ID, A.MENU_NAME \r\n"
  154. " FROM TB_OPERSYST_MENU A, \r\n"
  155. " (SELECT OPERSYST_MENU_ID AS OPER_SYST_ID, \r\n"
  156. " MENU_NAME AS GROP_MENU_NAME \r\n"
  157. " FROM TB_OPERSYST_MENU \r\n"
  158. " WHERE MENU_LEVL = 1 \r\n"
  159. " AND DEL_YN = 'N') B \r\n"
  160. " WHERE A.OPER_SYST_ID = B.OPER_SYST_ID \r\n"
  161. " AND A.MENU_LEVL = 2 \r\n"
  162. " AND A.DEL_YN = 'N' ) Y \r\n"
  163. " WHERE X.OPERSYST_MENU_ID = Y.OPERSYST_MENU_ID \r\n"
  164. " ORDER BY X.GROP_ID, Y.GROP_MENU_NAME, Y.MENU_NAME \r\n";
  165. #else
  166. sQry = "SELECT X.GROP_ID, X.GROP_NM, Y.OPERSYST_MENU_ID, \r\n"
  167. " NVL((SELECT ATHR_YN \r\n"
  168. " FROM TB_USER_GROP_MENU_ATHR \r\n"
  169. " WHERE GROP_ID = X.GROP_ID \r\n"
  170. " AND OPERSYST_MENU_ID = Y.OPERSYST_MENU_ID), 'Y') AS ATHR_YN, \r\n"
  171. " Y.GROP_MENU_NAME, Y.MENU_NAME \r\n"
  172. " FROM TB_USER_GROP_INFR X, \r\n"
  173. " (SELECT B.GROP_MENU_NAME, A.OPERSYST_MENU_ID, A.MENU_NAME \r\n"
  174. " FROM TB_OPERSYST_MENU A, \r\n"
  175. " (SELECT OPERSYST_MENU_ID AS OPER_SYST_ID, \r\n"
  176. " MENU_NAME AS GROP_MENU_NAME \r\n"
  177. " FROM TB_OPERSYST_MENU \r\n"
  178. " WHERE MENU_LEVL = 1 \r\n"
  179. " AND DEL_YN = 'N') B \r\n"
  180. " WHERE A.OPER_SYST_ID = B.OPER_SYST_ID \r\n"
  181. " AND A.MENU_LEVL = 2 \r\n"
  182. " AND A.DEL_YN = 'N' ) Y \r\n";
  183. #endif
  184. pADO->SQL->Clear();
  185. pADO->SQL->Text = sQry;
  186. pADO->Prepared = true;
  187. pADO->Open();
  188. int nRow;
  189. for( ; !pADO->Eof; pADO->Next())
  190. {
  191. nRow = m_pGDC->AppendRecord();
  192. m_pGDC->Values[nRow][Column00->Index] = "-";
  193. m_pGDC->Values[nRow][Column01->Index] = pADO->FieldByName("GROP_ID")->AsString;
  194. m_pGDC->Values[nRow][Column02->Index] = pADO->FieldByName("GROP_NM")->AsString;
  195. m_pGDC->Values[nRow][Column03->Index] = pADO->FieldByName("GROP_MENU_NAME")->AsString;
  196. m_pGDC->Values[nRow][Column04->Index] = pADO->FieldByName("OPERSYST_MENU_ID")->AsString;
  197. m_pGDC->Values[nRow][Column05->Index] = pADO->FieldByName("MENU_NAME")->AsString;
  198. m_pGDC->Values[nRow][Column14->Index] = pADO->FieldByName("ATHR_YN")->AsString;
  199. String sATHR_YN = pADO->FieldByName("ATHR_YN")->AsString; //권한
  200. if (sATHR_YN == "Y")
  201. m_pGDC->Values[nRow][Column12->Index] = lblY->Caption;//"[Y] 권한있음";
  202. else
  203. m_pGDC->Values[nRow][Column12->Index] = lblN->Caption;//"[N] 권한없음";
  204. }
  205. }
  206. catch(EDatabaseError &E)
  207. {
  208. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  209. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  210. throw Exception(String(E.ClassName()) + E.Message);
  211. }
  212. catch(Exception &e)
  213. {
  214. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  215. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  216. throw Exception(String(e.ClassName()) + e.Message);
  217. }
  218. }
  219. __finally
  220. {
  221. if (pADO)
  222. {
  223. pADO->Close();
  224. delete pADO;
  225. }
  226. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  227. TvList->EndUpdate();
  228. TvList->DataController->GotoFirst();
  229. TvList->DataController->FocusedRecordIndex = 0;
  230. //CxList->SetFocus();
  231. }
  232. }
  233. //---------------------------------------------------------------------------
  234. void __fastcall TIDB0130M::BtnCloseClick(TObject *Sender)
  235. {
  236. Close();
  237. }
  238. //---------------------------------------------------------------------------
  239. void __fastcall TIDB0130M::BtnExlSaveClick(TObject *Sender)
  240. {
  241. TcxGrid *pGrid = CxList;
  242. TcxGridTableView *pView = TvList;
  243. String sTitle= Caption;//"운영자그룹 메뉴";
  244. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TIDB0130M::FormClose(TObject *Sender, TCloseAction &Action)
  248. {
  249. CommClose();
  250. IDB0130M = NULL;
  251. Action = caFree;
  252. }
  253. //---------------------------------------------------------------------------
  254. void __fastcall TIDB0130M::BtnEditClick(TObject *Sender)
  255. {
  256. TListFocus tvFocus(TvList);
  257. if (BtnEdit->Caption == FrmLang->lblCancel->Caption)//"취소")
  258. {
  259. CxList->SetFocus();
  260. Application->ProcessMessages();
  261. SaveData();
  262. }
  263. FrmLang->ITSSkin_ButtonClick(BtnSearch, BtnEdit, BtnInsert, BtnDelete, BtnApply);
  264. ChangeEditMode(BtnEdit->Down);
  265. RefreshData();
  266. }
  267. //---------------------------------------------------------------------------
  268. void __fastcall TIDB0130M::ChangeEditMode(bool AEdit)
  269. {
  270. bool bEditing = AEdit;
  271. try
  272. {
  273. TvList->BeginUpdate();
  274. Column00->Visible = bEditing;
  275. Column12->Options->Editing = bEditing;
  276. }
  277. __finally
  278. {
  279. TvList->EndUpdate();
  280. if (bEditing)
  281. {
  282. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  283. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  284. }
  285. else
  286. {
  287. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  288. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  289. }
  290. }
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TIDB0130M::TvListColumnPropertiesValidate(TObject *Sender, Variant &DisplayValue, TCaption &ErrorText, bool &Error)
  294. {
  295. if (TvList->Controller->FocusedRow->IsFilterRow) return;
  296. int nRow = m_pGDC->FocusedRecordIndex;
  297. if (nRow < 0) return;
  298. String ATHR_YN_ORG = VarToStr(m_pGDC->Values[nRow][Column14->Index]);
  299. String ATHR_YN = VarToStr(m_pGDC->Values[nRow][Column12->Index]);
  300. TcxGridColumn *pColumn = TvList->Controller->FocusedColumn;
  301. if (pColumn == Column12) ATHR_YN = DisplayValue;
  302. ATHR_YN = ITSUtil_GetCode(ATHR_YN);
  303. if (ATHR_YN_ORG != ATHR_YN )
  304. {
  305. m_pGDC->Values[nRow][Column00->Index] = FrmLang->lblModify->Caption;//"수정";
  306. }
  307. else
  308. {
  309. TvList->DataController->Values[nRow][Column00->Index] = "-";
  310. }
  311. }
  312. //---------------------------------------------------------------------------
  313. void __fastcall TIDB0130M::BtnBestFitClick(TObject *Sender)
  314. {
  315. try
  316. {
  317. TvList->BeginUpdate();
  318. TvList->ApplyBestFit(NULL, false, false);
  319. }
  320. __finally
  321. {
  322. TvList->EndUpdate();
  323. }
  324. }
  325. //---------------------------------------------------------------------------
  326. void __fastcall TIDB0130M::ChkAutoWidthPropertiesChange(TObject *Sender)
  327. {
  328. try
  329. {
  330. TvList->BeginUpdate();
  331. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  332. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  333. }
  334. __finally
  335. {
  336. TvList->EndUpdate();
  337. }
  338. }
  339. //---------------------------------------------------------------------------
  340. void __fastcall TIDB0130M::MnuDeleteCancelClick(TObject *Sender)
  341. {
  342. //
  343. }
  344. //---------------------------------------------------------------------------
  345. void __fastcall TIDB0130M::BtnApplyClick(TObject *Sender)
  346. {
  347. FUpdate = true;
  348. BtnEdit->Down = false;
  349. BtnEdit->Click();
  350. }
  351. //---------------------------------------------------------------------------
  352. bool __fastcall TIDB0130M::IsUpdate()
  353. {
  354. try
  355. {
  356. TcxGridDataController *pGDC = TvList->DataController;
  357. TvList->BeginUpdate();
  358. for(int ii = 0; ii < pGDC->RecordCount; ii++)
  359. {
  360. String sEdit = VarToStr(pGDC->Values[ii][Column00->Index]);
  361. if (sEdit != "-") return true;
  362. }
  363. }
  364. __finally
  365. {
  366. TvList->EndUpdate();
  367. }
  368. return false;
  369. }
  370. //---------------------------------------------------------------------------
  371. void __fastcall TIDB0130M::SaveData()
  372. {
  373. if (!IsUpdate()) return;
  374. if (!FUpdate)
  375. {
  376. if (Application->MessageBox(FrmLang->lblEidtConfirm->Caption.c_str(),//L"변경된 정보가 있습니다.\r\n변경된 정보를 저장 하시겠습니까?",
  377. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  378. }
  379. TADOQuery *pADOU = NULL;
  380. String sQryU;
  381. try
  382. {
  383. sQryU= "MERGE INTO TB_USER_GROP_MENU_ATHR L \r\n"
  384. "USING (SELECT :p01 AS GROP_ID, \r\n"
  385. " :p02 AS OPERSYST_MENU_ID, \r\n"
  386. " :p03 AS ATHR_YN \r\n"
  387. " FROM DUAL \r\n"
  388. " ) M \r\n"
  389. "ON (L.GROP_ID = M.GROP_ID AND L.OPERSYST_MENU_ID = M.OPERSYST_MENU_ID) \r\n"
  390. "WHEN MATCHED THEN \r\n"
  391. " UPDATE SET L.ATHR_YN = M.ATHR_YN \r\n"
  392. "WHEN NOT MATCHED THEN \r\n"
  393. " INSERT (L.GROP_ID, L.OPERSYST_MENU_ID, L.ATHR_YN) \r\n"
  394. " VALUES (M.GROP_ID, M.OPERSYST_MENU_ID, M.ATHR_YN) \r\n";
  395. int nRow;
  396. TvList->BeginUpdate();
  397. try
  398. {
  399. pADOU = new TADOQuery(NULL);
  400. pADOU->Close();
  401. pADOU->Connection = ITSDb_GetConnection();
  402. ITSDb_SQLText(pADOU, sQryU);
  403. ITSDb_GetConnection()->BeginTrans();
  404. try
  405. {
  406. TcxGridDataController *pGDC = TvList->DataController;
  407. for(int ii = 0; ii < pGDC->RecordCount; ii++)
  408. {
  409. String sEdit = VarToStr(pGDC->Values[ii][Column00->Index]);
  410. if (sEdit == "-") continue;
  411. String GROP_ID = VarToStr(pGDC->Values[ii][Column01->Index]);
  412. String OPERSYST_MENU_ID = VarToStr(pGDC->Values[ii][Column04->Index]);
  413. String ATHR_YN = VarToStr(pGDC->Values[ii][Column12->Index]);
  414. ATHR_YN = ITSUtil_GetCode(ATHR_YN);
  415. ITSDb_SQLBind(pADOU, "p01", GROP_ID);
  416. ITSDb_SQLBind(pADOU, "p02", OPERSYST_MENU_ID);
  417. ITSDb_SQLBind(pADOU, "p03", ATHR_YN);
  418. #if 0
  419. ITSDb_SQLBind(pADOU, "p04", g_pLOGIN->sUserId);
  420. #endif
  421. ITSDb_SQLExec(pADOU);
  422. pGDC->Values[ii][Column14->Index] = ATHR_YN;
  423. }
  424. }
  425. catch(...)
  426. {
  427. }
  428. ITSDb_GetConnection()->CommitTrans();
  429. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"운영자그룹 메뉴권한 정보를 저장 하였습니다.",
  430. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  431. FDbUpdate = true;
  432. }
  433. catch(EDatabaseError &E)
  434. {
  435. ITSDb_GetConnection()->RollbackTrans();
  436. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  437. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQryU);
  438. throw Exception(String(E.ClassName()) + E.Message);
  439. }
  440. catch(Exception &e)
  441. {
  442. ITSDb_GetConnection()->RollbackTrans();
  443. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  444. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQryU);
  445. throw Exception(String(e.ClassName()) + e.Message);
  446. }
  447. }
  448. __finally
  449. {
  450. if (pADOU)
  451. {
  452. pADOU->Close();
  453. delete pADOU;
  454. }
  455. TvList->EndUpdate();
  456. }
  457. }
  458. //---------------------------------------------------------------------------
  459. void __fastcall TIDB0130M::FormCloseQuery(TObject *Sender, bool &CanClose)
  460. {
  461. SaveData();
  462. }
  463. //---------------------------------------------------------------------------
  464. void __fastcall TIDB0130M::TvListDataControllerFilterChanged(TObject *Sender)
  465. {
  466. CMM_SetFilterLike(TvList);
  467. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  468. }
  469. //---------------------------------------------------------------------------
  470. void __fastcall TIDB0130M::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  471. bool &ADone)
  472. {
  473. if (AViewInfo)
  474. {
  475. String sType = AViewInfo->GridRecord->DisplayTexts[Column00->Index];
  476. if (sType == FrmLang->lblModify->Caption)//"수정")
  477. {
  478. ACanvas->Brush->Color = clOlive;
  479. }
  480. else if (sType == FrmLang->lblDelete->Caption)//"삭제")
  481. {
  482. ACanvas->Brush->Color = clRed;
  483. }
  484. else if (sType == FrmLang->lblNew->Caption)//"신규")
  485. {
  486. ACanvas->Brush->Color = clLime;
  487. if (AViewInfo->Focused) ACanvas->Font->Color = clBlack;
  488. }
  489. else
  490. {
  491. String sAuth = AViewInfo->GridRecord->DisplayTexts[Column12->Index];
  492. if (sAuth.Pos("N"))
  493. {
  494. ACanvas->Brush->Color = clPurple;
  495. }
  496. }
  497. }
  498. }
  499. //---------------------------------------------------------------------------