FRAME_FacilityFailActionF.cpp 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #pragma hdrstop
  6. #include "FRAME_FacilityFailActionF.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 resource "*.dfm"
  62. extern LOGININFO *g_pLOGIN;
  63. //---------------------------------------------------------------------------
  64. __fastcall TFRAMEFacilityFailAction::TFRAMEFacilityFailAction(TComponent* Owner)
  65. : TFrame(Owner)
  66. {
  67. ITSSkin_Load((TForm*)this);
  68. FTitle = "시설물 장애 내역 조치";
  69. m_pGDC = TvList->DataController;
  70. TvList->OptionsView->NoDataToDisplayInfoText = "<시설물 장애 내역처리 정보가 없습니다>";
  71. FFacilityFail = NULL;
  72. FUpdate = false;
  73. FKeySeq = -1;
  74. FCode = new TFacilityCodeManager();
  75. FCode->LoadHndlTypeDb();
  76. //작업완료여부
  77. TcxComboBoxProperties *pcxCboProperties05 = (TcxComboBoxProperties*)Column05->Properties;
  78. pcxCboProperties05->Items->Clear();
  79. pcxCboProperties05->Items->Add("Y");
  80. pcxCboProperties05->Items->Add("N");
  81. pcxHndlType = (TcxComboBoxProperties*)Column06->Properties;
  82. pcxHndlType->Items->Clear();
  83. FOR_STL(TFacilityHndlType *, pCode, FCode->FHndlLists)
  84. {
  85. pcxHndlType->Items->Add("[" + pCode->FAIL_HNDL_CD + "] " + pCode->FAIL_HNDL_CD_NM);
  86. }
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TFRAMEFacilityFailAction::UpdateCheck()
  90. {
  91. if (FFacilityFail)
  92. {
  93. if (BtnEdit->Down)
  94. {
  95. FUpdate = false;
  96. BtnEdit->Down = false;
  97. BtnEdit->Click();
  98. }
  99. }
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TFRAMEFacilityFailAction::UpdateList(TItsFacilityFail *AFacilityFail)
  103. {
  104. FUpdate = false;
  105. FFacilityFail = AFacilityFail;
  106. LblFacility->Caption = "---";
  107. CMM_ClearGridTableView(TvList);
  108. if (!FFacilityFail) return;
  109. LblFacility->Caption = "[" + FFacilityFail->FCLT_ID + "] [" + FFacilityFail->FAIL_HS_SEQ + "] " + FFacilityFail->ETC_FAIL_CONT;
  110. try
  111. {
  112. TvList->BeginUpdate();
  113. ItsFacilityFailManager->SelDbFailAction(FFacilityFail);
  114. FOR_STL(TItsFacilityFailAction*, pObj, FFacilityFail->FLists)
  115. {
  116. pObj->EditMode = DB_INIT; //미리 초기화시켜야함
  117. pObj->Completed = true;
  118. if (pObj->DEL_YN == "Y") continue;
  119. if (pObj->FAIL_HS_SEQ != FFacilityFail->FAIL_HS_SEQ) continue;
  120. AddObjectItem(pObj, "-");
  121. }
  122. }
  123. __finally
  124. {
  125. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  126. TvList->EndUpdate();
  127. TvList->DataController->GotoFirst();
  128. TvList->DataController->FocusedRecordIndex = 0;
  129. //CxList->SetFocus();
  130. }
  131. }
  132. //---------------------------------------------------------------------------
  133. bool __fastcall TFRAMEFacilityFailAction::AddObjectItem(TItsFacilityFailAction *pObj, String AMode)
  134. {
  135. int nRow;
  136. try
  137. {
  138. nRow = m_pGDC->AppendRecord();
  139. pObj->GridIndex = nRow;
  140. m_pGDC->Values[nRow][Column00->Index] = AMode;
  141. m_pGDC->Values[nRow][Column01->Index] = pObj->FAIL_HS_SEQ; //'장애 이력 일련번호
  142. m_pGDC->Values[nRow][Column02->Index] = pObj->WRKR_NM; //'작업자 명
  143. if (!pObj->WORK_STRT_DT.IsEmpty())
  144. m_pGDC->Values[nRow][Column03->Index] = ITSUtil_StrToDateTime(pObj->WORK_STRT_DT); //'작업 시작 일시
  145. if (!pObj->WORK_END_DT.IsEmpty())
  146. m_pGDC->Values[nRow][Column04->Index] = ITSUtil_StrToDateTime(pObj->WORK_END_DT); //'작업 종료 일시
  147. m_pGDC->Values[nRow][Column05->Index] = pObj->WORK_FINS_YN; //'작업 완료 여부
  148. String sHndlType = "[" + pObj->FAIL_HNDL_TYPE + "] ";
  149. TFacilityHndlType *pHndl = FCode->FHndlLists.Find(pObj->FAIL_HNDL_TYPE);
  150. if (pHndl) sHndlType = sHndlType + pHndl->FAIL_HNDL_CD_NM;
  151. else sHndlType = pcxHndlType->Items->Strings[0];
  152. m_pGDC->Values[nRow][Column06->Index] = sHndlType; //'작업 완료 여부
  153. m_pGDC->Values[nRow][Column07->Index] = pObj->ETC_HNDL_CONT; //'기타 처리 내용
  154. m_pGDC->Values[nRow][Column08->Index] = pObj->ADTN_WRKR_NM; //'추가 작업자 명
  155. if (!pObj->ADTN_WORK_STRT_DT.IsEmpty())
  156. m_pGDC->Values[nRow][Column09->Index] = ITSUtil_StrToDateTime(pObj->ADTN_WORK_STRT_DT); //'추가 작업 시작 일시
  157. if (!pObj->ADTN_WORK_END_DT.IsEmpty())
  158. m_pGDC->Values[nRow][Column10->Index] = ITSUtil_StrToDateTime(pObj->ADTN_WORK_END_DT); //'추가 작업 종료 일시
  159. m_pGDC->Values[nRow][Column99->Index] = (int)pObj;
  160. return true;
  161. }
  162. catch(...)
  163. {
  164. }
  165. return false;
  166. }
  167. //---------------------------------------------------------------------------
  168. void __fastcall TFRAMEFacilityFailAction::TvListDataControllerFilterChanged(TObject *Sender)
  169. {
  170. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  171. }
  172. //---------------------------------------------------------------------------
  173. void __fastcall TFRAMEFacilityFailAction::BtnExlSaveClick(TObject *Sender)
  174. {
  175. TcxGrid *pGrid = CxList;
  176. TcxGridTableView *pView = TvList;
  177. String sTitle= "시설물장애처리내역";
  178. CMM_ExportToExcelFile(sTitle, pGrid, pView, (TForm*)this);
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TFRAMEFacilityFailAction::BtnEditClick(TObject *Sender)
  182. {
  183. if (!FFacilityFail)
  184. {
  185. Application->MessageBox(L"시설물 장애내역 정보를 먼저 선택하세요.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  186. return;
  187. }
  188. TListFocus tvFocus(TvList);
  189. if (BtnEdit->Caption == "취소")
  190. {
  191. CxList->SetFocus();
  192. Application->ProcessMessages();
  193. SaveData();
  194. }
  195. ITSSkin_ButtonClick(BtnSearch, BtnEdit, BtnInsert, BtnDelete, BtnApply);
  196. ChangeEditMode(BtnEdit->Down);
  197. UpdateList(FFacilityFail);
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TFRAMEFacilityFailAction::ChangeEditMode(bool AEdit)
  201. {
  202. bool bEditing = AEdit;
  203. try
  204. {
  205. TvList->BeginUpdate();
  206. Column00->Visible = bEditing;
  207. //Column01->Options->Editing = bEditing; //장애 이력 일련번호
  208. Column02->Options->Editing = bEditing; //작업자 명
  209. Column03->Options->Editing = bEditing; //작업 시작 일시
  210. Column04->Options->Editing = bEditing; //작업 종료 일시
  211. Column05->Options->Editing = bEditing; //작업 완료 여부
  212. Column06->Options->Editing = bEditing; //장애 처리 유형
  213. Column07->Options->Editing = bEditing; //기타 처리 내용
  214. Column08->Options->Editing = bEditing; //추가 작업자 명
  215. Column09->Options->Editing = bEditing; //추가 작업 시작 일시
  216. Column10->Options->Editing = bEditing; //추가 작업 종료 일시
  217. if (bEditing)
  218. {
  219. if (FFacilityFail)
  220. {
  221. //장애조치내역 중복 허용할 경우 이곳을 주석으로 처리하면 됨
  222. if (FFacilityFail->FLists.Size() > 0)
  223. BtnInsert->Enabled = false;
  224. }
  225. }
  226. }
  227. __finally
  228. {
  229. TvList->EndUpdate();
  230. if (bEditing)
  231. {
  232. BtnEdit->Caption = "취소";
  233. BtnEdit->Hint = "데이터 편집 취소";
  234. }
  235. else
  236. {
  237. BtnEdit->Caption = "편집";
  238. BtnEdit->Hint = "데이터 편집";
  239. }
  240. }
  241. }
  242. //---------------------------------------------------------------------------
  243. bool __fastcall TFRAMEFacilityFailAction::GetNewId(String &ANewId)
  244. {
  245. String sQry;
  246. TADOQuery *pADO = NULL;
  247. String sNowDate = Now().FormatString("YYYYMMDDHHNNSS");
  248. ANewId = "";
  249. ANewId = sNowDate;
  250. return true;
  251. }
  252. //---------------------------------------------------------------------------
  253. void __fastcall TFRAMEFacilityFailAction::BtnInsertClick(TObject *Sender)
  254. {
  255. int nMsgType = MB_OK|MB_ICONERROR|MB_APPLMODAL;
  256. if (!FFacilityFail)
  257. {
  258. Application->MessageBox(L"시설물 장애 내역 정보를 먼저 선택하세요.", FTitle.c_str(), nMsgType);
  259. return;
  260. }
  261. //String sNewId = "";
  262. //GetNewId(sNewId);
  263. try
  264. {
  265. TvList->BeginUpdate();
  266. TItsFacilityFailAction *pObj = new TItsFacilityFailAction();
  267. pObj->Clear();
  268. pObj->FAIL_HS_SEQ = FFacilityFail->FAIL_HS_SEQ; // 장애 이력 일련번호
  269. pObj->WRKR_NM = g_pLOGIN->sUserId; // 작업자 명
  270. pObj->WORK_STRT_DT = Now().FormatString("yyyymmddhhnnss"); // 작업 시작 일시
  271. pObj->WORK_END_DT = Now().FormatString("yyyymmddhhnnss"); // 작업 종료 일시
  272. pObj->WORK_FINS_YN = "N"; //작업 완료 여부
  273. pObj->FAIL_HNDL_TYPE = pcxHndlType->Items->Strings[0]; // 장애 처리 유형
  274. pObj->ETC_HNDL_CONT = ""; // 기타 처리 내용
  275. pObj->ADTN_WRKR_NM = ""; // 추가 작업자 명
  276. pObj->ADTN_WORK_STRT_DT = Now().FormatString("yyyymmddhhnnss"); // 추가 작업 시작 일시
  277. pObj->ADTN_WORK_END_DT = Now().FormatString("yyyymmddhhnnss"); // 추가 작업 종료 일시
  278. pObj->DEL_YN = "N"; // 삭제 여부
  279. FFacilityFail->DataCnt++;
  280. FFacilityFail->FLists.Push(String(FFacilityFail->DataCnt), pObj);
  281. //FFacilityFail->FLists.Push(pObj->FAIL_HS_SEQ, pObj);
  282. pObj->Completed = false;
  283. pObj->EditMode = DB_NEW;
  284. AddObjectItem(pObj, "신규");
  285. Application->ProcessMessages();
  286. //Sleep(1000); //생성시각을 유니크하게 하기위함.
  287. }
  288. __finally
  289. {
  290. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  291. TvList->EndUpdate();
  292. TvList->DataController->GotoFirst();
  293. TvList->DataController->FocusedRecordIndex = 0;
  294. }
  295. }
  296. //---------------------------------------------------------------------------
  297. void __fastcall TFRAMEFacilityFailAction::BtnDeleteClick(TObject *Sender)
  298. {
  299. int nIdx = m_pGDC->FocusedRecordIndex;
  300. if (nIdx < 0) return;
  301. int nMemPtr = m_pGDC->Values[nIdx][Column99->Index];
  302. TItsFacilityFailAction *pObj = (TItsFacilityFailAction*)nMemPtr;
  303. pObj->EditMode = DB_DELETE;
  304. m_pGDC->Values[nIdx][Column00->Index] = "삭제";
  305. }
  306. //---------------------------------------------------------------------------
  307. void __fastcall TFRAMEFacilityFailAction::BtnApplyClick(TObject *Sender)
  308. {
  309. FUpdate = true;
  310. BtnEdit->Down = false;
  311. BtnEdit->Click();
  312. }
  313. //---------------------------------------------------------------------------
  314. void __fastcall TFRAMEFacilityFailAction::ChkAutoWidthPropertiesChange(TObject *Sender)
  315. {
  316. try
  317. {
  318. TvList->BeginUpdate();
  319. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  320. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  321. }
  322. __finally
  323. {
  324. TvList->EndUpdate();
  325. }
  326. }
  327. //---------------------------------------------------------------------------
  328. void __fastcall TFRAMEFacilityFailAction::BtnBestFitClick(TObject *Sender)
  329. {
  330. try
  331. {
  332. TvList->BeginUpdate();
  333. TvList->ApplyBestFit(NULL, false, false);
  334. }
  335. __finally
  336. {
  337. TvList->EndUpdate();
  338. }
  339. }
  340. //---------------------------------------------------------------------------
  341. bool __fastcall TFRAMEFacilityFailAction::IsUpdate()
  342. {
  343. if (!FFacilityFail) return false;
  344. FOR_STL(TItsFacilityFailAction*, pObj, FFacilityFail->FLists)
  345. {
  346. if (pObj->Completed && pObj->EditMode != DB_INIT)
  347. return true;
  348. if (!pObj->Completed && pObj->EditMode == DB_NEW)
  349. return true;
  350. }
  351. return false;
  352. }
  353. //---------------------------------------------------------------------------
  354. void __fastcall TFRAMEFacilityFailAction::SaveData()
  355. {
  356. if (!IsUpdate()) return;
  357. if (!FUpdate)
  358. {
  359. if (Application->MessageBox(L"변경된 정보가 있습니다.\r\n변경된 정보를 저장 하시겠습니까?",
  360. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES)
  361. {
  362. //추가했던것 삭제
  363. FOR_STL(TItsFacilityFailAction*, pObj, FFacilityFail->FLists)
  364. {
  365. if (pObj->EditMode == DB_NEW)
  366. FFacilityFail->FLists.Remove(pObj->FAIL_HS_SEQ);
  367. }
  368. return;
  369. }
  370. }
  371. TADOQuery *pADOI = NULL;
  372. TADOQuery *pADOU = NULL;
  373. TADOQuery *pADOD = NULL;
  374. String sQryI;
  375. String sQryU;
  376. String sQryD;
  377. try
  378. {
  379. sQryI = "INSERT INTO TB_FCLT_FAIL_RPAR_HS (FAIL_HS_SEQ, WRKR_NM, WORK_STRT_DT, \r\n"
  380. " WORK_END_DT, WORK_FINS_YN, FAIL_HNDL_TYPE, \r\n"
  381. " ETC_HNDL_CONT, ADTN_WRKR_NM, ADTN_WORK_STRT_DT, \r\n"
  382. " ADTN_WORK_END_DT, DEL_YN) \r\n"
  383. " VALUES(:p01, :p02, :p03, \r\n"
  384. " :p04, :p05, :p06, \r\n"
  385. " :p07, :p08, :p09, \r\n"
  386. " :p10, 'N') \r\n";
  387. sQryU = "UPDATE TB_FCLT_FAIL_RPAR_HS \r\n"
  388. " SET WRKR_NM = :p02, \r\n"
  389. " WORK_STRT_DT = :p03, \r\n"
  390. " WORK_END_DT = :p04, \r\n"
  391. " WORK_FINS_YN = :p05, \r\n"
  392. " FAIL_HNDL_TYPE = :p06, \r\n"
  393. " ETC_HNDL_CONT = :p07, \r\n"
  394. " ADTN_WRKR_NM = :p08, \r\n"
  395. " ADTN_WORK_STRT_DT = :p09, \r\n"
  396. " ADTN_WORK_END_DT = :p10 \r\n"
  397. " WHERE FAIL_HS_SEQ = :p01 \r\n";
  398. sQryD = "DELETE TB_FCLT_FAIL_RPAR_HS \r\n"
  399. " WHERE FAIL_HS_SEQ = :p01 \r\n";
  400. int nRow;
  401. TvList->BeginUpdate();
  402. try
  403. {
  404. pADOI = new TADOQuery(NULL);
  405. pADOI->Close();
  406. pADOI->Connection = ITSDb_GetConnection();
  407. pADOU = new TADOQuery(NULL);
  408. pADOU->Close();
  409. pADOU->Connection = ITSDb_GetConnection();
  410. pADOD = new TADOQuery(NULL);
  411. pADOD->Close();
  412. pADOD->Connection = ITSDb_GetConnection();
  413. ITSDb_SQLText(pADOI, sQryI);
  414. ITSDb_SQLText(pADOU, sQryU);
  415. ITSDb_SQLText(pADOD, sQryD);
  416. ITSDb_GetConnection()->BeginTrans();
  417. FOR_STL(TItsFacilityFailAction*, pObj, FFacilityFail->FLists)
  418. {
  419. if (pObj->GridIndex < 0) continue;
  420. if (pObj->Completed && pObj->EditMode == DB_INIT)
  421. continue;
  422. if (!pObj->Completed && pObj->EditMode != DB_NEW)
  423. continue;
  424. nRow = pObj->GridIndex;
  425. String FAIL_HS_SEQ = pObj->FAIL_HS_SEQ; // 장애 이력 일련번호
  426. String WRKR_NM = pObj->WRKR_NM; // 작업자 명
  427. String WORK_STRT_DT = pObj->WORK_STRT_DT; // 작업 시작 일시
  428. String WORK_END_DT = pObj->WORK_END_DT; // 작업 종료 일시
  429. String WORK_FINS_YN = pObj->WORK_FINS_YN; // 작업 완료 여부
  430. String FAIL_HNDL_TYPE = pObj->FAIL_HNDL_TYPE; // 장애 처리 유형
  431. String ETC_HNDL_CONT = pObj->ETC_HNDL_CONT; // 기타 처리 내용
  432. String ADTN_WRKR_NM = pObj->ADTN_WRKR_NM; // 추가 작업자 명
  433. String ADTN_WORK_STRT_DT = pObj->ADTN_WORK_STRT_DT; // 추가 작업 시작 일시
  434. String ADTN_WORK_END_DT = pObj->ADTN_WORK_END_DT; // 추가 작업 종료 일시
  435. String DEL_YN = pObj->DEL_YN; // 삭제 여부
  436. WRKR_NM = VarToStr(m_pGDC->Values[nRow][Column02->Index]); // 작업자 명
  437. WORK_STRT_DT = ""; // 작업 시작 일시
  438. WORK_END_DT = ""; // 작업 종료 일시
  439. WORK_FINS_YN = VarToStr(m_pGDC->Values[nRow][Column05->Index]); // 작업 완료 여부
  440. FAIL_HNDL_TYPE = VarToStr(m_pGDC->Values[nRow][Column06->Index]); // 장애 처리 유형
  441. ETC_HNDL_CONT = VarToStr(m_pGDC->Values[nRow][Column07->Index]); // 기타 처리 내용
  442. ADTN_WRKR_NM = VarToStr(m_pGDC->Values[nRow][Column08->Index]); // 추가 작업자 명
  443. ADTN_WORK_STRT_DT = ""; // 추가 작업 시작 일시
  444. ADTN_WORK_END_DT = ""; // 추가 작업 종료 일시
  445. if (!VarIsNull(m_pGDC->Values[nRow][Column03->Index]))
  446. {
  447. TDateTime dtTmp = m_pGDC->Values[nRow][Column03->Index];
  448. WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  449. }
  450. if (!VarIsNull(m_pGDC->Values[nRow][Column04->Index]))
  451. {
  452. TDateTime dtTmp = m_pGDC->Values[nRow][Column04->Index];
  453. WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  454. }
  455. if (!VarIsNull(m_pGDC->Values[nRow][Column09->Index]))
  456. {
  457. TDateTime dtTmp = m_pGDC->Values[nRow][Column10->Index];
  458. ADTN_WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  459. }
  460. if (!VarIsNull(m_pGDC->Values[nRow][Column06->Index]))
  461. {
  462. TDateTime dtTmp = m_pGDC->Values[nRow][Column10->Index];
  463. ADTN_WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  464. }
  465. FAIL_HNDL_TYPE = ITSUtil_GetCode(FAIL_HNDL_TYPE);
  466. pObj->WRKR_NM = WRKR_NM; // 작업자 명
  467. pObj->WORK_STRT_DT = WORK_STRT_DT; // 작업 시작 일시
  468. pObj->WORK_END_DT = WORK_END_DT; // 작업 종료 일시
  469. pObj->WORK_FINS_YN = WORK_FINS_YN; // 작업 완료 여부
  470. pObj->FAIL_HNDL_TYPE = FAIL_HNDL_TYPE; // 장애 처리 유형
  471. pObj->ETC_HNDL_CONT = ETC_HNDL_CONT; // 기타 처리 내용
  472. pObj->ADTN_WRKR_NM = ADTN_WRKR_NM; // 추가 작업자 명
  473. pObj->ADTN_WORK_STRT_DT = ADTN_WORK_STRT_DT; // 추가 작업 시작 일시
  474. pObj->ADTN_WORK_END_DT = ADTN_WORK_END_DT; // 추가 작업 종료 일시
  475. if (pObj->Completed)
  476. {
  477. if (pObj->EditMode == DB_DELETE)
  478. {
  479. //delete
  480. ITSDb_SQLBind(pADOD, "p01", pObj->FAIL_HS_SEQ);
  481. ITSDb_SQLExec(pADOD);
  482. pObj->DEL_YN = "Y";
  483. FFacilityFail->ActionCnt--;
  484. }
  485. else
  486. if (pObj->EditMode == DB_UPDATE)
  487. {
  488. //update
  489. ITSDb_SQLBind(pADOU, "p01", pObj->FAIL_HS_SEQ);
  490. ITSDb_SQLBind(pADOU, "p02", pObj->WRKR_NM);
  491. ITSDb_SQLBind(pADOU, "p03", pObj->WORK_STRT_DT);
  492. ITSDb_SQLBind(pADOU, "p04", pObj->WORK_END_DT);
  493. ITSDb_SQLBind(pADOU, "p05", pObj->WORK_FINS_YN);
  494. ITSDb_SQLBind(pADOU, "p06", pObj->FAIL_HNDL_TYPE);
  495. ITSDb_SQLBind(pADOU, "p07", pObj->ETC_HNDL_CONT);
  496. ITSDb_SQLBind(pADOU, "p08", pObj->ADTN_WRKR_NM);
  497. ITSDb_SQLBind(pADOU, "p09", pObj->ADTN_WORK_STRT_DT);
  498. ITSDb_SQLBind(pADOU, "p10", pObj->ADTN_WORK_END_DT);
  499. ITSDb_SQLExec(pADOU);
  500. }
  501. }
  502. else
  503. {
  504. if (pObj->EditMode == DB_NEW)
  505. {
  506. //insert
  507. ITSDb_SQLBind(pADOI, "p01", pObj->FAIL_HS_SEQ);
  508. ITSDb_SQLBind(pADOI, "p02", pObj->WRKR_NM);
  509. ITSDb_SQLBind(pADOI, "p03", pObj->WORK_STRT_DT);
  510. ITSDb_SQLBind(pADOI, "p04", pObj->WORK_END_DT);
  511. ITSDb_SQLBind(pADOI, "p05", pObj->WORK_FINS_YN);
  512. ITSDb_SQLBind(pADOI, "p06", pObj->FAIL_HNDL_TYPE);
  513. ITSDb_SQLBind(pADOI, "p07", pObj->ETC_HNDL_CONT);
  514. ITSDb_SQLBind(pADOI, "p08", pObj->ADTN_WRKR_NM);
  515. ITSDb_SQLBind(pADOI, "p09", pObj->ADTN_WORK_STRT_DT);
  516. ITSDb_SQLBind(pADOI, "p10", pObj->ADTN_WORK_END_DT);
  517. ITSDb_SQLExec(pADOI);
  518. FFacilityFail->DataCnt++;
  519. FFacilityFail->FLists.Push(String(FFacilityFail->DataCnt), pObj);
  520. //FFacilityFail->FLists.Push(pObj->FAIL_HS_SEQ, pObj);
  521. FFacilityFail->ActionCnt++;
  522. }
  523. }
  524. pObj->Completed = true;
  525. }
  526. ITSDb_GetConnection()->CommitTrans();
  527. Application->MessageBox(L"시설물 장애 조치 정보를 저장 하였습니다.",
  528. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  529. }
  530. catch(EDatabaseError &E)
  531. {
  532. ITSDb_GetConnection()->RollbackTrans();
  533. ShowMessage(String(E.ClassName()) + E.Message);
  534. }
  535. catch(Exception &exception)
  536. {
  537. ITSDb_GetConnection()->RollbackTrans();
  538. ShowMessage(String(exception.ClassName()) + exception.Message);
  539. }
  540. catch(...)
  541. {
  542. ITSDb_GetConnection()->RollbackTrans();
  543. ShowMessage("데이터 작업 중에 알수없는 DB 오류가 발생하였습니다.");
  544. }
  545. }
  546. __finally
  547. {
  548. if (pADOI)
  549. {
  550. pADOI->Close();
  551. delete pADOI;
  552. }
  553. if (pADOU)
  554. {
  555. pADOU->Close();
  556. delete pADOU;
  557. }
  558. if (pADOD)
  559. {
  560. pADOD->Close();
  561. delete pADOD;
  562. }
  563. TvList->EndUpdate();
  564. }
  565. }
  566. //---------------------------------------------------------------------------
  567. void __fastcall TFRAMEFacilityFailAction::ColumnPropertiesValidate(TObject *Sender, Variant &DisplayValue, TCaption &ErrorText,
  568. bool &Error)
  569. {
  570. if (TvList->Controller->FocusedRow->IsFilterRow) return;
  571. int nRow = m_pGDC->FocusedRecordIndex;
  572. if (nRow < 0) return;
  573. int nMemPtr = m_pGDC->Values[nRow][Column99->Index];
  574. TItsFacilityFailAction *pObj = (TItsFacilityFailAction*)nMemPtr;
  575. if (pObj->Completed == false)
  576. {
  577. //신규이거나 삭제인 경우 편집 내용에 따른 변화가 필요없다.
  578. return;
  579. }
  580. String WRKR_NM = VarToStr(m_pGDC->Values[nRow][Column02->Index]); // 작업자 명
  581. String WORK_STRT_DT = ""; // 작업 시작 일시
  582. String WORK_END_DT = ""; // 작업 종료 일시
  583. String WORK_FINS_YN = VarToStr(m_pGDC->Values[nRow][Column05->Index]); // 작업 완료 여부
  584. String FAIL_HNDL_TYPE = VarToStr(m_pGDC->Values[nRow][Column06->Index]); // 장애 처리 유형
  585. String ETC_HNDL_CONT = VarToStr(m_pGDC->Values[nRow][Column07->Index]); // 기타 처리 내용
  586. String ADTN_WRKR_NM = VarToStr(m_pGDC->Values[nRow][Column08->Index]); // 추가 작업자 명
  587. String ADTN_WORK_STRT_DT = ""; // 추가 작업 시작 일시
  588. String ADTN_WORK_END_DT = ""; // 추가 작업 종료 일시
  589. if (!VarIsNull(m_pGDC->Values[nRow][Column03->Index]))
  590. {
  591. TDateTime dtTmp = m_pGDC->Values[nRow][Column03->Index];
  592. WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  593. }
  594. if (!VarIsNull(m_pGDC->Values[nRow][Column04->Index]))
  595. {
  596. TDateTime dtTmp = m_pGDC->Values[nRow][Column04->Index];
  597. WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  598. }
  599. if (!VarIsNull(m_pGDC->Values[nRow][Column09->Index]))
  600. {
  601. TDateTime dtTmp = m_pGDC->Values[nRow][Column10->Index];
  602. ADTN_WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  603. }
  604. if (!VarIsNull(m_pGDC->Values[nRow][Column06->Index]))
  605. {
  606. TDateTime dtTmp = m_pGDC->Values[nRow][Column10->Index];
  607. ADTN_WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  608. }
  609. TcxGridColumn *pColumn = TvList->Controller->FocusedColumn;
  610. if (pColumn == Column02) WRKR_NM = DisplayValue;
  611. else if (pColumn == Column03)
  612. {
  613. TDateTime dtTmp = DisplayValue;
  614. WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  615. }
  616. else if (pColumn == Column04)
  617. {
  618. TDateTime dtTmp = DisplayValue;
  619. WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  620. }
  621. else if (pColumn == Column05) WORK_FINS_YN = DisplayValue;
  622. else if (pColumn == Column06) FAIL_HNDL_TYPE = DisplayValue;
  623. else if (pColumn == Column07) ETC_HNDL_CONT = DisplayValue;
  624. else if (pColumn == Column08) ADTN_WRKR_NM = DisplayValue;
  625. else if (pColumn == Column09)
  626. {
  627. TDateTime dtTmp = DisplayValue;
  628. ADTN_WORK_STRT_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  629. }
  630. else if (pColumn == Column10)
  631. {
  632. TDateTime dtTmp = DisplayValue;
  633. ADTN_WORK_END_DT = dtTmp.FormatString("YYYYMMDDHHNNSS");
  634. }
  635. FAIL_HNDL_TYPE = ITSUtil_GetCode(FAIL_HNDL_TYPE);
  636. if (WRKR_NM != pObj->WRKR_NM || // 작업자 명
  637. WORK_STRT_DT != pObj->WORK_STRT_DT || // 작업 시작 일시
  638. WORK_END_DT != pObj->WORK_END_DT || // 작업 종료 일시
  639. WORK_FINS_YN != pObj->WORK_FINS_YN || // 작업 완료 여부
  640. FAIL_HNDL_TYPE != pObj->FAIL_HNDL_TYPE || // 장애 처리 유형
  641. ETC_HNDL_CONT != pObj->ETC_HNDL_CONT || // 기타 처리 내용
  642. ADTN_WRKR_NM != pObj->ADTN_WRKR_NM || // 추가 작업자 명
  643. ADTN_WORK_STRT_DT != pObj->ADTN_WORK_STRT_DT || // 추가 작업 시작 일시
  644. ADTN_WORK_END_DT != pObj->ADTN_WORK_END_DT ) // 추가 작업 종료 일시
  645. {
  646. m_pGDC->Values[nRow][Column00->Index] = "수정";
  647. pObj->EditMode = DB_UPDATE;
  648. }
  649. else
  650. {
  651. m_pGDC->Values[nRow][Column00->Index] = "-";
  652. pObj->EditMode = DB_INIT;
  653. }
  654. }
  655. //---------------------------------------------------------------------------
  656. void __fastcall TFRAMEFacilityFailAction::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  657. bool &ADone)
  658. {
  659. if (AViewInfo)
  660. {
  661. String sType = AViewInfo->GridRecord->DisplayTexts[Column00->Index];
  662. if (sType == "수정")
  663. {
  664. ACanvas->Brush->Color = clOlive;
  665. }
  666. else if (sType == "삭제")
  667. {
  668. ACanvas->Brush->Color = clRed;
  669. }
  670. else if (sType == "신규")
  671. {
  672. ACanvas->Brush->Color = clLime;
  673. if (AViewInfo->Focused) ACanvas->Font->Color = clBlack;
  674. }
  675. }
  676. }
  677. //---------------------------------------------------------------------------
  678. void __fastcall TFRAMEFacilityFailAction::TvListKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
  679. {
  680. if (Key == VK_DELETE)
  681. {
  682. if (BtnDelete->Enabled) BtnDeleteClick(Sender);
  683. }
  684. }
  685. //---------------------------------------------------------------------------
  686. void __fastcall TFRAMEFacilityFailAction::OnCloseQuery(bool &CanClose)
  687. {
  688. SaveData();
  689. try {
  690. if (FCode) delete FCode;
  691. FCode = NULL;
  692. } catch(...) {}
  693. }
  694. //---------------------------------------------------------------------------