private List <GroupMacroData> GenerateGroupMacroData(List <List <string> > actual_filtered_lineData)
        {
            var data = new List <GroupMacroData>();

            for (int i = 0; i < actual_filtered_lineData.Count; i++)
            {
                var afl = actual_filtered_lineData[i];
                var itm = new GroupMacroData();
                itm.period = afl[0];
                try { itm.MacroValue1 = double.Parse(afl[1].Trim()); } catch { itm.MacroValue1 = 0; }

                if (afl.Count >= 4)
                {
                    try { itm.MacroValue2 = double.Parse(afl[2].Trim()); } catch { itm.MacroValue2 = 0; }
                }
                if (afl.Count >= 5)
                {
                    try { itm.MacroValue3 = double.Parse(afl[3].Trim()); } catch { itm.MacroValue3 = 0; }
                }
                if (afl.Count >= 6)
                {
                    try { itm.MacroValue4 = double.Parse(afl[4].Trim()); } catch { itm.MacroValue4 = 0; }
                }

                try { itm.NPL = double.Parse(afl.Last().Trim()); } catch { itm.NPL = 0; }
                data.Add(itm);
            }

            return(data);
        }
        public List <string> GeneratesaveMacroData(long affiliateId, int macroId)
        {
            var affBasePath = Path.Combine(AppSettings.MacroModelPath, affiliateId.ToString());

            if (!Directory.Exists(affBasePath))
            {
                Directory.CreateDirectory(affBasePath);
            }
            //Get MacroData
            #region Get MacroData

            var qry = Queries.Macro_Analysis(macroId);
            var dt  = DataAccess.i.GetData(qry);

            var itms = new List <MacroData>();
            for (int i = 0; i < dt.Rows.Count; i++)// DataRow dr in dt.Rows)
            {
                //Log4Net.Log.Info(i);
                DataRow dr  = dt.Rows[i];
                var     itm = DataAccess.i.ParseDataToObject(new MacroData(), dr);
                itms.Add(itm);
            }
            var periods = itms.Select(o => o.Period).Distinct().OrderBy(p => p).ToList();

            var lstMacroData = new List <string>();
            var header       = new List <string>();


            var macroIds = itms.Select(o => o.MacroeconomicId).ToList();

            //foreach (var itm in macroIds)
            //{
            //    if (itms.Where(p => p.MacroeconomicId == itm).Any(o => o.Value > 0))
            //    {
            //        // do nothing
            //    }
            //    else
            //    {
            //        var toRemoveItms = itms.Where(p => p.MacroeconomicId == itm).ToList();
            //        foreach (var _itm in toRemoveItms)
            //        {
            //            itms.Remove(_itm);
            //        }
            //        var rmvAff = affM.FirstOrDefault(o => o.MacroeconomicVariableId == itm);
            //        affM.Remove(rmvAff);
            //    }
            //}

            header.Add("Units");
            for (int i = 0; i < affM.Count; i++)
            {
                header.Add($"Var{i + 1}");
            }
            header.Add("Percentage");

            lstMacroData.Add(string.Join(",", header));

            for (int i = 0; i < periods.Count; i++)
            {
                var pickPeriod = periods[i];

                var grpdata = new GroupMacroData();
                var period  = GetPeriod(pickPeriod);

                var body = new List <string>();
                body.Add(period);

                var _itms = itms.Where(o => o.Period == pickPeriod && o.MacroeconomicId != -1).ToList();
                //foreach(var itm in _itms)
                //{
                //    try { body.Add(itm.Value.ToString()); } catch { body.Add("0"); }
                //}
                for (int j = 0; j < affM.Count; j++)
                {
                    try { body.Add(itms.FirstOrDefault(o => o.Period == pickPeriod && o.MacroeconomicId == affM[j].MacroeconomicVariableId).Value.ToString()); } catch { body.Add("0"); };
                }

                try { body.Add(itms.FirstOrDefault(o => o.Period == pickPeriod && o.MacroeconomicId == -1).Value.ToString()); } catch { body.Add(""); };
                lstMacroData.Add(string.Join(",", body));
            }
            var add_macro_data = Path.Combine(affBasePath, "MacroData.csv");
            File.WriteAllLines(add_macro_data, lstMacroData.ToArray());
            #endregion

            return(lstMacroData);
        }