Exemple #1
0
        public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            FileLog.PrintF("ReceivedData OPTKWFID");
            //try {

            /*
             * sScrNo – 화면번호
             * sRQName – 사용자구분 명
             * sTrCode – Tran 명
             * sRecordName – Record 명
             * sPreNext – 연속조회 유무
             */
            String 종목코드 = "XXXX";
            int    nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);
            String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
            String keyStockCode       = String.Format(keyStockCodeLayout
                                                      , e.sRQName
                                                      , e.sTrCode
                                                      , e.sScrNo
                                                      );

            종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode);

            String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}";
            String key       = String.Format(keyLayout
                                             , e.sRQName
                                             , e.sTrCode
                                             , e.sScrNo
                                             , 종목코드
                                             );

            spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy();

            List <TB_OPTKWFID> lst = new List <TB_OPTKWFID>();


            if (nCnt > 0)
            {
                for (int i = 0; i < nCnt; i++)
                {
                    /*
                     * FileLog.PrintF("OPTKWFID ReceivedData 종목코드 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim());//[1]
                     * FileLog.PrintF("OPTKWFID ReceivedData 종목명 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim());//[2]
                     * FileLog.PrintF("OPTKWFID ReceivedData 현재가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim());//[3]
                     * FileLog.PrintF("OPTKWFID ReceivedData 기준가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기준가").Trim());//[4]
                     * FileLog.PrintF("OPTKWFID ReceivedData 전일대비 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim());//[5]
                     * FileLog.PrintF("OPTKWFID ReceivedData 전일대비기호 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비기호").Trim());//[6]
                     * FileLog.PrintF("OPTKWFID ReceivedData 등락율 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim());//[7]
                     * FileLog.PrintF("OPTKWFID ReceivedData 거래량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim());//[8]
                     * FileLog.PrintF("OPTKWFID ReceivedData 거래대금 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대금").Trim());//[9]
                     * FileLog.PrintF("OPTKWFID ReceivedData 체결량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결량").Trim());//[10]
                     * FileLog.PrintF("OPTKWFID ReceivedData 체결강도 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결강도").Trim());//[11]
                     * FileLog.PrintF("OPTKWFID ReceivedData 전일거래량대비 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일거래량대비").Trim());//[12]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도호가").Trim());//[13]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수호가").Trim());//[14]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도1차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도1차호가").Trim());//[15]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도2차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도2차호가").Trim());//[16]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도3차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도3차호가").Trim());//[17]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도4차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도4차호가").Trim());//[18]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매도5차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도5차호가").Trim());//[19]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수1차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수1차호가").Trim());//[20]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수2차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수2차호가").Trim());//[21]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수3차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수3차호가").Trim());//[22]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수4차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수4차호가").Trim());//[23]
                     * FileLog.PrintF("OPTKWFID ReceivedData 매수5차호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수5차호가").Trim());//[24]
                     * FileLog.PrintF("OPTKWFID ReceivedData 상한가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "상한가").Trim());//[25]
                     * FileLog.PrintF("OPTKWFID ReceivedData 하한가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "하한가").Trim());//[26]
                     * FileLog.PrintF("OPTKWFID ReceivedData 시가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가").Trim());//[27]
                     * FileLog.PrintF("OPTKWFID ReceivedData 고가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim());//[28]
                     * FileLog.PrintF("OPTKWFID ReceivedData 저가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim());//[29]
                     * FileLog.PrintF("OPTKWFID ReceivedData 종가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종가").Trim());//[30]
                     * FileLog.PrintF("OPTKWFID ReceivedData 체결시간 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결시간").Trim());//[31]
                     * FileLog.PrintF("OPTKWFID ReceivedData 예상체결가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결가").Trim());//[32]
                     * FileLog.PrintF("OPTKWFID ReceivedData 예상체결량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결량").Trim());//[33]
                     * FileLog.PrintF("OPTKWFID ReceivedData 자본금 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "자본금").Trim());//[34]
                     * FileLog.PrintF("OPTKWFID ReceivedData 액면가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "액면가").Trim());//[35]
                     * FileLog.PrintF("OPTKWFID ReceivedData 시가총액 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가총액").Trim());//[36]
                     * FileLog.PrintF("OPTKWFID ReceivedData 주식수 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주식수").Trim());//[37]
                     * FileLog.PrintF("OPTKWFID ReceivedData 호가시간 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "호가시간").Trim());//[38]
                     * FileLog.PrintF("OPTKWFID ReceivedData 일자 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[39]
                     * FileLog.PrintF("OPTKWFID ReceivedData 우선매도잔량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매도잔량").Trim());//[40]
                     * FileLog.PrintF("OPTKWFID ReceivedData 우선매수잔량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매수잔량").Trim());//[41]
                     * FileLog.PrintF("OPTKWFID ReceivedData 우선매도건수 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매도건수").Trim());//[42]
                     * FileLog.PrintF("OPTKWFID ReceivedData 우선매수건수 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매수건수").Trim());//[43]
                     * FileLog.PrintF("OPTKWFID ReceivedData 총매도잔량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매도잔량").Trim());//[44]
                     * FileLog.PrintF("OPTKWFID ReceivedData 총매수잔량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매수잔량").Trim());//[45]
                     * FileLog.PrintF("OPTKWFID ReceivedData 총매도건수 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매도건수").Trim());//[46]
                     * FileLog.PrintF("OPTKWFID ReceivedData 총매수건수 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매수건수").Trim());//[47]
                     * FileLog.PrintF("OPTKWFID ReceivedData 패리티 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "패리티").Trim());//[48]
                     * FileLog.PrintF("OPTKWFID ReceivedData 기어링 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기어링").Trim());//[49]
                     * FileLog.PrintF("OPTKWFID ReceivedData 손익분기 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "손익분기").Trim());//[50]
                     * FileLog.PrintF("OPTKWFID ReceivedData ELW행사가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "ELW행사가").Trim());//[51]
                     * FileLog.PrintF("OPTKWFID ReceivedData 전환비율 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전환비율").Trim());//[52]
                     * FileLog.PrintF("OPTKWFID ReceivedData ELW만기일 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "ELW만기일").Trim());//[53]
                     * FileLog.PrintF("OPTKWFID ReceivedData 미결제약정 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미결제약정").Trim());//[54]
                     * FileLog.PrintF("OPTKWFID ReceivedData 미결제전일대비 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미결제전일대비").Trim());//[55]
                     * FileLog.PrintF("OPTKWFID ReceivedData 이론가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "이론가").Trim());//[56]
                     * FileLog.PrintF("OPTKWFID ReceivedData 내재변동성 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "내재변동성").Trim());//[57]
                     * FileLog.PrintF("OPTKWFID ReceivedData 델타 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "델타").Trim());//[58]
                     * FileLog.PrintF("OPTKWFID ReceivedData 감마 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "감마").Trim());//[59]
                     * FileLog.PrintF("OPTKWFID ReceivedData 세타 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "세타").Trim());//[60]
                     * FileLog.PrintF("OPTKWFID ReceivedData 베가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "베가").Trim());//[61]
                     * FileLog.PrintF("OPTKWFID ReceivedData 로 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "로").Trim());//[62]
                     */


                    /*
                     *[2020-04-18 00:45:39]OPTKWFID ReceivedData 종목코드 =>000390
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 종목명 =>삼화페인트
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 현재가 =>+5110
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 기준가 =>5040
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 전일대비 =>+70
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 전일대비기호 =>2
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 등락율 =>+1.39
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 거래량 =>50291
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 거래대금 =>256
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 체결량 =>+1
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 체결강도 =>108.71
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 전일거래량대비 =>+283.20
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도호가 =>+5120
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수호가 =>+5110
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도1차호가 =>+5120
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도2차호가 =>+5130
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도3차호가 =>+5140
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도4차호가 =>+5150
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매도5차호가 =>+5160
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수1차호가 =>+5110
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수2차호가 =>+5100
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수3차호가 =>+5090
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수4차호가 =>+5080
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 매수5차호가 =>+5070
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 상한가 =>+6550
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 하한가 =>-3530
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 시가 =>5040
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 고가 =>+5170
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 저가 =>5040
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 종가 =>+5110
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 체결시간 =>155926
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 예상체결가 =>+5110
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 예상체결량 =>334
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 자본금 =>132
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 액면가 =>500
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 시가총액 =>1351
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 주식수 =>26439
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 호가시간 =>160000
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 일자 =>20200417
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 우선매도잔량 =>270
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 우선매수잔량 =>117
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 우선매도건수 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 우선매수건수 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 총매도잔량 =>7991
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 총매수잔량 =>12270
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 총매도건수 =>-1000
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 총매수건수 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 패리티 =>0.00
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 기어링 =>0.00
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 손익분기 =>0.00
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData ELW행사가 =>0
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 전환비율 =>0.0000
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData ELW만기일 =>00000000
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 미결제약정 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 미결제전일대비 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 이론가 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 내재변동성 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 델타 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 감마 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 세타 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 베가 =>
                     * [2020-04-18 00:45:39]OPTKWFID ReceivedData 로 =>
                     */



                    TB_OPTKWFID tb_optkwfid = new TB_OPTKWFID();

                    tb_optkwfid.stock_cd = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").Trim(); //[0]
                    tb_optkwfid.stock_nm = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim();  //[1]

                    int 현재가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim(), out 현재가);
                    tb_optkwfid.curr_amt = 현재가;

                    int 기준가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기준가").Trim(), out 기준가);
                    tb_optkwfid.yesterday_amt = 기준가;

                    int 전일대비 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim(), out 전일대비);
                    tb_optkwfid.contrast_yesterday = 전일대비;

                    int 전일대비기호 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비기호").Trim(), out 전일대비기호);
                    tb_optkwfid.contrast_yesterday_symbol = 전일대비기호;

                    float 등락율 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim(), out 등락율);
                    tb_optkwfid.fluctuation_rt = 등락율;

                    int 거래량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim(), out 거래량);
                    tb_optkwfid.trade_qty = 거래량;

                    int 거래대금 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대금").Trim(), out 거래대금);
                    tb_optkwfid.trade_amt = 거래대금;

                    int 체결량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결량").Trim(), out 체결량);
                    tb_optkwfid.contract_qty = 체결량;

                    float 체결강도 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결강도").Trim(), out 체결강도);
                    tb_optkwfid.contract_strength = 체결강도;

                    float 전일거래량대비 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일거래량대비").Trim(), out 전일거래량대비);
                    tb_optkwfid.yesterday_contrast_trade_rt = 전일거래량대비;

                    int 매도호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도호가").Trim(), out 매도호가);
                    tb_optkwfid.offered_amt = 매도호가;

                    int 매수호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수호가").Trim(), out 매수호가);
                    tb_optkwfid.bid_amt = 매수호가;

                    int 매도1차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도1차호가").Trim(), out 매도1차호가);
                    tb_optkwfid.offered_amt_one = 매도1차호가;

                    int 매도2차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도2차호가").Trim(), out 매도2차호가);
                    tb_optkwfid.offered_amt_two = 매도2차호가;

                    int 매도3차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도3차호가").Trim(), out 매도3차호가);
                    tb_optkwfid.offered_amt_three = 매도3차호가;

                    int 매도4차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도4차호가").Trim(), out 매도4차호가);
                    tb_optkwfid.offered_amt_four = 매도4차호가;

                    int 매도5차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도5차호가").Trim(), out 매도5차호가);
                    tb_optkwfid.offered_amt_five = 매도5차호가;

                    int 매수1차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수1차호가").Trim(), out 매수1차호가);
                    tb_optkwfid.bid_amt_one = 매수1차호가;

                    int 매수2차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수2차호가").Trim(), out 매수2차호가);
                    tb_optkwfid.bid_amt_two = 매수2차호가;

                    int 매수3차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수3차호가").Trim(), out 매수3차호가);
                    tb_optkwfid.bid_amt_three = 매수3차호가;

                    int 매수4차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수4차호가").Trim(), out 매수4차호가);
                    tb_optkwfid.bid_amt_four = 매수4차호가;

                    int 매수5차호가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수5차호가").Trim(), out 매수5차호가);
                    tb_optkwfid.bid_amt_five = 매수5차호가;


                    int 상한가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "상한가").Trim(), out 상한가);
                    tb_optkwfid.upper_amt_lmt = 상한가;

                    int 하한가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "하한가").Trim(), out 하한가);
                    tb_optkwfid.lower_amt_lmt = 하한가;

                    int 시작가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시작가").Trim(), out 시작가);
                    tb_optkwfid.start_amt = 시작가;

                    int 고가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim(), out 고가);
                    tb_optkwfid.high_amt = 고가;

                    int 저가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim(), out 저가);
                    tb_optkwfid.low_amt = 저가;

                    int 종가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종가").Trim(), out 종가);
                    tb_optkwfid.clsg_amt = 종가;

                    tb_optkwfid.contract_time = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결시간").Trim();//[1]

                    int 예상체결가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결가").Trim(), out 예상체결가);
                    tb_optkwfid.expectation_contract_amt = 예상체결가;


                    int 예상체결수량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "예상체결수량").Trim(), out 예상체결수량);
                    tb_optkwfid.expectation_contract_qty = 예상체결수량;

                    int 자본금 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "자본금").Trim(), out 자본금);
                    tb_optkwfid.capital_amt = 자본금;

                    int 액면가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "액면가").Trim(), out 액면가);
                    tb_optkwfid.face_amt = 액면가;

                    int 시가총액 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가총액").Trim(), out 시가총액);
                    tb_optkwfid.total_mrkt_amt = 시가총액;

                    int 상장주식수 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "상장주식수").Trim(), out 상장주식수);
                    tb_optkwfid.stock_cnt = 상장주식수;

                    tb_optkwfid.hoga_time = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "호가시간").Trim(); //[1]
                    tb_optkwfid.stock_dt  = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim();   //[1]

                    int 우선매도잔량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매도잔량").Trim(), out 우선매도잔량);
                    tb_optkwfid.fst_offered_balance = 우선매도잔량;

                    int 우선매수잔량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매수잔량").Trim(), out 우선매수잔량);
                    tb_optkwfid.fst_bid_balance = 우선매수잔량;

                    int 우선매도건수 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매도건수").Trim(), out 우선매도건수);
                    tb_optkwfid.fst_offered_qty = 우선매도건수;

                    int 우선매수건수 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "우선매수건수").Trim(), out 우선매수건수);
                    tb_optkwfid.fst_bid_qty = 우선매수건수;

                    int 총매도잔량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매도잔량").Trim(), out 총매도잔량);
                    tb_optkwfid.tot_offered_balance = 총매도잔량;

                    int 총매수잔량 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매수잔량").Trim(), out 총매수잔량);
                    tb_optkwfid.tot_bid_balance = 총매수잔량;

                    int 총매도건수 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매도건수").Trim(), out 총매도건수);
                    tb_optkwfid.tot_offered_qty = 총매도건수;

                    int 총매수건수 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "총매수건수").Trim(), out 총매수건수);
                    tb_optkwfid.tot_bid_qty = 총매수건수;

                    float 패리티 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "패리티").Trim(), out 패리티);
                    tb_optkwfid.parity_rt = 패리티;

                    float 기어링 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기어링").Trim(), out 기어링);
                    tb_optkwfid.gearing = 기어링;

                    float 손익분기 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "손익분기").Trim(), out 손익분기);
                    tb_optkwfid.break_even_point = 기어링;

                    int ELW행사가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "ELW행사가").Trim(), out ELW행사가);
                    tb_optkwfid.elw_strike_amt = ELW행사가;

                    float 전환비율 = 0;
                    float.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전환비율").Trim(), out 전환비율);
                    tb_optkwfid.conversion_rt = 전환비율;

                    tb_optkwfid.elw_expiry_dt = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "ELW만기일").Trim();//[1]

                    int 미결제약정 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미결제약정").Trim(), out 미결제약정);
                    tb_optkwfid.open_interest = 미결제약정;

                    int 미결제전일대비 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미결제전일대비").Trim(), out 미결제전일대비);
                    tb_optkwfid.contrast_open_interest = 미결제전일대비;


                    int 이론가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "이론가").Trim(), out 이론가);
                    tb_optkwfid.theorist_amt = 이론가;

                    int 내재변동성 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "내재변동성").Trim(), out 내재변동성);
                    tb_optkwfid.implied_volatility = 내재변동성;

                    int 델타 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "델타").Trim(), out 델타);
                    tb_optkwfid.delta = 델타;

                    int 감마 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "감마").Trim(), out 감마);
                    tb_optkwfid.gamma = 감마;


                    int 세타 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "세타").Trim(), out 세타);
                    tb_optkwfid.theta = 세타;

                    int 베가 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "베가").Trim(), out 베가);
                    tb_optkwfid.vega = 베가;

                    int 로 = 0;
                    int.TryParse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "로").Trim(), out 로);
                    tb_optkwfid.lo = 로;

                    //(8025-8089)/8089*100
                    //24005=23775+160+70
                    //24005-24575=-570
                    //24805
                    lst.Add(tb_optkwfid);
                }
            }

            //이것은 연속적이지 않기 때문에 바로 제거 한다.
            AppLib.getClass1Instance().removeSpellDictionary(spell.key);
            int    position = spell.key.LastIndexOf("|");
            String key1     = spell.key.Substring(0, position);

            AppLib.getClass1Instance().removeStockCodeDictionary(key1);
            //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
            AppLib.getClass1Instance().setOpt10081(spell.sTrCode);

            DailyData dd = new DailyData();

            dd.insertOptkwfid(lst);
        }
