Inheritance: INotifyPropertyChanged
        public async Task <ReadWriteResult> SaveDataAsync(WorkYear year)
        {
            Dictionary <string, List <string> > changedFiles = year.Months
                                                               .Where(m => m.Days.Any(wd => wd.IsChanged))
                                                               .ToDictionary(
                m => Path.Combine(this.dataDirectory, $"{year.Year}_{m.Month:00}.md"),
                m => m.Days
                .Where(wd => wd.IsChanged && !wd.IsEmpty() || !wd.IsEmpty())
                .Select(wd => $"{wd.Year},{wd.Month},{wd.Day}|{wd.OriginalString.Replace(Environment.NewLine, "<br />").Replace("|", "&#x007C;")}")
                .ToList());

            foreach (var fileInfo in changedFiles.Where(f => f.Value.Any()))
            {
                using (var stream = new FileStream(fileInfo.Key, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, 4096, true))
                    using (var sw = new StreamWriter(stream))
                    {
                        foreach (var line in fileInfo.Value)
                        {
                            await sw.WriteLineAsync(line);
                        }

                        await sw.FlushAsync();

                        await stream.FlushAsync();
                    }
            }

            return(new ReadWriteResult {
                Success = true
            });
        }
Example #2
0
 public void Export(WorkYear year)
 {
     foreach (var month in year.Months) {
     var dataFileName = FilenameForMonth(month);
     this.Export(month, dataFileName);
       }
 }
Example #3
0
 public void Export(WorkYear year)
 {
     foreach (var month in year.Months)
     {
         var dataFileName = FilenameForMonth(month);
         this.Export(month, dataFileName);
     }
 }
Example #4
0
 public async Task ExportAsync(WorkYear year)
 {
     foreach (var month in year.Months)
     {
         var dataFileName = FilenameForMonth(month);
         await this.ExportAsync(month, dataFileName).ConfigureAwait(false);
     }
 }
Example #5
0
 public void WorkYear_ctor_CreateWholeYear()
 {
     WorkYear wy = new WorkYear(2011, new WorkDayParserSettings(), 0, 1, null, null);
     Assert.AreEqual(12, wy.Months.Count);
     //test sample month
     var march = wy.Months.ElementAt(2);
     Assert.AreEqual(5, march.Weeks.Count);
     Assert.AreEqual(31, march.Weeks.Sum(w => w.Days.Count()));
     Assert.AreEqual(DayOfWeek.Tuesday, march.Weeks.First().Days.First().DayOfWeek);
 }
        public ReadWriteResult SetDataOfYear(WorkYear workYear)
        {
            var ret = ReadData();

            if (ret.Success)
            {
                foreach (WorkDayPersistenceData data in this.WorkDaysData.Where(wdpd => wdpd.Year == workYear.Year).ToList())
                {
                    var     workDay  = workYear.GetDay(data.Month, data.Day);
                    WorkDay errorDay = workDay;
                    try
                    {
                        workDay.SetData(data.OriginalString);
                    }
                    catch (Exception exception)
                    {
                        ret.ErrorCount++;
                        // only remember first error for now
                        if (ret.Success)
                        {
                            ret.Success = false;
                            string errorMessage = exception.Message;
                            if (errorDay != null)
                            {
                                errorMessage = string.Format("Beim Einlesen von {0} in der Datei {1} trat in Zeile {2} folgender Fehler auf: {3}", errorDay, data.FileName, data.LineNumber, exception.Message);
                                logger.Error(errorMessage);
                            }

                            ret.Error = errorMessage;
                        }
                    }
                }

                if (ret.ErrorCount > 1)
                {
                    ret.Error += string.Format("\n\n\nEs liegen noch {0} weitere Fehler vor.", ret.ErrorCount);
                }
            }

            return(ret);
        }
Example #7
0
 public ReadWriteResult SaveData(WorkYear year)
 {
     foreach (var month in year.Months)
     {
         List <string> data            = new List <string>();
         var           changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList();
         foreach (var workDay in changedWorkDays)
         {
             var description = workDay.OriginalString
                               .Replace(Environment.NewLine, "<br />")
                               .Replace("|", "&#x007C;");
             data.Add(string.Format("{0},{1},{2}|{3}", workDay.Year, workDay.Month, workDay.Day, description));
         }
         var dataFileName = string.Format("{0}_{1}.md", year.Year, month.Month.ToString("00"));
         var dataFilePath = Path.Combine(this.dataDirectory, dataFileName);
         if (data.Any())
         {
             File.WriteAllLines(dataFilePath, data);
         }
     }
     return(new ReadWriteResult {
         Success = true
     });
 }
Example #8
0
        public async Task <ReadWriteResult> SaveDataAsync(WorkYear year)
        {
            foreach (var month in year.Months)
            {
                var anyChanges = month.Days.Any(wd => wd.IsChanged);
                if (!anyChanges)
                {
                    continue;
                }

                var changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList();
                var data            = changedWorkDays
                                      .Select(workDay => $"{workDay.Year},{workDay.Month},{workDay.Day}|{workDay.OriginalString.Replace(Environment.NewLine, "<br />").Replace("|", "&#x007C;")}")
                                      .ToList();

                if (data.Any())
                {
                    var dataFileName = $"{year.Year}_{month.Month:00}.md";
                    var dataFilePath = Path.Combine(this.dataDirectory, dataFileName);


                    using (var stream = new FileStream(dataFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, 4096, true))
                        using (var sw = new StreamWriter(stream))
                        {
                            foreach (var line in data)
                            {
                                await sw.WriteLineAsync(line).ConfigureAwait(false);
                            }
                        }
                }
            }

            return(new ReadWriteResult {
                Success = true
            });
        }
Example #9
0
 public async Task ExportAsync(WorkYear year)
 {
     var listOfTasks = year.Months.Select(month => this.ExportAsync(month, FilenameForMonth(month))).ToList();
     await Task.WhenAll(listOfTasks);
 }
Example #10
0
 public ReadWriteResult SetDataOfYear(WorkYear workYear)
 {
     var ret = ReadData();
       if (ret.Success) {
     foreach (WorkDayPersistenceData data in this.WorkDaysData.Where(wdpd => wdpd.Year == workYear.Year).ToList()) {
       var workDay = workYear.GetDay(data.Month, data.Day);
       WorkDay errorDay = workDay;
       try {
     workDay.SetData(data.OriginalString);
       }
       catch (Exception exception) {
     ret.ErrorCount++;
     // only remember first error for now
     if (ret.Success) {
       ret.Success = false;
       string errorMessage = exception.Message;
       if (errorDay != null) {
         errorMessage = string.Format("Beim Einlesen von {0} in der Datei {1} trat in Zeile {2} folgender Fehler auf: {3}", errorDay, data.FileName, data.LineNumber, exception.Message);
         logger.Error(errorMessage);
       }
       ret.Error = errorMessage;
     }
       }
     }
     if (ret.ErrorCount > 1) {
       ret.Error += string.Format("\n\n\nEs liegen noch {0} weitere Fehler vor.", ret.ErrorCount);
     }
       }
       return ret;
 }
Example #11
0
 public ReadWriteResult SaveData(WorkYear year)
 {
     foreach (var month in year.Months) {
     List<string> data = new List<string>();
     var changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList();
     foreach (var workDay in changedWorkDays) {
       data.Add(string.Format("{0},{1},{2}|{3}", workDay.Year, workDay.Month, workDay.Day, workDay.OriginalString.Replace(Environment.NewLine, "<br />")));
     }
     var dataFileName = string.Format("{0}_{1}.md", year.Year, month.Month.ToString("00"));
     var dataFilePath = Path.Combine(this.dataDirectory, dataFileName);
     if (data.Any()) {
       File.WriteAllLines(dataFilePath, data);
     }
       }
       return new ReadWriteResult {Success = true};
 }