Periode.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. namespace GCHR.Model
  3. {
  4. public class Periode
  5. {
  6. public string Jahr;
  7. public string Monat;
  8. public string JahrZweistellig { get { return Jahr.Substring(2, 2); } }
  9. private readonly bool _keinJahresabschluss;
  10. public Periode(string periode)
  11. : this(periode, false)
  12. {
  13. }
  14. public Periode(string periode, bool keinJahresabschluss)
  15. {
  16. Jahr = periode.Substring(0, 4);
  17. Monat = periode.Substring(4, 2);
  18. _keinJahresabschluss = keinJahresabschluss;
  19. }
  20. public Periode Jahresbeginn(string geschaeftsjahr)
  21. {
  22. return Jahresbeginn(geschaeftsjahr, false);
  23. }
  24. public Periode Bilanzbeginn(string geschaeftsjahr)
  25. {
  26. return Jahresbeginn(geschaeftsjahr, _keinJahresabschluss);
  27. }
  28. private Periode Jahresbeginn(string geschaeftsjahr, bool keinJahresabschluss)
  29. {
  30. int ersterMonat; // erster Monat im Geschäftsjahr
  31. try
  32. {
  33. ersterMonat = Int32.Parse(geschaeftsjahr);
  34. if (ersterMonat > 12 || ersterMonat < 1) throw new OverflowException("Erster Monat im Geschäftsjahr muss zwischen 1 und 12 sein.");
  35. }
  36. catch (Exception)
  37. {
  38. ersterMonat = 1;
  39. }
  40. var aktJahr = Int32.Parse(Jahr);
  41. if (Int32.Parse(Monat) < ersterMonat) aktJahr--;
  42. if (keinJahresabschluss) aktJahr--;
  43. return new Periode(aktJahr + ersterMonat.ToString().PadLeft(2, '0'));
  44. }
  45. public string Vormonat (int verschiebung)
  46. {
  47. var monat = Int32.Parse(Monat);
  48. var jahr = Int32.Parse(Jahr);
  49. monat -= verschiebung;
  50. if (monat < 1)
  51. {
  52. monat += 12;
  53. jahr--;
  54. }
  55. return (jahr + monat.ToString().PadLeft(2, '0'));
  56. }
  57. public override string ToString()
  58. {
  59. return (Jahr + Monat);
  60. }
  61. public string Klartext
  62. {
  63. get { return (Monat + "/" + Jahr); }
  64. }
  65. }
  66. }