Exemple #1
0
        private async void ToolExcel_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                ShowMessage("Please Wait...");
                if (!ValidateData())
                {
                    return;
                }
                ApplicationSettings.Default.RobinKey = RobinKey.Text.Trim();
                RobinDownloadBL downloadBL = new RobinDownloadBL();
                downloadBL.feedback += ShowMessage;
                ShowMessage("Download Position Data");
                List <BankPortfolioData> postions = await downloadBL.GetPositionData();

                UtilityHandler.Export2Csv(postions, "Position");
                ShowMessage("Download Transaction Data");
                List <BankTransactionData> transaction = await downloadBL.GetTransactionData();

                UtilityHandler.Export2Csv(transaction, "Transaction");
                List <BankAccountTransferData> transfer = await downloadBL.GetBankTransfer();

                UtilityHandler.Export2Csv(transfer, "Transfer");
                ShowMessage($"Exported in {ApplicationSettings.Default.LoggingFolder} folder");
            }
            catch (Exception ex)
            {
                ShowMessage(ex.Message);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
Exemple #2
0
 private bool ValidateData()
 {
     if (UtilityHandler.IsEmpty(RobinKey.Text.Trim()))
     {
         ShowMessage("Enter the Bearer token");
         return(false);
     }
     return(true);
 }
        private string GetTagValue(Dictionary <string, string> input, string tag)
        {
            string output = string.Empty;

            if (UtilityHandler.IsEmpty(tag) || !input.ContainsKey(tag))
            {
                return(output);
            }
            return(input[tag]);
        }
        public async Task <OutData <TimeSeriesIntradayData> > GetShareIntraday(string shareCode,
                                                                               string interval   = "15min",
                                                                               string outputSize = "compact",
                                                                               bool isAdjusted   = true)
        {
            TimeSeriesIntradayData           data   = new TimeSeriesIntradayData();
            OutData <TimeSeriesIntradayData> output = new OutData <TimeSeriesIntradayData>()
            {
                Data = data
            };

            try
            {
                string query = $"/query?function=TIME_SERIES_INTRADAY&symbol={shareCode}&interval={interval}&outputsize={outputSize}";
                string url   = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}";
                using HttpClient client = UtilityHandler.GetHttpClient();
                Uri requestUri = new Uri(url);
                HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0));
                    Logger.Log($"GetShareIntraday -{shareCode} - Failed call");
                    return(output);
                }
                string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                LogJsonValue(shareCode, json);
                Dictionary <string, object> jo = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);
                foreach (string key in jo.Keys)
                {
                    JToken value = (JObject)jo[key];
                    if (key == AlphaVantagTagConstants.TAG_META_DATA)
                    {
                        data.MetaData = ParseMetaData(value);
                        continue;
                    }
                    if (key.StartsWith(AlphaVantagTagConstants.TAG_TIME_SERIES))
                    {
                        data.Data = ParseTimeSeries(value);
                    }
                }


                return(output);
            }
            catch (Exception ex)
            {
                string mess = $"GetShareIntraday - Share :{shareCode} {ex.Message}";
                output.StatusList.Add(new Status("F", mess, 0));
                Logger.LogError($"GetShareIntraday - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}");
                return(output);
            }
        }
        private decimal GetTagValueDecimal(Dictionary <string, string> input, string tag)
        {
            decimal output = 0;
            string  s      = GetTagValue(input, tag);

            if (UtilityHandler.IsEmpty(s))
            {
                return(output);
            }
            decimal.TryParse(s, out output);
            return(output);
        }
        private DateTime GetTagValueDateTime(Dictionary <string, string> input, string tag)
        {
            DateTime output = DateTime.MinValue;
            string   s      = GetTagValue(input, tag);

            if (UtilityHandler.IsEmpty(s))
            {
                return(output);
            }
            DateTime.TryParse(s, out output);
            return(output);
        }
        private long GetTagValueLong(Dictionary <string, string> input, string tag)
        {
            long   output = 0;
            string s      = GetTagValue(input, tag);

            if (UtilityHandler.IsEmpty(s))
            {
                return(output);
            }
            long.TryParse(s, out output);
            return(output);
        }
