dmdb/view/frmMain.cs

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);
}
}
}
}
}