/// <summary> /// 轉檔前檢查日期格式及其他狀態 /// </summary> /// <returns></returns> private bool StartExport() { if (!emDate.IsDate(emDate.Text, "日期輸入錯誤")) { //is_chk = "Y"; return(false); } DataTable dt = (DataTable)gcMain.DataSource; if (dt.Rows.Count <= 0) { MessageDisplay.Warning("下方視窗無資料無法進行存檔,請先執行「讀取/預覽」!"); ShowMsg("轉檔有誤!"); return(false); } if (retrieveChoose == DialogResult.No) { MessageDisplay.Warning("已重新產置資料,請先執行「儲存」!"); ShowMsg("轉檔有誤!"); return(false); } stMsgTxt.Visible = true; stMsgTxt.Text = "開始轉檔..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); return(true); }
protected override ResultStatus Retrieve() { if (gbDetial.EditValue.Equals("rb_detail")) { MessageDisplay.Warning("明細資料僅提供「轉出」CSV檔案,請按轉出功能!"); return(ResultStatus.Fail); } if (!StartRetrieve()) { return(ResultStatus.Fail); } if (!GetData()) { return(ResultStatus.Fail); } List <ReportProp> caption = new List <ReportProp> { new ReportProp { DataColumn = "AMM0_YMD", Caption = "日期", CellWidth = gbDetial.EditValue.Equals("rb_gnodate")?120:65, DetailRowFontSize = gbDetial.EditValue.Equals("rb_gnodate")?8:9, HeaderFontSize = 11 }, new ReportProp { DataColumn = "AMM0_BRK_NO", Caption = "期貨商 代號", CellWidth = 80, DetailRowFontSize = 10, HeaderFontSize = 11 }, new ReportProp { DataColumn = "BRK_ABBR_NAME", Caption = "期貨商名稱", CellWidth = 150, DetailRowFontSize = 9.75f, HeaderFontSize = 11 }, new ReportProp { DataColumn = "AMM0_CNT", Caption = "詢價筆數", CellWidth = gbDetial.EditValue.Equals("rb_gnodate")?90:120, textAlignment = TextAlignment.MiddleRight, DetailRowFontSize = 11, HeaderFontSize = 11 }, new ReportProp { DataColumn = "CP_RATE_VALID_CNT", Caption = "佔全市場 詢價比例(%)", CellWidth = 100, textAlignment = TextAlignment.MiddleRight, TextFormatString = "{0:##0.0#}", DetailRowFontSize = 11, HeaderFontSize = 11 }, new ReportProp { DataColumn = "AMM0_MARKET_R_CNT", Caption = "全市場 詢價筆數", CellWidth = 120, textAlignment = TextAlignment.MiddleRight, DetailRowFontSize = 11, HeaderFontSize = 11 } }; //商品名稱會根據列印順序有所不同 ReportProp productName = new ReportProp { DataColumn = "AMM0_PROD_ID", Caption = "商品名稱", CellWidth = 120, DetailRowFontSize = 11, HeaderFontSize = 11 }; if (_D500Xx.SortType == "P") { caption.Insert(1, productName);//選擇商品,商品名稱會位於第二欄 } else { caption.Insert(3, productName);//選擇造勢者,商品名稱會位於第四欄 } _defReport = new defReport(_Data, caption); ShowReport(_defReport); //WriteLog("查詢資料 " + _D500Xx.LogText, "query", "R"); return(ResultStatus.Success); }
/// <summary> /// 只要發生錯誤,而且有勾選email news,則show message box /// </summary> /// <param name="sendEmail"></param> protected ResultStatus showEmailMsg(bool sendEmail) { if (sendEmail) { MessageDisplay.Warning("產出檔案有異常資訊,請通知系統負責人!"); } return(ResultStatus.Fail); }
protected override ResultStatus CheckShield() { base.CheckShield(); string orgPassword = txtOrgPassword.Text; string password = txtPassword.Text; string confirmPassword = txtConfirmPassword.Text; if (orgPassword == password) { MessageDisplay.Warning("「原始舊密碼」與「變更後新密碼」相同"); txtPassword.Focus(); return(ResultStatus.Fail); } if (string.IsNullOrEmpty(confirmPassword)) { MessageDisplay.Warning("請輸入「再次確認新密碼」欄位"); txtConfirmPassword.Focus(); return(ResultStatus.Fail); } if (confirmPassword != password) { MessageDisplay.Warning("「變更後新密碼」與「再次確認新密碼」不符"); txtPassword.Focus(); return(ResultStatus.Fail); } if (password.Length < 8) { MessageDisplay.Warning("密碼長度必須大於8位!"); txtPassword.Focus(); return(ResultStatus.Fail); } Regex regx = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"); if (!regx.IsMatch(password)) { MessageDisplay.Warning("密碼不符規定,至少(大寫英文'A',小字英文'a',數字'1')型態各一!"); txtPassword.Focus(); return(ResultStatus.Fail); } DataTable dt = daoUPF.ListDataByUserIdAndPassword(lblUserId.Text, orgPassword); if (dt.Rows.Count == 0) { MessageDisplay.Warning("原密碼輸入錯誤"); txtOrgPassword.Focus(); return(ResultStatus.Fail); } return(ResultStatus.Success); }
protected override ResultStatus RunBefore(PokeBall args) { string txfServer = gvMain.GetRowCellValue(1, "TXF_SERVER").AsString(); if (txfServer != GlobalDaoSetting.GetConnectionInfo.ConnectionName) { MessageDisplay.Warning("作業Server(" + txfServer + ") 不等於連線Server(" + GlobalDaoSetting.GetConnectionInfo.ConnectionName + ")"); return(ResultStatus.Fail); } string inputDate = txtOcfDate.Text; string nowDate = DateTime.Now.ToString(txtOcfDate.Properties.EditFormat.FormatString); if (OCF_TYPE == "D") { if (inputDate != nowDate) { if (MessageDisplay.Choose("交易日期(" + inputDate + ") 不等於今日(" + nowDate + "),是否要繼續?") == DialogResult.No) { return(ResultStatus.Fail); } } if (servicePrefix1.HasLogspDone(Convert.ToDateTime(inputDate), _ProgramID)) { if (MessageDisplay.Choose(_ProgramID + " 作業 " + inputDate + "「曾經」執行過,\n是否要繼續?\n\n★★★建議先執行 [預覽] 確認執行狀態") == DialogResult.No) { return(ResultStatus.Fail); } } if (!servicePrefix1.setOCF(txtOcfDate.DateTimeValue, _DB_TYPE, GlobalInfo.USER_ID)) { return(ResultStatus.Fail); } } else if (OCF_TYPE == "M") { if (inputDate != nowDate) { if (MessageDisplay.Choose("月份(" + inputDate + ") 不等於本月(" + nowDate + "),是否要繼續?") == DialogResult.No) { return(ResultStatus.Fail); } } } GridHelper.AcceptText(gcMain); return(base.RunBefore(args)); }
protected override ResultStatus CheckShield() { base.CheckShield(gcMain); if (!IsDataModify(gcMain)) { return(ResultStatus.Fail); } if (string.IsNullOrEmpty(ddlTxnId.EditValue.AsString())) { MessageDisplay.Warning("作業代號不可為空白!"); return(ResultStatus.Fail); } return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall poke) { try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } //隱藏欄位賦值 foreach (DataRow dr in dtCurrent.Rows) { if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified) { dr["MMFO_W_TIME"] = DateTime.Now; dr["MMFO_W_USER_ID"] = GlobalInfo.USER_ID; } } dtChange = dtCurrent.GetChanges(); ResultData result = new MMFO().UpdateData(dtChange); if (result.Status == ResultStatus.Fail) { MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); return(ResultStatus.Fail); } PrintOrExportChangedByKen(gcMain, dtForAdd, dtForDeleted, dtForModified); } catch (Exception ex) { MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); WriteLog(ex, "", false); return(ResultStatus.FailButNext); } return(ResultStatus.Success); }
private void gvMain_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { GridView gv = sender as GridView; switch (e.Column.FieldName) { //原PB設計[開始交易日期]輸入後檢查日期格式 只跳警示訊息 在按存檔時又會檢查一次 case "APDK_BEGIN_DATE": DateTime dateTime; if (DateTime.TryParse(e.Value.ToString(), out dateTime)) { return; } else { MessageDisplay.Warning(e.Value.ToString() + "日期格式錯誤!"); gv.FocusedRowHandle = e.RowHandle; gv.FocusedColumn = gv.Columns[e.Column.FieldName]; gv.ShowEditor(); } return; case "APDK_PROD_TYPE": case "APDK_PROD_SUBTYPE": case "APDK_KIND_ID": //[商品子類別]不等於股票類[商品對照類別]自動帶入[商品3碼]的值 if (gv.GetRowCellValue(e.RowHandle, gv.Columns["APDK_PROD_SUBTYPE"]).AsString() != "S") { gv.SetRowCellValue(e.RowHandle, gv.Columns["APDK_PARAM_KEY"], gv.GetRowCellValue(e.RowHandle, gv.Columns["APDK_KIND_ID"])); } else { //[商品子類別]等於股票類[商品對照類別]選擇前先清空 gv.SetRowCellValue(e.RowHandle, gv.Columns["APDK_PARAM_KEY"], DBNull.Value); } return; default: return; } }
private void btnSetting_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(ddlUserId.EditValue.AsString())) { MessageDisplay.Warning("請選擇使用者代號!"); } else { bool result = daoUPF.UpdatePasswordByUserId(ddlUserId.EditValue.AsString(), txtPassword.Text); if (result) { _IsPreventFlowPrint = false; base.ProcessSaveFlow(); SingletonLogger.Instance.Info(GlobalInfo.USER_ID, _ProgramID, "使用者起始設定", "I"); } else { MessageDisplay.Error("密碼變更失敗!"); } } }
protected override ResultStatus Save(PokeBall pokeBall) { try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } ResultData result = new RPT().UpdateData(dtChange); if (result.Status == ResultStatus.Fail) { return(ResultStatus.Fail); } } catch (Exception ex) { WriteLog(ex); } return(ResultStatus.Success); }
protected override ResultStatus Export() { try { #region 輸入&日期檢核 if (string.Compare(txtStartYMD.Text, txtEndYMD.Text) > 0) { MessageDisplay.Error(CheckDate.Datedif, GlobalInfo.ErrorText); return(ResultStatus.Fail); } #endregion //0. ready panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "開始轉檔..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); //判斷是否至少勾選一個選項 if (chkGroup.CheckedItemsCount < 1) { MessageDisplay.Warning("請勾選至少一個選項!", GlobalInfo.WarningText); return(ResultStatus.Fail); } else { string tempMarketCode; //RadioButton (rbMarket0 = 一般 / rbMarket1 = 盤後 / rbMarketAll = 全部) if (gbMarket.EditValue.ToString() == "rbMarket0") { tempMarketCode = "一般"; } else if (gbMarket.EditValue.ToString() == "rbMarket1") { tempMarketCode = "盤後"; } else { tempMarketCode = "全部"; } //1.複製檔案 & 開啟檔案 (因檔案需因MarketCode更動,所以另外寫) string originalFilePath = Path.Combine(GlobalInfo.DEFAULT_EXCEL_TEMPLATE_DIRECTORY_PATH, _ProgramID + "." + FileType.XLS.ToString().ToLower()); string destinationFilePath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, _ProgramID + "_" + tempMarketCode + "_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.") + FileType.XLS.ToString().ToLower()); File.Copy(originalFilePath, destinationFilePath, true); Workbook workbook = new Workbook(); workbook.LoadDocument(destinationFilePath); Worksheet worksheet = workbook.Worksheets[0]; //2.填資料 bool result = false; result = wf_Export(workbook, worksheet); //function 30590 if (!result) { workbook = null; File.Delete(destinationFilePath); return(ResultStatus.Fail); } //3.存檔 workbook.SaveDocument(destinationFilePath); labMsg.Visible = false; } return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }
protected override ResultStatus Export() { try { this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); lblProcessing.Visible = true; ShowMsg("開始轉檔..."); string rptId = "42011", file, rptName = "股票期貨風險價格係數機動評估指標"; #region ue_export_before //判斷資料已轉入 daoMGR3 = new MGR3(); int rtn; string ymd = txtSDate.DateTimeValue.ToString("yyyyMMdd"); rtn = daoMGR3.mgr3Count(ymd); if (rtn == 0) { DialogResult result = MessageDisplay.Choose(" 當日保證金適用比例資料未轉入完畢,是否要繼續?"); if (result == DialogResult.No) { lblProcessing.Visible = false; return(ResultStatus.Fail); } } //130批次作業做完 string rtnStr; rtnStr = PbFunc.f_chk_130_wf(_ProgramID, txtSDate.DateTimeValue, "5"); if (rtnStr != "") { DialogResult result = MessageDisplay.Choose(txtSDate.Text + "-" + rtnStr + ",是否要繼續?"); if (result == DialogResult.No) { lblProcessing.Visible = false; return(ResultStatus.Fail); } } //是否勾選任一報表 if (!cbx1.Checked && !cbx2.Checked && !cbx3.Checked) { MessageDisplay.Error("未勾選任何報表!"); return(ResultStatus.Fail); } #endregion //取前一交易日 DateTime lastDate = dao42011.GetLastDate(txtSDate.DateTimeValue); if (lastDate == DateTime.MinValue) { MessageDisplay.Warning(txtSDate.Text + ",讀取前一交易日失敗!"); return(ResultStatus.Fail); } //讀取資料(保證金適用比例級距) DataTable dt42011 = dao42011.d_42011_detl(txtSDate.DateTimeValue, lastDate, txtRange.Text.AsDecimal() / 100, txtRate2Ref.Text.AsDecimal() / 100, txtRate3Ref.Text.AsDecimal() / 100, txtRate4Ref.Text.AsDecimal() / 100, txtRate1.Text.AsDecimal() / 100, txtRate2.Text.AsDecimal() / 100, txtRate3.Text.AsDecimal() / 100, txtRate4.Text.AsDecimal() / 100); if (dt42011.Rows.Count == 0) { MessageDisplay.Info(txtSDate.Text + "," + rptId + '-' + rptName + ",無任何資料!"); lblProcessing.Visible = false; return(ResultStatus.Fail); } dt42011.Sort("APDK_KIND_GRP2, APDK_KIND_LEVEL, MGR3_KIND_ID"); //複製檔案 file = PbFunc.wf_copy_file(rptId, rptId); if (file == "") { return(ResultStatus.Fail); } //開啟檔案 Workbook workbook = new Workbook(); workbook.LoadDocument(file); //切換Sheet Worksheet ws = workbook.Worksheets[0]; ws.Cells[0, 15].Value = txtSDate.DateTimeValue.Year + "年" + txtSDate.DateTimeValue.Month + "月" + txtSDate.DateTimeValue.Day + "日"; //表1 ShowMsg(rptId + '-' + rptName + " 轉檔中..."); int minusRow; minusRow = wf_42011_1(ws, dt42011); minusRow = wf_42011_2(minusRow, ws, dt42011); minusRow = wf_42011_3(minusRow, ws, dt42011); //存檔 ws.ScrollToRow(0); workbook.SaveDocument(file); ShowMsg("轉檔成功"); } catch (Exception ex) { ShowMsg("轉檔錯誤"); MessageDisplay.Error("輸出錯誤"); throw ex; } finally { this.Cursor = Cursors.Arrow; this.Refresh(); Thread.Sleep(5); } return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall poke) { gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dt = (DataTable)gcMain.DataSource; DataTable dtChange = dt.GetChanges(); DataTable dtDeleteChange = dt.GetChanges(DataRowState.Deleted); int getDeleteCount = dtDeleteChange != null ? dtDeleteChange.Rows.Count : 0; //存檔前檢查 if (getDeleteCount == 0 && dtChange != null)//無法經由資料列存取已刪除的資料列資訊。 { // 寫入DB //轉換原資料表型態 DataTable insertData = dt; DataTable data = dao20231.ListApdkData().Clone();//dw_1.reset() for (int k = 0; k < insertData.Rows.Count; k++) { DataRow insertDr = insertData.Rows[k]; data.Rows.Add(data.NewRow()); foreach (DataColumn col in insertData.Columns) { DataRow dr = data.Rows[k]; //APDK_BEGIN_DATE String 轉 Date if (col.ColumnName == "APDK_BEGIN_DATE") { DateTime dateTime; if (!DateTime.TryParse(insertDr["APDK_BEGIN_DATE"].ToString(), out dateTime)) { MessageDisplay.Error(insertDr["APDK_BEGIN_DATE"].ToString() + "日期格式錯誤!"); SetFocused(insertData, insertDr, "APDK_BEGIN_DATE"); return(ResultStatus.FailButNext); } dr[col.ColumnName] = insertDr[col.ColumnName].AsDateTime("yyyy/MM/dd"); continue; } //檢查該欄位是否填寫資料 同時確認gvMain.Columns[col.ColumnName]是否有這欄位 if ((insertDr[col.ColumnName] == DBNull.Value || string.IsNullOrEmpty(insertDr[col.ColumnName].ToString())) && gvMain.Columns[col.ColumnName] != null) { MessageDisplay.Warning($"[{gvMain.Columns[col.ColumnName].Caption}]資料未填寫完成,請確認!!"); SetFocused(insertData, insertDr, col.ColumnName); return(ResultStatus.FailButNext); } dr[col.ColumnName] = insertDr[col.ColumnName]; } //foreach (DataColumn col in insertData.Columns) } //for (int k = 0; k < insertData.Rows.Count; k++ //填補剩餘必填欄位 foreach (DataRow dr in data.Rows) { string kindidsub2 = dr["APDK_KIND_ID"].AsString().SubStr(0, 2); dr["APDK_KIND_ID_STO"] = kindidsub2; dr["APDK_QUOTE_CODE"] = "Y"; dr["APDK_KIND_ID2"] = kindidsub2; dr["APDK_KIND_ID_OUT"] = dr["APDK_KIND_ID"].AsString(); dr["APDK_EXPIRY_TYPE"] = "S"; dr["APDK_NAME_OUT"] = dr["APDK_NAME"].AsString(); dr["APDK_MARKET_CODE"] = "0"; dr["APDK_KIND_LEVEL"] = dr["APDK_REMARK"].AsString() == "M" ? 6 : 1; } if (dtChange != null) { try { //儲存至DB ResultData myResultData = dao20231.UpdateAPDK(data); } catch (Exception ex) { WriteLog(ex); } //存檔完列印結果 ReportHelper ReportHelper = new ReportHelper(gcMain, "20231", "[20231] 部位限制個股類標的轉入-新增個股契約基本資料"); Print(ReportHelper); } else { MessageBox.Show("沒有變更資料,不需要存檔!", "注意", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } MessageDisplay.Info(MessageDisplay.MSG_OK); return(ResultStatus.Success); }
/// <summary> /// 按下[匯出]按鈕時 /// </summary> /// <returns></returns> protected override ResultStatus Export() { #region 輸入&日期檢核 (exportbefore) if (string.Compare(txtStartMonth.Text, txtEndMonth.Text) > 0) { MessageDisplay.Error("月份起始年月不可小於迄止年月!", GlobalInfo.ErrorText); return(ResultStatus.Fail); } #endregion //0. ready panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "轉檔中..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); //0.1 將畫面資訊做些轉換 string startNo = cbxFcmStartNo.EditValue.AsString(""); string endNo = cbxFcmEndNo.EditValue.AsString(""); //1.檢查 //1.1期貨商後面號碼不能小於前面號碼 //ken,注意,期貨商代號第一碼為英文,如果要比較字串大小,則要使用string.Compare if (startNo.Length > 0) { if (endNo.Length > 0) { if (startNo.CompareTo(endNo) > 0) { MessageDisplay.Warning("造市者代號起始不可大於迄止", GlobalInfo.WarningText); cbxFcmStartNo.Focus(); panFilter.Enabled = true; labMsg.Text = " "; this.Cursor = Cursors.Arrow; this.Refresh(); Thread.Sleep(5); return(ResultStatus.Fail); } } } //2.get data DataTable dt; if (rgpType.SelectedIndex == 0)//依照期貨商別 { dt = dao55050.ListAll(txtStartMonth.FormatValue, txtEndMonth.FormatValue, startNo, endNo); } else//依照商品別 { dt = dao55050.ListAll2(txtStartMonth.FormatValue, txtEndMonth.FormatValue, startNo, endNo); } if (dt.Rows.Count <= 0) { MessageDisplay.Info(string.Format("{0},{1},無任何資料!", txtStartMonth.Text + "~" + txtEndMonth.Text, this.Text), GlobalInfo.ResultText); panFilter.Enabled = true; labMsg.Text = " "; this.Cursor = Cursors.Arrow; this.Refresh(); Thread.Sleep(5); return(ResultStatus.Fail); } try { //3.開始轉出資料 panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "訊息:資料轉出中........"; //3.1 copy template xls to target path string excelDestinationPath = PbFunc.wf_copy_file(_ProgramID, _ProgramID); //3.2 open xls Workbook workbook = new Workbook(); workbook.LoadDocument(excelDestinationPath); int sheetNo = rgpType.SelectedIndex; Worksheet worksheet = workbook.Worksheets[sheetNo]; //3.3寫入檔頭 worksheet.Cells[3, 0].Value += System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); worksheet.Cells[3, 3].Value += txtStartMonth.Text.Replace("/", ""); worksheet.Cells[3, 6].Value += txtEndMonth.Text.Replace("/", ""); //ken,沒撈出此資訊,不用顯示 worksheet.Cells[3, 9].Value = "資料更新時間 : " + dt.Rows[0]["FEETRD_UPD_TIME"].AsDateTime(System.DateTime.Now).ToString("yyyy/MM/dd HH:mm:ss"); //3.4寫入明細 //ken,預先做好一堆空白行數,但是如果筆數超過預設空白行數,會把最後的統計那行覆蓋掉 int rowIndex = 7; //起始row index position int pos = 0; int rowTotalCount = rowIndex + (rgpType.SelectedIndex == 0 ? 300 : 3500); //總行數(包含空白),每個範本的預設空白行都不一樣 foreach (DataRow row in dt.Rows) { if (pos % 20 == 0) { labMsg.Text = string.Format("資料轉出中......{0} / {1}", pos, dt.Rows.Count); this.Refresh(); //Application.DoEvents(); } if (rgpType.SelectedIndex == 0) { //依照期貨商別 worksheet.Cells[rowIndex, 0].SetValue(row["feetrd_fcm_no"]); //期貨商代號 worksheet.Cells[rowIndex, 1].SetValue(row["brk_abbr_name"]); //期貨商名稱 worksheet.Cells[rowIndex, 2].SetValue(row["feetrd_ar"]); //交易經手費--應收 worksheet.Cells[rowIndex, 3].SetValue(row["feetrd_disc_amt"]); //交易經手費--折減 worksheet.Cells[rowIndex, 4].SetValue(row["feetrd_rec_amt"]); //交易經手費--實收 worksheet.Cells[rowIndex, 5].SetValue(row["feetdcc_ar"]); //結算服務費--應收 worksheet.Cells[rowIndex, 6].SetValue(row["feetdcc_disc_amt"]); //結算服務費--折減 worksheet.Cells[rowIndex, 7].SetValue(row["feetdcc_rec_amt"]); //結算服務費--實收 } else { //依照商品別 worksheet.Cells[rowIndex, 0].SetValue(row["feetrd_fcm_no"]); //期貨商代號 worksheet.Cells[rowIndex, 1].SetValue(row["brk_abbr_name"]); //期貨商名稱 worksheet.Cells[rowIndex, 2].SetValue(row["feetrd_kind_id"]); //商品名稱 worksheet.Cells[rowIndex, 3].SetValue(row["feetrd_ar"]); //交易經手費--應收 worksheet.Cells[rowIndex, 4].SetValue(row["feetrd_disc_amt"]); //交易經手費--折減 worksheet.Cells[rowIndex, 5].SetValue(row["feetrd_rec_amt"]); //交易經手費--實收 worksheet.Cells[rowIndex, 6].SetValue(row["feetdcc_ar"]); //結算服務費--應收 worksheet.Cells[rowIndex, 7].SetValue(row["feetdcc_disc_amt"]); //結算服務費--折減 worksheet.Cells[rowIndex, 8].SetValue(row["feetdcc_rec_amt"]); //結算服務費--實收 }//if(rgpType.SelectedIndex == 0) { rowIndex++; pos++; }//foreach (DataRow row in dt.Rows) { //刪除空白列 if (rowIndex <= rowTotalCount) { worksheet.Rows.Remove(rowIndex, rowTotalCount - rowIndex); } worksheet.Range["A1"].Select(); worksheet.ScrollToRow(0); //存檔 workbook.SaveDocument(excelDestinationPath); return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }
protected override ResultStatus Save(PokeBall poke) { gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dt = (DataTable)gcMain.DataSource; DataTable dtChange = dt.GetChanges(); DataTable dtAdd = dt.GetChanges(DataRowState.Added); DataTable dtDeleteChange = dt.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange != null) { //更新變動日期與使用者ID foreach (DataRow dr in dt.Rows) { if (dr.RowState == DataRowState.Modified) { dr["PLS4_W_USER_ID"] = GlobalInfo.USER_ID; dr["PLS4_W_TIME"] = DateTime.Now; dr["PLS4_PDK_YMD"] = _IsPdkYMD; } if (dr.RowState == DataRowState.Added) { dr["PLS4_W_USER_ID"] = GlobalInfo.USER_ID; dr["PLS4_W_TIME"] = DateTime.Now; dr["PLS4_PDK_YMD"] = _IsPdkYMD; if (string.IsNullOrEmpty(dr["PLS4_SID"].AsString()) || string.IsNullOrEmpty(dr["PLS4_KIND_ID2"].AsString()) || string.IsNullOrEmpty(dr["PLS4_PID"].AsString())) { MessageDisplay.Info("資料尚未填寫完成!"); return(ResultStatus.FailButNext); } } if (dr.RowState == DataRowState.Deleted) { continue; } } try { // 寫入DB ResultData myResultData = dao20231.UpdatePLS4(dt); //產出txt檔案 Common.Helper.ExportHelper.ToText(dt, Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, "20231.txt")); } catch (Exception ex) { WriteLog(ex); return(ResultStatus.Fail); } } return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall pokeBall) { int printStep = 0; try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } DialogResult liRtn; int pos = -1; foreach (DataRow dr in dtChange.Rows) { pos++; if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified) { dr["CPR_W_TIME"] = DateTime.Now; dr["CPR_W_USER_ID"] = GlobalInfo.USER_ID; dr["CPR_DATA_NUM"] = 0; //隱藏欄位賦值 if (dr["CPR_PRICE_RISK_RATE"] == DBNull.Value) { string kind = dr["CPR_KIND_ID"].AsString(); liRtn = MessageDisplay.Choose(string.Format("{0}最小風險價格係數欄位為空白,請確認是否為已下市契約", kind), MessageBoxDefaultButton.Button2, GlobalInfo.QuestionText); if (liRtn == DialogResult.No) { return(ResultStatus.Fail); } else { dr["CPR_PRICE_RISK_RATE"] = DBNull.Value; } } gvMain.SetRowCellValue(pos, "CPR_W_TIME", DateTime.Now); gvMain.SetRowCellValue(pos, "CPR_W_USER_ID", GlobalInfo.USER_ID); gvMain.UpdateCurrentRow(); } } //foreach (DataRow dr in dtCurrent.Rows) //dtChange = dtChange.GetChanges(); //GridHelper.SetCommonGrid(gvMain); //gvMain.BestFitColumns(); printStep = 1; //跑儲存前確認單 CheckPrint(gcMain, dtChange, printStep); liRtn = MessageDisplay.Choose("已列印確認單,點選確認進行儲存資料", MessageBoxDefaultButton.Button2, GlobalInfo.QuestionText); if (liRtn == DialogResult.No) { return(ResultStatus.Fail); } else { ResultData result = new HCPR().UpdateData(dtChange); if (result.Status == ResultStatus.Fail) { MessageDisplay.Error("儲存失敗", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } printStep = 2; //儲存後列印已確認單 CheckPrint(gcMain, dtChange, printStep); } } catch (Exception ex) { MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); WriteLog(ex, "", false); return(ResultStatus.FailButNext); } finally { DataTable dtAll = dao49010.GetDataList(); DataTable dt = dtAll.Clone(); gcMain.DataSource = dt; gvMain.AppearancePrint.BandPanel.Options.UseTextOptions = true; gvMain.AppearancePrint.BandPanel.TextOptions.WordWrap = WordWrap.Wrap; gvMain.AppearancePrint.BandPanel.Font = new Font("Microsoft YaHei", 11); gvMain.AppearancePrint.Row.Font = new Font("Microsoft YaHei", 11); gvMain.OptionsPrint.AllowMultilineHeaders = true; gvMain.AppearancePrint.GroupRow.Font = new Font("Microsoft YaHei", 11); gvMain.BestFitColumns(); GridHelper.SetCommonGrid(gvMain); gridBand9.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap; gridBand9.Caption = "(輸入方式:如3.5%,則輸入0.035)"; gvMain.Columns["CPR_PROD_SUBTYPE"].ColumnEdit = lupProdSubtype; gvMain.Columns["CPR_KIND_ID"].ColumnEdit = lupKindId; //製作連動下拉選單(觸發事件) gvMain.ShownEditor += gvMain_ShownEditor; lupProdSubtype.EditValueChanged += lupProdSubtype_EditValueChanged; //gcMain.Visible = true; gcMain.Focus(); _ToolBtnPrintAll.Enabled = false;//列印 this.Refresh(); } gcMain.Visible = false; return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall poke) { try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } dtChange = dtCurrent.GetChanges(); string ls_dw_name, ls_date; systemType = ""; if (gbMarket.EditValue.AsString() == "rbMarket1") { ls_dw_name = ""; if (gbType.EditValue.AsString() == "rbTypeFut") { ls_dw_name += "_fut"; ls_date = PbFunc.f_ocf_date(0, "futAH"); systemType = "(期貨夜盤)"; } else { ls_dw_name += "_opt"; ls_date = PbFunc.f_ocf_date(0, "optAH"); systemType = "(選擇權夜盤)"; } ls_dw_name += "_AH"; } else { ls_dw_name = ""; if (gbType.EditValue.AsString() == "rbTypeFut") { ls_dw_name += "_fut"; ls_date = PbFunc.f_ocf_date(0, "fut"); systemType = "(期貨一般)"; } else { ls_dw_name += "_opt"; ls_date = PbFunc.f_ocf_date(0, "opt"); systemType = "(選擇權一般)"; } } ResultData result = dao51070.UpdateData(dtChange, ls_dw_name); if (result.Status == ResultStatus.Fail) { return(ResultStatus.Fail); } Print(_ReportHelper); //AfterSaveForPrint(gcMain , dtChange , systemType); } catch (Exception ex) { WriteLog(ex); } return(ResultStatus.Success); }
/// <summary> /// 寫log to db (當logType=Error或資料庫連線失敗,會額外將錯誤訊息寫到檔案) /// </summary> /// <param name="msg">最後儲存的長度為100字元</param> /// <param name="logType">基本logType可定義為 Info/Operation/Error</param> /// <param name="operationType"> /// logType=Info,此參數才有效(I = change data, E = export, R = query, P = print, X = execute) /// </param> /// <param name="showMsg">true=顯示錯誤訊息,false=不顯示</param> public void WriteLog(string msg, string logType = "Info", string operationType = " ", bool showMsg = false, bool isNeedWriteFile = false) { //bool isNeedWriteFile = false; string dbErrorMsg = ""; //1.write log to db //ken,先把WriteLog集中,之後可根據不同的logType,存放不同的TABLE或檔案 //基本logType可定義為 info/operation/error //logf_job_type value: I = change data, E = export, R = query, P = print, X = execute try { switch (logType) { case ("Info"): operationType = "A"; break; case ("Error"): operationType = "Z"; isNeedWriteFile = true; break; } //LOGF_KEY_DATA長度要取前100字元,但是logf.LOGF_KEY_DATA型態為VARCHAR2 (100 Byte),如果有中文會算2byte... string msgC = "[C#]" + msg; new LOGF().Insert(GlobalInfo.USER_ID, _ProgramID, msgC.SubStr(0, 50), operationType); } catch (Exception ex2) { // write log to db failed , ready write file to local isNeedWriteFile = true; dbErrorMsg = ex2.ToString(); MessageDisplay.Error("資料庫連線發生錯誤,先將錯誤訊息寫到檔案"); }//try { //2.write file to local if (isNeedWriteFile) { try { string filename = "log_" + DateTime.Now.ToString("yyyyMMdd") + ".log"; string filepath = Path.Combine(Application.StartupPath, "Log", DateTime.Today.ToString("yyyyMM")); Directory.CreateDirectory(filepath); filepath = Path.Combine(filepath, filename); using (StreamWriter sw = File.AppendText(filepath)) { sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("=============================="); sw.WriteLine("datetime=" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); sw.WriteLine("userId=" + GlobalInfo.USER_ID); sw.WriteLine("txnId=" + _ProgramID); sw.WriteLine("logType=" + logType); sw.WriteLine("operationType=" + operationType); sw.Write("msg=" + msg); sw.WriteLine(""); if (dbErrorMsg != "") { sw.Write("dbErrorMsg=" + dbErrorMsg); } }//using (StreamWriter sw = File.AppendText(filepath)) { } catch (Exception fileEx) { MessageDisplay.Error("將log寫入檔案發生錯誤,請聯絡管理員" + Environment.NewLine + "msg=" + fileEx.Message); return; } }//if (isNeedWriteFile) { //3.show message to UI (ken,這裡主要處理一般的訊息,Error的錯誤訊息由另外傳入Exception參數的那個來發比較詳盡) if (showMsg) { switch (logType) { case ("Operation"): MessageDisplay.Normal(msg); break; case ("Info"): MessageDisplay.Warning(msg); break; case ("Error"): MessageDisplay.Error(msg); break; } }//if (showMsg) { }
protected override ResultStatus Export() { string flowStepDesc = "1.開始轉出資料"; try { //1.開始轉出資料 panFilter.Enabled = false; gcMsg.DataSource = null; gcMsg.Refresh(); gcMsg.Visible = true; labMsg.Visible = true; labMsg.Text = "訊息:資料轉出中........"; this.Refresh(); //1.1 ready some value DateTime tradeDate = txtSDate.DateTimeValue; //當日 DateTime lastTradeDate = ai2.GetLastDate(tradeDate, "D", "TXF%", "%"); //找到前一日期 bool haveTradeTxw = amif.haveTradeTxw(tradeDate); //判斷當日有無TXW decimal closePrice = amif.GetClosePrice(tradeDate); //現貨收盤指數 if (closePrice == 0) { closePrice = new AMIFU().GetClosePrice(tradeDate); } if (closePrice == 0) { MessageDisplay.Error("讀取現貨收盤指數無資料,請確認20110作業中有今天資料!", GlobalInfo.ErrorText); return(ResultStatus.Fail); } //1.2 copy template xls to target path //string tempOutputDate = (ddlType.Text == "全部收盤" ? "全部收盤" : "16時15分收盤");//ken,檔名不能有冒號,所以無法直接用下拉選單text string tempOutputDate = "全部收盤"; string targetFileName = string.Format("{0}新版行情表({1}).xlsx", tradeDate.ToString("yyyyMMdd"), tempOutputDate); //string reportId = "30055_" + (ddlType.ItemIndex + 1).ToString();//後面還會用到 string reportId = "30055_2"; string excelDestinationPath = wf_copy_file(reportId, targetFileName); if (excelDestinationPath == "") { return(ResultStatus.Fail); //當copy file發生錯誤,直接離開(這裡檔案名稱會重複,所以容易造成檔案開始時無法move造成失敗) } //1.3 open excel Workbook workbook = new Workbook(); workbook.LoadDocument(excelDestinationPath); Worksheet ws = workbook.Worksheets[0]; flag = 0; //2.1 今日台指期收盤指數 flowStepDesc = "2.1 今日台指期收盤指數"; //if (!wf_30055_a(ws , tradeDate , closePrice)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_a(ws, tradeDate, closePrice); } //2.2 主要指數期貨商品行情表 flowStepDesc = "2.2 主要指數期貨商品行情表"; //if (!wf_30055_b(ws , tradeDate , lastTradeDate)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_b(ws, tradeDate, lastTradeDate); } //2.3 台指選擇權(近月及一週到期)主要序列行情表 flowStepDesc = "2.3 台指選擇權(近月及一週到期)主要序列行情表"; //if (!wf_30055_tx(ws , tradeDate , haveTradeTxw , closePrice)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_tx(ws, tradeDate, haveTradeTxw, closePrice); } //2.4 主要指數期貨大額交易人未平倉部位一覽表 (三大法人=外商/投信/自營商) //2.4 台指選擇權十大交易人未平倉部位一覽表 (三大法人=外商/投信/自營商) flowStepDesc = "2.4 主要指數期貨大額交易人未平倉部位一覽表 (三大法人)"; //if (!wf_30055_three_keep(ws , tradeDate , lastTradeDate)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_three_keep(ws, tradeDate, lastTradeDate); } //2.5 主要指數期貨大額交易人未平倉部位一覽表 (大額交易人=十大交易人(近月)+十大交易人(所有月份)) //2.5 台指選擇權十大交易人未平倉部位一覽表 (大額交易人=十大交易人(近月)+十大交易人(所有月份)) flowStepDesc = "2.5 主要指數期貨大額交易人未平倉部位一覽表 (大額交易人)"; //if (!wf_30055_big_keep(ws , tradeDate , lastTradeDate)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_big_keep(ws, tradeDate, lastTradeDate); } //2.6 主要股票(不含ETF)期貨行情表(依未平倉量) = STF //2.6 主要ETF期貨行情表(依未平倉量)= ETF flowStepDesc = "2.6 主要股票 期貨/ETF 商品行情表(依未平倉量)"; //if (!wf_30055_stf(ws , tradeDate , lastTradeDate , "STF")) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_stf(ws, tradeDate, lastTradeDate, "STF"); } //if (!wf_30055_stf(ws , tradeDate , lastTradeDate , "ETF")) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_stf(ws, tradeDate, lastTradeDate, "ETF"); } //2.7 主要ETF選擇權(近月價平)序列行情表 flowStepDesc = "2.7 主要ETF選擇權(近月價平)序列行情表"; //if (!wf_30055_etc(ws , tradeDate , "ETC")) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_etc(ws, tradeDate, "ETC"); } //2.8 匯率期貨行情表 flowStepDesc = "2.8 匯率期貨行情表"; //if (!wf_30055_prod_subtype(ws , tradeDate , "E")) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_prod_subtype(ws, tradeDate, "E"); } //2.9 人民幣匯率選擇權主要序列行情表(依成交量) RHF,RTF //ken,template是隱藏的grid,嗯 flowStepDesc = "2.9 人民幣匯率選擇權主要序列行情表(依成交量) RHF,RTF"; //if (!wf_30055_rho(ws , tradeDate)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_rho(ws, tradeDate); } //2.10 商品期貨行情表 GDF,TGF,BRF flowStepDesc = "2.10 商品期貨行情表 (美元黃金期貨/臺幣黃金期貨/布蘭特原油期貨)GDF,TGF,BRF"; //if (!wf_30055_prod_subtype(ws , tradeDate , "C")) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_prod_subtype(ws, tradeDate, "C"); } //2.11 刪除列 flowStepDesc = "2.11 刪除列"; wf_del_row(ws, haveTradeTxw); //2.12 股票期貨週 flowStepDesc = "2.12 股票期貨週"; ws = workbook.Worksheets[1];//切換到第二個sheet //if (!wf_30055_weekly(ws , tradeDate)) return showEmailMsg(cbxNews.Checked); if (is_chk == "Y") { wf_30055_weekly(ws, tradeDate); } //2.13 先存檔 if (flag <= 0) { File.Delete(excelDestinationPath); } else { flowStepDesc = "2.13 Save file"; ws = workbook.Worksheets[0]; ws.Range["A1"].Select(); ws.ScrollToRow(0); workbook.SaveDocument(excelDestinationPath); } //2.14 email news flowStepDesc = "2.14 email news"; if (cbxNews.Checked) { DataTable dtTxemail = new TXEMAIL().ListData(reportId, 1); if (dtTxemail.Rows.Count != 0) { string TXEMAIL_SENDER = dtTxemail.Rows[0]["TXEMAIL_SENDER"].AsString(); string TXEMAIL_RECIPIENTS = dtTxemail.Rows[0]["TXEMAIL_RECIPIENTS"].AsString(); string TXEMAIL_CC = dtTxemail.Rows[0]["TXEMAIL_CC"].AsString(); string TXEMAIL_TITLE = dtTxemail.Rows[0]["TXEMAIL_TITLE"].AsString(); string TXEMAIL_TEXT = dtTxemail.Rows[0]["TXEMAIL_TEXT"].AsString(); try { TXEMAIL_TITLE = txtSDate.DateTimeValue.ToString("yyyyMMdd") + TXEMAIL_TITLE; MailHelper.SendEmail(TXEMAIL_SENDER, TXEMAIL_RECIPIENTS, TXEMAIL_CC, TXEMAIL_TITLE, TXEMAIL_TEXT, excelDestinationPath); } catch (Exception ex) { is_chk = "E"; MessageDisplay.Warning("產出檔案有異常資訊,請通知系統負責人!"); return(ResultStatus.Fail); } } } #region //3.產生TJF檔案 //3.1複製檔案 targetFileName = string.Format("{0}_TJF.xlsx", tradeDate.ToString("yyyy.MM.dd")); reportId = "30055_TJF"; excelDestinationPath = wf_copy_file(reportId, targetFileName); workbook.LoadDocument(excelDestinationPath); ws = workbook.Worksheets[0]; //3.2 //if (!wf_30055_tjf(ws , tradeDate , lastTradeDate)) return showEmailMsg(cbxNews.Checked); bool result = false; if (is_chk == "Y") { result = wf_30055_tjf(ws, tradeDate, lastTradeDate); } //3.3 儲存及關閉檔案 if (!result) { File.Delete(excelDestinationPath); } else { workbook.SaveDocument(excelDestinationPath); } //3.4 email if (cbxTJF.Checked) { string txnId = "30055"; DataTable dtTxemail = new TXEMAIL().ListData(txnId, 1); if (dtTxemail.Rows.Count != 0) { string TXEMAIL_SENDER = dtTxemail.Rows[0]["TXEMAIL_SENDER"].AsString(); string TXEMAIL_RECIPIENTS = dtTxemail.Rows[0]["TXEMAIL_RECIPIENTS"].AsString(); string TXEMAIL_CC = dtTxemail.Rows[0]["TXEMAIL_CC"].AsString(); string TXEMAIL_TITLE = dtTxemail.Rows[0]["TXEMAIL_TITLE"].AsString(); string TXEMAIL_TEXT = dtTxemail.Rows[0]["TXEMAIL_TEXT"].AsString(); TXEMAIL_TITLE = txtSDate.DateTimeValue.ToString("yyyyMMdd") + TXEMAIL_TITLE; try { MailHelper.SendEmail(TXEMAIL_SENDER, TXEMAIL_RECIPIENTS, TXEMAIL_CC, TXEMAIL_TITLE, TXEMAIL_TEXT, excelDestinationPath); } catch (Exception ex) { is_chk = "E"; MessageDisplay.Warning("產出檔案有異常資訊,請通知系統負責人!"); return(ResultStatus.Fail); } } } #endregion return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex, flowStepDesc); } finally { this.Cursor = Cursors.Arrow; panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Refresh(); Thread.Sleep(5); } return(ResultStatus.Fail); }
protected override ResultStatus Retrieve() { try { //清空Grid gcMain.DataSource = null; //讀取資料 dao40070 = new D40070(); DataTable dt40070 = dao40070.d_40070_scrn(txtSDate.DateTimeValue.ToString("yyyyMMdd"), ddlModel.EditValue.AsString()); if (dt40070.Rows.Count == 0) { MessageDisplay.Warning("無任何資料!"); return(ResultStatus.Fail); } //排序 dt40070 = dt40070.Sort("OSW_GRP, SEQ_NO, PROD_TYPE, KIND_ID"); //複製 //dw_1.RowsCopy(1, dw_1.rowcount(), primary!, ids_tmp, 1, primary!) dtTemp = dt40070.Copy(); //過濾 DataView dv = dt40070.AsDataView(); dv.RowFilter = " ab_type in ('-','A')"; DataTable dtFiltered = dv.ToTable(); gcMain.DataSource = dtFiltered; gcMain.Refresh(); //預設展開群組 gvMain.ExpandAllGroups(); //設定三個Group的生效日期 string validDateG1, validDateG5; int found; //Group1 found = dtFiltered.Rows.IndexOf(dtFiltered.Select("osw_grp='1' and issue_begin_ymd is not null ").FirstOrDefault()); if (found > -1) { txtDateG1.DateTimeValue = dtFiltered.Rows[found]["ISSUE_BEGIN_YMD"].AsDateTime("yyyyMMdd"); } else { txtDateG1.DateTimeValue = PbFunc.f_get_ocf_next_n_day(txtSDate.DateTimeValue, 1); } validDateG1 = txtDateG1.Text; //Group2 found = dtFiltered.Rows.IndexOf(dtFiltered.Select("osw_grp='5' and issue_begin_ymd is not null ").FirstOrDefault()); if (found > -1) { txtDateG5.DateTimeValue = dtFiltered.Rows[found]["ISSUE_BEGIN_YMD"].AsDateTime("yyyyMMdd"); } else { txtDateG5.DateTimeValue = PbFunc.f_get_ocf_next_n_day(txtSDate.DateTimeValue, 2); } validDateG5 = txtDateG5.Text; //Group3 //found = dtFiltered.Rows.IndexOf(dtFiltered.Select("osw_grp='7' and issue_begin_ymd is not null ").FirstOrDefault()); //if (found > -1) { // txtDateG7.DateTimeValue = dtFiltered.Rows[found]["ISSUE_BEGIN_YMD"].AsDateTime("yyyyMMdd"); //} else { // txtDateG7.DateTimeValue = PbFunc.f_get_ocf_next_n_day(txtSDate.DateTimeValue , 2); //} //validDateG7 = txtDateG7.Text; } catch (Exception ex) { MessageDisplay.Error("讀取錯誤"); throw ex; } return(ResultStatus.Success); }
/// <summary> /// 顯示明細 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDetail_Click(object sender, EventArgs e) { //重設gridview gcDetail.DataSource = null; int row, col, found; string prodType, kindID, stockID, issueBeginYmd, ymd, paramKey, abroad; string opType, colname; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtGrid = dao40071.d_40071_detail(); //ids_tmp 空的,拿來重置gcDetail dtGrid.Columns["ADJ_TYPE"].ColumnName = "OP_TYPE"; dtGrid.Columns["DATA_YMD"].ColumnName = "YMD"; //dtTemp.Columns["CM_A * NVL(MGT6_REF_XXX,1)"].ColumnName = "CM_A"; 沒成功撈到資料的話欄位名稱不會變? DataTable dtMGD2 = dao40072.d_40072(); //ids_mgd2 空的 prodType = "S"; paramKey = "ST%"; abroad = "%"; kindID = "%"; this.ymd = txtSDate.DateTimeValue.ToString("yyyyMMdd"); issueBeginYmd = txtEffectiveSDate.DateTimeValue.ToString("yyyyMMdd"); //產生明細檔 DataTable dtInput = (DataTable)gcMain.DataSource; if (dtInput.Columns[dtInput.Columns.Count - 1].ColumnName == "CPSORT") { dtInput.Columns.Remove(dtInput.Columns["CPSORT"]); //把拿來排序的運算欄位刪掉 } foreach (DataRow drInput in dtInput.Rows) { opType = "I"; stockID = drInput["STOCK_ID"].ToString(); dtMGD2 = dao40072.d_40072(this.ymd, isAdjType, stockID); if (dtMGD2.Rows.Count > 0) { DialogResult result = MessageDisplay.Choose(stockID + "資料已存在,是否重新產製資料,若不重產資料,請按「預覽」!"); if (result == DialogResult.No) { return; } opType = "U"; } for (col = 0; col < dtInput.Columns.Count; col++) { colname = dtInput.Columns[col].ColumnName; //級距為從其高,保證金B值可不填 if (drInput["M_LEVEL"].AsString() == "Z" && colname.IndexOf("_B") >= 0) { continue; } if (drInput[col] == DBNull.Value || drInput[col].ToString() == "") { MessageDisplay.Error("請確認資料是否輸入完成!"); return; } } stockID = stockID + "%"; //調整幅度=0 //這邊才去讀SP DataTable dtTemp = dao40071.d_40071_detail(this.ymd, prodType, paramKey, abroad, kindID, stockID, 0); dtTemp.Columns["ADJ_TYPE"].ColumnName = "OP_TYPE"; dtTemp.Columns["DATA_YMD"].ColumnName = "YMD"; if (dtTemp.Columns["CM_A*NVL(MGT6_REF_XXX,1)"] != null) { dtTemp.Columns["CM_A*NVL(MGT6_REF_XXX,1)"].ColumnName = "CM_A"; //沒撈到值的話欄位名稱不會變,若資料為個股類也不會變 } foreach (DataRow drTemp in dtTemp.Rows) { drTemp["ISSUE_BEGIN_YMD"] = issueBeginYmd; drTemp["YMD"] = this.ymd; drTemp["M_LEVEL"] = drInput["M_LEVEL"]; drTemp["CM_A"] = drInput["CM_A"]; drTemp["MM_A"] = drInput["MM_A"]; drTemp["IM_A"] = drInput["IM_A"]; if (drTemp["CM_B"] != DBNull.Value) { drTemp["CM_B"] = drInput["CM_B"]; } if (drTemp["MM_B"] != DBNull.Value) { drTemp["MM_B"] = drInput["MM_B"]; } if (drTemp["IM_B"] != DBNull.Value) { drTemp["IM_B"] = drInput["IM_B"]; } drTemp["ADJ_RSN"] = drInput["ADJ_RSN"]; drTemp["OP_TYPE"] = opType; } //將資料複製到明細表 //dtGrid = dtTemp.Clone(); foreach (DataRow drTemp in dtTemp.Rows) { dtGrid.ImportRow(drTemp); } dtGrid.AcceptChanges(); gcDetail.DataSource = dtGrid; }//foreach (DataRow drInput in dtInput.Rows) //sort("stock_id A prod_type A ") if (dtGrid.Rows.Count != 0) { dtGrid = dtGrid.AsEnumerable().OrderBy(x => x.Field <string>("STOCK_ID")) .ThenBy(x => x.Field <string>("PROD_TYPE")) .CopyToDataTable(); } gcDetail.DataSource = dtGrid; if (gvDetail.RowCount == 0) { MessageDisplay.Warning("無明細資料,請確認「交易日期」及「商品調整幅度」是否填寫正確!"); return; } }
/// <summary> /// 按下[匯出]按鈕時 /// </summary> /// <returns></returns> protected override ResultStatus Export() { #region 輸入&日期檢核 (exportbefore) if (string.Compare(txtStartMonth.Text, txtEndMonth.Text) > 0) { MessageDisplay.Error("月份起始年月不可小於迄止年月!", GlobalInfo.ErrorText); return(ResultStatus.Fail); } #endregion //0.將畫面資訊做些轉換 string startNo = cbxFcmStartNo.EditValue.AsString(""); string endNo = cbxFcmEndNo.EditValue.AsString(""); //1.檢查 //1.1期貨商後面號碼不能小於前面號碼 //ken,注意,期貨商代號第一碼為英文,如果要比較字串大小,則要使用string.Compare if (startNo.Length > 0) { if (endNo.Length > 0) { if (startNo.CompareTo(endNo) > 0) { MessageDisplay.Warning("造市者代號起始不可大於迄止", GlobalInfo.WarningText); cbxFcmStartNo.Focus(); return(ResultStatus.Fail); } } } //2.get data DataTable dt; if (rgpType.SelectedIndex == 0)//依照期貨商別 { dt = dao55020.ListAll(txtStartMonth.FormatValue, txtEndMonth.FormatValue, startNo, endNo, cbxProdType.EditValue.AsString()); } else//依照商品別 { dt = dao55020.ListAll2(txtStartMonth.FormatValue, txtEndMonth.FormatValue, startNo, endNo); } if (dt.Rows.Count <= 0) { MessageDisplay.Info(string.Format("{0},{1},無任何資料!", txtStartMonth.Text + "~" + txtEndMonth.Text, this.Text), GlobalInfo.ResultText); return(ResultStatus.Fail); } try { //3.開始轉出資料 panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "訊息:資料轉出中........"; //3.1 copy template xls to target path string excelDestinationPath = PbFunc.wf_copy_file(_ProgramID, _ProgramID); //3.2 open xls Workbook workbook = new Workbook(); workbook.LoadDocument(excelDestinationPath); int sheetNo = rgpType.SelectedIndex; Worksheet worksheet = workbook.Worksheets[sheetNo]; //3.3寫入檔頭 worksheet.Cells[3, 0].Value += DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); worksheet.Cells[3, 3].Value += txtStartMonth.Text.Replace("/", ""); worksheet.Cells[3, 5].Value += txtEndMonth.Text.Replace("/", ""); worksheet.Cells[3, 7].Value = "資料更新時間 : " + dt.Rows[0]["FEETRD_UPD_TIME"].AsDateTime(DateTime.Now).ToString("yyyy/MM/dd HH:mm:ss"); //3.4寫入明細 //ken,預先做好一堆空白行數,但是如果筆數超過預設空白行數,會把最後的統計那行覆蓋掉 int rowIndex = 7; //起始row index position int pos = 0; int rowTotalCount = rowIndex + (rgpType.SelectedIndex == 0 ? 3000 : 200); //總行數(包含空白) foreach (DataRow row in dt.Rows) { if (pos % 20 == 0) { labMsg.Text = string.Format("資料轉出中......{0} / {1}", pos, dt.Rows.Count); this.Refresh(); //Application.DoEvents(); } if (rgpType.SelectedIndex == 0) { //依照期貨商別 worksheet.Cells[rowIndex, 0].Value = row["feetrd_fcm_no"].AsString(); //期貨商代號 worksheet.Cells[rowIndex, 1].Value = row["brk_abbr_name"].AsString(); //期貨商名稱 //ken,商品名稱feetrd_kind_id不要用AsString,會把最前面的空白trim掉,excel總計有用到公式比對前面空白 worksheet.Cells[rowIndex, 2].Value = (!DBNull.Value.Equals(row["feetrd_kind_id"]) ? row["feetrd_kind_id"].ToString() : ""); //商品名稱 worksheet.Cells[rowIndex, 3].Value = row["feetrd_m_qnty"].AsDouble(); //成交口數 worksheet.Cells[rowIndex, 4].Value = row["feetrd_ar"].AsDecimal(); //應收交易經手費 worksheet.Cells[rowIndex, 5].Value = row["feetrd_mk_disc_amt"].AsDecimal(); //造市折減 worksheet.Cells[rowIndex, 6].Value = row["feetrd_oth_disc_amt"].AsDecimal(); //其他折減 worksheet.Cells[rowIndex, 8].Value = row["feetrd_rec_amt"].AsDecimal(); //金額 } else { //依照商品別 //ken,商品名稱feetrd_kind_id不要用AsString,會把最前面的空白trim掉,excel總計有用到公式比對前面空白 worksheet.Cells[rowIndex, 0].Value = (!DBNull.Value.Equals(row["feetrd_kind_id"]) ? row["feetrd_kind_id"].ToString() : ""); //商品名稱 worksheet.Cells[rowIndex, 1].Value = row["feetrd_m_qnty"].AsDouble(); //成交口數 worksheet.Cells[rowIndex, 2].Value = row["feetrd_ar"].AsDecimal(); //應收交易經手費 worksheet.Cells[rowIndex, 3].Value = row["feetrd_mk_disc_amt"].AsDecimal(); //造市折減 worksheet.Cells[rowIndex, 4].Value = row["feetrd_oth_disc_amt"].AsDecimal(); //其他折減 worksheet.Cells[rowIndex, 6].Value = row["feetrd_rec_amt"].AsDecimal(); //金額 } rowIndex++; pos++; }//foreach (DataRow row in dt.Rows) { //刪除空白列 if (rowIndex <= rowTotalCount) { worksheet.Rows.Remove(rowIndex, rowTotalCount - rowIndex); } worksheet.Range["A1"].Select(); worksheet.ScrollToRow(0); //存檔 workbook.SaveDocument(excelDestinationPath); if (FlagAdmin) { System.Diagnostics.Process.Start(excelDestinationPath); } return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { labMsg.Text = ""; labMsg.Visible = false; panFilter.Enabled = true; } return(ResultStatus.Fail); }
protected override ResultStatus Save(PokeBall pokeBall) { try { DataTable dtMainCur = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtMainChange = dtMainCur.GetChanges(); DataTable dtMainForAdd = dtMainCur.GetChanges(DataRowState.Added); DataTable dtMainForModified = dtMainCur.GetChanges(DataRowState.Modified); DataTable dtMainForDeleted = dtMainCur.GetChanges(DataRowState.Deleted); DataTable dtSubCur = (DataTable)gcSub.DataSource; gvSub.CloseEditor(); gvSub.UpdateCurrentRow(); DataTable dtSubChange = dtSubCur.GetChanges(); DataTable dtSubForAdd = dtSubCur.GetChanges(DataRowState.Added); DataTable dtSubForModified = dtSubCur.GetChanges(DataRowState.Modified); DataTable dtSubForDeleted = dtSubCur.GetChanges(DataRowState.Deleted); if (dtMainChange == null && dtSubChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } //若資料為null 用 Rows.Count 會造成exception //if (dtMainChange.Rows.Count == 0 && dtSubChange.Rows.Count == 0) { // MessageDisplay.Warning("沒有變更資料,不需要存檔!",GlobalInfo.WarningText); // return ResultStatus.Fail; //} if (dtMainChange != null) { foreach (DataRow drMain in dtMainCur.Rows) { if (drMain.RowState == DataRowState.Added || drMain.RowState == DataRowState.Modified) { drMain["RPTF_TXN_ID"] = _ProgramID; drMain["RPTF_TXD_ID"] = _ProgramID; drMain["RPTF_KEY"] = mainKey; } } dtMainChange = dtMainCur.GetChanges(); } if (dtSubChange != null) { foreach (DataRow drSub in dtSubCur.Rows) { if (drSub.RowState == DataRowState.Added || drSub.RowState == DataRowState.Modified) { drSub["RPTF_TXN_ID"] = _ProgramID; drSub["RPTF_TXD_ID"] = _ProgramID; drSub["RPTF_KEY"] = subKey; } } dtSubChange = dtSubCur.GetChanges(); } ResultData result = new ResultData(); if (dtMainChange != null && dtSubChange != null) { dtMainChange.Merge(dtSubChange); result = new RPTF().UpdateData(dtMainChange); } else if (dtMainChange != null && dtSubChange == null) { result = new RPTF().UpdateData(dtMainChange); } else { result = new RPTF().UpdateData(dtSubChange); } if (result.Status == ResultStatus.Fail) { return(ResultStatus.Fail); } } catch (Exception ex) { WriteLog(ex); } _IsPreventFlowPrint = true; //不要自動列印 return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall pokeBall) { try { #region ue_save_before gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); string stockID, ymd, kindID, adjTypeName, opType, dbname, stockIDCk; string issueBeginYmd, tradeYmd, mocfYmd, nextYmd, level, currencyType; int currRow, found, count, row, col, prodSeq; decimal ldblRate; DateTime ldtWTIME = DateTime.Now; DataTable dtGrid = (DataTable)gcMain.DataSource; found = dtGrid.Rows.IndexOf(dtGrid.Select("OP_TYPE <> ' '").FirstOrDefault()); if (found + dtDel.Rows.Count == -1) { MessageDisplay.Warning("沒有變更資料,不需要存檔!"); return(ResultStatus.FailButNext); } DataTable dtMGD2; //ids_mgd2 DataTable dtMGD2Log = dao40071.d_40071_log(); //ids_old dtMGD2Log.Clear(); //只取schema this.ymd = txtSDate.DateTimeValue.ToString("yyyyMMdd"); issueBeginYmd = this.ymd; dtMGD2 = dao40071.d_40071(this.ymd, isAdjType); foreach (DataRow dr in dtGrid.Rows) { if (dr.RowState == DataRowState.Deleted) { continue; } opType = dr["OP_TYPE"].ToString(); stockID = dr["STOCK_ID"].AsString(); kindID = dr["KIND_ID"].AsString(); level = dr["M_LEVEL"].AsString(); //檢查調整後級距為從其高且商品類別為選擇權時,是否有輸入保證金B值 if (level == "Z" && dr["PROD_TYPE"].AsString() == "O") { if (dr["CM_B"] == DBNull.Value || dr["MM_B"] == DBNull.Value || dr["IM_B"] == DBNull.Value) { MessageDisplay.Error(stockID + "," + kindID + "的保證金B值未輸入完成"); return(ResultStatus.FailButNext); } } //檢查有異動的資料 if (opType != " ") { //資料修改,將修改前舊資料寫入log if (opType == "U") { dtMGD2.Filter("mgd2_kind_id = '" + kindID + "'"); foreach (DataRow drU in dtMGD2.Rows) { currRow = dtMGD2Log.Rows.Count; dtMGD2Log.Rows.Add(); for (col = 0; col < dtMGD2.Columns.Count; col++) { //先取欄位名稱,因為兩張table欄位順序不一致 dbname = dtMGD2.Columns[col].ColumnName; if (dbname == "CPSORT") { continue; //這個欄位是拿來排序用的,故無需複製 } dtMGD2Log.Rows[currRow][dbname] = drU[col]; } dtMGD2Log.Rows[currRow]["MGD2_L_TYPE"] = "U"; dtMGD2Log.Rows[currRow]["MGD2_L_USER_ID"] = GlobalInfo.USER_ID; dtMGD2Log.Rows[currRow]["MGD2_L_TIME"] = ldtWTIME; } } /******************************************* * 檢查商品與類別是否符合 *******************************************/ prodSeq = dao40074.getProd(kindID, dr["PROD_SUBTYPE"].AsString()); if (prodSeq != dr["PROD_SEQ_NO"].AsInt()) { MessageDisplay.Error(kindID + "與商品類別不符,請確認"); return(ResultStatus.FailButNext); } /***************************************** * 檢查商品代號是否存在及相關資料是否正確 ******************************************/ DataTable dtCheck = dao40074.checkProd(kindID); if (dtCheck.Rows.Count == 0) { MessageDisplay.Error(kindID + "不存在,請重新設定商品代號"); return(ResultStatus.FailButNext); } count = dtCheck.Rows[0]["LI_COUNT"].AsInt(); currencyType = dtCheck.Rows[0]["LS_CURRENCY_TYPE"].AsString(); stockIDCk = dtCheck.Rows[0]["LS_STOCK_ID_CK"].AsString(); if (count == 0) { MessageDisplay.Error(kindID + "不存在,請重新設定商品代號"); return(ResultStatus.FailButNext); } else { if (dr["CURRENCY_TYPE"].AsString() != currencyType) { MessageDisplay.Error(kindID + "的幣別設定錯誤,請重新設定填寫"); return(ResultStatus.FailButNext); } if (dr["prod_subtype"].AsString() == "S" && stockID != stockIDCk) { MessageDisplay.Error(kindID + "的股票代號設定錯誤,請重新設定填寫"); return(ResultStatus.FailButNext); } } /****************************************** * 確認商品是否在同一交易日不同情境下設定過 ******************************************/ DataTable dtSet = dao40071.IsSetOnSameDay(kindID, this.ymd, isAdjType); if (dtSet.Rows.Count == 0) { MessageDisplay.Info("MGD2 " + kindID + " 無任何資料!"); return(ResultStatus.FailButNext); } count = dtSet.Rows[0]["LI_COUNT"].AsInt(); adjTypeName = dtSet.Rows[0]["LS_ADJ_TYPE_NAME"].AsString(); if (count > 0) { MessageDisplay.Error(kindID + ",交易日(" + this.ymd + ")在" + adjTypeName + "已有資料"); return(ResultStatus.FailButNext); } /********************************* * 確認商品是否在同一生效日區間設定過 * 生效起日若與生效迄日相同,不重疊 * ex: 10/11的至10/31一般交易時段結束止,10/30的從10/31一般交易時段結束後始>>應不重疊 *************************************/ dtSet = dao40071.IsSetInSameSession(kindID, this.ymd, issueBeginYmd); count = dtSet.Rows[0]["LI_COUNT"].AsInt(); adjTypeName = dtSet.Rows[0]["LS_ADJ_TYPE_NAME"].AsString(); tradeYmd = dtSet.Rows[0]["LS_TRADE_YMD"].AsString(); if (count > 0) { MessageDisplay.Error(kindID + "," + adjTypeName + ",交易日(" + tradeYmd + ")在同一生效日區間內已有資料"); return(ResultStatus.FailButNext); } } //if (ls_op_type != " ") } //foreach (DataRow dr in dtGrid.Rows) //把刪除的資料寫進log foreach (DataRow drDel in dtDel.Rows) { kindID = drDel["KIND_ID"].AsString(); dtMGD2.Filter("mgd2_kind_id = '" + kindID + "'"); foreach (DataRow drD in dtMGD2.Rows) { currRow = dtMGD2Log.Rows.Count; dtMGD2Log.Rows.Add(); for (col = 0; col < dtMGD2.Columns.Count; col++) { //先取欄位名稱,因為兩張table欄位順序不一致 dbname = dtMGD2.Columns[col].ColumnName; if (dbname == "CPSORT") { continue; //這個欄位是拿來排序用的,故無需複製 } dtMGD2Log.Rows[currRow][dbname] = drD[col]; } dtMGD2Log.Rows[currRow]["MGD2_L_TYPE"] = "D"; dtMGD2Log.Rows[currRow]["MGD2_L_USER_ID"] = GlobalInfo.USER_ID; dtMGD2Log.Rows[currRow]["MGD2_L_TIME"] = ldtWTIME; } } #endregion string prodType; DataTable dtTemp = dao40072.d_40072(); //ids_tmp foreach (DataRow dr in dtGrid.Rows) { if (dr.RowState == DataRowState.Deleted) { continue; } opType = dr["OP_TYPE"].ToString(); //只更新有異動的資料 if (opType != " ") { kindID = dr["KIND_ID"].AsString(); //stockID = dr["KIND_ID"].AsString(); stockID = dr["STOCK_ID"].ToString(); //刪除已存在資料 if (daoMGD2.DeleteMGD2(this.ymd, isAdjType, stockID, kindID) < 0) { MessageDisplay.Error("MGD2資料刪除失敗"); return(ResultStatus.FailButNext); } currRow = dtTemp.Rows.Count; prodType = dr["PROD_TYPE"].AsString(); dtTemp.Rows.Add(); dtTemp.Rows[currRow]["MGD2_YMD"] = this.ymd; dtTemp.Rows[currRow]["MGD2_PROD_TYPE"] = prodType; dtTemp.Rows[currRow]["MGD2_KIND_ID"] = kindID; dtTemp.Rows[currRow]["MGD2_STOCK_ID"] = stockID; dtTemp.Rows[currRow]["MGD2_ADJ_TYPE"] = isAdjType; dtTemp.Rows[currRow]["MGD2_ADJ_CODE"] = dr["ADJ_CODE"]; dtTemp.Rows[currRow]["MGD2_PUB_YMD"] = dr["PUB_YMD"]; dtTemp.Rows[currRow]["MGD2_ISSUE_BEGIN_YMD"] = issueBeginYmd; dtTemp.Rows[currRow]["MGD2_PROD_SUBTYPE"] = dr["PROD_SUBTYPE"].AsString(); dtTemp.Rows[currRow]["MGD2_PARAM_KEY"] = dr["PARAM_KEY"]; dtTemp.Rows[currRow]["MGD2_CUR_CM"] = 0; dtTemp.Rows[currRow]["MGD2_CUR_MM"] = 0; dtTemp.Rows[currRow]["MGD2_CUR_IM"] = 0; dtTemp.Rows[currRow]["MGD2_CUR_LEVEL"] = 0; dtTemp.Rows[currRow]["MGD2_CM"] = dr["CM_A"]; dtTemp.Rows[currRow]["MGD2_MM"] = dr["MM_A"]; dtTemp.Rows[currRow]["MGD2_IM"] = dr["IM_A"]; dtTemp.Rows[currRow]["MGD2_LEVEL"] = dr["M_LEVEL"]; dtTemp.Rows[currRow]["MGD2_CURRENCY_TYPE"] = dr["CURRENCY_TYPE"]; dtTemp.Rows[currRow]["MGD2_SEQ_NO"] = dr["SEQ_NO"]; dtTemp.Rows[currRow]["MGD2_OSW_GRP"] = dr["OSW_GRP"]; dtTemp.Rows[currRow]["MGD2_AMT_TYPE"] = dr["AMT_TYPE"]; dtTemp.Rows[currRow]["MGD2_W_TIME"] = ldtWTIME; dtTemp.Rows[currRow]["MGD2_W_USER_ID"] = GlobalInfo.USER_ID; /****************************** * AB TYTPE: -期貨 * A選擇權A值 * B選擇權B值 *******************************/ if (prodType == "F") { dtTemp.Rows[currRow]["MGD2_AB_TYPE"] = "-"; } else { dtTemp.Rows[currRow]["MGD2_AB_TYPE"] = "A"; //複製一筆一樣的,AB Type分開存 dtTemp.ImportRow(dtTemp.Rows[currRow]); //dtTemp.Rows.Add(dtTemp.Rows[ii_curr_row]);//會跳錯 currRow = dtTemp.Rows.Count - 1; dtTemp.Rows[currRow]["MGD2_AB_TYPE"] = "B"; dtTemp.Rows[currRow]["MGD2_CM"] = dr["CM_B"]; dtTemp.Rows[currRow]["MGD2_MM"] = dr["MM_B"]; dtTemp.Rows[currRow]["MGD2_IM"] = dr["IM_B"]; } } //if (ls_op_type != " ") } //foreach (DataRow dr in dtGrid.Rows) //刪除資料 foreach (DataRow drDel in dtDel.Rows) { kindID = drDel["KIND_ID"].AsString(); stockID = drDel["STOCK_ID"].ToString(); if (daoMGD2.DeleteMGD2(this.ymd, isAdjType, stockID, kindID) < 0) { MessageDisplay.Error("MGD2資料刪除失敗"); return(ResultStatus.FailButNext); } } //Update DB //ids_tmp.update() if (dtTemp.Rows.Count > 0) { ResultData myResultData = daoMGD2.UpdateMGD2(dtTemp); if (myResultData.Status == ResultStatus.Fail) { MessageDisplay.Error("更新資料庫MGD2錯誤! "); return(ResultStatus.FailButNext); } } //ids_old.update() if (dtMGD2Log.Rows.Count > 0) { ResultData myResultData = daoMGD2L.UpdateMGD2L(dtMGD2Log); if (myResultData.Status == ResultStatus.Fail) { MessageDisplay.Error("更新資料庫MGD2L錯誤! "); return(ResultStatus.FailButNext); } } //Write LOGF WriteLog("變更資料 ", "Info", "I"); //報表儲存pdf ReportHelper _ReportHelper = new ReportHelper(gcMain, _ProgramID, this.Text); CommonReportLandscapeA3 reportLandscape = new CommonReportLandscapeA3();//設定為橫向列印 reportLandscape.printableComponentContainerMain.PrintableComponent = gcMain; reportLandscape.IsHandlePersonVisible = false; reportLandscape.IsManagerVisible = false; _ReportHelper.Create(reportLandscape); _ReportHelper.Export(FileType.PDF, _ReportHelper.FilePath); MessageDisplay.Info("報表儲存完成!"); } catch (Exception ex) { SetSaveFlagValue(); MessageDisplay.Error("儲存錯誤"); throw ex; } SetSaveFlagValue(); return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall pokeBall) { try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange != null) { foreach (DataRow drCnange in dtChange.Rows) { if (drCnange.RowState == DataRowState.Deleted) { continue; } if (drCnange.RowState == DataRowState.Added || drCnange.RowState == DataRowState.Modified) { if (dtForAdd != null) { foreach (DataRow drAdd in dtForAdd.Rows) { for (int w = 0; w < dtForAdd.Rows.Count; w++) { for (int y = 0; y < 3; y++) { if (string.IsNullOrEmpty(drAdd[y].AsString())) { MessageDisplay.Error("資料尚未填寫完成", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } } } } } if (dtForModified != null) { foreach (DataRow drMod in dtForModified.Rows) { for (int w = 0; w < dtForModified.Rows.Count; w++) { for (int y = 0; y < 3; y++) { if (string.IsNullOrEmpty(drMod[y].AsString())) { MessageDisplay.Error("資料尚未填寫完成", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } } } } } } } } if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } foreach (DataRow dr in dtCurrent.Rows) { if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified) { dr["MGT3_W_TIME"] = DateTime.Now; dr["MGT3_W_USER_ID"] = GlobalInfo.USER_ID; } } dtChange = dtCurrent.GetChanges(); ResultData result = new MGT3().UpdateData(dtChange); if (result.Status == ResultStatus.Fail) { MessageDisplay.Error("儲存失敗", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } } catch (Exception ex) { WriteLog(ex); } _IsPreventFlowPrint = true; //不要自動列印 return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall poke) { gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); try { DataTable dtCurrent = (DataTable)gcMain.DataSource; DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } //判斷商品組合有無填入跨商品MAX折抵比率 foreach (DataRow dr in dtChange.Rows) { if (dr.RowState != DataRowState.Deleted) { string kind1 = dr["SPT1_KIND_ID1"].AsString(); string kind2 = dr["SPT1_KIND_ID2"].AsString(); string maxSpnsRate = dr["SPT1_MAX_SPNS_RATE"].AsString(); if (string.IsNullOrEmpty(kind1) || string.IsNullOrEmpty(kind2)) { MessageDisplay.Error("請輸入商品名稱", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } if (kind2 != "-" && string.IsNullOrEmpty(maxSpnsRate)) { MessageDisplay.Warning("請輸入跨商品MAX折抵比率", GlobalInfo.WarningText); return(ResultStatus.FailButNext); } } } //隱藏欄位賦值 foreach (DataRow dr in dtCurrent.Rows) { if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified) { dr["SPT1_W_TIME"] = DateTime.Now; dr["SPT1_W_USER_ID"] = GlobalInfo.USER_ID; } if (dr.RowState == DataRowState.Deleted) { dr.Delete(); } } //dtCurrent.AcceptChanges(); dtChange = dtCurrent.GetChanges(); ResultData result = daoSPT1.UpdateSPT1(dtChange); //使用處理並行違規的function if (result.Status == ResultStatus.Fail) { MessageDisplay.Error("儲存失敗", GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } AfterSaveForPrint(gcMain, dtForAdd, dtForDeleted, dtForModified); } catch (Exception ex) { MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); WriteLog(ex, "", false); return(ResultStatus.FailButNext); } return(ResultStatus.Success); }
protected override ResultStatus Save(PokeBall poke) { gvMain.UpdateCurrentRow(); gvMain.CloseEditor(); try { DataTable dtCurrent = dao40080.GetData(txtTradeDate.DateTimeValue); //原始資料 DataTable dt = (DataTable)gcMain.DataSource; //現在更改後的 DataTable dtChange = dt.Clone(); int w = -1; foreach (DataRow row1 in dtCurrent.Rows) { w++; var array1 = row1.ItemArray; var array2 = dt.Rows[w].ItemArray; if (!array1.SequenceEqual(array2)) { dtChange.ImportRow(dt.Rows[w]); } continue; } if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.FailButNext); } DateTime ldt_w_time = DateTime.Now; DataTable dtSp2 = dao40080.GetSP2Data(txtTradeDate.DateTimeValue); foreach (DataRow dr in dt.Rows) { string cpType = dr["op_type"].AsString(); if (cpType == "I") { dr["op_type"] = "I"; } else { if (dr["sp2_adj_code"].AsString() == dr["sp2_adj_code_org"].AsString() && dr["sp2_span_code"].AsString() == dr["sp2_span_code_org"].AsString() && dr["sp2_value_date"].AsString() == dr["sp2_value_date_org"].AsString()) { dr["op_type"] = " "; } else { dr["op_type"] = "U"; } } if (string.IsNullOrEmpty(dr["op_type"].AsString())) { continue; } string ls_type = dr["sp1_type"].AsString(); string ls_kind_id1 = dr["sp1_kind_id1"].AsString(); string ls_kind_id2 = dr["sp1_kind_id2"].AsString(); int ll_found = 0; if (dtSp2.Select("sp2_type ='" + ls_type + "' and sp2_kind_id1='" + ls_kind_id1 + "' and sp2_kind_id2='" + ls_kind_id2 + "'").Length <= 0) { //新增 DataRow insertRow = dtSp2.NewRow(); insertRow["sp2_date"] = txtTradeDate.DateTimeValue; insertRow["sp2_type"] = ls_type; insertRow["sp2_kind_id1"] = ls_kind_id1; insertRow["sp2_kind_id2"] = ls_kind_id2; insertRow["sp2_value_date"] = dr["sp2_value_date"]; insertRow["sp2_adj_code"] = dr["sp2_adj_code"]; insertRow["sp2_span_code"] = dr["sp2_span_code"]; insertRow["sp2_osw_grp"] = dr["sp1_osw_grp"]; insertRow["sp2_w_time"] = ldt_w_time; insertRow["sp2_w_user_id"] = GlobalInfo.USER_ID; dtSp2.Rows.Add(insertRow); } else { ll_found = dtSp2.Rows.IndexOf(dtSp2.Select("sp2_type ='" + ls_type + "' and sp2_kind_id1='" + ls_kind_id1 + "' and sp2_kind_id2='" + ls_kind_id2 + "'")[0]); dtSp2.Rows[ll_found]["sp2_value_date"] = dr["sp2_value_date"]; dtSp2.Rows[ll_found]["sp2_adj_code"] = dr["sp2_adj_code"]; dtSp2.Rows[ll_found]["sp2_span_code"] = dr["sp2_span_code"]; dtSp2.Rows[ll_found]["sp2_osw_grp"] = dr["sp1_osw_grp"]; dtSp2.Rows[ll_found]["sp2_w_time"] = ldt_w_time; dtSp2.Rows[ll_found]["sp2_w_user_id"] = GlobalInfo.USER_ID; } dr["sp2_adj_code_org"] = dr["sp2_adj_code"]; }//foreach (DataRow dr in dt.Rows) //dw_2.update() ResultData myResultData = daoSP2.UpdateData(dtSp2); if (myResultData.Status == ResultStatus.Fail) { MessageDisplay.Error("更新資料庫錯誤! ", GlobalInfo.ErrorText); return(ResultStatus.Fail); } //dw_1.update(將dw_1的op_type全改為" ") foreach (DataRow dr in dt.Rows) { dr["op_type"] = " "; } AfterSaveForPrint(gcMain, null, null, dtChange); MessageDisplay.Info("報表儲存完成!", GlobalInfo.ResultText); } catch (Exception ex) { WriteLog(ex); MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); } return(ResultStatus.Success); }
/// <summary> /// 存檔前檢查 /// </summary> /// <param name="dt">要檢查的資料</param> /// <returns></returns> private bool SaveBefore(DataTable dt) { string lsType, lsVal1, lsVal2, lsVal3, lsVal4, lsVal5; try { //只檢查變動的部分 foreach (DataRow dr in dt.GetChanges().Rows) { if (dr.RowState == DataRowState.Deleted) { continue; } if (dr["OP_TYPE"].AsString() == " ") { continue; } //key值不能為null string marketCode = dr[MARKET_CODE].AsString(); if (string.IsNullOrEmpty(marketCode)) { MessageDisplay.Error("「交易時段」必須要選取值!"); //set Focused SetFocused(dt, dr, MARKET_CODE); return(false); } string paramKey = dr[PARAM_KEY].AsString(); if (string.IsNullOrEmpty(paramKey)) { MessageDisplay.Error("「商品類別」必須要選取值!"); //set Focused SetFocused(dt, dr, PARAM_KEY); return(false); } //key值不能重複 int valueCount = dt.AsEnumerable().Where(r => r.RowState != DataRowState.Deleted && r.Field <string>(MARKET_CODE).AsString() == marketCode && r.Field <string>(PARAM_KEY).AsString() == paramKey).Count(); if (valueCount >= 2) { MessageDisplay.Error($"交易時段:{(marketCode == "0" ? "[一般]" : "[夜盤]")}與商品類別:[{paramKey}] 不得重複新增!"); SetFocused(dt, dr, PARAM_KEY); return(false); } //必須回應詢價比 if (string.IsNullOrEmpty(dr["MMF_RESP_RATIO"].AsString())) { MessageDisplay.Warning("「必須回應詢價比(%)」必須要輸入值!"); //set Focused SetFocused(dt, dr, "MMF_RESP_RATIO"); return(false); } //最低造市量 if (string.IsNullOrEmpty(dr["MMF_QNTY_LOW"].AsString())) { MessageDisplay.Warning("「最低造市量」必須要輸入值!"); //set Focused SetFocused(dt, dr, "MMF_QNTY_LOW"); return(false); } //報價有效量比率 if (string.IsNullOrEmpty(dr["MMF_QUOTE_VALID_RATE"].AsString())) { MessageDisplay.Warning("「報價有效量比率」必須要輸入值!"); //set Focused SetFocused(dt, dr, "MMF_QUOTE_VALID_RATE"); return(false); } //報價每日平均維持分鐘 if (string.IsNullOrEmpty(dr["MMF_AVG_TIME"].AsString())) { MessageDisplay.Warning("「報價每日平均維持分鐘」必須要輸入值!"); //set Focused SetFocused(dt, dr, "MMF_AVG_TIME"); return(false); } //寫LOGV lsType = "I"; lsVal1 = dr["MMF_PARAM_KEY"].AsString(); lsVal2 = dr["MMF_RESP_RATIO"].AsString(); lsVal3 = dr["MMF_QNTY_LOW"].AsString(); lsVal4 = dr["MMF_QUOTE_VALID_RATE"].AsString(); lsVal5 = dr["MMF_AVG_TIME"].AsString(); new LOGV().Insert(_ProgramID, GlobalInfo.USER_ID, lsType, lsVal1, lsVal2, lsVal3, lsVal4, lsVal5); } } catch (Exception ex) { WriteLog(ex); return(false); } return(true); }
protected override ResultStatus Save(PokeBall poke) { try { DataTable dtCurrent = (DataTable)gcMain.DataSource; gvMain.CloseEditor(); gvMain.UpdateCurrentRow(); DataTable dtChange = dtCurrent.GetChanges(); DataTable dtForAdd = dtCurrent.GetChanges(DataRowState.Added); DataTable dtForModified = dtCurrent.GetChanges(DataRowState.Modified); DataTable dtForDeleted = dtCurrent.GetChanges(DataRowState.Deleted); if (dtChange == null) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } if (dtChange.Rows.Count == 0) { MessageDisplay.Warning("沒有變更資料,不需要存檔!", GlobalInfo.WarningText); return(ResultStatus.Fail); } foreach (DataRow dr in dtCurrent.Rows) { if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Modified) { dr["mgt2_w_time"] = DateTime.Now; dr["mgt2_w_user_id"] = GlobalInfo.USER_ID; //有設下市日 if (!Convert.IsDBNull(dr["mgt2_end_ymd"])) { string mgt2EndDate = dr["mgt2_end_ymd"].AsString(); if (mgt2EndDate != "") { //要輸入8位數值 int dateNumber; if (int.TryParse(mgt2EndDate, out dateNumber) == true) { //檢核有效日 string strDate = DateTime.ParseExact(mgt2EndDate, "yyyyMMdd", null).ToString("yyyy/MM/dd"); DateTime isEndDate; if (DateTime.TryParse(strDate, out isEndDate) == false) { MessageDisplay.Error(string.Format("下市日期格式不符yyyymmdd,({0})非有效日期", mgt2EndDate), GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } } else { MessageDisplay.Error(string.Format("下市日期格式不符yyyymmdd,({0})非有效日期", mgt2EndDate), GlobalInfo.ErrorText); return(ResultStatus.FailButNext); } //if (int.TryParse(mgt2EndDate , out int tmp) == true) } } //if (!Convert.IsDBNull(dr["mgt2_end_ymd"])) } } // foreach (DataRow dr in dtCurrent.Rows) ResultData result = new MGT2().UpdateData(dtCurrent); if (result.Status == ResultStatus.Fail) { return(ResultStatus.Fail); } //PrintOrExportChangedByKen(gcMain , dtForAdd , dtForDeleted , dtForModified); } catch (Exception ex) { MessageDisplay.Error("儲存錯誤", GlobalInfo.ErrorText); WriteLog(ex, "", false); return(ResultStatus.FailButNext); } return(ResultStatus.Success); }
protected override ResultStatus Export() { try { #region 輸入&日期檢核 if (string.Compare(txtStartYMD.Text, txtEndYMD.Text) > 0) { MessageDisplay.Error(CheckDate.Datedif, GlobalInfo.ErrorText); return(ResultStatus.Fail); } #endregion //0. ready panFilter.Enabled = false; labMsg.Visible = true; labMsg.Text = "開始轉檔..."; this.Cursor = Cursors.WaitCursor; this.Refresh(); Thread.Sleep(5); ///************************************* // chkGroup.Items[0] = MonQnty // chkGroup.Items[1] = OI // chkGroup.Items[2] = MonCnt // chkGroup.Items[3] = Amt // chkGroup.Items[4] = Acc // chkGroup.Items[5] = Id // chkGroup.Items[6] = Rmb //*************************************/ //1. 判斷是否至少勾選一個選項 if (chkGroup.CheckedItemsCount < 1) { MessageDisplay.Warning("請勾選至少一個選項!", GlobalInfo.WarningText); return(ResultStatus.Fail); } else { string tempMarketCode = ""; //RadioButton (rbMarket0 = 一般 / rbMarket1 = 盤後 / rbMarketAll = 全部) if (gbMarket.EditValue.AsString() == "rbMarket0") { tempMarketCode = "一般"; } else if (gbMarket.EditValue.AsString() == "rbMarket1") { tempMarketCode = "盤後"; } else { tempMarketCode = "全部"; } flag = 0; //2. 複製檔案 & 開啟檔案 (因檔案需因MarketCode更動,所以另外寫) string originalFilePath = Path.Combine(GlobalInfo.DEFAULT_EXCEL_TEMPLATE_DIRECTORY_PATH, _ProgramID + "." + FileType.XLSX.ToString().ToLower()); string destinationFilePath = Path.Combine(GlobalInfo.DEFAULT_REPORT_DIRECTORY_PATH, _ProgramID + "_" + tempMarketCode + "_" + DateTime.Now.ToString("yyyy.MM.dd") + "-" + DateTime.Now.ToString("HH.mm.ss") + "." + FileType.XLSX.ToString().ToLower()); File.Copy(originalFilePath, destinationFilePath, true); Workbook workbook = new Workbook(); workbook.LoadDocument(destinationFilePath); if (chkGroup.CheckedItemsCount == 1) { foreach (CheckedListBoxItem item in chkGroup.Items) { if (item.Value.AsString() == "chkRmb") { File.Delete(destinationFilePath); } } } foreach (CheckedListBoxItem item in chkGroup.Items) { if (item.CheckState == CheckState.Unchecked) { continue; } switch (item.Value) { case "chkRmb": wf_30592_RMB(); break; default: //3. 填資料 bool result = false; result = wf_30592(workbook, destinationFilePath); //function 30592 if (!result) { try { workbook = null; File.Delete(destinationFilePath); } catch (Exception ex) { WriteLog(ex); } return(ResultStatus.Fail); } else { flag++; } break; } }//foreach (CheckedListBoxItem item in chkGroup.Items) if (flag <= 0) { MessageDisplay.Info(MessageDisplay.MSG_NO_DATA, GlobalInfo.ResultText); } //3.存檔改寫在Function內 labMsg.Visible = false; } return(ResultStatus.Success); } catch (Exception ex) { WriteLog(ex); } finally { panFilter.Enabled = true; labMsg.Text = ""; labMsg.Visible = false; this.Cursor = Cursors.Arrow; } return(ResultStatus.Fail); }