Exemple #2
0
        private void createDishesCanvas()
        {
            //  РАЗМЕРЫ ПАНЕЛИ БЛЮД
            double dishesPanelWidth    = (double)AppLib.GetAppGlobalValue("dishesPanelWidth");
            double dishPanelLeftMargin = (double)AppLib.GetAppGlobalValue("dishPanelLeftMargin");
            double dishPanelWidth      = (double)AppLib.GetAppGlobalValue("dishPanelWidth");
            int    dColCount           = AppLib.GetAppGlobalValue("dishesColumnsCount").ToString().ToInt();

            int iRowsCount = 0;

            if (mItem.Dishes.Count > 0)
            {
                iRowsCount = ((mItem.Dishes.Count - 1) / dColCount) + 1;
            }

            DishItem dish;
            int      iRow, iCol; double leftPos, topPos;

            for (int i = 0; i < mItem.Dishes.Count; i++)
            {
                dish = mItem.Dishes[i];

                // размеры канвы с панелями блюд
                bool   isExistGarnishes   = (dish.Garnishes != null);
                double currentPanelHeight = (isExistGarnishes) ? (double)AppLib.GetAppGlobalValue("dishPanelHeightWithGarnish") : (double)AppLib.GetAppGlobalValue("dishPanelHeight");
                if (double.IsNaN(base.Width) || (base.Width == 0))
                {
                    base.Width  = dishesPanelWidth;
                    base.Height = iRowsCount * currentPanelHeight;
                }

                // положение панели блюда
                iRow    = i / dColCount; iCol = i % dColCount;
                leftPos = (dishPanelLeftMargin + iCol * dishPanelWidth);
                topPos  = iRow * currentPanelHeight;

                MainMenuDishPanel dishPanel = new MainMenuDishPanel(dish, leftPos, topPos);

                base.Children.Add(dishPanel);
            }  // for dishes

            //base.Background = Brushes.Gold;
            //base.Background = new SolidColorBrush(new Color() { R = (byte)rnd.Next(0,254), G= (byte)rnd.Next(0, 254), B= (byte)rnd.Next(0, 254), A=0xFF });
        } // method
Exemple #3
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string retVal = null;

            if (parameter == null)
            {
                retVal = AppLib.GetLangText((Dictionary <string, string>)value);
                if (IsUpper == true)
                {
                    retVal = retVal.ToUpper(culture);
                }
                if (IsLower == true)
                {
                    retVal = retVal.ToLower(culture);
                }
            }
            else
            {
                string mode = (string)parameter;
                int    i1   = mode.IndexOf('.');
                if (i1 > -1)
                {
                    string key = mode.Substring(0, i1);
                    string val = mode.Substring(i1 + 1);
                    if (key == "appSet")
                    {
                        Dictionary <string, string> lDict = (Dictionary <string, string>)AppLib.GetAppGlobalValue(val);
                        retVal = AppLib.GetLangText(lDict);
                        if (IsUpper == true)
                        {
                            retVal = retVal.ToUpper(culture);
                        }
                        if (IsLower == true)
                        {
                            retVal = retVal.ToLower(culture);
                        }
                    }
                }
            }

            return(retVal);
        }
Exemple #4
0
 private void txtBuildingFund_PreviewTextInput(object sender, TextCompositionEventArgs e)
 {
     AppLib.CheckIsNumeric(e);
 }
Exemple #5
0
        //**************************************
        // ГЛАВНАЯ ПРОЦЕДУРА ОБНОВЛЕНИЯ ЗАКАЗОВ
        // здесь пишем в лог при включенном флаге TraceOrdersDetails
        // возвращает текст ошибки
        //**************************************
        public string UpdateOrders()
        {
            string sLog = "";

            #region автосброс вчерашних заказов
            if (_changeStatusYesterdayOrdersCfg)
            {
                if (_changeStatusYesterdayOrdersCurrent)
                {
                    if (updateYesterdayOrdersStatus())
                    {
                        // для одноразового прохода в течение дня
                        _changeStatusYesterdayOrdersCurrent = false;
                        if (_currentDate != DateTime.Today)
                        {
                            _currentDate = DateTime.Today;
                        }
                    }
                }
                // текущий флаг обновления вчерашних заказов сброшен и переползли в новые сутки
                else if (_currentDate != DateTime.Today)
                {
                    // устанавливаем флажок, чтобы при следующем проходе, попытаться обновить статус вчерашних заказов
                    _changeStatusYesterdayOrdersCurrent = true;
                }
            }
            #endregion

            AppLib.WriteLogOrderDetails("GET ORDERS FROM DB - START");
            Console.Write("getting orders ...");
            DebugTimer.Init(" - get orders from DB", false);

            // получить заказы из БД
            string errMsg = null;
            try
            {
                DBOrderHelper.LoadDBOrders();
                errMsg = DBOrderHelper.ErrorMessage;
            }
            catch (Exception ex)
            {
                errMsg = ErrorHelper.GetShortErrMessage(ex);
            }
            if (errMsg != null)
            {
                return(errMsg);
            }

            // получено заказов из БД
            if (_isLogOrderDetails)
            {
                string ids = (_dbOrders.Count > 50) ? "> 50" : getOrdersLogString(_dbOrders);
                AppLib.WriteLogOrderDetails(" - from DB {0} id/Num/dishes: {1}", _dbOrders.Count, ids);
            }

            // цикл по полученным из БД заказам
            if (_dbOrders != null)
            {
                #region *** ОБНОВЛЕНИЕ ВНУТРЕННЕГО СЛОВАРЯ ЗАКАЗОВ _orders коллекцией из БД _dbOrders ***

                // 1. удалить из _orders те заказы, который уже нет в БД, кроме заблокированных
                int[] delIds = _orders.Keys
                               .Except(_dbOrders.Select(o => o.Id))
                               .Except(OrderLocker.GetLockedOrders())
                               .ToArray();
                if (_isLogOrderDetails)
                {
                    string s1 = ""; if (delIds.Length > 0)
                    {
                        s1 = string.Join(",", delIds);
                    }
                    if (s1 != "")
                    {
                        AppLib.WriteLogOrderDetails("   appModel: remove order Ids {0}", s1);
                    }
                }
                foreach (int id in delIds)
                {
                    _orders[id].Dispose();
                    _orders.Remove(id);
                }

                // 2. обновить или добавить
                int iCnt = 0;
                foreach (Order dbOrder in _dbOrders)
                {
                    iCnt++;
                    // пропустить, если заказ заблокирован от изменений по таймеру при длительных операциях чтения из БД
                    if (OrderLocker.IsLockOrder(dbOrder.Id))
                    {
                        AppLib.WriteLogOrderDetails("   appModel: locked order Id " + dbOrder.Id.ToString());
                        // если заказ стал неотображаемый, то удалить его из коллекции
                        if (_orders.ContainsKey(dbOrder.Id))
                        {
                            OrderModel om = _orders[dbOrder.Id];
                            if (_allowedKDSStatuses.Contains(om.OrderStatusId) == false)
                            {
                                _orders.Remove(dbOrder.Id);
                                AppLib.WriteLogOrderDetails("             remove from appModel set");
                            }
                        }
                        continue;
                    }

                    if (_orders.ContainsKey(dbOrder.Id))
                    {
                        //sLog = string.Format("   appModel: update {0}/{1}", dbOrder.Id, dbOrder.Number);
                        //AppEnv.WriteLogOrderDetails(sLog + " - START");
                        //_tmpDT = DateTime.Now;

                        try
                        {
                            _orders[dbOrder.Id].UpdateFromDBEntity(dbOrder);
                        }
                        catch (Exception ex)
                        {
                            AppLib.WriteLogErrorMessage("Ошибка обновления служебного словаря для OrderId = {1}: {0}", ex.ToString(), dbOrder.Id);
                        }

                        //AppEnv.WriteLogOrderDetails(sLog + " - FINISH - " + _tmpPeriod());
                    }
                    // добавление заказа в словарь
                    else
                    {
                        sLog = string.Format("   appModel: add new {0}/{1}", dbOrder.Id, dbOrder.Number);
                        AppLib.WriteLogOrderDetails(sLog + " - START"); _tmpDT = DateTime.Now;
                        try
                        {
                            OrderModel newOrder = new OrderModel(dbOrder);
                            _orders.Add(dbOrder.Id, newOrder);
                        }
                        catch (Exception ex)
                        {
                            AppLib.WriteLogErrorMessage("Ошибка добавления заказа в служебный словарь: {0}", ex.ToString());
                        }
                        AppLib.WriteLogOrderDetails(sLog + " - FINISH - " + _tmpPeriod());
                    } //curOrder
                }     // foreach
                #endregion

                #region обновить словарь блюд с их количеством, которые ожидают готовки или уже готовятся
                sLog = "   updateDishesQuantityDict()...";
                AppLib.WriteLogOrderDetails(sLog);
                try
                {
                    updateDishesQuantityDict(_orders);
                    if (_isLogOrderDetails)
                    {
                        AppLib.WriteLogOrderDetails("   - result (depId/count): " + getDishesQtyString());
                    }

                    // проверяем условие автоматического перехода в режим приготовления
                    checkAutoStartCooking(_orders);
                }
                catch (Exception ex)
                {
                    if (_isLogOrderDetails)
                    {
                        AppLib.WriteLogOrderDetails("   error: " + ex.ToString());
                    }
                    else
                    {
                        AppLib.WriteLogErrorMessage("Ошибка обновления словаря количества готовящихся блюд по цехам: " + ex.ToString());
                    }
                }
                #endregion
            }

            if (_isLogOrderDetails)
            {
                string ids = (_dbOrders.Count > 50) ? "> 50" : getOrdersLogString(_orders.Values);
                AppLib.WriteLogOrderDetails(" - to clients {0} id/Num/dishes: {1}", _orders.Count, ids);
            }

            AppLib.WriteLogOrderDetails("get orders from DB - FINISH" + " - " + DebugTimer.GetInterval());
            Console.WriteLine(" - " + _orders.Count.ToString() + "  " + DebugTimer.GetInterval());

            return(null);
        }  // method
