using System; using System.Collections.Generic; using System.IO; using System.Linq; using Schaad.Accounting.Datasets; using Schaad.Accounting.Interfaces; namespace Schaad.Accounting.Services { public class SettingsService : ISettingsService { private readonly SettingsDataset settingsDataset; private string mandator; private int year = DateTime.Now.Year; public SettingsService(SettingsDataset settingsDataset) { this.settingsDataset = settingsDataset; this.mandator = settingsDataset.DefaultMandator; } public int GetYear() { return year; } public void SetYear(int year) { this.year = year; } public bool TrySetYear(int year) { var oldYear = this.year; SetYear(year); if (Directory.GetFiles(GetDbPath()).Any() == false) { SetYear(oldYear); return false; } return true; } public string GetMandator() { return mandator; } public IReadOnlyList GetMandators(int year) { var path = Path.Combine(GetSettings().DataPath, year.ToString()); return Directory.GetDirectories(path).Select(Path.GetFileName).Where(d => !d.Equals("Backup", StringComparison.InvariantCultureIgnoreCase)).ToList(); } public void SetMandator(string mandator) { this.mandator = mandator; } public string GetYearMandatorPath() { var path = Path.Combine(GetSettings().DataPath, year.ToString(), mandator); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } return path; } public string GetLastYearMandatorPath() { var path = Path.Combine(GetSettings().DataPath, (year - 1).ToString(), mandator); return path; } public string GetBackupFilePath() { var backupPath = Path.Combine(GetSettings().DataPath, year.ToString(), "backup", mandator); if (Directory.Exists(backupPath) == false) { Directory.CreateDirectory(backupPath); } var backupFilePath = Path.Combine(backupPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip"); return backupFilePath; } public string GetUploadPath() { var uploadPath = Path.Combine(GetYearMandatorPath(), "uploads"); if (Directory.Exists(uploadPath) == false) { Directory.CreateDirectory(uploadPath); } return uploadPath; } public string GetCreditCardStatementPath() { var path = Path.Combine(GetUploadPath(), "creditCard"); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } return path; } public string GetDbPath() { var path = Path.Combine(GetYearMandatorPath(), "Data"); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } return path; } public string GetLastYearDbPath() { var path = Path.Combine(GetLastYearMandatorPath(), "Data"); if (Directory.Exists(path) == false) { Directory.CreateDirectory(path); } return path; } public SettingsDataset GetSettings() { return settingsDataset; } } }