FrmVmsMsgRespMngrF.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "WindowMsgF.h"
  7. #include "CDSVmsIfscF.h"
  8. #include "CDSFontF.h"
  9. #include "CDSVmsFormF.h"
  10. #pragma hdrstop
  11. #include "FrmVmsMsgRespMngrF.h"
  12. #include "VMSM610MF.h"
  13. #include "VMSM620MF.h"
  14. #include "VMSM630MF.h"
  15. #include "VMSSEL0MF.h"
  16. #include "VMSEDT0MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalendar"
  21. #pragma link "cxContainer"
  22. #pragma link "cxControls"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxMaskEdit"
  31. #pragma link "cxPC"
  32. #pragma link "cxPCdxBarPopupMenu"
  33. #pragma link "cxSpinEdit"
  34. #pragma link "cxSplitter"
  35. #pragma link "cxTextEdit"
  36. #pragma link "cxTimeEdit"
  37. #pragma link "dxSkinBlack"
  38. #pragma link "dxSkinBlue"
  39. #pragma link "dxSkinCaramel"
  40. #pragma link "dxSkinCoffee"
  41. #pragma link "dxSkinDarkRoom"
  42. #pragma link "dxSkinDarkSide"
  43. #pragma link "dxSkinFoggy"
  44. #pragma link "dxSkinGlassOceans"
  45. #pragma link "dxSkiniMaginary"
  46. #pragma link "dxSkinLilian"
  47. #pragma link "dxSkinLiquidSky"
  48. #pragma link "dxSkinLondonLiquidSky"
  49. #pragma link "dxSkinMcSkin"
  50. #pragma link "dxSkinMoneyTwins"
  51. #pragma link "dxSkinOffice2007Black"
  52. #pragma link "dxSkinOffice2007Blue"
  53. #pragma link "dxSkinOffice2007Green"
  54. #pragma link "dxSkinOffice2007Pink"
  55. #pragma link "dxSkinOffice2007Silver"
  56. #pragma link "dxSkinOffice2010Black"
  57. #pragma link "dxSkinOffice2010Blue"
  58. #pragma link "dxSkinOffice2010Silver"
  59. #pragma link "dxSkinsCore"
  60. #pragma link "dxSkinscxPCPainter"
  61. #pragma link "dxSkinSeven"
  62. #pragma link "dxSkinSharp"
  63. #pragma link "dxSkinSilver"
  64. #pragma link "dxSkinStardust"
  65. #pragma link "cxRadioGroup"
  66. #pragma link "cxClasses"
  67. #pragma link "cxCustomData"
  68. #pragma link "cxData"
  69. #pragma link "cxDataStorage"
  70. #pragma link "cxDBData"
  71. #pragma link "cxFilter"
  72. #pragma link "cxGrid"
  73. #pragma link "cxGridCustomTableView"
  74. #pragma link "cxGridCustomView"
  75. #pragma link "cxGridDBTableView"
  76. #pragma link "cxGridLevel"
  77. #pragma link "cxGridTableView"
  78. #pragma link "cxStyles"
  79. #pragma link "cxCheckBox"
  80. #pragma link "cxImage"
  81. #pragma link "cxButtonEdit"
  82. #pragma link "cxBlobEdit"
  83. #pragma link "cxColorComboBox"
  84. #pragma link "cxCalc"
  85. #pragma link "VmsDesignerF"
  86. #pragma link "FRAME_VmsSchListF"
  87. #pragma link "cxHint"
  88. #pragma link "dxCustomHint"
  89. #pragma link "dxScreenTip"
  90. #pragma link "dxSkinsForm"
  91. #pragma link "dxGDIPlusClasses"
  92. #pragma resource "*.dfm"
  93. TFrmVmsMsgRespMngr *FrmVmsMsgRespMngr = NULL;
  94. //---------------------------------------------------------------------------
  95. __fastcall TFrmVmsMsgRespMngr::TFrmVmsMsgRespMngr(TComponent* Owner)
  96. : TForm(Owner)
  97. {
  98. //CMM_SetFormPosition(g_AppCfg.bSaveForm);
  99. ITSSkin_Initialize(Application, g_AppCfg.sLang);
  100. ITSSkin_Caption(false);
  101. ITSSkin_Load(this);
  102. //CMM_LoadForm(g_sFormsDir, this);
  103. SetColorScheme(g_AppCfg.sSkinName);
  104. FUpdate= false;
  105. FTitle = Caption;//"VMS 자동 스케줄 관리";
  106. FListSymb = new TList;
  107. EditMode = false;
  108. //FRAMEVmsSchList1->PnlTop->Visible = false;
  109. //FRAMEVmsSchList1->PnlBottom->Visible = false;
  110. PgVmsSch->Properties->ActivePage = TsEdit;
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TFrmVmsMsgRespMngr::SetColorScheme(String ASkinName)
  114. {
  115. dxSkinController1->SkinName = ASkinName;
  116. dxSkinController1->Refresh();
  117. PnlPreview->ParentColor = false;
  118. PnlPreview->Color = clBlack;
  119. }
  120. //---------------------------------------------------------------------------
  121. void __fastcall TFrmVmsMsgRespMngr::CommClose()
  122. {
  123. try {
  124. #if 0
  125. if (m_pEdtDesigner) {
  126. delete m_pEdtDesigner;
  127. m_pEdtDesigner = NULL;
  128. }
  129. #endif
  130. APP_DelVmsSizeCombo(CbSizeType);
  131. ClearSymbloList();
  132. SAFE_DELETE(FListSymb);
  133. ITSSkin_Term();
  134. //CMM_SaveForm(g_sFormsDir, this);
  135. }
  136. catch(...) {
  137. }
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TFrmVmsMsgRespMngr::FormCreate(TObject *Sender)
  141. {
  142. InitDbLoading();
  143. //m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  144. //FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FFontColors) {
  145. // m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  146. //}
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TFrmVmsMsgRespMngr::InitDbLoading()
  150. {
  151. Application->ProcessMessages();
  152. if (!VmsCtlrManager) {
  153. VmsCtlrManager = new TVmsCtlrManager();
  154. }
  155. VmsCtlrManager->LoadVmsModlSize();
  156. VmsCtlrManager->LoadFromDb();
  157. #if 0
  158. if (SysCodeManager == NULL) {
  159. SysCodeManager = new TSysCodeManager();
  160. }
  161. SysCodeManager->LoadFromDb();
  162. if (!VmsTextItemManager) {
  163. VmsTextItemManager = new TVmsTextItemManager();
  164. }
  165. VmsTextItemManager->LoadFromDb();
  166. #endif
  167. if(!CDSFontManager) {
  168. CDSFontManager = new TCDSFontManager();
  169. }
  170. CDSFontManager->LoadFontInfo();
  171. LoadIncdType();
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TFrmVmsMsgRespMngr::FormShow(TObject *Sender)
  175. {
  176. Refresh();
  177. FormInit();
  178. TmrShow->Enabled = true;
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TFrmVmsMsgRespMngr::FormInit()
  182. {
  183. TNotifyEvent evt = CbSizeType->Properties->OnChange;
  184. CbSizeType->Properties->OnChange = NULL;
  185. APP_FillVmsSizeType(CbSizeType, false);
  186. CbSizeType->Properties->OnChange = evt;
  187. FNewDb = false;
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TFrmVmsMsgRespMngr::TmrShowTimer(TObject *Sender)
  191. {
  192. TmrShow->Enabled = false;
  193. CbSizeType->ItemIndex = -1;
  194. CbSizeType->ItemIndex = 0;
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TFrmVmsMsgRespMngr::BtnCloseClick(TObject *Sender)
  198. {
  199. Close();
  200. }
  201. //---------------------------------------------------------------------------
  202. void __fastcall TFrmVmsMsgRespMngr::FormClose(TObject *Sender, TCloseAction &Action)
  203. {
  204. CommClose();
  205. FrmVmsMsgRespMngr = NULL;
  206. Action = caFree;
  207. }
  208. //---------------------------------------------------------------------------
  209. void __fastcall TFrmVmsMsgRespMngr::FormCloseQuery(TObject *Sender, bool &CanClose)
  210. {
  211. if (FUpdate)
  212. {
  213. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  214. }
  215. }
  216. //---------------------------------------------------------------------------
  217. void __fastcall TFrmVmsMsgRespMngr::ClearSymbloList()
  218. {
  219. FFormLists.Clear();
  220. for(int ii = 0; ii < FListSymb->Count; ii++)
  221. {
  222. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  223. delete bitmap;
  224. }
  225. FListSymb->Clear();
  226. }
  227. //---------------------------------------------------------------------------
  228. void __fastcall TFrmVmsMsgRespMngr::CbSizeTypePropertiesChange(TObject *Sender)
  229. {
  230. if (CbSizeType->ItemIndex < 0) return;
  231. EdFocus->SetFocus();
  232. BtnSearchClick(NULL);
  233. CxList->SetFocus();
  234. LockWindowUpdate(GrpPreview->Handle);
  235. PnlPreview->Width = FVmsWidth;
  236. PnlPreview->Height= FVmsHeight;
  237. ImgPreview->Align = alNone;
  238. ImgPreview->Picture->Bitmap->Width = FVmsWidth;
  239. ImgPreview->Picture->Bitmap->Height= FVmsHeight;
  240. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  241. ImgPreview->Align = alClient;
  242. LockWindowUpdate(0);
  243. }
  244. //---------------------------------------------------------------------------
  245. void __fastcall TFrmVmsMsgRespMngr::BtnSearchClick(TObject *Sender)
  246. {
  247. RefreshData();
  248. EdFocus->SetFocus();
  249. }
  250. //---------------------------------------------------------------------------
  251. void __fastcall TFrmVmsMsgRespMngr::RefreshData()
  252. {
  253. FormClear();
  254. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  255. if (pVmsSizeType == NULL) return;
  256. FVmsTypeCd = pVmsSizeType->TypeCd;
  257. FVmsWidth = pVmsSizeType->Width;
  258. FVmsHeight = pVmsSizeType->Height;
  259. FillIncdTypeList();
  260. LoadVmsFormList(FVmsTypeCd);
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TFrmVmsMsgRespMngr::FormClear()
  264. {
  265. FSelIdx = -1;
  266. EdIncdType->Clear();
  267. EdIncdDtlType->Clear();
  268. GrpSchedule->Caption = lblTitle->Caption;//"▶ 자동 스케줄 설정";
  269. CMM_ClearGridTableView(TvSche);
  270. //LockWindowUpdate(GrpPreview->Handle);
  271. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  272. //LockWindowUpdate(0);
  273. FNewDb = false;
  274. }
  275. //---------------------------------------------------------------------------
  276. void __fastcall TFrmVmsMsgRespMngr::DisplayInfo()
  277. {
  278. FormClear();
  279. FSelIdx = CMM_GetRecordIndex(TvList);
  280. if (FSelIdx < 0) return;
  281. TcxDataController *pGDC = TvList->DataController;
  282. //FVmsTypeCd
  283. String sIncd = VarToStr(pGDC->Values[FSelIdx][ColIncd->Index]);
  284. String sIncdDtl = VarToStr(pGDC->Values[FSelIdx][ColIncdDtl->Index]);
  285. String sIncdType = VarToStr(pGDC->Values[FSelIdx][ColIncdType->Index]);
  286. String sIncdDtlType = VarToStr(pGDC->Values[FSelIdx][ColIncdDtlType->Index]);
  287. EdIncdType->Text = sIncdType;
  288. EdIncdDtlType->Text = sIncdDtlType;
  289. GrpSchedule->Caption = lblTitle->Caption + " (" + sIncd + " ==> " + sIncdDtl + ")";
  290. LoadVmsScheduleInfo(FVmsTypeCd, sIncdType, sIncdDtlType);
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TFrmVmsMsgRespMngr::BtnListAddClick(TObject *Sender)
  294. {
  295. String sUse = "N";
  296. String sTime= "4";
  297. int nSelIdx = CMM_GetRecordIndex(TvList);
  298. if (nSelIdx < 0) return;
  299. TcxGridDataController *pDcFrm = TvForm->DataController;
  300. TcxGridDataController *pDcSch = TvSche->DataController;
  301. int nFormIdx = CMM_GetRecordIndex(TvForm);
  302. if (nFormIdx < 0) return;
  303. int nRow = pDcSch->AppendRecord();
  304. pDcSch->Values[nRow][Col00->Index] = VarToStr(pDcFrm->Values[nFormIdx][ColFrm00->Index]); //ID
  305. pDcSch->Values[nRow][Col02->Index] = VarToStr(pDcFrm->Values[nFormIdx][ColFrm02->Index]); //명칭
  306. pDcSch->Values[nRow][Col03->Index] = VarToStr(pDcFrm->Values[nFormIdx][ColFrm03->Index]); //표출(초)
  307. //pDcSch->Values[nRow][Col01->Index] = pDcFrm->Values[nFormIdx][ColFrm01->Index]; //이미지데이터임
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TFrmVmsMsgRespMngr::BtnListDeleteClick(TObject *Sender)
  311. {
  312. int nSelIdx = CMM_GetRecordIndex(TvList);
  313. if (nSelIdx < 0) return;
  314. TcxGridDataController *pDcSch = TvSche->DataController;
  315. nSelIdx = CMM_GetRecordIndex(TvSche);
  316. if (nSelIdx < 0) return;
  317. TvSche->DataController->DeleteRecord(nSelIdx);
  318. }
  319. //---------------------------------------------------------------------------
  320. void __fastcall TFrmVmsMsgRespMngr::BtnSaveClick(TObject *Sender)
  321. {
  322. String sVmsModlKind = FVmsTypeCd;
  323. String sIncdType = EdIncdType->Text.Trim();
  324. String sIncdDtlType = EdIncdDtlType->Text.Trim();
  325. if (sIncdType.IsEmpty() || sIncdDtlType.IsEmpty()) {
  326. Application->MessageBox(L"VMS 대응 메시지 관리\r\nVMS 대응 이벤트 목록에서 VMS 이벤트를 먼저 선택한 후 작업을 진행하세요.",
  327. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  328. return;
  329. }
  330. if (Application->MessageBox(L"VMS 대응 메시지 관리\r\nVMS 대응 원클릭 메시지를 저장하시겠습니까?",
  331. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  332. ITSDb_GetConnection()->BeginTrans();
  333. if (!DeleteVmsScenario(sVmsModlKind, sIncdType, sIncdDtlType)) {
  334. ITSDb_GetConnection()->RollbackTrans();
  335. return;
  336. }
  337. if (!SaveVmsScenario(sVmsModlKind, sIncdType, sIncdDtlType)) {
  338. ITSDb_GetConnection()->RollbackTrans();
  339. return;
  340. }
  341. ITSDb_GetConnection()->CommitTrans();
  342. Application->MessageBox(L"VMS 대응 메시지 관리\r\nVMS 대응 원클릭 메시지를 저장하였습니다.",
  343. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  344. //CMM_SetGridRow(CxList, FRAMEVmsSchList1->TvList, sVmsCtlrId, FRAMEVmsSchList1->Column01->Index);
  345. DisplayInfo();
  346. }
  347. //---------------------------------------------------------------------------
  348. bool __fastcall TFrmVmsMsgRespMngr::SaveVmsScenario(String AVmsModlKind, String AIncdType, String AIncdDtlType)
  349. {
  350. String sQry;
  351. TADOQuery *pADO = NULL;
  352. TcxDataController *pGDC = TvSche->DataController;
  353. sQry = "INSERT INTO TB_VMS_INCD_RES_FORM ( \r\n"
  354. " INCD_TYPE, \r\n"
  355. " INCD_DTL_TYPE, \r\n"
  356. " VMS_MODL_KIND, \r\n"
  357. " SN, \r\n"
  358. " VMS_FORM_ID, \r\n"
  359. " RGSTR_ID, \r\n"
  360. " REG_DT ) \r\n"
  361. " VALUES ( \r\n"
  362. " :p01, \r\n"
  363. " :p02, \r\n"
  364. " :p03, \r\n"
  365. " :p04, \r\n"
  366. " :p05, \r\n"
  367. " :p06, \r\n"
  368. " SYSDATE ) \r\n";
  369. try {
  370. TvSche->BeginUpdate();
  371. int nRows = pGDC->RecordCount;
  372. try {
  373. pADO = new TADOQuery(NULL);
  374. pADO->Close();
  375. pADO->Connection = ITSDb_GetConnection();
  376. ITSDb_SQLText(pADO, sQry);
  377. for (int ii = 0; ii < nRows; ii++) {
  378. int SN = ii+1;
  379. String VMS_FORM_ID = VarToStr(pGDC->Values[ii][Col00->Index]);
  380. String RGSTR_ID = g_AppCfg.OPER_ID;
  381. pADO->Parameters->ParamByName("p01")->Value = AIncdType;
  382. pADO->Parameters->ParamByName("p02")->Value = AIncdDtlType;
  383. pADO->Parameters->ParamByName("p03")->Value = AVmsModlKind;
  384. pADO->Parameters->ParamByName("p04")->Value = SN;
  385. pADO->Parameters->ParamByName("p05")->Value = VMS_FORM_ID;
  386. pADO->Parameters->ParamByName("p06")->Value = RGSTR_ID;
  387. pADO->ExecSQL();
  388. }
  389. }
  390. catch(EDatabaseError &E) {
  391. DBERRORMSG("TFrmVmsMsgRespMngr::SaveVmsScenario", String(E.ClassName()), E.Message, sQry);
  392. return false;
  393. }
  394. catch(Exception &e) {
  395. DBERRORMSG("TFrmVmsMsgRespMngr::SaveVmsScenario", String(e.ClassName()), e.Message, sQry);
  396. return false;
  397. }
  398. }
  399. __finally {
  400. if (pADO) {
  401. pADO->Close();
  402. delete pADO;
  403. }
  404. TvSche->EndUpdate();
  405. }
  406. return true;
  407. }
  408. //---------------------------------------------------------------------------
  409. bool __fastcall TFrmVmsMsgRespMngr::DeleteVmsScenario(String AVmsModlKind, String AIncdType, String AIncdDtlType)
  410. {
  411. String sQry;
  412. TADOQuery *pADO = NULL;
  413. sQry = "DELETE TB_VMS_INCD_RES_FORM \r\n"
  414. " WHERE 1=1 \r\n"
  415. " AND INCD_TYPE = :p01 \r\n"
  416. " AND INCD_DTL_TYPE = :p02 \r\n"
  417. " AND VMS_MODL_KIND = :p03 \r\n";
  418. try {
  419. try {
  420. pADO = new TADOQuery(NULL);
  421. pADO->Close();
  422. pADO->Connection = ITSDb_GetConnection();
  423. ITSDb_SQLText(pADO, sQry);
  424. pADO->Parameters->ParamByName("p01")->Value = AIncdType;
  425. pADO->Parameters->ParamByName("p02")->Value = AIncdDtlType;
  426. pADO->Parameters->ParamByName("p03")->Value = AVmsModlKind;
  427. pADO->ExecSQL();
  428. }
  429. catch(EDatabaseError &E) {
  430. DBERRORMSG("TFrmVmsMsgRespMngr::DeleteVmsScenario", String(E.ClassName()), E.Message, sQry);
  431. return false;
  432. }
  433. catch(Exception &e) {
  434. DBERRORMSG("TFrmVmsMsgRespMngr::DeleteVmsScenario", String(e.ClassName()), e.Message, sQry);
  435. return false;
  436. }
  437. }
  438. __finally {
  439. if (pADO) {
  440. pADO->Close();
  441. delete pADO;
  442. }
  443. }
  444. return true;
  445. }
  446. //---------------------------------------------------------------------------
  447. bool __fastcall TFrmVmsMsgRespMngr::LoadVmsScheduleInfo(String AVmsModlKind, String AIncdType, String AIncdDtlType)
  448. {
  449. int ii;
  450. String sQry;
  451. TADOQuery *pADO = NULL;
  452. CMM_ClearGridTableView(TvSche);
  453. CMM_ClearGridTableView(TvView);
  454. TcxDataController *pDcSch = TvSche->DataController;
  455. TcxDataController *pDcViw = TvView->DataController;
  456. sQry = "SELECT A.INCD_TYPE, A.INCD_DTL_TYPE, \r\n"
  457. " A.VMS_MODL_KIND, A.SN, \r\n"
  458. " A.VMS_FORM_ID, B.VMS_FORM_NM, \r\n"
  459. " B.VMS_FORM_TYPE, B.DSPL_HR, \r\n"
  460. " B.VMS_FORM_IMG \r\n"
  461. " FROM TB_VMS_INCD_RES_FORM A, \r\n"
  462. " TB_VMS_FORM B \r\n"
  463. " WHERE 1=1 \r\n"
  464. " AND A.INCD_TYPE = :p01 \r\n"
  465. " AND A.INCD_DTL_TYPE = :p02 \r\n"
  466. " AND A.VMS_MODL_KIND = :p03 \r\n"
  467. " AND A.VMS_FORM_ID = B.VMS_FORM_ID \r\n"
  468. " ORDER BY A.SN \r\n";
  469. try {
  470. TvSche->BeginUpdate();
  471. TvView->BeginUpdate();
  472. int nRowS, nRowV;
  473. try {
  474. pADO = new TADOQuery(NULL);
  475. pADO->Close();
  476. pADO->Connection = ITSDb_GetConnection();
  477. ITSDb_SQLText(pADO, sQry);
  478. ITSDb_SQLBind(pADO, "p01", AIncdType);
  479. ITSDb_SQLBind(pADO, "p02", AIncdDtlType);
  480. ITSDb_SQLBind(pADO, "p03", AVmsModlKind);
  481. ITSDb_SQLOpen(pADO);
  482. int nFormType;
  483. for( ; !pADO->Eof; pADO->Next()) {
  484. nRowS = pDcSch->AppendRecord();
  485. nRowV = pDcViw->AppendRecord();
  486. pDcSch->Values[nRowS][Col00->Index] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  487. pDcSch->Values[nRowS][Col02->Index] = pADO->FieldByName("VMS_FORM_NM")->AsString;
  488. pDcSch->Values[nRowS][Col03->Index] = pADO->FieldByName("DSPL_HR")->AsString;
  489. //pDcSch->Values[nRowS][Col01->Index] = pADO->FieldByName("VMS_FORM_IMG")->AsVariant;
  490. pDcViw->Values[nRowV][ColView00->Index] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  491. pDcViw->Values[nRowV][ColView02->Index] = pADO->FieldByName("VMS_FORM_NM")->AsString;
  492. pDcViw->Values[nRowV][ColView03->Index] = pADO->FieldByName("DSPL_HR")->AsString;
  493. pDcViw->Values[nRowV][ColView01->Index] = pADO->FieldByName("VMS_FORM_IMG")->AsVariant;
  494. }
  495. }
  496. catch(EDatabaseError &E) {
  497. DBERRORMSG("TFrmVmsMsgRespMngr::LoadVmsScheduleInfo", String(E.ClassName()), E.Message, sQry);
  498. return false;
  499. }
  500. catch(Exception &e) {
  501. DBERRORMSG("TFrmVmsMsgRespMngr::LoadVmsScheduleInfo", String(e.ClassName()), e.Message, sQry);
  502. return false;
  503. }
  504. }
  505. __finally {
  506. if (pADO) {
  507. pADO->Close();
  508. delete pADO;
  509. }
  510. TvSche->EndUpdate();
  511. TvView->EndUpdate();
  512. }
  513. return true;
  514. }
  515. //---------------------------------------------------------------------------
  516. bool __fastcall TFrmVmsMsgRespMngr::LoadVmsFormList(String AFormSizeCd)
  517. {
  518. ClearSymbloList();
  519. CMM_ClearGridTableView(TvForm);
  520. String sQry;
  521. TADOQuery *pADO = NULL;
  522. // 돌발폼만 조회
  523. sQry = "SELECT A.VMS_FORM_ID, A.VMS_MODL_KIND, A.VMS_FORM_TYPE, A.VMS_FORM_NM, \r\n"
  524. " A.VMS_FORM_IMG, \r\n"
  525. " A.DSPL_EFF, NVL(A.DSPL_HR, 0) AS DSPL_HR, A.BACK_CLR, \r\n"
  526. " NVL(B.FORM_TYPE_NM, A.VMS_FORM_TYPE) AS FORM_TYPE_NM, \r\n"
  527. " NVL(C.FORM_TYPE_NM, A.DSPL_EFF) AS DSPL_EFF_NM, \r\n"
  528. " NVL(D.VMS_MODL_KIND_NM, A.VMS_MODL_KIND) AS VMS_MODL_KIND_NM \r\n"
  529. " FROM TB_VMS_FORM A, \r\n"
  530. " (SELECT CODE_NO, CD_NM AS FORM_TYPE_NM \r\n"
  531. " FROM TB_SYS_CD \r\n"
  532. " WHERE CLSS_CD = 'VMS_FORM_TYPE_CD') B, \r\n"
  533. " (SELECT CODE_NO, CD_NM AS FORM_TYPE_NM \r\n"
  534. " FROM TB_SYS_CD \r\n"
  535. " WHERE CLSS_CD = 'VMS_FORM_DSPL_EFF_CD') C, \r\n"
  536. " TB_VMS_MODL_KIND D \r\n"
  537. " WHERE 1=1 \r\n"
  538. " AND A.VMS_FORM_TYPE = 'I' \r\n"
  539. " AND A.VMS_FORM_TYPE = B.CODE_NO(+) \r\n"
  540. " AND A.DSPL_EFF = C.CODE_NO(+) \r\n"
  541. " AND A.VMS_MODL_KIND = D.VMS_MODL_KIND(+) \r\n"
  542. " AND A.VMS_MODL_KIND = :p01 \r\n"
  543. " ORDER BY A.VMS_MODL_KIND, A.VMS_FORM_ID \r\n";
  544. try {
  545. TvForm->BeginUpdate();
  546. TcxDataController *pGDC = TvForm->DataController;;
  547. int nRow;
  548. try {
  549. pADO = new TADOQuery(NULL);
  550. pADO->Close();
  551. pADO->Connection = ITSDb_GetConnection();
  552. ITSDb_SQLText(pADO, sQry);
  553. ITSDb_SQLBind(pADO, "p01", AFormSizeCd);
  554. ITSDb_SQLOpen(pADO);
  555. int nFormTypeCd, nFormIdx;
  556. for( ; !pADO->Eof; pADO->Next()) {
  557. nRow = pGDC->AppendRecord();
  558. String VMS_FORM_ID = pADO->FieldByName("VMS_FORM_ID")->AsString;
  559. pGDC->Values[nRow][ColFrm00->Index] = VMS_FORM_ID;
  560. pGDC->Values[nRow][ColFrm02->Index] = pADO->FieldByName("VMS_FORM_NM")->AsString;
  561. pGDC->Values[nRow][ColFrm03->Index] = pADO->FieldByName("DSPL_HR")->AsString;
  562. pGDC->Values[nRow][ColFrm09->Index] = pADO->FieldByName("FORM_TYPE_NM")->AsString;
  563. //pGDC->Values[nRow][ColFrm01->Index] = pADO->FieldByName("VMS_FORM_IMG")->AsVariant;
  564. TFormImage *pImage = new TFormImage();
  565. pImage->fromId = VMS_FORM_ID;
  566. pImage->bitmap = new Graphics::TBitmap;
  567. try {
  568. pImage->bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("VMS_FORM_IMG"), bmRead));
  569. }
  570. catch(Exception &e) {
  571. delete pImage->bitmap;
  572. pImage->bitmap = NULL;
  573. }
  574. FFormLists.Push(pImage->fromId, pImage);
  575. }
  576. }
  577. catch(EDatabaseError &E)
  578. {
  579. DBERRORMSG("TFrmVmsMsgRespMngr::LoadVmsFormList", String(E.ClassName()), E.Message, sQry);
  580. return false;
  581. }
  582. catch(Exception &e)
  583. {
  584. DBERRORMSG("TFrmVmsMsgRespMngr::LoadVmsFormList", String(e.ClassName()), e.Message, sQry);
  585. return false;
  586. }
  587. }
  588. __finally {
  589. if (pADO) {
  590. pADO->Close();
  591. delete pADO;
  592. }
  593. TvForm->EndUpdate();
  594. }
  595. return true;
  596. }
  597. //---------------------------------------------------------------------------
  598. void __fastcall TFrmVmsMsgRespMngr::cxGridColumn172CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  599. bool &ADone)
  600. {
  601. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  602. if (nRecordIdx < 0) {
  603. return;
  604. }
  605. try {
  606. int nItemIdx = AViewInfo->Item->Index;
  607. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  608. String sEndDt = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  609. if (sEndDt < Now().FormatString(STR_HHNN)) {
  610. ACanvas->Canvas->Brush->Color = clSilver;
  611. }
  612. }
  613. catch(Exception &e) {
  614. }
  615. }
  616. //---------------------------------------------------------------------------
  617. void __fastcall TFrmVmsMsgRespMngr::BtnUpClick(TObject *Sender)
  618. {
  619. try {
  620. TvSche->BeginUpdate();
  621. int nCurIdx = TvSche->DataController->FocusedRowIndex;//FocusedRecordIndex;
  622. if (nCurIdx <= 0) {
  623. return;
  624. }
  625. int nUpIdx = nCurIdx-1;
  626. try {
  627. int nCols = TvSche->ColumnCount;
  628. for (int ii = 0; ii < nCols; ii++) {
  629. Variant va = TvSche->DataController->Values[nCurIdx][ii];
  630. TvSche->DataController->Values[nCurIdx][ii] = TvSche->DataController->Values[nUpIdx][ii];
  631. TvSche->DataController->Values[nUpIdx][ii] = va;
  632. }
  633. TvSche->Controller->ClearSelection();
  634. TvSche->Controller->FocusedRowIndex = nUpIdx;
  635. TvSche->ViewData->Records[nUpIdx]->Focused = true;
  636. TvSche->ViewData->Records[nUpIdx]->Selected = true;
  637. CxSche->SetFocus();
  638. }
  639. catch(...) {
  640. }
  641. }
  642. __finally {
  643. TvSche->EndUpdate();
  644. }
  645. }
  646. //---------------------------------------------------------------------------
  647. void __fastcall TFrmVmsMsgRespMngr::BtnDownClick(TObject *Sender)
  648. {
  649. try {
  650. TvSche->BeginUpdate();
  651. int nCurIdx = TvSche->DataController->FocusedRowIndex;//FocusedRecordIndex;
  652. if (nCurIdx < 0) {
  653. return;
  654. }
  655. if (nCurIdx == TvSche->DataController->RecordCount-1) {
  656. return;
  657. }
  658. int nDnIdx = nCurIdx+1;
  659. try {
  660. int nCols = TvSche->ColumnCount;
  661. for (int ii = 0; ii < nCols; ii++) {
  662. Variant va = TvSche->DataController->Values[nCurIdx][ii];
  663. TvSche->DataController->Values[nCurIdx][ii] = TvSche->DataController->Values[nDnIdx][ii];
  664. TvSche->DataController->Values[nDnIdx][ii] = va;
  665. }
  666. TvSche->Controller->ClearSelection();
  667. TvSche->Controller->FocusedRowIndex = nDnIdx;
  668. TvSche->ViewData->Records[nDnIdx]->Focused = true;
  669. TvSche->ViewData->Records[nDnIdx]->Selected = true;
  670. CxSche->SetFocus();
  671. }
  672. catch(...) {
  673. }
  674. }
  675. __finally {
  676. TvSche->EndUpdate();
  677. }
  678. }
  679. //---------------------------------------------------------------------------
  680. void __fastcall TFrmVmsMsgRespMngr::TvScheFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  681. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  682. {
  683. if (!AFocusedRecord) return;
  684. int nSelIdx = CMM_GetRecordIndex(TvSche);
  685. if (nSelIdx < 0) return;
  686. String sVmsFormId = VarToStr(TvSche->DataController->Values[nSelIdx][Col00->Index]);
  687. LoadPreviewForm(sVmsFormId);
  688. }
  689. //---------------------------------------------------------------------------
  690. void __fastcall TFrmVmsMsgRespMngr::TvFormFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  691. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  692. {
  693. if (!AFocusedRecord) return;
  694. int nSelIdx = CMM_GetRecordIndex(TvForm);
  695. if (nSelIdx < 0) return;
  696. String sVmsFormId = VarToStr(TvForm->DataController->Values[nSelIdx][ColFrm00->Index]);
  697. LoadPreviewForm(sVmsFormId);
  698. }
  699. //---------------------------------------------------------------------------
  700. void __fastcall TFrmVmsMsgRespMngr::LoadPreviewForm(String AVmsFormId)
  701. {
  702. TFormImage *pImage = FFormLists.Find(AVmsFormId);
  703. LockWindowUpdate(GrpPreview->Handle);
  704. if (pImage != NULL && pImage->bitmap != NULL) {
  705. ImgPreview->Picture->Bitmap->Assign(pImage->bitmap);
  706. }
  707. else {
  708. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  709. }
  710. LockWindowUpdate(0);
  711. }
  712. //---------------------------------------------------------------------------
  713. void __fastcall TFrmVmsMsgRespMngr::ChkAutoWidthPropertiesChange(TObject *Sender)
  714. {
  715. try {
  716. LockWindowUpdate(Handle);
  717. TvView->BeginUpdate();
  718. TvView->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  719. TvView->EndUpdate();
  720. }
  721. __finally {
  722. LockWindowUpdate(0);
  723. //BtnBestFit->Visible = !ChkAutoWidth->Checked;
  724. }
  725. }
  726. //---------------------------------------------------------------------------
  727. void __fastcall TFrmVmsMsgRespMngr::BtnBestFitClick(TObject *Sender)
  728. {
  729. try {
  730. LockWindowUpdate(Handle);
  731. TvView->BeginUpdate();
  732. TvView->ApplyBestFit(NULL, false, false);
  733. TvView->EndUpdate();
  734. }
  735. __finally {
  736. LockWindowUpdate(0);
  737. }
  738. }
  739. //---------------------------------------------------------------------------
  740. bool __fastcall TFrmVmsMsgRespMngr::LoadIncdType()
  741. {
  742. TIncdCode *code1 = new TIncdCode(1, "사고");
  743. code1->FLists.Push(0, new TIncdSubCode(0, "사고"));
  744. TIncdCode *code2 = new TIncdCode(2, "공사");
  745. code2->FLists.Push(0, new TIncdSubCode(0, "공사"));
  746. TIncdCode *code3 = new TIncdCode(3, "행사");
  747. code3->FLists.Push(0, new TIncdSubCode(0, "행사"));
  748. TIncdCode *code4 = new TIncdCode(4, "기상");
  749. code4->FLists.Push(0, new TIncdSubCode(0, "기상"));
  750. FIncdLists.Push(code1->INCD_TYPE, code1);
  751. FIncdLists.Push(code2->INCD_TYPE, code2);
  752. FIncdLists.Push(code3->INCD_TYPE, code3);
  753. FIncdLists.Push(code4->INCD_TYPE, code4);
  754. String sQry;
  755. TADOQuery *pADO = NULL;
  756. sQry = "SELECT B.CLSS_CD, B.CODE_NO AS INCD_TYPE, B.CD_NM AS INCD_NAME, \r\n"
  757. " A.CODE_NO AS INCD_DTL_TYPE, A.CD_NM AS INCD_DTL_NAME \r\n"
  758. " FROM TB_SYS_CD A, \r\n"
  759. " (SELECT CLSS_CD, CODE_NO, CD_NM, CD_VAL_1 \r\n"
  760. " FROM TB_SYS_CD \r\n"
  761. " WHERE CLSS_CD = 'INCD_TYPE_CD') B \r\n"
  762. " WHERE A.CLSS_CD = B.CD_VAL_1 \r\n"
  763. " ORDER BY B.CODE_NO, TO_NUMBER(A.CODE_NO) \r\n";
  764. try {
  765. try {
  766. pADO = new TADOQuery(NULL);
  767. pADO->Close();
  768. pADO->Connection = ITSDb_GetConnection();
  769. ITSDb_SQLText(pADO, sQry);
  770. ITSDb_SQLOpen(pADO);
  771. for( ; !pADO->Eof; pADO->Next()) {
  772. int INCD_TYPE = pADO->FieldByName("INCD_TYPE")->AsInteger;
  773. String INCD_NAME = pADO->FieldByName("INCD_NAME")->AsString;
  774. int INCD_DTL_TYPE = pADO->FieldByName("INCD_DTL_TYPE")->AsInteger;
  775. String INCD_DTL_NAME = pADO->FieldByName("INCD_DTL_NAME")->AsString;
  776. TIncdCode *pCode = FIncdLists.Find(INCD_TYPE);
  777. if (pCode == NULL) {
  778. pCode = new TIncdCode(INCD_TYPE, INCD_NAME);
  779. FIncdLists.Push(pCode->INCD_TYPE, pCode);
  780. }
  781. pCode->FLists.Push(INCD_DTL_TYPE, new TIncdSubCode(INCD_DTL_TYPE, INCD_DTL_NAME));
  782. }
  783. }
  784. catch(EDatabaseError &E)
  785. {
  786. DBERRORMSG("TFrmVmsMsgRespMngr::LoadIncdType", String(E.ClassName()), E.Message, sQry);
  787. return false;
  788. }
  789. catch(Exception &e)
  790. {
  791. DBERRORMSG("TFrmVmsMsgRespMngr::LoadIncdType", String(e.ClassName()), e.Message, sQry);
  792. return false;
  793. }
  794. }
  795. __finally {
  796. if (pADO) {
  797. pADO->Close();
  798. delete pADO;
  799. }
  800. }
  801. return true;
  802. }
  803. //---------------------------------------------------------------------------
  804. void __fastcall TFrmVmsMsgRespMngr::FillIncdTypeList()
  805. {
  806. CMM_ClearGridTableView(TvList);
  807. int nRow = 0;
  808. TcxDataController *pGDC = TvList->DataController;
  809. TvList->BeginUpdate();
  810. try {
  811. FOR_STL(TIncdCode*, pCode, FIncdLists) {
  812. FOR_STL(TIncdSubCode*, pSubCode, pCode->FLists) {
  813. nRow = pGDC->AppendRecord();
  814. pGDC->Values[nRow][ColIncd->Index] = String(pCode->INCD_TYPE) + ": " + pCode->INCD_NAME;
  815. pGDC->Values[nRow][ColIncdDtl->Index] = String(pSubCode->INCD_DTL_TYPE) + ": " + pSubCode->INCD_DTL_NAME;
  816. pGDC->Values[nRow][ColIncdType->Index] = pCode->INCD_TYPE;
  817. pGDC->Values[nRow][ColIncdDtlType->Index] = pSubCode->INCD_DTL_TYPE;
  818. pGDC->Values[nRow][Column99->Index] = (int)pSubCode;
  819. }
  820. }
  821. }
  822. __finally {
  823. TvList->EndUpdate();
  824. //TvList->DataController->GotoFirst();
  825. //TvList->DataController->FocusedRecordIndex = 0;
  826. CMM_ExpandCollapseChk(TvList, true);
  827. }
  828. }
  829. //---------------------------------------------------------------------------
  830. void __fastcall TFrmVmsMsgRespMngr::ChkExpandClick(TObject *Sender)
  831. {
  832. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  833. }
  834. //---------------------------------------------------------------------------
  835. void __fastcall TFrmVmsMsgRespMngr::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  836. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  837. {
  838. if (!AFocusedRecord) return;
  839. DisplayInfo();
  840. }
  841. //---------------------------------------------------------------------------