Exemple #6
0
        // из обработчика MouseUp объектов DishPanel и OrderPanelHeader
        internal static void OpenStateChangeWindow(OrderViewModel orderModel, OrderDishViewModel dishModel)
        {
            if ((orderModel == null) && (dishModel == null))
            {
                return;
            }

            // из РАЗРЕШЕННЫХ переходов выбрать переходы, ДОСТУПНЫЕ для текущего состояния
            OrderStatusEnum currentState = (OrderStatusEnum)((dishModel == null) ? orderModel.OrderStatusId : dishModel.DishStatusId);
            KDSModeEnum     kdsMode      = KDSModeHelper.CurrentKDSMode; // текущий режим КДС

            List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > allowedActions = KDSModeHelper.DefinedKDSModes[kdsMode].AllowedActions;

            if (allowedActions != null)
            {
                List <OrderStatusEnum> allowedStates = allowedActions.Where(p => (p.Key == currentState)).Select(p => p.Value).ToList();
                // при клике по ЗАКАЗУ проверить статус отображаемых на данном КДСе позиций
                if (dishModel == null)
                {
                    OrderStatusEnum statAllDishes = (OrderStatusEnum)(int)orderModel.StatusAllowedDishes;  //AppLib.GetStatusAllDishes(orderModel.Dishes);
                    if (orderModel.StatusAllowedDishes != StatusEnum.None)
                    {
                        currentState = statAllDishes;  // текущее состояние - по блюдам!
                        // и, если в разрешенных переходах есть пары с таким ключем, т.е. ВСЕ блюда находятся в состоянии, которое есть в разрешенных переходах
                        var tmpList = allowedActions.Where(s => s.Key == statAllDishes).ToList();
                        // то отображаем эти переходы, а не переходы из состояния заказа!
                        if (tmpList != null)
                        {
                            allowedStates = tmpList.Select(p => p.Value).ToList();
                        }
                    }
                }

                StringBuilder sb = new StringBuilder();
                allowedStates.ForEach(status => sb.Append(status.ToString()));
                AppLib.WriteLogClientAction("Open StateChange win, allowedStates: " + sb.ToString());

                // открываем окно изменения статуса
                if (allowedStates.Count != 0)
                {
                    StateChange win = (StateChange)WpfHelper.GetAppGlobalValue("StateChangeWindow");
                    win.CurrentState  = currentState;
                    win.Order         = orderModel;
                    win.Dish          = dishModel;
                    win.AllowedStates = allowedStates;
                    WpfHelper.SetWinSizeToMainWinSize(win);

                    win.ShowDialog();
                    AppLib.WriteLogClientAction("Close StateChange win, result: {0}", win.CurrentState.ToString());

                    // изменить статус
                    AppDataProvider dataProvider = (AppDataProvider)WpfHelper.GetAppGlobalValue("AppDataProvider");
                    OrderStatusEnum newState     = win.CurrentState;
                    if ((newState != OrderStatusEnum.None) && (newState != currentState) && (dataProvider != null))
                    {
                        string sLogMsg;
                        bool   result   = false;
                        bool   finReady = getFinReadyValue(newState); // флаг терминального окончания готовки

                        #region изменение статуса
                        try
                        {
                            // проверить set-канал
                            if (!dataProvider.EnableSetChannel)
                            {
                                dataProvider.CreateSetChannel();
                            }
                            if (!dataProvider.EnableSetChannel)
                            {
                                dataProvider.CreateSetChannel();
                            }

                            // изменение состояния БЛЮДА и разрешенных ингредиентов (2017-07-26)
                            if (dishModel != null)
                            {
                                sLogMsg = string.Format("orderId {0} (num {1}) for change status dishId {2} ({3}) to {4}", orderModel.Id, orderModel.Number, dishModel.Id, dishModel.DishName, newState.ToString());
                                DateTime dtTmr = DateTime.Now;
                                if (dataProvider.LockOrder(orderModel.Id))
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": success");

                                    OrderStatusEnum preState = dishModel.Status;
                                    // изменить статус блюда с ингредиентами
                                    result = changeStatusDishWithIngrs(dataProvider, orderModel, dishModel, newState);

                                    string sBuf = "delock " + sLogMsg + " - " + (DateTime.Now - dtTmr).ToString();
                                    if (dataProvider.DelockOrder(orderModel.Id))
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": success");
                                    }
                                    else
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": NOT success");
                                    }
                                }
                                else
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": NOT success");
                                }
                            }

                            // изменение состояния ЗАКАЗА, то изменяем все равно поблюдно
                            else if (dishModel == null)
                            {
                                sLogMsg = string.Format("orderId {0} (num {1}) for change order status to {2}", orderModel.Id, orderModel.Number, newState.ToString());
                                DateTime dtTmr = DateTime.Now;

                                if (dataProvider.LockOrder(orderModel.Id))
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": success");
                                    List <int> dishIds = new List <int>(); // dishes id has changed
                                    // меняем статус БЛЮД в заказе, если блюдо разрешено для данного КДСа
                                    foreach (OrderDishViewModel item in orderModel.Dishes.Where(d => d.ParentUID.IsNull()))
                                    {
                                        if (DishesFilter.Instance.Checked(item))
                                        {
                                            // изменить статус блюда с ингредиентами
                                            result = changeStatusDishWithIngrs(dataProvider, orderModel, item, newState);
                                            if (result)
                                            {
                                                dishIds.Add(item.Id);
                                            }
                                        }
                                    }  // foreach

                                    string sBuf = "delock " + sLogMsg + " - " + (DateTime.Now - dtTmr).ToString();
                                    if (dataProvider.DelockOrder(orderModel.Id))
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": success");
                                    }
                                    else
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": NOT success");
                                    }
                                }
                                else
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": NOT success");
                                }
                            }  // order status
                        }
                        catch (Exception ex)
                        {
                            AppLib.WriteLogErrorMessage(ex.ToString());
                            MessageBox.Show("Ошибка изменения состояния. Попробуйте еще раз.", "Ошибка записи нового состояния", MessageBoxButton.OK);
                        }
                        #endregion
                    }
                } // if (allowedStates.Count != 0)
            }     // if (allowedActions != null)
        }         // method
Exemple #7
0
 private void txtPhoneNo_TextInput(object sender, TextCompositionEventArgs e)
 {
     AppLib.CheckIsNumeric(e);
 }
Exemple #8
0
 public void ResetLangName()
 {
     _tbGarnishName.Text = (string)AppLib.GetLangText((Dictionary <string, string>)_garnItem.langNames);
 }
Exemple #9
0
        private void MainMenuGarnish_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (AppLib.IsDrag)
            {
                return;
            }

            _isSelected = !_isSelected;
            setSelectionMode();
            // передать уведомление в панель блюда
            if (SelectGarnish != null)
            {
                SelectGarnish(this, new SelectGarnishEventArgs(_isSelected, _garnIndex, AppLib.GetLangText(_garnItem.langDishDescr)));
            }
        }
Exemple #10
0
        public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            FileLog.PrintF("ReceivedData OPT10015");
            try
            {
                /*
                 * sScrNo – 화면번호
                 * sRQName – 사용자구분 명
                 * sTrCode – Tran 명
                 * sRecordName – Record 명
                 * sPreNext – 연속조회 유무
                 */
                List <TB_OPT10015> lst    = new List <TB_OPT10015>();
                String             종목코드   = "XXXX";
                int    nCnt               = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);
                String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
                String keyStockCode       = String.Format(keyStockCodeLayout
                                                          , e.sRQName
                                                          , e.sTrCode
                                                          , e.sScrNo
                                                          );
                종목코드 = AppLib.getClass1Instance().getStockCode(keyStockCode);

                String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}";
                String key       = String.Format(keyLayout
                                                 , e.sRQName
                                                 , e.sTrCode
                                                 , e.sScrNo
                                                 , 종목코드
                                                 );

                spell = AppLib.getClass1Instance().getSpell(key).ShallowCopy();
                String startDate     = spell.startDate;
                String lastStockDate = "";
                int    startDate일자   = 0;
                if (!int.TryParse(startDate, out startDate일자))
                {
                    startDate일자 = 0;
                }

                if (nCnt > 0)
                {//시작일자에 내림차순으로 들어온다.
                    for (int i = 0; i < nCnt; i++)
                    {
                        int 일자 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim());//[0]
                        lastStockDate = 일자.ToString();
                        if (startDate != null)
                        {
                            if (!(일자 >= startDate일자))
                            {
                                //입력받은 20200301 을 정수로 바꾼 strartDAte일자
                                //데이터로 받을 "일자" 가 이것보다 큰것만 가져온다.
                                //명령을 넣을때 실제로 시작일자는 ui상에서 종료일자가 들어간다.\
                                // api는 시작일자를 기준으로 내림차순으로 하기 때문이다.
                                //내림차순으로 받은거에서 끊는 역할을 해준다.
                                break;
                            }
                        }

                        int   종가     = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종가").Trim());     //[1]
                        int   전일대비기호 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비기호").Trim()); //[2]
                        int   전일대비   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "전일대비").Trim());   //[3]
                        float 등락율    = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim());    //[4]
                        int   거래량    = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim());    //[5]
                        int   거래대금   = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래대금").Trim());   //[6]
                        int   장전거래량  = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장전거래량").Trim());  //[7]
                        float 장전거래비중 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장전거래비중").Trim()); //[8]
                        int   장중거래량  = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장중거래량").Trim());  //[9]
                        float 장중거래비중 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장중거래비중").Trim()); //[10]
                        int   장후거래량  = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장후거래량").Trim());  //[11]
                        float 장후거래비중 = float.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "장후거래비중").Trim()); //[12]
                        int   기간중거래량 = Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "기간중거래량").Trim()); //[14]

                        TB_OPT10015 tmp = new TB_OPT10015();
                        tmp.stock_cd = 종목코드;
                        tmp.stock_dt = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim();

                        tmp.curr_amt = 종가;
                        tmp.contrast_yesterday_symbol = 전일대비기호;
                        tmp.contrast_yesterday        = 전일대비;
                        tmp.fluctuation_rt            = 등락율;
                        tmp.trade_qty = 거래량;
                        tmp.trade_amt = 거래대금;
                        tmp.before_market_trade_qty = 장전거래량;
                        tmp.before_market_trade_rt  = 장전거래비중;
                        tmp.market_trade_qty        = 장중거래량;
                        tmp.market_trade_rt         = 장중거래비중;
                        tmp.after_market_trade_qty  = 장후거래량;
                        tmp.after_market_trade_rt   = 장후거래비중;
                        tmp.between_trade_qty       = 기간중거래량;
                        tmp.prev_next = e.sPrevNext;

                        lst.Add(tmp);
                    }
                }
                else
                {
                    종목코드 = "00000";
                }

                if (lst.Count() > 0)
                {
                    DailyData dd = new DailyData();
                    dd.insertOpt10015(lst);
                }

                int prevNext = 0;
                int.TryParse(e.sPrevNext, out prevNext);
                //ScreenNumber.getClass1Instance().DisconnectRealData(e.sScrNo);
                //ScreenNumber.getClass1Instance().SetRealRemove("ALL", "ALL");
                //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
                AppLib.getClass1Instance().setOpt10081(spell.sTrCode);
                //2020년03월29일 확인 내용
                //nprevNext가 0이면 종료고 2이면 진행으로 알고 있었다.
                //그런데 어느시점이 지나가면 그게 아닌것 같다.
                //이걸 확인하려면 디비에 이걸 넣어야한다.
                //2012년까지 정상동작하고 이전데이터는 무조건 prev_next를 0을 리턴한다.
                //이건 수동으로 봐야겠다. 끝.

                if (startDate.Equals("ZERO") || (startDate.Length == 8 && startDate.CompareTo(lastStockDate) >= 0) || prevNext == 0)
                //ZERO면 한번만 호출이다. 또는 시작일과 마지막 리턴일이 같다면 종료되어야한다.
                {
                    AppLib.getClass1Instance().removeSpellDictionary(spell.key);
                    int    position = spell.key.LastIndexOf("|");
                    String key1     = spell.key.Substring(0, position);
                    //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
                }
                else if (prevNext > 0)
                {
                    //putReceivedQueueAndsetNextSpell(key, prevNext, lastStockDate);
                    OpenApi.Spell.SpellOpt tmp = spell.ShallowCopy();
                    tmp.nPrevNext     = prevNext;
                    tmp.lastStockDate = lastStockDate;
                    AppLib.getClass1Instance().removeSpellDictionary(key);
                    AppLib.getClass1Instance().AddSpellDictionary(key, tmp);
                    AppLib.getClass1Instance().EnqueueByOrderQueue(tmp);  //주문을 다시 넣는다.
                }
            }
            catch (Exception ex)
            {
                FileLog.PrintF("[ALERT-ReceivedData-OPT10015]Exception ex=" + ex.Message);
            }
        }
Exemple #11
0
        private void createGarnishButton()
        {
            base.Height = _height; base.Width = _width;

            // подложка кнопки
            Path _pathBase = getGarnPath(_width, _height);

            //if (_garnItem.Image == null)
            //{
            //    _pathBase.Fill = _notSelectBrush;
            //}
            //else
            //{
            _pathBase.Fill = new ImageBrush()
            {
                ImageSource = _garnItem.Image
            };
            _pathBase.Stretch = Stretch.UniformToFill;
            string sVal = (string)AppLib.GetAppGlobalValue("dishPanelGarnishBrightness");

            _pathBase.Opacity = (sVal == null) ? 1.0 : sVal.ToDouble();
            //}
            base.Children.Add(_pathBase);

            // выделение кнопки
            _pathSelected = getGarnPath(_width, _height);
            Color c  = ((SolidColorBrush)AppLib.GetAppGlobalValue("appSelectedItemColor")).Color;
            Color c1 = new Color(); c1.A = 0xAA; c1.R = c.R; c1.G = c.G; c1.B = c.B;

            _pathSelected.Fill       = new SolidColorBrush(c1);
            _pathSelected.Visibility = Visibility.Collapsed;
            base.Children.Add(_pathSelected);

            double dMarg   = 0.05 * _width;
            string grnText = (string)AppLib.GetLangText((Dictionary <string, string>)_garnItem.langNames);

            _tbGarnishName = new TextBlock()
            {
                Text              = grnText,
                Width             = _width - (2 * dMarg),
                TextWrapping      = TextWrapping.Wrap,
                VerticalAlignment = VerticalAlignment.Top,
                TextAlignment     = TextAlignment.Center,
                FontSize          = _fontSize,
                Margin            = new Thickness(dMarg),
                Foreground        = _notSelectTextBrush
            };
            base.Children.Add(_tbGarnishName);

            string grnPrice = string.Format((string)AppLib.GetAppResource("priceFormatString"), _garnItem.Price);

            _tbGarnishPrice = new TextBlock()
            {
                Text              = grnPrice,
                Width             = _width,
                VerticalAlignment = VerticalAlignment.Bottom,
                TextAlignment     = TextAlignment.Center,
                FontSize          = _fontSize,
                FontWeight        = FontWeights.Bold,
                Foreground        = Brushes.Black
            };
            base.Children.Add(_tbGarnishPrice);
        }