Exemple #8
0
        public async Task <RhFundamental> GetFundamental(string input)
        {
            if (UtilityHandler.IsEmpty(input))
            {
                return(new RhFundamental());
            }
            OutData <string> data = await GetJsonData($"fundamentals/{input.Trim()}/");

            if (data.StatusList.Count > 0)
            {
                throw new ApplicationException($"{data.StatusList[0].Code} - {data.StatusList[0].Description}");
            }
            LogJsonData($"Fundamental_{input}", data.Data);
            return(JsonConvert.DeserializeObject <RhFundamental>(data.Data));
        }
Exemple #9
0
        public async Task <RhTrade> GetQuote(string symbol)
        {
            if (UtilityHandler.IsEmpty(symbol))
            {
                return(new RhTrade());
            }
            OutData <string> data = await GetJsonData($"quotes/{symbol}/");

            if (data.StatusList.Count > 0)
            {
                throw new ApplicationException(data.StatusList[0].Description);
            }
            LogJsonData($"Quote_{symbol}", data.Data);
            return(JsonConvert.DeserializeObject <RhTrade> (data.Data));
        }
        public async Task <OutData <GlobalQuoteData> > GetCurrentQuote(string shareCode)
        {
            //https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=IBM&apikey=demo
            OutData <GlobalQuoteData> output = new OutData <GlobalQuoteData>();

            try
            {
                string query = $"/query?function=GLOBAL_QUOTE&symbol={shareCode}";
                string url   = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}";
                using HttpClient client = UtilityHandler.GetHttpClient();
                Uri requestUri = new Uri(url);
                HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0));
                    Logger.Log($"GetCurrentQuote -{shareCode} - Failed call");
                    return(output);
                }
                string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                LogJsonValue(shareCode, json);
                Dictionary <string, object> jo = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);
                foreach (string key in jo.Keys)
                {
                    JToken value = (JObject)jo[key];
                    if (key.StartsWith(AlphaVantagTagConstants.TAG_GLOBAL_QUOTE))
                    {
                        output.Data = ParseGlobalQuote(value);
                    }
                }
                if (UtilityHandler.IsEmpty(output.Data.Symbol))
                {
                    output.StatusList.Add(new Status("F", "Not Parsed data data well", 0));
                    Logger.Log($"GetCurrentQuote - {shareCode} JSon Pasing Issue");
                    Logger.Log(json);
                    return(output);
                }
                return(output);
            }
            catch (Exception ex)
            {
                string mess = $"GetCompanyOverview - Share :{shareCode} {ex.Message}";
                output.StatusList.Add(new Status("F", mess, 0));
                Logger.LogError($"GetCompanyOverview - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}");
                return(output);
            }
        }
Exemple #11
0
        protected virtual string BuildExcelReport(DataSet ds)
        {
            string fileName = GetExcelFileName();

            using (XLWorkbook book = new XLWorkbook())
            {
                foreach (DataTable dt in ds.Tables)
                {
                    string sheetName = dt.TableName;

                    DataTable dtc = UtilityHandler.CleanData(dt);
                    book.Worksheets.Add(dtc, sheetName);
                }
                FormatExcelSheet(book);
                book.SaveAs(fileName);
            }
            return(fileName);
        }
Exemple #12
0
    private void Awake()                                       // on awake
    {
        utilityHandler = new UtilityHandler(this);             // create util handler
        switch (pawnType)                                      //swith on type
        {
        case PawnType.Hauler:
            jobHandler = new JobHandlerHauling(this);          //assign correct job handler
            break;

        case PawnType.Cleaner:
            jobHandler = new JobHandlerCleaning(this);         //
            break;

        case PawnType.Scientist:
            break;

        case PawnType.Builder:
            jobHandler = new JobHandlerConstruction(this);     //
            break;
        }
    }
