dmdb/model/MemberList.cs

216 lines
8.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace dezentrale.model
{
public class MemberList
{
public List<Member> Entries { get; set; } = new List<Member>();
public uint GetFreeNumber()
{
//Note: This assumes a sorted list in Entries.
if (Entries.Count < 1) return 1;
//uint ret =
return Entries[Entries.Count - 1].Number + 1;
//return ret > ret2 ? ret : ret2;
}
public Member CreateMember(bool addToList = false)
{
Member m = new Member(GetFreeNumber());
if(addToList) Entries.Add(m);
return m;
}
public Member Find(uint number)
{
return Entries.Find(x => x.Number == number);
}
public Member Find(Member.eRole role)
{
return Entries.Find(x => x.Role == role);
}
public bool Remove(Member m)
{
if (m == null) return false;
if (m.Role != Member.eRole.Normal)
return false; //throw new Exception("Role is Vorstand!");
m.Status = Member.eStatus.Deleted;
return true;
}
public static MemberList LoadFromFiles(string[] memberFiles)
{
MemberList ml = new MemberList();
foreach (string file in memberFiles)
{
ml.Entries.Add((Member)XmlData.LoadFromFile(file, typeof(Member)));
}
ml.Entries.Sort();
return ml;
}
public static bool SaveToFiles(List<Member> entries = null, bool changedOnly = false)
{
if (entries == null) entries = Program.members.Entries;
foreach (Member m in entries)
{
if (!m.SaveToFile()) return false;
}
return true;
}
#if DEBUG
public void GenerateTestData()
{
Entries.Clear();
Member m;
try
{
//the brackets are unnecessary but keep everything tidy.
m = CreateMember(true);
{
m.SuppressLogging = true;
m.Role = Member.eRole.Schatzmeister;
m.Type = Member.eType.Regulaer;
m.Status = Member.eStatus.Active;
//OpenPayments
//Log
m.Remarks = "riecht nach Knoblauch";
m.MvMissCounter = 0;
m.Nickname = "DoeJohnz";
m.FirstName = "John";
m.LastName = "Doe";
m.Street = "Homestreet";
m.HouseNumber = "123";
m.Zipcode = "12345";
m.City = "Musterstadt";
m.CountryCode = Country.eCountry.Germany;
m.Birthday = new DateTime(1980, 1, 1);
m.EMail = "john.doe@example.com";
m.PgpFingerprint = "";
m.MvInvitationByPost = false;
m.SpawnDate = new DateTime(2019, 6, 1);
m.PaymentClass = Member.ePaymentClass.Reduced;
m.PaymentAmount = 995;
m.MemberFormDate = new DateTime(2019, 5, 1);
m.SuppressLogging = false;
}
m = CreateMember(true);
{
m.SuppressLogging = true;
m.Role = Member.eRole.Vorstandsvorsitzender;
m.Type = Member.eType.Regulaer;
m.Status = Member.eStatus.Active;
m.Remarks = "";
m.MvMissCounter = 0;
m.Nickname = "putin";
m.FirstName = "Vladimir";
m.LastName = "Putin";
m.Street = "Am Kreml";
m.HouseNumber = "1a";
m.Zipcode = "12345";
m.City = "Moskau";
m.CountryCode = Country.eCountry.RussianFederation;
m.Birthday = new DateTime(1960, 12, 24);
m.EMail = "h4x0r@kgb.ru@example.com";
m.PgpFingerprint = "encrypted ;-)";
m.MvInvitationByPost = false;
m.SpawnDate = new DateTime(2019, 6, 1);
m.PaymentClass = Member.ePaymentClass.Normal;
m.PaymentAmount = 6400;
m.MemberFormDate = new DateTime(2019, 5, 1);
m.SuppressLogging = false;
}
m = CreateMember(true);
{
m.SuppressLogging = true;
m.Role = Member.eRole.Normal;
m.Type = Member.eType.Regulaer;
m.Status = Member.eStatus.Uninitialized;
m.Remarks = "";
m.MvMissCounter = 0;
m.Nickname = "AW23";
m.FirstName = "Adam";
m.LastName = "Weishaupt";
m.Street = "Parkallee";
m.HouseNumber = "13";
m.Zipcode = "99867";
m.City = "Gotha";
m.CountryCode = Country.eCountry.Germany;
m.Birthday = new DateTime(1900, 1, 1);// = new DateTime(1748, 2, 6);
m.EMail = "";
m.PgpFingerprint = "";
m.MvInvitationByPost = false;
m.SpawnDate = new DateTime(2019, 5, 23);
m.PaymentClass = Member.ePaymentClass.Normal;
m.PaymentAmount = 2305;
m.MemberFormDate = new DateTime(2019, 5, 23);
m.SuppressLogging = false;
}
m = CreateMember(true);
{
m.SuppressLogging = true;
m.Role = Member.eRole.Normal;
m.Type = Member.eType.Regulaer;
m.Status = Member.eStatus.Greeted;
m.Remarks = "";
m.MvMissCounter = 0;
m.Nickname = "HeinzQuetschab";
m.FirstName = "Heinz";
m.LastName = "Ketchup";
m.Street = "";
m.HouseNumber = "";
m.Zipcode = "";
m.City = "Pittsburgh";
m.CountryCode = Country.eCountry.UnitedStatesOfAmerica;
m.Birthday = new DateTime(1900, 1, 1);// = new DateTime(1876, 12, 31);
m.EMail = "quetschab@example.com";
m.PgpFingerprint = "";
m.MvInvitationByPost = false;
m.SpawnDate = new DateTime(2019, 5, 1);
m.PaymentClass = Member.ePaymentClass.Normal;
m.PaymentAmount = 3200;
m.MemberFormDate = new DateTime(2019, 5, 1);
m.SuppressLogging = false;
}
m = CreateMember(true);
{
m.SuppressLogging = true;
m.Role = Member.eRole.Normal;
m.Type = Member.eType.Regulaer;
m.Remarks = "";
m.MvMissCounter = 1;
m.Nickname = "Joshua";
m.FirstName = "Keiner";
m.LastName = "Niemand";
m.Street = "str.";
m.HouseNumber = "1";
m.Zipcode = "1";
m.City = "Musterstadt";
m.CountryCode = Country.eCountry.Germany;
m.Birthday = new DateTime(1980, 1, 1);
m.EMail = "joshua@wopr.gov@example.com";
m.PgpFingerprint = "";
m.MvInvitationByPost = false;
m.SpawnDate = new DateTime(2019, 5, 1);
m.PaymentClass = Member.ePaymentClass.Normal;
m.PaymentAmount = 3200;
m.MemberFormDate = new DateTime(2019, 5, 1);
m.SuppressLogging = false;
}
SaveToFiles();
} catch(Exception ex)
{
throw ex;
}
}
#endif
}
}