Exemple #12
0
        /// <summary>
        ///[101] 설명 주식 일일 데이터를 주식이 생성된 일부터 받아온다.
        ///입력값
        ///strCode : 종목코드
        ///stockDate: YYYYMMDD  문자열 ex)20160122
        ////반환값
        /// 성공유무 데이터는 onReceived쪽에서 soap로 쏴줌
        /// </summary>
        ///
        /// spell  은 내가 만든 속성  api가 너무 과거거 까지 다가져오므로
        /// START_STOCK_DATE   로 넘어오면 START_STOCK_DATE 부터 stockDate 까지 가져오기 형식은 'YYYYMMDD'
        /// ZERO 으로 나오면 한번 받아올수있는 제한까지만 받아오기.
        /// TWO로 넘어오면 처음 부터 지정한 stockDate까지 nPreNext를 받는쪽에서 2로 지정해서 다받아올수있게 하기.
        public String GetOpt10081(String strCode, String startDate, String endDate)
        {
            //String stockDate = DateTime.Today.ToString("yyyyMMdd");
            //음 nPreNext 를 처음 할때는 0으로 놓고 했는데..
            // 그럼 과거 몇개랑 현재까지 보이고..
            // 받아온것을 nPreNext 2로 하면 이어서 받아오게 되는데..
            // qna 게시판 일어보니 1로 넣으면 그날만 가져온다는 것 같다.
            //해보자.

            /*
             *  1. 고객님께서 작성하신 로직상 CommRqData가 전송횟수제한 오류 발생없이 모두 전송되고 있다면 무리가 없습니다.
             *  2. 2값은 조회하신 기준으로 그 이전의 값을 의미하고, 1값은 조회하신 기준으로 그 이후 연속데이터를 의미합니다. 1 값은 현재 시점 기준이 아닌 특정 일자를 입력하여 조회하는 성격의 TR서비스에서 사용됩니다.
             */
            //그런데 1로 해도 0이랑했을때랑 차이가 없다. ㅠㅠ
            //결국엔 당일것만 가져오고 싶으면 내가 적절히 짤라 줘야한다..
            //그러기 위해서  명령어를 담아두었다가 receive가 되었을때 비교 해서 적절하게 짤라줄 명령어를 담는 저장공간이  필요하겠다.
            //HashTable이 괜찮겠네...
            //전역으로 읽을 수 있어야 하니까 공간은 Class1
            //내가 마음대로 조절할수있는것은.  sRQName, sScreenNo 두개네...

            /*
             * 이런 난 수정주가 구분이 1로 고정인지 알았는데 qna를 보니 그게 아닌것 같다..
             *
             * 문의 내용중이런것이 있다));;
             *  OPT10081 에서
             *  수정주가구분 = 0 or 1
             *  이것을 변경해도 동일한 값이 나옵니다.
             *
             *  테스트 조건
             *  SetInputValue("종목코드" , "002990");
             *  SetInputValue("기준일자" , "20121228");
             *  SetInputValue("수정주가구분" , "0");
             *
             *  SetInputValue("종목코드" , "002990");
             *  SetInputValue("기준일자" , "20121228");
             *  SetInputValue("수정주가구분" , "1");
             *
             *  두개 모두 2012년 12월 28일 현재가가 1555원 표시됩니다.
             *
             *  해당 종목은 감자가 있었기 때문에
             *  차트에서
             *  수정주가 적용시 : 10892원
             *  수정주가 미적용시 : 1555원
             *  이렇게 표시됩니다.
             *
             * 기타 다른 답변으로는
             * 차트조회시 수정주가 구분값(0:권리락 적용안됨.1:권리락 적용됨)을 넣어서 조회하시면 됩니다.
             * 권리락이라는게 뭘까??
             *
             *  권리락 중 "권리" 에 의미는 유상증장 및 무상증자와 배당에 참여할 수 있는 자격 또는 권리를 의미하며,
             *  곧 주식 권리락이란 위에 해당하는 권리를 받을 수 있는 자격이 없어진다는 이야기입니다.
             *  다시 말하면  증자를 통하여 얻게 되는 이익에 비례하여 주가를 떨어뜨립니다.
             *
             *
             *  유상증자에서의 권리락
             *  말그대로 기존 주주들에게 유상으로(돈을 지불하여) 현 시점의 주가보다 저렴하게 주식을 살 수 있게 권리를 주게 되며,
             *  이 때문에 생기는 시세차이로 인하여 권리락이 발생하게 됩니다.
             *  무상증자
             *  주주들이 지불 없이 더 많은 주식을 받게 됩니다. 회사 입장에서는 주주들에게 지불받는 금액이 없으나 주식수는 늘어나게 됩니다.
             *  무상증자가 일어나면 주주는 더 많은 주식을 갖게 되지만 주가는 그에 비례하여 하락을 하게 되기 때문에
             *  결론적으로는 값이 동일해집니다.
             *  하지만, 대부분 무상증자 시 주가는 기존 값으로 회귀를 하는 경우가 많고, 시장에서 호재로 여겨지는 부분임.
             * 그냥 1로 표시하자... 골치 아프다..
             */

            /*
             * 큐를 받아두었다가 처리하는건.. 약간 위험한듯..
             * 그것보다 여기에서 지연이 생길수있도록 하는게 맞는것같다.
             * 시스템 성능 만큼 여기서 지연이 일어나야한다..
             * 이미  HashTable를 사용해서 여기 넣은 명령어가 received이벤트가 발생할 때 읽을 수있도록 했다..
             * 그리고 그걸 큐에 담아서 soap으로 전송할때 사용했었다..
             * 큐하고 hashtable 두개를 쓰던걸 hashtable 하나로 바꾸고
             * 실제로 soap 요청이 완료되면 hashtable에서 그 키값을 바꾸도록 해야겠다.
             * 그런데 soap 전송에서 key값을 어떻게 알수 있을까???
             * 음 hashtable에 순서가 있어서 처음들어온것을 빠질수있게 하면 되겠다..
             * 그런데 hashtable에는 순서가 없네...
             * 큐에 Dinary를 담자..
             * ㅋㅋ 그러면 되겠다...
             * 아 dictionary를 담으려고 보니까.. 너무 낭비인것 같다.
             * 클래스를 하나만들자..
             * 아 생각해보니까. 하나 만들어둔게 있었다..
             * ReceiveTrData.class
             * 아 젠장 큐가 recevie에서 만드니까.. 여기 서 막을 방법이 없네..
             * 여기서 막으면 행이 걸리는데.. 행이걸리는게 맞긴 한것 같은데..
             * 행이 오래걸리면 타임아웃이 걸리텐데...
             * 그럼 다시 원점인데.. 여기다 가 큐를 만들어야하는데..
             *
             *
             * 여기 쓰레드 큐가 하나 있어야 하고
             * 그 쓰레드는 이벤트에 큐가 쌓였을때
             * 하나씩 실행되어야 해.. 그래야 맞는것 같아..
             * 하나는 신문을 넣고 하나는 출판을 하는 그 걸 써야 하는게 맞는것 같은데..
             * https://msdn.microsoft.com/ko-kr/library/yy12yx1f%28v=vs.90%29.aspx
             *
             * 오호 이게 맞는것 같은데..
             * http://www.csharpstudy.com//Threads/autoresetevent.aspx
             * 이아저씨는 천제인가..
             * 그런데 이건 한번 다 돌고 그다음 다른거 돌고 그런식이네...
             * 이렇게 구현하면 명령어가 행이 걸릴수도 있겠는데..
             * 한쪽에서 계속 받아서 쌓이면...
             * 그리고 나중에 실행되고 그런식 아닐까...
             *
             * 음 입력이 불특정으로 일어나니까 쌓이는것도 불특정으로 쌓여서 흐름이 되겠다.
             * 나쁘지 않다...
             * 쓰레드 돌리는걸 생각해보았는데.. 생각보다 위험하다..
             * kiwoom api가 객체를 여러개 생성하는게 아니라 하나로 쓰는거랑
             * 변수가 바뀌지 않을꺼라는 보장이 없다..
             *
             * 델레케이트 풀이 가능 할까???
             *
             *
             *
             *
             * 이게 맞는것 같은데 이해를 못하고 있으니...
             * 음 이건 큐가 하나네.. 그런데 내꺼는 큐하나로 못하는데..
             * 쓰레드 큐가 있어야 하네...
             * 큐를 넣으면 반환값이 없어지네.. 큐하면 안되겠다 앞에 링크중
             * 앞에 그냥 1초 걸자.. 아 일이 진행이 안되네...
             *
             * 그래서 멈추는걸 로 해서 아래처럼 했느데.. 쓸데없이 뒤에서 보내고 다시 조회하고 그러는데 시간이 딜레이가 걸린다...
             * 큐에서 3개정도 있고 recevie가 동작을 했으면 좋겠다...
             * 그렇게 하려면
             * 큐 크기를 조사해서 3보다 작으면 웨이트가 걸리고 3보다 크면 웹이트가 풀리고.. OK??
             *
             */
            //Class1.getClass1Instance().waitOneOpt10081();// 멈추기..

            String sScreenNo = ScreenNumber.getClass1Instance().GetEosScrNum();
            String sRQName   = "주식일봉차트조회";
            String sTrCode   = "OPT10081";
            int    nPrevNext = 0;

            String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
            String keyStockCode       = String.Format(keyStockCodeLayout
                                                      , sRQName
                                                      , sTrCode
                                                      , sScreenNo
                                                      );

            String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|stockCode:{3}";
            String key       = String.Format(keyLayout
                                             , sRQName
                                             , sTrCode
                                             , sScreenNo
                                             , strCode
                                             );

            FileLog.PrintF("keyStockCode  ==" + keyStockCode);
            FileLog.PrintF("key  ==" + key);

            OpenApi.Spell.SpellOpt spellOpt10081 = new OpenApi.Spell.SpellOpt();
            spellOpt10081.sRQNAME   = sRQName;
            spellOpt10081.sTrCode   = sTrCode;
            spellOpt10081.stockCode = strCode;
            spellOpt10081.startDate = startDate;
            spellOpt10081.endDate   = endDate;
            spellOpt10081.nPrevNext = nPrevNext;
            spellOpt10081.sScreenNo = sScreenNo;


            //음 받는쪽에서 일자하고 nPrevNext를 알수가 없어서..키로 쓸수가 없다...
            //종목코드로도 찾을 수가 없네 종목코드도 지우자.
            //spell=""
            AppLib.getClass1Instance().AddStockCodeDictionary(keyStockCode, strCode);
            AppLib.getClass1Instance().AddSpellDictionary(key, spellOpt10081);


            axKHOpenAPI.SetInputValue("종목코드", strCode);
            axKHOpenAPI.SetInputValue("기준일자", endDate);
            axKHOpenAPI.SetInputValue("수정주가구분", "1");
            int nRet = axKHOpenAPI.CommRqData(sRQName, sTrCode, nPrevNext, sScreenNo);

            if (Error.IsError(nRet))
            {
                return("[OPT10081][OK]:" + Error.GetErrorMessage());
            }
            else
            {
                return("[OPT10081][NOK]:" + Error.GetErrorMessage());
            }
        }
