예제 #1
0
        private static IEnumerable <ICode> GetColumnDefinitions(Dictionary <int, ICodebook> codebooks)
        {
            var columns = new List <ICode>();

            foreach (var columnInfo in AnswerMetadata.JournalInfoColumns())
            {
                var columnName  = columnInfo.Column;
                var columnType  = columnInfo.Datatype;
                var columnWidth = columnInfo.ColumnWidth;
                var col         = new Code(0, 0, 0, 0, "", columnName, "", columnType, "", columnWidth);
                columns.Add(col);
            }

            columns.AddRange(codebooks.Values.SelectMany(cb => cb.Codes));
            return(columns);
        }
예제 #2
0
        private void importCsvButton_Click(object sender, EventArgs e)
        {
            var dir = FindCodebooks();

            if (dir.Contains("not found"))
            {
                Log("Error: Codebooks could not be found. Check locations, folder 'Codebooks' must be in current directory.");
                //throw new ApplicationException("Codebooks could not be found");
            }

            var codebookFiles = new List <String> {
                @"\codebook_cc.xml", @"\codebook_ccy.xml",
                @"\codebook_ct.xml", @"\codebook_tt.xml", @"\codebook_ycy.xml"
            };

            var fullFilePaths = codebookFiles.Select(f => dir + f);

            CodeBookXmlLoader codebookLoader;

            try
            {
                codebookLoader = new CodeBookXmlLoader(fullFilePaths);
                _codebooks     = codebookLoader.Read();
            } catch (Exception ex)
            {
                Log("Fejl indlæsning kodebøger: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }

            Log("Indlæste kodebøger: " + codebookFiles.Aggregate((a, b) => a + ", " + b));

            // read answers
            var answersLoader = new AnswersCsvLoader();

            Log("Indlæser svar i CSV-format");
            Dictionary <int, DataTable> answers;

            try
            {
                answers = answersLoader.ReadCsvAnswers(_files);
            }
            catch (Exception ex)
            {
                Log("Fejl indlæsning svar: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }


            var answerTables = answers.GroupBy(a => a.Key);

            foreach (var grouping in answerTables)
            {
                var surveyId     = grouping.Key;
                var journalInfos = grouping.SelectMany(group => AnswerInfo.GetJournalInfos(group.Value, surveyId));
                foreach (var journalInfo in journalInfos)
                {
                    AddExportInfo(journalInfo, surveyId);
                }
            }


            var journalInfoColumns = AnswerMetadata.JournalInfoColumns();

            var mixer            = new CodebookAnswerMixer(_codebooks.Values);
            var answersPerSurvey = new Dictionary <int, List <IAnswer> >();

            Log("Importerer svar...");

            int codebookId = 0;

            try
            {
                foreach (var pair in _codebooks)
                {
                    codebookId = pair.Key; //.ToString();
                    ICodebook codebook = pair.Value;
                    if (answers.ContainsKey(codebookId))
                    {
                        var answersTable = answers[codebookId];
                        // get answer table and codebook with same surveyId. Just for trying out
                        var answersForSurvey = mixer.ExtractAnswers(codebook, answersTable, journalInfoColumns);
                        answersPerSurvey.Add(answersForSurvey.First, answersForSurvey.Second);
                    }
                }
            } catch (Exception ex)
            {
                Log("Fejl i mix: " + ex.Message);
                Log("KodebogID: " + codebookId);
                Log(ex.StackTrace);
                throw;
            }

            try
            {
                _importedAnswers = mixer.CollectAnswersByJournal(answersPerSurvey);
            } catch (Exception ex)
            {
                Log("Fejl saml svar: " + ex.Message);
                Log(ex.StackTrace);
                throw;
            }

            Log("Svarene er importeret.");

            foreach (var answerBook in _importedAnswers)
            {
                foreach (var journalInfo in answerBook.AnswerMetadataList)
                {
                    AddExportInfo(new AnswerInfo(journalInfo), true);
                }
            }

            importCsvButton.Enabled = false;
            saveButton.Enabled      = true;
        }