Ejemplo n.º 1
0
        public static ResponseFile Csv(Context context, SiteSettings ss, Export export)
        {
            ss.SetExports(context: context);
            ss.JoinedSsHash.Values.ForEach(currentSs => currentSs
                                           .SetChoiceHash(context: context, all: true));
            var data = new Dictionary <long, Dictionary <long, Dictionary <int, string> > >();
            Dictionary <long, long> keys = null;
            var keyColumns = KeyColumns(export, ss.SiteId);
            var view       = Views.GetBySession(context: context, ss: ss);

            switch (ss.ReferenceType)
            {
            case "Issues":
                keys = IssueData(
                    context: context,
                    ss: ss,
                    data: data,
                    where : view.Where(context: context, ss: ss),
                    orderBy: view.OrderBy(
                        context: context,
                        ss: ss,
                        orderBy: Rds.IssuesOrderBy()
                        .UpdatedTime(SqlOrderBy.Types.desc)),
                    export: export,
                    keys: keys,
                    keyColumns: keyColumns);
                break;

            case "Results":
                keys = ResultData(
                    context: context,
                    ss: ss,
                    data: data,
                    where : view.Where(context: context, ss: ss),
                    orderBy: view.OrderBy(
                        context: context,
                        ss: ss,
                        orderBy: Rds.ResultsOrderBy()
                        .UpdatedTime(SqlOrderBy.Types.desc)),
                    export: export,
                    keys: keys,
                    keyColumns: keyColumns);
                break;
            }
            export.Join?.ForEach(link =>
            {
                var currentSs = ss.JoinedSsHash.Get(link.SiteId);
                switch (currentSs.ReferenceType)
                {
                case "Issues":
                    keys = IssueData(
                        context: context,
                        ss: currentSs,
                        data: data,
                        where : Rds.IssuesWhere().IssueId_In(keys.Values),
                        orderBy: null,
                        export: export,
                        keys: keys,
                        keyColumns: keyColumns);
                    break;

                case "Results":
                    keys = ResultData(
                        context: context,
                        ss: currentSs,
                        data: data,
                        where : Rds.ResultsWhere().ResultId_In(keys.Values),
                        orderBy: null,
                        export: export,
                        keys: keys,
                        keyColumns: keyColumns);
                    break;
                }
            });
            var csv = new System.Text.StringBuilder();

            if (export.Header == true)
            {
                csv.Append(export.Columns.Select(column =>
                                                 "\"" + column.GetLabelText() + "\"").Join(","), "\n");
            }
            data
            .FirstOrDefault(o => o.Key == ss.SiteId)
            .Value?
            .ForEach(dataRow =>
                     csv.Append(export.Columns.Select(column =>
                                                      data
                                                      .Get(column.SiteId)?
                                                      .Get(dataRow.Key)?
                                                      .Get(column.Id) ?? string.Empty).Join(",") + "\n"));
            return(new ResponseFile(
                       fileContent: csv.ToString(),
                       fileDownloadName: FileName(
                           context: context,
                           ss: ss,
                           name: export.Name)));
        }