Exemple #13
0
        private void GetDetails()
        {
            DataTable dt = new DataTable();

            dtEXBANK.Rows.Clear();
            dtEXNUBE.Rows.Clear();

            DateTime dtfirstDayOfNextMonth = new DateTime(Convert.ToDateTime(dtpDOB.SelectedDate).Year, Convert.ToDateTime(dtpDOB.SelectedDate).Month, 1).AddMonths(1);
            string   dateMonth             = string.Format("{0:MMyyyy}", dtpDOB.SelectedDate.Value);

            //if (dtpDOB.SelectedDate > Convert.ToDateTime("28/FEB/2018").Date)
            //{
            using (SqlConnection con = new SqlConnection(AppLib.connStr))
            {
                con.Open();
                string sWhere = "";
                if (!string.IsNullOrEmpty(cmbBankName.Text))
                {
                    sWhere = " AND BB.NUBE_BRANCH_CODE=" + cmbBankName.SelectedValue;
                }
                else
                {
                    sWhere = "";
                }

                if (!string.IsNullOrEmpty(cmbBank.Text))
                {
                    sWhere = sWhere + " AND MB.BANK_NAME='" + cmbBank.Text + "'";
                }


                if (!string.IsNullOrEmpty(cmbBranch.Text))
                {
                    sWhere = sWhere + " AND BB.BANKBRANCH_NAME='" + cmbBranch.Text + "'";
                }


                if (Convert.ToInt32(cmbBankName.SelectedValue) == 11)
                {
                    if (chkMelaka.IsChecked == true && chkNegeriSembilan.IsChecked == false)
                    {
                        sWhere = sWhere + " AND (MS.STATE_NAME LIKE '%MELAKA%') ";
                    }
                    else if (chkMelaka.IsChecked == false && chkNegeriSembilan.IsChecked == true)
                    {
                        sWhere = sWhere + " AND (MS.STATE_NAME NOT LIKE '%MELAKA%') ";
                    }
                }
                DateTime dtSelect = dtpDOB.SelectedDate.Value;
                dtSelect = new DateTime(dtSelect.Year, dtSelect.Month, 1);
                Qry      = string.Format(" SELECT ISNULL(NB.NUBE_BRANCH_NAME,'') AS NUBE_BRANCH_NAME,ISNULL(MB.BANK_NAME,'') AS BANK_NAME, \r" +
                                         " ISNULL(MB.BANK_USERCODE, '') + '_' + ISNULL(BB.BANKBRANCH_USERCODE, '') AS BANKBRANCH, \r" +
                                         " ISNULL(MM.SEX, '') AS SEX, ISNULL(MM.RACE_CODE, 0) AS RACE_CODE, \r" +
                                         " (CASE WHEN ST.STATUS_CODE = 1 THEN 1.0 ELSE 2.0  END) STATUS \r" +
                                         " FROM MemberMonthEndStatus ST(NOLOCK)\r" +
                                         " LEFT JOIN MASTERMEMBER MM(NOLOCK) ON MM.MEMBER_CODE = ST.MEMBER_CODE \r" +
                                         " LEFT JOIN MASTERBANK MB(NOLOCK) ON MB.BANK_CODE = ST.BANK_CODE \r" +
                                         " LEFT JOIN MASTERBANKBRANCH BB(NOLOCK) ON BB.BANKBRANCH_CODE = ST.BRANCH_CODE \r" +
                                         " LEFT JOIN MASTERNUBEBRANCH NB(NOLOCK) ON NB.NUBE_BRANCH_CODE = BB.NUBE_BRANCH_CODE \r" +
                                         " LEFT JOIN MASTERSTATE MS(NOLOCK) ON MS.STATE_CODE = BB.BANKBRANCH_STATE_CODE   \r" +
                                         " WHERE ST.StatusMonth = '{0:yyyy/MM/dd}' and ST.STATUS_CODE IN(1,2) " + sWhere + " \r ORDER BY NB.NUBE_BRANCH_NAME ", dtSelect);

                //if ((Convert.ToDateTime(dtpDOB.SelectedDate).Year >= 2016 && Convert.ToDateTime(dtpDOB.SelectedDate).Month > 3) || Convert.ToDateTime(dtpDOB.SelectedDate).Year > 2016)
                //{
                //    Qry = string.Format(" SELECT ISNULL(NB.NUBE_BRANCH_NAME,'') AS NUBE_BRANCH_NAME,ISNULL(MB.BANK_NAME,'') AS BANK_NAME, \r" +
                //                    " ISNULL(MB.BANK_USERCODE, '') + '_' + ISNULL(BB.BANKBRANCH_USERCODE, '') AS BANKBRANCH, \r" +
                //                    " ISNULL(MM.SEX, '') AS SEX, ISNULL(MM.RACE_CODE, 0) AS RACE_CODE, \r" +
                //                    " (CASE WHEN ST.STATUS_CODE = 1 THEN 1.0 ELSE 2.0  END) STATUS \r" +
                //                    " FROM NUBESTATUS..STATUS{0:MMyyyy} ST(NOLOCK)\r" +
                //                    " LEFT JOIN MASTERMEMBER MM(NOLOCK) ON MM.MEMBER_CODE = ST.MEMBER_CODE \r" +
                //                    " LEFT JOIN MASTERBANK MB(NOLOCK) ON MB.BANK_CODE = ST.BANK_CODE \r" +
                //                    " LEFT JOIN MASTERBANKBRANCH BB(NOLOCK) ON BB.BANKBRANCH_CODE = ST.BRANCH_CODE \r" +
                //                    " LEFT JOIN MASTERNUBEBRANCH NB(NOLOCK) ON NB.NUBE_BRANCH_CODE = st.NUBE_BRANCH_CODE \r" +
                //                    " LEFT JOIN MASTERSTATE MS(NOLOCK) ON MS.STATE_CODE = BB.BANKBRANCH_STATE_CODE   \r" +
                //                    " WHERE ST.STATUS_CODE IN(1,2) " + sWhere + " \r ORDER BY NB.NUBE_BRANCH_NAME ", dtpDOB.SelectedDate);
                //}
                //else
                //{
                //    Qry = string.Format(" SELECT ISNULL(NB.NUBE_BRANCH_NAME,'') AS NUBE_BRANCH_NAME,ISNULL(MB.BANK_NAME,'') AS BANK_NAME, \r" +
                //                    " ISNULL(MB.BANK_USERCODE, '') + '_' + ISNULL(BB.BANKBRANCH_USERCODE, '') AS BANKBRANCH, \r" +
                //                    " ISNULL(MM.SEX, '') AS SEX, ISNULL(MM.RACE_CODE, 0) AS RACE_CODE, \r" +
                //                    " (CASE WHEN ST.STATUS_CODE=1 THEN 1.0 ELSE 2.0  END) STATUS \r" +
                //                    " FROM NUBESTATUS..STATUS{0:MMyyyy} ST(NOLOCK)\r" +
                //                    " LEFT JOIN MASTERMEMBER MM(NOLOCK) ON MM.MEMBER_CODE=ST.MEMBER_CODE \r" +
                //                    " LEFT JOIN MASTERBANK MB(NOLOCK) ON MB.BANK_CODE=ST.BANK_CODE \r" +
                //                    " LEFT JOIN MASTERBANKBRANCH BB(NOLOCK) ON BB.BANKBRANCH_CODE=ST.BRANCH_CODE \r" +
                //                    " LEFT JOIN MASTERNUBEBRANCH NB(NOLOCK) ON NB.NUBE_BRANCH_CODE=ST.NUBE_BRANCH_CODE \r" +
                //                    " LEFT JOIN MASTERSTATE MS(NOLOCK) ON MS.STATE_CODE = BB.BANKBRANCH_STATE_CODE   \r" +
                //                    " WHERE ST.STATUS_CODE IN(1,2) " + sWhere + " \r ORDER BY NB.NUBE_BRANCH_NAME ", dtpDOB.SelectedDate);
                //}


                SqlCommand     cmd = new SqlCommand(Qry, con);
                SqlDataAdapter sdp = new SqlDataAdapter(cmd);
                sdp.SelectCommand.CommandTimeout = 0;
                sdp.Fill(dt);
            }
            if (dt.Rows.Count > 0)
            {
                var datas = (from DataRow row in dt.Rows
                             select new
                {
                    Bank_Name = (string)(row["BANK_NAME"] ?? ""),
                    Nube_branch_code = (string)(row["NUBE_BRANCH_NAME"] ?? ""),
                    Branch_Code = (string)(row["BANKBRANCH"] ?? ""),
                    SEX = (string)(row["SEX"] ?? ""),
                    RACE_CODE = (decimal)(row["RACE_CODE"]),
                    MEMBERTYPE_CODE = (decimal)(row["STATUS"])
                }).ToList();

                var BankBranchDatas1 = datas.GroupBy(x => x.Branch_Code).ToList();
                var BankBranchdatas2 = BankBranchDatas1.Select(x => new branchStatistics
                {
                    BranchCode = x.Key.ToString(),

                    CMM = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMI = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMC = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMO = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 1).Count(),

                    CFM = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFI = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFC = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFO = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 1).Count(),

                    NFM = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFI = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFC = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFO = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 2).Count(),

                    NMM = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMI = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMC = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMO = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 2).Count()
                });
                var BankBranchDatas3 = BankBranchdatas2.Select(x => new branchStatistics
                {
                    BranchCode = x.BranchCode,
                    CMM        = x.CMM,
                    CMI        = x.CMI,
                    CMC        = x.CMC,
                    CMO        = x.CMO,
                    CMSTOT     = x.CMM + x.CMI + x.CMC + x.CMO,
                    CFC        = x.CFC,
                    CFI        = x.CFI,
                    CFM        = x.CFM,
                    CFO        = x.CFO,
                    CFSTOT     = x.CFO + x.CFM + x.CFI + x.CFC,
                    CTOTAL     = x.CMM + x.CMI + x.CMC + x.CMO + x.CFO + x.CFM + x.CFI + x.CFC,

                    NMM    = x.NMM,
                    NMI    = x.NMI,
                    NMO    = x.NMO,
                    NMC    = x.NMC,
                    NMSTOT = x.NMM + x.NMI + x.NMO + x.NMC,
                    NFC    = x.NFC,
                    NFM    = x.NFM,
                    NFI    = x.NFI,
                    NFO    = x.NFO,
                    NFSTOT = x.NFC + x.NFM + x.NFI + x.NFO,

                    NTOTAL = x.NMM + x.NMI + x.NMO + x.NMC + x.NFC + x.NFM + x.NFI + x.NFO,
                    GTOTAL = x.CMM + x.CMI + x.CMC + x.CMO + x.CFO + x.CFM + x.CFI + x.CFC + x.NMM + x.NMI + x.NMO + x.NMC + x.NFC + x.NFM + x.NFI + x.NFO
                }).ToList();
                dgvBankStatistics.ItemsSource = BankBranchDatas3;
                dtEXBANK = AppLib.LINQResultToDataTable(BankBranchDatas3);

                MemberReport.Reset();
                if (dtEXBANK.Rows.Count > 0)
                {
                    ReportDataSource masterData = new ReportDataSource("BANKBRANCHSTATISTICAL", dtEXBANK);

                    MemberReport.LocalReport.DataSources.Add(masterData);
                    MemberReport.LocalReport.ReportEmbeddedResource = "Nube.Reports.rptBranchStaticsReport.rdlc";
                    ReportParameter[] NB = new ReportParameter[2];

                    NB[0] = new ReportParameter("Month", string.Format("{0:MMM - yyyy}", dtpDOB.SelectedDate));

                    if (!string.IsNullOrEmpty(cmbBank.Text))
                    {
                        NB[1] = new ReportParameter("ReportName", "NUBE BRANCH - " + cmbBank.Text.ToString());
                    }
                    else
                    {
                        NB[1] = new ReportParameter("ReportName", "OVER ALL BANK BRANCH");
                    }
                    MemberReport.LocalReport.SetParameters(NB);
                    MemberReport.RefreshReport();

                    //using (SqlConnection con = new SqlConnection(AppLib.connStr))
                    //{
                    //    SqlCommand cmd;
                    //    string str = "";
                    //    if (!string.IsNullOrEmpty(cmbBank.Text))
                    //    {
                    //        str = "";
                    //    }
                    //    else
                    //    {

                    //    }
                    //    cmd = new SqlCommand("SELECT ST.MEMBERTYPE_NAME,COUNT(*) TOTAL \r" +
                    //        " FROM TEMPVIEWMASTERMEMBER ST(NOLOCK)\r" +
                    //        " WHERE ST.MEMBERSTATUSCODE IN(1,2) AND ST.DATEOFJOINING < '2017-03-01' AND--ST.NUBEBANCHCODE = 11\r" +
                    //        " GROUP BY ST.MEMBERTYPE_NAME\r" +
                    //        " ORDER BY ST.MEMBERTYPE_NAME", con);
                    //}
                }
                //dgvBranch
                var NubeBranchDatas1 = datas.GroupBy(x => x.Nube_branch_code).ToList();
                var NubeBranchdatas2 = NubeBranchDatas1.Select(x => new branchStatistics
                {
                    BranchCode = x.Key.ToString(),

                    CMM = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMI = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMC = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 1).Count(),
                    CMO = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 1).Count(),

                    CFM = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFI = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFC = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 1).Count(),
                    CFO = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 1).Count(),

                    NFM = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFI = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFC = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 2).Count(),
                    NFO = x.Where(y => y.SEX == "Female" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 2).Count(),

                    NMM = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 1 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMI = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 2 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMC = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 3 && y.MEMBERTYPE_CODE == 2).Count(),
                    NMO = x.Where(y => y.SEX == "Male" && y.RACE_CODE == 4 && y.MEMBERTYPE_CODE == 2).Count()
                });
                var NubeBranchDatas3 = NubeBranchdatas2.Select(x => new branchStatistics
                {
                    BranchCode = x.BranchCode,
                    CMM        = x.CMM,
                    CMI        = x.CMI,
                    CMC        = x.CMC,
                    CMO        = x.CMO,
                    CMSTOT     = x.CMM + x.CMI + x.CMC + x.CMO,
                    CFC        = x.CFC,
                    CFI        = x.CFI,
                    CFM        = x.CFM,
                    CFO        = x.CFO,
                    CFSTOT     = x.CFO + x.CFM + x.CFI + x.CFC,
                    CTOTAL     = x.CMM + x.CMI + x.CMC + x.CMO + x.CFO + x.CFM + x.CFI + x.CFC,

                    NMM    = x.NMM,
                    NMI    = x.NMI,
                    NMO    = x.NMO,
                    NMC    = x.NMC,
                    NMSTOT = x.NMM + x.NMI + x.NMO + x.NMC,
                    NFC    = x.NFC,
                    NFM    = x.NFM,
                    NFI    = x.NFI,
                    NFO    = x.NFO,
                    NFSTOT = x.NFC + x.NFM + x.NFI + x.NFO,

                    NTOTAL = x.NMM + x.NMI + x.NMO + x.NMC + x.NFC + x.NFM + x.NFI + x.NFO,
                    GTOTAL = x.CMM + x.CMI + x.CMC + x.CMO + x.CFO + x.CFM + x.CFI + x.CFC + x.NMM + x.NMI + x.NMO + x.NMC + x.NFC + x.NFM + x.NFI + x.NFO
                }).ToList();
                dgvNubeStatistics.ItemsSource = NubeBranchDatas3;
                dtEXNUBE = AppLib.LINQResultToDataTable(NubeBranchDatas3);

                MemberReport2.Reset();
                if (dtEXNUBE.Rows.Count > 0)
                {
                    ReportDataSource masterData = new ReportDataSource("NUBEBRANCHSTATISTICAL", dtEXNUBE);

                    MemberReport2.LocalReport.DataSources.Add(masterData);
                    MemberReport2.LocalReport.ReportEmbeddedResource = "Nube.Reports.rptBranchStaticsReportNubeBranch.rdlc";
                    ReportParameter[] NB2 = new ReportParameter[2];

                    NB2[0] = new ReportParameter("Month", string.Format("{0:MMM - yyyy}", dtpDOB.SelectedDate));

                    if (!string.IsNullOrEmpty(cmbBank.Text))
                    {
                        NB2[1] = new ReportParameter("ReportName", "NUBE BRANCH - " + cmbBank.Text.ToString());
                    }
                    else
                    {
                        NB2[1] = new ReportParameter("ReportName", "OVER ALL - NUBE BRANCH");
                    }
                    MemberReport2.LocalReport.SetParameters(NB2);
                    MemberReport2.RefreshReport();
                }

                //Bank

                var BankDatas1 = datas.GroupBy(x => x.Bank_Name).ToList();
                var BankDatas2 = BankDatas1.Select(x => new branchStatistics
                {
                    Bank = x.Key.ToString(),

                    CMM = x.Where(y => y.SEX == "Male" && y.MEMBERTYPE_CODE == 1).Count(),

                    CFM = x.Where(y => y.SEX == "Female" && y.MEMBERTYPE_CODE == 1).Count(),

                    NFM = x.Where(y => y.SEX == "Female" && y.MEMBERTYPE_CODE == 2).Count(),

                    NMM = x.Where(y => y.SEX == "Male" && y.MEMBERTYPE_CODE == 2).Count(),
                });
                var BankDatas3 = BankDatas2.Select(x => new branchStatistics
                {
                    Bank = x.Bank,
                    CMM  = x.CMM,

                    CFM = x.CFM,

                    NMM = x.NMM,
                    NFM = x.NFM,

                    GTOTAL = x.CMM + x.CFM + x.NMM + x.NFM
                }).ToList();
                dgvBankList.ItemsSource = BankDatas3;
            }
            else
            {
                MessageBox.Show("No Records Found!");
            }
            //}
            //else
            //{
            //    MessageBox.Show("No Records Found!");
            //}
        }