Exemple #13
0
        public static DataTable GetDataSet(DataTable src, string tableName, List <ExcelColumn> columns)
        {
            DataTable output = new DataTable(tableName);

            foreach (ExcelColumn rc in columns)
            {
                output.Columns.Add(rc.ColumnName, rc.DataType);
            }

            foreach (DataRow row in src.Rows)
            {
                DataRow r = output.NewRow();
                foreach (DataColumn dc in output.Columns)
                {
                    if (src.Columns.Contains(dc.ColumnName))
                    {
                        r[dc.ColumnName] = row[dc.ColumnName];
                    }
                }
                output.Rows.Add(r);
            }

            //Change the display Name
            foreach (ExcelColumn col in columns)
            {
                if (UtilityHandler.IsEmpty(col.DisplayName))
                {
                    continue;
                }
                if (col.ColumnName != col.DisplayName &&
                    output.Columns.Contains(col.ColumnName))
                {
                    output.Columns[col.ColumnName].ColumnName = col.DisplayName;
                }
            }
            return(output);
        }
        public static async Task <RhInstrument> GetRhInstrument(string url, bool OnlineLookup = false)
        {
            string instrumentID = GetInstrumentID(url);

            if (!OnlineLookup && lookup.ContainsKey(instrumentID))
            {
                return(lookup[instrumentID]);
            }
            RhInstrument      output  = new RhInstrument();
            HttpClientHandler handler = new HttpClientHandler
            {
                UseDefaultCredentials = true
            };
            HttpClient client = new HttpClient(handler);

            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Add("Cache-Control", "no-cache");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            Uri requestUri = new Uri(url);
            HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false);

            if (!response.IsSuccessStatusCode)
            {
                return(output);
            }
            string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            output       = JsonConvert.DeserializeObject <RhInstrument>(json);
            instrumentID = output.Id.Trim();
            if (!(UtilityHandler.IsEmpty(instrumentID) ||
                  lookup.ContainsKey(instrumentID))
                )
            {
                lookup.Add(instrumentID, output);
            }
            return(output);
        }
Exemple #15
0
        protected virtual DataTable GetDataTable(string tableName, DataTable src, List <ExcelColumn> columns)
        {
            DataTable des = new DataTable(tableName);

            foreach (ExcelColumn rc in columns)
            {
                des.Columns.Add(rc.ColumnName, rc.DataType);
            }
            foreach (DataRow row in src.Rows)
            {
                DataRow r = des.NewRow();
                foreach (DataColumn dc in des.Columns)
                {
                    if (src.Columns.Contains(dc.ColumnName))
                    {
                        r[dc.ColumnName] = row[dc.ColumnName];
                    }
                }
                des.Rows.Add(r);
            }

            //Change the display Name
            foreach (ExcelColumn col in columns)
            {
                if (UtilityHandler.IsEmpty(col.DisplayName))
                {
                    continue;
                }
                if (col.ColumnName != col.DisplayName &&
                    des.Columns.Contains(col.ColumnName))
                {
                    des.Columns[col.ColumnName].ColumnName = col.DisplayName;
                }
            }
            return(UtilityHandler.CleanData(des));
        }
