Ejemplo n.º 1
0
        public IHttpActionResult GetEma(string type, string startdate, string range)
        {
            this.GetSma(type, startdate, range);
            double initSMA    = avgList.Last();
            double multiplire = 2 / (Convert.ToInt32(range) + 1);
            double EMA;
            List <SendDataViewModel> obj = new List <SendDataViewModel>();

            for (int i = 0; i < avgList.Count; i++)
            {
                EMA     = (closingList.Last() - initSMA) * multiplire + initSMA;
                initSMA = initSMA + EMA;
                SendDataViewModel sendData = new SendDataViewModel()
                {
                    date  = DateTime.Parse(startdate).AddDays(i),
                    value = EMA
                };
                obj.Add(sendData);
            }
            return(Json(obj));
        }
Ejemplo n.º 2
0
        public IHttpActionResult GetSma(string type, string startdate, string range)
        {
            List <NewMarket>         marketObject = new List <NewMarket>();
            List <SendDataViewModel> obj          = new List <SendDataViewModel>();
            DateTime        date1  = new DateTime(1899, 12, 30, 23, 59, 00);
            List <DateTime> xaxis  = new List <DateTime>();
            DateTime        stDate = DateTime.Parse(startdate);
            DateTime        enDate = stDate.AddDays(10);

            marketObject = _context.NewMarkets.OrderBy(c => c.date).Where(c => c.type == type && c.time == date1 && c.date >= stDate && c.date <= enDate).ToList();

            for (int i = 0; i < marketObject.Count; i++)
            {
                closingList.Add(marketObject[i].closingPrice);
            }


            for (int j = 0; j <= closingList.Count - Convert.ToInt32(range); j++)
            {
                double sum = 0;
                double avg = 0;
                for (int i = j; i < j + Convert.ToInt32(range); i++)
                {
                    sum = sum + closingList[i];
                }
                avg = sum / Convert.ToInt32(range);
                avgList.Add(avg);
                SendDataViewModel sendData = new SendDataViewModel()
                {
                    date  = DateTime.Parse(startdate).AddDays(j),
                    value = avg
                };
                obj.Add(sendData);
            }
            return(Json(obj));
        }
Ejemplo n.º 3
0
        public IHttpActionResult GetRsi(string type, string startdate, string range)
        {
            DateTime                 time            = new DateTime(1899, 12, 30, 23, 59, 00);
            List <NewMarket>         marketObject    = new List <NewMarket>();
            List <NewMarket>         newmarketObject = new List <NewMarket>();
            List <DateTime>          xaxis           = new List <DateTime>();
            List <SendDataViewModel> obj             = new List <SendDataViewModel>();

            List <double> posDif    = new List <double>();
            List <double> negDif    = new List <double>();
            double        avgLost   = 0;
            double        avgGain   = 0;
            double        totalLost = 0;
            double        totalGain = 0;

            NewMarket newMarket = new NewMarket();
            DateTime  dat       = DateTime.Parse(startdate);
            DateTime  enDate    = dat.AddDays(10);
            int       newRange  = Convert.ToInt32(range);

            DateTime daybefore = dat.AddDays(-newRange - 1);

            marketObject = _context.NewMarkets.OrderBy(c => c.date).Where(c => c.type == type && c.date >= daybefore && c.date <= enDate && c.time == time).ToList();

            List <double> RSIList = new List <double>();

            for (int i = 0; i < newRange + 1; i++)
            {
                double priceDif = marketObject[i].closingPrice - marketObject[i + 1].closingPrice;
                if (priceDif < 0)
                {
                    totalLost = totalLost + priceDif;
                }
                else
                {
                    totalGain = totalGain + priceDif;
                }
            }
            avgLost = totalLost / newRange;
            avgGain = totalGain / newRange;
            var rsi = 100 - (100 / (1 + Math.Abs(avgGain / avgLost)));

            var rsiList = new List <double>();

            rsiList.Add(rsi);

            for (int i = newRange + 1; i < marketObject.Count - 1; i++)
            {
                var current = marketObject[i + 1].closingPrice - marketObject[i].closingPrice;
                if (current < 0)
                {
                    avgLost = ((avgLost * (newRange - 1)) + current) / newRange;
                }
                else
                {
                    avgGain = ((avgGain * (newRange - 1)) + current) / newRange;
                }
                rsi = 100 - (100 / (1 + Math.Abs(avgGain / avgLost)));

                SendDataViewModel sendData = new SendDataViewModel()
                {
                    date  = dat.AddDays(i - newRange - 1),
                    value = rsi
                };
                obj.Add(sendData);
            }
            return(Json(obj));
        }