Exemple #14
0
        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (cmbBankName.Text == "")
                {
                    MessageBox.Show("Enter Bank..", "Information");
                    txtBranchName.Focus();
                }

                else if (txtBranchCode.Text == "")
                {
                    MessageBox.Show("Enter Branchcode..", "Information");
                    txtBranchCode.Focus();
                }
                else if (txtBranchName.Text == "")
                {
                    MessageBox.Show("Enter Branchname..", "Information");
                }
                else
                {
                    if (MessageBox.Show("Do you want to save this record?", "SAVE", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                    {
                        if (ID != 0)
                        {
                            decimal          id = (decimal)ID;
                            var              s  = cmbBankName.Text.ToString();
                            MASTERBANKBRANCH mb = db.MASTERBANKBRANCHes.Where(x => x.BANKBRANCH_CODE == id).FirstOrDefault();

                            //var OldData = new JSonHelper().ConvertObjectToJSon(mb);

                            mb.BANK_CODE             = Convert.ToDecimal(cmbBankName.SelectedValue);
                            mb.BANKBRANCH_NAME       = txtBranchName.Text;
                            mb.BANKBRANCH_USERCODE   = txtBranchCode.Text;
                            mb.BANKBRANCH_ADDRESS1   = txtAddress1.Text;
                            mb.BANKBRANCH_ADDRESS2   = txtAddress2.Text;
                            mb.BANKBRANCH_ADDRESS3   = txtAddress3.Text;
                            mb.BANKBRANCH_CITY_CODE  = Convert.ToDecimal(cmbCity.SelectedValue);
                            mb.BANKBRANCH_COUNTRY    = (cmbCountry.Text.ToString() == null ? "" : cmbCountry.Text.ToString());
                            mb.BANKBRANCH_EMAIL      = txtEmail.Text;
                            mb.BANKBRANCH_PHONE1     = txtMobile.Text;
                            mb.BANKBRANCH_PHONE2     = txtPhone.Text;
                            mb.BANKBRANCH_STATE_CODE = Convert.ToDecimal(cmbState.SelectedValue);
                            mb.BANKBRANCH_ZIPCODE    = txtPostalCode.Text;
                            mb.NUBE_BRANCH_CODE      = Convert.ToDecimal(cmbNUBEBranch.SelectedValue);
                            mb.HEAD_QUARTERS         = Convert.ToDecimal(ckbHeadOffice.IsChecked);

                            db.SaveChanges();
                            AppLib.lstMASTERBANKBRANCH = db.MASTERBANKBRANCHes.OrderBy(x => x.BANKBRANCH_NAME).ToList();

                            //var NewData = new JSonHelper().ConvertObjectToJSon(mb);
                            //AppLib.EventHistory(this.Tag.ToString(), 1, OldData, NewData, "MASTERBANKBRANCH");

                            MessageBox.Show("Saved Successfully", "Saved");
                            ClearForm();
                        }
                        else
                        {
                            MASTERBANKBRANCH mb = new MASTERBANKBRANCH();
                            mb.BANK_CODE             = Convert.ToDecimal(cmbBankName.SelectedValue);
                            mb.BANKBRANCH_NAME       = txtBranchName.Text;
                            mb.BANKBRANCH_USERCODE   = txtBranchCode.Text;
                            mb.BANKBRANCH_ADDRESS1   = txtAddress1.Text;
                            mb.BANKBRANCH_ADDRESS2   = txtAddress2.Text;
                            mb.BANKBRANCH_ADDRESS3   = txtAddress3.Text;
                            mb.BANKBRANCH_CITY_CODE  = Convert.ToDecimal(cmbCity.SelectedValue);
                            mb.BANKBRANCH_COUNTRY    = (cmbCountry.Text.ToString() == null ? "" : cmbCountry.Text.ToString());
                            mb.BANKBRANCH_EMAIL      = txtEmail.Text;
                            mb.BANKBRANCH_PHONE1     = txtMobile.Text;
                            mb.BANKBRANCH_PHONE2     = txtPhone.Text;
                            mb.BANKBRANCH_STATE_CODE = Convert.ToDecimal(cmbState.SelectedValue);
                            mb.BANKBRANCH_ZIPCODE    = txtPostalCode.Text;
                            mb.NUBE_BRANCH_CODE      = Convert.ToDecimal(cmbNUBEBranch.SelectedValue);
                            mb.HEAD_QUARTERS         = Convert.ToDecimal(ckbHeadOffice.IsChecked);

                            db.MASTERBANKBRANCHes.Add(mb);
                            db.SaveChanges();
                            AppLib.lstMASTERBANKBRANCH = db.MASTERBANKBRANCHes.OrderBy(x => x.BANKBRANCH_NAME).ToList();

                            var NewData = new JSonHelper().ConvertObjectToJSon(mb);
                            AppLib.EventHistory(this.Tag.ToString(), 0, "", NewData, "MASTERBANKBRANCH");

                            MessageBox.Show("Saved Successfully!", "Saved");
                            ClearForm();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Nube.ExceptionLogging.SendErrorToText(ex);
            }
        }
Exemple #15
0
        public override void ReceivedData(AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            FileLog.PrintF("ReceivedData OPT10075");
            //try {

            /*
             * sScrNo – 화면번호
             * sRQName – 사용자구분 명
             * sTrCode – Tran 명
             * sRecordName – Record 명
             * sPreNext – 연속조회 유무
             */
            String 계좌번호 = "XXXXXXXXXX";
            int    nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);
            String keyStockCodeLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}";
            String keyStockCode       = String.Format(keyStockCodeLayout
                                                      , e.sRQName
                                                      , e.sTrCode
                                                      , e.sScrNo
                                                      );

            계좌번호 = AppLib.getClass1Instance().getStockCode(keyStockCode);

            String keyLayout = "sRQName:{0}|sTrCode:{1}|sScreenNo:{2}|accountNum:{3}";
            String key       = String.Format(keyLayout
                                             , e.sRQName
                                             , e.sTrCode
                                             , e.sScrNo
                                             , 계좌번호
                                             );

            List <OPT10075_Data> OPT10075_DataList = new List <OPT10075_Data>();


            if (nCnt > 0)
            {
                for (int i = 0; i < nCnt; i++)
                {
                    FileLog.PrintF("OPT10075 ReceivedData 계좌번호 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "계좌번호").ToString().Trim());       //[0]
                    FileLog.PrintF("OPT10075 ReceivedData 주문번호 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문번호").ToString().Trim());       //[1]
                    FileLog.PrintF("OPT10075 ReceivedData 관리사번 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "관리사번").ToString().Trim());       //[2]
                    FileLog.PrintF("OPT10075 ReceivedData 종목코드 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").ToString().Trim());       //[3]
                    FileLog.PrintF("OPT10075 ReceivedData 업무구분 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "업무구분").ToString().Trim());       //[4]
                    FileLog.PrintF("OPT10075 ReceivedData 주문상태 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문상태").ToString().Trim());       //[5]
                    FileLog.PrintF("OPT10075 ReceivedData 종목명 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").ToString().Trim());         //[6]
                    FileLog.PrintF("OPT10075 ReceivedData 주문수량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문수량").ToString().Trim());       //[7]
                    FileLog.PrintF("OPT10075 ReceivedData 주문가격 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문가격").ToString().Trim());       //[8]
                    FileLog.PrintF("OPT10075 ReceivedData 미체결수량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미체결수량").ToString().Trim());     //[9]
                    FileLog.PrintF("OPT10075 ReceivedData 체결누적금액 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결누적금액").ToString().Trim());   //[10]
                    FileLog.PrintF("OPT10075 ReceivedData 원주문번호 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "원주문번호").ToString().Trim());     //[11]
                    FileLog.PrintF("OPT10075 ReceivedData 주문구분 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문구분").ToString().Trim());       //[12]
                    FileLog.PrintF("OPT10075 ReceivedData 매매구분 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매매구분").ToString().Trim());       //[13]
                    FileLog.PrintF("OPT10075 ReceivedData 시간 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시간").ToString().Trim());           //[14]
                    FileLog.PrintF("OPT10075 ReceivedData 체결번호 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결번호").ToString().Trim());       //[15]
                    FileLog.PrintF("OPT10075 ReceivedData 체결가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결가").ToString().Trim());         //[16]
                    FileLog.PrintF("OPT10075 ReceivedData 체결량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결량").ToString().Trim());         //[17]
                    FileLog.PrintF("OPT10075 ReceivedData 현재가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").ToString().Trim());         //[18]
                    FileLog.PrintF("OPT10075 ReceivedData 매도호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도호가").ToString().Trim());       //[19]
                    FileLog.PrintF("OPT10075 ReceivedData 매수호가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수호가").ToString().Trim());       //[20]
                    FileLog.PrintF("OPT10075 ReceivedData 단위체결가 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "단위체결가").ToString().Trim());     //[21]
                    FileLog.PrintF("OPT10075 ReceivedData 단위체결량 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "단위체결량").ToString().Trim());     //[22]
                    FileLog.PrintF("OPT10075 ReceivedData 당일매매수수료 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매수수료").ToString().Trim()); //[23]
                    FileLog.PrintF("OPT10075 ReceivedData 단일매매세금 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "단일매매세금").ToString().Trim());   //[24]
                    FileLog.PrintF("OPT10075 ReceivedData 개인투자자 =>" + axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "개인투자자").ToString().Trim());     //[25]

                    OPT10075_Data opt10075_Data = new OPT10075_Data();

                    String 현재일자    = DateTime.Now.ToString("yyyy-MM-dd");
                    String 체결시간TMP = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시간").ToString().Trim(); //[14]
                                                                                                                   //체결시간이 6자리이므로 HHMMSS ==> HH:MM:SS로 바꿔야한다.
                    String 체결시간 = 체결시간TMP.Substring(0, 2) + ":" + 체결시간TMP.Substring(2, 2) + ":" + 체결시간TMP.Substring(4, 2);
                    opt10075_Data.체결시간 = 현재일자 + " " + 체결시간;



                    opt10075_Data.계좌번호   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "계좌번호").ToString().Trim();              //[0]
                    opt10075_Data.주문번호   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문번호").ToString().Trim();              //[1]
                    opt10075_Data.관리사번   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "관리사번").ToString().Trim();              //[2]
                    opt10075_Data.종목코드   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목코드").ToString().Trim();              //[3]
                    opt10075_Data.업무구분   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "업무구분").ToString().Trim();              //[4]
                    opt10075_Data.주문상태   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문상태").ToString().Trim();              //[5]
                    opt10075_Data.종목명    = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").ToString().Trim();               //[6]
                    opt10075_Data.주문수량   = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문수량").ToString().Trim());   //[7]
                    opt10075_Data.주문가격   = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문가격").ToString().Trim());   //[8]
                    opt10075_Data.미체결수량  = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "미체결수량").ToString().Trim());  //[9]
                    opt10075_Data.체결누계금액 = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결누계금액").ToString().Trim()); //[10]
                    opt10075_Data.원주문번호  = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "원주문번호").ToString().Trim();             //[11]
                    opt10075_Data.주문구분   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "주문구분").ToString().Trim();              //[12]
                    opt10075_Data.매매구분   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매매구분").ToString().Trim();              //[13]
                    opt10075_Data.체결번호   = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결번호").ToString().Trim();              //[15]
                    opt10075_Data.체결가    = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결가").ToString().Trim());    //[16]
                    opt10075_Data.체결량    = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "체결량").ToString().Trim());    //[17]
                    opt10075_Data.현재가    = int.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").ToString().Trim());    //[18]
                    String str매도호가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매도호가").ToString().Trim();                    //[19]
                    opt10075_Data.매도호가 = 0;
                    if (!str매도호가.Equals(""))
                    {
                        opt10075_Data.매도호가 = int.Parse(str매도호가);
                    }
                    String str매수호가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "매수호가").ToString().Trim(); //[20]
                    opt10075_Data.매수호가 = 0;
                    if (!str매수호가.Equals(""))
                    {
                        opt10075_Data.매수호가 = int.Parse(str매수호가);
                    }
                    String str단위체결가 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "단위체결가").ToString().Trim(); //[21]
                    opt10075_Data.단위체결가 = 0;
                    if (!str단위체결가.Equals(""))
                    {
                        opt10075_Data.단위체결가 = int.Parse(str단위체결가);
                    }
                    String str단위체결량 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "단위체결량").ToString().Trim(); //[22]
                    opt10075_Data.단위체결량 = 0;
                    if (!str단위체결량.Equals(""))
                    {
                        opt10075_Data.단위체결량 = int.Parse(str단위체결량);
                    }
                    String str당일매매수수료 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매수수료").ToString().Trim(); //[23]
                    opt10075_Data.당일매매수수료 = 0;
                    if (!str당일매매수수료.Equals(""))
                    {
                        opt10075_Data.당일매매수수료 = int.Parse(str당일매매수수료);
                    }
                    String str당일매매세금 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "당일매매세금").ToString().Trim(); //[24]
                    opt10075_Data.당일매매세금 = 0;
                    if (!str당일매매세금.Equals(""))
                    {
                        opt10075_Data.당일매매세금 = int.Parse(str당일매매세금);
                    }
                    opt10075_Data.개인투자자 = axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "개인투자자").ToString().Trim(); //[25]


                    //(8025-8089)/8089*100
                    //24005=23775+160+70
                    //24005-24575=-570
                    //24805
                    OPT10075_DataList.Add(opt10075_Data);
                }
            }


            //이것은 연속적이지 않기 때문에 바로 제거 한다.
            AppLib.getClass1Instance().removeSpellDictionary(spell.key);
            int    position = spell.key.LastIndexOf("|");
            String key1     = spell.key.Substring(0, position);

            AppLib.getClass1Instance().removeStockCodeDictionary(key1);
            //래치를 호출해서 잠김을 제거한다.--래치 일단 제거 호출하는데도 제거 했다. 1초에 5번 호출 규칙만 적용해보자.
            AppLib.getClass1Instance().setOpt10081(spell.sTrCode);

            //DailyData dd = new DailyData();
            //dd.insertOpt10001(tmp);
        }
Exemple #16
0
        /// <summary>
        /// Создает и размещает на одной странице панели заказов (тип OrderPanel).
        /// </summary>
        /// <param name="orders">Список заказов (тип OrderViewModel)</param>
        /// <param name="orderIndex">Индекс заказа, начиная с которого будут строиться панели</param>
        /// <param name="dishIndex">Индекс блюда, начиная с которогу будут строиться панели</param>
        /// <param name="isPanelsForward">Признак того, что коллекция orders будет листаться вперед, от стартовой позиции к концу набора</param>
        /// <returns></returns>
        internal void DrawOrderPanelsOnPage(List <OrderViewModel> orders, int orderStartIndex, int dishStartIndex, bool isPanelsForward, bool keepSplitOrderOnLastColumnByForward)
        {
            _canvas.Children.Clear();
            if (orders == null)
            {
                return;
            }
            if (orderStartIndex >= orders.Count)
            {
                return;
            }
            if (orders.Count == 0)
            {
                return;
            }

            OrderViewModel orderModel;

            _shiftForward = isPanelsForward;
            _pageBreak    = false;

            int  dishIdxFrom = -1, dishIdxTo = -1;
            bool bSplit = false;

            // инициализация переменных размещения
            if (_shiftForward)
            {
                curColIndex = 1; curTopValue = 0;
            }
            else
            {
                curColIndex = _pageColsCount; curTopValue = _colHeight;
            }
            double freeHeight = getFreeHeight();

            if (orderStartIndex < 0)
            {
                orderStartIndex = 0;
            }

            // цикл по заказам
            for (int iOrd = orderStartIndex;
                 ((_shiftForward) ? iOrd < orders.Count : iOrd >= 0) && (!_pageBreak);
                 iOrd += (_shiftForward) ? 1 : -1)
            {
                // текущий заказ
                orderModel = orders[iOrd];
                bSplit     = false;

                // 1. создать панель заказа со всеми блюдами и разделителями подач
                #region текущие начальный и конечный индексы БЛЮД
                //   для последующих заказов - все блюда
                if (dishStartIndex < 0)
                {
                    dishIdxFrom = 0; dishIdxTo = orderModel.Dishes.Count - 1;
                }
                //   для первого заказа - часть блюд
                else
                {
                    if (_shiftForward)
                    {
                        dishIdxFrom = dishStartIndex;
                        dishIdxTo   = orderModel.Dishes.Count - 1;
                    }
                    else
                    {
                        dishIdxFrom = 0;
                        dishIdxTo   = dishStartIndex;
                        // в обратном порядке с непоследнего, поэтому добавляется разделитель переноса
                        if (dishIdxTo < (orderModel.Dishes.Count - 1))
                        {
                            bSplit = true;
                        }
                    }
                }
                #endregion

                DateTime   dtTmr    = DateTime.Now;
                OrderPanel ordPanel = createOrderPanel(orderModel, dishIdxFrom, dishIdxTo, bSplit);
                AppLib.WriteScreenDrawDetails($"   - create order panel N {orderModel.Number} - {(DateTime.Now - dtTmr).ToString()}");

                dishStartIndex = -1;  // для последующих заказов - все блюда
                if (ordPanel == null)
                {
                    continue;
                }

                // получить реальные размеры панели заказа
                dtTmr = DateTime.Now;
                if (_shiftForward)
                {
                    _canvas.Children.Add(ordPanel);
                }
                else
                {
                    _canvas.Children.Insert(0, ordPanel);
                }

                dtTmr = DateTime.Now;
#if fromActualHeight
                ordPanel.UpdateLayout();  // тяжелая операция
                AppLib.WriteLogTraceMessage("   - measure size by UpdateLayout, panel N {0} - {1}", orderModel.Number, (DateTime.Now - dtTmr).ToString());
#else
                // get DesiredSize
                ordPanel.Measure(_sizeMeasure);  // немного легче, чем UpdateLayout
                AppLib.WriteScreenDrawDetails($"   - measure size by Measure/DesiredSize, panel N {orderModel.Number} - {(DateTime.Now - dtTmr).ToString()}");
#endif

                // 2. Размещение панели на странице
                // помещается ли вся панель заказа без разрывов в свободное место
                if (ordPanel.PanelHeight < freeHeight)
                {
                    setLastPanelPosition(ordPanel);
                }
                // надо разбивать панель
                else
                {
                    dtTmr = DateTime.Now;
                    _canvas.Children.Remove(ordPanel);
                    splitOrderViewPanels(ordPanel, keepSplitOrderOnLastColumnByForward);
                    AppLib.WriteScreenDrawDetails("     - split order to some columns - " + (DateTime.Now - dtTmr).ToString());
                }

                freeHeight = getFreeHeight();
            }
        }  // DrawOrderPanelsOnPage
