dmdb/model/Mv.cs

127 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using dezentrale.core;
namespace dezentrale.model
{
public class MvInvitedMember
{
public uint MemberNumber { get; set; }
public bool Invited { get; set; } = false;
public DateTime InvitationDate { get; set; }
public string AuthCode { get; set; } = "";
public bool AttendedMv { get; set; } = false;
[XmlIgnore] public string NumberString { get { return $"{MemberNumber:D3}"; } }
[XmlIgnore] public string InvitedString { get { return Invited ? "Yes" : "No"; } }
private Member member = null;
[XmlIgnore] public Member Member
{
get
{
if(member == null)
{
member = Program.members.Find(MemberNumber);
}
return member;
}
}
public MvInvitedMember() { }
public MvInvitedMember(Member m)
{
member = m;
MemberNumber = m.Number;
}
}
public class Mv : XmlData, IMvInvitationData
{
public enum MvStatus
{
InPreparation = 0,
InvitationSent = 1,
Started = 2,
Ended = 3,
Cancelled = 0xFF,
}
public MvStatus Status { get; set; }
public DateTime EventDate { get; set; }
public string Place { get; set; }
public string Agenda { get; set; }
public string InviteHeadline { get; set; }
public string InviteBody { get; set; }
public List<MvInvitedMember> Invited { get; set; } = new List<MvInvitedMember>();
public List<Blob> Attachments { get; set; } = new List<Blob>();
[XmlIgnore] public string AgendaNumberedString
{
get
{
string ret = "";
string[] AgendaPoints = Agenda.Split('\n');
for(int i = 1; i <= AgendaPoints.Length; i++)
{
if (ret.Length > 0) ret += '\n';
ret += $"{i}. {AgendaPoints[i-1]}";
}
return ret;
}
}
public FormMail BuildInvitation()
{
return null;
}
public void FillDefaults()
{
DateTime inTwoWeeks = DateTime.Now.Add(new TimeSpan(14, 0, 0, 0));
DateTime dtSuggested = inTwoWeeks.Hour < 15 ? inTwoWeeks : inTwoWeeks.Add(new TimeSpan(1, 0, 0, 0));
while (dtSuggested.DayOfWeek != DayOfWeek.Sunday)
dtSuggested = dtSuggested.Add(new TimeSpan(1, 0, 0, 0));
EventDate = new DateTime(dtSuggested.Year, dtSuggested.Month, dtSuggested.Day, 15, 0, 0);
Place = "Räumlichkeiten des dezentrale e.V., Dreilindenstr. 19, 04177 Leipzig";
Agenda = "Bestimmung des Versammlungsleiters sowie Protokollanten\n"
+ "Feststellung der ordnungsgemäßen Einberufung\n"
+ "Feststellung der Beschlussfähigkeit\n"
+ "Genehmigung der Tagesordnung\n"
+ "Genehmigung des Protokolls der letzten Mitgliederversammlung\n"
+ "Berichte des Vorstandes\n"
+ "Entlastung des Vorstandes\n"
+ "Neuwahl des Vorstandes\n"
+ "Verschiedenes";
InviteHeadline = "Einladung zur Mitgliederversammlung des dezentrale e.V. am {EventDate}";
InviteBody = "Hallo {EMailName},\n\nhiermit möchte ich Dich als Mitglied\n"
+ "des dezentrale e.V. zur Mitgliederversammlung einladen.\n\n"
+ "Ort: {Place}\n"
+ "Datum und Uhrzeit: {EventDate}\n"
+ "Dein Authentifizierungscode: {MvAuthenticationCode}\n\n"
+ "Agenda:\n-------\n"
+ "{AgendaNumberedString}\n\n"
+ "Bitte denkt daran, dass für die Beschlussfähigkeit 51% der regulären Mitglieder vonnöten sind.\n\n"
+ "Liebe Grüße,\n\n\n"
+ $"{Program.config.LocalUser}";
}
public FormMail GetInvitationMail(Member m = null, string authCode = null)
{
FormMail fm = new FormMail()
{
Subject = this.InviteHeadline,
Body = this.InviteBody,
};
fm = fm.ReplaceReflect(this);
if(m != null) fm = fm.ReplaceReflect(m);
return fm;
}
}
}