Ejemplo n.º 4
0
        public static async Task <bool> GenerateSendDataItemFrom(SendDataViewModel customFormDataModel, SendDataItem sendDataItem)
        {
            try
            {
                Handlebars.RegisterHelper("formatDateTime", (writer, context, parameters) =>
                {
                    // parameters : datetime iso string, format, culture
                    try
                    {
                        var firstPrm = parameters[0].ToString();

                        if (firstPrm.ToLower() == "now")
                        {
                            firstPrm = DateTime.Now.ToString();
                        }

                        string res;
                        DateTime datetime = DateTime.Parse(firstPrm, null, System.Globalization.DateTimeStyles.RoundtripKind);
                        string format     = "dd/MM/yyyy";
                        if (parameters.Count() > 1)
                        {
                            format = parameters[1].ToString();
                        }
                        if (parameters.Count() > 2 && !string.IsNullOrWhiteSpace(parameters[2].ToString()))
                        {
                            string provider = parameters[2].ToString();
                            IFormatProvider formatprovider = null;
                            if (provider.ToLower() == "invariant")
                            {
                                formatprovider = CultureInfo.InvariantCulture;
                            }
                            else
                            {
                                formatprovider = CultureInfo.CreateSpecificCulture(provider);
                            }
                            res = datetime.ToString(format, formatprovider);
                        }
                        else
                        {
                            res = datetime.ToString(format);
                        }

                        writer.WriteSafeString(res);
                    }
                    catch (Exception e)
                    {
                        writer.WriteSafeString("");
                    }
                });

                #region Get CustomFormDataModel Props
                var toData      = customFormDataModel.To;
                var ccData      = customFormDataModel.Cc;
                var bccData     = customFormDataModel.Bcc;
                var replyToData = customFormDataModel.ReplyTo;

                var subjectData = customFormDataModel.DetailSubject;//Konu
                var sqlQueryConnectionString = customFormDataModel.SqlQueryConStr;
                var sqlqueryData             = customFormDataModel.SqlQuery;
                var sqlqueryToFieldData      = customFormDataModel.SqlQueryToField;
                var sqlqueryReplyToFieldData = customFormDataModel.SqlQueryReplyToField;
                var sqlqueryCcFieldData      = customFormDataModel.SqlQueryCcField;
                var sqlqueryBccFieldData     = customFormDataModel.SqlQueryBccField;
                var headerData = customFormDataModel.DetailHeader;//Başlık
                var footerData = customFormDataModel.DetailFooter;
                var detailSqlQueryConnectionString        = customFormDataModel.DetailSqlQueryConStr;
                var detailSqlqueryData                    = customFormDataModel.DetailSqlQuery;
                var useSendDataDetailQueryForTemplateData = customFormDataModel.DetailQueryForTemplate;
                var bodyData = customFormDataModel.DetailContent;
                var useDetailForEveryoneData = customFormDataModel.DetailBodyForAll == false; //TODO: UI'da ayrı ayrı gönder olarak gösterildigi icin ters kalıyor
                #endregion

                #region Subject Compile
                try
                {
                    var template = Handlebars.Compile(subjectData);

                    subjectData = template(new { });
                }
                catch (Exception ex)
                {
                }
                #endregion

                var bodyContent = bodyData;

                var replacedBodyContent = bodyContent.ToString();

                var listTemplateTokens         = new Dictionary <string, string>();
                var templateTokenRegexMatchRes = Regex.Matches(bodyContent, @"""\[(.*?)]""");
                if (templateTokenRegexMatchRes.Count > 0)
                {
                    foreach (Match item in templateTokenRegexMatchRes)
                    {
                        if (item.Success)
                        {
                            var value = item.Value.Replace("\"[", "").Replace("]\"", "").Trim();

                            if (listTemplateTokens.ContainsKey(value) == false)
                            {
                                listTemplateTokens.Add(value, item.Value);
                            }
                        }
                    }
                }

                sendDataItem.Bcc     = bccData;
                sendDataItem.Cc      = ccData;
                sendDataItem.ReplyTo = replyToData;

                sendDataItem.Type = 1; //TODO:Static - Email/Sms

                var sendDataMailAccounts = await SendDataMailAccountManager.GetMailAccounts();

                var sendDataMailAccount = sendDataMailAccounts.FirstOrDefault();

                if (sendDataMailAccount == null)
                {
                    LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
                    {
                        LoggerName        = ConstantHelper.JobLog,
                        Title             = "GenerateSendDataItemFrom GetMailAccounts Not Found",
                        Message           = "GetMailAccounts Not Found",
                        LogItemProperties = new List <LogItemProperty>()
                        {
                            new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                            new LogItemProperty("ActionName", "GenerateSendDataItemFrom"),
                            new LogItemProperty("FormData", new { CustomFormDataModel = customFormDataModel, SendDataItem = sendDataItem })
                        },
                        LogLevel  = LogLevel.Error,
                        Exception = new ArgumentException("GetMailAccounts Not Found")
                    });
                    return(false);
                }

                var toDataSource     = new DataTable();
                var detailDataSource = new DataTable();

                var recipients = toData.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();

                /*TODO:
                 * - Validsyon1 => To ve Detail Sql var ama detail sql sonuç dönmüyorsa ?
                 */

                Action <List <string>, string, List <KeyValuePair <string, object> >, string> invokeDetailQuery = async(to, changedBodyContent, columnNames, subject) =>
                {
                    #region Invoke
                    #region Initialize Detail Sqlect Query
                    var detailQuery = detailSqlqueryData.Replace("@[", "@").Replace("]@", "@");
                    List <SqlParameter> parameterList = new List <SqlParameter>();

                    if (columnNames?.Count > 0)
                    {
                        foreach (var col in columnNames)
                        {
                            if (detailQuery.Contains($"@{col.Key.ToLower(new System.Globalization.CultureInfo("en-US"))}@") ||
                                detailQuery.Contains($"@{col.Key}@"))
                            {
                                parameterList.Add(new SqlParameter($"@{col.Key}@", col.Value));
                            }
                        }

                        foreach (var col in columnNames)
                        {
                            if (listTemplateTokens.ContainsKey(col.Key))
                            {
                                var oldToken = listTemplateTokens[col.Key];
                                var newValue = col.Value?.ToString();
                                changedBodyContent = changedBodyContent.Replace(oldToken, newValue);
                            }
                        }
                    }

                    #endregion

                    detailDataSource = await SendDataSqlQueryManager.GetQueryData(detailSqlQueryConnectionString, detailQuery, parameterList);

                    string[] detailDataSourceColumnNames = detailDataSource.Columns.Cast <DataColumn>()
                                                           .Select(x => x.ColumnName)
                                                           .ToArray();

                    var newSendDataItem = JsonConvert.DeserializeObject <SendDataItem>(JsonConvert.SerializeObject(sendDataItem));

                    //detay sorgunun her bir satırı için bir mail mi yoksa detay sorguyu template içinde kullanmak mı ?
                    if (useSendDataDetailQueryForTemplateData)
                    {
                        changedBodyContent = changedBodyContent.Replace("\"[", "{{{").Replace("]\"", "}}}");

                        var jsonDataSource        = JsonConvert.SerializeObject(detailDataSource);
                        var jsonDataSourceExpando = JsonConvert.DeserializeObject <List <ExpandoObject> >(jsonDataSource);
                        var template = Handlebars.Compile(changedBodyContent);

                        changedBodyContent   = template(new { DataSource = jsonDataSourceExpando });
                        newSendDataItem.Body = changedBodyContent;
                        newSendDataItem.From = sendDataMailAccount.FromMailAddress;

                        //var to = toDataSource.Rows[i][sqlqueryToFieldData.Value]?.ToString().Trim().Replace("[", "").Replace("]", "");

                        await SendDataBy(sendDataMailAccount, newSendDataItem, subject, changedBodyContent, to, useDetailForEveryoneData);
                    }
                    else
                    {
                        foreach (DataRow item in detailDataSource.Rows)
                        {
                            foreach (var col in detailDataSourceColumnNames)
                            {
                                if (listTemplateTokens.ContainsKey(col))
                                {
                                    var oldToken = listTemplateTokens[col];
                                    var newValue = item[col]?.ToString();
                                    changedBodyContent = changedBodyContent.Replace(oldToken, newValue);
                                }
                                //var val = item[col]?.ToString();
                            }

                            var template = Handlebars.Compile(changedBodyContent);

                            changedBodyContent   = template(new { Item = item });
                            newSendDataItem.Body = changedBodyContent;
                            newSendDataItem.From = sendDataMailAccount.FromMailAddress;

                            //var to = toDataSource.Rows[i][sqlqueryToFieldData.Value]?.ToString();

                            await SendDataBy(sendDataMailAccount, newSendDataItem, subject, changedBodyContent, to, useDetailForEveryoneData);
                        }
                    }
                    #endregion
                };

                //string[] toDataSourceColumns
                if (string.IsNullOrEmpty(sqlqueryData) == false)
                {
                    toDataSource = await SendDataSqlQueryManager.GetQueryData(sqlQueryConnectionString, sqlqueryData);

                    if (toDataSource.Rows.Count > 0)
                    {
                        var toFormField      = sqlqueryToFieldData?.Trim().Replace("[", "").Replace("]", "");
                        var ccFormField      = sqlqueryCcFieldData?.Trim().Replace("[", "").Replace("]", "");
                        var bccFormField     = sqlqueryBccFieldData?.Trim().Replace("[", "").Replace("]", "");
                        var replyToFormField = sqlqueryReplyToFieldData?.Trim().Replace("[", "").Replace("]", "");

                        recipients = new List <string>();

                        var toDataSourceColumnNames = toDataSource.Columns.Cast <DataColumn>()
                                                      .Select(x => x.ColumnName)
                                                      .ToList();

                        if (string.IsNullOrEmpty(toFormField) == false && toDataSourceColumnNames.Contains(toFormField) == false)
                        {
                            throw new ArgumentException("TO Field Select row'a ait değil !");
                        }

                        Func <string, string, string, string> replaceStringFromToQuery = (sourceString, key, newData) =>
                        {
                            var changedStr = sourceString.ToString();

                            var contentColumn = "";

                            if (sourceString.Contains(key))
                            {
                                contentColumn = key;
                            }

                            if (string.IsNullOrEmpty(contentColumn) == false)
                            {
                                changedStr = sourceString.Replace(contentColumn, newData);
                            }

                            return(changedStr);
                        };

                        for (int i = 0; i < toDataSource.Rows.Count; i++)
                        {
                            try
                            {
                                var to           = "";
                                var ccField      = "";
                                var bccField     = "";
                                var replyToField = "";

                                if (string.IsNullOrEmpty(toFormField))
                                {
                                    to = toData;
                                }
                                else
                                {
                                    to = toDataSource.Rows[i][toFormField.Replace("[", "").Replace("]", "")]?.ToString().Trim().Replace("[", "").Replace("]", "");
                                }

                                if (string.IsNullOrEmpty(ccFormField) == false)
                                {
                                    ccField         = toDataSource.Rows[i][ccFormField.Replace("[", "").Replace("]", "")]?.ToString().Trim().Replace("[", "").Replace("]", "");
                                    sendDataItem.Cc = ccField;
                                }

                                if (string.IsNullOrEmpty(bccFormField) == false)
                                {
                                    bccField         = toDataSource.Rows[i][bccFormField.Replace("[", "").Replace("]", "")]?.ToString().Trim().Replace("[", "").Replace("]", "");
                                    sendDataItem.Bcc = bccField;
                                }

                                if (string.IsNullOrEmpty(sendDataItem.Cc) && string.IsNullOrEmpty(ccField) == false)
                                {
                                    sendDataItem.Cc = ccField;
                                }

                                if (string.IsNullOrEmpty(sendDataItem.Bcc) && string.IsNullOrEmpty(bccField) == false)
                                {
                                    sendDataItem.Bcc = bccField;
                                }

                                if (string.IsNullOrEmpty(replyToFormField) == false)
                                {
                                    replyToField         = toDataSource.Rows[i][replyToFormField.Replace("[", "").Replace("]", "")]?.ToString().Trim().Replace("[", "").Replace("]", "");
                                    sendDataItem.ReplyTo = replyToField;
                                }

                                var headerContent  = headerData;
                                var footerContent  = footerData;
                                var subjectContent = subjectData;

                                var changedBodyContent = replacedBodyContent.ToString();

                                #region Initialize Tokens From To Select Query
                                foreach (var col in toDataSourceColumnNames)
                                {
                                    var newValue = toDataSource.Rows[i][col]?.ToString();

                                    var lowerColumn = $"@{col.ToLower(new System.Globalization.CultureInfo("en-US"))}@";
                                    var column      = $"@{col}@";

                                    changedBodyContent = replaceStringFromToQuery(changedBodyContent, lowerColumn, newValue);

                                    changedBodyContent = replaceStringFromToQuery(changedBodyContent, column, newValue);

                                    headerContent = replaceStringFromToQuery(headerContent, lowerColumn, newValue);

                                    footerContent = replaceStringFromToQuery(footerContent, column, newValue);

                                    subjectContent = replaceStringFromToQuery(subjectContent, column, newValue);
                                }
                                #endregion

                                if (string.IsNullOrEmpty(detailSqlqueryData) == false)
                                {
                                    changedBodyContent = changedBodyContent.Replace("\"[HEADER]\"", headerContent);

                                    changedBodyContent = changedBodyContent.Replace("\"[FOOTER]\"", footerContent);

                                    var columnDatas = toDataSourceColumnNames.Select(colName => new KeyValuePair <string, object>(colName, toDataSource.Rows[i][colName])).ToList();

                                    invokeDetailQuery(new List <string>()
                                    {
                                        to
                                    }, changedBodyContent, columnDatas, subjectContent);
                                }
                                else
                                {
                                    if (string.IsNullOrEmpty(to) == false)
                                    {
                                        changedBodyContent = changedBodyContent.Replace("\"[HEADER]\"", headerContent);

                                        changedBodyContent = changedBodyContent.Replace("\"[FOOTER]\"", footerContent);

                                        var newSendDataItem = JsonConvert.DeserializeObject <SendDataItem>(JsonConvert.SerializeObject(sendDataItem));

                                        newSendDataItem.Body = changedBodyContent;
                                        newSendDataItem.From = sendDataMailAccount.FromMailAddress;

                                        await SendDataBy(sendDataMailAccount, newSendDataItem, subjectContent, changedBodyContent, new List <string>() { to }, useDetailForEveryoneData);
                                    }
                                }
                            }
                            catch (Exception exFor)
                            {
                                var rowData = "";

                                try
                                {
                                    rowData = JsonConvert.SerializeObject(toDataSource.Rows);
                                }
                                catch (Exception)
                                {
                                }

                                LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
                                {
                                    LoggerName        = ConstantHelper.JobLog,
                                    Title             = "GenerateSendDataItemFrom SqlqueryData Loop Error",
                                    Message           = exFor.Message,
                                    LogItemProperties = new List <LogItemProperty>()
                                    {
                                        new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                                        new LogItemProperty("ActionName", "GenerateSendDataItemFrom"),
                                        new LogItemProperty("FormData", new { CustomFormDataModel = customFormDataModel, SendDataItem = sendDataItem, RowData = rowData, ToDataSourceColumnNames = toDataSourceColumnNames }),
                                    },
                                    LogLevel  = LogLevel.Error,
                                    Exception = exFor
                                });
                            }
                        }
                    }
                    else
                    {
                        LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
                        {
                            LoggerName        = ConstantHelper.JobLog,
                            Title             = "GenerateSendDataItemFrom SqlqueryData Row Count = 0",
                            Message           = "SqlqueryData Row Count = 0",
                            LogItemProperties = new List <LogItemProperty>()
                            {
                                new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                                new LogItemProperty("ActionName", "GenerateSendDataItemFrom"),
                                new LogItemProperty("FormData", new { CustomFormDataModel = customFormDataModel, SendDataItem = sendDataItem }),
                            },
                            LogLevel  = LogLevel.Error,
                            Exception = new ArgumentException("SqlqueryData Row Count = 0")
                        });
                    }
                }
                else if (string.IsNullOrEmpty(detailSqlqueryData) == false)
                {
                    invokeDetailQuery(recipients, bodyContent, null, subjectData);
                }
                else if (recipients.Count > 0)
                {
                    var newSendDataItem = JsonConvert.DeserializeObject <SendDataItem>(JsonConvert.SerializeObject(sendDataItem));
                    await SendDataBy(sendDataMailAccount, newSendDataItem, subjectData, bodyContent, recipients, useDetailForEveryoneData);
                }

                return(true);
            }
            catch (Exception ex)
            {
                LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
                {
                    LoggerName        = ConstantHelper.JobLog,
                    Title             = "GenerateSendDataItemFrom Error",
                    Message           = ex.Message,
                    LogItemProperties = new List <LogItemProperty>()
                    {
                        new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                        new LogItemProperty("ActionName", "GenerateSendDataItemFrom"),
                        new LogItemProperty("FormData", new { CustomFormDataModel = customFormDataModel, SendDataItem = sendDataItem }),
                    },
                    LogLevel  = LogLevel.Error,
                    Exception = ex
                });

                return(false);
            }
        }