Exemple #17
0
        public static void Main(string[] args)
        {
            // splash
            Splasher.Splash = new SplashScreen();
            Splasher.ShowSplash();
            //for (int i = 0; i < 5000; i += 1)
            //{
            //    MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i));
            //    Thread.Sleep(1);
            //}

            // таймаут запуска приложения
            string cfgValue     = CfgFileHelper.GetAppSetting("StartTimeout");
            int    startTimeout = 0;

            if (cfgValue != null)
            {
                startTimeout = cfgValue.ToInt();
            }
            if (startTimeout != 0)
            {
                for (int i = startTimeout; i > 0; i--)
                {
                    MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд.");
                    System.Threading.Thread.Sleep(1000);
                }
            }

            // текст в MessageListener.Instance прибинден к текстовому полю на сплэше
            MessageListener.Instance.ReceiveMessage("Инициализация журнала событий...");
            AppLib.InitAppLogger();

            AppLib.WriteLogInfoMessage("************  Start KDS Client (WPF) *************");
            // установить текущий каталог на папку с приложением
            string curDir = System.IO.Directory.GetCurrentDirectory();

            if (curDir.Last() != '\\')
            {
                curDir += "\\";
            }
            string appDir = AppEnvironment.GetAppDirectory();

            if (curDir != appDir)
            {
                AppLib.WriteLogInfoMessage("Текущий каталог изменен на папку приложения: " + appDir);
                System.IO.Directory.SetCurrentDirectory(appDir);
            }

            // защита PSW-файлом
            MessageListener.Instance.ReceiveMessage("Проверка лицензии...");
            bool isLoyalClient = false;

            //isLoyalClient = ((args != null) && args.Contains("-autoGenLicence"));
            // ключ реестра HKLM\Software\Integra\autoGenLicence = 01 (binary)
            if (isLoyalClient == false)
            {
                isLoyalClient = RegistryHelper.IsExistsAutoGenLicenceKey();
            }
            pswLib.CheckProtectedResult checkProtectedResult;
            if (pswLib.Hardware.IsCurrentAppProtected("KDSWPFClient", out checkProtectedResult, null, isLoyalClient) == false)
            {
                string errMsg = string.Format("{0}{1}{1}{2}", checkProtectedResult.LogMessage, Environment.NewLine, checkProtectedResult.CustomMessage);
                appExit(2, errMsg);
            }

            MessageListener.Instance.ReceiveMessage("Получение версии приложения...");
            AppLib.WriteLogInfoMessage("Инициализация KDS-клиента...");

            // проверка наличия уникального имени клиента в конфиг-файле
            cfgValue = CfgFileHelper.GetAppSetting("KDSClientName");
            if (cfgValue.IsNull() == true)
            {
                cfgValue = "Не указано имя КДС-клиента в файле AppSettings.config.";
                appExit(3, cfgValue);
            }
            if (cfgValue.Equals("uniqClientName", StringComparison.OrdinalIgnoreCase))
            {
#if (Release == false) && (DEBUG == false)
                cfgValue = "Измените имя КДС-клиента в файле AppSettings.config";
                appExit(3, cfgValue);
#endif
            }
            KDSWPFClient.App app = new KDSWPFClient.App();
            WpfHelper.SetAppGlobalValue("KDSClientName", cfgValue);
            App.ClientName = System.Convert.ToString(WpfHelper.GetAppGlobalValue("KDSClientName"));
            AppLib.WriteLogInfoMessage(" - имя КДС-клиента: {0}", App.ClientName);

            // информация о файлах и сборках
            AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion());
            ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib");
            AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);
            asmInfo = new ITSAssemblyInfo("IntegraWPFLib");
            AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);

            MessageListener.Instance.ReceiveMessage("Получение параметров окружения...");
            AppLib.WriteLogInfoMessage(AppEnvironment.GetEnvironmentString());

            getAppLayout();

            // настройка приложения
            MessageListener.Instance.ReceiveMessage("Получение параметров приложения...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            app.InitializeComponent(); // определенные в app.xaml

            setAppGlobalValues();      // для хранения в свойствах приложения (из config-файла или др.)
            AppLib.WriteLogInfoMessage("App settings from config file: " + CfgFileHelper.GetAppSettingsFromConfigFile());

            // создать каналы
            AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - START");
            AppDataProvider dataProvider = new AppDataProvider();
            try
            {
                MessageListener.Instance.ReceiveMessage("Создание канала получения данных...");
#if !DEBUG
                System.Threading.Thread.Sleep(1000);
#endif
                dataProvider.CreateGetChannel();

                MessageListener.Instance.ReceiveMessage("Создание канала установки данных...");
#if !DEBUG
                System.Threading.Thread.Sleep(1000);
#endif
                dataProvider.CreateSetChannel();

                AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - FINISH");
            }
            catch (Exception)
            {
                AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage);
            }

            // и получить словари и настройки от службы
            MessageListener.Instance.ReceiveMessage("Получаю словари и настройки от службы KDSService...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - START");
            if (dataProvider.SetDictDataFromService() == false)
            {
                // КДСы могут быть уже запущены, а служба еще нет!
                AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage);
                //if (splashScreen != null) splashScreen.Close(TimeSpan.FromMinutes(10));
                //MessageBox.Show("Ошибка получения словарей от службы KDSService:" + Environment.NewLine + dataProvider.ErrorMessage, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ ПРИЛОЖЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                //Environment.Exit(2);
            }
            else
            {
                AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - FINISH");
            }

            WpfHelper.SetAppGlobalValue("AppDataProvider", dataProvider);

            // прочитать из config-а и сохранить в свойствах приложения режим КДС
            MessageListener.Instance.ReceiveMessage("Получаю из config-файла режим работы КДС...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            KDSModeHelper.Init();

            // создать и сохранить в свойствах приложения служебные окна (ColorLegend, StateChange)
            MessageListener.Instance.ReceiveMessage("Создаю служебные окна...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            WpfHelper.SetAppGlobalValue("ColorLegendWindow", new ColorLegend());  // окно легенды
            // окно изменения статуса
            WpfHelper.SetAppGlobalValue("StateChangeWindow", new StateChange());

            // основное окно приложения
            MessageListener.Instance.ReceiveMessage("Инициализация окна приложения...");
#if !DEBUG
            System.Threading.Thread.Sleep(1000);
#endif
            MainWindow mainWindow = new MainWindow(args);
            app.MainWindow = mainWindow;
            app.Run(mainWindow);

            if (dataProvider != null)
            {
                dataProvider.Dispose(); dataProvider = null;
            }
            AppLib.WriteLogInfoMessage("************  End KDS Client (WPF)  *************");
        }  // Main()
Exemple #18
0
        // ctor
        // ДЛЯ НОВОГО БЛЮДА
        public OrderDishModel(OrderDish dbDish, OrderModel modelOrder)
        {
            _modelOrder = modelOrder;

            Id               = dbDish.Id; Uid = dbDish.UID;
            DepartmentId     = dbDish.DepartmentId;
            CreateDate       = dbDish.CreateDate;
            Name             = dbDish.DishName;
            FilingNumber     = dbDish.FilingNumber;
            ParentUid        = dbDish.ParentUid;
            Comment          = dbDish.Comment;
            Quantity         = dbDish.Quantity;
            DelayedStartTime = dbDish.DelayedStartTime;
            UID1C            = dbDish.UID1C;

            // свойства объекта с зависимыми полями

            EstimatedTime       = dbDish.EstimatedTime;
            _tsCookingEstimated = TimeSpan.FromSeconds(this.EstimatedTime);

            DishStatusId = dbDish.DishStatusId;
            Status       = AppLib.GetStatusEnumFromNullableInt(dbDish.DishStatusId);

            // получить запись из таблицы состояний
            _dbRunTimeRecord = getOrderDishRunTimeRecord(dbDish.Id);

            _isDish = ParentUid.IsNull();
            _isUseReadyConfirmed        = AppProperties.GetBoolProperty("UseReadyConfirmedState");
            _autoGotoReadyConfirmPeriod = AppProperties.GetIntProperty("AutoGotoReadyConfirmPeriod");

            // словарь дат входа в состояние
            _dtEnterStatusDict = new Dictionary <OrderStatusEnum, DateTime>();
            foreach (var item in Enum.GetValues(typeof(OrderStatusEnum)))
            {
                _dtEnterStatusDict.Add((OrderStatusEnum)item, DateTime.MinValue);
            }

            // создать словарь накопительных счетчиков
            _tsTimersDict = new Dictionary <OrderStatusEnum, TimeCounter>();
            // таймер ожидания начала приготовления
            _tsTimersDict.Add(OrderStatusEnum.WaitingCook, new TimeCounter()
            {
                Name = OrderStatusEnum.WaitingCook.ToString()
            });
            // таймер времени приготовления
            _tsTimersDict.Add(OrderStatusEnum.Cooking, new TimeCounter()
            {
                Name = OrderStatusEnum.Cooking.ToString()
            });
            // таймер времени ожидания выдачи, нахождение в состоянии Готов
            _tsTimersDict.Add(OrderStatusEnum.Ready, new TimeCounter()
            {
                Name = OrderStatusEnum.Ready.ToString()
            });
            if (_isUseReadyConfirmed)
            {
                _tsTimersDict.Add(OrderStatusEnum.ReadyConfirmed, new TimeCounter()
                {
                    Name = OrderStatusEnum.ReadyConfirmed.ToString()
                });
            }
            // таймер времени ожидания фиксации заказа, нахождение в состоянии Выдано
            _tsTimersDict.Add(OrderStatusEnum.Took, new TimeCounter()
            {
                Name = OrderStatusEnum.Took.ToString()
            });
            // таймер нахождения в состоянии отмены
            _tsTimersDict.Add(OrderStatusEnum.Cancelled, new TimeCounter()
            {
                Name = OrderStatusEnum.Cancelled.ToString()
            });


            // отмененное блюдо/ингредиент
            // для новой записи сразу сохраняем в БД
            if (Quantity < 0)
            {
                if (Status != OrderStatusEnum.Cancelled)
                {
                    UpdateStatus(OrderStatusEnum.Cancelled);
                }
                else
                {
                    startStatusTimerAtFirst();
                }
            }
            else
            {
                UpdateFromDBEntity(dbDish);  // для новой записи DTS не сохранен
                startStatusTimerAtFirst();
            }
        }  // constructor
Exemple #19
0
        static void MemberInitScanByBankCode(decimal BANK_CODE)
        {
            try
            {
                AppLib.WriteLogFileName = "NUBE_" + "MemberInitScanByBankCode";
                AppLib.WriteLogDT("START:");
                AppLib.WriteLog("MemberInitScanByBankCode");
                AppLib.WriteLog("------------------------");
                AppLib.WriteLog("");
                AppLib.WriteLog("");

                var bank = db.MASTERBANKs.FirstOrDefault(x => x.BANK_CODE == BANK_CODE);
                if (bank != null)
                {
                    AppLib.WriteLog("Bank Id: {0}, Bank Code : {1}, Bank Name : {2}", bank.BANK_CODE, bank.BANK_USERCODE, bank.BANK_NAME);
                    AppLib.DisplayClear();
                    int i = 1;
                    AppLib.WriteLog("{0,5} {1,-10} {2,-10} {3,-50} {4,-15} {5,-15} {6,-10} {7,-10} {8,-10} {9,-10} {10,-10} {11,-10} {12,-10} {13,-10} {14,-10} {15,-10} {16,-10} {17,-10} {18,-10} {19,-10} {20,-10} {21,-10} {22,-10} {23,-10} {24,-10}", "SNo", "Code", "MemberNo", "Member Name", "IC Old", "IC New", "DOB", "DOJ", "MEND", "LPAID", "SUBSAMT", "TSUBSAMT", "ACCSUBS", "SUBSDUE", "BFAMT", "TBFAMT", "ACCBF", "BFDUE", "TOTMNTS", "TOTMNTSPAD", "TOTMNTSDUE", "STATUSCDE", "RESIGNED", "STRUCKOFF", "STATUS");
                    var lstMember = db.MASTERMEMBERs.Where(x => x.BANK_CODE == BANK_CODE).OrderBy(x => x.DATEOFJOINING).Select(x => x.MEMBER_CODE).ToList();
                    foreach (var mmCode in lstMember)
                    {
                        AppLib.DisplayMsg(1, 1, string.Format("[ {0,10} - {1} ]", i, bank.MASTERMEMBERs.Count()));
                        var mm     = db.MASTERMEMBERs.FirstOrDefault(x => x.MEMBER_CODE == mmCode);
                        var Status = db.MemberMonthEndStatus.Where(x => x.MEMBER_CODE == mm.MEMBER_CODE).OrderBy(x => x.StatusMonth).FirstOrDefault();



                        string statusMsg = "";
                        if (Status == null)
                        {
                            Status    = new MemberMonthEndStatu();
                            statusMsg = "Status Record not Found";
                        }
                        else
                        {
                            decimal Subs = Status.MEMBERTYPE_CODE == 1 ? (mm.REJOINED == 0 ? 8 : 32) : (mm.REJOINED == 0 ? 4 : 16);
                            decimal BFs  = 3;

                            if (mm.DATEOFJOINING >= new DateTime(2005, 9, 1))
                            {
                                if (Status.SUBSCRIPTION_AMOUNT != Subs)
                                {
                                    statusMsg += "SUBSCRIPTION_AMOUNT MISMATCH, ";
                                }
                                if (Status.TOTALSUBCRP_AMOUNT != Subs)
                                {
                                    statusMsg += "TOTALSUBCRP_AMOUNT MISMATCH, ";
                                }
                                if (Status.ACCSUBSCRIPTION != Subs)
                                {
                                    statusMsg += "ACCSUBSCRIPTION MISMATCH, ";
                                }
                                if (Status.SUBSCRIPTIONDUE != 0)
                                {
                                    statusMsg += "SUBSCRIPTIONDUE MISMATCH, ";
                                }

                                if (Status.BF_AMOUNT != BFs)
                                {
                                    statusMsg += "BF_AMOUNT MISMATCH, ";
                                }
                                if (Status.TOTALBF_AMOUNT != BFs)
                                {
                                    statusMsg += "TOTALBF_AMOUNT MISMATCH, ";
                                }
                                if (Status.ACCBF != BFs)
                                {
                                    statusMsg += "ACCBF MISMATCH, ";
                                }
                                if (Status.BFDUE != 0)
                                {
                                    statusMsg += "BFDUE MISMATCH, ";
                                }

                                if (Status.TOTAL_MONTHS != 1)
                                {
                                    statusMsg += "TOTAL_MONTHS MISMATCH, ";
                                }
                                if (Status.TOTALMONTHSPAID != 1)
                                {
                                    statusMsg += "TOTALMONTHSPAID MISMATCH, ";
                                }
                                if (Status.TOTALMONTHSDUE != 0)
                                {
                                    statusMsg += "TOTALMONTHSDUE MISMATCH, ";
                                }

                                if (Status.STATUS_CODE != 1 && Status.STATUS_CODE != 5)
                                {
                                    statusMsg += "Status Coce Mismatch, ";
                                }

                                if (Status.STRUCKOFF == 1)
                                {
                                    statusMsg += "Struckoff Mismatch, ";
                                }

                                if (Status.RESIGNED == 1)
                                {
                                    statusMsg += "Resigned Mismatch, ";
                                }

                                if (mm.DATEOFJOINING.Value.Year != Status.LASTPAYMENTDATE.Value.Year || mm.DATEOFJOINING.Value.Month != Status.LASTPAYMENTDATE.Value.Month)
                                {
                                    statusMsg += "Last payment Date Mismatch, ";
                                }

                                if (mm.DATEOFJOINING.Value.Year != Status.StatusMonth.Value.Year || mm.DATEOFJOINING.Value.Month != Status.StatusMonth.Value.Month)
                                {
                                    statusMsg += "Status Month Date Mismatch, ";
                                }
                            }
                            else
                            {
                                if (Status.StatusMonth.Value.Year != 2005 || Status.StatusMonth.Value.Month != 09)
                                {
                                    statusMsg += "Status Month Date Mismatch, ";
                                }
                                var ts = DateTimeSpan.CompareDates(mm.DATEOFJOINING.Value, new DateTime(2005, 9, 1));
                                if ((Status.TOTALMONTHSPAID + Status.TOTALMONTHSDUE) != ((ts.Years * 12) + ts.Months) + 2)
                                {
                                    statusMsg += "Total Month Mismatch, ";
                                }

                                if (Status.ACCBF != (Status.TOTALMONTHSPAID * BFs))
                                {
                                    statusMsg += "Acc BF Mismatch, ";
                                }

                                if (Status.BFDUE != (Status.TOTALMONTHSDUE * BFs))
                                {
                                    statusMsg += "Due BF Mismatch, ";
                                }
                            }
                        }


                        if (!string.IsNullOrWhiteSpace(statusMsg))
                        {
                            //try
                            //{
                            //    MemberMonthEndErrorLog d = new MemberMonthEndErrorLog()
                            //    {
                            //        Member_Code = mm.MEMBER_CODE,
                            //        YY = mm.DATEOFJOINING.Value.Year,
                            //        MM = mm.DATEOFJOINING.Value.Month,
                            //        ErrorMsg = "Member_Init" + statusMsg
                            //    };
                            //}
                            //catch (Exception ex) { AppLib.WriteLog(ex); }
                            statusMsg = " Error=> " + statusMsg;
                        }

                        AppLib.WriteLog("{0,5} {1,-10} {2,-10} {3,-50} {4,-15} {5,-15} {6:dd/MM/yyyy} {7:dd/MM/yyyy} {8:dd/MM/yyyy} {9:dd/MM/yyyy} {10,-10} {11,-10} {12,-10} {13,-10} {14,-10} {15,-10} {16,-10} {17,-10} {18,-10} {19,-10} {20,-10} {21,-10} {22,-10} {23,-10} {24,-10}", i++, mm.MEMBER_CODE, mm.MEMBER_ID, mm.MEMBER_NAME, mm.ICNO_OLD, mm.ICNO_NEW, mm.DATEOFBIRTH, mm.DATEOFJOINING, Status.LASTPAYMENTDATE, Status.StatusMonth, Status.SUBSCRIPTION_AMOUNT, Status.TOTALSUBCRP_AMOUNT, Status.ACCSUBSCRIPTION, Status.SUBSCRIPTIONDUE, Status.BF_AMOUNT, Status.TOTALBF_AMOUNT, Status.ACCBF, Status.BFDUE, Status.TOTAL_MONTHS, Status.TOTALMONTHSPAID, Status.TOTALMONTHSPAID, Status.STATUS_CODE, Status.RESIGNED, Status.STRUCKOFF, statusMsg);
                    }
                }
                else
                {
                    AppLib.WriteLog("Bank Code {0} is not found", BANK_CODE);
                }
                AppLib.WriteLogDT("END:");
            }

            catch (Exception ex) { AppLib.WriteLog(ex); }
        }
Exemple #20
0
        // обновить из БД
        internal void UpdateFromDBEntity(OrderDish dbDish)
        {
            lock (this)
            {
                // и для блюда, и для ингредиента
                if (DepartmentId != dbDish.DepartmentId)
                {
                    DepartmentId = dbDish.DepartmentId;
                }
                if (Uid != dbDish.UID)
                {
                    Uid = dbDish.UID;
                }
                if (CreateDate != dbDish.CreateDate)
                {
                    CreateDate = dbDish.CreateDate;
                }
                if (Name != dbDish.DishName)
                {
                    Name = dbDish.DishName;
                }
                if (FilingNumber != dbDish.FilingNumber)
                {
                    FilingNumber = dbDish.FilingNumber;
                }
                if (ParentUid != dbDish.ParentUid)
                {
                    ParentUid = dbDish.ParentUid;
                }
                if (Comment != dbDish.Comment)
                {
                    Comment = dbDish.Comment;
                }
                if (Quantity != dbDish.Quantity)
                {
                    Quantity = dbDish.Quantity;
                }

                // ожидаемое время начала приготовления для автоматического перехода в состояние приготовления
                if (DelayedStartTime != dbDish.DelayedStartTime)
                {
                    DelayedStartTime = dbDish.DelayedStartTime;
                }
                // время приготовления
                if (EstimatedTime != dbDish.EstimatedTime)
                {
                    EstimatedTime       = dbDish.EstimatedTime;
                    _tsCookingEstimated = TimeSpan.FromSeconds(EstimatedTime);
                }

                // автоматическая установка состояний
                OrderStatusEnum newStatus = AppLib.GetStatusEnumFromNullableInt(dbDish.DishStatusId);
                // отмененное блюдо/ингредиент
                if ((Quantity < 0) && (newStatus != OrderStatusEnum.Cancelled))
                {
                    newStatus = OrderStatusEnum.Cancelled;
                }
                // автоматический переход из Готово в ПодтвГотово
                else if ((_isUseReadyConfirmed == true) && (_autoGotoReadyConfirmPeriod > 0) &&
                         (newStatus == OrderStatusEnum.Ready) && (_dtReadyStatusInput.IsZero() == false) &&
                         ((DateTime.Now - _dtReadyStatusInput).TotalSeconds >= _autoGotoReadyConfirmPeriod)
                         )
                {
                    _dtReadyStatusInput.SetZero();
                    newStatus = OrderStatusEnum.ReadyConfirmed;
                }

                UpdateStatus(newStatus);
            } // lock
        }     // method
Exemple #21
0
 private void txtEntranceFeed_PreviewTextInput(object sender, TextCompositionEventArgs e)
 {
     AppLib.CheckIsNumeric(e);
 }
Exemple #22
0
        }     // method

        // ******************************************
        //    ОСНОВНАЯ ПРОЦЕДУРА БИЗНЕС-ЛОГИКИ
        //    ПРИ ИЗМЕНЕНИИ СТАТУСА БЛЮДА или НЕЗАВИСИМОГО ИНГРЕДИЕНТА
        // ******************************************
        // команды на изменение статуса блюда могут приходить как от КДС, так и из FrontOffice (при чтении из БД)
        // состояния и даты сохраняются в БД при каждом изменении
        //  isUpdateParentOrder = true, если запрос на изменение состояния пришел от КДС, иначе запрос из внутренней логики, напр. автоматическое изменение статуса из ожидания в готовку
        public bool UpdateStatus(OrderStatusEnum newStatus,
                                 DateTime dtEnterState = default(DateTime), int preStateTS = 0, string machineName = null)
        {
            // если статус не поменялся для существующей записи, то ничего не делать
            if (this.Status == newStatus)
            {
                return(false);
            }

            // автоматический переход из Готово в ПодтвГотово: вход в режим отслеживания нахождения в состоянии Готов
            if ((_isUseReadyConfirmed == true) && (_autoGotoReadyConfirmPeriod > 0) &&
                (newStatus == OrderStatusEnum.Ready) && (this.Status != OrderStatusEnum.Ready))
            {
                _dtReadyStatusInput = DateTime.Now;
            }

            string   sLogMsg = string.Format(" - DISH.UpdateStatus() Id {0}/{1}, from {2} to {3}", this.Id, this.Name, this.Status.ToString(), newStatus.ToString());
            DateTime dtTmr   = DateTime.Now;

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg + " - START");
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg + " - START");
            }

            bool isUpdSuccess = false;

            // здесь тоже лочить, т.к. вызовы могут быть как циклческие (ингр.для блюд), так и из заказа / КДС-а
            lock (this)
            {
                // время нахождения в ПРЕДЫДУЩЕМ состоянии, в секундах
                int secondsInPrevState = 0;
                if (_curTimer != null) // если есть таймер предыдущего состояния
                {
                    _curTimer.Stop();  // остановить таймер состояния
                    // получить время нахождения в состоянии с момента последнего входа
                    secondsInPrevState = _curTimer.IncrementTS;
                    // Debug.Print("secondsInPrevState {0}", secondsInPrevState);
                }
                if (preStateTS != 0)
                {
                    secondsInPrevState = preStateTS;
                }

                // дата входа в новое состояние: или то, что передано, или текущую
                DateTime dtEnterToNewStatus = DateTime.Now;
                // если переданы данные из родительского объекта (заказ или блюдо для ингредиентов)
                if (!dtEnterState.IsZero())
                {
                    dtEnterToNewStatus = dtEnterState;
                }

                // сохранить новый статус ОБЪЕКТА в БД
                if (saveStatusToDB(newStatus, machineName))
                {
                    // изменить статус в ОБЪЕКТЕ
                    OrderStatusEnum preStatus = this.Status;
                    this.Status       = newStatus;
                    this.DishStatusId = (int)newStatus;

                    // **** запись или в RunTimeRecord или в ReturnTable
                    StatusDTS statusDTS = getStatusRunTimeDTS(this.Status);
                    if (statusDTS.DateEntered.IsZero())
                    {
                        // сохраняем дату входа в новое состояние
                        setStatusRunTimeDTS(this.Status, dtEnterToNewStatus, -1);
                        // сохраняем в записи RunTimeRecord время нахождения в предыдущем состоянии
                        setStatusRunTimeDTS(preStatus, DateTime.MinValue, secondsInPrevState);

                        saveRunTimeRecord();
                    }
                    // возврат в предыдущие состояния, создать новую запись в Return table
                    else
                    {
                        saveReturnTimeRecord(preStatus, newStatus, dtEnterToNewStatus, secondsInPrevState);
                        // при возврате из Ready в Cooking обнулять в RunTime-record дату входа в состояние Ready
                        // чтобы при следующем входе в Ready таймер ожидания выноса начал считаться с периода ExpectedTake
                        if (!_isUseReadyConfirmed && (preStatus == OrderStatusEnum.Ready) && (newStatus == OrderStatusEnum.Cooking))
                        {
                            _dbRunTimeRecord.ReadyDate = DateTime.MinValue;
                        }
                        if (_isUseReadyConfirmed && (preStatus == OrderStatusEnum.ReadyConfirmed) &&
                            ((newStatus == OrderStatusEnum.Cooking) || (newStatus == OrderStatusEnum.Ready)))
                        {
                            _dbRunTimeRecord.ReadyConfirmedDate = DateTime.MinValue;
                        }
                    }

                    // запуск таймера для нового состояния
                    statusDTS = getStatusRunTimeDTS(this.Status);
                    startStatusTimer(statusDTS);

                    // попытка обновить статус ЗАКАЗА проверкой состояний всех блюд/ингредиентов
                    _modelOrder.UpdateStatusByVerificationDishes();

                    isUpdSuccess = true;
                }
            }

            sLogMsg += " - FINISH - " + (DateTime.Now - dtTmr).ToString();
            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg);
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            return(isUpdSuccess);
        }  // method UpdateStatus
