349 lines
14 KiB
C#
349 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
using dezentrale.core;
|
|
using dezentrale.model;
|
|
using dezentrale.model.money;
|
|
|
|
namespace dezentrale.view
|
|
{
|
|
public class frmMain : Form
|
|
{
|
|
private LVMembers lstMembers;
|
|
private LVMoneyTransfers mtv;
|
|
|
|
private void BuildMoneyTransfers(Control parent)
|
|
{
|
|
parent.Controls.Add(mtv = new LVMoneyTransfers() { Dock = DockStyle.Fill, });
|
|
if (Program.MoneyTransfersLoaded) mtv.LoadFromList(Program.MoneyTransfers.Entries);
|
|
else mtv.LoadRequest += (sender, e) => { e.Transfers = Program.MoneyTransfers.Entries; };
|
|
}
|
|
|
|
public frmMain()
|
|
{
|
|
this.SuspendLayout();
|
|
this.Text = $"dezentrale-members Version {Program.VersionString}";
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
this.Size = new Size(640, 480);
|
|
|
|
this.Menu = new MainMenu()
|
|
{
|
|
MenuItems =
|
|
{
|
|
new MenuItem("File")
|
|
{ MenuItems = {
|
|
new MenuItem("&Configuration...", mnuMain_File_Configuration) { Enabled = true },
|
|
new MenuItem("-"),
|
|
new MenuItem("&Export database", mnuMain_File_Export),
|
|
new MenuItem("&Import database", mnuMain_File_Import),
|
|
new MenuItem("-"),
|
|
new MenuItem("&Quit", mnuMain_File_Quit),
|
|
} },
|
|
new MenuItem("Members")
|
|
{ MenuItems = {
|
|
new MenuItem("&Add new member", mnuMain_Members_Add),
|
|
new MenuItem("Cronjob all", lstMembers_CronjobAll),
|
|
new MenuItem("-"),
|
|
#if DEBUG
|
|
new MenuItem("Generate Testdata", mnuMain_Members_Generate_Testdata),
|
|
new MenuItem("-"),
|
|
#endif
|
|
new MenuItem("Show numeric info", lstMembers_mnuMain_Members_ShowInfo),
|
|
} },
|
|
new MenuItem("Payments")
|
|
{ MenuItems = {
|
|
new MenuItem("&Add new MoneyTransfer", mnuMain_Payments_Add) { Enabled = true },
|
|
new MenuItem("Process CSV...", mnuMain_Payments_ProcessCSV),
|
|
} },
|
|
new MenuItem("Help")
|
|
{ MenuItems = {
|
|
new MenuItem("&About", mnuMain_Help_About),
|
|
} }
|
|
}
|
|
};
|
|
|
|
TabPage tabMembers = new TabPage("Members");
|
|
|
|
tabMembers.Controls.Add(lstMembers = new LVMembers() { Dock = DockStyle.Fill });
|
|
//lstMembers.AddMenuItem("Add new member", lstMembers_Add);
|
|
lstMembers.AddMenuItem("Edit selected member", lstMembers_Edit);
|
|
lstMembers.AddMenuItem("Delete selected member", lstMembers_Delete);
|
|
lstMembers.AddMenuItem("Add cash payment to member", lstMembers_AddCashTransfer);
|
|
lstMembers.AddMenuItem("-", null);
|
|
lstMembers.AddMenuItem("Cronjob selected member", lstMembers_CronjobSelected);
|
|
//lstMembers.AddMenuItem("Cronjob checked ones", lstMembers_CronjobChecked);
|
|
lstMembers.AddMenuItem("Cronjob all", lstMembers_CronjobAll);
|
|
lstMembers.AddMenuItem("-", null);
|
|
lstMembers.AddMenuItem("Send Testmail to member", lstMembers_TestMail);
|
|
//TBD: "Selected users missed an MV"
|
|
|
|
//lstMembers.AddMenuItem("Main Settings", null);
|
|
lstMembers.DoubleClick += lstMembers_Edit;
|
|
|
|
TabPage tabMoneyTransfers = new TabPage("MoneyTransfers");
|
|
BuildMoneyTransfers(tabMoneyTransfers);
|
|
|
|
this.Controls.Add(new TabControl()
|
|
{
|
|
Dock = DockStyle.Fill,
|
|
TabPages = { tabMembers, tabMoneyTransfers },
|
|
});
|
|
this.ResumeLayout(false);
|
|
|
|
//Fill list with data from members
|
|
lstMembers.LoadFromList(Program.members.Entries);
|
|
}
|
|
|
|
private void mnuMain_File_Configuration(object sender, EventArgs e)
|
|
{
|
|
frmConfiguration frmConfig = new frmConfiguration();
|
|
frmConfig.ShowDialog();
|
|
if (frmConfig.DialogResult == DialogResult.OK)
|
|
{
|
|
frmConfig.FillAndSaveConfig();
|
|
if(frmConfig.KeylockCombiChanged && Program.config.Smtp.Enabled)
|
|
{
|
|
DialogResult dr = MessageBox.Show("You've changed the keylock combination.\n Do you want to send an E-Mail to every active member to inform them?", "Keylock-Combi changed", MessageBoxButtons.YesNo);
|
|
if (dr == DialogResult.Yes)
|
|
{
|
|
FormMail keylockChanged = FormMail.GenerateKeylockChanged().ReplaceReflect(Program.config);
|
|
foreach (Member m in Program.members.Entries)
|
|
{
|
|
if (m.Status != Member.eStatus.Active) continue;
|
|
m.StartLogEvent("New keylock code", LogEvent.eEventType.EMail);
|
|
m.CurrentLog.SubEvents.Add(keylockChanged.Send(m));
|
|
m.SaveToFile();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
private void mnuMain_File_Export(object sender, EventArgs e)
|
|
{
|
|
ExportProcess export = new ExportProcess()
|
|
{
|
|
ImportExportSettings = Program.config.ImportExport,
|
|
MemberDir = Program.config.DbDirectory,
|
|
OutputDir = Program.DmDirectory,
|
|
};
|
|
frmProcessWithLog frmImport = new frmProcessWithLog(export, false);
|
|
frmImport.ShowDialog();
|
|
}
|
|
|
|
private void mnuMain_File_Import(object sender, EventArgs e)
|
|
{
|
|
DialogResult dr = MessageBox.Show("Warning\nImporting database from external source will overwrite all\nlocal changes! Really import?", "Overwrite local version of the database?", MessageBoxButtons.YesNo);
|
|
if(dr == DialogResult.Yes)
|
|
{
|
|
ImportProcess import = new ImportProcess()
|
|
{
|
|
ImportExportSettings = Program.config.ImportExport,
|
|
MemberDir = Program.config.DbDirectory,
|
|
InputDir = Program.DmDirectory,
|
|
};
|
|
frmProcessWithLog frmImport = new frmProcessWithLog(import, true);
|
|
dr = frmImport.ShowDialog();
|
|
MessageBox.Show("DialogResult=" + dr);
|
|
|
|
if (dr == DialogResult.Yes)
|
|
{
|
|
if (Program.LoadFiles() != 0)
|
|
{
|
|
MessageBox.Show("Error while loading imported files.\nProgram will close now.");
|
|
this.Close();
|
|
}
|
|
lstMembers.LoadFromList(Program.members.Entries);
|
|
mtv.ClearList();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void mnuMain_File_Quit(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void mnuMain_Members_Add(object sender, EventArgs e)
|
|
{
|
|
Member m = Program.members.CreateMember(false);
|
|
frmEditEntry edit = new frmEditEntry(m, true);
|
|
edit.ShowDialog();
|
|
if (edit.DialogResult == DialogResult.OK)
|
|
{
|
|
//the edit window already updated the data in the member object
|
|
//but it is not added to the data list yet.
|
|
Program.members.Entries.Add(m);
|
|
List<Member> toSave = new List<Member>() { m };
|
|
MemberList.SaveToFiles(toSave);
|
|
lstMembers.AddEntry(m);
|
|
}
|
|
}
|
|
#if DEBUG
|
|
private void mnuMain_Members_Generate_Testdata(object sender, EventArgs e)
|
|
{
|
|
if (Program.members.Entries.Count > 0)
|
|
{
|
|
DialogResult dr = MessageBox.Show(this, $"Generating testdata will overwrite the current member list.\nUse this on a test system only!\n Really overwrite current member list?", "Really overwrite list?", MessageBoxButtons.YesNo);
|
|
if (dr == DialogResult.No) return;
|
|
}
|
|
Program.members.GenerateTestData();
|
|
lstMembers.LoadFromList(Program.members.Entries);
|
|
}
|
|
#endif
|
|
|
|
private void lstMembers_mnuMain_Members_ShowInfo(object sender, EventArgs e)
|
|
{
|
|
MessageBox.Show(new MemberReport().Body);
|
|
}
|
|
|
|
private void mnuMain_Payments_Add(object sender, EventArgs e)
|
|
{
|
|
frmMoneyTransfer addMoney = new frmMoneyTransfer();
|
|
addMoney.ShowDialog();
|
|
DialogResult dr = addMoney.DialogResult;
|
|
if (dr == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
MoneyTransfer mt = addMoney.FillMoneyTransfer();
|
|
|
|
if (mt.MemberNumber != 0)
|
|
{
|
|
Member m = Program.members.Find(mt.MemberNumber);
|
|
m.ApplyMoneyTransfer(mt);
|
|
mt.AssignFixed = true;
|
|
|
|
//m.SaveToFile(); //automaticly saved in ApplyMoneyTransfer()
|
|
}
|
|
Program.MoneyTransfers.AddEntry(mt);
|
|
Program.MoneyTransfers.SaveToFile();
|
|
} catch(Exception ex)
|
|
{
|
|
MessageBox.Show($"Error while storing MoneyTransfer: {ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void mnuMain_Payments_ProcessCSV(object sender, EventArgs e)
|
|
{
|
|
OpenFileDialog ofd = new OpenFileDialog()
|
|
{
|
|
Filter = "Spaßkasse-CSV-Dateien (*.csv)|*.csv;*.CSV|Alle Dateien (*.*)|*.*",
|
|
};
|
|
DialogResult dr = ofd.ShowDialog();
|
|
//ofd.FilterIndex
|
|
if (dr == DialogResult.OK)
|
|
ProcessCsv.ProcessCSV(ofd.FileName);
|
|
}
|
|
|
|
private void mnuMain_Help_About(object sender, EventArgs e)
|
|
{
|
|
MessageBox.Show("mnuMain_Help_About");
|
|
}
|
|
|
|
private void CronjobMember(Member m)
|
|
{
|
|
if (m != null)
|
|
{
|
|
Cronjob.Run(m);
|
|
lstMembers.UpdateEntry(m);
|
|
}
|
|
}
|
|
private void lstMembers_CronjobSelected(object sender, EventArgs e)
|
|
{
|
|
Member m = lstMembers.GetFirstSelectedItem();
|
|
CronjobMember(m);
|
|
}
|
|
private void lstMembers_CronjobChecked(object sender, EventArgs e)
|
|
{
|
|
lstMembers.SuspendLayout();
|
|
foreach (Member m in lstMembers.GetCheckedItems()) CronjobMember(m);
|
|
lstMembers.ResumeLayout(false);
|
|
}
|
|
private void lstMembers_CronjobAll(object sender, EventArgs e)
|
|
{
|
|
lstMembers.SuspendLayout();
|
|
//foreach (Member m in Program.members.Entries) CronjobMember(m);
|
|
Cronjob.Run();
|
|
foreach (Member m in Program.members.Entries) lstMembers.UpdateEntry(m);
|
|
lstMembers.ResumeLayout(false);
|
|
}
|
|
|
|
private void lstMembers_TestMail(object sender, EventArgs e)
|
|
{
|
|
Member m = lstMembers.GetFirstSelectedItem();
|
|
m?.TestMail();
|
|
}
|
|
|
|
private void lstMembers_Edit(object sender, EventArgs e)
|
|
{
|
|
Member m = lstMembers.GetFirstSelectedItem();
|
|
if (m != null)
|
|
{
|
|
frmEditEntry edit = new frmEditEntry(m);
|
|
|
|
bool mtvLoadedOld = Program.MoneyTransfersLoaded;
|
|
|
|
edit.ShowDialog();
|
|
|
|
if (!mtvLoadedOld && Program.MoneyTransfersLoaded) mtv.LoadFromList(Program.MoneyTransfers.Entries);
|
|
|
|
if (edit.DialogResult == DialogResult.OK)
|
|
{
|
|
//the edit window already updated the data in the member object
|
|
lstMembers.UpdateEntry(m);
|
|
}
|
|
}
|
|
}
|
|
private void lstMembers_Delete(object sender, EventArgs e)
|
|
{
|
|
Member m = lstMembers.GetFirstSelectedItem();
|
|
if (m != null)
|
|
{
|
|
DialogResult dr = MessageBox.Show(this, $"Deleting a member cannot be undone!\nDo you really want to delete member {m.Number:D3} ({m.Nickname})?", "Really delete member?", MessageBoxButtons.YesNo);
|
|
if(dr == DialogResult.Yes)
|
|
{
|
|
try
|
|
{
|
|
if (!Program.members.Remove(m)) throw new Exception($"Program.members.Remove({m}) returned false.");
|
|
} catch(Exception ex)
|
|
{
|
|
MessageBox.Show($"Cannot remove member:\n{ex.Message}");
|
|
return;
|
|
}
|
|
lstMembers.RemoveEntry(m);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void lstMembers_AddCashTransfer(object sender, EventArgs e)
|
|
{
|
|
Member m = lstMembers.GetFirstSelectedItem();
|
|
if (m != null)
|
|
{
|
|
//MoneyTransfer ct = new CashTransfer();
|
|
CashTransfer ct = new CashTransfer();
|
|
ct.MemberNumber = m.Number;
|
|
ct.TransferType = MoneyTransfer.eTransferType.MembershipPayment;
|
|
ct.AssignFixed = true;
|
|
frmMoneyTransfer addMoney = new frmMoneyTransfer(ct);
|
|
addMoney.ShowDialog();
|
|
DialogResult dr = addMoney.DialogResult;
|
|
if (dr == DialogResult.OK)
|
|
{
|
|
addMoney.FillMoneyTransfer();
|
|
//MoneyTransfer mt = addMoney.GetMoneyTransfer();
|
|
m.ApplyMoneyTransfer(ct);
|
|
//m.SaveToFile(); //automaticly saved in ApplyMoneyTransfer()
|
|
//ct.AssignFixed = true;
|
|
Program.MoneyTransfers.AddEntry(ct);
|
|
Program.MoneyTransfers.SaveToFile();
|
|
lstMembers.UpdateEntry(m);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|