IST0070MF.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSCodeF.h"
  7. #include "ITSLangTransF.h"
  8. #pragma hdrstop
  9. #include "IST0070MF.h"
  10. #include "IST00701F.h"
  11. #include "IST00702F.h"
  12. #include "IST00703F.h"
  13. #include "CDSRoadF.h"
  14. #include "CDSIfscF.h"
  15. #include "CDSLinkF.h"
  16. //---------------------------------------------------------------------------
  17. #pragma package(smart_init)
  18. #pragma link "FRAME_LinkListF"
  19. #pragma link "FRAME_ServiceLinkListF"
  20. #pragma link "FRAME_RoadListF"
  21. #pragma link "cxButtons"
  22. #pragma link "cxCalendar"
  23. #pragma link "cxCheckBox"
  24. #pragma link "cxClasses"
  25. #pragma link "cxContainer"
  26. #pragma link "cxControls"
  27. #pragma link "cxCustomData"
  28. #pragma link "cxData"
  29. #pragma link "cxDataStorage"
  30. #pragma link "cxDropDownEdit"
  31. #pragma link "cxEdit"
  32. #pragma link "cxFilter"
  33. #pragma link "cxGraphics"
  34. #pragma link "cxGrid"
  35. #pragma link "cxGridCustomTableView"
  36. #pragma link "cxGridCustomView"
  37. #pragma link "cxGridLevel"
  38. #pragma link "cxGridTableView"
  39. #pragma link "cxGroupBox"
  40. #pragma link "cxLabel"
  41. #pragma link "cxLookAndFeelPainters"
  42. #pragma link "cxLookAndFeels"
  43. #pragma link "cxMaskEdit"
  44. #pragma link "cxPC"
  45. #pragma link "cxPCdxBarPopupMenu"
  46. #pragma link "cxSplitter"
  47. #pragma link "cxStyles"
  48. #pragma link "cxTextEdit"
  49. #pragma link "dxSkinBlack"
  50. #pragma link "dxSkinBlue"
  51. #pragma link "dxSkinsCore"
  52. #pragma link "dxSkinscxPCPainter"
  53. #pragma resource "*.dfm"
  54. TIST0070M *IST0070M = NULL;
  55. //---------------------------------------------------------------------------
  56. __fastcall TIST0070M::TIST0070M(TComponent* Owner)
  57. : TForm(Owner)
  58. {
  59. LangTrans->Translate(this, ITSDb_GetConnection());
  60. ITSSkin_Load(this);
  61. CMM_LoadForm(g_sFormsDir, this);
  62. ColumnSel->Options->Filtering = false;
  63. FTitle = Caption;//"간선도로 소통정보 통계";
  64. m_pFormList = new TList();
  65. TsList01->TabVisible = false;
  66. MyItsAtrdManager = new TItsAtrdManager();
  67. MyItsAtrdManager->LoadFromDb();
  68. FRAMELinkList1->TvList->OptionsView->GroupByBox = false;
  69. FRAMELinkList1->PnlTop->Visible = false;
  70. FRAMELinkList1->PnlBottom->Visible = false;
  71. FRAMELinkList1->ColumnSeq->Visible = true;
  72. FRAMEServiceLinkList1->TvList->OptionsView->GroupByBox = false;
  73. FRAMEServiceLinkList1->PnlTop->Visible = false;
  74. FRAMEServiceLinkList1->PnlBottom->Visible = false;
  75. FRAMEServiceLinkList1->ColumnSeq->Visible = true;
  76. FRAMEServiceLinkList1->Column02->Visible = false;
  77. FRAMEServiceLinkList1->Column03->Visible = false;
  78. FRAMEServiceLinkList1->Column09->Visible = false;
  79. FRAMEServiceLinkList1->Column10->Visible = false;
  80. FRAMEServiceLinkList1->Column08->Visible = false;
  81. FRAMEServiceLinkList1->Column04->Visible = false;
  82. FRAMEServiceLinkList1->Column05->Visible = false;
  83. FRAMERoadList1->TvList->OptionsView->GroupByBox = false;
  84. FRAMERoadList1->PnlTop->Visible = false;
  85. FRAMERoadList1->PnlBottom->Visible = false;
  86. FRAMERoadList1->ColumnSeq->Visible = true;
  87. FRAMERoadList1->Column02->Visible = false;
  88. FRAMERoadList1->Column03->Visible = false;
  89. PgLink->ActivePageIndex = 0;
  90. PgQry->ActivePageIndex = 0;
  91. PnlQry->Height = 190;
  92. FAtrdId = "";
  93. CbAtrd->Properties->Items->Clear();
  94. try
  95. {
  96. MyItsAtrdManager->FLists.Lock();
  97. FOR_STL(TItsAtrd*, pObj, MyItsAtrdManager->FLists)
  98. {
  99. if (pObj->DEL_YN == "Y") continue;
  100. String sDir = (pObj->DRCT_CD.Trim() == "0") ? FrmLang->lblUp->Caption : FrmLang->lblDown->Caption;//String("상행") : String("하행");
  101. String sAtr = pObj->ATRD_NM;
  102. CbAtrd->Properties->Items->AddObject(sAtr + " [" + sDir + "]", (TObject*)pObj);
  103. }
  104. }
  105. __finally
  106. {
  107. MyItsAtrdManager->FLists.UnLock();
  108. CbAtrd->ItemIndex = 0;
  109. }
  110. }
  111. //---------------------------------------------------------------------------
  112. /*
  113. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  114. * Form과 DataModule class를 delete시킨다.
  115. * arguments
  116. *
  117. * return
  118. * void
  119. */
  120. void __fastcall TIST0070M::CommClose()
  121. {
  122. try
  123. {
  124. for (int idx = m_pFormList->Count-1; idx >= 0; idx--)
  125. {
  126. m_pFormList->Delete(idx);
  127. }
  128. delete m_pFormList;
  129. if (MyItsAtrdManager)
  130. {
  131. delete MyItsAtrdManager;
  132. MyItsAtrdManager = NULL;
  133. }
  134. CMM_SaveForm(g_sFormsDir, this);
  135. }
  136. catch(...)
  137. {
  138. }
  139. }
  140. //---------------------------------------------------------------------------
  141. /*
  142. * Form을 보여줄때 호출되는 event 메서드이다.
  143. * arguments
  144. * Sender : event handler 객체
  145. * return
  146. * void
  147. */
  148. void __fastcall TIST0070M::FormShow(TObject *Sender)
  149. {
  150. Refresh();
  151. FormInit();
  152. TmrShow->Enabled = true;
  153. }
  154. //---------------------------------------------------------------------------
  155. /*
  156. * form 초기화
  157. *
  158. * arguments
  159. *
  160. * return
  161. * void
  162. */
  163. void __fastcall TIST0070M::FormInit()
  164. {
  165. CbStatType->ItemIndex = 0;
  166. TDateTime dtStart = Now()-1;
  167. TDateTime dtEnd = Now();
  168. DtStDate->Date = dtStart;
  169. DtEdDate->Date = dtEnd;
  170. DtStTime->Date = dtStart;
  171. DtEdTime->Date = dtEnd;
  172. //DtStTime->Time = StrToDateTime("00:00");
  173. //DtEdTime->Time = StrToDateTime("23:59");
  174. //시간대 검색
  175. CbStatType1->ItemIndex = 0;
  176. dtStrDate1->DateTime = Now()-1;
  177. dtEndDate1->DateTime = Now();//-1;
  178. CbStrTm1->ItemIndex = 7;
  179. CbEndTm1->ItemIndex = 7;
  180. //지정시각 검색
  181. CbStrTm2->ItemIndex = 7;
  182. CbEndTm2->ItemIndex = 7;
  183. InitQryList();
  184. }
  185. //---------------------------------------------------------------------------
  186. void __fastcall TIST0070M::InitQryList()
  187. {
  188. CMM_ClearGridTableView(TvList);
  189. int nRow = 0;
  190. try
  191. {
  192. TcxDataController *pGDC = TvList->DataController;;
  193. TvList->BeginUpdate();
  194. for (int ii = 0; ii < MAX_QRY_LIST; ii++)
  195. {
  196. nRow = pGDC->AppendRecord();
  197. pGDC->Values[nRow][ColumnSel->Index] = false; //선택
  198. pGDC->Values[nRow][Column00->Index] = "-"; //편집
  199. pGDC->Values[nRow][Column01->Index] = (Now() - (MAX_QRY_LIST-ii)).FormatString("yyyy-MM-dd");
  200. pGDC->Values[nRow][Column02->Index] = "07";
  201. pGDC->Values[nRow][Column03->Index] = "07";
  202. }
  203. }
  204. __finally
  205. {
  206. TvList->EndUpdate();
  207. }
  208. }
  209. //---------------------------------------------------------------------------
  210. /*
  211. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  212. * arguments
  213. * Sender : event handler 객체
  214. * return
  215. * void
  216. */
  217. void __fastcall TIST0070M::TmrShowTimer(TObject *Sender)
  218. {
  219. TmrShow->Enabled = false;
  220. }
  221. //---------------------------------------------------------------------------
  222. /*
  223. * Refresh Data Event Function
  224. * arguments
  225. *
  226. * return
  227. * void
  228. */
  229. void __fastcall TIST0070M::RefreshData()
  230. {
  231. // 검색조건에 의한 링크 데이터 조회
  232. try
  233. {
  234. //SelListData();
  235. }
  236. __finally
  237. {
  238. }
  239. }
  240. //---------------------------------------------------------------------------
  241. /*
  242. * Close 버튼 클릭 이벤트 핸들러
  243. * arguments
  244. * Sender : event handler 객체
  245. * return
  246. * void
  247. */
  248. void __fastcall TIST0070M::BtnCloseClick(TObject *Sender)
  249. {
  250. Close();
  251. }
  252. //---------------------------------------------------------------------------
  253. /*
  254. * 조회결과 폼이 닫힐때 메시지를 받아 처리한다.
  255. * arguments
  256. * Sender : event handler 객체
  257. * return
  258. * void
  259. */
  260. void __fastcall TIST0070M::OnSubFormClose(TMessage Msg)
  261. {
  262. int nActiveIdx = PgTab->ActivePageIndex;
  263. if (nActiveIdx <= 0) return;
  264. LockWindowUpdate(Handle);
  265. TcxTabSheet *pSheet = PgTab->ActivePage;
  266. if (pSheet)
  267. {
  268. delete pSheet;
  269. }
  270. nActiveIdx--; // 첫번째 탭은 화면에 숨겨져 있다.
  271. m_pFormList->Delete(nActiveIdx);
  272. LockWindowUpdate(0);
  273. }
  274. //---------------------------------------------------------------------------
  275. /*
  276. * Tab Control의 Tab을 더블클릭하여 닫는다.
  277. * arguments
  278. * Sender : event handler 객체
  279. * return
  280. * void
  281. */
  282. void __fastcall TIST0070M::PgTabDblClick(TObject *Sender)
  283. {
  284. TPoint APoint;
  285. APoint = PgTab->MouseDownPos;
  286. if (PgTab->IndexOfTabAt(APoint.x, APoint.y) != -1)
  287. POST_MSG(Handle, WM_SUBFORM_CLOSE, 0, 0);
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TIST0070M::FormClose(TObject *Sender, TCloseAction &Action)
  291. {
  292. CommClose();
  293. IST0070M = NULL;
  294. Action = caFree;
  295. }
  296. //---------------------------------------------------------------------------
  297. void __fastcall TIST0070M::CbStatTypePropertiesChange(TObject *Sender)
  298. {
  299. switch(CbStatType->ItemIndex)
  300. {
  301. case 0: //15분 통계
  302. case 1: //시간 통계(1시간)
  303. DtStDate->Format = " yyyy년 MM월 dd일";
  304. DtEdDate->Format = " yyyy년 MM월 dd일";
  305. DtStTime->Visible = true;
  306. DtEdTime->Visible = true;
  307. break;
  308. case 2: //일 통계(1일)
  309. DtStDate->Format = " yyyy년 MM월 dd일";
  310. DtEdDate->Format = " yyyy년 MM월 dd일";
  311. DtStTime->Visible = false;
  312. DtEdTime->Visible = false;
  313. break;
  314. case 3: //월 통계(1개월)
  315. DtStDate->Format = " yyyy년 MM월";
  316. DtEdDate->Format = " yyyy년 MM월";
  317. DtStTime->Visible = false;
  318. DtEdTime->Visible = false;
  319. break;
  320. case 4: //년 통계(1년)
  321. DtStDate->Format = " yyyy년";
  322. DtEdDate->Format = " yyyy년";
  323. DtStTime->Visible = false;
  324. DtEdTime->Visible = false;
  325. break;
  326. }
  327. }
  328. //---------------------------------------------------------------------------
  329. void __fastcall TIST0070M::PgQryPageChanging(TObject *Sender, TcxTabSheet *NewPage,
  330. bool &AllowChange)
  331. {
  332. switch(NewPage->PageIndex)
  333. {
  334. case 0 :
  335. PnlQry->Height = 190;
  336. break;
  337. case 1 :
  338. PnlQry->Height = 220;
  339. break;
  340. case 2 :
  341. PnlQry->Height = 300;
  342. break;
  343. }
  344. }
  345. //---------------------------------------------------------------------------
  346. void __fastcall TIST0070M::SearchTermLink(bool ALink/*=false*/)
  347. {
  348. TcxGrid *pCxList = NULL;
  349. TcxGridTableView *pTvList = NULL;
  350. int nIdCol = -1;
  351. if (PgLink->Properties->ActivePage->PageIndex == 0)
  352. {
  353. pCxList = FRAMELinkList1->CxList;
  354. pTvList = FRAMELinkList1->TvList;
  355. nIdCol = FRAMELinkList1->Column01->Index;
  356. FLinkLevel = 0;
  357. }
  358. else
  359. if (PgLink->Properties->ActivePage->PageIndex == 1)
  360. {
  361. pCxList = FRAMEServiceLinkList1->CxList;
  362. pTvList = FRAMEServiceLinkList1->TvList;
  363. nIdCol = FRAMEServiceLinkList1->Column01->Index;
  364. FLinkLevel = 1;
  365. }
  366. else
  367. if (PgLink->Properties->ActivePage->PageIndex == 2)
  368. {
  369. pCxList = FRAMERoadList1->CxList;
  370. pTvList = FRAMERoadList1->TvList;
  371. nIdCol = FRAMERoadList1->Column01->Index;
  372. FLinkLevel = 2;
  373. }
  374. if (!pTvList) return;
  375. if (ALink)
  376. {
  377. TcxDataController *pGDC = pTvList->DataController;
  378. int nIndex = pGDC->FocusedRecordIndex;
  379. if( nIndex < 0 )
  380. {
  381. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"링크를 먼저 선택 하세요.",
  382. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  383. ActiveControl = pCxList;
  384. return;
  385. }
  386. FLinkId = VarToStr(pGDC->Values[nIndex][nIdCol]);
  387. }
  388. else
  389. {
  390. if (FAtrdId == "")
  391. {
  392. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"간선도로를 먼저 선택 하세요.",
  393. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  394. ActiveControl = CbAtrd;
  395. return;
  396. }
  397. FLinkId = FAtrdId;
  398. }
  399. String sStTime, sEdTime, sTemp;
  400. switch(CbStatType->ItemIndex)
  401. {
  402. case 0: //15분 통계
  403. case 1: //시간 통계(1시간)
  404. sStTime = DtStDate->Date.FormatString("yyyyMMdd") + DtStTime->Time.FormatString("hh");
  405. sEdTime = DtEdDate->Date.FormatString("yyyyMMdd") + DtEdTime->Time.FormatString("hh");
  406. FStTime = sStTime + "0000";
  407. FEdTime = sEdTime + "5959";
  408. break;
  409. case 2: //일 통계(1일)
  410. sStTime = DtStDate->Date.FormatString("yyyyMMdd");
  411. sEdTime = DtEdDate->Date.FormatString("yyyyMMdd");
  412. FStTime = sStTime + "000000";
  413. FEdTime = sEdTime + "235959";
  414. break;
  415. case 3: //월 통계(1개월)
  416. sStTime = DtStDate->Date.FormatString("yyyyMM");
  417. sEdTime = DtEdDate->Date.FormatString("yyyyMM");
  418. sTemp.printf(L"%02d", ITSUtil_GetMonthLastDay(AnsiString(sEdTime).c_str()));
  419. FStTime = sStTime + "01000000";
  420. FEdTime = sEdTime + sTemp + "235959";
  421. break;
  422. case 4: //년 통계(1년)
  423. sStTime = DtStDate->Date.FormatString("yyyy");
  424. sEdTime = DtEdDate->Date.FormatString("yyyy");
  425. FStTime = sStTime + "0101000000";
  426. FEdTime = sEdTime + "1231235959";
  427. break;
  428. default:
  429. return;
  430. }
  431. if (sStTime > sEdTime)
  432. {
  433. Application->MessageBox(FrmLang->lblQryDtErr->Caption.c_str(),//L"검색 시작시각이 검색 종료시각 보다 큽니다.",
  434. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  435. ActiveControl = DtStDate;
  436. return;
  437. }
  438. FStatType = CbStatType->ItemIndex;
  439. String sTitle;
  440. #if 0
  441. sTitle.printf(L"%s - %s(%s~%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  442. CbStatType->Text.c_str(),
  443. sStTime.c_str(),
  444. sEdTime.c_str(),
  445. FLinkId.c_str());
  446. #endif
  447. if (ALink)
  448. {
  449. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  450. CbStatType->Text.c_str(),
  451. FLinkId.c_str());
  452. }
  453. else
  454. {
  455. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  456. CbStatType->Text.c_str(),
  457. FAtrdNm.c_str());
  458. }
  459. try
  460. {
  461. Application->ProcessMessages();
  462. LockWindowUpdate(Handle);
  463. TcxTabSheet *pSheet = CMM_AddTabSheet(PgTab, sTitle);
  464. if (!pSheet) return;
  465. IST00701 = new TIST00701(this, Handle, FLinkId, sStTime, sEdTime, FLinkLevel, FStatType, ALink);
  466. IST00701->Parent = pSheet;
  467. IST00701->Show();
  468. PgTab->ActivePage = pSheet;
  469. pSheet = PgTab->ActivePage;
  470. m_pFormList->Add(IST00701);
  471. }
  472. __finally
  473. {
  474. LockWindowUpdate(0);
  475. }
  476. }
  477. //---------------------------------------------------------------------------
  478. void __fastcall TIST0070M::SearchTimeLink(bool ALink/*=false*/)
  479. {
  480. TcxGrid *pCxList = NULL;
  481. TcxGridTableView *pTvList = NULL;
  482. int nIdCol = -1;
  483. if (PgLink->Properties->ActivePage->PageIndex == 0)
  484. {
  485. pCxList = FRAMELinkList1->CxList;
  486. pTvList = FRAMELinkList1->TvList;
  487. nIdCol = FRAMELinkList1->Column01->Index;
  488. FLinkLevel = 0;
  489. }
  490. else
  491. if (PgLink->Properties->ActivePage->PageIndex == 1)
  492. {
  493. pCxList = FRAMEServiceLinkList1->CxList;
  494. pTvList = FRAMEServiceLinkList1->TvList;
  495. nIdCol = FRAMEServiceLinkList1->Column01->Index;
  496. FLinkLevel = 1;
  497. }
  498. else
  499. if (PgLink->Properties->ActivePage->PageIndex == 2)
  500. {
  501. pCxList = FRAMERoadList1->CxList;
  502. pTvList = FRAMERoadList1->TvList;
  503. nIdCol = FRAMERoadList1->Column01->Index;
  504. FLinkLevel = 2;
  505. }
  506. if (!pTvList) return;
  507. if (ALink)
  508. {
  509. TcxDataController *pGDC = pTvList->DataController;
  510. int nIndex = pGDC->FocusedRecordIndex;
  511. if( nIndex < 0 )
  512. {
  513. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"링크를 먼저 선택 하세요.",
  514. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  515. ActiveControl = pCxList;
  516. return;
  517. }
  518. FLinkId = VarToStr(pGDC->Values[nIndex][nIdCol]);
  519. }
  520. else
  521. {
  522. if (FAtrdId == "")
  523. {
  524. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"간선도로를 먼저 선택 하세요.",
  525. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  526. ActiveControl = CbAtrd;
  527. return;
  528. }
  529. FLinkId = FAtrdId;
  530. }
  531. String sStTime, sEdTime, sTemp;
  532. switch(CbStatType->ItemIndex)
  533. {
  534. case 0: //15분 통계
  535. case 1: //시간 통계(1시간)
  536. sStTime = dtStrDate1->DateTime.FormatString("yyyyMMdd");
  537. sEdTime = dtEndDate1->DateTime.FormatString("yyyyMMdd");
  538. FStTime = sStTime + "000000";
  539. FEdTime = sEdTime + "235959";
  540. break;
  541. default:
  542. return;
  543. }
  544. if (sStTime > sEdTime)
  545. {
  546. Application->MessageBox(FrmLang->lblQryDtErr->Caption.c_str(),//L"검색 시작일이 검색 종료일 보다 큽니다.",
  547. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  548. ActiveControl = dtStrDate1;
  549. return;
  550. }
  551. if (CbStrTm1->ItemIndex > CbEndTm1->ItemIndex)
  552. {
  553. Application->MessageBox(FrmLang->lblQryHourErr->Caption.c_str(),//L"시간대 시작시각이 시간대 종료시각 보다 큽니다.",
  554. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  555. ActiveControl = CbStrTm1;
  556. return;
  557. }
  558. FStTerm.printf(L"%02d0000", CbStrTm1->ItemIndex);
  559. FEdTerm.printf(L"%02d5959", CbEndTm1->ItemIndex);
  560. FStatType = CbStatType1->ItemIndex;
  561. String sTitle;
  562. #if 0
  563. sTitle.printf(L"%s - %s(%s~%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  564. CbStatType1->Text.c_str(),
  565. sStTime.c_str(),
  566. sEdTime.c_str(),
  567. FLinkId.c_str());
  568. #endif
  569. if (ALink)
  570. {
  571. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  572. CbStatType->Text.c_str(),
  573. FLinkId.c_str());
  574. }
  575. else
  576. {
  577. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  578. CbStatType->Text.c_str(),
  579. FAtrdNm.c_str());
  580. }
  581. try
  582. {
  583. Application->ProcessMessages();
  584. LockWindowUpdate(Handle);
  585. TcxTabSheet *pSheet = CMM_AddTabSheet(PgTab, sTitle);
  586. if (!pSheet) return;
  587. IST00702 = new TIST00702(this, Handle, FLinkId, FStTime, FEdTime, FLinkLevel, FStatType, FStTerm, FEdTerm, ALink);
  588. IST00702->Parent = pSheet;
  589. IST00702->Show();
  590. PgTab->ActivePage = pSheet;
  591. pSheet = PgTab->ActivePage;
  592. m_pFormList->Add(IST00702);
  593. }
  594. __finally
  595. {
  596. LockWindowUpdate(0);
  597. }
  598. }
  599. //---------------------------------------------------------------------------
  600. void __fastcall TIST0070M::SearchSpotLink(bool ALink/*=false*/)
  601. {
  602. TcxGrid *pCxList = NULL;
  603. TcxGridTableView *pTvList = NULL;
  604. int nIdCol = -1;
  605. if (PgLink->Properties->ActivePage->PageIndex == 0)
  606. {
  607. pCxList = FRAMELinkList1->CxList;
  608. pTvList = FRAMELinkList1->TvList;
  609. nIdCol = FRAMELinkList1->Column01->Index;
  610. FLinkLevel = 0;
  611. }
  612. else
  613. if (PgLink->Properties->ActivePage->PageIndex == 1)
  614. {
  615. pCxList = FRAMEServiceLinkList1->CxList;
  616. pTvList = FRAMEServiceLinkList1->TvList;
  617. nIdCol = FRAMEServiceLinkList1->Column01->Index;
  618. FLinkLevel = 1;
  619. }
  620. else
  621. if (PgLink->Properties->ActivePage->PageIndex == 2)
  622. {
  623. pCxList = FRAMERoadList1->CxList;
  624. pTvList = FRAMERoadList1->TvList;
  625. nIdCol = FRAMERoadList1->Column01->Index;
  626. FLinkLevel = 2;
  627. }
  628. if (!pTvList) return;
  629. if (ALink)
  630. {
  631. TcxDataController *pGDC = pTvList->DataController;
  632. int nIndex = pGDC->FocusedRecordIndex;
  633. if( nIndex < 0 )
  634. {
  635. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"링크를 먼저 선택 하세요.",
  636. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  637. ActiveControl = pCxList;
  638. return;
  639. }
  640. FLinkId = VarToStr(pGDC->Values[nIndex][nIdCol]);
  641. }
  642. else
  643. {
  644. if (FAtrdId == "")
  645. {
  646. Application->MessageBox(FrmLang->lblSelErr->Caption.c_str(),//L"간선도로를 먼저 선택 하세요.",
  647. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  648. ActiveControl = CbAtrd;
  649. return;
  650. }
  651. FLinkId = FAtrdId;
  652. }
  653. int nSelects = CMM_GetCheckCount(TvList, ColumnSel->Index);
  654. if (0 == nSelects)
  655. {
  656. Application->MessageBox(FrmLang->lblSelNoDate->Caption.c_str(),//L"검색 지정일을 선택하지 않았습니다.",
  657. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  658. ActiveControl = CxList;
  659. return;
  660. }
  661. bool bDateCheck = true;
  662. int nRowCnt = TvList->ViewData->RecordCount;
  663. for (int ii = 0; ii < nRowCnt; ii++)
  664. {
  665. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  666. if (((bool)ARow->Values[ColumnSel->Index]))
  667. {
  668. try
  669. {
  670. if (VarIsNull(ARow->Values[Column01->Index]))
  671. {
  672. bDateCheck = false;
  673. break;
  674. }
  675. String sSelDay = ARow->Values[Column01->Index];
  676. sSelDay = StringReplace(sSelDay, DateSeparator, "", TReplaceFlags() << rfReplaceAll);
  677. if (sSelDay.Length() != 8)
  678. {
  679. bDateCheck = false;
  680. break;
  681. }
  682. }
  683. catch(Exception &e)
  684. {
  685. }
  686. }
  687. }
  688. if (!bDateCheck)
  689. {
  690. Application->MessageBox(FrmLang->lblSelDtErr->Caption.c_str(),//L"검색 지정일의 일자가 올바르지 않았습니다.",
  691. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  692. ActiveControl = CxList;
  693. return;
  694. }
  695. if (CbStrTm2->ItemIndex > CbEndTm2->ItemIndex)
  696. {
  697. Application->MessageBox(FrmLang->lblSelHourOver->Caption.c_str(),//L"시간대 시작시각이 시간대 종료시각 보다 큽니다.",
  698. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  699. ActiveControl = CbStrTm1;
  700. return;
  701. }
  702. FStTerm.printf(L"%02d0000", CbStrTm2->ItemIndex);
  703. FEdTerm.printf(L"%02d5959", CbEndTm2->ItemIndex);
  704. FStatType = CbStatType2->ItemIndex;
  705. String sTitle;
  706. #if 0
  707. sTitle.printf(L"%s - %s %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  708. CbStatType2->Text.c_str(),
  709. FLinkId.c_str());
  710. #endif
  711. if (ALink)
  712. {
  713. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  714. CbStatType->Text.c_str(),
  715. FLinkId.c_str());
  716. }
  717. else
  718. {
  719. sTitle.printf(L"%s-(%s) %s ", PgLink->Properties->ActivePage->Caption.c_str(),
  720. CbStatType->Text.c_str(),
  721. FAtrdNm.c_str());
  722. }
  723. try
  724. {
  725. Application->ProcessMessages();
  726. LockWindowUpdate(Handle);
  727. TcxTabSheet *pSheet = CMM_AddTabSheet(PgTab, sTitle);
  728. if (!pSheet) return;
  729. IST00703 = new TIST00703(this, Handle, FLinkId, FStTime, FEdTime, FLinkLevel, FStatType, FStTerm, FEdTerm, ALink);
  730. IST00703->FSelDayCnt = 0;
  731. int nRowCnt = TvList->ViewData->RecordCount;
  732. for (int ii = 0; ii < nRowCnt; ii++)
  733. {
  734. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  735. if (((bool)ARow->Values[ColumnSel->Index]))
  736. {
  737. try
  738. {
  739. TDateTime dt = VarToDateTime(ARow->Values[Column01->Index]);
  740. String sSelDay = dt.FormatString("yyyyMMdd");
  741. IST00703->FSelDay[IST00703->FSelDayCnt++] = sSelDay;
  742. }
  743. catch(Exception &e)
  744. {
  745. }
  746. }
  747. }
  748. IST00703->Parent = pSheet;
  749. IST00703->Show();
  750. PgTab->ActivePage = pSheet;
  751. pSheet = PgTab->ActivePage;
  752. m_pFormList->Add(IST00702);
  753. }
  754. __finally
  755. {
  756. LockWindowUpdate(0);
  757. }
  758. }
  759. //---------------------------------------------------------------------------
  760. void __fastcall TIST0070M::ClearAtrdList()
  761. {
  762. CMM_ClearGridTableView(FRAMELinkList1->TvList);
  763. CMM_ClearGridTableView(FRAMEServiceLinkList1->TvList);
  764. CMM_ClearGridTableView(FRAMERoadList1->TvList);
  765. }
  766. //---------------------------------------------------------------------------
  767. void __fastcall TIST0070M::FillAtrdList(String AAtrdId)
  768. {
  769. TItsAtrd *pAtrd = MyItsAtrdManager->FLists.Find(AAtrdId);
  770. if (!pAtrd) return;
  771. FOR_STL(TItsAtrdRoad*, pAtrdRoad, pAtrd->FSubLists)
  772. {
  773. TItsRoad *pRoad = ItsRoadManager->FLists.Find(pAtrdRoad->ROAD_ID);
  774. if (!pRoad) continue;
  775. FRAMERoadList1->AddRoad(pRoad->ROAD_ID);
  776. std::map<int, String>::iterator itPos;
  777. for(itPos = pRoad->FSubLists.begin(); itPos != pRoad->FSubLists.end(); ++itPos)
  778. {
  779. String sIfscId = itPos->second;
  780. TItsIfsc *pIfsc = ItsIfscManager->FLists.Find(sIfscId);
  781. if (!pIfsc) continue;
  782. FRAMEServiceLinkList1->AddIfsc(pIfsc->IFSC_ID);
  783. std::map<int, String>::iterator itPos2;
  784. for(itPos2 = pIfsc->FSubLists.begin(); itPos2 != pIfsc->FSubLists.end(); ++itPos2)
  785. {
  786. String sLinkId = itPos2->second;
  787. TItsLink *pLink = ItsLinkManager->FLists.Find(sLinkId);
  788. if (!pLink) continue;
  789. FRAMELinkList1->AddLink(pLink->LINK_ID);
  790. }
  791. }
  792. }
  793. }
  794. //---------------------------------------------------------------------------
  795. void __fastcall TIST0070M::CbAtrdPropertiesChange(TObject *Sender)
  796. {
  797. ClearAtrdList();
  798. int nIdx = CbAtrd->ItemIndex;
  799. if (nIdx < 0 || nIdx >= CbAtrd->Properties->Items->Count)
  800. {
  801. return;
  802. }
  803. TItsAtrd *pObj = (TItsAtrd*)CbAtrd->Properties->Items->Objects[CbAtrd->ItemIndex];
  804. if (!pObj) return;
  805. FAtrdId = pObj->ATRD_ID;
  806. FAtrdNm = pObj->ATRD_NM;
  807. FillAtrdList(FAtrdId);
  808. }
  809. //---------------------------------------------------------------------------
  810. void __fastcall TIST0070M::BtnSearch5Click(TObject *Sender)
  811. {
  812. if (PgQry->Properties->ActivePage->PageIndex == 0)
  813. {
  814. SearchTermLink(true);
  815. }
  816. else
  817. if (PgQry->Properties->ActivePage->PageIndex == 1)
  818. {
  819. SearchTimeLink(true);
  820. }
  821. else
  822. if (PgQry->Properties->ActivePage->PageIndex == 2)
  823. {
  824. SearchSpotLink(true);
  825. }
  826. }
  827. //---------------------------------------------------------------------------
  828. void __fastcall TIST0070M::BtnSearchClick(TObject *Sender)
  829. {
  830. Application->ProcessMessages();
  831. TSqlCursor sqlCrs((TControl*)BtnSearch);
  832. SearchTermLink(false);
  833. }
  834. //---------------------------------------------------------------------------
  835. void __fastcall TIST0070M::BtnSearch1Click(TObject *Sender)
  836. {
  837. Application->ProcessMessages();
  838. TSqlCursor sqlCrs((TControl*)BtnSearch1);
  839. SearchTimeLink(false);
  840. }
  841. //---------------------------------------------------------------------------
  842. void __fastcall TIST0070M::BtnSearch2Click(TObject *Sender)
  843. {
  844. Application->ProcessMessages();
  845. TSqlCursor sqlCrs((TControl*)BtnSearch2);
  846. SearchSpotLink(false);
  847. }
  848. //---------------------------------------------------------------------------
  849. void __fastcall TIST0070M::PgTabCanCloseEx(TObject *Sender, int ATabIndex, bool &ACanClose)
  850. {
  851. int nActiveIdx = ATabIndex;
  852. if (nActiveIdx <= 0) return;
  853. nActiveIdx--; // 첫번째 탭은 화면에 숨겨져 있다.
  854. m_pFormList->Delete(nActiveIdx);
  855. }
  856. //---------------------------------------------------------------------------