Exemple #23
0
 private void txtSubscription_PreviewTextInput(object sender, TextCompositionEventArgs e)
 {
     AppLib.CheckIsNumeric(e);
 }
Exemple #24
0
        // ОБНОВИТЬ СТАТУС "ВЧЕРАШНИХ" ЗАКАЗОВ
        // "вчерашние" заказы - это заказы, у которых CreateDate меньше начала текущего дня (полночь)
        // минус смещение от полуночи назад (MidnightShiftShowYesterdayOrders)
        // "Вчерашним" заказам статус устанавливается в 9 и они НЕ будут отображаться на КДСе.
        private bool updateYesterdayOrdersStatus()
        {
            // дата/время, КОГДА необходимо обновить статус вчерашних заказов
            DateTime dtUpdate = _currentDate.Add(AppLib.TimeOfAutoCloseYesterdayOrders);

            if (DateTime.Now < dtUpdate)
            {
                return(false);
            }

            AppLib.WriteLogOrderDetails(" - обновить статус вчерашних заказов... - START");
            _tmpDT = DateTime.Now;

            // дата/время, С КОТОРОГО заказы считаются "сегодяшними"
            double d1 = AppProperties.GetDoubleProperty("MidnightShiftShowYesterdayOrders");

            dtUpdate = DateTime.Today.AddHours(-d1);

            string sqlText = null;
            int    cntDishes = 0, cntOrders = 0, iAffected;
            bool   retVal = false;

            try
            {
                using (DBContext db = new DBContext())
                {
                    sqlText = string.Format("SELECT Id FROM [Order] WHERE (OrderStatusId < 3) AND (CreateDate < {0})", dtUpdate.ToSQLExpr());
                    DataTable dt = db.GetQueryTable(sqlText);

                    if (dt != null)
                    {
                        int orderId;
                        foreach (DataRow dtRow in dt.Rows)
                        {
                            orderId = System.Convert.ToInt32(dtRow[0]);
                            if (orderId > 0)
                            {
                                // обновить статус блюд
                                sqlText    = $"UPDATE [OrderDish] SET DishStatusId = 9 WHERE (OrderId={orderId.ToString()})";
                                iAffected  = db.ExecuteCommand(sqlText);
                                cntDishes += iAffected;

                                // обновить статус заказа
                                sqlText    = $"UPDATE [Order] SET OrderStatusId = 9, QueueStatusId = 9 WHERE (Id={orderId.ToString()})";
                                iAffected  = db.ExecuteCommand(sqlText);
                                cntOrders += iAffected;
                            }
                        }
                        dt.Dispose();
                    }
                }

                retVal = true;
            }
            catch (Exception ex)
            {
                AppLib.WriteLogErrorMessage(" - ошибка обновления заказов: {0} ({1})", ErrorHelper.GetShortErrMessage(ex), sqlText);
            }
            AppLib.WriteLogOrderDetails(" - обновлено заказов {0} (блюд {1}) - FINISH - {2}", cntOrders, cntDishes, _tmpPeriod());

            return(retVal);
        }