using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sleis.Export; using Ionic.Zip; using System.IO; using Sleis.Data; using System.Collections; using Sleis.Utility; using System.Text; namespace Sleis.Service { public class ExportService : BaseService { public List ExportGroups { get; set; } public DataSetData DataSetData { get; set; } public void GenerateCsvExportToZip(string exportName, int mAgencyReportId, int facilityId, Stream outputStream) { if (SessionUtility.CurrentUser.IsAgencyUser() && mAgencyReportId == 0) { exportName = String.Format("Master_{0}", exportName); } else if (SessionUtility.CurrentUser.IsAgencyUser() && mAgencyReportId > 0) { exportName = String.Format("Agency_{0}", exportName); } else { exportName = String.Format("Public_{0}", exportName); } ExportGroup export = ExportGroups.Single(e => e.Name == exportName); using (ZipFile zip = new ZipFile()) { foreach (string key in export.Queries.Keys) { MemoryStream stream = new MemoryStream(CreateCsvFileFromDataSet(mAgencyReportId > 0 ? DataSetData.GetDataSetByAgencyReportId(export.Queries[key], mAgencyReportId) : DataSetData.GetDataSetByFacilityId(export.Queries[key], facilityId))); zip.AddFileStream(String.Format("{0}.csv", key), "", stream); } zip.Save(outputStream); } } private byte[] CreateCsvFileFromDataSet(IList> list) { StringBuilder sb = new StringBuilder(); //write Header Row if (list != null && list.Count > 0) { ArrayList headers = new ArrayList(((Dictionary)list[0]).Keys); //headers.Reverse(0, headers.Count - 1); //reverse order. sb.AppendLine(CsvUtility.CreateLine(headers.ToArray())); foreach (Dictionary row in list) { ArrayList rowValues = new ArrayList(row.Values); //rowValues.Reverse(0, rowValues.Count - 1); sb.AppendLine(CsvUtility.CreateLine(rowValues.ToArray())); } } return Encoding.ASCII.GetBytes(sb.ToString()); } } }