FRAME_FacilityFailF.cpp 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #pragma hdrstop
  6. #include "FRAME_FacilityFailF.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma link "cxButtons"
  10. #pragma link "cxCalc"
  11. #pragma link "cxCalendar"
  12. #pragma link "cxCheckBox"
  13. #pragma link "cxClasses"
  14. #pragma link "cxContainer"
  15. #pragma link "cxControls"
  16. #pragma link "cxCustomData"
  17. #pragma link "cxData"
  18. #pragma link "cxDataStorage"
  19. #pragma link "cxEdit"
  20. #pragma link "cxFilter"
  21. #pragma link "cxGraphics"
  22. #pragma link "cxGrid"
  23. #pragma link "cxGridCustomTableView"
  24. #pragma link "cxGridCustomView"
  25. #pragma link "cxGridLevel"
  26. #pragma link "cxGridTableView"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxStyles"
  31. #pragma link "cxTextEdit"
  32. #pragma link "dxSkinBlack"
  33. #pragma link "dxSkinBlue"
  34. #pragma link "dxSkinCaramel"
  35. #pragma link "dxSkinCoffee"
  36. #pragma link "dxSkinDarkRoom"
  37. #pragma link "dxSkinDarkSide"
  38. #pragma link "dxSkinFoggy"
  39. #pragma link "dxSkinGlassOceans"
  40. #pragma link "dxSkiniMaginary"
  41. #pragma link "dxSkinLilian"
  42. #pragma link "dxSkinLiquidSky"
  43. #pragma link "dxSkinLondonLiquidSky"
  44. #pragma link "dxSkinMcSkin"
  45. #pragma link "dxSkinMoneyTwins"
  46. #pragma link "dxSkinOffice2007Black"
  47. #pragma link "dxSkinOffice2007Blue"
  48. #pragma link "dxSkinOffice2007Green"
  49. #pragma link "dxSkinOffice2007Pink"
  50. #pragma link "dxSkinOffice2007Silver"
  51. #pragma link "dxSkinOffice2010Black"
  52. #pragma link "dxSkinOffice2010Blue"
  53. #pragma link "dxSkinOffice2010Silver"
  54. #pragma link "dxSkinsCore"
  55. #pragma link "dxSkinscxPCPainter"
  56. #pragma link "dxSkinSeven"
  57. #pragma link "dxSkinSharp"
  58. #pragma link "dxSkinSilver"
  59. #pragma link "dxSkinStardust"
  60. #pragma link "cxDropDownEdit"
  61. #pragma link "cxEditRepositoryItems"
  62. #pragma resource "*.dfm"
  63. extern LOGININFO *g_pLOGIN;
  64. //---------------------------------------------------------------------------
  65. __fastcall TFRAMEFacilityFail::TFRAMEFacilityFail(TComponent* Owner)
  66. : TFrame(Owner)
  67. {
  68. ITSSkin_Load((TForm*)this);
  69. FTitle = "시설물 장애내역 관리";
  70. m_pGDC = TvList->DataController;
  71. TvList->OptionsView->NoDataToDisplayInfoText = "<시설물 장애내역 정보가 없습니다>";
  72. FFacility = NULL;
  73. FUpdate = false;
  74. FKeySeq = -1;
  75. //TcxDateEditProperties *pcxColumn02 = (TcxDateEditProperties*)Column02->Properties;
  76. //pcxColumn02->DisplayFormat = "yyyy-MM-dd HH:mm:ss";
  77. FCode = new TFacilityCodeManager();
  78. FCode->LoadFromDb();
  79. FCode->LoadHndlTypeDb();
  80. pcxEqpm = (TcxComboBoxProperties *)Column03->Properties;
  81. pcxOccr = (TcxComboBoxProperties *)Column10->Properties;
  82. pcxFail = (TcxComboBoxProperties *)Column11->Properties;
  83. FDefFFA = "";
  84. FCodeFFA = ItsCodeManager->FLists.Find("FFA");
  85. #if 0
  86. TcxComboBoxProperties *pcxComboBox08 = (TcxComboBoxProperties *)Column08->Properties;
  87. pcxComboBox08->Items->Clear();
  88. if (FCodeFFA)
  89. {
  90. FOR_STL(TItsSubCode *, pSubCode, FCodeFFA->FSubLists)
  91. {
  92. pcxComboBox08->Items->Add("[" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  93. if (FDefFFA == "") FDefFFA = "[" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM;
  94. }
  95. }
  96. else
  97. {
  98. pcxComboBox08->Items->Add("[FFA05] 기타");
  99. FDefFFA = "[FFA05] 기타";
  100. }
  101. #endif
  102. if (!ItsFacilityFailManager)
  103. {
  104. ItsFacilityFailManager = new TItsFacilityFailManager();
  105. }
  106. }
  107. //---------------------------------------------------------------------------
  108. void __fastcall TFRAMEFacilityFail::UpdateCheck()
  109. {
  110. if (FFacility)
  111. {
  112. if (BtnEdit->Down)
  113. {
  114. FUpdate = false;
  115. BtnEdit->Down = false;
  116. BtnEdit->Click();
  117. }
  118. }
  119. }
  120. //---------------------------------------------------------------------------
  121. void __fastcall TFRAMEFacilityFail::UpdateList(TItsFacility *AFacility)
  122. {
  123. FUpdate = false;
  124. FFacility = AFacility;
  125. LblFacility->Caption = "---";
  126. CMM_ClearGridTableView(TvList);
  127. if (!FFacility) return;
  128. LblFacility->Caption = "[" + FFacility->FCLT_ID + "] " + FFacility->FCLT_LCTN;
  129. FDefEqpm = "";
  130. FDefEqpmName = "";
  131. pcxEqpm->Items->Clear();
  132. FOR_STL(TFacilityEqpmType *, pCode, FCode->FLists)
  133. {
  134. if (FFacility->FCLT_TYPE != pCode->FCLT_TYPE) continue;
  135. pcxEqpm->Items->Add("[" + pCode->EQPM_TYPE_CD + "] " + pCode->EQPM_TYPE_CD_NM);
  136. if (FDefEqpm == "")
  137. {
  138. FDefEqpm = pCode->EQPM_TYPE_CD;
  139. FDefEqpmName = "[" + pCode->EQPM_TYPE_CD + "] " + pCode->EQPM_TYPE_CD_NM;
  140. }
  141. }
  142. try
  143. {
  144. TvList->BeginUpdate();
  145. ItsFacilityFailManager->SelDbFail(AFacility);
  146. FOR_STL(TItsFacilityFail*, pObj, ItsFacilityFailManager->FSelLists)
  147. {
  148. pObj->EditMode = DB_INIT; //미리 초기화시켜야함
  149. pObj->Completed = true;
  150. if (pObj->DEL_YN == "Y") continue;
  151. //if (pObj->FCLT_ID != FFacility->FCLT_ID) continue;
  152. AddObjectItem(pObj, "-");
  153. }
  154. }
  155. __finally
  156. {
  157. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  158. TvList->EndUpdate();
  159. TvList->DataController->GotoFirst();
  160. TvList->DataController->FocusedRecordIndex = 0;
  161. //CxList->SetFocus();
  162. }
  163. }
  164. //---------------------------------------------------------------------------
  165. bool __fastcall TFRAMEFacilityFail::AddObjectItem(TItsFacilityFail *pObj, String AMode)
  166. {
  167. TItsSubCode *pSubCode;
  168. int nRow;
  169. try
  170. {
  171. TFacilityEqpmType *pEqpmCd;
  172. nRow = m_pGDC->AppendRecord();
  173. pObj->GridIndex = nRow;
  174. m_pGDC->Values[nRow][Column00->Index] = AMode;
  175. m_pGDC->Values[nRow][Column01->Index] = pObj->FAIL_HS_SEQ; //"장애이력일련번호";
  176. m_pGDC->Values[nRow][Column02->Index] = pObj->FCLT_ID; //"장비ID";
  177. String sEqpm = "[" + pObj->EQPM_TYPE_CD + "] ";
  178. pEqpmCd = FCode->FLists.Find(pObj->EQPM_TYPE_CD);
  179. if (pEqpmCd) sEqpm = sEqpm + pEqpmCd->EQPM_TYPE_CD_NM;
  180. else sEqpm = pcxEqpm->Items->Strings[0];
  181. m_pGDC->Values[nRow][Column03->Index] = sEqpm; //장비유형
  182. if (!pObj->OCRR_DT.IsEmpty())
  183. m_pGDC->Values[nRow][Column04->Index] = ITSUtil_StrToDateTime(pObj->OCRR_DT); //"발생일시";
  184. m_pGDC->Values[nRow][Column05->Index] = pObj->RCPR_NM; //"접수자명";
  185. if (!pObj->ADTN_DT.IsEmpty())
  186. m_pGDC->Values[nRow][Column06->Index] = ITSUtil_StrToDateTime(pObj->ADTN_DT); //"추가일시";
  187. m_pGDC->Values[nRow][Column07->Index] = pObj->ADTN_NM; //"추가자명";
  188. m_pGDC->Values[nRow][Column08->Index] = pObj->CHNG_NM; //"변경자명";
  189. if (!pObj->CHNG_DT.IsEmpty())
  190. m_pGDC->Values[nRow][Column09->Index] = ITSUtil_StrToDateTime(pObj->CHNG_DT); //"변경일시";
  191. // 장애 발생 코드
  192. String sOccrCd = "";
  193. String sOccrDef = "";
  194. String sOccr = "";
  195. //pcxOccr->Items->Clear();
  196. if (pEqpmCd)
  197. {
  198. FOR_STL(TFacilityFailOccr *, pOccr, pEqpmCd->FLists)
  199. {
  200. String sCode = "[" + pOccr->FAIL_OCRR_CD + "] " + pOccr->FAIL_OCRR_CD_NM;
  201. //pcxOccr->Items->Add(sCode);
  202. if (sOccrDef == "")
  203. {
  204. sOccrCd = pOccr->FAIL_OCRR_CD;
  205. sOccrDef = sCode;
  206. }
  207. if (pObj->FAIL_OCRR_CD == pOccr->FAIL_OCRR_CD)
  208. {
  209. sOccr = sCode;
  210. break;
  211. }
  212. }
  213. }
  214. if (sOccr == "") sOccr = sOccrDef;
  215. m_pGDC->Values[nRow][Column10->Index] = sOccr; //"장애 유형";
  216. // 장애 유형
  217. String sFailCd = "";
  218. String sFailDef = "";
  219. String sFail = "";
  220. //pcxFail->Items->Clear();
  221. String sFailOccrCd = pObj->FAIL_OCRR_CD;
  222. if (sFailOccrCd == "")
  223. {
  224. sFailOccrCd = sOccrCd;
  225. }
  226. if (pEqpmCd)
  227. {
  228. TFacilityFailOccr *pOccr = pEqpmCd->FLists.Find(sFailOccrCd);
  229. if (pOccr)
  230. {
  231. FOR_STL(TFacilityFailCode *, pFail, pOccr->FLists)
  232. {
  233. String sCode = "[" + pFail->FAIL_CD + "] " + pFail->FAIL_CD_NM;
  234. //pcxFail->Items->Add(sCode);
  235. if (sFailDef == "")
  236. {
  237. sFailCd = pFail->FAIL_CD;
  238. sFailDef = sCode;
  239. }
  240. if (pObj->FAIL_TYPE == pFail->FAIL_CD)
  241. {
  242. sFail = sCode;
  243. break;
  244. }
  245. }
  246. }
  247. }
  248. if (sFail == "") sFail = sFailDef;
  249. m_pGDC->Values[nRow][Column11->Index] = sFail; //"장애 상세 유형";
  250. m_pGDC->Values[nRow][Column12->Index] = pObj->ETC_FAIL_CONT; //"기타 장애 내용";
  251. m_pGDC->Values[nRow][Column99->Index] = (int)pObj;
  252. return true;
  253. }
  254. catch(...)
  255. {
  256. }
  257. return false;
  258. }
  259. //---------------------------------------------------------------------------
  260. void __fastcall TFRAMEFacilityFail::TvListDataControllerFilterChanged(TObject *Sender)
  261. {
  262. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  263. }
  264. //---------------------------------------------------------------------------
  265. void __fastcall TFRAMEFacilityFail::BtnExlSaveClick(TObject *Sender)
  266. {
  267. TcxGrid *pGrid = CxList;
  268. TcxGridTableView *pView = TvList;
  269. String sTitle= "시설물장애내역";
  270. CMM_ExportToExcelFile(sTitle, pGrid, pView, (TForm*)this);
  271. }
  272. //---------------------------------------------------------------------------
  273. void __fastcall TFRAMEFacilityFail::BtnEditClick(TObject *Sender)
  274. {
  275. if (!FFacility)
  276. {
  277. Application->MessageBox(L"시설물 정보를 먼저 선택하세요.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  278. return;
  279. }
  280. TListFocus tvFocus(TvList);
  281. if (BtnEdit->Caption == "취소")
  282. {
  283. CxList->SetFocus();
  284. Application->ProcessMessages();
  285. SaveData();
  286. }
  287. ITSSkin_ButtonClick(BtnSearch, BtnEdit, BtnInsert, BtnDelete, BtnApply);
  288. ChangeEditMode(BtnEdit->Down);
  289. //ItsFacilityFailManager->LoadFromDb();
  290. UpdateList(FFacility);
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TFRAMEFacilityFail::ChangeEditMode(bool AEdit)
  294. {
  295. bool bEditing = AEdit;
  296. try
  297. {
  298. TvList->BeginUpdate();
  299. Column00->Visible = bEditing;
  300. Column03->Options->Editing = bEditing;
  301. Column04->Options->Editing = bEditing;
  302. Column05->Options->Editing = bEditing;
  303. Column06->Options->Editing = bEditing;
  304. Column07->Options->Editing = bEditing;
  305. Column08->Options->Editing = bEditing;
  306. Column09->Options->Editing = bEditing;
  307. Column10->Options->Editing = bEditing;
  308. Column11->Options->Editing = bEditing;
  309. Column12->Options->Editing = bEditing;
  310. }
  311. __finally
  312. {
  313. TvList->EndUpdate();
  314. if (bEditing)
  315. {
  316. BtnEdit->Caption = "취소";
  317. BtnEdit->Hint = "데이터 편집 취소";
  318. }
  319. else
  320. {
  321. BtnEdit->Caption = "편집";
  322. BtnEdit->Hint = "데이터 편집";
  323. }
  324. }
  325. }
  326. //---------------------------------------------------------------------------
  327. bool __fastcall TFRAMEFacilityFail::GetNewId(String &ANewId)
  328. {
  329. String sQry;
  330. TADOQuery *pADO = NULL;
  331. String sNowDate = Now().FormatString("YYYYMM");
  332. #if 0
  333. if (FKeySeq > 0)
  334. {
  335. String sTmpKey;
  336. sTmpKey.printf(L"%s%04d", sNowDate.c_str(), FKeySeq++);
  337. ANewId = sTmpKey;
  338. return true;
  339. }
  340. #endif
  341. #if 1
  342. sQry = "SELECT TO_CHAR(SYSDATE, 'YYYYMM') || \r\n"
  343. " LPAD(NVL(MAX(SUBSTR(FAIL_HS_SEQ, -4)), '0000') + 1, 4, '0') AS NEWID \r\n"
  344. " FROM TB_FCLT_FAIL_HS \r\n"
  345. " WHERE SUBSTR(FAIL_HS_SEQ, 1, 6) = TO_CHAR(SYSDATE, 'YYYYMM') \r\n";
  346. #else
  347. sQry = "SELECT TO_NUMBER(LPAD(NVL(MAX(SUBSTR(FAIL_HS_SEQ, -4)), '0000') + 1, 4, '0')) AS NEWID \r\n"
  348. " FROM TB_FCLT_FAIL_HS \r\n"
  349. " WHERE SUBSTR(FAIL_HS_SEQ, 1, 6) = :p01 \r\n";
  350. #endif
  351. ANewId = "";
  352. try
  353. {
  354. try
  355. {
  356. pADO = new TADOQuery(NULL);
  357. pADO->Close();
  358. pADO->Connection = ITSDb_GetConnection();
  359. pADO->SQL->Clear();
  360. pADO->SQL->Text = sQry;
  361. #if 0
  362. pADO->Parameters->ParamByName("p01")->Value = sNowDate;
  363. #endif
  364. pADO->Open();
  365. #if 1
  366. ANewId = pADO->FieldByName("NEWID")->AsString;
  367. #else
  368. int nKeySeq = pADO->FieldByName("NEWID")->AsInteger;
  369. String sTmpKey;
  370. FKeySeq = nKeySeq;
  371. sTmpKey.printf(L"%s%04d", sNowDate.c_str(), FKeySeq++);
  372. ANewId = sTmpKey;
  373. #endif
  374. return true;
  375. }
  376. catch(EDatabaseError &E)
  377. {
  378. throw Exception(String(E.ClassName()) + E.Message);
  379. }
  380. catch(Exception &exception)
  381. {
  382. throw Exception(String(exception.ClassName()) + exception.Message);
  383. }
  384. catch(...)
  385. {
  386. throw Exception("알수없는 DB 오류가 발생하였습니다.");
  387. }
  388. }
  389. __finally
  390. {
  391. if (pADO)
  392. {
  393. pADO->Close();
  394. delete pADO;
  395. }
  396. }
  397. return false;
  398. }
  399. //---------------------------------------------------------------------------
  400. void __fastcall TFRAMEFacilityFail::BtnInsertClick(TObject *Sender)
  401. {
  402. int nMsgType = MB_OK|MB_ICONERROR|MB_APPLMODAL;
  403. if (!FFacility)
  404. {
  405. Application->MessageBox(L"시설물 정보를 먼저 선택하세요.", FTitle.c_str(), nMsgType);
  406. return;
  407. }
  408. String sNewId = "";
  409. GetNewId(sNewId);
  410. if (sNewId == "")
  411. {
  412. sNewId = InputBox("장애일련번호", "새로운 일련번호를 입력하세요.\r\n입력후에는 수정이 불가능 합니다.", "최대10자리" );
  413. sNewId = sNewId.Trim();
  414. if (sNewId == "최대10자리" || sNewId == "")
  415. {
  416. return;
  417. }
  418. if (AnsiString(sNewId).Length() > 10)
  419. {
  420. Application->MessageBox(L"장애일련번호는 10Byte를 초과할 수 없습니다.", FTitle.c_str(), nMsgType);
  421. return;
  422. }
  423. TItsFacilityFail *pDb = (TItsFacilityFail *)ItsFacilityFailManager->FSelLists.Find(sNewId);
  424. if (pDb)
  425. {
  426. Application->MessageBox(("[" + sNewId + "]는 사용할 수 없는 장애일련번호 입니다.").c_str(), FTitle.c_str(), nMsgType);
  427. return;
  428. }
  429. }
  430. try
  431. {
  432. TvList->BeginUpdate();
  433. TItsFacilityFail *pObj = new TItsFacilityFail();
  434. pObj->Clear();
  435. pObj->FAIL_HS_SEQ = sNewId; // 장애 이력 일련번호
  436. pObj->FCLT_ID = FFacility->FCLT_ID; // 시설물 ID
  437. pObj->EQPM_TYPE_CD = FDefEqpm; // 장비 유형 코드
  438. pObj->OCRR_DT = Now().FormatString("yyyymmddhhnnss"); // 발생 일시
  439. pObj->RCPR_NM = g_pLOGIN->sUserId; // 접수자 명
  440. pObj->ADTN_DT = Now().FormatString("yyyymmddhhnnss"); // 추가 일시
  441. pObj->ADTN_NM = g_pLOGIN->sUserId; // 추가자 명
  442. pObj->CHNG_NM = g_pLOGIN->sUserId; // 변경자 명
  443. pObj->CHNG_DT = Now().FormatString("yyyymmddhhnnss"); // 변경 일시
  444. pObj->FAIL_OCRR_CD = ""; // 장애 발생 코드
  445. pObj->FAIL_TYPE = ""; // 장애 유형
  446. pObj->ETC_FAIL_CONT = ""; // 기타 장애 내용
  447. pObj->ActionCnt = 0;
  448. ItsFacilityFailManager->FSelLists.Push(pObj->FAIL_HS_SEQ, pObj);
  449. pObj->Completed = false;
  450. pObj->EditMode = DB_NEW;
  451. AddObjectItem(pObj, "신규");
  452. }
  453. __finally
  454. {
  455. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  456. TvList->EndUpdate();
  457. TvList->DataController->GotoFirst();
  458. TvList->DataController->FocusedRecordIndex = 0;
  459. }
  460. }
  461. //---------------------------------------------------------------------------
  462. void __fastcall TFRAMEFacilityFail::BtnDeleteClick(TObject *Sender)
  463. {
  464. int nIdx = m_pGDC->FocusedRecordIndex;
  465. if (nIdx < 0) return;
  466. int nMemPtr = m_pGDC->Values[nIdx][Column99->Index];
  467. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  468. if (pObj->ActionCnt > 0)
  469. {
  470. Application->MessageBox(L"장애 조치내역이 있는 내역 정보는 삭제할 수 없습니다.\r\n장애 조치내역을 삭제한 후에 작업하세요.",
  471. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  472. return;
  473. }
  474. m_pGDC->Values[nIdx][Column00->Index] = "삭제";
  475. pObj->EditMode = DB_DELETE;
  476. }
  477. //---------------------------------------------------------------------------
  478. void __fastcall TFRAMEFacilityFail::BtnApplyClick(TObject *Sender)
  479. {
  480. FUpdate = true;
  481. BtnEdit->Down = false;
  482. BtnEdit->Click();
  483. }
  484. //---------------------------------------------------------------------------
  485. void __fastcall TFRAMEFacilityFail::ChkAutoWidthPropertiesChange(TObject *Sender)
  486. {
  487. try
  488. {
  489. TvList->BeginUpdate();
  490. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  491. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  492. }
  493. __finally
  494. {
  495. TvList->EndUpdate();
  496. }
  497. }
  498. //---------------------------------------------------------------------------
  499. void __fastcall TFRAMEFacilityFail::BtnBestFitClick(TObject *Sender)
  500. {
  501. try
  502. {
  503. TvList->BeginUpdate();
  504. TvList->ApplyBestFit(NULL, false, false);
  505. }
  506. __finally
  507. {
  508. TvList->EndUpdate();
  509. }
  510. }
  511. //---------------------------------------------------------------------------
  512. bool __fastcall TFRAMEFacilityFail::IsUpdate()
  513. {
  514. FOR_STL(TItsFacilityFail*, pObj, ItsFacilityFailManager->FSelLists)
  515. {
  516. if (pObj->Completed && pObj->EditMode != DB_INIT)
  517. return true;
  518. if (!pObj->Completed && pObj->EditMode == DB_NEW)
  519. return true;
  520. }
  521. return false;
  522. }
  523. //---------------------------------------------------------------------------
  524. void __fastcall TFRAMEFacilityFail::SaveData()
  525. {
  526. if (!IsUpdate()) return;
  527. if (!FUpdate)
  528. {
  529. if (Application->MessageBox(L"변경된 정보가 있습니다.\r\n변경된 정보를 저장 하시겠습니까?",
  530. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES)
  531. {
  532. FOR_STL(TItsFacilityFail*, pObj, ItsFacilityFailManager->FLists)
  533. {
  534. if (pObj->EditMode == DB_NEW)
  535. ItsFacilityFailManager->FLists.Remove(pObj->FAIL_HS_SEQ);
  536. }
  537. return;
  538. }
  539. }
  540. TADOQuery *pADOI = NULL;
  541. TADOQuery *pADOU = NULL;
  542. TADOQuery *pADOD1 = NULL;
  543. TADOQuery *pADOD2 = NULL;
  544. String sQryI;
  545. String sQryU;
  546. String sQryD1;
  547. String sQryD2;
  548. try
  549. {
  550. sQryI = "INSERT INTO TB_FCLT_FAIL_HS (FAIL_HS_SEQ, FCLT_ID, EQPM_TYPE_CD, \r\n"
  551. " OCRR_DT, RCPR_NM, ADTN_DT, ADTN_NM, \r\n"
  552. " CHNG_NM, CHNG_DT, \r\n"
  553. " FAIL_OCRR_CD, FAIL_TYPE, ETC_FAIL_CONT) \r\n"
  554. " VALUES(:p01, :p02, :p03, \r\n"
  555. " :p04, :p05, :p06, :p07, \r\n"
  556. " :p08, :p09, \r\n"
  557. " :p10, :p11, :p12) \r\n";
  558. sQryU = "UPDATE TB_FCLT_FAIL_HS \r\n"
  559. " SET FCLT_ID = :p02, \r\n"
  560. " EQPM_TYPE_CD = :p03, \r\n"
  561. " OCRR_DT = :p04, \r\n"
  562. " RCPR_NM = :p05, \r\n"
  563. " ADTN_DT = :p06, \r\n"
  564. " ADTN_NM = :p07, \r\n"
  565. " CHNG_NM = :p08, \r\n"
  566. " CHNG_DT = :p09, \r\n"
  567. " FAIL_OCRR_CD = :p10, \r\n"
  568. " FAIL_TYPE = :p11, \r\n"
  569. " ETC_FAIL_CONT = :p12 \r\n"
  570. " WHERE FAIL_HS_SEQ = :p01 \r\n";
  571. sQryD1 = "DELETE TB_FCLT_FAIL_RPAR_HS \r\n"
  572. " WHERE FAIL_HS_SEQ = :p01 \r\n";
  573. sQryD2 = "DELETE TB_FCLT_FAIL_HS \r\n"
  574. " WHERE FAIL_HS_SEQ = :p01 \r\n";
  575. int nRow;
  576. TvList->BeginUpdate();
  577. try
  578. {
  579. pADOI = new TADOQuery(NULL);
  580. pADOI->Close();
  581. pADOI->Connection = ITSDb_GetConnection();
  582. pADOU = new TADOQuery(NULL);
  583. pADOU->Close();
  584. pADOU->Connection = ITSDb_GetConnection();
  585. pADOD1 = new TADOQuery(NULL);
  586. pADOD1->Close();
  587. pADOD1->Connection = ITSDb_GetConnection();
  588. pADOD2 = new TADOQuery(NULL);
  589. pADOD2->Close();
  590. pADOD2->Connection = ITSDb_GetConnection();
  591. ITSDb_SQLText(pADOI, sQryI);
  592. ITSDb_SQLText(pADOU, sQryU);
  593. ITSDb_SQLText(pADOD1, sQryD1);
  594. ITSDb_SQLText(pADOD2, sQryD2);
  595. ITSDb_GetConnection()->BeginTrans();
  596. FOR_STL(TItsFacilityFail*, pObj, ItsFacilityFailManager->FSelLists)
  597. {
  598. if (pObj->GridIndex < 0) continue;
  599. if (pObj->Completed && pObj->EditMode == DB_INIT)
  600. continue;
  601. if (!pObj->Completed && pObj->EditMode != DB_NEW)
  602. continue;
  603. nRow = pObj->GridIndex;
  604. String FAIL_HS_SEQ = pObj->FAIL_HS_SEQ; // 장애 이력 일련번호
  605. String FCLT_ID = pObj->FCLT_ID; // 시설물 ID
  606. String EQPM_TYPE_CD = pObj->EQPM_TYPE_CD; // 장비 유형 코드
  607. String OCRR_DT = pObj->OCRR_DT; // 발생 일시
  608. String RCPR_NM = pObj->RCPR_NM; // 접수자 명
  609. String ADTN_DT = pObj->ADTN_DT; // 추가 일시
  610. String ADTN_NM = pObj->ADTN_NM; // 추가자 명
  611. String CHNG_NM = pObj->CHNG_NM; // 변경자 명
  612. String CHNG_DT = pObj->CHNG_DT; // 변경 일시
  613. String FAIL_OCRR_CD = pObj->FAIL_OCRR_CD; // 장애 발생 코드
  614. String FAIL_TYPE = pObj->FAIL_TYPE; // 장애 유형
  615. String ETC_FAIL_CONT = pObj->ETC_FAIL_CONT; // 기타 장애 내용
  616. EQPM_TYPE_CD = VarToStr(m_pGDC->Values[nRow][Column03->Index]); // 장비 유형 코드
  617. OCRR_DT = ""; // 발생 일시
  618. RCPR_NM = VarToStr(m_pGDC->Values[nRow][Column05->Index]); // 접수자 명
  619. ADTN_DT = ""; // 추가 일시
  620. ADTN_NM = VarToStr(m_pGDC->Values[nRow][Column07->Index]); // 추가자 명
  621. CHNG_NM = VarToStr(m_pGDC->Values[nRow][Column08->Index]); // 변경자 명
  622. CHNG_DT = ""; // 변경 일시
  623. FAIL_OCRR_CD = VarToStr(m_pGDC->Values[nRow][Column10->Index]); // 장애 발생 코드
  624. FAIL_TYPE = VarToStr(m_pGDC->Values[nRow][Column11->Index]); // 장애 유형
  625. ETC_FAIL_CONT = VarToStr(m_pGDC->Values[nRow][Column12->Index]); // 기타 장애 내용
  626. if (!VarIsNull(m_pGDC->Values[nRow][Column04->Index]))
  627. {
  628. TDateTime dtTmp = m_pGDC->Values[nRow][Column04->Index];
  629. OCRR_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  630. }
  631. if (!VarIsNull(m_pGDC->Values[nRow][Column06->Index]))
  632. {
  633. TDateTime dtTmp = m_pGDC->Values[nRow][Column06->Index];
  634. ADTN_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  635. }
  636. if (!VarIsNull(m_pGDC->Values[nRow][Column09->Index]))
  637. {
  638. TDateTime dtTmp = m_pGDC->Values[nRow][Column09->Index];
  639. CHNG_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  640. }
  641. //String CHNG_DT = Now().FormatString("yyyymmddhhnnss");
  642. EQPM_TYPE_CD = ITSUtil_GetCode(EQPM_TYPE_CD);
  643. FAIL_OCRR_CD = ITSUtil_GetCode(FAIL_OCRR_CD);
  644. FAIL_TYPE = ITSUtil_GetCode(FAIL_TYPE);
  645. pObj->EQPM_TYPE_CD = EQPM_TYPE_CD; // 장비 유형 코드
  646. pObj->OCRR_DT = OCRR_DT; // 발생 일시
  647. pObj->RCPR_NM = RCPR_NM; // 접수자 명
  648. pObj->ADTN_DT = ADTN_DT; // 추가 일시
  649. pObj->ADTN_NM = ADTN_NM; // 추가자 명
  650. pObj->CHNG_NM = CHNG_NM; // 변경자 명
  651. pObj->CHNG_DT = CHNG_DT; // 변경 일시
  652. pObj->FAIL_OCRR_CD = FAIL_OCRR_CD; // 장애 발생 코드
  653. pObj->FAIL_TYPE = FAIL_TYPE; // 장애 유형
  654. pObj->ETC_FAIL_CONT = ETC_FAIL_CONT; // 기타 장애 내용
  655. if (pObj->Completed)
  656. {
  657. if (pObj->EditMode == DB_DELETE)
  658. {
  659. //delete
  660. ITSDb_SQLBind(pADOD1, "p01", pObj->FAIL_HS_SEQ);
  661. ITSDb_SQLExec(pADOD1);
  662. ITSDb_SQLBind(pADOD2, "p01", pObj->FAIL_HS_SEQ);
  663. ITSDb_SQLExec(pADOD2);
  664. pObj->DEL_YN = "Y";
  665. }
  666. else
  667. if (pObj->EditMode == DB_UPDATE)
  668. {
  669. //update
  670. ITSDb_SQLBind(pADOU, "p01", pObj->FAIL_HS_SEQ);
  671. ITSDb_SQLBind(pADOU, "p02", pObj->FCLT_ID);
  672. ITSDb_SQLBind(pADOU, "p03", pObj->EQPM_TYPE_CD);
  673. ITSDb_SQLBind(pADOU, "p04", pObj->OCRR_DT);
  674. ITSDb_SQLBind(pADOU, "p05", pObj->RCPR_NM);
  675. ITSDb_SQLBind(pADOU, "p06", pObj->ADTN_DT);
  676. ITSDb_SQLBind(pADOU, "p07", pObj->ADTN_NM);
  677. ITSDb_SQLBind(pADOU, "p08", pObj->CHNG_NM);
  678. ITSDb_SQLBind(pADOU, "p09", pObj->CHNG_DT);
  679. ITSDb_SQLBind(pADOU, "p10", pObj->FAIL_OCRR_CD);
  680. ITSDb_SQLBind(pADOU, "p11", pObj->FAIL_TYPE);
  681. ITSDb_SQLBind(pADOU, "p12", pObj->ETC_FAIL_CONT);
  682. ITSDb_SQLExec(pADOU);
  683. }
  684. }
  685. else
  686. {
  687. if (pObj->EditMode == DB_NEW)
  688. {
  689. //insert
  690. ITSDb_SQLBind(pADOI, "p01", pObj->FAIL_HS_SEQ);
  691. ITSDb_SQLBind(pADOI, "p02", pObj->FCLT_ID);
  692. ITSDb_SQLBind(pADOI, "p03", pObj->EQPM_TYPE_CD);
  693. ITSDb_SQLBind(pADOI, "p04", pObj->OCRR_DT);
  694. ITSDb_SQLBind(pADOI, "p05", pObj->RCPR_NM);
  695. ITSDb_SQLBind(pADOI, "p06", pObj->ADTN_DT);
  696. ITSDb_SQLBind(pADOI, "p07", pObj->ADTN_NM);
  697. ITSDb_SQLBind(pADOI, "p08", pObj->CHNG_NM);
  698. ITSDb_SQLBind(pADOI, "p09", pObj->CHNG_DT);
  699. ITSDb_SQLBind(pADOI, "p10", pObj->FAIL_OCRR_CD);
  700. ITSDb_SQLBind(pADOI, "p11", pObj->FAIL_TYPE);
  701. ITSDb_SQLBind(pADOI, "p12", pObj->ETC_FAIL_CONT);
  702. ITSDb_SQLExec(pADOI);
  703. }
  704. }
  705. pObj->Completed = true;
  706. }
  707. ITSDb_GetConnection()->CommitTrans();
  708. Application->MessageBox(L"시설물 장애 내역 정보를 저장 하였습니다.",
  709. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  710. }
  711. catch(EDatabaseError &E)
  712. {
  713. ITSDb_GetConnection()->RollbackTrans();
  714. ShowMessage(String(E.ClassName()) + E.Message);
  715. }
  716. catch(Exception &exception)
  717. {
  718. ITSDb_GetConnection()->RollbackTrans();
  719. ShowMessage(String(exception.ClassName()) + exception.Message);
  720. }
  721. catch(...)
  722. {
  723. ITSDb_GetConnection()->RollbackTrans();
  724. ShowMessage("데이터 작업 중에 알수없는 DB 오류가 발생하였습니다.");
  725. }
  726. }
  727. __finally
  728. {
  729. if (pADOI)
  730. {
  731. pADOI->Close();
  732. delete pADOI;
  733. }
  734. if (pADOU)
  735. {
  736. pADOU->Close();
  737. delete pADOU;
  738. }
  739. if (pADOD1)
  740. {
  741. pADOD1->Close();
  742. delete pADOD1;
  743. }
  744. if (pADOD2)
  745. {
  746. pADOD2->Close();
  747. delete pADOD2;
  748. }
  749. TvList->EndUpdate();
  750. }
  751. }
  752. //---------------------------------------------------------------------------
  753. void __fastcall TFRAMEFacilityFail::ColumnPropertiesValidate(TObject *Sender, Variant &DisplayValue, TCaption &ErrorText,
  754. bool &Error)
  755. {
  756. if (TvList->Controller->FocusedRow->IsFilterRow) return;
  757. int nRow = m_pGDC->FocusedRecordIndex;
  758. if (nRow < 0) return;
  759. int nMemPtr = m_pGDC->Values[nRow][Column99->Index];
  760. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  761. if (pObj->Completed == false)
  762. {
  763. //신규이거나 삭제인 경우 편집 내용에 따른 변화가 필요없다.
  764. return;
  765. }
  766. //String FAIL_HS_SEQ = VarToStr(m_pGDC->Values[nRow][Column01->Index]); // 장애 이력 일련번호
  767. //String FCLT_ID = VarToStr(m_pGDC->Values[nRow][Column02->Index]); // 시설물 ID
  768. String EQPM_TYPE_CD = VarToStr(m_pGDC->Values[nRow][Column03->Index]); // 장비 유형 코드
  769. String OCRR_DT = ""; // 발생 일시
  770. String RCPR_NM = VarToStr(m_pGDC->Values[nRow][Column05->Index]); // 접수자 명
  771. String ADTN_DT = ""; // 추가 일시
  772. String ADTN_NM = VarToStr(m_pGDC->Values[nRow][Column07->Index]); // 추가자 명
  773. String CHNG_NM = VarToStr(m_pGDC->Values[nRow][Column08->Index]); // 변경자 명
  774. String CHNG_DT = ""; // 변경 일시
  775. String FAIL_OCRR_CD = VarToStr(m_pGDC->Values[nRow][Column10->Index]); // 장애 발생 코드
  776. String FAIL_TYPE = VarToStr(m_pGDC->Values[nRow][Column11->Index]); // 장애 유형
  777. String ETC_FAIL_CONT = VarToStr(m_pGDC->Values[nRow][Column12->Index]); // 기타 장애 내용
  778. if (!VarIsNull(m_pGDC->Values[nRow][Column04->Index]))
  779. {
  780. TDateTime dtTmp = m_pGDC->Values[nRow][Column04->Index];
  781. OCRR_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  782. }
  783. if (!VarIsNull(m_pGDC->Values[nRow][Column06->Index]))
  784. {
  785. TDateTime dtTmp = m_pGDC->Values[nRow][Column06->Index];
  786. ADTN_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  787. }
  788. if (!VarIsNull(m_pGDC->Values[nRow][Column09->Index]))
  789. {
  790. TDateTime dtTmp = m_pGDC->Values[nRow][Column09->Index];
  791. CHNG_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  792. }
  793. TcxGridColumn *pColumn = TvList->Controller->FocusedColumn;
  794. if (pColumn == Column03) EQPM_TYPE_CD = DisplayValue;
  795. else if (pColumn == Column04)
  796. {
  797. TDateTime dtTmp = DisplayValue;
  798. OCRR_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  799. }
  800. else if (pColumn == Column05) RCPR_NM = DisplayValue;
  801. else if (pColumn == Column06)
  802. {
  803. TDateTime dtTmp = DisplayValue;
  804. ADTN_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  805. }
  806. else if (pColumn == Column07) ADTN_NM = DisplayValue;
  807. else if (pColumn == Column08) CHNG_NM = DisplayValue;
  808. else if (pColumn == Column09)
  809. {
  810. TDateTime dtTmp = DisplayValue;
  811. CHNG_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  812. }
  813. else if (pColumn == Column10) FAIL_OCRR_CD = DisplayValue;
  814. else if (pColumn == Column11) FAIL_TYPE = DisplayValue;
  815. else if (pColumn == Column12) ETC_FAIL_CONT = DisplayValue;
  816. EQPM_TYPE_CD = ITSUtil_GetCode(EQPM_TYPE_CD);
  817. FAIL_OCRR_CD = ITSUtil_GetCode(FAIL_OCRR_CD);
  818. FAIL_TYPE = ITSUtil_GetCode(FAIL_TYPE);
  819. if (EQPM_TYPE_CD != pObj->EQPM_TYPE_CD || // 장비 유형 코드
  820. OCRR_DT != pObj->OCRR_DT || // 발생 일시
  821. RCPR_NM != pObj->RCPR_NM || // 접수자 명
  822. ADTN_DT != pObj->ADTN_DT || // 추가 일시
  823. ADTN_NM != pObj->ADTN_NM || // 추가자 명
  824. CHNG_NM != pObj->CHNG_NM || // 변경자 명
  825. CHNG_DT != pObj->CHNG_DT || // 변경 일시
  826. FAIL_OCRR_CD != pObj->FAIL_OCRR_CD || // 장애 발생 코드
  827. FAIL_TYPE != pObj->FAIL_TYPE || // 장애 유형
  828. ETC_FAIL_CONT != pObj->ETC_FAIL_CONT ) // 기타 장애 내용
  829. {
  830. m_pGDC->Values[nRow][Column00->Index] = "수정";
  831. pObj->EditMode = DB_UPDATE;
  832. }
  833. else
  834. {
  835. m_pGDC->Values[nRow][Column00->Index] = "-";
  836. pObj->EditMode = DB_INIT;
  837. }
  838. }
  839. //---------------------------------------------------------------------------
  840. void __fastcall TFRAMEFacilityFail::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  841. bool &ADone)
  842. {
  843. if (AViewInfo)
  844. {
  845. String sType = AViewInfo->GridRecord->DisplayTexts[Column00->Index];
  846. if (sType == "수정")
  847. {
  848. ACanvas->Brush->Color = clOlive;
  849. }
  850. else if (sType == "삭제")
  851. {
  852. ACanvas->Brush->Color = clRed;
  853. }
  854. else if (sType == "신규")
  855. {
  856. ACanvas->Brush->Color = clLime;
  857. if (AViewInfo->Focused) ACanvas->Font->Color = clBlack;
  858. }
  859. }
  860. }
  861. //---------------------------------------------------------------------------
  862. void __fastcall TFRAMEFacilityFail::TvListKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
  863. {
  864. if (Key == VK_DELETE)
  865. {
  866. if (BtnDelete->Enabled) BtnDeleteClick(Sender);
  867. }
  868. }
  869. //---------------------------------------------------------------------------
  870. void __fastcall TFRAMEFacilityFail::OnCloseQuery(bool &CanClose)
  871. {
  872. SaveData();
  873. try {
  874. if (FCode) delete FCode;
  875. FCode = NULL;
  876. } catch(...) {}
  877. }
  878. //---------------------------------------------------------------------------
  879. void __fastcall TFRAMEFacilityFail::Column10GetPropertiesForEdit(TcxCustomGridTableItem *Sender,
  880. TcxCustomGridRecord *ARecord, TcxCustomEditProperties *&AProperties)
  881. {
  882. try
  883. {
  884. TcxEditRepositoryComboBoxItem *cxEditRepository = cxEditRepositoryFailOccr;
  885. TcxGridColumn *pColumn = Column10;
  886. cxEditRepository->Properties->Items->Clear();
  887. TcxGridDataController *pGDC = (TcxGridDataController *)TvList->DataController;
  888. int nRow = pGDC->FocusedRecordIndex;
  889. if (nRow < 0) return;
  890. int nMemPtr = pGDC->Values[nRow][Column99->Index];
  891. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  892. if (!pObj) return;
  893. //장비유형
  894. String sEqpmTypeCd = VarToStr(pGDC->Values[nRow][Column03->Index]);
  895. sEqpmTypeCd = ITSUtil_GetCode(sEqpmTypeCd);
  896. TFacilityEqpmType *pEqpmCd = FCode->FLists.Find(sEqpmTypeCd);
  897. if (!pEqpmCd) return;
  898. //장애 발생 코드
  899. FOR_STL(TFacilityFailOccr *, pOccr, pEqpmCd->FLists)
  900. {
  901. String sCode = "[" + pOccr->FAIL_OCRR_CD + "] " + pOccr->FAIL_OCRR_CD_NM;
  902. ((TcxComboBoxProperties*)pColumn->Properties)->Items->Add(sCode);
  903. cxEditRepository->Properties->Items->Add(sCode);
  904. }
  905. ((TcxComboBoxProperties*)pColumn->Properties)->Items->Assign(cxEditRepository->Properties->Items);
  906. }
  907. catch(...)
  908. {
  909. }
  910. }
  911. //---------------------------------------------------------------------------
  912. void __fastcall TFRAMEFacilityFail::Column11GetPropertiesForEdit(TcxCustomGridTableItem *Sender,
  913. TcxCustomGridRecord *ARecord, TcxCustomEditProperties *&AProperties)
  914. {
  915. try
  916. {
  917. TcxEditRepositoryComboBoxItem *cxEditRepository = cxEditRepositoryFailType;
  918. TcxGridColumn *pColumn = Column11;
  919. cxEditRepository->Properties->Items->Clear();
  920. TcxGridDataController *pGDC = (TcxGridDataController *)TvList->DataController;
  921. int nRow = pGDC->FocusedRecordIndex;
  922. if (nRow < 0) return;
  923. int nMemPtr = pGDC->Values[nRow][Column99->Index];
  924. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  925. if (!pObj) return;
  926. //장비유형
  927. String sEqpmTypeCd = VarToStr(pGDC->Values[nRow][Column03->Index]);
  928. sEqpmTypeCd = ITSUtil_GetCode(sEqpmTypeCd);
  929. //장애 발생 코드
  930. String sFailOccrCd = VarToStr(pGDC->Values[nRow][Column10->Index]);
  931. sFailOccrCd = ITSUtil_GetCode(sFailOccrCd);
  932. //장비유형 목록 검색
  933. TFacilityEqpmType *pEqpmCd = FCode->FLists.Find(sEqpmTypeCd);
  934. if (!pEqpmCd) return;
  935. //장애 발생 코드 목록 검색
  936. TFacilityFailOccr *pOccr = pEqpmCd->FLists.Find(sFailOccrCd);
  937. if (!pOccr) return;
  938. //장애 유형
  939. FOR_STL(TFacilityFailCode *, pFail, pOccr->FLists)
  940. {
  941. String sCode = "[" + pFail->FAIL_CD + "] " + pFail->FAIL_CD_NM;
  942. ((TcxComboBoxProperties*)pColumn->Properties)->Items->Add(sCode);
  943. cxEditRepository->Properties->Items->Add(sCode);
  944. }
  945. ((TcxComboBoxProperties*)pColumn->Properties)->Items->Assign(cxEditRepository->Properties->Items);
  946. }
  947. catch(...)
  948. {
  949. }
  950. }
  951. //---------------------------------------------------------------------------
  952. void __fastcall TFRAMEFacilityFail::Column10PropertiesChange(TObject *Sender)
  953. {
  954. try
  955. {
  956. TcxGridDataController *pGDC = (TcxGridDataController *)TvList->DataController;
  957. int nRow = pGDC->FocusedRecordIndex;
  958. if (nRow < 0) return;
  959. int nMemPtr = pGDC->Values[nRow][Column99->Index];
  960. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  961. if (!pObj) return;
  962. //장비유형
  963. String sEqpmTypeCd = VarToStr(pGDC->Values[nRow][Column03->Index]);
  964. sEqpmTypeCd = ITSUtil_GetCode(sEqpmTypeCd);
  965. //장애 발생 코드
  966. String sFailOccrCd = VarToStr(pGDC->Values[nRow][Column10->Index]);
  967. sFailOccrCd = ITSUtil_GetCode(sFailOccrCd);
  968. //장비유형 목록 검색
  969. TFacilityEqpmType *pEqpmCd = FCode->FLists.Find(sEqpmTypeCd);
  970. if (!pEqpmCd) return;
  971. //장애 발생 코드 목록 검색
  972. TFacilityFailOccr *pOccr = pEqpmCd->FLists.Find(sFailOccrCd);
  973. if (!pOccr) return;
  974. //장애 유형
  975. String sFailType = "";
  976. FOR_STL(TFacilityFailCode *, pFail, pOccr->FLists)
  977. {
  978. if (sFailType == "")
  979. {
  980. sFailType = "[" + pFail->FAIL_CD + "] " + pFail->FAIL_CD_NM;
  981. break;
  982. }
  983. }
  984. pGDC->Values[nRow][Column11->Index] = sFailType;
  985. }
  986. catch(...)
  987. {
  988. }
  989. }
  990. //---------------------------------------------------------------------------
  991. void __fastcall TFRAMEFacilityFail::SetDefaultCodeValue()
  992. {
  993. try
  994. {
  995. TcxGridDataController *pGDC = (TcxGridDataController *)TvList->DataController;
  996. int nRow = pGDC->FocusedRecordIndex;
  997. if (nRow < 0) return;
  998. int nMemPtr = pGDC->Values[nRow][Column99->Index];
  999. TItsFacilityFail *pObj = (TItsFacilityFail*)nMemPtr;
  1000. if (!pObj) return;
  1001. //장비유형
  1002. String sEqpmTypeCd = VarToStr(pGDC->Values[nRow][Column03->Index]);
  1003. sEqpmTypeCd = ITSUtil_GetCode(sEqpmTypeCd);
  1004. //장애 발생 코드
  1005. String sFailOccrCd = VarToStr(pGDC->Values[nRow][Column10->Index]);
  1006. sFailOccrCd = ITSUtil_GetCode(sFailOccrCd);
  1007. //장비유형 목록 검색
  1008. TFacilityEqpmType *pEqpmCd = FCode->FLists.Find(sEqpmTypeCd);
  1009. if (!pEqpmCd) return;
  1010. //장애 발생 코드 목록 검색
  1011. TFacilityFailOccr *pOccr = pEqpmCd->FLists.Find(sFailOccrCd);
  1012. if (!pOccr) return;
  1013. //장애 유형
  1014. String sFailType = "";
  1015. FOR_STL(TFacilityFailCode *, pFail, pOccr->FLists)
  1016. {
  1017. if (sFailType == "")
  1018. {
  1019. sFailType = "[" + pFail->FAIL_CD + "] " + pFail->FAIL_CD_NM;
  1020. break;
  1021. }
  1022. }
  1023. pGDC->Values[nRow][Column11->Index] = sFailType;
  1024. }
  1025. catch(...)
  1026. {
  1027. }
  1028. }
  1029. //---------------------------------------------------------------------------