Пример #1
0
        //public string GenerateExcelFile(long id, string title, bool createAsTemplate, DataTable data = null, bool withUnits = false)
        //{
        //    string mimeType = "";
        //    string ext = ".xlsx";
        //    string contentDescriptorTitle = "";

        //    if (createAsTemplate)
        //    {
        //        ext = ".xlsm";
        //        contentDescriptorTitle = "generated";
        //    }
        //    else
        //    {
        //        ext = ".xlsx";
        //        if (withUnits) contentDescriptorTitle = "generatedExcelWithUnits";
        //        else contentDescriptorTitle = "generatedExcel";
        //    }

        //    mimeType = MimeMapping.GetMimeMapping(ext);

        //    DatasetManager datasetManager = new DatasetManager();

        //    try
        //    {
        //        DatasetVersion datasetVersion = datasetManager.GetDatasetLatestVersion(id);
        //        ExcelWriter writer = new ExcelWriter(createAsTemplate);

        //        string path = "";

        //        //excel allready exist
        //        if (datasetVersion.ContentDescriptors.Count(p => p.Name.Equals(contentDescriptorTitle) && p.URI.Contains(datasetVersion.Id.ToString())) > 0 &&
        //            data == null)
        //        {
        //            #region FileStream exist

        //            ContentDescriptor contentdescriptor =
        //                datasetVersion.ContentDescriptors.Where(p => p.Name.Equals(contentDescriptorTitle))
        //                    .FirstOrDefault();
        //            path = Path.Combine(AppConfiguration.DataPath, contentdescriptor.URI);

        //            long version = datasetVersion.Id;
        //            long versionNrGeneratedFile =
        //                Convert.ToInt64(contentdescriptor.URI.Split('\\').Last().Split('_')[1]);

        //            // check if FileStream exist
        //            if (FileHelper.FileExist(path) && version == versionNrGeneratedFile)
        //            {
        //                return path;
        //            }

        //            #endregion FileStream exist
        //        }

        //        // not exist needs to generated

        //        #region FileStream not exist

        //        if (data == null)
        //        {
        //            DatasetManager dm = new DatasetManager();
        //            data = dm.GetLatestDatasetVersionTuples(id);
        //            data.Strip();
        //        }

        //        long datastuctureId = datasetVersion.Dataset.DataStructure.Id;
        //        int versionNr = datasetManager.GetDatasetVersionNr(datasetVersion);
        //        if (createAsTemplate)
        //        {
        //            string[] columnNames = (from dc in data.Columns.Cast<DataColumn>()
        //                                    select dc.Caption).ToArray();

        //            path = createDownloadFile(id, versionNr, datastuctureId, "data", ext, writer, columnNames);
        //            storeGeneratedFilePathToContentDiscriptor(id, datasetVersion, ext, false);
        //            writer.AddData(data.Rows, path, datastuctureId);
        //        }
        //        else
        //        {
        //            path = createDownloadFile(id, versionNr, datastuctureId, "data", ext, writer, null, withUnits);

        //            // the default data is without units, so store the path of the file if it was generated
        //            storeGeneratedFilePathToContentDiscriptor(id, datasetVersion, ext, withUnits);

        //            string[] units = null;
        //            if (withUnits) units = getUnits(datastuctureId, null);

        //            writer.AddData(data, path, datastuctureId, units);
        //        }

        //        return path;

        //        #endregion FileStream not exist
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
        //        datasetManager.Dispose();
        //    }
        //}

        /// <summary>
        /// version id = 0 == latest version
        /// </summary>
        /// <param name="id"></param>
        /// <param name="versionId"></param>
        /// <param name="createAsTemplate"></param>
        /// <param name="data"></param>
        /// <param name="withUnits"></param>
        /// <returns></returns>
        public string GenerateExcelFile(long id, long versionId, bool createAsTemplate, DataTable data = null, bool withUnits = false)
        {
            string mimeType = "";
            string ext      = ".xlsx";
            string contentDescriptorTitle = "";

            if (createAsTemplate)
            {
                ext = ".xlsm";
                contentDescriptorTitle = "generated";
            }
            else
            {
                ext = ".xlsx";
                if (withUnits)
                {
                    contentDescriptorTitle = "generatedExcelWithUnits";
                }
                else
                {
                    contentDescriptorTitle = "generatedExcel";
                }
            }

            mimeType = MimeMapping.GetMimeMapping(ext);

            DatasetManager datasetManager = new DatasetManager();

            try
            {
                DatasetVersion datasetVersion = datasetManager.GetDatasetLatestVersion(id);
                ExcelWriter    writer         = new ExcelWriter(createAsTemplate);

                string path = "";

                //excel allready exist
                if (datasetVersion.ContentDescriptors.Count(p => p.Name.Equals(contentDescriptorTitle) && p.URI.Contains(datasetVersion.Id.ToString())) > 0 &&
                    data == null)
                {
                    #region FileStream exist

                    ContentDescriptor contentdescriptor =
                        datasetVersion.ContentDescriptors.Where(p => p.Name.Equals(contentDescriptorTitle))
                        .FirstOrDefault();
                    path = Path.Combine(AppConfiguration.DataPath, contentdescriptor.URI);

                    long version = datasetVersion.Id;
                    long versionNrGeneratedFile =
                        Convert.ToInt64(contentdescriptor.URI.Split('\\').Last().Split('_')[1]);

                    // check if FileStream exist
                    if (FileHelper.FileExist(path) && version == versionNrGeneratedFile)
                    {
                        return(path);
                    }

                    #endregion FileStream exist
                }

                // not exist needs to generated

                #region FileStream not exist

                if (data == null)
                {
                    data = getData(id, versionId);
                }

                long datastuctureId = datasetVersion.Dataset.DataStructure.Id;
                int  versionNr      = datasetManager.GetDatasetVersionNr(datasetVersion);
                if (createAsTemplate)
                {
                    string[] columnNames = (from dc in data.Columns.Cast <DataColumn>()
                                            select dc.Caption).ToArray();

                    path = createDownloadFile(id, versionNr, datastuctureId, "data", ext, writer, columnNames);
                    storeGeneratedFilePathToContentDiscriptor(id, datasetVersion, ext, false);
                    writer.AddData(data.Rows, path, datastuctureId);
                }
                else
                {
                    path = createDownloadFile(id, versionNr, datastuctureId, "data", ext, writer, null, withUnits);

                    // the default data is without units, so store the path of the file if it was generated
                    storeGeneratedFilePathToContentDiscriptor(id, datasetVersion, ext, withUnits);

                    string[] units = null;
                    if (withUnits)
                    {
                        units = getUnits(datastuctureId, null);
                    }

                    writer.AddData(data, path, datastuctureId, units);
                }

                return(path);

                #endregion FileStream not exist
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                datasetManager.Dispose();
            }
        }