Exemple #16
0
        /// <summary>
        /// 易班授权验证
        /// </summary>
        private void YbOauth()
        {
            try
            {
                #region 判断Code是否为空

                if (string.IsNullOrEmpty(Request.QueryString["code"]))
                {
                    LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, "易班账号登录失败:code为NULL!");
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror");
                    return;
                }

                #endregion 判断Code是否为空

                #region 认证信息

                YbSDK.Api.OauthApi oauthApi = new YbSDK.Api.OauthApi();

                #endregion 认证信息

                #region 通过code获得AccessToken

                //通过code获得AccessToken
                string strUrl_AccessToken    = "https://openapi.yiban.cn/oauth/access_token";
                string strParam_AccessToken  = "client_id=" + oauthApi.context.Config.AppId + "&client_secret=" + oauthApi.context.Config.AppSecret + "&code=" + Request.QueryString["code"].ToString() + "&redirect_uri=" + oauthApi.context.Config.Callback;
                string strResult_AccessToken = HttpMethods.HttpPost(strUrl_AccessToken, strParam_AccessToken);
                //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_INFO, "获取已授权用户的access_token:" + strResult_AccessToken);
                AccessToken accessToken = jss.Deserialize <AccessToken>(strResult_AccessToken);
                if (string.IsNullOrEmpty(accessToken.access_token))
                {
                    LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, "易班账号登录失败:通过code获得AccessToken为NULL!");
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror");
                    return;
                }

                #endregion 通过code获得AccessToken

                #region 通过AccessToken获得用户信息

                //通过AccessToken获得用户信息
                string     strUrl_VerifyMe    = "https://openapi.yiban.cn/user/verify_me?access_token=" + accessToken.access_token;
                string     strResult_VerifyMe = HttpMethods.HttpGet(strUrl_VerifyMe);
                UserVerify userVerify         = jss.Deserialize <UserVerify>(strResult_VerifyMe);
                if (userVerify == null)
                {
                    RevokeToken(oauthApi, accessToken.access_token, "", "");
                    LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, userVerify.info.yb_realname + " 易班账号登录失败:通过AccessToken获得用户信息为NULL!");
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror");
                    return;
                }

                #endregion 通过AccessToken获得用户信息

                #region 验证易班用户是否在资助系统中已经有注册用户

                //验证易班用户是否在资助系统中已经有注册用户
                string strUserId = userVerify.info.yb_studentid;//学号
                if (string.IsNullOrEmpty(strUserId))
                {
                    strUserId = userVerify.info.yb_employid;      //工号
                }
                string strUserName = userVerify.info.yb_realname; //姓名

                SqlParameter[] p = new SqlParameter[2];
                p[0] = new SqlParameter("@id", strUserId);
                p[1] = new SqlParameter("@name", strUserName);
                if (strUserId.Length == 0 || strUserName.Length == 0)
                {
                    RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName);
                    LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, " 易班账号登录失败:" + strUserId + "易班账号为空或者" + strUserName + "易班真实用户名为空!");
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist");
                    return;
                }

                //ZZ 20180901 新增:对接教务系统 Start
                //学生在易班登录的时候,通过教务系统对接接口获得学生在教务系统中的基础信息
                string jw_msg = string.Empty;
                if (!JWHandleClass.getInstance().ByJwInsertOrUpdateStuInfo("200812601079", out jw_msg))
                {
                    //RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName);
                    //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strUserName + " 易班账号登录失败:对接教务系统,出错:"+ jw_msg);
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist");
                    return;
                }
                //ZZ 20180901 新增:对接教务系统 End

                LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_INFO, "易班登录,学号或者工号:" + strUserId + " 真实姓名:" + strUserName);
                DataTable dtUser = ds.ExecuteTxtDataTable("SELECT * FROM UA_USER WHERE USER_ID=@id AND USER_NAME=@name", p);
                if (dtUser == null || dtUser.Rows.Count == 0)
                {
                    RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName);
                    LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strUserName + " 易班账号登录失败:资助系统不存在此用户!");
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_noexist");
                    return;
                }

                //更新易班token值到用户表中
                if (!ComHandleClass.getInstance().UpdateUaUser_YbToken(dtUser.Rows[0]["USER_ID"].ToString(), accessToken.access_token))
                {
                    RevokeToken(oauthApi, accessToken.access_token, strUserId, strUserName);
                    UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror");
                    return;
                }

                string username = dtUser.Rows[0]["USER_ID"].ToString();
                string password = dtUser.Rows[0]["LOGIN_PW"].ToString();
                if (UserHandler.CheckLogin(username, password, true))
                {
                    //LogDBHandleClass.getInstance().LogOperation(strUserId, "用户易班登录", CValue.LOG_ACTION_TYPE_0, CValue.LOG_RECORD_TYPE_1, string.Format("用户易班登录:用户{0},用户名{1}", strUserId, strUserName), strUserId, strUserName, Fetch.UserIp);

                    UtilityHandler.WindowLocation("/Index.aspx?sid=" + accessToken.access_token);
                    return;
                }

                #endregion 验证易班用户是否在资助系统中已经有注册用户
            }
            catch (Exception ex)
            {
                //string strMsg = "易班账号登录失败:" + ex.ToString();
                //LogDBHandleClass.getInstance().LogException(CValue.LOG_LEVEL_ERROR, strMsg);
                UtilityHandler.WindowLocation("/Yb.html?yb=yb_loginerror");
                return;
            }
        }
        // https://github.com/LutsenkoKirill/AlphaVantage.Net/tree/v2
        // https://www.alphavantage.co/documentation/#intraday



        public async Task <OutData <CompanyOverviewData> > GetCompanyOverview(string shareCode)
        {
            //https://www.alphavantage.co/query?function=OVERVIEW&symbol=IBM&apikey=demo
            CompanyOverviewData data = new CompanyOverviewData()
            {
                Symbol = shareCode
            };
            OutData <CompanyOverviewData> output = new OutData <CompanyOverviewData>()
            {
                Data = data
            };

            try
            {
                string query = $"/query?function=OVERVIEW&symbol={shareCode}";
                string url   = $"{Settings.Default.StockApi}{query}&apikey={Settings.Default.ApiKey}";
                using HttpClient client = UtilityHandler.GetHttpClient();
                Uri requestUri = new Uri(url);
                HttpResponseMessage response = await client.GetAsync(requestUri).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    output.StatusList.Add(new Status("F", response.StatusCode.ToString(), 0));
                    Logger.Log($"CompanyOverviewData -{shareCode} - Failed call");
                    return(output);
                }
                string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                Dictionary <string, string> dicData = JsonConvert.DeserializeObject <Dictionary <string, string> >(json);
                data.Symbol               = GetTagValue(dicData, AlphaVantagTagConstants.TAG_SYMBOL);
                data.AssetType            = GetTagValue(dicData, AlphaVantagTagConstants.TAG_ASSET_TYPE);
                data.Name                 = GetTagValue(dicData, AlphaVantagTagConstants.TAG_NAME);
                data.Description          = GetTagValue(dicData, AlphaVantagTagConstants.TAG_DESCRIPTION);
                data.Exchange             = GetTagValue(dicData, AlphaVantagTagConstants.TAG_EXCHANGE);
                data.Currency             = GetTagValue(dicData, AlphaVantagTagConstants.TAG_CURRENCY);
                data.Country              = GetTagValue(dicData, AlphaVantagTagConstants.TAG_COUNTRY);
                data.Sector               = GetTagValue(dicData, AlphaVantagTagConstants.TAG_SECTOR);
                data.Industry             = GetTagValue(dicData, AlphaVantagTagConstants.TAG_INDUSTRY);
                data.Address              = GetTagValue(dicData, AlphaVantagTagConstants.TAG_ADDRESS);
                data.FullTimeEmployees    = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_FULLTIME_EMPLOYEES);
                data.FiscalYearEnd        = GetTagValue(dicData, AlphaVantagTagConstants.TAG_FISCAL_YEAR_END);
                data.LatestQuarter        = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_LATEST_QUARTER);
                data.MarketCapitalization = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_MARKET_CAPITALIZATION);
                data.EBITDA               = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_EBITDA);
                data.PERatio              = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERATIO);
                data.PEGRatio             = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PEGRATIO);
                data.BookValue            = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_BOOKVALUE);
                data.DividendPerShare     = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_PER_SHARE);
                data.DividendYield        = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_YIELD);
                data.EPS = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EPS);
                data.RevenuePerShareTTM         = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_REVENUE_PER_SHARE_TTM);
                data.ProfitMargin               = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PROFIT_MARGIN);
                data.OperatingMarginTTM         = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_OPERATING_MARGIN_TTM);
                data.ReturnOnAssetsTTM          = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_RETURN_ON_ASSETS_TTM);
                data.ReturnOnEquityTTM          = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_RETURN_ON_EQUITY_TTM);
                data.RevenueTTM                 = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_REVENUE_TTM);
                data.GrossProfitTTM             = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_GROSS_PROFIT_TTM);
                data.DilutedEPSTTM              = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_DILUTED_EPS_TTM);
                data.QuarterlyEarningsGrowthYOY = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_QUARTERLY_EARNINGS_GROWTH_YOY);
                data.QuarterlyRevenueGrowthYOY  = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_QUARTERLY_REVENUE_GROWTH_YOY);
                data.AnalystTargetPrice         = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_ANALYST_TARGET_PRICE);
                data.TrailingPE                 = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_TRAILING_PE);
                data.ForwardPE            = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_PE);
                data.PriceToSalesRatioTTM = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PRICE_TO_SALES_RATIO_TTM);
                data.PriceToBookRatio     = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PRICE_TO_BOOK_RATIO);
                data.EVToRevenue          = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EV_TO_REVENUE);
                data.EVToEBITDA           = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_EV_TO_EBITDA);
                data.Beta                       = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_BETA);
                data.Week52High                 = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_52_WEEK_HIGH);
                data.Week52Low                  = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_52_WEEK_LOW);
                data.Day50MovingAverage         = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_50_DAY_MOVING_AVERAGE);
                data.Day200MovingAverage        = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_200_DAY_MOVING_AVERAGE);
                data.SharesOutstanding          = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_OUTSTANDING);
                data.SharesFloat                = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_FLOAT);
                data.SharesShort                = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_SHORT);
                data.SharesShortPriorMonth      = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHARES_SHORT_PRIOR_MONTH);
                data.ShortRatio                 = GetTagValueLong(dicData, AlphaVantagTagConstants.TAG_SHORT_RATIO);
                data.ShortPercentOutstanding    = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_SHORT_PERCENT_OUTSTANDING);
                data.ShortPercentFloat          = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_SHORT_PERCENT_FLOAT);
                data.PercentInsiders            = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERCENT_INSIDERS);
                data.PercentInstitutions        = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PERCENT_INSTITUTIONS);
                data.ForwardAnnualDividendRate  = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_ANNUAL_DIVIDEND_RATE);
                data.ForwardAnnualDividendYield = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_FORWARD_ANNUAL_DIVIDEND_YIELD);
                data.PayoutRatio                = GetTagValueDecimal(dicData, AlphaVantagTagConstants.TAG_PAYOUT_RATIO);
                data.DividendDate               = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_DIVIDEND_DATE);
                data.ExDividendDate             = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_EX_DIVIDEND_DATE);
                data.LastSplitFactor            = GetTagValue(dicData, AlphaVantagTagConstants.TAG_LAST_SPLIT_FACTOR);
                data.LastSplitDate              = GetTagValueDateTime(dicData, AlphaVantagTagConstants.TAG_LAST_SPLIT_DATE);
                if (UtilityHandler.IsEmpty(data.Name))
                {
                    output.StatusList.Add(new Status("F", "Not Parsed data data well", 0));
                    Logger.Log($"CompanyOverviewData - {shareCode} JSon Pasing Issue");
                    Logger.Log(json);
                    return(output);
                }
                return(output);
            }
            catch (Exception ex)
            {
                string mess = $"GetCompanyOverview - Share :{shareCode} {ex.Message}";
                output.StatusList.Add(new Status("F", mess, 0));
                Logger.LogError($"GetCompanyOverview - Share :{shareCode}", $"{ex.Message} - {ex.StackTrace}");
                return(output);
            }
        }