using System; using System.Globalization; using System.Text.RegularExpressions; namespace GCHR.Model { public class UngueltigePeriodeException : Exception { } public class Periode { public static string ErsterMonatImGeschaeftsjahr { get; set; } public static DateipfadeXml Dateipfade { get; set; } public string Jahr; public string Monat; public string JahrZweistellig { get { return Jahr.Substring(2, 2); } } private readonly bool _keinJahresabschluss; public Periode(int jahr, int monat) : this( jahr.ToString(CultureInfo.InvariantCulture) + monat.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0')) { } public Periode(string periode) : this(periode, false) { } public Periode(string periode, bool keinJahresabschluss) { if (string.IsNullOrEmpty(ErsterMonatImGeschaeftsjahr)) { ErsterMonatImGeschaeftsjahr = "01"; } if (Dateipfade == null) { Dateipfade = new DateipfadeXml(); } if (periode.Length != 6 || !Regex.IsMatch(periode, @"2[012][0-9][0-9][01][0-9]")) throw new UngueltigePeriodeException(); Jahr = periode.Substring(0, 4); Monat = periode.Substring(4, 2); var monat = Int32.Parse(Monat); if (monat > 12 || monat < 1) throw new UngueltigePeriodeException(); _keinJahresabschluss = keinJahresabschluss; } public Periode Jahresbeginn { get { return Jahresbeginn2(false); } } public Periode Bilanzbeginn { get { return Jahresbeginn2(_keinJahresabschluss); } } private Periode Jahresbeginn2(bool keinJahresabschluss) { var aktJahr = Int32.Parse(Jahr); if (String.Compare(Monat, ErsterMonatImGeschaeftsjahr, StringComparison.Ordinal) < 0) aktJahr--; if (keinJahresabschluss) aktJahr--; return new Periode(aktJahr + ErsterMonatImGeschaeftsjahr); } public string Vormonat (int verschiebung) { var monat = Int32.Parse(Monat); var jahr = Int32.Parse(Jahr); monat -= verschiebung; if (monat < 1) { monat += 12; jahr--; } if (monat > 12) { monat -= 12; jahr++; } return (jahr + monat.ToString(CultureInfo.InvariantCulture).PadLeft(2, '0')); } public Periode Vorgaenger { get { return new Periode(Vormonat(1)); } } public Periode Nachfolger { get { return new Periode(Vormonat(-1)); } } public string MonatDesJahres(int abJahresbeginn) { return Jahresbeginn.Vormonat(1 - abJahresbeginn); } public override string ToString() { return (Jahr + Monat); } public string Klartext { get { return (Monat + "/" + Jahr); } } public string BalanceDatei { get { return String.Format(Dateipfade.ExportBalance, Jahr, Monat, Jahresbeginn.Jahr); } } public string AccountsDatei { get { return String.Format(Dateipfade.ExportAccounts, Jahr, Monat, Jahresbeginn.Jahr); } } public string LogDatei { get { var datei = String.Format(Dateipfade.ExportLog, Jahr, Monat, Jahresbeginn.Jahr); return datei; } } public string ProtokollDatei { get { return String.Format(Dateipfade.ExportProtokoll, Jahr, Monat, Jahresbeginn.Jahr); } } public Ampelstatus Status { get { return Ampelstatus.Gelb; } } public string Stand { get { return "20.02.2013"; } } public string Info { get { return "Abweichung in Summe: 12.345 €"; } } public string Vorjahr { get { return (Int32.Parse(Jahr) - 1).ToString(); } } } }