public void SendMultiEventMail()
        {
            if (!Mail.CheckIfEmailsAllowed())
            {
                MessageBox.Show("Email sending is disabled"); return;
            }
            List <LayData> datalist = new List <LayData>();


            CalcParameters cp = new CalcParameters();

            foreach (BasicBrokerData book in Bookmakers)
            {
                if (book.EMailing)
                {
                    cp.bookielimit += "|" + book.Name + "|";
                }
            }
            if (cp.bookielimit == null)
            {
                System.Windows.Forms.MessageBox.Show("Select Bookies for emails !!"); return;
            }
            cp.limit = FootballHedge.Properties.Settings.Default.MailplLimit;

            cp.preferedbookie = "All";
            if (FootballHedge.Properties.Settings.Default.MailOnlyToday)
            {
                cp.today = true;
            }
            else
            {
                cp.today = false;
            }
            CalcHedge(ref datalist, cp);

            datalist.Sort();
            datalist.Reverse();

            StringBuilder body = new StringBuilder();

            body.Append("<html><body><table>");
            foreach (LayData item in datalist)
            {
                body.Append("<tr><td>" + item.Match + "</td><td>[" + item.Selection + "]</td><td>" + item.Back + " / " + Math.Round(item.Lay, 2) + "</td><td>(" + item.Bookie + ")</td><td>  " + item.LastUpdate + "</td></tr>");
            }
            body.Append("</table></body></html>");
            Mail.SendMail("Options", body.ToString());
        }
        public void Calchedge(ref List <LayData> datalist, List <FData> FootData, CalcParameters cpar)
        {
            if (FootData.Count == 0)
            {
                return;
            }

            for (int id = FootData.Count - 1; id >= 0; id--)
            {
                FData item = FootData[id];
                if (cpar.today && item.time.Day != DateTime.Now.Day)
                {
                    continue;
                }


                foreach (KeyValuePair <int, X> it in item.XKoef)
                {
                    BasicBrokerData bookie = MainF.Bookmakers[it.Key];
                    if (cpar.preferedbookie != "All" && cpar.preferedbookie != bookie.Name)
                    {
                        continue;
                    }
                    if (!cpar.bookielimit.Contains(bookie.Name))
                    {
                        continue;
                    }

                    if (bookie.Type == BrokerType.BACK)
                    {
                        for (int q = 0; q < 3; q++)
                        {
                            if (it.Value.Koef[q] != 0 && item.Lay[q] != 0 && it.Value.Koef[q] >= bookie.Limit && CalcLayPL(it.Value.Koef[q], item.Lay[q]) > cpar.limit)
                            {
                                StringBuilder selection = new StringBuilder();
                                switch (q)
                                {
                                case 0: selection.Append("Draw"); break;

                                case 1: selection.Append(item.Team1); break;

                                case 2: selection.Append(item.Team2); break;

                                default: selection.Append("Uknown"); break;
                                }

                                LayData ld = new LayData();
                                ld.Match      = item.Team1 + " - " + item.Team2;
                                ld.Selection  = selection.ToString();
                                ld.Lay        = item.Lay[q];
                                ld.Back       = it.Value.Koef[q];
                                ld.Profit     = Math.Round(CalcLayPL(it.Value.Koef[q], item.Lay[q]), 3);
                                ld.Size       = item.SizeX[0];
                                ld.Bookie     = bookie.Name;
                                ld.League     = item.League;
                                ld.Time       = ChangeTimeToString(item.time);
                                ld.LastUpdate = it.Value.LastUpdate;
                                datalist.Add(ld);
                            }
                        }
                    } // end type.Back
                    if (bookie.Type == BrokerType.HANDICAP)
                    {
                        foreach (KeyValuePair <int, X> hi in item.XKoef)
                        {
                            if (MainF.Bookmakers[hi.Key].Type != BrokerType.BACK)
                            {
                                continue;
                            }
                            if (!cpar.bookielimit.Contains(MainF.Bookmakers[hi.Key].Name))
                            {
                                continue;
                            }
                            if (cpar.preferedbookie != "All" && cpar.preferedbookie != MainF.Bookmakers[hi.Key].Name)
                            {
                                continue;
                            }

                            if (hi.Value.Koef[1] != 0 && hi.Value.Koef[1] < hi.Value.Koef[2] && hi.Value.Koef[1] >= MainF.Bookmakers[hi.Key].Limit && CalcHandicapPL(hi.Value.Koef[1], it.Value.Koef[2]) > cpar.limit)
                            {
                                LayData ld = new LayData();
                                ld.Match      = item.Team1 + " - " + item.Team2;
                                ld.Selection  = item.Team1;
                                ld.Lay        = it.Value.Koef[2];
                                ld.Back       = hi.Value.Koef[1];
                                ld.Profit     = Math.Round(CalcHandicapPL(ld.Back, ld.Lay), 2);
                                ld.Bookie     = MainF.Bookmakers[hi.Key].Name;
                                ld.League     = item.League;
                                ld.Size       = -1;
                                ld.Time       = ChangeTimeToString(item.time);
                                ld.LastUpdate = hi.Value.LastUpdate + " Hand";
                                datalist.Add(ld);
                            }
                            if (hi.Value.Koef[2] != 0 && hi.Value.Koef[1] > hi.Value.Koef[2] && hi.Value.Koef[2] >= MainF.Bookmakers[hi.Key].Limit && CalcHandicapPL(hi.Value.Koef[2], it.Value.Koef[1]) > cpar.limit)
                            {
                                LayData ld = new LayData();
                                ld.Match      = item.Team1 + " - " + item.Team2;
                                ld.Selection  = item.Team2;
                                ld.Lay        = it.Value.Koef[1];
                                ld.Back       = hi.Value.Koef[2];
                                ld.Profit     = Math.Round(CalcHandicapPL(ld.Back, ld.Lay), 2);
                                ld.Bookie     = MainF.Bookmakers[hi.Key].Name;
                                ld.League     = item.League;
                                ld.Size       = -1;
                                ld.Time       = ChangeTimeToString(item.time);
                                ld.LastUpdate = hi.Value.LastUpdate + " Hand";
                                datalist.Add(ld);
                            }
                        }
                    }
                }
            }
        }
        public void CalcHedge(ref List <LayData> datalist, CalcParameters cpar)
        {
            DataBase DB = new DataBase(this);

            DB.Calchedge(ref datalist, FootData, cpar);
        }
        public void UpdateHedgeDataInListview()
        {
            Task.Factory.StartNew(() =>
            {
                int index    = 0;
                bool Today   = false;
                bool ViewAll = false;
                Dispatcher.Invoke((Action)(() =>
                {
                    BackgroundGrid.Background = SystemColors.ActiveBorderBrush;
                    TabCont.SelectedIndex = 0;
                    LWHedge.Items.Clear();
                    if (ComboboxActiveBookies.SelectedIndex != 0)
                    {
                        index = ComboboxActiveBookies.SelectedIndex;
                    }
                    Today = CheckBoxToday.IsChecked.Value;
                    ViewAll = CheckBoxViewAll.IsChecked.Value;
                }));


                List <LayData> datalist = new List <LayData>();

                CalcParameters cp = new CalcParameters();
                foreach (BasicBrokerData book in Bookmakers)
                {
                    if (book.InUse || ViewAll)
                    {
                        cp.bookielimit += "|" + book.Name + "|";
                    }
                }

                if (cp.bookielimit == null)
                {
                    System.Windows.Forms.MessageBox.Show("Select Bookies !!"); return;
                }
                cp.limit = FootballHedge.Properties.Settings.Default.plLimit;

                cp.preferedbookie = ComboboxActiveBookies.Items[index].ToString();
                cp.today          = Today;
                CalcHedge(ref datalist, cp);

                if (datalist.Count == 0)
                {
                    return;
                }

                datalist.Sort();
                datalist.Reverse();


                string[] d;
                StringBuilder bufstr = new StringBuilder();
                foreach (LayData item in datalist)
                {
                    bufstr.Clear();
                    ListViewHedgeData lview = new ListViewHedgeData();
                    lview.Match             = item.Match;
                    lview.Team       = item.Selection;
                    lview.Back       = item.Back.ToString();
                    lview.Lay        = item.Lay.ToString();
                    lview.PL         = item.Profit.ToString();
                    lview.Size       = item.Size.ToString();
                    lview.FullLeague = item.League;
                    d = item.League.Split(' ');
                    foreach (string str in d)
                    {
                        bufstr.Append(str.Substring(0, 1));
                    }
                    lview.League     = bufstr.ToString();
                    lview.Bookie     = item.Bookie;
                    lview.Time       = item.Time;
                    lview.LastUpdate = item.LastUpdate;

                    Dispatcher.Invoke((Action)(() => LWHedge.Items.Add(lview)));
                }

                Dispatcher.Invoke((Action)(() => LWHedge.ScrollIntoView(LWHedge.Items[0])));
            });
        }